summaryrefslogtreecommitdiff
path: root/share
diff options
context:
space:
mode:
authorTodd Gamblin <tgamblin@llnl.gov>2018-10-14 15:21:57 -0700
committerTodd Gamblin <tgamblin@llnl.gov>2018-11-09 00:31:24 -0800
commitd14f7b82bb0435053a94ae26fd597767d151f8a9 (patch)
tree4736d20cf3875e88dbf6cde96ba1935e48f32ab8 /share
parent15c5c36eafa41aca9267581b1e00fdce67cc4b36 (diff)
downloadspack-d14f7b82bb0435053a94ae26fd597767d151f8a9.tar.gz
spack-d14f7b82bb0435053a94ae26fd597767d151f8a9.tar.bz2
spack-d14f7b82bb0435053a94ae26fd597767d151f8a9.tar.xz
spack-d14f7b82bb0435053a94ae26fd597767d151f8a9.zip
env: add spack env activate/deactivate and shell support
- `spack env activate foo`: sets SPACK_ENV to the current active env name - `spack env deactivate`: unsets SPACK_ENV, deactivates the environment - added support to setup_env.sh and setup_env.csh - other env commands work properly with SPACK_ENV, as with an environment arguments. - command-line --env arguments take precedence over the active environment, if given.
Diffstat (limited to 'share')
-rw-r--r--share/spack/csh/spack.csh42
-rwxr-xr-xshare/spack/setup-env.csh3
-rwxr-xr-xshare/spack/setup-env.sh36
3 files changed, 80 insertions, 1 deletions
diff --git a/share/spack/csh/spack.csh b/share/spack/csh/spack.csh
index a78665beb3..6690f08eed 100644
--- a/share/spack/csh/spack.csh
+++ b/share/spack/csh/spack.csh
@@ -63,6 +63,47 @@ case cd:
cd `\spack location $_sp_arg $_sp_args`
endif
breaksw
+case env:
+ shift _sp_args # get rid of 'env'
+
+ set _sp_arg=""
+ [ $#_sp_args -gt 0 ] && set _sp_arg = ($_sp_args[1])
+
+ if ( "$_sp_arg" == "-h" ) then
+ \spack env -h
+ else
+ switch ($_sp_arg)
+ case activate:
+ set _sp_env_arg=""
+ [ $#_sp_args -gt 1 ] && set _sp_env_arg = ($_sp_args[2])
+
+ if ( "$_sp_env_arg" == "" || "$_sp_env_arg" =~ "-*" ) then
+ # no args or does not start with -: just execute
+ \spack $_sp_flags env $_sp_args
+ else
+ shift _sp_args # consume 'activate' or 'deactivate'
+ # actual call to activate: source the output
+ eval `\spack $_sp_flags env activate --csh $_sp_args`
+ endif
+ breaksw
+ case deactivate:
+ set _sp_env_arg=""
+ [ $#_sp_args -gt 1 ] && set _sp_env_arg = ($_sp_args[2])
+
+ if ( "$_sp_env_arg" != "" ) then
+ # with args: execute the command
+ \spack $_sp_flags env $_sp_args
+ else
+ # no args: source the output
+ eval `\spack $_sp_flags env deactivate --csh`
+ endif
+ breaksw
+ default:
+ echo default
+ \spack $_sp_flags env $_sp_args
+ breaksw
+ endsw
+ endif
case use:
case unuse:
case load:
@@ -113,3 +154,4 @@ endsw
_sp_end:
unset _sp_args _sp_full_spec _sp_modtype _sp_module_args
unset _sp_sh_cmd _sp_spec _sp_subcommand _sp_flags
+unset _sp_arg _sp_env_arg
diff --git a/share/spack/setup-env.csh b/share/spack/setup-env.csh
index cb45f8f74c..4e471b1121 100755
--- a/share/spack/setup-env.csh
+++ b/share/spack/setup-env.csh
@@ -28,5 +28,6 @@ if ($?SPACK_ROOT) then
_spack_pathadd DK_NODE "$_sp_dotkit_root/$_sp_sys_type"
_spack_pathadd MODULEPATH "$_sp_tcl_root/$_sp_sys_type"
else
- echo "ERROR: Sourcing spack setup-env.csh requires setting SPACK_ROOT to the root of your spack installation"
+ echo "ERROR: Sourcing spack setup-env.csh requires setting SPACK_ROOT to "
+ echo " the root of your spack installation."
endif
diff --git a/share/spack/setup-env.sh b/share/spack/setup-env.sh
index 9f2bb2618c..af18fcd4e1 100755
--- a/share/spack/setup-env.sh
+++ b/share/spack/setup-env.sh
@@ -89,6 +89,42 @@ function spack {
fi
return
;;
+ "env")
+ _sp_arg=""
+ if [ -n "$1" ]; then
+ _sp_arg="$1"
+ shift
+ fi
+
+ if [ "$_sp_arg" = "-h" ]; then
+ command spack env -h
+ else
+ case $_sp_arg in
+ activate)
+ if [ -z "$1" -o "${1#-}" != "$1" ]; then
+ # no args or does not start with -: just execute
+ command spack "${args[@]}"
+ else
+ # actual call to activate: source the output
+ eval $(command spack $_sp_flags env activate --sh "$@")
+ fi
+ ;;
+ deactivate)
+ if [ -n "$1" ]; then
+ # with args: execute the command
+ command spack "${args[@]}"
+ else
+ # no args: source the output.
+ eval $(command spack $_sp_flags env deactivate --sh)
+ fi
+ ;;
+ *)
+ command spack "${args[@]}"
+ ;;
+ esac
+ fi
+ return
+ ;;
"use"|"unuse"|"load"|"unload")
# Shift any other args for use off before parsing spec.
_sp_subcommand_args=""