uclibc: remove obsolete patches for git version
[openembedded.git] / classes / patch.bbclass
blob7b0c44471a1fce91cd6ddb3ac5cffbe110124940
1 # Copyright (C) 2006  OpenedHand LTD
3 # Point to an empty file so any user's custom settings don't break things
4 QUILTRCFILE ?= "${STAGING_BINDIR_NATIVE}/quiltrc"
6 PATCHDEPENDENCY = "${PATCHTOOL}-native:do_populate_sysroot"
8 python patch_do_patch() {
9         import oe.patch
11         src_uri = (bb.data.getVar('SRC_URI', d, 1) or '').split()
12         if not src_uri:
13                 return
15         patchsetmap = {
16                 "patch": oe.patch.PatchTree,
17                 "quilt": oe.patch.QuiltTree,
18                 "git": oe.patch.GitApplyTree,
19         }
21         cls = patchsetmap[bb.data.getVar('PATCHTOOL', d, 1) or 'quilt']
23         resolvermap = {
24                 "noop": oe.patch.NOOPResolver,
25                 "user": oe.patch.UserResolver,
26         }
28         rcls = resolvermap[bb.data.getVar('PATCHRESOLVE', d, 1) or 'user']
30         s = bb.data.getVar('S', d, 1)
32         path = os.getenv('PATH')
33         os.putenv('PATH', bb.data.getVar('PATH', d, 1))
34         patchset = cls(s, d)
35         patchset.Clean()
37         resolver = rcls(patchset)
39         workdir = bb.data.getVar('WORKDIR', d, 1)
40         for url in src_uri:
41                 (type, host, path, user, pswd, parm) = bb.decodeurl(url)
43                 local = None
44                 base, ext = os.path.splitext(os.path.basename(path))
45                 if ext in ('.gz', '.bz2', '.Z'):
46                         local = os.path.join(workdir, base)
47                         ext = os.path.splitext(base)[1]
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
60                 if not local:
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)
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"]
71                 else:
72                         striplevel = '1'
74                 if "pname" in parm:
75                         pname = parm["pname"]
76                 else:
77                         pname = os.path.basename(local)
79                 if "mindate" in parm or "maxdate" in parm:
80                         pn = bb.data.getVar('PN', d, 1)
81                         srcdate = bb.data.getVar('SRCDATE_%s' % pn, d, 1)
82                         if not srcdate:
83                                 srcdate = bb.data.getVar('SRCDATE', d, 1)
85                         if srcdate == "now":
86                                 srcdate = bb.data.getVar('DATE', d, 1)
88                         if "maxdate" in parm and parm["maxdate"] < srcdate:
89                                 bb.note("Patch '%s' is outdated" % pname)
90                                 continue
92                         if "mindate" in parm and parm["mindate"] > srcdate:
93                                 bb.note("Patch '%s' is predated" % pname)
94                                 continue
97                 if "minrev" in parm:
98                         srcrev = bb.data.getVar('SRCREV', d, 1)
99                         if srcrev and srcrev < parm["minrev"]:
100                                 bb.note("Patch '%s' applies to later revisions" % pname)
101                                 continue
103                 if "maxrev" in parm:
104                         srcrev = bb.data.getVar('SRCREV', d, 1)         
105                         if srcrev and srcrev > parm["maxrev"]:
106                                 bb.note("Patch '%s' applies to earlier revisions" % pname)
107                                 continue
109                 bb.note("Applying patch '%s' (%s)" % (pname, oe.path.format_display(local, d)))
110                 try:
111                         patchset.Import({"file":local, "remote":url, "strippath": striplevel}, True)
112                 except Exception:
113                         import sys
114                         raise bb.build.FuncFailed(str(sys.exc_value))
115                 resolver.Resolve()
118 addtask patch after do_unpack
119 do_patch[dirs] = "${WORKDIR}"
120 do_patch[depends] = "${PATCHDEPENDENCY}"
122 EXPORT_FUNCTIONS do_patch