summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--meta/classes/patch.bbclass59
1 files changed, 36 insertions, 23 deletions
diff --git a/meta/classes/patch.bbclass b/meta/classes/patch.bbclass
index b8207680b..7ba8abb72 100644
--- a/meta/classes/patch.bbclass
+++ b/meta/classes/patch.bbclass
@@ -6,7 +6,7 @@ QUILTRCFILE ?= "${STAGING_BINDIR_NATIVE}/quiltrc"
PATCHDEPENDENCY = "${PATCHTOOL}-native:do_populate_sysroot"
python patch_do_patch() {
- import oe.patch
+ import oe.patch
src_uri = (bb.data.getVar('SRC_URI', d, 1) or '').split()
if not src_uri:
@@ -25,7 +25,7 @@ python patch_do_patch() {
"user": oe.patch.UserResolver,
}
- rcls = resolvermap[bb.data.getVar('PATCHRESOLVE', d, 1) or 'noop']
+ rcls = resolvermap[bb.data.getVar('PATCHRESOLVE', d, 1) or 'user']
s = bb.data.getVar('S', d, 1)
@@ -39,32 +39,44 @@ python patch_do_patch() {
workdir = bb.data.getVar('WORKDIR', d, 1)
for url in src_uri:
(type, host, path, user, pswd, parm) = bb.decodeurl(url)
- if not "patch" in parm:
- continue
-
- bb.fetch.init([url],d)
- url = bb.encodeurl((type, host, path, user, pswd, []))
- local = os.path.join('/', bb.fetch.localpath(url, d))
- # did it need to be unpacked?
- dots = os.path.basename(local).split(".")
- if dots[-1] in ['gz', 'bz2', 'Z']:
- unpacked = os.path.join(bb.data.getVar('WORKDIR', d),'.'.join(dots[0:-1]))
- else:
- unpacked = local
- unpacked = bb.data.expand(unpacked, d)
+ local = None
+ base, ext = os.path.splitext(os.path.basename(path))
+ if ext in ('.gz', '.bz2', '.Z'):
+ local = os.path.join(workdir, base)
+ ext = os.path.splitext(base)[1]
+
+ if "apply" in parm:
+ apply = parm["apply"]
+ if apply != "yes":
+ if apply != "no":
+ bb.msg.warn(None, "Unsupported value '%s' for 'apply' url param in '%s', please use 'yes' or 'no'" % (apply, url))
+ continue
+ #elif "patch" in parm:
+ #bb.msg.warn(None, "Deprecated usage of 'patch' url param in '%s', please use 'apply={yes,no}'" % url)
+ elif ext not in (".diff", ".patch"):
+ continue
- if "pnum" in parm:
- pnum = parm["pnum"]
+ if not local:
+ bb.fetch.init([url],d)
+ url = bb.encodeurl((type, host, path, user, pswd, []))
+ local = os.path.join('/', bb.fetch.localpath(url, d))
+ local = bb.data.expand(local, d)
+
+ if "striplevel" in parm:
+ striplevel = parm["striplevel"]
+ elif "pnum" in parm:
+ #bb.msg.warn(None, "Deprecated usage of 'pnum' url parameter in '%s', please use 'striplevel'" % url)
+ striplevel = parm["pnum"]
else:
- pnum = "1"
+ striplevel = '1'
if "pname" in parm:
pname = parm["pname"]
else:
- pname = os.path.basename(unpacked)
+ pname = os.path.basename(local)
- if "mindate" in parm or "maxdate" in parm:
+ if "mindate" in parm or "maxdate" in parm:
pn = bb.data.getVar('PN', d, 1)
srcdate = bb.data.getVar('SRCDATE_%s' % pn, d, 1)
if not srcdate:
@@ -106,16 +118,17 @@ python patch_do_patch() {
bb.note("Patch '%s' doesn't apply to revision" % pname)
continue
- bb.note("Applying patch '%s'" % pname)
+ bb.note("Applying patch '%s' (%s)" % (pname, oe.path.format_display(local, d)))
try:
- patchset.Import({"file":unpacked, "remote":url, "strippath": pnum}, True)
- resolver.Resolve()
+ patchset.Import({"file":local, "remote":url, "strippath": striplevel}, True)
except Exception:
import sys
raise bb.build.FuncFailed(str(sys.exc_value))
+ resolver.Resolve()
}
addtask patch after do_unpack
do_patch[dirs] = "${WORKDIR}"
do_patch[depends] = "${PATCHDEPENDENCY}"
+
EXPORT_FUNCTIONS do_patch