Openembedded Core Discussions
 help / color / mirror / Atom feed
* [PATCH 02/12 v2] populate_sdk_base: Update extraction script for multilibs
@ 2012-10-01 15:50 Mark Hatle
  2012-10-01 15:50 ` [PATCH 04/12 v2] bb.utils.explode_dep_versions: Update to ensure we avoid duplicate deps Mark Hatle
  0 siblings, 1 reply; 3+ messages in thread
From: Mark Hatle @ 2012-10-01 15:50 UTC (permalink / raw)
  To: openembedded-core

When multilibs are enabled, there will be more then one environment
file created.  We need to be sure to process each environment file.
The next function can simply use the last environment file processed
to get the magic value(s) that it requires.

Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
---
 meta/classes/populate_sdk_base.bbclass |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/meta/classes/populate_sdk_base.bbclass b/meta/classes/populate_sdk_base.bbclass
index 6eb6726..8f062b3 100644
--- a/meta/classes/populate_sdk_base.bbclass
+++ b/meta/classes/populate_sdk_base.bbclass
@@ -158,8 +158,9 @@ echo "done"
 
 printf "Setting it up..."
 # fix environment paths
-env_setup_script=$(find $target_sdk_dir/ -name "environment-setup-${REAL_MULTIMACH_TARGET_SYS}")
-sed -e "s:$DEFAULT_INSTALL_DIR:$target_sdk_dir:g" -i $env_setup_script
+for env_setup_script in `ls $target_sdk_dir/environment-setup-*`; do
+  sed -e "s:$DEFAULT_INSTALL_DIR:$target_sdk_dir:g" -i $env_setup_script
+done
 
 # fix dynamic loader paths in all ELF SDK binaries
 native_sysroot=$(cat $env_setup_script |grep OECORE_NATIVE_SYSROOT|cut -d'=' -f2|tr -d '"')
-- 
1.7.3.4




^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH 04/12 v2] bb.utils.explode_dep_versions: Update to ensure we avoid duplicate deps
  2012-10-01 15:50 [PATCH 02/12 v2] populate_sdk_base: Update extraction script for multilibs Mark Hatle
@ 2012-10-01 15:50 ` Mark Hatle
  2012-10-01 15:52   ` Mark Hatle
  0 siblings, 1 reply; 3+ messages in thread
From: Mark Hatle @ 2012-10-01 15:50 UTC (permalink / raw)
  To: openembedded-core

Due to a recent change in bb.utils.explode_dep_version, we need to make
sure that we do not have any duplicates in things that use
explode_dep_versions.

Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
---
 meta/classes/insane.bbclass      |   45 ++++++++++++++++++++++++++-
 meta/classes/kernel.bbclass      |   20 +++++++-----
 meta/classes/libc-common.bbclass |   13 ++++++--
 meta/classes/package.bbclass     |   20 ++++++++++--
 meta/classes/package_rpm.bbclass |   61 +++++++++++++++++++++-----------------
 5 files changed, 115 insertions(+), 44 deletions(-)

diff --git a/meta/classes/insane.bbclass b/meta/classes/insane.bbclass
index 1fb8970..ba40918 100644
--- a/meta/classes/insane.bbclass
+++ b/meta/classes/insane.bbclass
@@ -114,7 +114,7 @@ def package_qa_get_machine_dict():
 
 # Currently not being used by default "desktop"
 WARN_QA ?= "ldflags useless-rpaths rpaths unsafe-references-in-binaries unsafe-references-in-scripts staticdev libdir"
-ERROR_QA ?= "dev-so debug-deps dev-deps debug-files arch la2 pkgconfig la perms"
+ERROR_QA ?= "dev-so debug-deps dev-deps debug-files arch la2 pkgconfig la perms dep-cmp"
 
 ALL_QA = "${WARN_QA} ${ERROR_QA}"
 
@@ -659,6 +659,44 @@ def package_qa_check_rdepends(pkg, pkgdest, skip, d):
 
     return sane
 
+def package_qa_check_deps(pkg, pkgdest, skip, d):
+    sane = True
+
+    # Copied from package_ipk.bbclass
+    # boiler plate to update the data
+    localdata = bb.data.createCopy(d)
+    localdata.setVar('OVERRIDES', pkg)
+    bb.data.update_data(localdata)
+
+    def check_valid_deps(var):
+        sane = True
+        try:
+            rvar = bb.utils.explode_dep_versions(localdata.getVar(var, True) or "")
+        except ValueError as e:
+            bb.fatal("%s_%s: %s" % (var, pkg, e))
+            raise e
+        for dep in rvar:
+            if rvar[dep] and not rvar[dep].startswith(('< ', '= ', '> ', '<= ', '>=')):
+                error_msg = "%s_%s is invalid: %s (%s)   only comparisons <, =, >, <=, and >= are allowed" % (var, pkg, dep, rvar[dep])
+                sane = package_qa_handle_error("dep-cmp", error_msg, d)
+        return sane
+
+    sane = True
+    if not check_valid_deps('RDEPENDS'):
+        sane = False
+    if not check_valid_deps('RRECOMMENDS'):
+        sane = False
+    if not check_valid_deps('RSUGGESTS'):
+        sane = False
+    if not check_valid_deps('RPROVIDES'):
+        sane = False
+    if not check_valid_deps('RREPLACES'):
+        sane = False
+    if not check_valid_deps('RCONFLICTS'):
+        sane = False
+
+    return sane
+
 # The PACKAGE FUNC to scan each package
 python do_package_qa () {
     import subprocess
@@ -699,6 +737,7 @@ python do_package_qa () {
     g = globals()
     walk_sane = True
     rdepends_sane = True
+    deps_sane = True
     for package in packages.split():
         skip = (d.getVar('INSANE_SKIP_' + package, True) or "").split()
         if skip:
@@ -722,12 +761,14 @@ python do_package_qa () {
             walk_sane  = False
         if not package_qa_check_rdepends(package, pkgdest, skip, d):
             rdepends_sane = False
+        if not package_qa_check_deps(package, pkgdest, skip, d):
+            deps_sane = False
 
 
     if 'libdir' in d.getVar("ALL_QA", True).split():
         package_qa_check_libdir(d)
 
-    if not walk_sane or not rdepends_sane:
+    if not walk_sane or not rdepends_sane or not deps_sane:
         bb.fatal("QA run found fatal errors. Please consider fixing them.")
     bb.note("DONE with PACKAGE QA")
 }
diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass
index fdef1be..878fd6c 100644
--- a/meta/classes/kernel.bbclass
+++ b/meta/classes/kernel.bbclass
@@ -20,6 +20,13 @@ python __anonymous () {
     image = d.getVar('INITRAMFS_IMAGE', True)
     if image:
         d.setVar('INITRAMFS_TASK', '${INITRAMFS_IMAGE}:do_rootfs')
+
+    # RPROVIDES_kernel-base += "kernel-${KERNEL_VERSION}"
+    rprovides = bb.utils.explode_dep_versions(d.getVar("RPROVIDES_kernel-base", True) or "")
+    dep = d.expand("kernel-${KERNEL_VERSION}")
+    if not dep in rprovides:
+        rprovides[dep] = ""
+    d.setVar("RPROVIDES_kernel-base", bb.utils.join_deps(rprovides, commasep=False))
 }
 
 inherit kernel-arch deploy
@@ -269,7 +276,6 @@ RDEPENDS_kernel = "kernel-base"
 RDEPENDS_kernel-base ?= "kernel-image"
 PKG_kernel-image = "kernel-image-${@legitimize_package_name('${KERNEL_VERSION}')}"
 PKG_kernel-base = "kernel-${@legitimize_package_name('${KERNEL_VERSION}')}"
-RPROVIDES_kernel-base += "kernel-${KERNEL_VERSION}"
 ALLOW_EMPTY_kernel = "1"
 ALLOW_EMPTY_kernel-base = "1"
 ALLOW_EMPTY_kernel-image = "1"
@@ -429,13 +435,11 @@ python populate_packages_prepend () {
             old_desc = d.getVar('DESCRIPTION_' + pkg, True) or ""
             d.setVar('DESCRIPTION_' + pkg, old_desc + "; " + vals["description"])
 
-        rdepends_str = d.getVar('RDEPENDS_' + pkg, True)
-        if rdepends_str:
-            rdepends = rdepends_str.split()
-        else:
-            rdepends = []
-        rdepends.extend(get_dependencies(file, pattern, format))
-        d.setVar('RDEPENDS_' + pkg, ' '.join(rdepends))
+        rdepends = bb.utils.explode_dep_versions(d.getVar('RDEPENDS_' + pkg, True) or "")
+        for dep in get_dependencies(file, pattern, format):
+            if not dep in rdepends:
+                rdepends[dep] = ""
+        d.setVar('RDEPENDS_' + pkg, bb.utils.join_deps(rdepends, commasep=False))
 
     module_deps = parse_depmod()
     module_regex = '^(.*)\.k?o$'
diff --git a/meta/classes/libc-common.bbclass b/meta/classes/libc-common.bbclass
index 0f49936..dc32c81 100644
--- a/meta/classes/libc-common.bbclass
+++ b/meta/classes/libc-common.bbclass
@@ -29,7 +29,14 @@ python populate_packages_prepend () {
         d.setVar('PKG_'+bpn+'-dev', 'libc6-dev')
         d.setVar('PKG_'+bpn+'-dbg', 'libc6-dbg')
         # For backward compatibility with old -dbg package
-        d.appendVar('RPROVIDES_' + bpn + '-dbg', ' libc-dbg')
-        d.appendVar('RCONFLICTS_' + bpn + '-dbg', ' libc-dbg')
-        d.appendVar('RREPLACES_' + bpn + '-dbg', ' libc-dbg')
+
+        def add_dep(var, dep):
+            deps = bb.utils.explode_dep_versions(d.getVar(var + '_' + bpn, True) or "")
+            if not dep in deps:
+                deps[dep] = ""
+                d.setVar(var + '_' + bpn, bb.utils.join_deps(deps, commasep=False))
+
+        add_dep('RPROVIDES', 'libc-dbg')
+        add_dep('RCONFLICTS', 'libc-dbg')
+        add_dep('RREPLACES', 'libc-dbg')
 }
diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass
index c8aafc9..6b28a15 100644
--- a/meta/classes/package.bbclass
+++ b/meta/classes/package.bbclass
@@ -1637,14 +1637,19 @@ def read_libdep_files(d):
     pkglibdeps = {}
     packages = d.getVar('PACKAGES', True).split()
     for pkg in packages:
-        pkglibdeps[pkg] = []
+        pkglibdeps[pkg] = {}
         for extension in ".shlibdeps", ".pcdeps", ".clilibdeps":
             depsfile = d.expand("${PKGDEST}/" + pkg + extension)
             if os.access(depsfile, os.R_OK):
                 fd = file(depsfile)
                 lines = fd.readlines()
                 fd.close()
-                pkglibdeps[pkg].extend([l.rstrip() for l in lines])
+                for l in lines:
+                    l.rstrip()
+                    deps = bb.utils.explode_dep_versions(l)
+                    for dep in deps:
+                        if not dep in pkglibdeps[pkg]:
+                            pkglibdeps[pkg][dep] = deps[dep]
     return pkglibdeps
 
 python read_shlibdeps () {
@@ -1654,7 +1659,10 @@ python read_shlibdeps () {
     for pkg in packages:
         rdepends = bb.utils.explode_dep_versions(d.getVar('RDEPENDS_' + pkg, False) or d.getVar('RDEPENDS', False) or "")
         for dep in pkglibdeps[pkg]:
-            rdepends[dep] = ""
+            # Add the dep if it's not already there, or if no comparison is set
+            if not dep in rdepends or not rdepends[dep]:
+                rdepends[dep] = pkglibdeps[pkg][dep]
+
         d.setVar('RDEPENDS_' + pkg, bb.utils.join_deps(rdepends, commasep=False))
 }
 
@@ -1761,7 +1769,11 @@ python package_depchains() {
         pkglibdeplist = []
         for pkg in pkglibdeps:
             for dep in pkglibdeps[pkg]:
-                add_dep(pkglibdeplist, dep)
+                cmp = pkglibdeps[pkg][dep]
+                if cmp:
+                    add_dep(pkglibdeplist, dep)
+                else:
+                    add_dep(pkglibdeplist, "%s (%s)" % (dep, cmp))
         # FIXME this should not look at PN once all task recipes inherit from task.bbclass
         dbgdefaultdeps = ((d.getVar('DEPCHAIN_DBGDEFAULTDEPS', True) == '1') or (d.getVar('PN', True) or '').startswith('packagegroup-'))
 
diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass
index 49055f2..6256d6f 100644
--- a/meta/classes/package_rpm.bbclass
+++ b/meta/classes/package_rpm.bbclass
@@ -608,6 +608,13 @@ python write_specfile () {
                 name = "".join(name.split(eext[1] + '-'))
         return name
 
+    def strip_multilib_deps(deps, d):
+        depends = bb.utils.explode_dep_versions(deps or "")
+        newdeps = {}
+        for dep in depends:
+            newdeps[strip_multilib(dep, d)] = depends[dep]
+        return bb.utils.join_deps(newdeps)
+
 #        ml = d.getVar("MLPREFIX", True)
 #        if ml and name and len(ml) != 0 and name.find(ml) == 0:
 #            return ml.join(name.split(ml, 1)[1:])
@@ -709,7 +716,7 @@ python write_specfile () {
     srchomepage    = d.getVar('HOMEPAGE', True)
     srcdescription = d.getVar('DESCRIPTION', True) or "."
 
-    srcdepends     = strip_multilib(d.getVar('DEPENDS', True), d)
+    srcdepends     = strip_multilib_deps(d.getVar('DEPENDS', True), d)
     srcrdepends    = []
     srcrrecommends = []
     srcrsuggests   = []
@@ -772,12 +779,12 @@ python write_specfile () {
         # Map the dependencies into their final form
         mapping_rename_hook(localdata)
 
-        splitrdepends    = strip_multilib(localdata.getVar('RDEPENDS', True), d) or ""
-        splitrrecommends = strip_multilib(localdata.getVar('RRECOMMENDS', True), d) or ""
-        splitrsuggests   = strip_multilib(localdata.getVar('RSUGGESTS', True), d) or ""
-        splitrprovides   = strip_multilib(localdata.getVar('RPROVIDES', True), d) or ""
-        splitrreplaces   = strip_multilib(localdata.getVar('RREPLACES', True), d) or ""
-        splitrconflicts  = strip_multilib(localdata.getVar('RCONFLICTS', True), d) or ""
+        splitrdepends    = strip_multilib_deps(localdata.getVar('RDEPENDS', True), d)
+        splitrrecommends = strip_multilib_deps(localdata.getVar('RRECOMMENDS', True), d)
+        splitrsuggests   = strip_multilib_deps(localdata.getVar('RSUGGESTS', True), d)
+        splitrprovides   = strip_multilib_deps(localdata.getVar('RPROVIDES', True), d)
+        splitrreplaces   = strip_multilib_deps(localdata.getVar('RREPLACES', True), d)
+        splitrconflicts  = strip_multilib_deps(localdata.getVar('RCONFLICTS', True), d)
         splitrobsoletes  = []
 
         # Gather special src/first package data
@@ -826,16 +833,16 @@ python write_specfile () {
         spec_preamble_bottom.append('Group: %s' % splitsection)
 
         # Replaces == Obsoletes && Provides
-        if splitrreplaces and splitrreplaces.strip() != "":
-            for dep in splitrreplaces.split(','):
-                if splitrprovides:
-                    splitrprovides = splitrprovides + ", " + dep
-                else:
-                    splitrprovides = dep
-                if splitrobsoletes:
-                    splitrobsoletes = splitrobsoletes + ", " + dep
-                else:
-                    splitrobsoletes = dep
+        robsoletes = bb.utils.explode_dep_versions(splitrobsoletes or "")
+        rprovides = bb.utils.explode_dep_versions(splitrprovides or "")
+        rreplaces = bb.utils.explode_dep_versions(splitrreplaces or "")
+        for dep in rreplaces:
+            if not dep in robsoletes:
+                robsoletes[dep] = rreplaces[dep]
+            if not dep in rprovides:
+                rprovides[dep] = rreplaces[dep]
+        splitrobsoletes = bb.utils.join_deps(robsoletes, commasep=False)
+        splitrprovides = bb.utils.join_deps(rprovides, commasep=False)
 
         print_deps(splitrdepends, "Requires", spec_preamble_bottom, d)
         # Suggests in RPM are like recommends in OE-core!
@@ -918,16 +925,16 @@ python write_specfile () {
     tail_source(d)
 
     # Replaces == Obsoletes && Provides
-    if srcrreplaces and srcrreplaces.strip() != "":
-        for dep in srcrreplaces.split(','):
-            if srcrprovides:
-                srcrprovides = srcrprovides + ", " + dep
-            else:
-                srcrprovides = dep
-            if srcrobsoletes:
-                srcrobsoletes = srcrobsoletes + ", " + dep
-            else:
-                srcrobsoletes = dep
+    robsoletes = bb.utils.explode_dep_versions(srcrobsoletes or "")
+    rprovides = bb.utils.explode_dep_versions(srcrprovides or "")
+    rreplaces = bb.utils.explode_dep_versions(srcrreplaces or "")
+    for dep in rreplaces:
+        if not dep in robsoletes:
+            robsoletes[dep] = rreplaces[dep]
+        if not dep in rprovides:
+            rprovides[dep] = rreplaces[dep]
+    srcrobsoletes = bb.utils.join_deps(robsoletes, commasep=False)
+    srcrprovides = bb.utils.join_deps(rprovides, commasep=False)
 
     print_deps(srcdepends, "BuildRequires", spec_preamble_top, d)
     print_deps(srcrdepends, "Requires", spec_preamble_top, d)
-- 
1.7.3.4




^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH 04/12 v2] bb.utils.explode_dep_versions: Update to ensure we avoid duplicate deps
  2012-10-01 15:50 ` [PATCH 04/12 v2] bb.utils.explode_dep_versions: Update to ensure we avoid duplicate deps Mark Hatle
@ 2012-10-01 15:52   ` Mark Hatle
  0 siblings, 0 replies; 3+ messages in thread
From: Mark Hatle @ 2012-10-01 15:52 UTC (permalink / raw)
  To: openembedded-core

FYI I reworked this based on what Richard mentioned was wrong.  However, I do 
expect this isn't the final version of the patch based on his comments that the 
explode_dep_versions stuff is likely going to need further modifications.

Most of the changes below are still relevant even if explode_dep_versions 
changes are not used.  Specifically the kernel, libc-common, package and 
package_rpm changes.

--Mark


On 10/1/12 10:50 AM, Mark Hatle wrote:
> Due to a recent change in bb.utils.explode_dep_version, we need to make
> sure that we do not have any duplicates in things that use
> explode_dep_versions.
>
> Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
> ---
>   meta/classes/insane.bbclass      |   45 ++++++++++++++++++++++++++-
>   meta/classes/kernel.bbclass      |   20 +++++++-----
>   meta/classes/libc-common.bbclass |   13 ++++++--
>   meta/classes/package.bbclass     |   20 ++++++++++--
>   meta/classes/package_rpm.bbclass |   61 +++++++++++++++++++++-----------------
>   5 files changed, 115 insertions(+), 44 deletions(-)
>
> diff --git a/meta/classes/insane.bbclass b/meta/classes/insane.bbclass
> index 1fb8970..ba40918 100644
> --- a/meta/classes/insane.bbclass
> +++ b/meta/classes/insane.bbclass
> @@ -114,7 +114,7 @@ def package_qa_get_machine_dict():
>
>   # Currently not being used by default "desktop"
>   WARN_QA ?= "ldflags useless-rpaths rpaths unsafe-references-in-binaries unsafe-references-in-scripts staticdev libdir"
> -ERROR_QA ?= "dev-so debug-deps dev-deps debug-files arch la2 pkgconfig la perms"
> +ERROR_QA ?= "dev-so debug-deps dev-deps debug-files arch la2 pkgconfig la perms dep-cmp"
>
>   ALL_QA = "${WARN_QA} ${ERROR_QA}"
>
> @@ -659,6 +659,44 @@ def package_qa_check_rdepends(pkg, pkgdest, skip, d):
>
>       return sane
>
> +def package_qa_check_deps(pkg, pkgdest, skip, d):
> +    sane = True
> +
> +    # Copied from package_ipk.bbclass
> +    # boiler plate to update the data
> +    localdata = bb.data.createCopy(d)
> +    localdata.setVar('OVERRIDES', pkg)
> +    bb.data.update_data(localdata)
> +
> +    def check_valid_deps(var):
> +        sane = True
> +        try:
> +            rvar = bb.utils.explode_dep_versions(localdata.getVar(var, True) or "")
> +        except ValueError as e:
> +            bb.fatal("%s_%s: %s" % (var, pkg, e))
> +            raise e
> +        for dep in rvar:
> +            if rvar[dep] and not rvar[dep].startswith(('< ', '= ', '> ', '<= ', '>=')):
> +                error_msg = "%s_%s is invalid: %s (%s)   only comparisons <, =, >, <=, and >= are allowed" % (var, pkg, dep, rvar[dep])
> +                sane = package_qa_handle_error("dep-cmp", error_msg, d)
> +        return sane
> +
> +    sane = True
> +    if not check_valid_deps('RDEPENDS'):
> +        sane = False
> +    if not check_valid_deps('RRECOMMENDS'):
> +        sane = False
> +    if not check_valid_deps('RSUGGESTS'):
> +        sane = False
> +    if not check_valid_deps('RPROVIDES'):
> +        sane = False
> +    if not check_valid_deps('RREPLACES'):
> +        sane = False
> +    if not check_valid_deps('RCONFLICTS'):
> +        sane = False
> +
> +    return sane
> +
>   # The PACKAGE FUNC to scan each package
>   python do_package_qa () {
>       import subprocess
> @@ -699,6 +737,7 @@ python do_package_qa () {
>       g = globals()
>       walk_sane = True
>       rdepends_sane = True
> +    deps_sane = True
>       for package in packages.split():
>           skip = (d.getVar('INSANE_SKIP_' + package, True) or "").split()
>           if skip:
> @@ -722,12 +761,14 @@ python do_package_qa () {
>               walk_sane  = False
>           if not package_qa_check_rdepends(package, pkgdest, skip, d):
>               rdepends_sane = False
> +        if not package_qa_check_deps(package, pkgdest, skip, d):
> +            deps_sane = False
>
>
>       if 'libdir' in d.getVar("ALL_QA", True).split():
>           package_qa_check_libdir(d)
>
> -    if not walk_sane or not rdepends_sane:
> +    if not walk_sane or not rdepends_sane or not deps_sane:
>           bb.fatal("QA run found fatal errors. Please consider fixing them.")
>       bb.note("DONE with PACKAGE QA")
>   }
> diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass
> index fdef1be..878fd6c 100644
> --- a/meta/classes/kernel.bbclass
> +++ b/meta/classes/kernel.bbclass
> @@ -20,6 +20,13 @@ python __anonymous () {
>       image = d.getVar('INITRAMFS_IMAGE', True)
>       if image:
>           d.setVar('INITRAMFS_TASK', '${INITRAMFS_IMAGE}:do_rootfs')
> +
> +    # RPROVIDES_kernel-base += "kernel-${KERNEL_VERSION}"
> +    rprovides = bb.utils.explode_dep_versions(d.getVar("RPROVIDES_kernel-base", True) or "")
> +    dep = d.expand("kernel-${KERNEL_VERSION}")
> +    if not dep in rprovides:
> +        rprovides[dep] = ""
> +    d.setVar("RPROVIDES_kernel-base", bb.utils.join_deps(rprovides, commasep=False))
>   }
>
>   inherit kernel-arch deploy
> @@ -269,7 +276,6 @@ RDEPENDS_kernel = "kernel-base"
>   RDEPENDS_kernel-base ?= "kernel-image"
>   PKG_kernel-image = "kernel-image-${@legitimize_package_name('${KERNEL_VERSION}')}"
>   PKG_kernel-base = "kernel-${@legitimize_package_name('${KERNEL_VERSION}')}"
> -RPROVIDES_kernel-base += "kernel-${KERNEL_VERSION}"
>   ALLOW_EMPTY_kernel = "1"
>   ALLOW_EMPTY_kernel-base = "1"
>   ALLOW_EMPTY_kernel-image = "1"
> @@ -429,13 +435,11 @@ python populate_packages_prepend () {
>               old_desc = d.getVar('DESCRIPTION_' + pkg, True) or ""
>               d.setVar('DESCRIPTION_' + pkg, old_desc + "; " + vals["description"])
>
> -        rdepends_str = d.getVar('RDEPENDS_' + pkg, True)
> -        if rdepends_str:
> -            rdepends = rdepends_str.split()
> -        else:
> -            rdepends = []
> -        rdepends.extend(get_dependencies(file, pattern, format))
> -        d.setVar('RDEPENDS_' + pkg, ' '.join(rdepends))
> +        rdepends = bb.utils.explode_dep_versions(d.getVar('RDEPENDS_' + pkg, True) or "")
> +        for dep in get_dependencies(file, pattern, format):
> +            if not dep in rdepends:
> +                rdepends[dep] = ""
> +        d.setVar('RDEPENDS_' + pkg, bb.utils.join_deps(rdepends, commasep=False))
>
>       module_deps = parse_depmod()
>       module_regex = '^(.*)\.k?o$'
> diff --git a/meta/classes/libc-common.bbclass b/meta/classes/libc-common.bbclass
> index 0f49936..dc32c81 100644
> --- a/meta/classes/libc-common.bbclass
> +++ b/meta/classes/libc-common.bbclass
> @@ -29,7 +29,14 @@ python populate_packages_prepend () {
>           d.setVar('PKG_'+bpn+'-dev', 'libc6-dev')
>           d.setVar('PKG_'+bpn+'-dbg', 'libc6-dbg')
>           # For backward compatibility with old -dbg package
> -        d.appendVar('RPROVIDES_' + bpn + '-dbg', ' libc-dbg')
> -        d.appendVar('RCONFLICTS_' + bpn + '-dbg', ' libc-dbg')
> -        d.appendVar('RREPLACES_' + bpn + '-dbg', ' libc-dbg')
> +
> +        def add_dep(var, dep):
> +            deps = bb.utils.explode_dep_versions(d.getVar(var + '_' + bpn, True) or "")
> +            if not dep in deps:
> +                deps[dep] = ""
> +                d.setVar(var + '_' + bpn, bb.utils.join_deps(deps, commasep=False))
> +
> +        add_dep('RPROVIDES', 'libc-dbg')
> +        add_dep('RCONFLICTS', 'libc-dbg')
> +        add_dep('RREPLACES', 'libc-dbg')
>   }
> diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass
> index c8aafc9..6b28a15 100644
> --- a/meta/classes/package.bbclass
> +++ b/meta/classes/package.bbclass
> @@ -1637,14 +1637,19 @@ def read_libdep_files(d):
>       pkglibdeps = {}
>       packages = d.getVar('PACKAGES', True).split()
>       for pkg in packages:
> -        pkglibdeps[pkg] = []
> +        pkglibdeps[pkg] = {}
>           for extension in ".shlibdeps", ".pcdeps", ".clilibdeps":
>               depsfile = d.expand("${PKGDEST}/" + pkg + extension)
>               if os.access(depsfile, os.R_OK):
>                   fd = file(depsfile)
>                   lines = fd.readlines()
>                   fd.close()
> -                pkglibdeps[pkg].extend([l.rstrip() for l in lines])
> +                for l in lines:
> +                    l.rstrip()
> +                    deps = bb.utils.explode_dep_versions(l)
> +                    for dep in deps:
> +                        if not dep in pkglibdeps[pkg]:
> +                            pkglibdeps[pkg][dep] = deps[dep]
>       return pkglibdeps
>
>   python read_shlibdeps () {
> @@ -1654,7 +1659,10 @@ python read_shlibdeps () {
>       for pkg in packages:
>           rdepends = bb.utils.explode_dep_versions(d.getVar('RDEPENDS_' + pkg, False) or d.getVar('RDEPENDS', False) or "")
>           for dep in pkglibdeps[pkg]:
> -            rdepends[dep] = ""
> +            # Add the dep if it's not already there, or if no comparison is set
> +            if not dep in rdepends or not rdepends[dep]:
> +                rdepends[dep] = pkglibdeps[pkg][dep]
> +
>           d.setVar('RDEPENDS_' + pkg, bb.utils.join_deps(rdepends, commasep=False))
>   }
>
> @@ -1761,7 +1769,11 @@ python package_depchains() {
>           pkglibdeplist = []
>           for pkg in pkglibdeps:
>               for dep in pkglibdeps[pkg]:
> -                add_dep(pkglibdeplist, dep)
> +                cmp = pkglibdeps[pkg][dep]
> +                if cmp:
> +                    add_dep(pkglibdeplist, dep)
> +                else:
> +                    add_dep(pkglibdeplist, "%s (%s)" % (dep, cmp))
>           # FIXME this should not look at PN once all task recipes inherit from task.bbclass
>           dbgdefaultdeps = ((d.getVar('DEPCHAIN_DBGDEFAULTDEPS', True) == '1') or (d.getVar('PN', True) or '').startswith('packagegroup-'))
>
> diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass
> index 49055f2..6256d6f 100644
> --- a/meta/classes/package_rpm.bbclass
> +++ b/meta/classes/package_rpm.bbclass
> @@ -608,6 +608,13 @@ python write_specfile () {
>                   name = "".join(name.split(eext[1] + '-'))
>           return name
>
> +    def strip_multilib_deps(deps, d):
> +        depends = bb.utils.explode_dep_versions(deps or "")
> +        newdeps = {}
> +        for dep in depends:
> +            newdeps[strip_multilib(dep, d)] = depends[dep]
> +        return bb.utils.join_deps(newdeps)
> +
>   #        ml = d.getVar("MLPREFIX", True)
>   #        if ml and name and len(ml) != 0 and name.find(ml) == 0:
>   #            return ml.join(name.split(ml, 1)[1:])
> @@ -709,7 +716,7 @@ python write_specfile () {
>       srchomepage    = d.getVar('HOMEPAGE', True)
>       srcdescription = d.getVar('DESCRIPTION', True) or "."
>
> -    srcdepends     = strip_multilib(d.getVar('DEPENDS', True), d)
> +    srcdepends     = strip_multilib_deps(d.getVar('DEPENDS', True), d)
>       srcrdepends    = []
>       srcrrecommends = []
>       srcrsuggests   = []
> @@ -772,12 +779,12 @@ python write_specfile () {
>           # Map the dependencies into their final form
>           mapping_rename_hook(localdata)
>
> -        splitrdepends    = strip_multilib(localdata.getVar('RDEPENDS', True), d) or ""
> -        splitrrecommends = strip_multilib(localdata.getVar('RRECOMMENDS', True), d) or ""
> -        splitrsuggests   = strip_multilib(localdata.getVar('RSUGGESTS', True), d) or ""
> -        splitrprovides   = strip_multilib(localdata.getVar('RPROVIDES', True), d) or ""
> -        splitrreplaces   = strip_multilib(localdata.getVar('RREPLACES', True), d) or ""
> -        splitrconflicts  = strip_multilib(localdata.getVar('RCONFLICTS', True), d) or ""
> +        splitrdepends    = strip_multilib_deps(localdata.getVar('RDEPENDS', True), d)
> +        splitrrecommends = strip_multilib_deps(localdata.getVar('RRECOMMENDS', True), d)
> +        splitrsuggests   = strip_multilib_deps(localdata.getVar('RSUGGESTS', True), d)
> +        splitrprovides   = strip_multilib_deps(localdata.getVar('RPROVIDES', True), d)
> +        splitrreplaces   = strip_multilib_deps(localdata.getVar('RREPLACES', True), d)
> +        splitrconflicts  = strip_multilib_deps(localdata.getVar('RCONFLICTS', True), d)
>           splitrobsoletes  = []
>
>           # Gather special src/first package data
> @@ -826,16 +833,16 @@ python write_specfile () {
>           spec_preamble_bottom.append('Group: %s' % splitsection)
>
>           # Replaces == Obsoletes && Provides
> -        if splitrreplaces and splitrreplaces.strip() != "":
> -            for dep in splitrreplaces.split(','):
> -                if splitrprovides:
> -                    splitrprovides = splitrprovides + ", " + dep
> -                else:
> -                    splitrprovides = dep
> -                if splitrobsoletes:
> -                    splitrobsoletes = splitrobsoletes + ", " + dep
> -                else:
> -                    splitrobsoletes = dep
> +        robsoletes = bb.utils.explode_dep_versions(splitrobsoletes or "")
> +        rprovides = bb.utils.explode_dep_versions(splitrprovides or "")
> +        rreplaces = bb.utils.explode_dep_versions(splitrreplaces or "")
> +        for dep in rreplaces:
> +            if not dep in robsoletes:
> +                robsoletes[dep] = rreplaces[dep]
> +            if not dep in rprovides:
> +                rprovides[dep] = rreplaces[dep]
> +        splitrobsoletes = bb.utils.join_deps(robsoletes, commasep=False)
> +        splitrprovides = bb.utils.join_deps(rprovides, commasep=False)
>
>           print_deps(splitrdepends, "Requires", spec_preamble_bottom, d)
>           # Suggests in RPM are like recommends in OE-core!
> @@ -918,16 +925,16 @@ python write_specfile () {
>       tail_source(d)
>
>       # Replaces == Obsoletes && Provides
> -    if srcrreplaces and srcrreplaces.strip() != "":
> -        for dep in srcrreplaces.split(','):
> -            if srcrprovides:
> -                srcrprovides = srcrprovides + ", " + dep
> -            else:
> -                srcrprovides = dep
> -            if srcrobsoletes:
> -                srcrobsoletes = srcrobsoletes + ", " + dep
> -            else:
> -                srcrobsoletes = dep
> +    robsoletes = bb.utils.explode_dep_versions(srcrobsoletes or "")
> +    rprovides = bb.utils.explode_dep_versions(srcrprovides or "")
> +    rreplaces = bb.utils.explode_dep_versions(srcrreplaces or "")
> +    for dep in rreplaces:
> +        if not dep in robsoletes:
> +            robsoletes[dep] = rreplaces[dep]
> +        if not dep in rprovides:
> +            rprovides[dep] = rreplaces[dep]
> +    srcrobsoletes = bb.utils.join_deps(robsoletes, commasep=False)
> +    srcrprovides = bb.utils.join_deps(rprovides, commasep=False)
>
>       print_deps(srcdepends, "BuildRequires", spec_preamble_top, d)
>       print_deps(srcrdepends, "Requires", spec_preamble_top, d)
>




^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2012-10-01 16:05 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-10-01 15:50 [PATCH 02/12 v2] populate_sdk_base: Update extraction script for multilibs Mark Hatle
2012-10-01 15:50 ` [PATCH 04/12 v2] bb.utils.explode_dep_versions: Update to ensure we avoid duplicate deps Mark Hatle
2012-10-01 15:52   ` Mark Hatle

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox