diff --git a/build/with_fcm/make_fcm.sh b/build/with_fcm/make_fcm.sh index 20d1f0c29132627c95751e229619fa32cb548d4e..f89e38d49f93b0db76668d29df202392c605639e 100755 --- a/build/with_fcm/make_fcm.sh +++ b/build/with_fcm/make_fcm.sh @@ -14,6 +14,8 @@ function parse_args() { MESONHPROFILE= useexpand=1 commit="" + packcreation=0 + compilation=0 # pass unrecognized arguments to fcm FCM_ARGS="" @@ -30,6 +32,8 @@ $0 [options] --mesonhprofile FILE build using Méso-NH profile and rules (--arch must be used to give a name to the build dir) --noexpand do not use mnh_expand (code will be in array-syntax)" --commit commit hash (or a directory) to test; do not use this option from within a repository +-p creates 'pack' (compilation directory) +-c performs compilation Unrecognized options are passed to the fcm build command. Useful options include : --new clean build tree before building @@ -39,6 +43,8 @@ Unrecognized options are passed to the fcm build command. Useful options include For details on FCM, see http://metomi.github.io/fcm/doc/user_guide/build.html http://metomi.github.io/fcm/doc/user_guide/command_ref.html#fcm-build + +If neither creation nor execution is requested, both steps are performed. EOF exit;; "--arch") @@ -51,6 +57,8 @@ EOF MESONHPROFILE=$1 ; shift ;; '--noexpand') useexpand=0;; '--commit') commit=$1; shift;; + '-p') packcreation=1;; + '-c') compilation=1;; *) FCM_ARGS="$FCM_ARGS $OPTION" ;; esac @@ -64,6 +72,11 @@ EOF echo "--arch option is mandatory if --mesonhprofile option is used" exit 3 fi + if [ $packcreation -eq 0 -a \ + $compilation -eq 0 ]; then + packcreation=1 + compilation=1 + fi } function check_install_fcm() { @@ -248,85 +261,89 @@ chmod +x compilation.sh # Parse command line arguments parse_args $* -# Change current working dir -cd -P $(dirname $0) - -# Check the fcm installation -check_install_fcm - -# Check the fiat installation -check_install_fiat - -# Create the build directory and set up the build system -builddir=arch_$ARCH -if [ -d $builddir ]; then - echo "$builddir already exists. To rerun compilation, please enter this directory and use the compilation.sh script." - echo "Otherwise, you can remove the $builddir directory and execute again this script." - exit 1 -fi -mkdir $builddir -if [ "$GMKFILE" != "" ]; then - touch $builddir/arch.env - gmkfile2arch $GMKFILE $builddir/arch.fcm -elif [ "$MESONHPROFILE" != "" ]; then - touch $builddir/arch.env - mesonhprofile2archenv $MESONHPROFILE $builddir/arch.fcm $builddir/arch.env -else - cp ${ARCH_PATH}/arch-${ARCH}.env $builddir/arch.env - cp ${ARCH_PATH}/arch-${ARCH}.fcm $builddir/arch.fcm -fi -cp fcm-make.cfg $builddir -cd $builddir - -# Populate the source directory with (modified) PHYEX source code -[ "$commit" == "" ] && commit=$PWD/../../.. #Current script run from within a PHYEX repository -if echo $commit | grep '/' | grep -v '^tags/' > /dev/null; then - # We get the source code directly from a directory - fromdir=$commit -else - # We use a commit to checkout - fromdir='' -fi -#Expand options -if [ $useexpand == 1 ]; then - expand_options="-D MNH_EXPAND -D MNH_EXPAND_LOOP" -else - expand_options="" -fi -PHYEXTOOLSDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"/../../../tools #if run from within a PHYEX repository -UPDATEDPATH=$PATH -which prep_code.sh > /dev/null || export UPDATEDPATH=$PHYEXTOOLSDIR:$PATH -subs="$subs -s turb -s shallow -s turb_mnh -s micro -s aux -s ice_adjust -s rain_ice -s rain_ice_old -s support" -if [ "$fromdir" == '' ]; then - echo "Clone repository, and checkout commit $commit (using prep_code.sh)" - if [[ $commit == testprogs${separator}* ]]; then - PATH=$UPDATEDPATH prep_code.sh -c $commit src #This commit is ready for inclusion +if [ $packcreation -eq 1 ]; then + # Change current working dir + cd -P $(dirname $0) + + # Check the fcm installation + check_install_fcm + + # Check the fiat installation + check_install_fiat + + # Create the build directory and set up the build system + builddir=arch_$ARCH + if [ -d $builddir ]; then + echo "$builddir already exists. To rerun compilation, please enter this directory and use the compilation.sh script." + echo "Otherwise, you can remove the $builddir directory and execute again this script." + exit 1 + fi + mkdir $builddir + if [ "$GMKFILE" != "" ]; then + touch $builddir/arch.env + gmkfile2arch $GMKFILE $builddir/arch.fcm + elif [ "$MESONHPROFILE" != "" ]; then + touch $builddir/arch.env + mesonhprofile2archenv $MESONHPROFILE $builddir/arch.fcm $builddir/arch.env + else + cp ${ARCH_PATH}/arch-${ARCH}.env $builddir/arch.env + cp ${ARCH_PATH}/arch-${ARCH}.fcm $builddir/arch.fcm + fi + cp fcm-make.cfg $builddir + cd $builddir + + # Populate the source directory with (modified) PHYEX source code + [ "$commit" == "" ] && commit=$PWD/../../.. #Current script run from within a PHYEX repository + if echo $commit | grep '/' | grep -v '^tags/' > /dev/null; then + # We get the source code directly from a directory + fromdir=$commit + else + # We use a commit to checkout + fromdir='' + fi + #Expand options + if [ $useexpand == 1 ]; then + expand_options="-D MNH_EXPAND -D MNH_EXPAND_LOOP" else - PATH=$UPDATEDPATH prep_code.sh -c $commit $expand_options $subs -m testprogs src + expand_options="" fi -else - echo "Copy $fromdir" - mkdir src - scp -q -r $fromdir/src src/ - PATH=$UPDATEDPATH prep_code.sh $expand_options $subs -m testprogs src + PHYEXTOOLSDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"/../../../tools #if run from within a PHYEX repository + UPDATEDPATH=$PATH + which prep_code.sh > /dev/null || export UPDATEDPATH=$PHYEXTOOLSDIR:$PATH + subs="$subs -s turb -s shallow -s turb_mnh -s micro -s aux -s ice_adjust -s rain_ice -s rain_ice_old -s support" + if [ "$fromdir" == '' ]; then + echo "Clone repository, and checkout commit $commit (using prep_code.sh)" + if [[ $commit == testprogs${separator}* ]]; then + PATH=$UPDATEDPATH prep_code.sh -c $commit src #This commit is ready for inclusion + else + PATH=$UPDATEDPATH prep_code.sh -c $commit $expand_options $subs -m testprogs src + fi + else + echo "Copy $fromdir" + mkdir src + scp -q -r $fromdir/src src/ + PATH=$UPDATEDPATH prep_code.sh $expand_options $subs -m testprogs src + fi + + # Add some code + cd src + ln -s ../../fiat/src fiat + cat <<..EOF > dummyprog.F90 + PROGRAM DUMMYPROG + PRINT*, "CREATED TO FORCE FCM TO LINK SOMETHING" + END PROGRAM DUMMYPROG +..EOF fi -# Add some code -cd src -ln -s ../../fiat/src fiat -cat <<EOF > dummyprog.F90 -PROGRAM DUMMYPROG - PRINT*, "CREATED TO FORCE FCM TO LINK SOMETHING" -END PROGRAM DUMMYPROG -EOF - # Build the compilation script and run it -cd .. -build_compilation_script src -./compilation.sh -ln -s build/bin/libphyex.so . - -# Check if python can open the resulting shared lib -python3 -c "from ctypes import cdll; cdll.LoadLibrary('./libphyex.so')" - -# ldd -r ./libphyex.so should also give interesting results +if [ $compilation -eq 1 ]; then + cd -P $(dirname $0)/arch_$ARCH + build_compilation_script src + ./compilation.sh + ln -s build/bin/libphyex.so . + + # Check if python can open the resulting shared lib + python3 -c "from ctypes import cdll; cdll.LoadLibrary('./libphyex.so')" + + # ldd -r ./libphyex.so should also give interesting results +fi diff --git a/src/testprogs/testprogs_version.json b/src/testprogs/testprogs_version.json index 528914ce657e44610fe13f3e2a9eb15a9837ba2b..95dc1e732e72ca45ac96d382e7e7d398a2721141 100644 --- a/src/testprogs/testprogs_version.json +++ b/src/testprogs/testprogs_version.json @@ -1,5 +1,9 @@ { "testing": { - "ALL":"41c6be7" + "ice_adjust":"41c6be7", + "rain_ice":"41c6be7", + "rain_ice_old":"41c6be7", + "turb":"41c6be7", + "shallow":"41c6be7" } } diff --git a/tools/check_commit_ial.sh b/tools/check_commit_ial.sh index ede8c099e988d26cd28b50a96c93b36f8104bb84..3f5e489cef849a195878fe952613953b50412e08 100755 --- a/tools/check_commit_ial.sh +++ b/tools/check_commit_ial.sh @@ -115,7 +115,7 @@ mainPackVersion=${mainPackVersion:-${defaultMainPackVersion}} ################################ function usage { - echo "Usage: $0 [-h] [-p] [-c] [-r] [-C] [-s] [-f] [--noexpand] [-t test] [--cycle CYCLE] [--scripttag TAG] [--repo-user USER] [--repo-protocol PROTOCOL] [--remove] [--onlyIfNeeded] [--computeRefIfNeeded] commit [reference]" + echo "Usage: $0 [-h] [-p] [-c] [-r] [-C] [-s] [-f] [--noexpand] [-t TEST] [--cycle CYCLE] [--scripttag TAG] [--repo-user USER] [--repo-protocol PROTOCOL] [--remove] [--onlyIfNeeded] [--computeRefIfNeeded] commit [reference]" echo "commit commit hash (or a directory, or among $specialPack) to test" echo "reference commit hash (or a directory, or among $specialPack) REF to use as a reference" echo "-s suppress compilation pack" @@ -123,7 +123,7 @@ function usage { echo "-c performs compilation" echo "-r runs the tests" echo "-C checks the result against the reference" - echo "-t comma separated list of tests to execute" + echo "-t TEST comma separated list of tests to execute" echo " or ALL to execute all tests" echo "--noexpand do not use mnh_expand (code will be in array-syntax)" echo "-f full compilation (do not use pre-compiled pack)" diff --git a/tools/check_commit_mesonh.sh b/tools/check_commit_mesonh.sh index de8e01b119faac78f715921eafee638c31846901..aff97bf6575b8140b8b363006be36fe1d5e0a74d 100755 --- a/tools/check_commit_mesonh.sh +++ b/tools/check_commit_mesonh.sh @@ -42,7 +42,7 @@ TARGZDIR=${TARGZDIR:=$PHYEXTOOLSDIR/pack/} ################################ function usage { - echo "Usage: $0 [-h] [-p] [-c] [-r] [-C] [-s] [--expand] [-t test] [--repo-user USER] [--repo-protocol PROTOCOL] [--remove] [--onlyIfNeeded] [--computeRefIfNeeded] commit [reference]" + echo "Usage: $0 [-h] [-p] [-c] [-r] [-C] [-s] [--expand] [-t TEST] [--repo-user USER] [--repo-protocol PROTOCOL] [--remove] [--onlyIfNeeded] [--computeRefIfNeeded] commit [reference]" echo "commit commit hash (or a directory) to test" echo "reference commit hash or a directory or nothing for ref" echo "-s suppress compilation pack" @@ -50,7 +50,7 @@ function usage { echo "-c performs compilation" echo "-r runs the tests" echo "-C checks the result against the reference" - echo "-t comma separated list of tests to execute" + echo "-t TEST comma separated list of tests to execute" echo " or ALL to execute all tests" echo "--expand use mnh_expand (code will use do loops)" echo "--repo-user USER" @@ -65,7 +65,7 @@ function usage { echo "--computeRefIfNeeded" echo " computes the missing references" echo "" - echo "If nothing is asked (compilation, running, check, removing) everything" + echo "If nothing is asked (pack creation, compilation, running, check, removing) everything" echo "except the removing is done" echo echo "If no test is aked for, the default one ($defaultTest) is executed" diff --git a/tools/check_commit_testprogs.sh b/tools/check_commit_testprogs.sh index 3314f89eccc4b2f75912b8982cd102c364ca19bb..67e71fa0888df29dc7823250d750673b73856e9d 100755 --- a/tools/check_commit_testprogs.sh +++ b/tools/check_commit_testprogs.sh @@ -28,13 +28,32 @@ set -o pipefail #abort if left command on a pipe fails # - The last commit of the testprogs_data2 branch (based on 48t3) is able to produce the data # for the rain_ice_old testprog. +####################### +#### CONFIGURATION #### +####################### + +#Special pack names: +# - ref: symbolic name to the commit to use as a reference +# useless for the commits containing a json file specialName="ref" -availTests="ice_adjust,rain_ice,rain_ice_old,turb,shallow" -defaultTest='ALL' + +#About the tests: +# - ALLTests is a list of tests to be done when '-t ALL' is used. This list is filled here +# in case there is no ial_version.json file containig a 'testing' section. If this 'testing' +# section exists, this list is overridden. +# - allowedTests is the list of allowed tests which can depend on platform, if we ask to perform an action +# with a test not in the allowedTests list, the action is ignored +# - defaultTest is the list of tests to perform when no '-t' option is provided on the command line. +ALLTests="ice_adjust,rain_ice,rain_ice_old,turb,shallow" +defaultTest=${ALLTests} +allowedTests=${ALLTests} + separator='_' #- seprator must be in sync with prep_code.sh separator PHYEXTOOLSDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +TESTDIR=${TESTPROGSDIR:=$HOME/TESTPROGS} + dirdata=$PHYEXTOOLSDIR/testprogs_data if [ $(hostname | cut -c 1-7) == 'belenos' -o $(hostname | cut -c 1-7) == 'taranis' ]; then HPC=1 @@ -45,26 +64,33 @@ else fi defaultRef=ref +################################ +#### COMMAND LINE ARGUMENTS #### +################################ + function usage { - echo "Usage: $0 [-h] [-c] [-r] [-C] [-s] [-f] [--noexpand] [-t test] [--repo-user user] [--repo-protocol protocol] [-a arch] [-A arch] [--remove] commit [reference]" + echo "Usage: $0 [-h] [-p] [-c] [-r] [-C] [-s] [--noexpand] [-t TEST] [--repo-user USER] [--repo-protocol PROTOCOL] [-a ARCH] [-A ARCH] [--remove] [--onlyIfNeeded] [--computeRefIfNeeded] commit [reference]" echo "commit commit hash (or a directory, or among $specialName) to test" echo "reference commit hash (or a directory, or among $specialName) REF to use as a reference" echo "-s suppress compilation directory" + echo "-p creates pack" echo "-c performs compilation" echo "-r runs the tests" echo "-C checks the result against the reference" - echo "-t comma separated list of tests to execute" + echo "-t TEST comma separated list of tests to execute" echo " or ALL to execute all tests" echo "--noexpand do not use mnh_expand (code will be in array-syntax)" - echo "--repo-user user hosting the PHYEX repository on github," + echo "--repo-user USER" + echo " user hosting the PHYEX repository on github," echo " defaults to the env variable PHYEXREOuser (=$PHYEXREOuser)" - echo "--repo-protocol protocol (https or ssh) to reach the PHYEX repository on github," + echo "--repo-protocol PROTOCOL" + echo " protocol (https or ssh) to reach the PHYEX repository on github," echo " defaults to the env variable PHYEXREOprotocol (=$PHYEXREOprotocol)" echo "--remove removes the pack" - echo "-a arch architecture name to use to build and run the commit (=$defaultarchfile)" - echo "-A arch architecture name to use for the reference simulation (=$defaultarchfile)" + echo "-a arch ARCH architecture name to use to build and run the commit (=$defaultarchfile)" + echo "-A arch ARCH architecture name to use for the reference simulation (=$defaultarchfile)" echo "" - echo "If nothing is asked (compilation, running, check, removing) everything" + echo "If nothing is asked (pack creation compilation, running, check, removing) everything" echo "except the removing is done" echo echo "If no test is aked for, the default one ($defaultTest) is executed" @@ -77,6 +103,7 @@ function usage { echo "The commit can be a tag, written with syntagx tags/<TAG>" } +packcreation=0 compilation=0 run=0 check=0 @@ -88,11 +115,14 @@ useexpand="" archfile=$defaultarchfile refarchfile=$defaultarchfile remove=0 +onlyIfNeeded=0 +computeRefIfNeeded=0 while [ -n "$1" ]; do case "$1" in '-h') usage;; '-s') suppress=1;; + '-p') packcreation=1;; '-c') compilation=1;; '-r') run=$(($run+1));; '-C') check=1;; @@ -103,6 +133,9 @@ while [ -n "$1" ]; do '--remove') remove=1;; '-a') archfile="$2"; shift;; '-A') refarchfile="$2"; shift;; + '--onlyIfNeeded') onlyIfNeeded=1;; + '--computeRefIfNeeded') computeRefIfNeeded=1;; + #--) shift; break ;; *) if [ -z "${commit-}" ]; then commit=$1 @@ -118,31 +151,12 @@ while [ -n "$1" ]; do shift done -TESTDIR=${TESTPROGSDIR:=$HOME/TESTPROGS} - -function exescript () { - #usage: exescript <output file> <script> [arg [arg ...]] - output=$1 - shift - if [ $HPC -eq 1 ]; then - sbatch --wait -o $output $@ - cat $output - else - $@ 2>&1 | tee $output - fi -} - -if [ -z "${tests-}" ]; then - tests=$defaultTest -fi -if [ $tests == 'ALL' ]; then - tests=$availTests -fi - -if [ $compilation -eq 0 -a \ +if [ $packcreation -eq 0 -a \ + $compilation -eq 0 -a \ $run -eq 0 -a \ $check -eq 0 -a \ $remove -eq 0 ]; then + packcreation=1 compilation=1 run=1 check=1 @@ -158,115 +172,233 @@ if [ $check -eq 1 -a -z "${reference-}" ]; then exit 3 fi +############################## +#### FUNCTION DEFINITIONS #### +############################## + +function json_dictkey2value { + # $1 must contain the json string + # $2 must be the key name + # $3 is the default value + json_content="$1" python3 -c "import json; import os; result=json.loads(os.environ['json_content']).get('$2', '$3'); print(json.dumps(result) if isinstance(result, dict) else result)" +} + +########################### +#### COMMIT ADAPTATION #### +########################### + +#Name and directory for compiling and executing user pack +declare -A refByTest if echo $commit | grep '/' | grep -v '^tags/' > /dev/null; then + #The git repository is a directory name=$(echo $commit | sed 's/\//'${separator}'/g' | sed 's/:/'${separator}'/g' | sed 's/\./'${separator}'/g') + content_testprogs_version=$(scp $commit/src/testprogs/testprogs_version.json /dev/stdout 2>/dev/null || echo "") [ $suppress -eq 1 -a -d $TESTDIR/$name ] && rm -rf $TESTDIR/$name elif echo $specialName | grep -w $commit > /dev/null; then name="$commit" else + #The git repository is on github + if [[ $commit == testprogs${separator}* ]]; then + testprogs_version_file="testprogs_version.json" + else + testprogs_version_file="src/testprogs/testprogs_version.json" + fi + if echo $commit | grep '^tags/' > /dev/null; then + urlcommit=$(echo $commit | cut -d / -f 2-) + else + urlcommit=$commit + fi + content_testprogs_version=$(wget --no-check-certificate https://raw.githubusercontent.com/$PHYEXREPOuser/PHYEX/${urlcommit}/$testprogs_version_file -O - 2>/dev/null || echo "") name="COMMIT$(echo $commit | sed 's/\//'${separator}'/g' | sed 's/:/'${separator}'/g' | sed 's/\./'${separator}'/g')" [ $suppress -eq 1 -a -d $TESTDIR/$name ] && rm -rf $TESTDIR/$name fi -if [ ! -z "${reference-}" ]; then - [ $reference == 'REF' ] && reference=$defaultRef - reffromdir='' - if echo $reference | grep '/' > /dev/null; then - reffromdir=$reference - refname=$(echo $reference | sed 's/\//'${separator}'/g' | sed 's/:/'${separator}'/g' | sed 's/\./'${separator}'/g') - elif echo $specialName | grep -w $reference > /dev/null; then - refname="$reference" - else - refname="COMMIT${reference}" +if [ ! "${content_testprogs_version}" == "" ]; then + testing=$(json_dictkey2value "$content_testprogs_version" 'testing' '') + refALL=$(json_dictkey2value "$testing" "ALL" '') + if [ ! "$testing" == "" ]; then + ALLTests='' #We reset the list of tests + for t in $(echo $allowedTests | sed 's/,/ /g'); do + ref=$(json_dictkey2value "$testing" "$t" "$refALL") + if [ ! "$ref" == "" ]; then + ALLTests="${ALLTests},$t" + refByTest[$t]=$ref + fi + done + ALLTests="${ALLTests:1}" #Remove first character (',') fi fi -if [ $compilation -eq 1 ]; then - echo "### Compilation of commit $commit" +#Name and directory for the reference version +if [ ! -z "${reference-}" ]; then + declare -A refnameByTest + #Reference to use for each test + for t in $(echo $ALLTests | sed 's/,/ /g'); do + #Name of the reference + if [ "$reference" == "REF" ]; then + if [[ ! -z "${refByTest[$t]+unset}" ]]; then #the -v test is valid only with bash > 4.3 + #The json file contained the references to use on a per test case basis + caseref=${refByTest[$t]} + else + caseref=$defaultRef + fi + refByTest[$t]=$caseref + else + #The exact reference to use was given on the command line + caseref=$reference + fi + refByTest[$t]=$caseref + + #Conversion into directory name + if echo $caseref | grep '/' > /dev/null; then + refname=$(echo $reference | sed 's/\//'${separator}'/g' | sed 's/:/'${separator}'/g' | sed 's/\./'${separator}'/g') + elif echo $specialName | grep -w $caseref > /dev/null; then + refname="$caseref" + else + refname="COMMIT${caseref}" + fi + refnameByTest[$t]=$refname + done +fi - if echo $specialName | grep -w $commit > /dev/null; then - echo "Special commit '$commit' cannot be compiled with this script" - exit 4 - fi +if [ -z "${tests-}" ]; then + tests=$defaultTest +elif echo "$tests" | grep -w 'ALL' > /dev/null; then + tests=$(echo "$tests" | sed "s/\bALL\b/$ALLTests/g") +fi + +####################### +#### PACK CREATION #### +####################### +if [ $packcreation -eq 1 ]; then if [ -d $TESTDIR/$name ]; then - echo "Directory already exists ($TESTDIR/$name), suppress it to be able to compile it again (or use the -s option to automatically suppress it)" - exit 5 + if [ $onlyIfNeeded -eq 0 ]; then + echo "Directory already exists ($TESTDIR/$name), suppress it to be able to compile it again (or use the -s option to automatically suppress it)" + exit 5 + fi + else + echo "### Pack creation for commit $commit" + + if echo $specialName | grep -w $commit > /dev/null; then + echo "Special commit '$commit' cannot be compiled with this script" + exit 4 + fi + + mkdir $TESTDIR/$name + cd $TESTDIR/$name/ + cp -r $PHYEXTOOLSDIR/../build . #We use the compilation system from the same commit as the current script + + MNH_EXPAND_DIR=$PHYEXTOOLSDIR/mnh_expand + export PATH=$PHYEXTOOLSDIR:$MNH_EXPAND_DIR/filepp:$MNH_EXPAND_DIR/MNH_Expand_Array:$PATH + + cd $TESTDIR/$name/build/with_fcm/ + rm -rf arch_* + ./make_fcm.sh -p $useexpand --commit $commit --arch $archfile 2>&1 | tee Output_compilation_step1 fi - mkdir $TESTDIR/$name - cd $TESTDIR/$name/ - cp -r $PHYEXTOOLSDIR/../build . #We use the compilation system from the same commit as the current script +fi - MNH_EXPAND_DIR=$PHYEXTOOLSDIR/mnh_expand - export PATH=$PHYEXTOOLSDIR:$MNH_EXPAND_DIR/filepp:$MNH_EXPAND_DIR/MNH_Expand_Array:$PATH +##################### +#### COMPILATION #### +##################### + +if [ $compilation -eq 1 ]; then + if [ $onlyIfNeeded -eq 0 -o ! -f $TESTDIR/$name/build/with_fcm/arch_${archfile}/build/bin/libphyex.so ]; then + echo "### Compilation of commit $commit" - cd $TESTDIR/$name/build/with_fcm/ - rm -rf arch_* - ./make_fcm.sh $useexpand --commit $commit --arch $archfile 2>&1 | tee Output_compilation + cd $TESTDIR/$name/build/with_fcm/ + ./make_fcm.sh -c $useexpand --commit $commit --arch $archfile 2>&1 | tee Output_compilation_step2 + fi fi -if [ $run -ge 1 ]; then - echo "### Running of commit $commit" +################### +#### EXECUTION #### +################### - for t in $(echo $tests | sed 's/,/ /g'); do - if [ ! -f $TESTDIR/$name/build/with_fcm/arch_${archfile}/build/bin/main_${t}.exe ]; then - echo "Directory does not exist ($TESTDIR/$name) or compilation has failed, please check" - exit 6 - fi - done +if [ $run -ge 1 ]; then + cd $TESTDIR/$name #Cleaning to suppress old results that may be confusing in case of a crash during the run - for t in $(echo $tests | sed 's/,/ /g'); do - cd $TESTDIR/$name - if [ -d tests/with_fcm/arch_${archfile}/$t ]; then - rm -rf tests/with_fcm/arch_${archfile}/$t - fi - done + if [ $onlyIfNeeded -eq 0 ]; then + for t in $(echo $tests | sed 's/,/ /g'); do + if [ -d tests/with_fcm/arch_${archfile}/$t ]; then + rm -rf tests/with_fcm/arch_${archfile}/$t + fi + done + fi #Run the tests one after the other + firstrun=1 for t in $(echo $tests | sed 's/,/ /g'); do - cd $TESTDIR/$name - mkdir -p tests/with_fcm/arch_${archfile}/$t - cd tests/with_fcm/arch_${archfile}/$t - ln -s $dirdata/$t data - $TESTDIR/$name/build/with_fcm/arch_${archfile}/build/bin/main_${t}.exe --check 2>&1 > Output_run + if echo $allowedTests | grep -w $t > /dev/null; then #test is allowed on this plateform + if [ ! -d tests/with_fcm/arch_${archfile}/$t ]; then #We do not enter systematically this part if onlyIfNeeded=1 + if [ $firstrun -eq 1 ]; then + echo "### Running of commit $commit" + firstrun=0 + fi + + if [ ! -f $TESTDIR/$name/build/with_fcm/arch_${archfile}/build/bin/main_${t}.exe ]; then + echo "Directory does not exist ($TESTDIR/$name) or compilation has failed, please check" + exit 6 + fi + + #execution + cd $TESTDIR/$name + mkdir -p tests/with_fcm/arch_${archfile}/$t + cd tests/with_fcm/arch_${archfile}/$t + ln -s $dirdata/$t data + $TESTDIR/$name/build/with_fcm/arch_${archfile}/build/bin/main_${t}.exe --check 2>&1 > Output_run + fi + fi done fi +#################### +#### COMPARISON #### +#################### + if [ $check -eq 1 ]; then echo "### Check commit $commit against commit $reference" alltests=0 message="" for t in $(echo $tests | sed 's/,/ /g'); do - file1=$TESTDIR/$name/tests/with_fcm/arch_${archfile}/$t/Output_run - file2=$TESTDIR/$refname/tests/with_fcm/arch_${refarchfile}/$t/Output_run - mess="" - te=0 - if [ ! -f "$file1" ]; then - mess="Result ($file1) for commit $commit does not exist, please run the simulation" - te=1 - fi - if [ ! -f "$file2" ]; then - mess2="Result ($file2) for commit $reference does not exist, please run the simulation" - te=1 - if [ "$mess" = "" ]; then - mess=$mess2 - else - mess="$mess and $mess2" + if echo $allowedTests | grep -w $t > /dev/null; then + #Run the reference if needed + if [ $computeRefIfNeeded -eq 1 ]; then + $0 -p -c -r -t $t -a ${archfile} --onlyIfNeeded ${refByTest[$t]} fi + + #File comparison + file1=$TESTDIR/$name/tests/with_fcm/arch_${archfile}/$t/Output_run + file2=$TESTDIR/${refnameByTest[$t]}/tests/with_fcm/arch_${refarchfile}/$t/Output_run + mess="" + te=0 + if [ ! -f "$file1" ]; then + mess="Result ($file1) for commit $commit does not exist, please run the simulation" + te=1 + fi + if [ ! -f "$file2" ]; then + mess2="Result ($file2) for commit ${refByTest[$t]} does not exist, please run the simulation" + te=1 + if [ "$mess" = "" ]; then + mess=$mess2 + else + mess="$mess and $mess2" + fi + fi + if [ $te -eq 0 ]; then + set +e + mess=$(cmp <(cat $file1 | sed 's/\.\.//g' | sed 's/~=//g' | sed 's/!=//g' | grep -v 'Total time: ' | sed 's/-0.00000E+00|/ 0.00000E+00|/g' | sed 's/-0.00000E+00 / 0.00000E+00 /g' | sed 's/-0.00000E+00-/ 0.00000E+00-/g') \ + <(cat $file2 | sed 's/\.\.//g' | sed 's/~=//g' | sed 's/!=//g' | grep -v 'Total time: ' | sed 's/-0.00000E+00|/ 0.00000E+00|/g' | sed 's/-0.00000E+00 / 0.00000E+00 /g' | sed 's/-0.00000E+00-/ 0.00000E+00-/g') 246 246 2>&1) + te=$? + set -e + #The use of "<()" bash syntax replaces the actual file name seen by cmp + #We modify the cmp output to display the actual file names + mess=$(echo $mess | sed "s#^.*differ# $file1 $file2 differ#") + fi + [ $te -ne 0 ] && message="$message $mess \n" + alltests=$(($alltests+$te)) fi - if [ $te -eq 0 ]; then - set +e - mess=$(cmp <(cat $file1 | sed 's/\.\.//g' | sed 's/~=//g' | sed 's/!=//g' | grep -v 'Total time: ' | sed 's/-0.00000E+00|/ 0.00000E+00|/g' | sed 's/-0.00000E+00 / 0.00000E+00 /g' | sed 's/-0.00000E+00-/ 0.00000E+00-/g') \ - <(cat $file2 | sed 's/\.\.//g' | sed 's/~=//g' | sed 's/!=//g' | grep -v 'Total time: ' | sed 's/-0.00000E+00|/ 0.00000E+00|/g' | sed 's/-0.00000E+00 / 0.00000E+00 /g' | sed 's/-0.00000E+00-/ 0.00000E+00-/g') 246 246 2>&1) - te=$? - set -e - #The use of "<()" bash syntax replaces the actual file name seen by cmp - #We modify the cmp output to display the actual file names - mess=$(echo $mess | sed "s#^.*differ# $file1 $file2 differ#") - fi - [ $te -ne 0 ] && message="$message $mess \n" - alltests=$(($alltests+$te)) done if [ $alltests -eq 0 ]; then echo "SUCCESS, files are identical" @@ -277,6 +409,10 @@ if [ $check -eq 1 ]; then fi fi +################## +#### CLEANING #### +################## + if [ $remove -eq 1 ]; then echo "### Remove model directory for commit $commit" [ -d $TESTDIR/$name ] && rm -rf $TESTDIR/$name