fis-gtm/sr_unix/gtmprofile.gtc

300 lines
13 KiB
Plaintext

#################################################################
# #
# Copyright 2010, 2013 Fidelity Information Services, Inc.#
# #
# This source code contains the intellectual property #
# of its copyright holder(s), and is made available #
# under a license. If you do not know the terms of #
# the license, please stop and do not read further. #
# #
#################################################################
# Usage: source "GTMDIST"/gtmprofile
# Sets up environment for single-user use of GT.M with reasonable defaults.
# Explicitly specify gtm_chset=UTF-8 before running this for UTF-8 mode.
# Explicitly specify the gtmdir=directory before sourcing this for simple multi-user environments.
# System administrators should adapt as appropriate for more complex multi-user and production environments.
# Expects the following environment variables to be set:
# $gtm_chset - set to "UTF-8" if GT.M is to run in Unicode mode
# $gtm_passwd and $gtm_dbkeys if database encryption is used
# Attempts to set the following environment variables to reasonable values:
# $gtm_dist $gtmgbldir $gtm_icu_version $gtm_log $gtm_principal_editing $gtm_prompt $gtm_retention $gtmroutines $gtm_tmp $gtmver
# The following shell variables are used and left unset:
# $old_gtm_dist $old_gtmroutines $old_gtmver $tmp_gtm_shlib $tmp_gtm_tmp $tmp_passwd
# The following shell variables are used and left set:
# $arch
# ; is used as a separator for sed as being the character most unlikely to be in file names
# Set gtm_arch - GT.M installation script sets the actual architecture & shared library extension for use in this script
arch="ARCH"
# Save gtmroutines if it exists because we need to temporarily override it
if [ -n "$gtmroutines" ] ; then
old_gtmroutines="$gtmroutines"
else
unset old_gtmroutines
fi
# Save gtm_passwd if defined because we don't want to mess with prompting for a password within this script
# Need to distinguish between $gtm_passwd not set at all vs. set to null string
if [ -z "${gtm_passwd+isset}" ] ; then
unset tmp_passwd
else
tmp_passwd=$gtm_passwd ; unset gtm_passwd
fi
# If an existing GT.M is defined in $gtm_dist, capture it to change version number & directory in environment variables
# Since %XCMD is new, cannot assume that old GT.M version has it
if [ -n "$gtm_dist" ] ; then
old_gtm_dist=$gtm_dist
if [ -f $gtm_dist/_XCMD.m ] ; then
tmp_gtm_shlib=`basename $gtm_dist/libgtmshr.* | cut -d . -f 2` ; export tmp_gtm_shlib
if [ -f "$gtm_dist/libgtmutil.$tmp_gtm_shlib" ] ; then gtmroutines="$gtm_dist/libgtmutil.$tmp_gtm_shlib"
else gtmroutines=$gtm_dist ; fi
export gtmroutines
old_gtmver=`$gtm_dist/mumps -run %XCMD 'Write $Piece($ZVersion," ",2),"_",$Piece($ZVersion," ",4)'`
else
unset old_gtmver
fi
else unset old_gtm_dist old_gtmver
fi
# Set gtm_dist - GT.M installation script sets the actual directory name
gtm_dist="GTMDIST" ; export gtm_dist
# Determine name of shared library file name extension on this platform
tmp_gtm_shlib=`basename $gtm_dist/libgtmshr.* | cut -d . -f 2` ; export tmp_gtm_shlib
# Idempotence says change the environment only if a new GT.M directory is being pointed to
# otherwise just restore $gtmroutines and exit
if [ $gtm_dist != "$old_gtm_dist" ] ; then
# Force $gtmroutines to guarantee access to %XCMD for now; repaired later
if [ -f "$gtm_dist/libgtmutil.$tmp_gtm_shlib" ] ; then gtmroutines="$gtm_dist/libgtmutil.$tmp_gtm_shlib $gtm_dist"
else gtmroutines=$gtm_dist ; fi
export gtmroutines
# Set $gtm_icu_version if icu-config is available - should be set before checking for UTF-8 mode
# use whence on z/OS and which elsewhere
if [ "zos" = $arch ] ; then
which="whence"
else
which="which"
fi
if [ -z "$gtm_icu_version" -a -n "`$which icu-config`" ] ; then
gtm_icu_version=`icu-config --version | gtm_chset=M $gtm_dist/mumps -run %XCMD 'Read x Write $Piece(x,".",1,2)'`
export gtm_icu_version
fi
# If UTF-8 is selected, and UTF-8 mode works, set $gtm_dist to utf8 subdirectory
# Note that if UTF-8 mode cannot be properly set, GT.M remains configured for M mode
if [ "zos" = $arch ] ; then
# for z/OS make sure the en_US.UTF-8 locale is available and set $gtm_chset_locale if it is
utflocale=`locale -a | grep -i en_us | grep -i utf | sed 's/.lp64$//' | grep '8$' | head -n 1`
if [ "`echo $gtm_chset|tr utf UTF`" = "UTF-8" -a -d $gtm_dist/utf8 -a $utflocale = en_US.UTF-8 ] ; then
gtm_chset_locale=$utflocale; export gtm_chset_locale
if [ "`echo Halt | gtm_prompt='GTM>' $gtm_dist/utf8/mumps -dir | tail -n 1`" = 'GTM>' ] ; then
gtm_dont_tag_UTF8_ASCII=0; export gtm_dont_tag_UTF8_ASCII
gtm_dist=$gtm_dist/utf8
if [ -f "$gtm_dist/libgtmutil.$tmp_gtm_shlib" ] ; then
gtmroutines="$gtm_dist/libgtmutil.$tmp_gtm_shlib $gtm_dist"
else gtmroutines=$gtm_dist ; fi
else
unset gtm_chset_locale # undo the set
fi
fi
else
# default $LC_CTYPE if not set
if [ "`echo $gtm_chset|tr utf UTF`" = "UTF-8" -a -d $gtm_dist/utf8 ] ; then
if [ -z "$LC_CTYPE" ] ; then
LC_CTYPE=`locale -a | grep -i .utf | head -n 1` ; export LC_CTYPE
fi
echo $LC_CTYPE | grep -i .utf > /dev/null
if [ $? = 0 -a "`echo Halt | gtm_prompt='GTM>' $gtm_dist/utf8/mumps -dir | tail -n 1`" = 'GTM>' ] ; then
gtm_dist=$gtm_dist/utf8
if [ -f "$gtm_dist/libgtmutil.$tmp_gtm_shlib" ] ; then
gtmroutines="$gtm_dist/libgtmutil.$tmp_gtm_shlib $gtm_dist"
else gtmroutines=$gtm_dist ; fi
fi
fi
fi
# Set $gtmver - must be set before $gtmroutines and $gtm_prompt are set
gtmver=`$gtm_dist/mumps -run %XCMD 'Write $Piece($ZVersion," ",2),"_",$Piece($ZVersion," ",4)'` ; export gtmver
# Set $gtm_prompt - must be set after checking for UTF-8 mode since prompt may be based on gtm_dist
if [ -z "$gtm_prompt" ] ; then
gtm_prompt="GTM>"
else
if [ -n "$old_gtm_dist" ] ; then
gtm_prompt=`echo $gtm_prompt | sed "s;$old_gtm_dist;$gtm_dist;"`
fi
if [ -n "$old_gtmver" ] ; then
gtm_prompt=`echo $gtm_prompt | sed "s;$old_gtmver;$gtmver;"`
fi
fi
export gtm_prompt
# Set $gtmdir and create default directories if they don't exist
if [ -n "$gtmdir" ] ; then
if [ -n "$old_gtm_dist" ] ; then
gtmdir=`echo $gtmdir | sed "s;$old_gtm_dist;$gtm_dist;"`
fi
if [ -n "$old_gtmver" ] ; then
gtmdir=`echo $gtmdir | sed "s;$old_gtmver;$gtmver;"`
fi
else
gtmdir=$HOME/.fis-gtm
fi
export gtmdir
mkdir -p $gtmdir/r $gtmdir/$gtmver/g $gtmdir/$gtmver/o $gtmdir/$gtmver/r $gtmdir/$gtmver/o/utf8
# Set $gtmroutines - edit for new GT.M if previously set, otherwise use default
if [ -n "$old_gtmroutines" ] ; then
gtmroutines="$old_gtmroutines"
if [ -n "$old_gtm_dist" ] ; then
gtmroutines=`echo $gtmroutines | sed "s;$old_gtm_dist;$gtm_dist;"`
fi
if [ -n "$old_gtmver" ] ; then
gtmroutines=`echo $gtmroutines | sed "s;$old_gtmver;$gtmver;"`
fi
else
if [ -f "$gtm_dist/libgtmutil.$tmp_gtm_shlib" ] ; then gtmroutines="$gtm_dist/libgtmutil.$tmp_gtm_shlib $gtm_dist"
else gtmroutines=$gtm_dist ; fi
if [ "utf8" = `basename $gtm_dist` ] ; then
if [ -d $gtm_dist/plugin/o/utf8 ] ; then
gtmroutines=`$gtm_dist/mumps -run %XCMD 'set x=$ztrnlnm("gtm_dist")_"/plugin/o/utf8/*."_$ztrnlnm("tmp_gtm_shlib") for set y=$zsearch(x) quit:""=y write y," "'`"$gtm_dist/plugin/o/utf8($gtm_dist/plugin/r) $gtmroutines"
fi
gtmroutines=`$gtm_dist/mumps -run %XCMD 'set x=$ztrnlnm("gtmdir")_"/"_$ztrnlnm("gtmver")_"/o/utf8/*."_$ztrnlnm("tmp_gtm_shlib") for set y=$zsearch(x) quit:""=y write y," "'`"$gtmdir/$gtmver/o/utf8($gtmdir/$gtmver/r $gtmdir/r) $gtmroutines"
else
if [ -d $gtm_dist/plugin/o ] ; then
gtmroutines=`$gtm_dist/mumps -run %XCMD 'set x=$ztrnlnm("gtm_dist")_"/plugin/o/*."_$ztrnlnm("tmp_gtm_shlib") for set y=$zsearch(x) quit:""=y write y," "'`"$gtm_dist/plugin/o($gtm_dist/plugin/r) $gtmroutines"
fi
gtmroutines=`$gtm_dist/mumps -run %XCMD 'set x=$ztrnlnm("gtmdir")_"/"_$ztrnlnm("gtmver")_"/o/*."_$ztrnlnm("tmp_gtm_shlib") for set y=$zsearch(x) quit:""=y write y," "'`"$gtmdir/$gtmver/o($gtmdir/$gtmver/r $gtmdir/r) $gtmroutines"
fi
fi
export gtmroutines
# Set $gtmgbldir - edit for new GT.M if previously set, otherwise use default and create if needed
if [ -n "$gtmgbldir" ] ; then
if [ -n "$old_gtm_dist" ] ; then
gtmgbldir=`echo $gtmgbldir | sed "s;$old_gtm_dist;$gtm_dist;"`
fi
if [ -n "$old_gtmver" ] ; then
gtmgbldir=`echo $gtmgbldir | sed "s;$old_gtmver;$gtmver;"`
fi
else
gtmgbldir=$gtmdir/$gtmver/g/gtm.gld
fi
export gtmgbldir
# Set $gtm_tmp
tmp_gtm_tmp=`uname -s`
if [ "HP-UX" = $tmp_gtm_tmp -o "SunOS" = $tmp_gtm_tmp ] ; then
tmp_gtm_tmp=/var/tmp/fis-gtm/$gtmver
else
tmp_gtm_tmp=/tmp/fis-gtm/$gtmver
fi
if [ -d "$tmp_gtm_tmp" ] ; then
gtm_tmp=$tmp_gtm_tmp
else
if [ -n "$old_gtm_dist" ] ; then
gtm_tmp=`echo $gtm_tmp | sed "s;$old_gtm_dist;$gtm_dist;"`
fi
if [ -n "$old_gtmver" ] ; then
gtm_tmp=`echo $gtm_tmp | sed "s;$old_gtmver;$gtmver;"`
fi
if [ ! -d "$gtm_tmp" ] ; then
mkdir -p $tmp_gtm_tmp ; chmod a+rw,+t $tmp_gtm_tmp ; gtm_tmp=$tmp_gtm_tmp
fi
fi
export gtm_tmp
# Set $gtm_log - use recommended directory if it exists, otherwise modify old value if it exists
# Don't need to worry about non-existent directory because gtmsecshr will create it
# $gtm_tmp will be used if $gtm_log not defined
if [ -d /var/log/fis-gtm/$gtmver ] ; then
gtm_log=/var/log/fis-gtm/$gtmver
elif [ -n "$gtm_log" ] ; then
if [ -n "$old_gtm_dist" ] ; then
gtm_log=`echo $gtm_log | sed "s;$old_gtm_dist;$gtm_dist;"`
fi
if [ -n "$old_gtmver" ] ; then
gtm_log=`echo $gtm_log | sed "s;$old_gtmver;$gtmver;"`
fi
else
gtm_log=$gtm_tmp
fi
export gtm_log
# Set $PATH
if [ -n "$old_gtm_dist" ] ; then
PATH=`echo $PATH | sed "s;$old_gtm_dist;$gtm_dist;"`
fi
if [ -n "$old_gtmver" ] ; then
PATH=`echo $PATH | sed "s;$old_gtmver;$gtmver;"`
fi
if [ -z "`echo $PATH | grep -E \(:\|\^\)$gtm_dist\(:\|$\)`" ] ; then
PATH=$PATH:$gtm_dist
fi
# Other useful environment variables
# System administrators - add, delete or modify GT.M environment variables here as appropriate for your installation
if [ -z "$gtm_etrap" ] ; then
gtm_etrap='Write:(0=$STACK) "Error occurred: ",$ZStatus,!' ; export gtm_etrap
fi
if [ -z "$gtm_principal_editing" ] ; then
gtm_principal_editing="EDITING" ; export gtm_principal_editing
fi
if [ -z "$gtm_repl_instance" ] ; then
gtm_repl_instance=$gtmdir/$gtmver/g/gtm.repl ; export gtm_repl_instance
elif [ -n "$old_gtmver" ] ; then
gtm_repl_instance=`echo $gtm_repl_instance | sed "s;$old_gtmver;$gtmver;"`
fi
if [ -z "$gtm_retention" ] ; then
gtm_retention=42 ; export gtm_retention
fi
# Set environment variables for plugins in $gtm_dist/plugin
tmp_gtm_tmp=`uname -s`
if [ "HP-UX" = $tmp_gtm_tmp -o "SunOS" = $tmp_gtm_tmp ] ; then
tmp_gtm_tmp=/var/tmp/
else
tmp_gtm_tmp=/tmp/
fi
tmp_gtm_tmp=$tmp_gtm_tmp`$gtm_dist/mumps -run %XCMD 'write $$%RANDSTR^%RANDSTR(12)'`.tmp
$gtm_dist/mumps -run %XCMD 'set x=$ztrnlnm("gtm_dist")_"/plugin/*.xc" for set y=$zsearch(x,213) quit:""=y set z=$zparse(y,"NAME") write "GTMXC_",z,"=",y," ; export GTMXC_",z,!' >$tmp_gtm_tmp
if [ -s $tmp_gtm_tmp ] ; then . $tmp_gtm_tmp ; fi
rm $tmp_gtm_tmp
# Define aliases
alias dse="$gtm_dist/dse"
alias gde="$gtm_dist/mumps -run GDE"
alias gtm="$gtm_dist/gtm"
alias lke="$gtm_dist/lke"
alias mupip="$gtm_dist/mupip"
# Create default global directory and database if they don't exist
# Must handle case where database file path is relative to global directory
if [ ! -f $gtmgbldir ] ; then
if [ -f $gtm_dist/gdedefaults ] ; then
$gtm_dist/mumps -run %XCMD 'Write "@","'$gtm_dist'/gdedefaults",!,"exit",!' | $gtm_dist/mumps -run GDE; stty sane
else
echo exit | $gtm_dist/mumps -run GDE
fi
fi
if [ ! -f "`dirname $gtmgbldir`/`basename $gtmgbldir gld`dat" ] ; then
( cd `dirname $gtmgbldir` ; mupip create ; mupip set -journal="on,before" -region "*" )
fi
# If $old_gtm_dist and $gtm_dist are the same, need to restore $gtmroutines
else
gtmroutines="$old_gtmroutines" ; export gtmroutines
fi
# Restore gtm_passwd if it was set
if [ ! -z "${tmp_passwd+isset}" ] ; then
gtm_passwd=$tmp_passwd ; export gtm_passwd
fi
unset old_gtm_dist old_gtmver old_gtmroutines tmp_gtm_shlib tmp_gtm_tmp tmp_passwd