diff options
author | Joshua Lock <josh@linux.intel.com> | 2010-06-01 14:24:13 +0100 |
---|---|---|
committer | Joshua Lock <josh@linux.intel.com> | 2010-06-01 15:17:12 +0100 |
commit | 09536a7592307d4bb87e11c762bddb7ba7a3215a (patch) | |
tree | 2e4cda6d63ac4e4c79c8e213e334a5cd94e46045 /meta | |
parent | 1f2646981f17e09342ed3dcff6436f60fb8a800e (diff) | |
download | poky-09536a7592307d4bb87e11c762bddb7ba7a3215a.tar.gz |
patch.bbclass: Merge patch enhancements from OE by Chris Larson
Chris made some interesting changes to the patch handling in OE. Firstly the
patch and pnum parameters have been renamed, to better reflect their function,
to apply and striplevel. The apply parameter now takes either yes or no as its
value.
Therefore a patch line would be changed from:
file://some.patch;patch=1;pnum=2
to:
file://some.patch;apply=yes;striplevel=2
Secondly the apply parameter is inferred if not defined. Entries in SRC_URI
with diff or patch filename extensions will be automatically applied as patches
if the apply parameter is not set to no (or an unknown value).
Note: We have disabled the warnings when using the old style parameters for now
Signed-off-by: Joshua Lock <josh@linux.intel.com>
Diffstat (limited to 'meta')
-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 |