diff options
Diffstat (limited to 'sys-cluster/modules/files/createmodule.sh')
-rw-r--r-- | sys-cluster/modules/files/createmodule.sh | 166 |
1 files changed, 0 insertions, 166 deletions
diff --git a/sys-cluster/modules/files/createmodule.sh b/sys-cluster/modules/files/createmodule.sh deleted file mode 100644 index b44cf0512..000000000 --- a/sys-cluster/modules/files/createmodule.sh +++ /dev/null @@ -1,166 +0,0 @@ -#!/bin/bash -# -# createmodule.sh - Takes the name of a environment init script and -# produces a modulefile that duplicates the changes made by the init script -# -# Copyright (C) 2010-2012 by Orion E. Poplawski <orion@cora.nwra.com> -# -# 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, either version 2 of the License, or -# (at your option) any later version. - -# 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 -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - -usage="Usage: $0 [-p prefix] <initscript> [args]" - -usage() { - echo $usage 1>&2 - exit 1 -} - -while getopts "p:" opt -do - case $opt in - p) prefix=$OPTARG; shift 2;; - *) usage;; - esac -done - -# Need a script name -[ -z "$1" ] && usage - -# Need to be a readable script -if [ ! -r "$1" ] -then - echo "ERROR: Cannot read $1" 1>&2 - exit 1 -fi - -#Will print out array assignment list -printenvarray () { - env | while read x - do - key=${x%%=*} - value=${x#*=} - echo [$key]="'$value'" - done -} - -#Apparently we need to declare the associative arrays -declare -A env1 env2 - -#Record starting environment -eval env1=(`printenvarray`) - -#Source the environment script -. "$@" - -#Record ending environment -eval env2=(`printenvarray`) - -#Print out the modulefile -echo "#%Module 1.0" - -#Prefix -[ -n "$prefix" ] && echo -e "\nset prefix $prefix\n" - -#Subshell so we can sort the output -( -dedup() { - list=`mktemp` - echo $1 | sed -r -e 's,[^/]+/\.\./,,g' -e 's,[^/]+/\.\./,,g' -e 's/:/\n/g' | - while read x - do - grep -Fx ${x} $list && continue - if [ -n "$prefix" ] - then - echo $x | sed -e s,$prefix,\$prefix, - else - echo $x - fi - echo $x >> $list - done | tr '\n' : | sed -e 's/:$//' - rm $list -} - -#Keys that changed -for key in "${!env1[@]}" -do - if [ "${env1[$key]}" != "${env2[$key]}" ] - then - #Working directory change - if [ "$key" = PWD ] - then - if [ -n "$prefix" ] - then - echo -e "chdir\t\t${env2[PWD]}" | sed -e s,$prefix,\$prefix,g - else - echo -e "chdir\t\t${env2[PWD]}" - fi - #Test for delete - elif [ -z "${env2[$key]}" ] - then - echo -e "unsetenv\t${key}\t${env2[$key]}" - #Test for prepend - elif [ "${env2[$key]%${env1[$key]}}" != "${env2[$key]}" ] - then - added=$(dedup ${env2[$key]%:${env1[$key]}}) - echo -e "prepend-path\t$key\t${added}" - #Test for prepend plus : added at end (MANPATH) - elif [ "${env2[$key]%${env1[$key]}:}" != "${env2[$key]}" ] - then - added=$(dedup ${env2[$key]%${env1[$key]}:}) - echo -e "prepend-path\t$key\t${added}" - #Test for append - elif [ "${env2[$key]#${env1[$key]}}" != "${env2[$key]}" ] - then - added=$(dedup ${env2[$key]#:${env1[$key]}}) - echo -e "append-path\t$key\t${added}" - #Test for prepend plus append - elif [ "${env2[$key]%${env1[$key]}:*}" != "${env2[$key]}" ] - then - added=$(dedup ${env2[$key]%:${env1[$key]}*}) - echo -e "prepend-path\t$key\t${added}" - added=$(dedup ${env2[$key]#*${env1[$key]}:}) - echo -e "append-path\t$key\t${added}" - else - #Unhandled - echo "Unhandled change of $key" 1>&2 - echo "Before <${env1[$key]}>" 1>&2 - echo "After <${env2[$key]}>" 1>&2 - fi - fi - #Delete keys we've handled - unset env1[$key] - unset env2[$key] -done - -#New keys -for key in "${!env2[@]}" -do - if [ "$key" = OLDPWD ] - then - continue - fi - #Use prepend-path for new paths - if [ "${key/PATH/}" != "$key" ] - then - # TODO - Need to handle stripping of default MANPATH - echo -e "prepend-path\t${key}\t"$(dedup ${env2[$key]}) - else - if [ -n "$prefix" ] - then - echo -e "setenv\t\t${key}\t${env2[$key]}" | sed -e s,$prefix,\$prefix,g - else - echo -e "setenv\t\t${key}\t${env2[$key]}" - fi - fi -done -) | sort |