fis-gtm/sr_unix/setactive1.csh

319 lines
9.4 KiB
Tcsh

#################################################################
# #
# Copyright 2001, 2005 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. #
# #
#################################################################
#
###############################################################################################
#
# setactive1.csh - auxiliary script for setactive.csh
# (based on the VMS script GTM$COM:SETACTIVE.COM)
#
# Because setactive.csh must set environment variables, it cannot be run as a subproces,
# but rather must be source'd. Unfortunately, the logic required is too complex (due,
# apparently to problems buffering the command input stream), so setactive.csh invokes
# this shell script as a subprocess to deal with the logic. In order to pass information
# back to the parent process, setactive1.csh writes a shell script to be source'd by the
# parent process on completion.
#
# Arguments:
# $1 - new version (a, d, p, or specific version number)
# $2 - image type (b, d, or p for bta, dbg, or pro)
# $3 - 1 => interactive invocation, prompt for input and correcctions
# 0 => non-interactive invocation
# $4 - name of file to which to write setenv commands
# (probably somewhere in /tmp)
#
# At exit:
# $status == 0 => success
# != 0 => failure
#
# If $status == 0, then the file named in $4 contains the necessary set and
# setenv commands to effect a change of GT.M version. This file should be
# source'd by setactive.csh.
#
# N. B. Most of the labels aren't actually used; they're just for cross-reference with
# the VMS GTM$COM:SETACTIVE.COM file.
#
###############################################################################################
# Echo is modified for R-F test: Layek - 2/16/99
# Some times GROUP may be undefined
if ($?GROUP == 0) setenv GROUP ""
set setactive_status = 1 # not found yet
if ( $?gtm_ver_noecho == 0 ) then
echo "Versions:"
echo " Active " $gtm_verno
echo " Production " $gtm_curpro
endif
set setactive_p1 = `echo $1 | tr '[a-z]' '[A-Z]'`
set setactive_p2 = "$2"
set setactive_interact = "$3"
set setactive_gtmdev = ( $gtm_gtmdev )
set setactive_prompt_for_type = "0"
unset setactive_found_version
unset setactive_doesnt_exist
GETVER:
while ( $?setactive_found_version == "0" && $?setactive_doesnt_exist == "0" )
if ( $setactive_interact == "1" && $setactive_p1 == "" && $setactive_p2 == "" ) then
echo -n "Enter A, P, D, <version number> or <CR>: "
set setactive_p1 = $<
set setactive_prompt_for_type = "1" # setactive_p1 won't be null anymore, but we can test for this
endif
switch ($setactive_p1)
case "":
case "[Aa]":
echo "Version not changed" # no change if unspecified or
set setactive_found_version # specified as currently active version
breaksw
case "[Dd]":
case "[Pp]":
setenv gtm_verno $gtm_curpro # production version
set setactive_found_version
breaksw
default:
# It's not a code letter so assume it's a version name; check for existence of directory.
# Convert first argument to its corresponding development directory name.
set setactive_version = "`$shell -f $gtm_tools/gtm_version_dirname.csh $setactive_p1`"
VER_LOOP:
# Now look for a matching release directory.
# First look through all devices on which it might reside:
foreach setactive_device ($gtm_gtmdev)
if ( "$setactive_device" == "NULL" ) then
set setactive_device = "~"
endif
set setactive_topdir = $setactive_device/$gtm_topdir
if ( -d $setactive_topdir/$setactive_version ) then
if ( -f $setactive_topdir/$setactive_version/gtmsrc.csh ) then
setenv gtm_verno $setactive_version # directory name, not input argument value
set setactive_found_version
else
echo "$setactive_topdir/$setactive_version exists, but there's no gtmsrc.csh"
set setactive_doesnt_exist # actually, just isn't set up properly
endif
break
endif
end
if ( $?setactive_found_version == "0" || $?setactive_doesnt_exist == "1" ) then
echo "Version $setactive_p1 is not available"
set setactive_p1 = ""
if ( $setactive_interact == "0" ) then
echo "No action taken"
set setactive_doesnt_exist
set setactive_status = 2
goto FINI
else
# Interactive invocation -- prompt for corrections.
# First, list existing versions:
echo ""
echo "Available versions are:"
echo ""
INDEX_LOOP:
foreach setactive_device ($gtm_gtmdev)
DIR_LOOP:
foreach setactive_verdir ($setactive_device/$gtm_topdir/V[0-9][0-9]*)
if ( -d $setactive_verdir ) then
set setactive_version = `basename $setactive_verdir`
echo $setactive_version
endif
end
end
endif
endif
breaksw
endsw
end
if ( $?setactive_found_version == "1" ) then
set setactive_status = 0 # success
if ( $?setactive_device == "0" ) then
LOOP_INDEX:
# Since setactive_device is unset, we have not located the root directory for the release
# named in gtm_verno (the version was probably specified by a code letter); look for it now.
foreach setactive_device ($gtm_gtmdev)
if ( "$setactive_device" == "NULL" ) then
set setactive_device = "$gtm_gtmdev/"
endif
if ( -d $setactive_device/$gtm_topdir/$gtm_verno ) then
break
endif
end
endif
# Note we set gtm_ver and gtm_vrt to the same value on Unix. On VMS, these must be
# separate logicals, one more-or-less normal and the other concealed. For compatibility,
# we should keep both environment variables distinct on Unix even though they have the
# same value.
setenv gtm_ver $setactive_device/$gtm_topdir/$gtm_verno
setenv gtm_vrt $gtm_ver
if ( -d $gtm_ver ) then
if ( -f $gtm_ver/gtmsrc.csh ) then
source $gtm_ver/gtmsrc.csh
if ( $?gtm_ver_noecho == 0 ) echo "Version is now $gtm_verno"
else
echo "$gtm_ver exists, but $gtm_ver/gtmsrc.csh does not exist"
set setactive_status = 3
endif
else
echo "$gtm_ver does not exist"
set setactive_status = 4
endif
endif
set setactive_old_gtm_exe = `basename $gtm_exe`
switch ($setactive_old_gtm_exe)
case "[Bb][Tt][Aa]":
set setactive_binary_desc = "optimized, with asserts, and without debugger information"
breaksw
case "[Dd][Bb][Gg]":
set setactive_binary_desc = "unoptimized, with asserts, and with debugger information"
breaksw
case "[Pp][Rr][Oo]":
set setactive_binary_desc = "optimized, without asserts, and without debugger information"
breaksw
default:
set setactive_binary_desc = "with unknown options"
breaksw
endsw
if ( $?gtm_ver_noecho == 0 ) then
echo ""
echo "The previous binaries in use were from $gtm_exe"
echo "which were compiled, assembled, and linked $setactive_binary_desc."
endif
unset setactive_found_type_code
# GETTYPE:
while ( $?setactive_found_type_code == "0" )
if ( $setactive_prompt_for_type == "1" ) then
echo -n "Enter b for beta (bta), d for debug (dbg), p production (pro), or <CR> for no change: "
set setactive_p2 = $<
endif
if ( "$setactive_p2" == "" ) then
setenv gtm_exe $gtm_vrt/$setactive_old_gtm_exe # whatever it used to be
set setactive_found_type_code # a null at this point is intentional and means no change of binary type
else
switch ($setactive_p2)
case "[Bb]*":
setenv gtm_exe $gtm_ver/bta # BTA
set setactive_found_type_code
breaksw
case "[Dd]*":
setenv gtm_exe $gtm_ver/dbg # DBG
set setactive_found_type_code
breaksw
case "[Pp]*":
setenv gtm_exe $gtm_ver/pro # PRO
set setactive_found_type_code
breaksw
default:
echo "Image type code $setactive_p2 is not known."
if ( $setactive_interact == "1" ) then
set setactive_p2 = "" # throw away invalid value
else
setenv gtm_exe $gtm_vrt/$setactive_old_gtm_exe # whatever it used to be
set setactive_found_type_code # can't correct it, just give up and take leave as is
echo "Image types in use have not been changed."
endif
breaksw
endsw
endif
end
switch (`basename $gtm_exe`)
case "[Bb][Tt][Aa]":
set setactive_binary_desc = "optimized, with asserts, and without debugger information"
breaksw
case "[Dd][Bb][Gg]":
set setactive_binary_desc = "unoptimized, with asserts, and with debugger information"
breaksw
case "[Pp][Rr][Oo]":
set setactive_binary_desc = "optimized, without asserts, and without debugger information"
breaksw
default:
set setactive_binary_desc = "with unknown options"
breaksw
endsw
if ( $?gtm_ver_noecho == 0 ) then
echo ""
echo "The binaries in use are now from $gtm_exe"
echo "which were compiled, assembled, and linked $setactive_binary_desc."
endif
echo "setenv gtm_verno $gtm_verno" >> $4
echo "setenv gtm_ver $gtm_ver" >> $4
echo "setenv gtm_vrt $gtm_vrt" >> $4
echo "setenv gtm_bta $gtm_vrt/bta" >> $4
echo "setenv gtm_dbg $gtm_vrt/dbg" >> $4
echo "setenv gtm_pro $gtm_vrt/pro" >> $4
if (-w $gtm_vrt/log ) then
echo "setenv gtm_log $gtm_vrt/log" >> $4
else
echo "SETACTIVE1-E-LOGPERM : $gtm_vrt/log does not have group write permissions. Please fix that."
echo "setenv gtm_log $gtm_log_path/$gtm_verno" >> $4
endif
echo "setenv gtm_misc $gtm_vrt/misc" >> $4
echo "setenv gtm_tags $gtm_vrt/misc/tags" >> $4
echo "setenv gtm_exe $gtm_exe" >> $4
echo "setenv gtm_dist $gtm_exe" >> $4
echo "setenv gtm_lint $gtm_exe/lint" >> $4
echo "setenv gtm_map $gtm_exe/map" >> $4
echo "setenv gtm_obj $gtm_exe/obj" >> $4
FINI:
exit $setactive_status