clm5/test/tools/TCBtools.sh
2024-05-09 15:14:01 +08:00

122 lines
3.4 KiB
Bash

#!/bin/sh
#
if [ $# -ne 2 ]; then
echo "TCBtools.sh: incorrect number of input arguments"
exit 1
fi
test_name=TCBtools.$1.$2
if [ -f ${CLM_TESTDIR}/${test_name}/TestStatus ]; then
if grep -c PASS ${CLM_TESTDIR}/${test_name}/TestStatus > /dev/null; then
echo "TCBtools.sh: build test has already passed; results are in "
echo " ${CLM_TESTDIR}/${test_name}"
exit 0
elif grep -c GEN ${CLM_TESTDIR}/${test_name}/TestStatus > /dev/null; then
echo "TCBtools.sh: test already generated"
else
read fail_msg < ${CLM_TESTDIR}/${test_name}/TestStatus
prev_jobid=${fail_msg#*job}
if [ $JOBID = $prev_jobid ]; then
echo "TCBtools.sh: build test has already failed for this job - will not reattempt; "
echo " results are in: ${CLM_TESTDIR}/${test_name}"
exit 2
else
echo "TCBtools.sh: this build test failed under job ${prev_jobid} - moving those results to "
echo " ${CLM_TESTDIR}/${test_name}_FAIL.job$prev_jobid and trying again"
cp -rp ${CLM_TESTDIR}/${test_name} ${CLM_TESTDIR}/${test_name}_FAIL.job$prev_jobid
fi
fi
fi
cfgdir=`ls -1d ${CLM_ROOT}/tools/$1`
blddir=${CLM_TESTDIR}/${test_name}/src
if [ -d ${blddir} ]; then
rm -r ${blddir}
fi
mkdir -p ${blddir}
if [ $? -ne 0 ]; then
echo "TCBtools.sh: error, unable to create work subdirectory"
exit 3
fi
cd ${blddir}
echo "TCBtools.sh: building $1 executable; output in ${blddir}/test.log"
#
# Copy build files over
#
cp $cfgdir/src/Makefile .
cp $cfgdir/src/Srcfiles .
cp $cfgdir/src/Mkdepends .
cp $cfgdir/src/Makefile.common .
#
# Add cfgdir path to beginning of each path in Filepath
#
touch Filepath
while read filepath_arg; do
echo "${cfgdir}/src/${filepath_arg}" >> Filepath
done < ${cfgdir}/src/Filepath
#
# Figure out configuration
#
if [ ! -f ${CLM_SCRIPTDIR}/config_files/$2 ]; then
echo "TCB.sh: configure options file ${CLM_SCRIPTDIR}/config_files/$2 not found"
echo "FAIL.job${JOBID}" > TestStatus
exit 4
fi
##construct string of args to configure
config_string="$TOOLS_MAKE_STRING TOOLROOT=$cfgdir "
while read config_arg; do
config_string="${config_string}${config_arg} "
done < ${CLM_SCRIPTDIR}/config_files/$2
attempt=1
still_compiling="TRUE"
if [ "$TOOLSLIBS" != "" ]; then
export SLIBS=$TOOLSLIBS
fi
while [ $still_compiling = "TRUE" ]; do
ln -s Macros.make Macros
echo "TCBtools.sh: call to make:"
echo " ${MAKE_CMD} ${config_string} "
if [ "$debug" != "YES" ]; then
${MAKE_CMD} ${config_string} >> test.log 2>&1
status="PASS"
rc=$(( $rc + $? ))
else
status="GEN"
rc=0
fi
if [ $rc -eq 0 ]; then
echo "TCBtools.sh: make was successful"
echo "TCBtools.sh: configure and build test passed"
echo "$status" > TestStatus
if [ $CLM_RETAIN_FILES != "TRUE" ]; then
echo "TCBtools.sh: removing some unneeded files to save disc space"
rm *.o
rm *.mod
fi
still_compiling="FALSE"
elif [ $attempt -lt 10 ] && \
grep -c "LICENSE MANAGER PROBLEM" test.log > /dev/null; then
attempt=`expr $attempt + 1`
echo "TCBtools.sh: encountered License Manager Problem; launching attempt #$attempt"
else
echo "TCBtools.sh: clm build failed, error from make= $rc"
echo "TCBtools.sh: see ${CLM_TESTDIR}/${test_name}/test.log for details"
echo "FAIL.job${JOBID}" > TestStatus
exit 6
fi
done
if [ "$TOOLSLIBS" != "" ]; then
export -n SLIBS
fi
exit 0