diff --git a/dedal/configuration/SpackConfig.py b/dedal/configuration/SpackConfig.py index 98a70a412575d3afe95c297f480baabf88740694..bb71f162042077b31f0074c44f0a3fc15177e47f 100644 --- a/dedal/configuration/SpackConfig.py +++ b/dedal/configuration/SpackConfig.py @@ -30,12 +30,14 @@ class SpackConfig: concretization_dir: Path = None, buildcache_dir: Path = None, gpg: GpgConfig = None, use_spack_global=False, cache_version_concretize='v1', cache_version_build='v1', view=SpackViewEnum.VIEW, override_cache=True, bashrc_path=os.path.expanduser("~/.bashrc"), - spack_cache_storage_type: SpackCacheStorageEnum = SpackCacheStorageEnum.OCI): + spack_cache_storage_type: SpackCacheStorageEnum = SpackCacheStorageEnum.OCI, + spack_dir: Path = None): self.env = env if repos is None: self.repos = [] else: self.repos = repos + self.spack_dir = spack_dir self.upstream_instance = upstream_instance self.system_name = system_name self.concretization_dir = concretization_dir if concretization_dir is None else resolve_path(concretization_dir) diff --git a/dedal/spack_factory/SpackOperation.py b/dedal/spack_factory/SpackOperation.py index b112ed285e3f72313a6d0eda2835f3e2ff24b94e..0337fb8298de6a52feca325567a731815f8d87b5 100644 --- a/dedal/spack_factory/SpackOperation.py +++ b/dedal/spack_factory/SpackOperation.py @@ -20,8 +20,7 @@ import subprocess from pathlib import Path from dedal.configuration.SpackConfig import SpackConfig from dedal.enum.SpackConfigCommand import SpackConfigCommand -from dedal.error_handling.exceptions import SpackInstallPackagesException, SpackConcertizeException, SpackGpgException, \ - SpackReindexException +from dedal.error_handling.exceptions import SpackInstallPackagesException, SpackConcertizeException from dedal.logger.logger_builder import get_logger from dedal.spack_factory.SpackCacheOperation import SpackCacheOperation from dedal.spack_factory.SpackEnvOperation import SpackEnvOperation @@ -50,9 +49,10 @@ class SpackOperation: self.logger = logger self.spack_config.install_dir = spack_config.install_dir os.makedirs(self.spack_config.install_dir, exist_ok=True) - self.spack_dir = self.spack_config.install_dir / 'spack' + if self.spack_config.spack_dir is None: + self.spack_config.spack_dir = self.spack_config.install_dir / 'spack' self.env_path = None - self.spack_setup_script = "" if self.spack_config.use_spack_global else f"source {self.spack_dir / 'share' / 'spack' / 'setup-env.sh'}" + self.spack_setup_script = "" if self.spack_config.use_spack_global else f"source {self.spack_config.spack_dir / 'share' / 'spack' / 'setup-env.sh'}" self.spack_config.concretization_dir = spack_config.concretization_dir if self.spack_config.concretization_dir: os.makedirs(self.spack_config.concretization_dir, exist_ok=True) @@ -71,7 +71,7 @@ class SpackOperation: self.spack_config.env.path.mkdir(parents=True, exist_ok=True) self.spack_tool_operation = SpackToolOperation(spack_config=spack_config, spack_setup_script=self.spack_setup_script, - spack_dir=self.spack_dir) + spack_dir=self.spack_config.spack_dir) self.spack_env_operation = SpackEnvOperation(spack_config=spack_config, spack_setup_script=self.spack_setup_script, env_path=self.env_path, @@ -79,7 +79,7 @@ class SpackOperation: self.spack_cache_operation = SpackCacheOperation(spack_config=spack_config, spack_setup_script=self.spack_setup_script, spack_command_on_env=self.spack_command_on_env, - spack_dir=self.spack_dir) + spack_dir=self.spack_config.spack_dir) def setup_spack_env(self): """ @@ -89,14 +89,14 @@ class SpackOperation: set_bashrc_variable('SYSTEMNAME', self.spack_config.system_name, self.spack_config.bashrc_path, logger=self.logger) os.environ['SYSTEMNAME'] = self.spack_config.system_name - if self.spack_dir.exists() and self.spack_dir.is_dir(): - set_bashrc_variable('SPACK_USER_CACHE_PATH', str(self.spack_dir / ".spack"), self.spack_config.bashrc_path, + if self.spack_config.spack_dir.exists() and self.spack_config.spack_dir.is_dir(): + set_bashrc_variable('SPACK_USER_CACHE_PATH', str(self.spack_config.spack_dir / ".spack"), self.spack_config.bashrc_path, logger=self.logger) - set_bashrc_variable('SPACK_USER_CONFIG_PATH', str(self.spack_dir / ".spack"), self.spack_config.bashrc_path, + set_bashrc_variable('SPACK_USER_CONFIG_PATH', str(self.spack_config.spack_dir / ".spack"), self.spack_config.bashrc_path, logger=self.logger) self.logger.debug('Added env variables SPACK_USER_CACHE_PATH and SPACK_USER_CONFIG_PATH') else: - self.logger.error(f'Invalid installation path: {self.spack_dir}') + self.logger.error(f'Invalid installation path: {self.spack_config.spack_dir}') # Restart the bash after adding environment variables if self.spack_config.env: self.spack_env_operation.setup_spack_environment()