aboutsummaryrefslogtreecommitdiffstats
path: root/meta/classes/package_ipk.bbclass
AgeCommit message (Expand)Author
2016-07-25package_deb.bbclass/package_ipk.bbclass: sort RPROVIDESRobert Yang
2016-06-15package_ipk: restore cwd after packagingRoss Burton
2016-06-02classes/lib: Convert to use python3 octal syntaxRichard Purdie
2016-03-11gpg_sign: add local ipk package signing functionalityIoan-Adrian Ratiu
2015-12-09package_ipk: allow to specify OPKG_ARGS in local.confVladimir Zapolskiy
2015-08-30package_*.bbclass: Ensure OVERRIDES doesn't change sstate signatureRichard Purdie
2015-07-20package_ipk/deb: Drop version information from RPROVIDESRichard Purdie
2015-06-23meta: Add explict getVar param for (non) expansionRichard Purdie
2015-06-11package_ipk/deb/rpm: Improve OVERRIDES handlingRichard Purdie
2015-02-19packaging: allow globs in CONFFILESChen Qi
2014-10-06package_ipk.bbclass: Fix SRC_URI whitespace handlingMark Hatle
2014-06-17package_ipk.bbclass: Support hierarchical feedPaul Barker
2014-03-28package_*.bbclass: Simplify addtaskRichard Purdie
2014-02-24package: Drop do_package_write taskRichard Purdie
2014-02-14package_*.bbclass: remove references to the old bash indexing routinesLaurentiu Palcu
2014-02-11conf/bitbake.conf: default HOMEPAGE to blank instead of unknownPaul Eggleton
2014-02-11Cleanup image,rootfs_ipk,package_ipk bbclass filesLaurentiu Palcu
2014-02-11package_(deb|ipk).bbclass: remove the stamp when creating package from cacheLaurentiu Palcu
2014-01-28package_{ipk, deb, rpm}.bbclass: support additional user-defined metadata2013-07-09package_ipk.bbclass: make DESCRIPTION support newlineRobert Yang
2013-06-07package_*.bbclass: Drop fakeroot from setscene callsRichard Purdie
2013-05-09class/lib: Fix up various file access methodsRichard Purdie
2013-04-18package_ipk: Ensure the status file existsRichard Purdie
2013-03-23package/populate_sdk: Move functions from package_* to populate_sdk_*Richard Purdie
2013-03-23classes/buildhistory: implement history collection for SDKsPaul Eggleton
2013-03-22package_{ipk, deb, rpm}: drop the TARGET_OS conditionalChristopher Larson
2013-02-17package_rpm/dev/ipk/tar: Drop unused functionsRichard Purdie
2013-02-17package_rpm/deb/ipk: Error if we don't find packages when creating the packag...Richard Purdie
2013-02-15package_ipk: check CONFFILES exist before adding them to metadataRoss Burton
2013-02-06package_ipk, rootfs_ipk: remove the "set -x"2012-12-07rootfs_ipk/package_ipk: Simplify opkg commandline option variablesRichard Purdie
2012-12-03rootfs_ipk, package_ipk: drop --force-overwriteMartin Jansa
2012-10-02opkg: Convert select-higher-version option to prefer-arch-to-versionRichard Purdie
2012-10-02classes: Update to use corrected bb.utils.explode_dep_versions2 APIRichard Purdie
2012-10-02package_deb/ipk: Remap < and > to << and >>Mark Hatle
2012-09-26package_ipk: Remove spurious '-i' in grep command for log_checkPhil Blundell
2012-09-20Replace "echo -e" with "printf" to have the same behavior in dash or bashAndrei Gherzan
2012-08-21meta/classes: Various python whitespace fixesRichard Purdie
2012-07-19package_ipk.bbclass: Fix python whitespaceRichard Purdie
2012-07-03Fix manual log file pathsMark Hatle
2012-05-30meta: replace os.system with subprocess.callRobert Yang
2012-05-11package.bbclass: Drop EXPORT_FUNCTIONS use against mapping_rename_hookRichard Purdie
span class="p">) or None if self.taskwhitelist: self.twl = re.compile(self.taskwhitelist) else: self.twl = None def _build_data(self, fn, d): tasklist, gendeps = bb.data.generate_dependencies(d) taskdeps = {} basehash = {} lookupcache = {} for task in tasklist: data = d.getVar(task, False) lookupcache[task] = data newdeps = gendeps[task] seen = set() while newdeps: nextdeps = newdeps seen |= nextdeps newdeps = set() for dep in nextdeps: if dep in self.basewhitelist: continue newdeps |= gendeps[dep] newdeps -= seen alldeps = seen - self.basewhitelist for dep in sorted(alldeps): if dep in lookupcache: var = lookupcache[dep] else: var = d.getVar(dep, False) lookupcache[dep] = var if var: data = data + var if data is None: bb.error("Task %s from %s seems to be empty?!" % (task, fn)) self.basehash[fn + "." + task] = hashlib.md5(data).hexdigest() taskdeps[task] = sorted(alldeps) self.taskdeps[fn] = taskdeps self.gendeps[fn] = gendeps self.lookupcache[fn] = lookupcache return taskdeps def finalise(self, fn, d, variant): if variant: fn = "virtual:" + variant + ":" + fn taskdeps = self._build_data(fn, d) #Slow but can be useful for debugging mismatched basehashes #for task in self.taskdeps[fn]: # self.dump_sigtask(fn, task, d.getVar("STAMP", True), False) for task in taskdeps: d.setVar("BB_BASEHASH_task-%s" % task, self.basehash[fn + "." + task]) def get_taskhash(self, fn, task, deps, dataCache): k = fn + "." + task data = dataCache.basetaskhash[k] self.runtaskdeps[k] = [] for dep in sorted(deps): # We only manipulate the dependencies for packages not in the whitelist if self.twl and not self.twl.search(dataCache.pkg_fn[fn]): # then process the actual dependencies dep_fn = re.search("(?P<fn>.*)\..*", dep).group('fn') if self.twl.search(dataCache.pkg_fn[dep_fn]): continue if dep not in self.taskhash: bb.fatal("%s is not in taskhash, caller isn't calling in dependency order?", dep) data = data + self.taskhash[dep] self.runtaskdeps[k].append(dep) h = hashlib.md5(data).hexdigest() self.taskhash[k] = h #d.setVar("BB_TASKHASH_task-%s" % task, taskhash[task]) return h def set_taskdata(self, hashes, deps): self.runtaskdeps = deps self.taskhash = hashes def dump_sigtask(self, fn, task, stampbase, runtime): k = fn + "." + task if runtime == "customfile": sigfile = stampbase elif runtime: sigfile = stampbase + "." + task + ".sigdata" + "." + self.taskhash[k] else: sigfile = stampbase + "." + task + ".sigbasedata" + "." + self.basehash[k] bb.utils.mkdirhier(os.path.dirname(sigfile)) data = {} data['basewhitelist'] = self.basewhitelist data['taskwhitelist'] = self.taskwhitelist data['taskdeps'] = self.taskdeps[fn][task] data['basehash'] = self.basehash[k] data['gendeps'] = {} data['varvals'] = {} data['varvals'][task] = self.lookupcache[fn][task] for dep in self.taskdeps[fn][task]: if dep in self.basewhitelist: continue data['gendeps'][dep] = self.gendeps[fn][dep] data['varvals'][dep] = self.lookupcache[fn][dep] if runtime: data['runtaskdeps'] = self.runtaskdeps[k] data['runtaskhashes'] = {} for dep in data['runtaskdeps']: data['runtaskhashes'][dep] = self.taskhash[dep] p = pickle.Pickler(file(sigfile, "wb"), -1) p.dump(data) def dump_sigs(self, dataCache): for fn in self.taskdeps: for task in self.taskdeps[fn]: k = fn + "." + task if k not in self.taskhash: continue if dataCache.basetaskhash[k] != self.basehash[k]: bb.error("Bitbake's cached basehash does not match the one we just generated (%s)!" % k) bb.error("The mismatched hashes were %s and %s" % (dataCache.basetaskhash[k], self.basehash[k])) self.dump_sigtask(fn, task, dataCache.stamp[fn], True) class SignatureGeneratorBasicHash(SignatureGeneratorBasic): name = "basichash" def stampfile(self, stampbase, fn, taskname, extrainfo): if taskname != "do_setscene" and taskname.endswith("_setscene"): k = fn + "." + taskname[:-9] else: k = fn + "." + taskname h = self.taskhash[k] return ("%s.%s.%s.%s" % (stampbase, taskname, h, extrainfo)).rstrip('.') def dump_this_task(outfile, d): import bb.parse fn = d.getVar("BB_FILENAME", True) task = "do_" + d.getVar("BB_CURRENTTASK", True) bb.parse.siggen.dump_sigtask(fn, task, outfile, "customfile") def compare_sigfiles(a, b): p1 = pickle.Unpickler(file(a, "rb")) a_data = p1.load() p2 = pickle.Unpickler(file(b, "rb")) b_data = p2.load() def dict_diff(a, b): sa = set(a.keys()) sb = set(b.keys()) common = sa & sb changed = set() for i in common: if a[i] != b[i]: changed.add(i) added = sa - sb removed = sb - sa return changed, added, removed if 'basewhitelist' in a_data and a_data['basewhitelist'] != b_data['basewhitelist']: print "basewhitelist changed from %s to %s" % (a_data['basewhitelist'], b_data['basewhitelist']) if 'taskwhitelist' in a_data and a_data['taskwhitelist'] != b_data['taskwhitelist']: print "taskwhitelist changed from %s to %s" % (a_data['taskwhitelist'], b_data['taskwhitelist']) if a_data['taskdeps'] != b_data['taskdeps']: print "Task dependencies changed from %s to %s" % (sorted(a_data['taskdeps']), sorted(b_data['taskdeps'])) if a_data['basehash'] != b_data['basehash']: print "basehash changed from %s to %s" % (a_data['basehash'], b_data['basehash']) changed, added, removed = dict_diff(a_data['gendeps'], b_data['gendeps']) if changed: for dep in changed: print "List of dependencies for variable %s changed from %s to %s" % (dep, a_data['gendeps'][dep], b_data['gendeps'][dep]) if added: for dep in added: print "Dependency on variable %s was added" % (dep) if removed: for dep in removed: print "Dependency on Variable %s was removed" % (dep) changed, added, removed = dict_diff(a_data['varvals'], b_data['varvals']) if changed: for dep in changed: print "Variable %s value changed from %s to %s" % (dep, a_data['varvals'][dep], b_data['varvals'][dep]) if 'runtaskhashes' in a_data and 'runtaskhashes' in b_data: changed, added, removed = dict_diff(a_data['runtaskhashes'], b_data['runtaskhashes']) if added: for dep in added: print "Dependency on task %s was added" % (dep) if removed: for dep in removed: print "Dependency on task %s was removed" % (dep) if changed: for dep in changed: print "Hash for dependent task %s changed from %s to %s" % (dep, a_data['runtaskhashes'][dep], b_data['runtaskhashes'][dep]) elif 'runtaskdeps' in a_data and 'runtaskdeps' in b_data and sorted(a_data['runtaskdeps']) != sorted(b_data['runtaskdeps']): print "Tasks this task depends on changed from %s to %s" % (sorted(a_data['runtaskdeps']), sorted(b_data['runtaskdeps'])) def dump_sigfile(a): p1 = pickle.Unpickler(file(a, "rb")) a_data = p1.load() print "basewhitelist: %s" % (a_data['basewhitelist']) print "taskwhitelist: %s" % (a_data['taskwhitelist']) print "Task dependencies: %s" % (sorted(a_data['taskdeps'])) print "basehash: %s" % (a_data['basehash']) for dep in a_data['gendeps']: print "List of dependencies for variable %s is %s" % (dep, a_data['gendeps'][dep]) for dep in a_data['varvals']: print "Variable %s value is %s" % (dep, a_data['varvals'][dep]) if 'runtaskdeps' in a_data: print "Tasks this task depends on: %s" % (a_data['runtaskdeps']) if 'runtaskhashes' in a_data: for dep in a_data['runtaskhashes']: print "Hash for dependent task %s is %s" % (dep, a_data['runtaskhashes'][dep])