summaryrefslogtreecommitdiff
path: root/share
diff options
context:
space:
mode:
authorTodd Gamblin <tgamblin@llnl.gov>2014-08-16 14:53:57 -0700
committerTodd Gamblin <tgamblin@llnl.gov>2014-08-16 14:53:57 -0700
commit221cf6acb932442f5964243eb3413a1d921920c8 (patch)
tree18648f5438ac402ef44089a126f69891f62110c8 /share
parent57ddbd282aa58b084c1e2f3a2204a6fb9e7ac6e4 (diff)
downloadspack-221cf6acb932442f5964243eb3413a1d921920c8.tar.gz
spack-221cf6acb932442f5964243eb3413a1d921920c8.tar.bz2
spack-221cf6acb932442f5964243eb3413a1d921920c8.tar.xz
spack-221cf6acb932442f5964243eb3413a1d921920c8.zip
Consolidate most module code into spack.modules and spack.cmd.module
- One file with all the module classes (spack/modules.py) - Has an EnvModule superclass that does most of the work and consolidates common code - Subclasses have specializations for different module systems (TclModule, Dotkit) - One command (spack module) for all the types of modules to use - the one command is used by the scripts, only need to maintain in one place - has some subcommands for different module types, but they're handled mostly generically. - Consolidate zsh support into a single setup-env.sh script.
Diffstat (limited to 'share')
-rwxr-xr-xshare/spack/setup-env.sh (renamed from share/spack/setup-env.bash)115
-rwxr-xr-xshare/spack/setup-env.zsh122
2 files changed, 58 insertions, 179 deletions
diff --git a/share/spack/setup-env.bash b/share/spack/setup-env.sh
index c23a5acab4..7cadc6f202 100755
--- a/share/spack/setup-env.bash
+++ b/share/spack/setup-env.sh
@@ -24,16 +24,13 @@
##############################################################################
#
-#
# This file is part of Spack and sets up the spack environment for
-# bash shells. This includes dotkit support as well as putting spack
-# in your path. Source it like this:
-#
-# . /path/to/spack/share/spack/setup-env.bash
+# bash and zsh. This includes dotkit support, module support, and
+# it also puts spack in your path. Source it like this:
#
+# . /path/to/spack/share/spack/setup-env.sh
#
-
########################################################################
# This is a wrapper around the spack command that forwards calls to
# 'spack use' and 'spack unuse' to shell functions. This in turn
@@ -59,56 +56,46 @@
# spack dotfiles.
########################################################################
function spack {
- _spack_subcommand=$1; shift
- _spack_spec="$@"
+ _sp_subcommand=$1; shift
+ _sp_spec="$@"
# Filter out use and unuse. For any other commands, just run the
# command.
- case $_spack_subcommand in
- "use"|"unuse")
+ case $_sp_subcommand in
+ "use"|"unuse"|"load"|"unload")
# Shift any other args for use off before parsing spec.
- _spack_use_args=""
+ _sp_module_args=""
if [[ "$1" =~ ^- ]]; then
- _spack_use_args="$1"; shift
- _spack_spec="$@"
+ _sp_module_args="$1"; shift
+ _sp_spec="$@"
fi
- # Here the user has run use or unuse with a spec. Find a matching
- # spec with a dotkit using spack dotkit, then use or unuse the
- # result. If spack dotkit comes back with an error, do nothing.
- if _spack_full_spec=$(command spack dotkit $_spack_spec); then
- $_spack_subcommand $_spack_use_args $_spack_full_spec
- fi
- return
- ;;
- "load"|"unload")
- # Shift any other args for module off before parsing spec.
- _spack_module_args=""
- if [[ "$1" =~ ^- ]]; then
- _spack_module_args="$1"; shift
- _spack_spec="$@"
- fi
+ # Translate the parameter into pieces of a command.
+ # _sp_modtype is an arg to spack module find, and
+ # _sp_sh_cmd is the equivalent shell command.
+ case $_sp_subcommand in
+ "use"|"unuse")
+ _sp_modtype=dotkit
+ _sp_sh_cmd=$_sp_subcommand
+ ;;
+ "load"|"unload")
+ _sp_modtype=tcl
+ _sp_sh_cmd="module $_sp_subcommand"
+ ;;
+ esac
# Here the user has run use or unuse with a spec. Find a matching
- # spec with a dotkit using spack dotkit, then use or unuse the
- # result. If spack dotkit comes back with an error, do nothing.
- if _spack_full_spec=$(command spack tclmodule $_spack_spec); then
- $_spack_subcommand $_spack_module_args $_spack_full_spec
+ # spec using 'spack module find', then use the appropriate module
+ # tool's commands to add/remove the result from the environment.
+ # If spack module command comes back with an error, do nothing.
+ if _sp_full_spec=$(command spack module find $_sp_modtype $_sp_spec); then
+ $_sp_sh_cmd $_sp_module_args $_sp_full_spec
fi
return
;;
*)
- command spack $_spack_subcommand "$@"
- return
- ;;
+ command spack $_sp_subcommand $_sp_spec
esac
-
- # If no args or -h, just run that command as well.
- if [ -z "$1" -o "$1" = "-h" ]; then
- command spack $_spack_subcommand -h
- return
- fi
-
}
########################################################################
@@ -119,31 +106,45 @@ function spack {
function _spack_pathadd {
# If no variable name is supplied, just append to PATH
# otherwise append to that variable.
- varname=PATH
- path="$1"
+ _pa_varname=PATH
+ _pa_new_path="$1"
if [ -n "$2" ]; then
- varname="$1"
- path="$2"
+ _pa_varname="$1"
+ _pa_new_path="$2"
fi
# Do the actual prepending here.
- eval "oldvalue=\"\$$varname\""
- if [ -d "$path" ] && [[ ":$oldvalue:" != *":$path:"* ]]; then
- if [ -n "$oldvalue" ]; then
- eval "export $varname=\"$path:$oldvalue\""
+ eval "_pa_oldvalue=\$${_pa_varname}"
+
+ if [ -d "$_pa_new_path" ] && [[ ":$_pa_oldvalue:" != *":$_pa_new_path:"* ]]; then
+ if [ -n "$_pa_oldvalue" ]; then
+ eval "export $_pa_varname=\"$_pa_new_path:$_pa_oldvalue\""
else
- export $varname="$path"
+ export $_pa_varname="$_pa_new_path"
fi
fi
}
+#
+# Figure out where this file is. Below code needs to be portable to
+# bash and zsh.
+#
+_sp_source_file="${BASH_SOURCE[0]}" # Bash's location of last sourced file.
+if [ -z "$_sp_source_file" ]; then
+ _sp_source_file="$0:A" # zsh way to do it
+ if [[ "$_sp_source_file" == *":A" ]]; then
+ # Not zsh either... bail out with plain old $0,
+ # which WILL NOT work if this is sourced indirectly.
+ _sp_source_file="$0"
+ fi
+fi
#
-# Set up dotkit and path in the user environment
+# Set up modules and dotkit search paths in the user environment
#
-_spack_share_dir="$(dirname ${BASH_SOURCE[0]})"
-_spack_prefix="$(dirname $(dirname $_spack_share_dir))"
+_sp_share_dir="$(dirname $_sp_source_file)"
+_sp_prefix="$(dirname $(dirname $_sp_share_dir))"
-_spack_pathadd DK_NODE "$_spack_share_dir/dotkit"
-_spack_pathadd MODULEPATH "$_spack_share_dir/modules"
-_spack_pathadd PATH "$_spack_prefix/bin"
+_spack_pathadd DK_NODE "$_sp_share_dir/dotkit"
+_spack_pathadd MODULEPATH "$_sp_share_dir/modules"
+_spack_pathadd PATH "$_sp_prefix/bin"
diff --git a/share/spack/setup-env.zsh b/share/spack/setup-env.zsh
deleted file mode 100755
index 9aba92818d..0000000000
--- a/share/spack/setup-env.zsh
+++ /dev/null
@@ -1,122 +0,0 @@
-##############################################################################
-# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
-# Produced at the Lawrence Livermore National Laboratory.
-#
-# This file is part of Spack.
-# Written by David Beckingsale, david@llnl.gov, All rights reserved.
-# LLNL-CODE-647188
-#
-# For details, see https://scalability-llnl.github.io/spack
-# Please also see the LICENSE file for our notice and the LGPL.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License (as published by
-# the Free Software Foundation) version 2.1 dated February 1999.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
-# conditions of the GNU General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-##############################################################################
-
-#
-#
-# This file is part of Spack and sets up the spack environment for zsh shells.
-# This includes dotkit and module support as well as putting spack
-# in your path. Source it like this:
-#
-# source /path/to/spack/share/spack/setup-env.zsh
-#
-#
-
-
-########################################################################
-# This is a wrapper around the spack command that forwards calls to
-# 'spack use' and 'spack unuse' to shell functions. This in turn
-# allows them to be used to invoke dotkit functions.
-#
-# 'spack use' is smarter than just 'use' because it converts its
-# arguments into a unique spack spec that is then passed to dotkit
-# commands. This allows the user to use packages without knowing all
-# their installation details.
-#
-# e.g., rather than requring a full spec for libelf, the user can type:
-#
-# spack use libelf
-#
-# This will first find the available libelf dotkits and use a
-# matching one. If there are two versions of libelf, the user would
-# need to be more specific, e.g.:
-#
-# spack use libelf@0.8.13
-#
-# This is very similar to how regular spack commands work and it
-# avoids the need to come up with a user-friendly naming scheme for
-# spack dotfiles.
-########################################################################
-function spack {
- _spack_subcommand=${1}; shift
- _spack_spec="$@"
-
- # Filter out use and unuse. For any other commands, just run the
- # command.
- case ${_spack_subcommand} in
- "use"|"unuse")
- # Shift any other args for use off before parsing spec.
- _spack_use_args=""
- if [[ "$1" =~ ^- ]]; then
- _spack_use_args="$1"; shift
- _spack_spec="$@"
- fi
-
- # Here the user has run use or unuse with a spec. Find a matching
- # spec with a dotkit using spack dotkit, then use or unuse the
- # result. If spack dotkit comes back with an error, do nothing.
- if _spack_full_spec=$(command spack dotkit $_spack_spec); then
- $_spack_subcommand $_spack_use_args $_spack_full_spec
- fi
- return
- ;;
- "load"|"unload")
- # Shift any other args for module off before parsing spec.
- _spack_module_args=""
- if [[ "$1" =~ ^- ]]; then
- _spack_module_args="$1"; shift
- _spack_spec="$@"
- fi
-
- # Here the user has run use or unuse with a spec. Find a matching
- # spec with a dotkit using spack dotkit, then use or unuse the
- # result. If spack dotkit comes back with an error, do nothing.
- if _spack_full_spec=$(command spack tclmodule ${_spack_spec}); then
- module ${_spack_subcommand} ${_spack_module_args} ${_spack_full_spec}
- fi
- return
- ;;
- *)
- command spack $_spack_subcommand "$@"
- return
- ;;
- esac
-
- # If no args or -h, just run that command as well.
- if [ -z "$1" -o "$1" = "-h" ]; then
- command spack $_spack_subcommand -h
- return
- fi
-
-}
-
-#
-# Set up dotkit and path in the user environment
-#
-_spack_share_dir="$(dirname $0:A)"
-_spack_prefix="$(dirname $(dirname ${_spack_share_dir}))"
-
-export DK_NODE="$_spack_share_dir/dotkit:$DK_NODE"
-export MODULEPATH="$_spack_share_dir/modules:$MODULEPATH"
-export PATH="$_spack_prefix/bin:$PATH"