def setup_environment(self, spack_env, run_env): """Adds environment variables to the generated module file. These environment variables come from running: .. code-block:: console $ source mkl/bin/mklvars.sh intel64 """ # NOTE: Spack runs setup_environment twice, once pre-build to set up # the build environment, and once post-installation to determine # the environment variables needed at run-time to add to the module # file. The script we need to source is only present post-installation, # so check for its existence before sourcing. # TODO: At some point we should split setup_environment into # setup_build_environment and setup_run_environment to get around # this problem. mklvars = os.path.join(self.prefix.mkl.bin, 'mklvars.sh') if sys.platform == 'darwin': if os.path.isfile(mklvars): run_env.extend(EnvironmentModifications.from_sourcing_file( mklvars)) else: if os.path.isfile(mklvars): run_env.extend(EnvironmentModifications.from_sourcing_file( mklvars, 'intel64'))
def setup_environment(self, spack_env, run_env): if not self.stage.source_path: self.stage.fetch() self.stage.expand_archive() spack_env.set('FSLDIR', self.stage.source_path) # Here, run-time environment variables are being set manually. # Normally these would be added to the modulefile at build-time # by sourcing fsl.sh, but incorrect paths were being set, pointing to # the staging directory rather than the install directory. run_env.set('FSLDIR', self.prefix) run_env.set('FSLOUTPUTTYPE', 'NIFTI_GZ') run_env.set('FSLMULTIFILEQUIT', 'TRUE') run_env.set('FSLTCLSH', self.prefix.bin.fsltclsh) run_env.set('FSLWISH', self.prefix.bin.fslwish) run_env.set('FSLLOCKDIR', '') run_env.set('FSLMACHINELIST', '') run_env.set('FSLREMOTECALL', '') run_env.set('FSLGECUDAQ', 'cuda.q') run_env.prepend_path('PATH', self.prefix) # Below is for sourcing purposes during building fslsetup = join_path(self.stage.source_path, 'etc', 'fslconf', 'fsl.sh') if os.path.isfile(fslsetup): spack_env.extend( EnvironmentModifications.from_sourcing_file(fslsetup))
def test_source_files(files_to_be_sourced): """Tests the construction of a list of environment modifications that are the result of sourcing a file. """ env = EnvironmentModifications() for filename in files_to_be_sourced: if filename.endswith('sourceme_parameters.sh'): env.extend( EnvironmentModifications.from_sourcing_file( filename, 'intel64')) else: env.extend(EnvironmentModifications.from_sourcing_file(filename)) modifications = env.group_by_name() # This is sensitive to the user's environment; can include # spurious entries for things like PS1 # # TODO: figure out how to make a bit more robust. assert len(modifications) >= 5 # Set new variables assert len(modifications['NEW_VAR']) == 1 assert isinstance(modifications['NEW_VAR'][0], SetEnv) assert modifications['NEW_VAR'][0].value == 'new' assert len(modifications['FOO']) == 1 assert isinstance(modifications['FOO'][0], SetEnv) assert modifications['FOO'][0].value == 'intel64' # Unset variables assert len(modifications['EMPTY_PATH_LIST']) == 1 assert isinstance(modifications['EMPTY_PATH_LIST'][0], UnsetEnv) # Modified variables assert len(modifications['UNSET_ME']) == 1 assert isinstance(modifications['UNSET_ME'][0], SetEnv) assert modifications['UNSET_ME'][0].value == 'overridden' assert len(modifications['PATH_LIST']) == 3 assert isinstance(modifications['PATH_LIST'][0], RemovePath) assert modifications['PATH_LIST'][0].value == '/path/third' assert isinstance(modifications['PATH_LIST'][1], AppendPath) assert modifications['PATH_LIST'][1].value == '/path/fourth' assert isinstance(modifications['PATH_LIST'][2], PrependPath) assert modifications['PATH_LIST'][2].value == '/path/first'
def test_source_files(files_to_be_sourced): """Tests the construction of a list of environment modifications that are the result of sourcing a file. """ env = EnvironmentModifications() for filename in files_to_be_sourced: if filename.endswith('sourceme_parameters.sh'): env.extend(EnvironmentModifications.from_sourcing_file( filename, 'intel64')) else: env.extend(EnvironmentModifications.from_sourcing_file(filename)) modifications = env.group_by_name() # This is sensitive to the user's environment; can include # spurious entries for things like PS1 # # TODO: figure out how to make a bit more robust. assert len(modifications) >= 5 # Set new variables assert len(modifications['NEW_VAR']) == 1 assert isinstance(modifications['NEW_VAR'][0], SetEnv) assert modifications['NEW_VAR'][0].value == 'new' assert len(modifications['FOO']) == 1 assert isinstance(modifications['FOO'][0], SetEnv) assert modifications['FOO'][0].value == 'intel64' # Unset variables assert len(modifications['EMPTY_PATH_LIST']) == 1 assert isinstance(modifications['EMPTY_PATH_LIST'][0], UnsetEnv) # Modified variables assert len(modifications['UNSET_ME']) == 1 assert isinstance(modifications['UNSET_ME'][0], SetEnv) assert modifications['UNSET_ME'][0].value == 'overridden' assert len(modifications['PATH_LIST']) == 3 assert isinstance(modifications['PATH_LIST'][0], RemovePath) assert modifications['PATH_LIST'][0].value == '/path/third' assert isinstance(modifications['PATH_LIST'][1], AppendPath) assert modifications['PATH_LIST'][1].value == '/path/fourth' assert isinstance(modifications['PATH_LIST'][2], PrependPath) assert modifications['PATH_LIST'][2].value == '/path/first'
def setup_environment(self, spack_env, run_env): """Adds environment variables to the generated module file. These environment variables come from running: .. code-block:: console $ source parallel_studio_xe_2017/bin/psxevars.sh intel64 """ # NOTE: Spack runs setup_environment twice, once pre-build to set up # the build environment, and once post-installation to determine # the environment variables needed at run-time to add to the module # file. The script we need to source is only present post-installation, # so check for its existence before sourcing. # TODO: At some point we should split setup_environment into # setup_build_environment and setup_run_environment to get around # this problem. psxevars = glob.glob(join_path( self.prefix, 'parallel_studio*', 'bin', 'psxevars.sh')) if psxevars: run_env.extend(EnvironmentModifications.from_sourcing_file( psxevars[0], 'intel64'))
def setup_environment(self, spack_env, run_env): """Add environment variables to the generated module file. These environment variables come from running: .. code-block:: console $ . $WM_PROJECT_DIR/etc/bashrc """ # NOTE: Spack runs setup_environment twice. # 1) pre-build to set up the build environment # 2) post-install to determine runtime environment variables # The etc/bashrc is only available (with corrrect content) # post-installation. bashrc = join_path(self.projectdir, 'etc', 'bashrc') minimal = True if os.path.isfile(bashrc): # post-install: source the installed bashrc try: mods = EnvironmentModifications.from_sourcing_file( bashrc, clean=True, # Remove duplicate entries blacklist=[ # Blacklist these # Inadvertent changes # ------------------- 'PS1', # Leave unaffected 'MANPATH', # Leave unaffected # Unneeded bits # ------------- 'FOAM_INST_DIR', # Possibly incorrect 'FOAM_(APP|ETC|SRC|SOLVERS|UTILITIES)', 'FOAM_TEST_.*_DIR', 'WM_NCOMPPROCS', # 'FOAM_TUTORIALS', # can be useful # Lots of third-party cruft # ------------------------- '[A-Z].*_(BIN|LIB|INCLUDE)_DIR', '[A-Z].*_SYSTEM', 'WM_THIRD_PARTY_.*', '(BISON|FLEX|CMAKE|ZLIB)_DIR', '(METIS|PARMETIS|PARMGRIDGEN|SCOTCH)_DIR', # User-specific # ------------- 'FOAM_RUN', '(FOAM|WM)_.*USER_.*', ], whitelist=[ # Whitelist these 'MPI_ARCH_PATH', # Can be needed for compilation 'PYTHON_BIN_DIR', ]) run_env.extend(mods) minimal = False tty.info('foam-extend env: {0}'.format(bashrc)) except Exception: minimal = True if minimal: # pre-build or minimal environment tty.info('foam-extend minimal env {0}'.format(self.prefix)) run_env.set('FOAM_INST_DIR', os.path.dirname(self.projectdir)), run_env.set('FOAM_PROJECT_DIR', self.projectdir) run_env.set('WM_PROJECT_DIR', self.projectdir) for d in ['wmake', self.archbin]: # bin added automatically run_env.prepend_path('PATH', join_path(self.projectdir, d))
def setup_environment(self, spack_env, run_env): """Add environment variables to the generated module file. These environment variables come from running: .. code-block:: console $ . $WM_PROJECT_DIR/etc/bashrc """ # NOTE: Spack runs setup_environment twice. # 1) pre-build to set up the build environment # 2) post-install to determine runtime environment variables # The etc/bashrc is only available (with corrrect content) # post-installation. bashrc = join_path(self.projectdir, 'etc', 'bashrc') minimal = True if os.path.isfile(bashrc): # post-install: source the installed bashrc try: mods = EnvironmentModifications.from_sourcing_file( bashrc, clean=True, # Remove duplicate entries blacklist=[ # Blacklist these # Inadvertent changes # ------------------- 'PS1', # Leave unaffected 'MANPATH', # Leave unaffected # Unneeded bits # ------------- 'FOAM_SETTINGS', # Do not use with modules 'FOAM_INST_DIR', # Old 'FOAM_(APP|ETC|SRC|SOLVERS|UTILITIES)', # 'FOAM_TUTORIALS', # can be useful 'WM_OSTYPE', # Purely optional value # Third-party cruft - only used for orig compilation # ----------------- '[A-Z].*_ARCH_PATH', '(KAHIP|METIS|SCOTCH)_VERSION', # User-specific # ------------- 'FOAM_RUN', '(FOAM|WM)_.*USER_.*', ], whitelist=[ # Whitelist these 'MPI_ARCH_PATH', # Can be needed for compilation ]) run_env.extend(mods) minimal = False tty.info('OpenFOAM bashrc env: {0}'.format(bashrc)) except Exception: minimal = True if minimal: # pre-build or minimal environment tty.info('OpenFOAM minimal env {0}'.format(self.prefix)) run_env.set('FOAM_PROJECT_DIR', self.projectdir) run_env.set('WM_PROJECT_DIR', self.projectdir) for d in ['wmake', self.archbin]: # bin added automatically run_env.prepend_path('PATH', join_path(self.projectdir, d))