Skip to content

Commit

Permalink
Fix module loads (#5599)
Browse files Browse the repository at this point in the history
Fixes #5455

All methods within setup_package use an EnvironmentModifications object
to control the environment. Those modifications are applied at the end
of setup_package. Module loads for the build environment need to be
done after the rest of the environment modifications are applied, as
otherwise Spack may unset variables set by those modules (for example
LD_LIBRARY_PATH).
  • Loading branch information
becker33 authored and scheibelp committed Oct 5, 2017
1 parent 3556eaa commit 328ab32
Showing 1 changed file with 16 additions and 10 deletions.
26 changes: 16 additions & 10 deletions lib/spack/spack/build_environment.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,12 +167,6 @@ def set_compiler_environment_variables(pkg, env):

env.set('SPACK_COMPILER_SPEC', str(pkg.spec.compiler))

for mod in compiler.modules:
# Fixes issue https://github.com/LLNL/spack/issues/3153
if os.environ.get("CRAY_CPU_TARGET") == "mic-knl":
load_module("cce")
load_module(mod)

compiler.setup_custom_environment(pkg, env)

return env
Expand Down Expand Up @@ -312,9 +306,6 @@ def set_build_environment_variables(pkg, env, dirty):
if os.path.isdir(pcdir):
env.prepend_path('PKG_CONFIG_PATH', pcdir)

if pkg.architecture.target.module_name:
load_module(pkg.architecture.target.module_name)

return env


Expand Down Expand Up @@ -484,7 +475,7 @@ def setup_package(pkg, dirty):
set_compiler_environment_variables(pkg, spack_env)
set_build_environment_variables(pkg, spack_env, dirty)
pkg.architecture.platform.setup_platform_environment(pkg, spack_env)
load_external_modules(pkg)

# traverse in postorder so package can use vars from its dependencies
spec = pkg.spec
for dspec in pkg.spec.traverse(order='post', root=False, deptype='build'):
Expand All @@ -511,6 +502,21 @@ def setup_package(pkg, dirty):
validate(spack_env, tty.warn)
spack_env.apply_modifications()

# All module loads that otherwise would belong in previous functions
# have to occur after the spack_env object has its modifications applied.
# Otherwise the environment modifications could undo module changes, such
# as unsetting LD_LIBRARY_PATH after a module changes it.
for mod in pkg.compiler.modules:
# Fixes issue https://github.com/LLNL/spack/issues/3153
if os.environ.get("CRAY_CPU_TARGET") == "mic-knl":
load_module("cce")
load_module(mod)

if pkg.architecture.target.module_name:
load_module(pkg.architecture.target.module_name)

load_external_modules(pkg)


def fork(pkg, function, dirty):
"""Fork a child process to do part of a spack build.
Expand Down

0 comments on commit 328ab32

Please sign in to comment.