summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/spack/spack/binary_distribution.py37
-rw-r--r--lib/spack/spack/relocate.py2
2 files changed, 29 insertions, 10 deletions
diff --git a/lib/spack/spack/binary_distribution.py b/lib/spack/spack/binary_distribution.py
index 3198e7b4ee..fb43f252cf 100644
--- a/lib/spack/spack/binary_distribution.py
+++ b/lib/spack/spack/binary_distribution.py
@@ -44,6 +44,9 @@ from spack.util.executable import ProcessError
import spack.relocate as relocate
+_relocation_blacklist = (".spack", "man")
+
+
class NoOverwriteException(Exception):
pass
@@ -95,18 +98,14 @@ def read_buildinfo_file(prefix):
return buildinfo
-def write_buildinfo_file(prefix, rel=False):
- """
- Create a cache file containing information
- required for the relocation
- """
+def _find_relocations(prefix):
text_to_relocate = []
binary_to_relocate = []
- blacklist = (".spack", "man")
# Do this at during tarball creation to save time when tarball unpacked.
# Used by make_package_relative to determine binaries to change.
for root, dirs, files in os.walk(prefix, topdown=True):
- dirs[:] = [d for d in dirs if d not in blacklist]
+ dirs[:] = [d for d in dirs if d not in _relocation_blacklist]
+
for filename in files:
path_name = os.path.join(root, filename)
filetype = relocate.get_filetype(path_name)
@@ -117,6 +116,16 @@ def write_buildinfo_file(prefix, rel=False):
rel_path_name = os.path.relpath(path_name, prefix)
text_to_relocate.append(rel_path_name)
+ return text_to_relocate, binary_to_relocate
+
+
+def write_buildinfo_file(prefix, rel=False):
+ """
+ Create a cache file containing information
+ required for the relocation
+ """
+ text_to_relocate, binary_to_relocate = _find_relocations(prefix)
+
# Create buildinfo data and write it to disk
buildinfo = {}
buildinfo['relative_rpaths'] = rel
@@ -354,18 +363,28 @@ def relocate_package(prefix):
if new_path == old_path and not rel:
return
+ text_relocs = buildinfo['relocate_textfiles']
+ binary_relocs = buildinfo['relocate_binaries']
+
+ # if there are no relocations, search for them instead
+ # TODO: revisit this in a 0.11 point release
+ if not text_relocs or not binary_relocs:
+ text_relocs, binary_relocs = _find_relocations(prefix)
+ rel = False
+
tty.msg("Relocating package from",
"%s to %s." % (old_path, new_path))
path_names = set()
- for filename in buildinfo['relocate_textfiles']:
+ for filename in text_relocs:
path_name = os.path.join(prefix, filename)
path_names.add(path_name)
relocate.relocate_text(path_names, old_path, new_path)
+
# If the binary files in the package were not edited to use
# relative RPATHs, then the RPATHs need to be relocated
if not rel:
path_names = set()
- for filename in buildinfo['relocate_binaries']:
+ for filename in binary_relocs:
path_name = os.path.join(prefix, filename)
path_names.add(path_name)
relocate.relocate_binary(path_names, old_path, new_path)
diff --git a/lib/spack/spack/relocate.py b/lib/spack/spack/relocate.py
index 9341b55c86..246ed7510c 100644
--- a/lib/spack/spack/relocate.py
+++ b/lib/spack/spack/relocate.py
@@ -217,7 +217,7 @@ def needs_binary_relocation(filetype):
retval = False
if "relocatable" in filetype:
return False
- if "link" in filetype:
+ if "symbolic link" in filetype:
return False
if platform.system() == 'Darwin':
return ('Mach-O' in filetype)