module file : all the dependencies can affect the run_time environment, not only extendees

This commit is contained in:
alalazo 2016-04-05 16:10:04 +02:00
parent c352249e30
commit ca7d701007

View File

@ -50,6 +50,7 @@
import spack import spack
import spack.config import spack.config
from llnl.util.filesystem import join_path, mkdirp from llnl.util.filesystem import join_path, mkdirp
from spack.build_environment import parent_class_modules, set_module_variables_for_package
from spack.environment import * from spack.environment import *
__all__ = ['EnvModule', 'Dotkit', 'TclModule'] __all__ = ['EnvModule', 'Dotkit', 'TclModule']
@ -159,12 +160,25 @@ def write(self):
# installation prefix # installation prefix
env = inspect_path(self.spec.prefix) env = inspect_path(self.spec.prefix)
# Let the extendee modify their extensions before asking for # Let the extendee/dependency modify their extensions/dependencies before asking for
# package-specific modifications # package-specific modifications
spack_env = EnvironmentModifications() spack_env = EnvironmentModifications()
for item in self.pkg.extendees:
def dependencies():
# FIXME : during module file creation nodes seem to be visited multiple times even if cover='nodes'
# FIXME : is given. This work around permits to get a unique list of spec anyhow.
# FIXME : Possibly we miss a merge step among nodes that refer to the same package.
l = [x for x in sorted(self.spec.traverse(order='post', depth=True, cover='nodes'),reverse=True)]
seen = set()
return [x for ii, x in l if not (x in seen or seen.add(x))]
for item in dependencies():
try: try:
package = self.spec[item].package package = self.spec[item.name].package
modules = parent_class_modules(package.__class__)
for mod in modules:
set_module_variables_for_package(package, mod)
set_module_variables_for_package(package, package.module)
package.setup_dependent_package(self.pkg.module, self.spec) package.setup_dependent_package(self.pkg.module, self.spec)
package.setup_dependent_environment(spack_env, env, self.spec) package.setup_dependent_environment(spack_env, env, self.spec)
except KeyError as e: except KeyError as e:
@ -172,8 +186,8 @@ def write(self):
# eg: extends('python', when='+python') # eg: extends('python', when='+python')
tty.debug(str(e)) tty.debug(str(e))
# Package-specific environment modifications # Package-specific environment modifications
set_module_variables_for_package(self.pkg, self.pkg.module)
self.spec.package.setup_environment(spack_env, env) self.spec.package.setup_environment(spack_env, env)
# TODO : implement site-specific modifications and filters # TODO : implement site-specific modifications and filters