Previous every package claimed ownership via %dir of every directory, which lead to e.g. every package claiming to own /usr. This destroys the concept of directory ownership, so instead only use %dir to ensure empty directories are packaged.
Signed-off-by: Ross Burton <[email protected]> --- meta/classes/package_rpm.bbclass | 45 +++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass index 0a32b3e..9e6b103 100644 --- a/meta/classes/package_rpm.bbclass +++ b/meta/classes/package_rpm.bbclass @@ -186,28 +186,33 @@ python write_specfile () { array.append("%s: %s" % (tag, dep)) def walk_files(walkpath, target, conffiles): - # We can race against the ipk/deb backends which create CONTROL or DEBIAN directories - # when packaging. We just ignore these files which are created in - # packages-split/ and not package/ - # We have the odd situation where the CONTROL/DEBIAN directory can be removed in the middle of - # of the walk, the isdir() test would then fail and the walk code would assume its a file - # hence we check for the names in files too. for rootpath, dirs, files in os.walk(walkpath): - path = rootpath.replace(walkpath, "") - if path.endswith("DEBIAN") or path.endswith("CONTROL"): - continue - for dir in dirs: - if dir == "CONTROL" or dir == "DEBIAN": - continue - # All packages own the directories their files are in... - target.append('%dir "' + path + '/' + dir + '"') - for file in files: - if file == "CONTROL" or file == "DEBIAN": - continue - if conffiles.count(path + '/' + file): - target.append('%config "' + path + '/' + file + '"') + # Ignore the CONTROL and DEBIAN directories, created by ipkg and + # dpkg during packaging. As they can be removed while this is + # running (and so the isdir() test fails) ignore both files and + # directories. + for n in ("CONTROL", "DEBIAN"): + try: + dirs.remove(n) + files.remove(n) + except ValueError: + pass + + # When rootpath is walkpath the replace will return "" so handle + # that and set path to /. + path = rootpath.replace(walkpath, "") or "/" + + # Packages own only empty directories, but handle / specially as we + # don't want empty packages to contain a %dir / entry. + if (path != '/' and not files and not dirs): + target.append('%dir "' + path + '"') + + for f in files: + f = os.path.join(path, f) + if f in conffiles: + target.append('%config "' + f + '"') else: - target.append('"' + path + '/' + file + '"') + target.append('"' + f + '"') # Prevent the prerm/postrm scripts from being run during an upgrade def wrap_uninstall(scriptvar): -- 1.7.10.4 -- _______________________________________________ Openembedded-core mailing list [email protected] http://lists.openembedded.org/mailman/listinfo/openembedded-core
