binary distribution: relocate text files properly in relative binaries (#13578)
* Make relative binaries relocate text files properly * rb strings aren't valid in python 2 * move perl to new interface for setup_environment family methods
This commit is contained in:

committed by
Todd Gamblin

parent
e433a5dc0b
commit
99dfff4475
@@ -521,8 +521,6 @@ def relocate_package(workdir, spec, allow_root):
|
||||
old_prefix = str(buildinfo.get('spackprefix',
|
||||
'/not/in/buildinfo/dictionary'))
|
||||
rel = buildinfo.get('relative_rpaths', False)
|
||||
if rel:
|
||||
return
|
||||
|
||||
tty.msg("Relocating package from",
|
||||
"%s to %s." % (old_path, new_path))
|
||||
|
@@ -378,17 +378,21 @@ def replace_prefix_text(path_name, old_dir, new_dir):
|
||||
Replace old install prefix with new install prefix
|
||||
in text files using utf-8 encoded strings.
|
||||
"""
|
||||
|
||||
def replace(match):
|
||||
return match.group().replace(old_dir.encode('utf-8'),
|
||||
new_dir.encode('utf-8'))
|
||||
with open(path_name, 'rb+') as f:
|
||||
data = f.read()
|
||||
f.seek(0)
|
||||
pat = re.compile(old_dir.encode('utf-8'))
|
||||
if not pat.search(data):
|
||||
return
|
||||
ndata = pat.sub(replace, data)
|
||||
# Replace old_dir with new_dir if it appears at the beginning of a path
|
||||
# Negative lookbehind for a character legal in a path
|
||||
# Then a match group for any characters legal in a compiler flag
|
||||
# Then old_dir
|
||||
# Then characters legal in a path
|
||||
# Ensures we only match the old_dir if it's precedeed by a flag or by
|
||||
# characters not legal in a path, but not if it's preceeded by other
|
||||
# components of a path.
|
||||
old_bytes = old_dir.encode('utf-8')
|
||||
pat = b'(?<![\\w\\-_/])([\\w\\-_]*?)%s([\\w\\-_/]*)' % old_bytes
|
||||
repl = b'\\1%s\\2' % new_dir.encode('utf-8')
|
||||
ndata = re.sub(pat, repl, data)
|
||||
f.write(ndata)
|
||||
f.truncate()
|
||||
|
||||
|
Reference in New Issue
Block a user