]> code.ossystems Code Review - openembedded-core.git/commitdiff
package_rpm: Enable debian style tags
authorMark Hatle <mark.hatle@windriver.com>
Wed, 1 Sep 2010 01:05:10 +0000 (20:05 -0500)
committerRichard Purdie <rpurdie@linux.intel.com>
Thu, 2 Sep 2010 09:01:22 +0000 (10:01 +0100)
Enable debian style tags including suggests, enhances, recommends

Note, these are not yet used by the dependency resolver.

Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
meta/classes/package_rpm.bbclass
meta/recipes-devtools/rpm/rpm_5.1.10.bb

index 89e8fe891a00e32aadc68a6ee572cdf44dfa1cb3..3f0a8af72ce087a21051fd28303f3d370b27d4de 100644 (file)
@@ -92,11 +92,18 @@ python write_specfile () {
 
        # We need to change the style the dependency from BB to RPM
        # This needs to happen AFTER the mapping_rename_hook
-       def translate_deps(varname, d):
-               depends = bb.data.getVar('RPM' + varname, d, True) or bb.data.getVar(varname, d, True) or ""
-               depends = depends.replace('(', '')
-               depends = depends.replace(')', '')
-               bb.data.setVar('RPM' + varname, depends, d)
+       def print_deps(variable, tag, array, d):
+               depends = variable
+               if depends:
+                       depends_dict = bb.utils.explode_dep_versions(depends)
+                       for dep in depends_dict:
+                               ver = depends_dict[dep]
+                               if dep and ver:
+                                       ver = ver.replace('(', '')
+                                       ver = ver.replace(')', '')
+                                       array.append("%s: %s %s" % (tag, dep, ver))
+                               else:
+                                       array.append("%s: %s" % (tag, dep))
 
        def walk_files(walkpath, target, conffiles):
                import os
@@ -137,8 +144,7 @@ python write_specfile () {
        srchomepage    = bb.data.getVar('HOMEPAGE', d, True)
        srcdescription = bb.data.getVar('DESCRIPTION', d, True)
 
-       translate_deps('DEPENDS', d)
-       srcdepends     = bb.data.getVar('RPMDEPENDS', d, True)
+       srcdepends     = bb.data.getVar('DEPENDS', d, True)
        srcrdepends    = []
        srcrrecommends = []
        srcrsuggests   = []
@@ -201,19 +207,12 @@ python write_specfile () {
                # Map the dependencies into their final form
                bb.build.exec_func("mapping_rename_hook", localdata)
 
-               translate_deps('RDEPENDS', localdata)
-               translate_deps('RRECOMMENDS', localdata)
-               translate_deps('RSUGGESTS', localdata)
-               translate_deps('RPROVIDES', localdata)
-               translate_deps('RREPLACES', localdata)
-               translate_deps('RCONFLICTS', localdata)
-
-               splitrdepends    = bb.data.getVar('RPMRDEPENDS', localdata, True)
-               splitrrecommends = bb.data.getVar('RPMRRECOMMENDS', localdata, True)
-               splitrsuggests   = bb.data.getVar('RPMRSUGGESTS', localdata, True)
-               splitrprovides   = bb.data.getVar('RPMRPROVIDES', localdata, True)
-               splitrreplaces   = bb.data.getVar('RPMRREPLACES', localdata, True)
-               splitrconflicts  = bb.data.getVar('RPMRCONFLICTS', localdata, True)
+               splitrdepends    = bb.data.getVar('RDEPENDS', localdata, True) or ""
+               splitrrecommends = bb.data.getVar('RRECOMMENDS', localdata, True) or ""
+               splitrsuggests   = bb.data.getVar('RSUGGESTS', localdata, True) or ""
+               splitrprovides   = bb.data.getVar('RPROVIDES', localdata, True) or ""
+               splitrreplaces   = bb.data.getVar('RREPLACES', localdata, True) or ""
+               splitrconflicts  = bb.data.getVar('RCONFLICTS', localdata, True) or ""
                splitrobsoletes  = []
 
                # Gather special src/first package data
@@ -269,21 +268,25 @@ python write_specfile () {
                                else:
                                        splitrobsoletes = dep
 
-               if splitrdepends and splitrdepends.strip() != "":
-                       spec_preamble_bottom.append('Requires: %s' % splitrdepends)
-               #if splitrrecommends and splitrrecommends.strip() != "":
-               #       spec_preamble_bottom.append('#Recommends: %s' % splitrrecommends)
-               #if splitrsuggests and splitrsuggests.strip() != "":
-               #       spec_preamble_bottom.append('#Suggests: %s' % splitrsuggests)
-               if splitrprovides and splitrprovides.strip() != "":
-                       spec_preamble_bottom.append('Provides: %s' % splitrprovides)
-               if splitrobsoletes and splitrobsoletes.strip() != "":
-                       spec_preamble_bottom.append('Obsoletes: %s' % splitrobsoletes)
-               if splitrconflicts and splitrconflicts.strip() != "":
-                       for dep in splitrconflicts.split(','):
-                               # A conflict can NOT be in the provide or an internal conflict happens!
+               print_deps(splitrdepends,       "Requires", spec_preamble_bottom, d)
+               print_deps(splitrrecommends,    "Recommends", spec_preamble_bottom, d)
+               print_deps(splitrsuggests,      "Suggests", spec_preamble_bottom, d)
+               print_deps(splitrprovides,      "Provides", spec_preamble_bottom, d)
+               print_deps(splitrobsoletes,     "Obsoletes", spec_preamble_bottom, d)
+
+               # conflicts can not be in a provide!  We will need to filter it.
+               if splitrconflicts:
+                       depends_dict = bb.utils.explode_dep_versions(splitrconflicts)
+                       newdeps_dict = {}
+                       for dep in depends_dict:
                                if dep not in splitrprovides:
-                                       spec_preamble_bottom.append('Conflicts: %s' % dep)
+                                       newdeps_dict[dep] = depends_dict[dep]
+                       if newdeps_dict:
+                               splitrconflicts = bb.utils.join_deps(newdeps_dict)
+                       else:
+                               splitrconflicts = ""
+
+               print_deps(splitrconflicts,     "Conflicts", spec_preamble_bottom, d)
 
                spec_preamble_bottom.append('')
 
@@ -345,23 +348,27 @@ python write_specfile () {
                                srcrobsoletes = srcrobsoletes + ", " + dep
                        else:
                                srcrobsoletes = dep
-       if srcdepends and srcdepends.strip() != "":
-               spec_preamble_top.append('BuildRequires: %s' % srcdepends)
-       if srcrdepends and srcrdepends.strip() != "":
-               spec_preamble_top.append('Requires: %s' % srcrdepends)
-       #if srcrrecommends and srcrrecommends.strip() != "":
-       #       spec_preamble_top.append('#Recommends: %s' % srcrrecommends)
-       #if srcrsuggests and srcrsuggests.strip() != "":
-       #       spec_preamble_top.append('#Suggests: %s' % srcrsuggests)
-       if srcrprovides and srcrprovides.strip() != "":
-               spec_preamble_top.append('Provides: %s' % srcrprovides)
-       if srcrobsoletes and srcrobsoletes.strip() != "":
-               spec_preamble_top.append('Obsoletes: %s' % srcrobsoletes)
-       if srcrconflicts and srcrconflicts.strip() != "":
-               for dep in srcrconflicts.split(','):
-                       # A conflict can NOT be in the provide or an internal conflict happens!
+
+       print_deps(srcdepends,          "BuildRequires", spec_preamble_top, d)
+       print_deps(srcrdepends,         "Requires", spec_preamble_top, d)
+       print_deps(srcrrecommends,      "Recommends", spec_preamble_top, d)
+       print_deps(srcrsuggests,        "Suggests", spec_preamble_top, d)
+       print_deps(srcrprovides,        "Provides", spec_preamble_top, d)
+       print_deps(srcrobsoletes,       "Obsoletes", spec_preamble_top, d)
+
+       # conflicts can not be in a provide!  We will need to filter it.
+       if srcrconflicts:
+               depends_dict = bb.utils.explode_dep_versions(srcrconflicts)
+               newdeps_dict = {}
+               for dep in depends_dict:
                        if dep not in srcrprovides:
-                               spec_preamble_bottom.append('Conflicts: %s' % dep)
+                               newdeps_dict[dep] = depends_dict[dep]
+               if newdeps_dict:
+                       srcrconflicts = bb.utils.join_deps(newdeps_dict)
+               else:
+                       srcrconflicts = ""
+
+       print_deps(srcrconflicts,       "Conflicts", spec_preamble_top, d)
 
        spec_preamble_top.append('')
 
index d75e48f416f864a4e0599b40a908bb45929311fb..d4b5a91668bf6a2c39f74d1b78a429229ace9ba4 100644 (file)
@@ -116,6 +116,9 @@ do_install_append() {
        sed -i -e 's,perl.prov,${HOST_SYS}-perl.prov,' ${D}/${libdir}/rpm/macros
        sed -i -e 's,perl.req,${HOST_SYS}-perl.req,' ${D}/${libdir}/rpm/macros
 
+       # Enable Debian style arbitrary tags...
+       sed -i -e 's,%_arbitrary_tags[^_].*,%_arbitrary_tags %{_arbitrary_tags_debian},' ${D}/${libdir}/rpm/macros
+
        install -m 0755 ${WORKDIR}/perfile_rpmdeps.sh ${D}/${libdir}/rpm/perfile_rpmdeps.sh
 
        mv ${D}/${libdir}/python$PYTHONVER/rpm/${HOST_SYS}-__init__.py \