1# sh/bash/zsh configuration file for Gromacs
2# First we remove old gromacs stuff from the paths
3# by selecting everything else.
4# This is not 100% necessary, but very useful when we
5# repeatedly switch between gmx versions in a shell.
6
7#we make use of IFS, which needs shwordsplit in zsh
8test -n "${ZSH_VERSION+set}" && setopt shwordsplit
9old_IFS="$IFS"
10IFS=":"
11
12replace_in_path() {
13  # Parse PATH-like variable $1, and return a copy of it with any instances of $3 removed and $2 added to the beginning.
14  # If $3 is empty, do not remove anything.
15  local tmppath oldpath to_remove to_add old_shell_opts
16  oldpath="$1"
17  to_add="$2"
18  to_remove="$3"
19  if test -z "${oldpath}"; then
20    echo "${to_add}"
21  else
22    if test "${oldpath}" = ":"; then
23      echo "${to_add}:"
24    else
25      tmppath="${to_add}"
26      old_shell_opts="$-"
27      set -o noglob
28      set -- ${oldpath}"" # Will put tokens to $@, including empty ones
29      # If did not have noglob ("f") enabled before, disable it back
30      if test -n "${old_shell_opts##*f*}"; then
31        set +o noglob
32      fi
33      for i in "$@"; do
34        if test \( -z "${to_remove}" \) -o \( "$i" != "${to_remove}" \); then
35          tmppath="${tmppath}:${i}"
36        fi
37      done
38      echo "${tmppath}"
39    fi
40  fi
41}
42
43# Keep current values to remove later
44OLD_GMXLDLIB="$GMXLDLIB"
45OLD_GMXBIN="$GMXBIN"
46OLD_GMXMAN="$GMXMAN"
47
48##########################################################
49# This is the real configuration part. We save the Gromacs
50# things in separate vars, so we can remove them later.
51# If you move gromacs, change the first line.
52##########################################################
53GMXPREFIX=@CMAKE_INSTALL_PREFIX@
54GMXBIN=${GMXPREFIX}/@CMAKE_INSTALL_BINDIR@
55GMXLDLIB=${GMXPREFIX}/@CMAKE_INSTALL_LIBDIR@
56GMXMAN=${GMXPREFIX}/@CMAKE_INSTALL_MANDIR@
57GMXDATA=${GMXPREFIX}/@GMX_INSTALL_GMXDATADIR@
58GMXTOOLCHAINDIR=${GMXPREFIX}/@GMX_INSTALL_CMAKEDIR@
59GROMACS_DIR=${GMXPREFIX}
60
61@LD_LIBRARY_PATH@=$(replace_in_path "${@LD_LIBRARY_PATH@}" "${GMXLDLIB}" "${OLD_GMXLDLIB}")
62PKG_CONFIG_PATH=$(replace_in_path "${PKG_CONFIG_PATH}" "${GMXLDLIB}/../libdata/pkgconfig" "${OLD_GMXLDLIB}/pkgconfig")
63PATH=$(replace_in_path "${PATH}" "${GMXBIN}" "${OLD_GMXBIN}")
64MANPATH=$(replace_in_path "${MANPATH}" "${GMXMAN}" "${OLD_GMXMAN}")
65
66# export should be separate, so /bin/sh understands it
67export GMXBIN GMXLDLIB GMXMAN GMXDATA @LD_LIBRARY_PATH@ PATH MANPATH
68export PKG_CONFIG_PATH GROMACS_DIR
69
70IFS="$old_IFS"
71unset old_IFS
72
73# read bash completions if understand how to use them
74# and this shell supports extended globbing
75if test -n "${BASH_VERSION+set}" && (complete) > /dev/null 2>&1; then
76  if (shopt -s extglob) > /dev/null 2>&1; then
77    shopt -s extglob
78    if [ -f $GMXBIN/gmx-completion.bash ]; then
79      source $GMXBIN/gmx-completion.bash
80      for cfile in $GMXBIN/gmx-completion-*.bash ; do
81        source $cfile
82      done
83    fi
84  fi
85elif test -n "${ZSH_VERSION+set}" > /dev/null 2>&1 ; then
86  autoload bashcompinit
87  if (bashcompinit) > /dev/null 2>&1; then
88    bashcompinit
89    if [ -f $GMXBIN/gmx-completion.bash ]; then
90      source $GMXBIN/gmx-completion.bash
91      for cfile in $GMXBIN/gmx-completion-*.bash ; do
92        source $cfile
93      done
94    fi
95  fi
96fi
97