summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Hatle <mark.hatle@windriver.com>2010-08-30 16:44:31 -0500
committerRichard Purdie <rpurdie@linux.intel.com>2010-09-02 10:01:22 +0100
commit84f7f70308eed0ac96abeb5a762e9b7765e5db91 (patch)
treed2461a37611b0e4381492423f06ea62f85b1e57c
parent431c97533b913c671a2501a678397025849c222a (diff)
downloadpoky-84f7f70308eed0ac96abeb5a762e9b7765e5db91.tar.gz
package_rpm: Enable per file dependencies
Switch the per file dependency handing to passing the information to rpm via the standard 'external' dependency scripting. This ensures that the dependencies found by RPM exactly match the ones presented by package.bbclass. Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
-rw-r--r--meta/classes/package.bbclass2
-rw-r--r--meta/classes/package_rpm.bbclass81
2 files changed, 65 insertions, 18 deletions
diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass
index 9ae7ecca0c..f0a8748023 100644
--- a/meta/classes/package.bbclass
+++ b/meta/classes/package.bbclass
@@ -594,6 +594,8 @@ python package_do_filedeps() {
594 value = line_list[1] 594 value = line_list[1]
595 file = file.replace(pkgdest + "/" + pkg, "") 595 file = file.replace(pkgdest + "/" + pkg, "")
596 file = file.replace("@", "@at@") 596 file = file.replace("@", "@at@")
597 file = file.replace(" ", "@space@")
598 file = file.replace("\t", "@tab@")
597 file = file.replace("[", "@openbrace@") 599 file = file.replace("[", "@openbrace@")
598 file = file.replace("]", "@closebrace@") 600 file = file.replace("]", "@closebrace@")
599 file = file.replace("_", "@underscore@") 601 file = file.replace("_", "@underscore@")
diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass
index ad5c6a13ad..36eb8e308b 100644
--- a/meta/classes/package_rpm.bbclass
+++ b/meta/classes/package_rpm.bbclass
@@ -187,24 +187,6 @@ python write_specfile () {
187 splitsection = (bb.data.getVar('SECTION', localdata, True) or "") 187 splitsection = (bb.data.getVar('SECTION', localdata, True) or "")
188 splitdescription = (bb.data.getVar('DESCRIPTION', localdata, True) or "") 188 splitdescription = (bb.data.getVar('DESCRIPTION', localdata, True) or "")
189 189
190 # Roll up the per file dependencies into package level dependencies
191 def roll_filerdeps(varname, d):
192 depends = bb.utils.explode_dep_versions(bb.data.getVar(varname, d, True) or "")
193 dependsflist_key = 'FILE' + varname + 'FLIST'
194 dependsflist = (bb.data.getVar(dependsflist_key, d, True) or "")
195 for dfile in dependsflist.split():
196 key = "FILE" + varname + "_" + dfile
197 filedepends = bb.utils.explode_dep_versions(bb.data.getVar(key, d, True) or "")
198 bb.utils.extend_deps(depends, filedepends)
199 bb.data.setVar(varname, bb.utils.join_deps(depends), d)
200
201 roll_filerdeps('RDEPENDS', localdata)
202 roll_filerdeps('RRECOMMENDS', localdata)
203 roll_filerdeps('RSUGGESTS', localdata)
204 roll_filerdeps('RPROVIDES', localdata)
205 roll_filerdeps('RREPLACES', localdata)
206 roll_filerdeps('RCONFLICTS', localdata)
207
208 translate_vers('RDEPENDS', localdata) 190 translate_vers('RDEPENDS', localdata)
209 translate_vers('RRECOMMENDS', localdata) 191 translate_vers('RRECOMMENDS', localdata)
210 translate_vers('RSUGGESTS', localdata) 192 translate_vers('RSUGGESTS', localdata)
@@ -457,6 +439,66 @@ python do_package_rpm () {
457 bb.data.setVar('OUTSPECFILE', outspecfile, d) 439 bb.data.setVar('OUTSPECFILE', outspecfile, d)
458 bb.build.exec_func('write_specfile', d) 440 bb.build.exec_func('write_specfile', d)
459 441
442 # Construct per file dependencies file
443 def dump_filerdeps(varname, outfile, d):
444 outfile.write("#!/bin/sh\n")
445 outfile.write("\n# Dependency table\n")
446 for pkg in packages.split():
447 dependsflist_key = 'FILE' + varname + 'FLIST' + "_" + pkg
448 dependsflist = (bb.data.getVar(dependsflist_key, d, True) or "")
449 for dfile in dependsflist.split():
450 key = "FILE" + varname + "_" + dfile + "_" + pkg
451 depends_dict = bb.utils.explode_dep_versions(bb.data.getVar(key, d, True) or "")
452 file = dfile.replace("@underscore@", "_")
453 file = file.replace("@closebrace@", "]")
454 file = file.replace("@openbrace@", "[")
455 file = file.replace("@tab@", "\t")
456 file = file.replace("@space@", " ")
457 file = file.replace("@at@", "@")
458 outfile.write("#" + pkgd + file + "\t")
459 for dep in depends_dict:
460 ver = depends_dict[dep]
461 if dep and ver:
462 ver = ver.replace("(","")
463 ver = ver.replace(")","")
464 outfile.write(dep + " " + ver + " ")
465 else:
466 outfile.write(dep + " ")
467 outfile.write("\n")
468 outfile.write("\n\nwhile read file_name ; do\n")
469 outfile.write("\tlength=$(echo \"#${file_name}\t\" | wc -c )\n")
470 outfile.write("\tline=$(grep \"^#${file_name}\t\" $0 | cut -c ${length}- )\n")
471 outfile.write("\tprintf \"%s\\n\" ${line}\n")
472 outfile.write("done\n")
473
474 # Poky dependencies a.k.a. RPM requires
475 outdepends = workdir + "/" + srcname + ".requires"
476
477 try:
478 from __builtin__ import file
479 dependsfile = file(outdepends, 'w')
480 except OSError:
481 raise bb.build.FuncFailed("unable to open spec file for writing.")
482
483 dump_filerdeps('RDEPENDS', dependsfile, d)
484
485 dependsfile.close()
486 os.chmod(outdepends, 0755)
487
488 # Poky / RPM Provides
489 outprovides = workdir + "/" + srcname + ".requires"
490
491 try:
492 from __builtin__ import file
493 providesfile = file(outprovides, 'w')
494 except OSError:
495 raise bb.build.FuncFailed("unable to open spec file for writing.")
496
497 dump_filerdeps('RPROVIDES', providesfile, d)
498
499 providesfile.close()
500 os.chmod(outprovides, 0755)
501
460 # Setup the rpmbuild arguments... 502 # Setup the rpmbuild arguments...
461 rpmbuild = bb.data.getVar('RPMBUILD', d, True) 503 rpmbuild = bb.data.getVar('RPMBUILD', d, True)
462 targetsys = bb.data.getVar('TARGET_SYS', d, True) 504 targetsys = bb.data.getVar('TARGET_SYS', d, True)
@@ -469,6 +511,9 @@ python do_package_rpm () {
469 cmd = cmd + " --nodeps --short-circuit --target " + pkgarch + " --buildroot " + pkgd 511 cmd = cmd + " --nodeps --short-circuit --target " + pkgarch + " --buildroot " + pkgd
470 cmd = cmd + " --define '_topdir " + workdir + "' --define '_rpmdir " + pkgwritedir + "'" 512 cmd = cmd + " --define '_topdir " + workdir + "' --define '_rpmdir " + pkgwritedir + "'"
471 cmd = cmd + " --define '_build_name_fmt %%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm'" 513 cmd = cmd + " --define '_build_name_fmt %%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm'"
514 cmd = cmd + " --define '_use_internal_dependency_generator 0'"
515 cmd = cmd + " --define '__find_requires " + outdepends + "'"
516 cmd = cmd + " --define '__find_provides " + outprovides + "'"
472 cmd = cmd + " -bb " + outspecfile 517 cmd = cmd + " -bb " + outspecfile
473 518
474 # Build the spec file! 519 # Build the spec file!