fis-gtm/sr_unix/runall.csh

638 lines
19 KiB
Tcsh
Raw Permalink Normal View History

#!/usr/local/bin/tcsh -f
#################################################################
# #
# Copyright 2001, 2010 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. #
# #
#################################################################
# Get rid of debug options producing huge amounts of output if set
unsetenv gtmdbglvl
if ($?RUNALL_DEBUG != 0) then
set verbose
set echo
endif
echo ""
set listonly = 0
set compileonly = 0
set linkonly = 0
set helponly = 0
set mumps_changed = ""
set gtmplatformlib_changed = ""
while (0 < $#)
switch ($1:q)
case -n :
set listonly = 1
breaksw
case -c :
set compileonly = 1
breaksw
case -l :
set linkonly = 1
breaksw
case -h :
set helponly = 1
breaksw
default :
break
endsw
shift
end
#set temp=(`getopt nchl $argv:q`)
#if ($? == 0) then
# eval set argv=\($temp:q\)
# while (1)
# switch ($1:q)
# case -n :
# set listonly = 1
# shift
# breaksw
#
# case -c :
# set compileonly = 1
# shift
# breaksw
#
# case -l :
# set linkonly = 1
# shift
# breaksw
#
# case -h :
# set helponly = 1
# shift
# breaksw
#
# case -- :
# shift
# break
# endsw
# end
#else
# set helponly = 1
#endif
if ($helponly) then
echo "Usage : `basename $0` [-n|-c|-h] [file...]"
echo " -n List the out-of-date sources; don't compile, or build"
echo " -c Compile the out-of-date sources; don't build"
echo " -l Link the out-of-date sources; don't compile"
echo " -h Print this message"
echo ""
exit 1
endif
source $gtm_root/$gtm_verno/tools/gtm_cshrc.csh
\unalias unalias
unalias cd chown rm touch echo grep sed awk sort cat mv ls
if ($?RUNALL_VERSION == 0) then
setenv RUNALL_VERSION
endif
if ($?RUNALL_IMAGE == 0) then
setenv RUNALL_IMAGE
endif
if ("$RUNALL_VERSION" == "") then
setenv RUNALL_VERSION $gtm_verno
endif
if ("$RUNALL_IMAGE" == "") then
setenv RUNALL_IMAGE $gtm_exe:t
endif
if ($?RUNALL_EXTRA_CC_FLAGS == 0) then
setenv RUNALL_EXTRA_CC_FLAGS ""
endif
if ($?RUNALL_EXTRA_AS_FLAGS == 0) then
setenv RUNALL_EXTRA_AS_FLAGS ""
endif
if ($RUNALL_IMAGE == "d") then
setenv RUNALL_IMAGE "dbg"
else if ($RUNALL_IMAGE == "p") then
setenv RUNALL_IMAGE "pro"
else if ($RUNALL_IMAGE == "b") then
setenv RUNALL_IMAGE "bta"
endif
cd $gtm_root/$RUNALL_VERSION/${RUNALL_IMAGE}/obj
echo ""
echo "Start of $gtm_tools/runall.csh"
echo ""
echo -n " --> "
date
echo ""
echo "Input Command Line"
echo ""
echo -n " --> "
echo "[ $0 "$argv" ]"
echo ""
echo "Environment Variables"
echo ""
echo " RUNALL_VERSION ----> [ $RUNALL_VERSION ]"
echo " RUNALL_IMAGE ----> [ $RUNALL_IMAGE ]"
echo " RUNALL_EXTRA_CC_FLAGS ----> [ $RUNALL_EXTRA_CC_FLAGS ]"
echo " RUNALL_EXTRA_AS_FLAGS ----> [ $RUNALL_EXTRA_AS_FLAGS ]"
echo ""
if (`uname` == "SunOS") then
set path = (/usr/xpg4/bin $path)
endif
set user=`id -u -n`
version $RUNALL_VERSION $RUNALL_IMAGE
rm -f $gtm_log/error.$RUNALL_IMAGE.log >& /dev/null
set TMP_DIR_PREFIX = "/tmp/__${user}__runall"
set TMP_DIR = "${TMP_DIR_PREFIX}__`date +"%y%m%d_%H_%M_%S"`_$$"
rm -f ${TMP_DIR}_* >& /dev/null
onintr cleanup
set platform_name = `uname | sed 's/-//g' | sed 's,/,,' | tr '[A-Z]' '[a-z]'`
set mach_type = `uname -m`
if ($?RUNALL_BYPASS_VERSION_CHECK == 0) then
set temp_ver=`echo $gtm_verno | sed 's/./& /g'`
if ($temp_ver[2] != "9" || $temp_ver[3] == "9" && $temp_ver[4] == "0") then
echo ""
echo "-----------------------------------------------------------------------------------"
echo "RUNALL-E-WRONGVERSION : Cannot Runall a Non-Developemental Version ----> $gtm_verno"
echo "-----------------------------------------------------------------------------------"
echo ""
goto cleanup
endif
endif
# ---- currently, dtgbldir isn't built into an executable. So a "dummy" executable is assigned to it.
cat - << LABEL >>! ${TMP_DIR}_exclude
dse dse
dse_cmd dse
dtgbldir dummy
mupip mupip
mupip_cmd mupip
lke lke
lke_cmd lke
geteuid geteuid
gtm mumps
gtm_svc gtm_svc
gtm_dal_svc gtm_svc
gtm_rpc_init gtm_svc
gtmsecshr gtmsecshr
gtmsecshr_wrapper gtmsecshr
gtm_main mumps
semstat2 semstat2
ftok ftok
gtcm_main gtcm_server
omi_srvc_xct gtcm_server
gtcm_play gtcm_play
omi_sx_play gtcm_play
gtcm_shmclean gtcm_shmclean
gtcm_pkdisp gtcm_pkdisp
gtcm_gnp_server gtcm_gnp_server
dbcertify dbcertify
dbcertify_cmd dbcertify
gtmcrypt_dbk_ref gtmcrypt
gtmcrypt_pk_ref gtmcrypt
gtmcrypt_sym_ref gtmcrypt
gtmcrypt_ref gtmcrypt
maskpass gtmcrypt
LABEL
# this first set of excluded modules are from the list above of modules that get built as plugins. Only plugins
# should be metioned in this list.
set exclude_compile_list = "gtmcrypt_dbk_ref gtmcrypt_sym_ref gtmcrypt_pk_ref gtmcrypt_ref maskpass"
# modules that should never be built or compiled are in this list. They are used in other capacities (e.g. used to
# generate other routines) but are NOT part of the GTM runtime. Other scripts compile and use these routines.
set exclude_build_list = "gtm_threadgbl_deftypes"
# find all libnames other than mumps
pushd $gtm_tools >& /dev/null
set comlist_liblist = `ls *.list | sed 's/.list//' | sed 's/^lib//'`
popd >& /dev/null
foreach value ($comlist_liblist)
cat $gtm_tools/lib$value.list | awk '{print "lib'${value}'.a", $1, " "}' >>! ${TMP_DIR}_list
end
rm -f ${TMP_DIR}_main_misc >& /dev/null
touch ${TMP_DIR}_main_.misc
rm -f $gtm_inc/__temp_runall_* >& /dev/null
rm -f $gtm_src/__temp_runall_* >& /dev/null
rm -f ${TMP_DIR}_inc_files >& /dev/null
rm -f ${TMP_DIR}_src_files >& /dev/null
rm -f ${TMP_DIR}_latest_exe
touch ${TMP_DIR}_inc_files
touch ${TMP_DIR}_src_files
# For all builds, gtm_threadgbl_deftypes.h needs to be generated unless we are bypassing.
# This only updates gtm_threadgbl_deftypes.h in $gtm_inc if generation shows it changed.
# Note shortened variable to RUNALL_BYPASS_GEN_THREADGBL due to failure on Tru64 (too long var name).
if ($?RUNALL_BYPASS_GEN_THREADGBL == 0) then
tcsh $gtm_tools/gen_gtm_threadgbl_deftypes.csh
if (0 != $status) then
echo "Failed to build gtm_threadgbl_deftypes.h - aborting build"
exit 1
endif
endif
if ($#argv) then
while ($#argv > 0)
set ext = $1:e
if ($ext == "h" || $ext == "si") then
echo $1 >>&! ${TMP_DIR}_inc_files
else if ("$ext" == "c" || "$ext" == "s" || "$ext" == "msg" || "$ext" == "") then
echo $1 >>&! ${TMP_DIR}_src_files
endif
shift
end
else
echo "...... Searching for --------> Last Built Executable in $gtm_exe ...... "
pushd $gtm_exe >& /dev/null
# Look down the $gtm_exe recursively so that the search for recent build executable is inclusive of $gtm_exe/plugin/ and
# $gtm_exe/plugin/gtmcrypt. Also the new shell invocation is needed to redirect the stderr that will arise due to the
# gtmsecshr privileges for which (find .) will issue 'permission denied'.
(ls -lart `find . -type f`| grep "\-..x..x..x" | tail -n 1 | awk '{print $NF}' > ${TMP_DIR}_latest_exe) >&! /dev/null
set latest_exe_with_rel_path = `cat ${TMP_DIR}_latest_exe`
set latest_exe = `basename $latest_exe_with_rel_path`
rm -f ${TMP_DIR}_latest_exe
popd >& /dev/null
if ("$latest_exe" != "") then
echo "...... Searching for --------> out-of-date INCLUDEs ...... "
pushd $gtm_inc >& /dev/null
ln -s $gtm_exe/${latest_exe_with_rel_path} __temp_runall_${latest_exe}
ls -1Lat | sed -n '1,/__temp_runall_'${latest_exe}'/p' | grep -E '(\.h$|\.si$)' >>&! ${TMP_DIR}_inc_files
rm -f __temp_runall_${latest_exe} >& /dev/null
popd >& /dev/null
echo "...... Searching for --------> out-of-date SOURCEs ...... "
pushd $gtm_src >& /dev/null
ln -s $gtm_exe/${latest_exe_with_rel_path} __temp_runall_${latest_exe}
ls -1Lat | sed -n '1,/__temp_runall_'${latest_exe}'/p' | grep -E '(\.c$|\.msg$|\.s$)' >>&! ${TMP_DIR}_src_files
rm -f __temp_runall_${latest_exe} >& /dev/null
popd >& /dev/null
echo "...... Searching for --------> out-of-date PCT ROUTINEs ...... "
pushd $gtm_pct >& /dev/null
ln -s $gtm_exe/${latest_exe_with_rel_path} __temp_runall_${latest_exe}
ls -1Lat | sed -n '1,/__temp_runall_'${latest_exe}'/p' | grep -E '\.m$' >>&! ${TMP_DIR}_pct_files
rm -f __temp_runall_${latest_exe} >& /dev/null
popd >& /dev/null
else
echo ""
echo "Unable to find the last modified executable in $gtm_exe. ....... Exiting"
echo ""
goto cleanup
endif
endif
###### if *.msg files got included, then also include *_ansi.h files for recompiling #######
if (!(-z ${TMP_DIR}_src_files)) then
foreach file (`cat ${TMP_DIR}_src_files`)
set ext = $file:e
if ("$ext" == "msg") then
set file=$file:t:r
echo ${file}_ansi.h >>&! ${TMP_DIR}_inc_files
endif
end
endif
if (! -z ${TMP_DIR}_inc_files) then
sort -u ${TMP_DIR}_inc_files >&! ${TMP_DIR}_inc_files_sorted
mv ${TMP_DIR}_inc_files_sorted ${TMP_DIR}_inc_files
endif
set backslash_quote
if (!(-z ${TMP_DIR}_inc_files)) then
echo "...... Searching for --------> out-of-date Nested HEADER Files ...... "
pushd $gtm_inc >& /dev/null
rm -f ${TMP_DIR}_inc_file_temp >& /dev/null
touch ${TMP_DIR}_inc_file_temp
while (1)
diff ${TMP_DIR}_inc_file_temp ${TMP_DIR}_inc_files | grep "^>" | sed 's/> //' > ${TMP_DIR}_inc_file_diff
if (! -z ${TMP_DIR}_inc_file_diff) then
cp -f ${TMP_DIR}_inc_files ${TMP_DIR}_inc_file_temp
foreach value (`cat ${TMP_DIR}_inc_file_diff`)
ls -1 | grep -E '(\.h$|\.si$)' | \
xargs grep -l "^[ ]*#[ ]*include[ ]*\"$value\"" >>&! ${TMP_DIR}_inc_files
end
sort -u ${TMP_DIR}_inc_files >&! ${TMP_DIR}_inc_files_sorted
mv ${TMP_DIR}_inc_files_sorted ${TMP_DIR}_inc_files
else
break
endif
end
popd >& /dev/null
endif
if (!(-z ${TMP_DIR}_inc_files)) then
echo "...... Searching for --------> #INCLUDEing Source Files ...... "
pushd $gtm_src >& /dev/null
foreach value (`cat ${TMP_DIR}_inc_files`)
ls -1 | grep -E '(\.c$|\.msg$|\.s$)' | \
xargs grep -l "^[ ]*#[ ]*include[ ]*\"$value\"" >>&! ${TMP_DIR}_src_files
end
popd >& /dev/null
endif
# For ia64 & x86_64, the file - xfer_desc.i - needs to be generated.
if ($?RUNALL_BYPASS_GEN_XFER_DESC == 0) then
if ( "ia64" == $mach_type || "x86_64" == $mach_type ) then
pushd $gtm_src
tcsh $gtm_tools/gen_xfer_desc.csh
popd
endif
endif
# Generate ttt.c
if (!(-e $gtm_src/ttt.c) || ((-M $gtm_tools/ttt.txt) > (-M $gtm_src/ttt.c))) then
if (-x $gtm_root/$gtm_curpro/pro/mumps) then
pushd $gtm_src >& /dev/null
/usr/local/bin/tcsh $gtm_tools/gen_ttt.csh
echo ttt.c >>&! ${TMP_DIR}_src_files
popd >& /dev/null
else
echo "RUNALL-E-NoMUMPS, unable to regenerate ttt.c due to missing $gtm_curpro/pro/mumps" \
>> $gtm_log/error.$RUNALL_IMAGE.log
endif
endif
# Run the list of files we are supposed to compile and delete the ones we never want to build
if (-e ${TMP_DIR}_src_files) then
rm -f ${TMP_DIR}_src_files_tmp
foreach value ($exclude_build_list)
sed "/$value/d" ${TMP_DIR}_src_files > ${TMP_DIR}_src_files_tmp
mv ${TMP_DIR}_src_files_tmp ${TMP_DIR}_src_files
end
endif
if (!(-z ${TMP_DIR}_src_files)) then
sort -u ${TMP_DIR}_src_files >&! ${TMP_DIR}_src_files_sorted
mv ${TMP_DIR}_src_files_sorted ${TMP_DIR}_src_files
else if (-z ${TMP_DIR}_pct_files) then
echo ""
echo " -- Error: Nothing to Compile ............ Exiting"
echo ""
goto cleanup
endif
if ($listonly) then
if ($?latest_exe) then
echo ""
echo "************** Last built executable ************** "
echo ""
echo $latest_exe
endif
echo ""
echo "************** Out of date include files ********** "
echo ""
cat ${TMP_DIR}_inc_files
echo ""
echo "************** Out of date source files *********** "
echo ""
cat ${TMP_DIR}_src_files
echo ""
echo "************** Out of date pct files *********** "
echo ""
cat ${TMP_DIR}_pct_files
echo ""
goto cleanup
endif
# Irrespective of the gtm_chset value from the user environment, all
# M objects generated in $gtm_dist (GDE*.o, _*.o, ttt.o) must be
# compiled with gtm_chset="M".
unsetenv gtm_chset
echo ""
echo "****************************** COMPILING *********************************"
echo ""
set exclude_compile_list_modified = "FALSE"
if (! -z ${TMP_DIR}_src_files) then
foreach file (`cat ${TMP_DIR}_src_files`)
set file = $file:t
set ext = $file:e
if ("$ext" == "") then
set ext = "c"
endif
set file = $file:r # take the non-extension part for the obj file
set objfile = ${file}.o
# Do not compile plugin files if they are modified. Compilation and subsequent build will happen in
# buildaux.csh.
foreach exclude_file ($exclude_compile_list)
if ($exclude_file == $file) then
set exclude_compile_list_modified = "TRUE"
break
endif
end
if ("TRUE" == $exclude_compile_list_modified) then
continue
endif
alias runall_cc gt_cc_${RUNALL_IMAGE}
alias gt_as $gt_as_assembler $gt_as_options_common $gt_as_option_I $RUNALL_EXTRA_AS_FLAGS
alias runall_as gt_as_${RUNALL_IMAGE}
if ($linkonly == 0) then
# remove pre-existing object files before the current compilation
# to ensure they do not get used if the current compile fails
rm -f $gtm_obj/$file.o
if ($ext == "s") then
echo "$gtm_src/$file.$ext ----> $gtm_obj/$file.o"
if ( "ia64" == $mach_type && "linux" == $platform_name ) then
# assembler differences in HPUX on Linux. Send preprocessed assembly file on Linux.
set lfile = `basename ${file}`
set lfile = $lfile:r
gt_cpp -E ${gtm_src}/${file}.s > ${gtm_src}/${lfile}_cpp.s
runall_as ${gtm_src}/${lfile}_cpp.s -o ${lfile}.o
\rm ${gtm_src}/${lfile}_cpp.s
else if ( "os390" == $platform_name ) then
runall_as $gtm_src/${file}.s
if ( -e $gtm_obj/${file}.dbg ) chmod ugo+r $gtm_obj/${file}.dbg
else
runall_as $gtm_src/${file}.s
endif
else if ($ext == "c") then
echo "$gtm_src/$file.$ext ----> $gtm_obj/$file.o"
runall_cc $RUNALL_EXTRA_CC_FLAGS $gtm_src/$file.c
if ($file == "omi_srvc_xct") then
chmod a+w $gtm_src/omi_sx_play.c
\cp $gtm_src/omi_srvc_xct.c $gtm_src/omi_sx_play.c
chmod a-w $gtm_src/omi_sx_play.c
echo "$gtm_src/omi_sx_play.c ----> $gtm_obj/omi_sx_play.o"
# remove pre-existing object
rm -f $gtm_obj/omi_sx_play.o
runall_cc -DFILE_TCP $RUNALL_EXTRA_CC_FLAGS $gtm_src/omi_sx_play.c
endif
else if ($ext == "msg") then
echo "$gtm_src/$file.$ext ----> $gtm_obj/${file}_ctl.c ----> $gtm_obj/${file}_ctl.o"
# gtm_startup_chk requires gtm_dist setup
rm -f ${file}_ctl.c ${file}_ansi.h # in case an old version is lying around
set real_gtm_dist = "$gtm_dist"
setenv gtm_dist "$gtm_root/$gtm_curpro/pro"
setenv gtmroutines "$gtm_obj($gtm_pct)"
$gtm_root/$gtm_curpro/pro/mumps -run msg $gtm_src/$file.msg Unix
setenv gtm_dist "$real_gtm_dist"
unset real_gtm_dist
mv ${file}_ctl.c $gtm_src/${file}_ctl.c
if ( -f ${file}_ansi.h ) then
mv -f ${file}_ansi.h $gtm_inc
endif
runall_cc $RUNALL_EXTRA_CC_FLAGS $gtm_src/${file}_ctl.c
set objfile = ${file}_ctl.o
endif
if ($status == 1) then
goto cleanup
endif
endif
set library=`grep "^$file " ${TMP_DIR}_exclude`
if ("$library" == "") then
set library=`grep " $file " ${TMP_DIR}_list | awk '{print $1}'`
if ("$library" == "") then
set library="libmumps.a"
else
set retain=`grep "^$file" $gtm_tools/retain_list.txt`
if ("$retain" != "") then
echo $objfile >> ${TMP_DIR}_lib_.libmumps.a
endif
endif
echo $objfile >> ${TMP_DIR}_lib_.$library
else
if ("$library[1]" != "$library") then
echo $library[2] >> ${TMP_DIR}_main_.misc
if ($file == "omi_srvc_xct.c") then
echo "gtcm_play" >> ${TMP_DIR}_main_.misc
endif
endif
endif
end # foreach
if ($compileonly) then
goto cleanup
endif
echo ""
echo "-------------------------------- ARCHIVING --------------------------------"
echo ""
(ls -1 ${TMP_DIR}_lib_.* > ${TMP_DIR}_Lib_list) >& /dev/null
set retainlist = ""
foreach lib_ (`cat ${TMP_DIR}_Lib_list`)
set libext = $lib_:e
set library = $lib_:r
set library = $library:e
set library = $library.$libext
# Note down if any files in retain_list.txt are being compiled. If so we need to make sure we dont remove
# those .o files after including them in libgtmrpc.a as they also needed to be included in libmumps.a
if ("libgtmrpc.a" != $library) then
set dstlib = "$gtm_obj/$library"
else
set dstlib = "$gtm_exe/$library"
set retainlist = `cat $lib_ | egrep -f $gtm_tools/retain_list.txt`
endif
# remove pre-existing object files from object library to ensure an older working version of the module does
# not get used in case the current version of the module did not compile and failed to produce an object file.
gt_ar $gt_ar_option_delete $dstlib `cat $lib_` >& /dev/null
echo "--> into $dstlib <--"
gt_ar $gt_ar_option_update $dstlib `cat $lib_`
if (("ia64" == $mach_type) && ("hpux" == $platform_name)) then
ranlib $dstlib
endif
if ($status) then
if ($?RUNALL_DEBUG != 0) env
goto cleanup
endif
if (("" != "$retainlist") && ("libgtmrpc.a" == $library)) then
rm -f `cat $lib_ | egrep -v -f $gtm_tools/retain_list.txt`
else
rm -f `cat $lib_`
endif
echo ""
end
echo ""
echo "----------------------------------------------------------"
echo " BUILDing the executables for the $RUNALL_IMAGE version"
echo "----------------------------------------------------------"
echo
# did libmumps.a change
set mumps_changed = `grep libmumps.a ${TMP_DIR}_Lib_list`
# on z/OS only, did libgtmzos.a change
set gtmplatformlib_changed = `grep libgtmzos.a ${TMP_DIR}_Lib_list`
cat ${TMP_DIR}_Lib_list ${TMP_DIR}_main_.misc | sed 's/.*lib//g' | sed 's/\.a$//g' | sort -u >! ${TMP_DIR}_main_.final
endif # if (! -z ${TMP_DIR}_src_files) then
# if either libmumps.a or a platform specific support library changes rebuild everything
if ("$mumps_changed" != "" || "$gtmplatformlib_changed" != "") then
$shell $gtm_tools/build${RUNALL_IMAGE}.csh $RUNALL_VERSION
else
# If the plugin files are modified, include them in the final list of build routines.
if ("TRUE" == "$exclude_compile_list_modified") then
echo "gtmcrypt" >>! ${TMP_DIR}_build_routine.final
endif
if (-e ${TMP_DIR}_main_.final) then
cat ${TMP_DIR}_main_.final >>! ${TMP_DIR}_build_routine.final
endif
# If we have a non-zero pct file list then include gde as one of the final build routines
if (! -z ${TMP_DIR}_pct_files) then
echo "gde" >>! ${TMP_DIR}_build_routine.final
endif
set build_routine = `cat ${TMP_DIR}_build_routine.final`
$shell $gtm_tools/buildaux.csh $RUNALL_VERSION $RUNALL_IMAGE $gtm_root/$RUNALL_VERSION/$RUNALL_IMAGE $build_routine
endif
echo ""
if ( -f $gtm_log/error.${RUNALL_IMAGE}.log ) then
echo "Error summary:"
echo "--------------"
echo ""
cat $gtm_log/error.${RUNALL_IMAGE}.log
echo ""
echo " ----> Leaving runall logfiles ${TMP_DIR}_* intact. Please remove after troubleshooting."
echo ""
goto done
endif
# Generate Special Debug Files (z/OS specific at the moment)
if ( -e $gtm_tools/gtm_dbgld.csh ) then
$gtm_tools/gtm_dbgld.csh $RUNALL_IMAGE
endif
cleanup:
if ($?latest_exe) then
rm -f $gtm_src/__temp_runall_${latest_exe} $gtm_inc/__temp_runall_${latest_exe} >& /dev/null
endif
if ($?TMP_DIR_PREFIX) then
rm -f ${TMP_DIR_PREFIX}* >& /dev/null
endif
done:
echo ""
echo "End of $gtm_tools/runall.csh"
echo ""
echo -n " -- "
date
echo ""