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:
parent
e433a5dc0b
commit
99dfff4475
3 changed files with 37 additions and 17 deletions
|
@ -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()
|
||||
|
||||
|
|
|
@ -165,12 +165,13 @@ def install_cpanm(self):
|
|||
make()
|
||||
make('install')
|
||||
|
||||
def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
|
||||
def setup_dependent_build_environment(self, env, dependent_spec):
|
||||
"""Set PATH and PERL5LIB to include the extension and
|
||||
any other perl extensions it depends on,
|
||||
assuming they were installed with INSTALL_BASE defined."""
|
||||
perl_lib_dirs = []
|
||||
perl_bin_dirs = []
|
||||
perl_lib_dirs = [join_path(self.spec.prefix.lib,
|
||||
str(self.spec.version))]
|
||||
perl_bin_dirs = [self.spec.prefix.bin]
|
||||
for d in dependent_spec.traverse(
|
||||
deptype=('build', 'run'), deptype_query='run'):
|
||||
if d.package.extends(self.spec):
|
||||
|
@ -178,12 +179,29 @@ def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
|
|||
perl_bin_dirs.append(d.prefix.bin)
|
||||
if perl_bin_dirs:
|
||||
perl_bin_path = ':'.join(perl_bin_dirs)
|
||||
spack_env.prepend_path('PATH', perl_bin_path)
|
||||
run_env.prepend_path('PATH', perl_bin_path)
|
||||
env.prepend_path('PATH', perl_bin_path)
|
||||
if perl_lib_dirs:
|
||||
perl_lib_path = ':'.join(perl_lib_dirs)
|
||||
spack_env.prepend_path('PERL5LIB', perl_lib_path)
|
||||
run_env.prepend_path('PERL5LIB', perl_lib_path)
|
||||
env.prepend_path('PERL5LIB', perl_lib_path)
|
||||
|
||||
def setup_dependent_run_environment(self, env, dependent_spec):
|
||||
"""Set PATH and PERL5LIB to include the extension and
|
||||
any other perl extensions it depends on,
|
||||
assuming they were installed with INSTALL_BASE defined."""
|
||||
perl_lib_dirs = [join_path(self.spec.prefix.lib,
|
||||
str(self.spec.version))]
|
||||
perl_bin_dirs = [self.spec.prefix.bin]
|
||||
for d in dependent_spec.traverse(
|
||||
deptype=('run',), deptype_query='run'):
|
||||
if d.package.extends(self.spec):
|
||||
perl_lib_dirs.append(d.prefix.lib.perl5)
|
||||
perl_bin_dirs.append(d.prefix.bin)
|
||||
if perl_bin_dirs:
|
||||
perl_bin_path = ':'.join(perl_bin_dirs)
|
||||
env.prepend_path('PATH', perl_bin_path)
|
||||
if perl_lib_dirs:
|
||||
perl_lib_path = ':'.join(perl_lib_dirs)
|
||||
env.prepend_path('PERL5LIB', perl_lib_path)
|
||||
|
||||
def setup_dependent_package(self, module, dependent_spec):
|
||||
"""Called before perl modules' install() methods.
|
||||
|
|
Loading…
Reference in a new issue