perl: ignore perllocal.pod files during package activation (#5271)

This commit is contained in:
Milton Woods 2017-10-20 08:24:49 +11:00 committed by Todd Gamblin
parent a1c19f8389
commit d72bcc91f4

View File

@ -33,6 +33,8 @@
from spack import *
import os
from contextlib import contextmanager
import spack
from llnl.util.lang import match_predicate
class Perl(Package): # Perl doesn't use Autotools, it should subclass Package
@ -224,3 +226,40 @@ def make_briefly_writable(self, path):
os.chmod(path, perm | 0o200)
yield
os.chmod(path, perm)
# ========================================================================
# Handle specifics of activating and deactivating perl modules.
# ========================================================================
def perl_ignore(self, ext_pkg, args):
"""Add some ignore files to activate/deactivate args."""
ignore_arg = args.get('ignore', lambda f: False)
# Many perl packages describe themselves in a perllocal.pod file,
# so the files conflict when multiple packages are activated.
# We could merge the perllocal.pod files in activated packages,
# but this is unnecessary for correct operation of perl.
# For simplicity, we simply ignore all perllocal.pod files:
patterns = [r'perllocal\.pod$']
return match_predicate(ignore_arg, patterns)
def activate(self, ext_pkg, **args):
ignore = self.perl_ignore(ext_pkg, args)
args.update(ignore=ignore)
super(Perl, self).activate(ext_pkg, **args)
exts = spack.store.layout.extension_map(self.spec)
exts[ext_pkg.name] = ext_pkg.spec
def deactivate(self, ext_pkg, **args):
ignore = self.perl_ignore(ext_pkg, args)
args.update(ignore=ignore)
super(Perl, self).deactivate(ext_pkg, **args)
exts = spack.store.layout.extension_map(self.spec)
# Make deactivate idempotent
if ext_pkg.name in exts:
del exts[ext_pkg.name]