diff options
| -rw-r--r-- | meta/classes/relocatable.bbclass | 19 |
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 | ||
| 6 | def process_dir (directory, d): | 6 | def 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 | |||
| 69 | def rpath_replace (path, d): | 84 | def 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 | ||
