environment : refactoreded set_build_environment_variables
This commit is contained in:
		@@ -35,7 +35,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import spack
 | 
					import spack
 | 
				
			||||||
from llnl.util.filesystem import *
 | 
					from llnl.util.filesystem import *
 | 
				
			||||||
from spack.environment import EnvironmentModifications, apply_environment_modifications
 | 
					from spack.environment import EnvironmentModifications, apply_environment_modifications, concatenate_paths
 | 
				
			||||||
from spack.util.environment import *
 | 
					from spack.util.environment import *
 | 
				
			||||||
from spack.util.executable import Executable, which
 | 
					from spack.util.executable import Executable, which
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -127,44 +127,45 @@ def set_build_environment_variables(pkg):
 | 
				
			|||||||
    # handled by putting one in the <build_env_path>/case-insensitive
 | 
					    # handled by putting one in the <build_env_path>/case-insensitive
 | 
				
			||||||
    # directory.  Add that to the path too.
 | 
					    # directory.  Add that to the path too.
 | 
				
			||||||
    env_paths = []
 | 
					    env_paths = []
 | 
				
			||||||
    def add_env_path(path):
 | 
					    for item in [spack.build_env_path, join_path(spack.build_env_path, pkg.compiler.name)]:
 | 
				
			||||||
        env_paths.append(path)
 | 
					        env_paths.append(item)
 | 
				
			||||||
        ci = join_path(path, 'case-insensitive')
 | 
					        ci = join_path(item, 'case-insensitive')
 | 
				
			||||||
        if os.path.isdir(ci): env_paths.append(ci)
 | 
					        if os.path.isdir(ci):
 | 
				
			||||||
    add_env_path(spack.build_env_path)
 | 
					            env_paths.append(ci)
 | 
				
			||||||
    add_env_path(join_path(spack.build_env_path, pkg.compiler.name))
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    path_put_first("PATH", env_paths)
 | 
					    env = EnvironmentModifications()
 | 
				
			||||||
    path_set(SPACK_ENV_PATH, env_paths)
 | 
					    for item in reversed(env_paths):
 | 
				
			||||||
 | 
					        env.prepend_path('PATH', item)
 | 
				
			||||||
 | 
					    env.set_env(SPACK_ENV_PATH, concatenate_paths(env_paths))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Prefixes of all of the package's dependencies go in
 | 
					    # Prefixes of all of the package's dependencies go in SPACK_DEPENDENCIES
 | 
				
			||||||
    # SPACK_DEPENDENCIES
 | 
					 | 
				
			||||||
    dep_prefixes = [d.prefix for d in pkg.spec.traverse(root=False)]
 | 
					    dep_prefixes = [d.prefix for d in pkg.spec.traverse(root=False)]
 | 
				
			||||||
    path_set(SPACK_DEPENDENCIES, dep_prefixes)
 | 
					    env.set_env(SPACK_DEPENDENCIES, concatenate_paths(dep_prefixes))
 | 
				
			||||||
 | 
					    env.set_env('CMAKE_PREFIX_PATH', concatenate_paths(dep_prefixes))  # Add dependencies to CMAKE_PREFIX_PATH
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Install prefix
 | 
					    # Install prefix
 | 
				
			||||||
    os.environ[SPACK_PREFIX] = pkg.prefix
 | 
					    env.set_env(SPACK_PREFIX, pkg.prefix)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Install root prefix
 | 
					    # Install root prefix
 | 
				
			||||||
    os.environ[SPACK_INSTALL] = spack.install_path
 | 
					    env.set_env(SPACK_INSTALL, spack.install_path)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Remove these vars from the environment during build because they
 | 
					    # Remove these vars from the environment during build because they
 | 
				
			||||||
    # can affect how some packages find libraries.  We want to make
 | 
					    # can affect how some packages find libraries.  We want to make
 | 
				
			||||||
    # sure that builds never pull in unintended external dependencies.
 | 
					    # sure that builds never pull in unintended external dependencies.
 | 
				
			||||||
    pop_keys(os.environ, "LD_LIBRARY_PATH", "LD_RUN_PATH", "DYLD_LIBRARY_PATH")
 | 
					    env.unset_env('LD_LIBRARY_PATH')
 | 
				
			||||||
 | 
					    env.unset_env('LD_RUN_PATH')
 | 
				
			||||||
 | 
					    env.unset_env('DYLD_LIBRARY_PATH')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Add bin directories from dependencies to the PATH for the build.
 | 
					    # Add bin directories from dependencies to the PATH for the build.
 | 
				
			||||||
    bin_dirs = ['%s/bin' % prefix for prefix in dep_prefixes]
 | 
					    bin_dirs = reversed(filter(os.path.isdir, ['%s/bin' % prefix for prefix in dep_prefixes]))
 | 
				
			||||||
    path_put_first('PATH', [bin for bin in bin_dirs if os.path.isdir(bin)])
 | 
					    for item in bin_dirs:
 | 
				
			||||||
 | 
					        env.prepend_path('PATH', item)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Working directory for the spack command itself, for debug logs.
 | 
					    # Working directory for the spack command itself, for debug logs.
 | 
				
			||||||
    if spack.debug:
 | 
					    if spack.debug:
 | 
				
			||||||
        os.environ[SPACK_DEBUG] = "TRUE"
 | 
					        env.set_env(SPACK_DEBUG, 'TRUE')
 | 
				
			||||||
    os.environ[SPACK_SHORT_SPEC] = pkg.spec.short_spec
 | 
					    env.set_env(SPACK_SHORT_SPEC, pkg.spec.short_spec)
 | 
				
			||||||
    os.environ[SPACK_DEBUG_LOG_DIR] = spack.spack_working_dir
 | 
					    env.set_env(SPACK_DEBUG_LOG_DIR, spack.spack_working_dir)
 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Add dependencies to CMAKE_PREFIX_PATH
 | 
					 | 
				
			||||||
    path_set("CMAKE_PREFIX_PATH", dep_prefixes)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Add any pkgconfig directories to PKG_CONFIG_PATH
 | 
					    # Add any pkgconfig directories to PKG_CONFIG_PATH
 | 
				
			||||||
    pkg_config_dirs = []
 | 
					    pkg_config_dirs = []
 | 
				
			||||||
@@ -173,8 +174,9 @@ def add_env_path(path):
 | 
				
			|||||||
            pcdir = join_path(p, libdir, 'pkgconfig')
 | 
					            pcdir = join_path(p, libdir, 'pkgconfig')
 | 
				
			||||||
            if os.path.isdir(pcdir):
 | 
					            if os.path.isdir(pcdir):
 | 
				
			||||||
                pkg_config_dirs.append(pcdir)
 | 
					                pkg_config_dirs.append(pcdir)
 | 
				
			||||||
    path_set("PKG_CONFIG_PATH", pkg_config_dirs)
 | 
					    env.set_env('PKG_CONFIG_PATH', concatenate_paths(pkg_config_dirs))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return env
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def set_module_variables_for_package(pkg, m):
 | 
					def set_module_variables_for_package(pkg, m):
 | 
				
			||||||
    """Populate the module scope of install() with some useful functions.
 | 
					    """Populate the module scope of install() with some useful functions.
 | 
				
			||||||
@@ -269,8 +271,8 @@ def setup_package(pkg):
 | 
				
			|||||||
    """Execute all environment setup routines."""
 | 
					    """Execute all environment setup routines."""
 | 
				
			||||||
    env = EnvironmentModifications()
 | 
					    env = EnvironmentModifications()
 | 
				
			||||||
    env.extend(set_compiler_environment_variables(pkg))
 | 
					    env.extend(set_compiler_environment_variables(pkg))
 | 
				
			||||||
 | 
					    env.extend(set_build_environment_variables(pkg))
 | 
				
			||||||
    apply_environment_modifications(env)
 | 
					    apply_environment_modifications(env)
 | 
				
			||||||
    set_build_environment_variables(pkg)
 | 
					 | 
				
			||||||
    # If a user makes their own package repo, e.g.
 | 
					    # If a user makes their own package repo, e.g.
 | 
				
			||||||
    # spack.repos.mystuff.libelf.Libelf, and they inherit from
 | 
					    # spack.repos.mystuff.libelf.Libelf, and they inherit from
 | 
				
			||||||
    # an existing class like spack.repos.original.libelf.Libelf,
 | 
					    # an existing class like spack.repos.original.libelf.Libelf,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -146,6 +146,9 @@ def remove_path(self, name, path, **kwargs):
 | 
				
			|||||||
        self.env_modifications.append(item)
 | 
					        self.env_modifications.append(item)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def concatenate_paths(paths):
 | 
				
			||||||
 | 
					    return ':'.join(str(item) for item in paths)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def validate_environment_modifications(env):
 | 
					def validate_environment_modifications(env):
 | 
				
			||||||
    modifications = collections.defaultdict(list)
 | 
					    modifications = collections.defaultdict(list)
 | 
				
			||||||
    for item in env:
 | 
					    for item in env:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -123,7 +123,7 @@ def set_network_type(self, spec, configure_args):
 | 
				
			|||||||
                count += 1
 | 
					                count += 1
 | 
				
			||||||
        if count > 1:
 | 
					        if count > 1:
 | 
				
			||||||
            raise RuntimeError('network variants are mutually exclusive (only one can be selected at a time)')
 | 
					            raise RuntimeError('network variants are mutually exclusive (only one can be selected at a time)')
 | 
				
			||||||
 | 
					        network_options = []
 | 
				
			||||||
        # From here on I can suppose that only one variant has been selected
 | 
					        # From here on I can suppose that only one variant has been selected
 | 
				
			||||||
        if self.enabled(Mvapich2.PSM) in spec:
 | 
					        if self.enabled(Mvapich2.PSM) in spec:
 | 
				
			||||||
            network_options = ["--with-device=ch3:psm"]
 | 
					            network_options = ["--with-device=ch3:psm"]
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user