diff options
author | Patrick Ohly <patrick.ohly@intel.com> | 2015-02-25 06:53:29 -0800 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-02-27 07:39:36 +0000 |
commit | 51908e5141133269edceb3b3bc26f8907ff2b3e0 (patch) | |
tree | e52fc279467459ce843bf31446948e0ff470a2c3 /meta/classes/package_rpm.bbclass | |
parent | de638414f731838b06e41ff1d975e48ec0b58ee8 (diff) | |
download | poky-51908e5141133269edceb3b3bc26f8907ff2b3e0.tar.gz |
package_rpm.bbclass: support packaging of symlinks to directories
os.walk() returns symlinks to directories in the "dirs" lists, but then never
enters them by default. As a result, the old code applied neither the
directory handling (because that is active once a directory gets entered) nor
the file handling, and thus never packaged such symlinks.
The fix is simple: find such special directory entries and move them to the
"files" list. However, one has to be careful about the undefined behavior of
modifying a list while iterating over it.
This fix was required for packaging a modified base-files that created
symlinks into /usr for /sbin /lib and /sbin.
(From OE-Core rev: 9c4ab427b6acbc3f708860adace65393562227a7)
Signed-off-by: Patrick Ohly <patrick.ohly@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/classes/package_rpm.bbclass')
-rw-r--r-- | meta/classes/package_rpm.bbclass | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass index b87e634f1b..e305e8b4ab 100644 --- a/meta/classes/package_rpm.bbclass +++ b/meta/classes/package_rpm.bbclass | |||
@@ -197,6 +197,16 @@ python write_specfile () { | |||
197 | if path.endswith("DEBIAN") or path.endswith("CONTROL"): | 197 | if path.endswith("DEBIAN") or path.endswith("CONTROL"): |
198 | continue | 198 | continue |
199 | 199 | ||
200 | # Treat all symlinks to directories as normal files. | ||
201 | # os.walk() lists them as directories. | ||
202 | def move_to_files(dir): | ||
203 | if os.path.islink(os.path.join(rootpath, dir)): | ||
204 | files.append(dir) | ||
205 | return True | ||
206 | else: | ||
207 | return False | ||
208 | dirs[:] = [dir for dir in dirs if not move_to_files(dir)] | ||
209 | |||
200 | # Directory handling can happen in two ways, either DIRFILES is not set at all | 210 | # Directory handling can happen in two ways, either DIRFILES is not set at all |
201 | # in which case we fall back to the older behaviour of packages owning all their | 211 | # in which case we fall back to the older behaviour of packages owning all their |
202 | # directories | 212 | # directories |