diff options
| -rw-r--r-- | meta/classes/patch.bbclass | 59 |
1 files changed, 36 insertions, 23 deletions
diff --git a/meta/classes/patch.bbclass b/meta/classes/patch.bbclass index b8207680ba..7ba8abb72c 100644 --- a/meta/classes/patch.bbclass +++ b/meta/classes/patch.bbclass | |||
| @@ -6,7 +6,7 @@ QUILTRCFILE ?= "${STAGING_BINDIR_NATIVE}/quiltrc" | |||
| 6 | PATCHDEPENDENCY = "${PATCHTOOL}-native:do_populate_sysroot" | 6 | PATCHDEPENDENCY = "${PATCHTOOL}-native:do_populate_sysroot" |
| 7 | 7 | ||
| 8 | python patch_do_patch() { | 8 | python patch_do_patch() { |
| 9 | import oe.patch | 9 | import oe.patch |
| 10 | 10 | ||
| 11 | src_uri = (bb.data.getVar('SRC_URI', d, 1) or '').split() | 11 | src_uri = (bb.data.getVar('SRC_URI', d, 1) or '').split() |
| 12 | if not src_uri: | 12 | if not src_uri: |
| @@ -25,7 +25,7 @@ python patch_do_patch() { | |||
| 25 | "user": oe.patch.UserResolver, | 25 | "user": oe.patch.UserResolver, |
| 26 | } | 26 | } |
| 27 | 27 | ||
| 28 | rcls = resolvermap[bb.data.getVar('PATCHRESOLVE', d, 1) or 'noop'] | 28 | rcls = resolvermap[bb.data.getVar('PATCHRESOLVE', d, 1) or 'user'] |
| 29 | 29 | ||
| 30 | s = bb.data.getVar('S', d, 1) | 30 | s = bb.data.getVar('S', d, 1) |
| 31 | 31 | ||
| @@ -39,32 +39,44 @@ python patch_do_patch() { | |||
| 39 | workdir = bb.data.getVar('WORKDIR', d, 1) | 39 | workdir = bb.data.getVar('WORKDIR', d, 1) |
| 40 | for url in src_uri: | 40 | for url in src_uri: |
| 41 | (type, host, path, user, pswd, parm) = bb.decodeurl(url) | 41 | (type, host, path, user, pswd, parm) = bb.decodeurl(url) |
| 42 | if not "patch" in parm: | ||
| 43 | continue | ||
| 44 | |||
| 45 | bb.fetch.init([url],d) | ||
| 46 | url = bb.encodeurl((type, host, path, user, pswd, [])) | ||
| 47 | local = os.path.join('/', bb.fetch.localpath(url, d)) | ||
| 48 | 42 | ||
| 49 | # did it need to be unpacked? | 43 | local = None |
| 50 | dots = os.path.basename(local).split(".") | 44 | base, ext = os.path.splitext(os.path.basename(path)) |
| 51 | if dots[-1] in ['gz', 'bz2', 'Z']: | 45 | if ext in ('.gz', '.bz2', '.Z'): |
| 52 | unpacked = os.path.join(bb.data.getVar('WORKDIR', d),'.'.join(dots[0:-1])) | 46 | local = os.path.join(workdir, base) |
| 53 | else: | 47 | ext = os.path.splitext(base)[1] |
| 54 | unpacked = local | 48 | |
| 55 | unpacked = bb.data.expand(unpacked, d) | 49 | if "apply" in parm: |
| 50 | apply = parm["apply"] | ||
| 51 | if apply != "yes": | ||
| 52 | if apply != "no": | ||
| 53 | bb.msg.warn(None, "Unsupported value '%s' for 'apply' url param in '%s', please use 'yes' or 'no'" % (apply, url)) | ||
| 54 | continue | ||
| 55 | #elif "patch" in parm: | ||
| 56 | #bb.msg.warn(None, "Deprecated usage of 'patch' url param in '%s', please use 'apply={yes,no}'" % url) | ||
| 57 | elif ext not in (".diff", ".patch"): | ||
| 58 | continue | ||
| 56 | 59 | ||
| 57 | if "pnum" in parm: | 60 | if not local: |
| 58 | pnum = parm["pnum"] | 61 | bb.fetch.init([url],d) |
| 62 | url = bb.encodeurl((type, host, path, user, pswd, [])) | ||
| 63 | local = os.path.join('/', bb.fetch.localpath(url, d)) | ||
| 64 | local = bb.data.expand(local, d) | ||
| 65 | |||
| 66 | if "striplevel" in parm: | ||
| 67 | striplevel = parm["striplevel"] | ||
| 68 | elif "pnum" in parm: | ||
| 69 | #bb.msg.warn(None, "Deprecated usage of 'pnum' url parameter in '%s', please use 'striplevel'" % url) | ||
| 70 | striplevel = parm["pnum"] | ||
| 59 | else: | 71 | else: |
| 60 | pnum = "1" | 72 | striplevel = '1' |
| 61 | 73 | ||
| 62 | if "pname" in parm: | 74 | if "pname" in parm: |
| 63 | pname = parm["pname"] | 75 | pname = parm["pname"] |
| 64 | else: | 76 | else: |
| 65 | pname = os.path.basename(unpacked) | 77 | pname = os.path.basename(local) |
| 66 | 78 | ||
| 67 | if "mindate" in parm or "maxdate" in parm: | 79 | if "mindate" in parm or "maxdate" in parm: |
| 68 | pn = bb.data.getVar('PN', d, 1) | 80 | pn = bb.data.getVar('PN', d, 1) |
| 69 | srcdate = bb.data.getVar('SRCDATE_%s' % pn, d, 1) | 81 | srcdate = bb.data.getVar('SRCDATE_%s' % pn, d, 1) |
| 70 | if not srcdate: | 82 | if not srcdate: |
| @@ -106,16 +118,17 @@ python patch_do_patch() { | |||
| 106 | bb.note("Patch '%s' doesn't apply to revision" % pname) | 118 | bb.note("Patch '%s' doesn't apply to revision" % pname) |
| 107 | continue | 119 | continue |
| 108 | 120 | ||
| 109 | bb.note("Applying patch '%s'" % pname) | 121 | bb.note("Applying patch '%s' (%s)" % (pname, oe.path.format_display(local, d))) |
| 110 | try: | 122 | try: |
| 111 | patchset.Import({"file":unpacked, "remote":url, "strippath": pnum}, True) | 123 | patchset.Import({"file":local, "remote":url, "strippath": striplevel}, True) |
| 112 | resolver.Resolve() | ||
| 113 | except Exception: | 124 | except Exception: |
| 114 | import sys | 125 | import sys |
| 115 | raise bb.build.FuncFailed(str(sys.exc_value)) | 126 | raise bb.build.FuncFailed(str(sys.exc_value)) |
| 127 | resolver.Resolve() | ||
| 116 | } | 128 | } |
| 117 | 129 | ||
| 118 | addtask patch after do_unpack | 130 | addtask patch after do_unpack |
| 119 | do_patch[dirs] = "${WORKDIR}" | 131 | do_patch[dirs] = "${WORKDIR}" |
| 120 | do_patch[depends] = "${PATCHDEPENDENCY}" | 132 | do_patch[depends] = "${PATCHDEPENDENCY}" |
| 133 | |||
| 121 | EXPORT_FUNCTIONS do_patch | 134 | EXPORT_FUNCTIONS do_patch |
