From f2e16c655286aab465054db6727fa3365bef3124 Mon Sep 17 00:00:00 2001 From: Enrico Scholz Date: Sun, 10 Feb 2013 13:41:47 +0100 Subject: package.bbclass: use oe.path.realpath() oe.path.realpath() provides are common and more correct implementation for resolving symlinks within sysroot. Use it. Old implementation suffered from lot of problems; e.g. * redundant code * calls 'os.stat()' which references files on host; this can give wrong results about existing/non-existing and can cause EPERM (instead of the catched ENONENT) exceptions * does not deal with special cases like '..' leaving the sysroot. (From OE-Core rev: ec2aab09769f4b6817d74d2175afa2b7c7598750) Signed-off-by: Enrico Scholz Signed-off-by: Richard Purdie --- meta/classes/package.bbclass | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass index b10e6f6a4a..a74ec8a847 100644 --- a/meta/classes/package.bbclass +++ b/meta/classes/package.bbclass @@ -741,7 +741,8 @@ python split_and_strip_files () { continue try: - s = os.stat(file) + ltarget = oe.path.realpath(file, dvar, False) + s = os.lstat(ltarget) except OSError, (err, strerror): if err != errno.ENOENT: raise @@ -752,11 +753,6 @@ python split_and_strip_files () { # If it's a symlink, and points to an ELF file, we capture the readlink target if os.path.islink(file): target = os.readlink(file) - if not os.path.isabs(target): - ltarget = os.path.join(os.path.dirname(file), target) - else: - ltarget = target - if isELF(ltarget): #bb.note("Sym: %s (%d)" % (ltarget, isELF(ltarget))) symlinks[file] = target @@ -1005,14 +1001,12 @@ python package_fixsymlinks () { rpath = path[len(inst_root):] pkg_files[pkg].append(rpath) try: - s = os.stat(path) + rtarget = oe.path.realpath(path, inst_root, True) + os.lstat(rtarget) except OSError, (err, strerror): if err != errno.ENOENT: raise - target = os.readlink(path) - if target[0] != '/': - target = os.path.join(os.path.dirname(path)[len(inst_root):], target) - dangling_links[pkg].append(os.path.normpath(target)) + dangling_links[pkg].append(os.path.normpath(rtarget[len(inst_root):])) newrdepends = {} for pkg in dangling_links: -- cgit v1.2.3-54-g00ecf