Jelajahi Sumber

package_rpm: Enable debian style tags

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>
Mark Hatle 14 tahun lalu
induk
melakukan
4b611b6674
2 mengubah file dengan 60 tambahan dan 50 penghapusan
  1. 57 50
      meta/classes/package_rpm.bbclass
  2. 3 0
      meta/recipes-devtools/rpm/rpm_5.1.10.bb

+ 57 - 50
meta/classes/package_rpm.bbclass

@@ -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('')
 

+ 3 - 0
meta/recipes-devtools/rpm/rpm_5.1.10.bb

@@ -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 \