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 <enrico.scholz@sigma-chemnitz.de> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
a09c5d6673
commit
f2e16c6552
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue