summaryrefslogtreecommitdiff
path: root/share/spack/setup-env.csh
blob: ad20d346d17607a50e2cfcb50f15a823d648943a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)

#
# This file is part of Spack and sets up the spack environment for
# csh and tcsh.  This includes environment modules and lmod support, and
# it also puts spack in your path.  Source it like this:
#
#    source /path/to/spack/share/spack/setup-env.csh
#

# prevent infinite recursion when spack shells out (e.g., on cray for modules)
if ($?_sp_initializing) then
    exit 0
endif
setenv _sp_initializing true

# If SPACK_ROOT is not set, we'll try to find it ourselves.
# csh/tcsh don't have a built-in way to do this, but both keep files
# they are sourcing open. We use /proc on linux and lsof on macs to
# find this script's full path in the current process's open files.
if (! $?SPACK_ROOT) then
    # figure out a command to list open files
    if (-d /proc/$$/fd) then
        set _sp_lsof = "ls -l /proc/$$/fd"
    else
        which lsof > /dev/null
        if ($? == 0) then
            set _sp_lsof = "lsof -p $$"
        endif
    endif

    # filter this script out of list of open files
    if ( $?_sp_lsof ) then
        set _sp_source_file = `$_sp_lsof | sed -e 's/^[^/]*//' | grep "/setup-env.csh"`
    endif

    # This script is in $SPACK_ROOT/share/spack; get the root with dirname
    if ($?_sp_source_file) then
        set _sp_share_spack = `dirname "$_sp_source_file"`
        set _sp_share = `dirname "$_sp_share_spack"`
        setenv SPACK_ROOT `dirname "$_sp_share"`
    endif

    if (! $?SPACK_ROOT) then
        echo "==> Error: setup-env.csh couldn't figure out where spack lives."
        echo "    Set SPACK_ROOT to the root of your spack installation and try again."
        exit 1
    endif
endif

# Command aliases point at separate source files
set _spack_source_file = $SPACK_ROOT/share/spack/setup-env.csh
set _spack_share_dir = $SPACK_ROOT/share/spack
alias spack          'set _sp_args = (\!*); source $_spack_share_dir/csh/spack.csh'
alias spacktivate    'spack env activate'
alias _spack_pathadd 'set _pa_args = (\!*) && source $_spack_share_dir/csh/pathadd.csh'

# Identify and lock the python interpreter
if (! $?SPACK_PYTHON) then
    setenv SPACK_PYTHON ""
endif
foreach cmd ("$SPACK_PYTHON" python3 python python2)
    command -v "$cmd" >& /dev/null
    if ($status == 0) then
        setenv SPACK_PYTHON `command -v "$cmd"`
        break
    endif
end

# Set variables needed by this script
_spack_pathadd PATH "$SPACK_ROOT/bin"
eval `spack --print-shell-vars csh`

# Set up module search paths in the user environment
set tcl_roots = `echo $_sp_tcl_roots:q | sed 's/:/ /g'`
set compatible_sys_types = `echo $_sp_compatible_sys_types:q | sed 's/:/ /g'`
foreach tcl_root ($tcl_roots:q)
    foreach systype ($compatible_sys_types:q)
        _spack_pathadd MODULEPATH "$tcl_root/$systype"
    end
end

# done: unset sentinel variable as we're no longer initializing
unsetenv _sp_initializing