#!/bin/sh # collect_cgal_testresults_from_cmake # =================================== # collect all files to generate the html page # containing the testsuite results # # to be run in the CGAL/test directory or a local test directory. # CGAL_TESTER, CGAL_TESTER_NAME, CGAL_TESTER_ADDRESS are environment variables. if [ -z "${CGAL_TEST_PLATFORM}" ]; then CGAL_TEST_PLATFORM=`dirname $PWD` echo "CGAL_TEST_PLATFORM not in the enviromet, setting it to ${CGAL_TEST_PLATFORM}" fi if [ -z "$1" ] ; then TEST_DIRECTORIES=`ls` else TEST_DIRECTORIES="$*" fi GENERAL_BUILD_LOGFILE='' PLATFORM_BUILD_LOGFILE='' TEST_REPORT='' RESULT_FILE='' shared_or_static='' #print_testresult print_testresult() { if [ ! -f ErrorOutput_$1 ] ; then RESULT="?" else if eval grep ERROR ErrorOutput_$1 > /dev/null ; then RESULT="n" else # grep -q means "quiet": no output, the return code is 0 iff the file # matches the regular expression. # grep -i means "case insensitive". # grep -E means "extended regular expressions". # All those three options are in the Single Unix Specification version 3 # The extended regular expression '[^a-zA-Z_,]warning' matches any # string "warning" preceded with a letter that is not a letter or '_' or ',' # That avoids some false positives such as # '-read_only_relocs,warning' or '-D_CRT_SECURE_NO_WARNINGS' if grep -i -E -q '(^|[^a-zA-Z_,])warning' CompilerOutput_$1 ProgramOutput.*.$1 then RESULT="w" else if grep -E -q 'NOTICE: This [^ ]+ (require|need)' CompilerOutput_$1 then RESULT="r" else RESULT="y" fi fi fi fi echo "$2 $RESULT" } parse_shared_or_static() { if [ -f "${PLATFORM_BUILD_LOGFILE}" ] ; then if grep "Building shared libraries" ${PLATFORM_BUILD_LOGFILE} >/dev/null 2>&1; then shared_or_static='shared' else shared_or_static='static' fi else shared_or_static='shared' fi } parse_flags_and_third_party_choices() { grep -e "^-- USING " ${PLATFORM_BUILD_LOGFILE} >> $RESULT_FILE echo "------------" >> $RESULT_FILE } parse_lib_building_results() { libname=$1 target=$2 if [ ! -e "${libname}_${shared_or_static}" ]; then mkdir "${libname}_${shared_or_static}" fi y_or_no='n' configured='' if [ -f "${PLATFORM_BUILD_LOGFILE}" ]; then if grep -q "Built target ${target}" ${PLATFORM_BUILD_LOGFILE} ; then y_or_no='y' fi marker_beg=`grep -e "${target}.dir/depend$" ${PLATFORM_BUILD_LOGFILE} | head -1` if [ -n "${marker_beg}" ]; then configured='y' if [ ! "$target" = "CGAL" ]; then cat ${PLATFORM_BUILD_LOGFILE} | sed -n "\|${marker_beg}|,\|depend$| p" >> ${libname}_${shared_or_static}/$TEST_REPORT fi # Test if there is a warning in the build log. if [ "$y_or_no" = "y" ]; then # See the comment line 31. if grep -i -E -q '[^a-zA-Z_,]warning' ${libname}_${shared_or_static}/$TEST_REPORT ; then y_or_no='w' fi fi fi fi if [ -z "${configured}" ] ; then echo "Not configured!" >> ${libname}_${shared_or_static}/$TEST_REPORT fi echo ${libname}_${shared_or_static} $y_or_no >> $RESULT_FILE } output_main_logs() { [ -e Installation ] || mkdir "Installation" INSTALLATION_TEST_REPORT="Installation/$TEST_REPORT" echo "---------------------------------------------------------------" >> $INSTALLATION_TEST_REPORT echo " General Build Log " >> $INSTALLATION_TEST_REPORT echo "---------------------------------------------------------------" >> $INSTALLATION_TEST_REPORT echo "" >> $INSTALLATION_TEST_REPORT if [ -f "${GENERAL_BUILD_LOGFILE}" ] ; then cat "${GENERAL_BUILD_LOGFILE}" >> $INSTALLATION_TEST_REPORT else echo "Not found!" >> $INSTALLATION_TEST_REPORT fi echo "---------------------------------------------------------------" >> $INSTALLATION_TEST_REPORT echo " Platform-specific Build Log " >> $INSTALLATION_TEST_REPORT echo "---------------------------------------------------------------" >> $INSTALLATION_TEST_REPORT echo "" >> $INSTALLATION_TEST_REPORT if [ -f "${PLATFORM_BUILD_LOGFILE}" ] ; then cat "${PLATFORM_BUILD_LOGFILE}" >> $INSTALLATION_TEST_REPORT else echo "Not found!" >> $INSTALLATION_TEST_REPORT fi if [ -f "$HOME/.autocgal_with_cmake_rc" ] ; then echo "" >> $INSTALLATION_TEST_REPORT echo "---------------------------------------------------------------" >> $INSTALLATION_TEST_REPORT echo " .autocgal_with_cmake_rc" >> $INSTALLATION_TEST_REPORT echo "---------------------------------------------------------------" >> $INSTALLATION_TEST_REPORT echo "" >> $INSTALLATION_TEST_REPORT cat "$HOME/.autocgal_with_cmake_rc" >> $INSTALLATION_TEST_REPORT else if [ -f "$HOME/.autocgalrc" ] ; then echo "" >> $INSTALLATION_TEST_REPORT echo "---------------------------------------------------------------" >> $INSTALLATION_TEST_REPORT echo " .autocgalrc" >> $INSTALLATION_TEST_REPORT echo "---------------------------------------------------------------" >> $INSTALLATION_TEST_REPORT echo "" >> $INSTALLATION_TEST_REPORT cat "$HOME/.autocgalrc" >> $INSTALLATION_TEST_REPORT fi fi if [ -f "../setup" ] ; then echo "" >> $INSTALLATION_TEST_REPORT echo "---------------------------------------------------------------" >> $INSTALLATION_TEST_REPORT echo " setup" >> $INSTALLATION_TEST_REPORT echo "---------------------------------------------------------------" >> $INSTALLATION_TEST_REPORT echo "" >> $INSTALLATION_TEST_REPORT cat "../setup" >> $INSTALLATION_TEST_REPORT fi echo "" >> $INSTALLATION_TEST_REPORT echo "---------------------------------------------------------------" >> $INSTALLATION_TEST_REPORT echo " CMakeCache.txt" >> $INSTALLATION_TEST_REPORT echo "---------------------------------------------------------------" >> $INSTALLATION_TEST_REPORT echo "" >> $INSTALLATION_TEST_REPORT if [ -f "../CMakeCache.txt" ] ; then cat "../CMakeCache.txt" >> $INSTALLATION_TEST_REPORT else echo "Not found!" >> $INSTALLATION_TEST_REPORT fi echo "" >> $INSTALLATION_TEST_REPORT echo "---------------------------------------------------------------" >> $INSTALLATION_TEST_REPORT echo " CGALConfig.cmake" >> $INSTALLATION_TEST_REPORT echo "---------------------------------------------------------------" >> $INSTALLATION_TEST_REPORT echo "" >> $INSTALLATION_TEST_REPORT if [ -f "../CGALConfig.cmake" ] ; then cat "../CGALConfig.cmake" >> $INSTALLATION_TEST_REPORT else echo "Not found!" >> $INSTALLATION_TEST_REPORT fi echo "" >> $INSTALLATION_TEST_REPORT echo "---------------------------------------------------------------" >> $INSTALLATION_TEST_REPORT echo " CMakeError.log" >> $INSTALLATION_TEST_REPORT echo "---------------------------------------------------------------" >> $INSTALLATION_TEST_REPORT echo "" >> $INSTALLATION_TEST_REPORT if [ -f "../CMakeFiles/CMakeError.log" ] ; then cat "../CMakeFiles/CMakeError.log" >> $INSTALLATION_TEST_REPORT else echo "Not found!" >> $INSTALLATION_TEST_REPORT fi echo "" >> $INSTALLATION_TEST_REPORT echo "---------------------------------------------------------------" >> $INSTALLATION_TEST_REPORT echo " CMakeOutput.log" >> $INSTALLATION_TEST_REPORT echo "---------------------------------------------------------------" >> $INSTALLATION_TEST_REPORT echo "" >> $INSTALLATION_TEST_REPORT if [ -f "../CMakeFiles/CMakeOutput.log" ] ; then cat "../CMakeFiles/CMakeOutput.log" >> $INSTALLATION_TEST_REPORT else echo "Not found!" >> $INSTALLATION_TEST_REPORT fi } echo "---------------------------------------------------------------" echo " Collecting results of platform $CGAL_TEST_PLATFORM" echo "---------------------------------------------------------------" CURRENT_DIR=`pwd` TESTER=${CGAL_TESTER:-${USER:-`whoami`}} TESTER_NAME="${CGAL_TESTER_NAME:-${TESTER}}" TESTER_ADDRESS="${CGAL_TESTER_ADDRESS:-${TESTER}}" TEST_REPORT="TestReport_${TESTER}_${CGAL_TEST_PLATFORM}" RESULT_FILE=$CURRENT_DIR/results_${TESTER}_${CGAL_TEST_PLATFORM}.txt CGAL_DIR=../../../.. GENERAL_BUILD_LOGFILE="../../installation.log" PLATFORM_BUILD_LOGFILE="../installation.log" rm -f $RESULT_FILE touch $RESULT_FILE sed -n '/CGAL_VERSION /s/#define //p' < $CGAL_DIR/include/CGAL/version.h >> $RESULT_FILE echo "TESTER ${TESTER}" >> $RESULT_FILE echo "TESTER_NAME ${TESTER_NAME}" >> $RESULT_FILE echo "TESTER_ADDRESS ${TESTER_ADDRESS}" >> $RESULT_FILE echo "CGAL_TEST_PLATFORM ${CGAL_TEST_PLATFORM}" >> $RESULT_FILE echo "General installation log file: ${GENERAL_BUILD_LOGFILE}" >> $RESULT_FILE echo "Host-specific installation log file: ${PLATFORM_BUILD_LOGFILE}" >> $RESULT_FILE parse_shared_or_static output_main_logs parse_flags_and_third_party_choices parse_lib_building_results "libCGALCore" "CGAL_Core" parse_lib_building_results "libCGAL" "CGAL" parse_lib_building_results "libCGALimageIO" "CGAL_ImageIO" parse_lib_building_results "libCGALPDB" "CGAL_PDB" parse_lib_building_results "libCGALQt" "CGAL_Qt3" parse_lib_building_results "libCGALQt4" "CGAL_Qt4" for DIR in $TEST_DIRECTORIES ; do if [ -d $DIR ] ; then echo " $DIR ..." cd $DIR print_testresult $CGAL_TEST_PLATFORM $DIR >> $RESULT_FILE if [ ! "$DIR" = "Installation" ] ; then rm -f ${TEST_REPORT} touch $TEST_REPORT fi if [ ! -f ErrorOutput_${CGAL_TEST_PLATFORM} ] ; then echo "Error: file $DIR/ErrorOutput_${CGAL_TEST_PLATFORM} does not exist!" else cat ErrorOutput_${CGAL_TEST_PLATFORM} >> $TEST_REPORT fi if [ ! -f CompilerOutput_${CGAL_TEST_PLATFORM} ] ; then echo "Error: file $DIR/CompilerOutput_${CGAL_TEST_PLATFORM} does not exist!" else cat CompilerOutput_${CGAL_TEST_PLATFORM} >> $TEST_REPORT fi if 2>&1 eval ls ProgramOutput.*.${CGAL_TEST_PLATFORM} > /dev/null ; then PROGRAM_OUTPUT=`ls ProgramOutput.*$CGAL_TEST_PLATFORM*` for FILE in $PROGRAM_OUTPUT ; do echo >> $TEST_REPORT echo "------------------------------------------------------------------" >> $TEST_REPORT echo "- $FILE" >> $TEST_REPORT echo "------------------------------------------------------------------" >> $TEST_REPORT cat $FILE >> $TEST_REPORT done fi cd .. fi done OUTPUT_FILE=results_${TESTER}_${CGAL_TEST_PLATFORM}.tar rm -f $OUTPUT_FILE $OUTPUT_FILE.gz tar cf $OUTPUT_FILE results_${TESTER}_${CGAL_TEST_PLATFORM}.txt */$TEST_REPORT echo echo "compressing ..." gzip -9f $OUTPUT_FILE echo "results written to file $OUTPUT_FILE.gz" echo