blob: e339b9be73da61a49c74136377b7c9212e66f87a [file] [log] [blame]
#!/bin/bash -x
# This script will retrieve the list of tests to run from the freediameter website,
# and execute them one by one.
ROOTDIR=$HOME/fDtests
if [ ! -d $ROOTDIR ]; then
echo "The working directory $ROOTDIR does not exist. Please create it or edit the script."
exit 1;
fi
WORKDIR=$ROOTDIR/data
# The script requires a local.cmake file to exist and define the following:
# CTEST_SITE=
# the name of the build slave.
# Example: SET(CTEST_SITE "Ubuntu-Lucid-64b")
if [ ! -e $ROOTDIR/local.cmake ]; then
echo "Missing $ROOTDIR/local.cmake file, generating one (edit as needed, and run the script again)";
echo "SET(CTEST_SITE \""`hostname --fqdn`"\")" > $ROOTDIR/local.cmake
exit 1;
fi
# Now, cleanup any previous built data, but keep the sources (to get the diffs)
if [ ! -d $WORKDIR ]; then
mkdir $WORKDIR
else
rm -rf $WORKDIR/*/build
fi
echo "Starting Nightly tests, time: "`date`
# Retrieve the default parameters.
wget "http://www.freediameter.net/hg/freeDiameter/raw-file/tip/CTestConfig.cmake" -O $WORKDIR/1_default.cmake
if [ ! -e $WORKDIR/1_default.cmake ]; then
echo "Error retrieving CTestConfig.cmake file";
exit 1;
fi
# Retrieve the list of build names
wget "http://www.freediameter.net/hg/freeDiameter/raw-file/tip/contrib/nightly_tests/tests.list" -O $WORKDIR/2_tests.list
if [ ! -e $WORKDIR/2_tests.list ]; then
echo "Error retrieving tests.list file";
exit 1;
fi
# Now, for each test in the list
for t in $(cat $WORKDIR/2_tests.list | grep -v -e "^#"); do
# Create the work environment if needed
if [ ! -d $WORKDIR/$t ]; then
mkdir $WORKDIR/$t
fi
#### Create the script
# Project name, nightly time
cp $WORKDIR/1_default.cmake $WORKDIR/$t/CTestScript.cmake
# Create path names, default build configuration, ...
cat >> $WORKDIR/$t/CTestScript.cmake << EOF
##########################
SET(CTEST_SOURCE_DIRECTORY "$WORKDIR/$t/source")
SET(CTEST_BINARY_DIRECTORY "$WORKDIR/$t/build")
set(CTEST_CMAKE_GENERATOR "Unix Makefiles")
set(CTEST_BUILD_CONFIGURATION "Profiling")
set(WITH_MEMCHECK FALSE)
set(WITH_COVERAGE FALSE)
set(CTEST_BUILD_OPTIONS "")
set(CTEST_BUILD_NAME "Unnamed")
##########################
EOF
wget "http://www.freediameter.net/hg/freeDiameter/raw-file/tip/contrib/nightly_tests/$t.conf" -O $WORKDIR/$t/params.conf
if [ ! -e $WORKDIR/$t/params.conf ]; then
echo "Error retrieving $t.conf file";
continue;
fi
# The retrieved parameters will overwrite the defaults
cat $WORKDIR/$t/params.conf >> $WORKDIR/$t/CTestScript.cmake
# Overwrite with all the local data (site name, ...)
echo "######## Local site data: " >> $WORKDIR/$t/CTestScript.cmake
cat $ROOTDIR/local.cmake >> $WORKDIR/$t/CTestScript.cmake
# Now, the remaining of the script
cat >> $WORKDIR/$t/CTestScript.cmake << EOF
#######################################################################
# ctest_empty_binary_directory(\${CTEST_BINARY_DIRECTORY})
find_program(CTEST_HG_COMMAND NAMES hg)
find_program(CTEST_COVERAGE_COMMAND NAMES gcov)
find_program(CTEST_MEMORYCHECK_COMMAND NAMES valgrind)
# set(CTEST_MEMORYCHECK_SUPPRESSIONS_FILE \${CTEST_SOURCE_DIRECTORY}/tests/valgrind.supp)
if(NOT EXISTS "\${CTEST_SOURCE_DIRECTORY}")
set(CTEST_CHECKOUT_COMMAND "\${CTEST_HG_COMMAND} clone http://www.freediameter.net/hg/freeDiameter \${CTEST_SOURCE_DIRECTORY}")
endif()
set(CTEST_UPDATE_COMMAND "\${CTEST_HG_COMMAND}")
set(CTEST_CONFIGURE_COMMAND "\${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE:STRING=\${CTEST_BUILD_CONFIGURATION}")
set(CTEST_CONFIGURE_COMMAND "\${CTEST_CONFIGURE_COMMAND} -DBUILD_TESTING:BOOL=ON -DOPT_TEST_ARGUMENTS:STRING=-d \${CTEST_BUILD_OPTIONS}")
set(CTEST_CONFIGURE_COMMAND "\${CTEST_CONFIGURE_COMMAND} \\"-G\${CTEST_CMAKE_GENERATOR}\\"")
set(CTEST_CONFIGURE_COMMAND "\${CTEST_CONFIGURE_COMMAND} \\"\${CTEST_SOURCE_DIRECTORY}\\"")
ctest_start("Nightly")
ctest_update()
ctest_configure()
ctest_build()
ctest_test()
if (WITH_COVERAGE AND CTEST_COVERAGE_COMMAND)
ctest_coverage()
endif (WITH_COVERAGE AND CTEST_COVERAGE_COMMAND)
if (WITH_MEMCHECK AND CTEST_MEMORYCHECK_COMMAND)
ctest_memcheck()
endif (WITH_MEMCHECK AND CTEST_MEMORYCHECK_COMMAND)
ctest_submit()
EOF
# OK, now run this test, it will submit its results.
ctest -S $WORKDIR/$t/CTestScript.cmake -V
done
echo "Completed Nightly tests, time: "`date`