From patchwork Tue Apr 17 07:16:42 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [bitbake-devel, 1/3] bitbake: Retain order for __depends and __base_depends Date: Tue, 17 Apr 2012 07:16:42 -0000 From: Dongxiao Xu X-Patchwork-Id: 26025 Message-Id: <49da1e00e1a8a0b0b241942cc70cfc89be232a2a.1334646853.git.dongxiao.xu@intel.com> To: bitbake-devel@lists.openembedded.org Bitbake take seriously with variables order, therefore when setting values to __depends and __base_depends, we need to retain its order. Signed-off-by: Dongxiao Xu --- lib/bb/cache.py | 6 ++++-- lib/bb/cooker.py | 6 ++++-- lib/bb/parse/__init__.py | 12 ++++++++---- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/lib/bb/cache.py b/lib/bb/cache.py index 47e814b..a114582 100644 --- a/lib/bb/cache.py +++ b/lib/bb/cache.py @@ -391,12 +391,14 @@ class Cache(object): """Parse the specified filename, returning the recipe information""" infos = [] datastores = cls.load_bbfile(filename, appends, configdata) - depends = set() + depends = [] for variant, data in sorted(datastores.iteritems(), key=lambda i: i[0], reverse=True): virtualfn = cls.realfn2virtual(filename, variant) - depends |= (data.getVar("__depends", False) or set()) + for dep in (data.getVar("__depends", False) or []): + if dep not in depends: + depends.append(dep) if depends and not variant: data.setVar("__depends", depends) diff --git a/lib/bb/cooker.py b/lib/bb/cooker.py index dea0aad..51341fa 100644 --- a/lib/bb/cooker.py +++ b/lib/bb/cooker.py @@ -680,8 +680,10 @@ class BBCooker: # Generate a list of parsed configuration files by searching the files # listed in the __depends and __base_depends variables with a .conf suffix. conffiles = [] - dep_files = self.configuration.data.getVar('__depends') or set() - dep_files.union(self.configuration.data.getVar('__base_depends') or set()) + dep_files = self.configuration.data.getVar('__depends') or [] + for dep in (self.configuration.data.getVar('__base_depends') or []): + if dep not in dep_files: + dep_files.append(dep) for f in dep_files: if f[0].endswith(".conf"): diff --git a/lib/bb/parse/__init__.py b/lib/bb/parse/__init__.py index 7b9c47e..f223ff9 100644 --- a/lib/bb/parse/__init__.py +++ b/lib/bb/parse/__init__.py @@ -73,8 +73,10 @@ def update_mtime(f): def mark_dependency(d, f): if f.startswith('./'): f = "%s/%s" % (os.getcwd(), f[2:]) - deps = d.getVar('__depends') or set() - deps.update([(f, cached_mtime(f))]) + deps = d.getVar('__depends') or [] + t = cached_mtime(f) + if (f, t) not in deps: + deps.append((f, t)) d.setVar('__depends', deps) def supports(fn, data): @@ -134,8 +136,10 @@ def vars_from_file(mypkg, d): def get_file_depends(d): '''Return the dependent files''' dep_files = [] - depends = d.getVar('__depends', True) or set() - depends = depends.union(d.getVar('__base_depends', True) or set()) + depends = d.getVar('__depends', True) or [] + for dep in (d.getVar('__base_depends', True) or []): + if dep not in depends: + depends.append(dep) for (fn, _) in depends: dep_files.append(os.path.abspath(fn)) return " ".join(dep_files)