summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meta/classes/relocatable.bbclass19
1 files changed, 17 insertions, 2 deletions
diff --git a/meta/classes/relocatable.bbclass b/meta/classes/relocatable.bbclass
index 25eb99ecff..d92847b25d 100644
--- a/meta/classes/relocatable.bbclass
+++ b/meta/classes/relocatable.bbclass
@@ -5,12 +5,13 @@ PREPROCESS_RELOCATE_DIRS ?= ""
5 5
6def process_dir (directory, d): 6def process_dir (directory, d):
7 import subprocess as sub 7 import subprocess as sub
8 import stat
8 9
9 cmd = bb.data.expand('${CHRPATH_BIN}', d) 10 cmd = bb.data.expand('${CHRPATH_BIN}', d)
10 tmpdir = bb.data.getVar('TMPDIR', d) 11 tmpdir = bb.data.getVar('TMPDIR', d)
11 basedir = bb.data.expand('${base_prefix}', d) 12 basedir = bb.data.expand('${base_prefix}', d)
12 13
13 bb.debug("Checking %s for binaries to process" % directory) 14 #bb.debug("Checking %s for binaries to process" % directory)
14 if not os.path.exists(directory): 15 if not os.path.exists(directory):
15 return 16 return
16 17
@@ -26,6 +27,17 @@ def process_dir (directory, d):
26 process_dir(fpath, d) 27 process_dir(fpath, d)
27 else: 28 else:
28 #bb.note("Testing %s for relocatability" % fpath) 29 #bb.note("Testing %s for relocatability" % fpath)
30
31 # We need read and write permissions for chrpath, if we don't have
32 # them then set them temporarily. Take a copy of the files
33 # permissions so that we can restore them afterwards.
34 perms = os.stat(fpath)[stat.ST_MODE]
35 if os.access(fpath, os.W_OK|os.R_OK):
36 perms = None
37 else:
38 # Temporarily make the file writeable so we can chrpath it
39 os.chmod(fpath, perms|stat.S_IRWXU)
40
29 p = sub.Popen([cmd, '-l', fpath],stdout=sub.PIPE,stderr=sub.PIPE) 41 p = sub.Popen([cmd, '-l', fpath],stdout=sub.PIPE,stderr=sub.PIPE)
30 err, out = p.communicate() 42 err, out = p.communicate()
31 # If returned succesfully, process stderr for results 43 # If returned succesfully, process stderr for results
@@ -63,9 +75,12 @@ def process_dir (directory, d):
63 # if we have modified some rpaths call chrpath to update the binary 75 # if we have modified some rpaths call chrpath to update the binary
64 if len(new_rpaths): 76 if len(new_rpaths):
65 args = ":".join(new_rpaths) 77 args = ":".join(new_rpaths)
66 #bb.note("Setting rpath to " + args) 78 #bb.note("Setting rpath for %s to %s" %(fpath, args))
67 sub.call([cmd, '-r', args, fpath]) 79 sub.call([cmd, '-r', args, fpath])
68 80
81 if perms:
82 os.chmod(fpath, perms)
83
69def rpath_replace (path, d): 84def rpath_replace (path, d):
70 bindirs = bb.data.expand("${bindir} ${sbindir} ${base_sbindir} ${base_bindir} ${libdir} ${base_libdir} ${PREPROCESS_RELOCATE_DIRS}", d).split() 85 bindirs = bb.data.expand("${bindir} ${sbindir} ${base_sbindir} ${base_bindir} ${libdir} ${base_libdir} ${PREPROCESS_RELOCATE_DIRS}", d).split()
71 86