From c60c2460e48665eef3373690c248d50ef57d3f64 Mon Sep 17 00:00:00 2001 From: Tobias Malkmus <tomalk@mathematik.uni-freiburg.de> Date: Thu, 11 Feb 2016 15:12:50 +0100 Subject: [PATCH] [scripts] adapt check scripts to cmake based builds --- scripts/check-headers.sh | 139 +++++++++------------------------- scripts/check-opts.sh | 126 ++++++++++++++++++++++++++++++ scripts/check-tests.sh | 24 ++++-- scripts/fullcheck.sh | 93 +++-------------------- scripts/opts/config_none.opts | 27 ++++--- 5 files changed, 209 insertions(+), 200 deletions(-) create mode 100755 scripts/check-opts.sh diff --git a/scripts/check-headers.sh b/scripts/check-headers.sh index 28a1f8fe..21fed0e0 100755 --- a/scripts/check-headers.sh +++ b/scripts/check-headers.sh @@ -1,124 +1,53 @@ #!/bin/bash -PROJECTDIR=`pwd` -cd `dirname $0` -SCRIPTSDIR=`pwd` +# check for parameter pointing to DUNE build directory +# ---------------------------------------------------- -if test ! -f $PROJECTDIR/dune.module ; then - echo "This script can only be executed from a DUNE project directory." +if test \( $# -lt 3 \) ; then + echo "Usage: $0 <build-dir-base> <module-name> <MAKE_FLAGS>" exit 1 fi -compile=1 -for arg in $@ ; do - if test "x$arg" == "xfast" ; then - compile=0 - continue - fi - - echo "Usage: $0 [fast]" - exit 1 -done +# set up some variables +# --------------------- -cd $PROJECTDIR -sourcedirs=`grep "^[[:space:]]*Sources:" dune.module | cut -s -d ':' -f2` -if test "x$sourcedirs" = "x" ; then - echo -n "[.] " - echo "Warning: 'Sources' not found in dune.module, assuming 'dune'." - sourcedirs="dune" -fi +WORKINGDIR=$(pwd) +cd $1 +BUILDDIR=$(pwd) +MODULENAME=$2 +MAKE_FLAGS=$3 -files="" -for directory in $sourcedirs ; do - dirfiles=`find -H $directory -type d | sed "/$directory.*\/\..*/ d"` - files="$files $dirfiles" -done errors=0 -for directory in $files ; do - makefile=$directory/Makefile.am - headerfiles=`ls -1 $directory | sed '/.*\.hh$/ p ; d'` - - if test ! -f $makefile ; then - if test "x$headerfiles" != "x" ; then - echo -n "[$directory] " - echo "Warning: No 'Makefile.am' found." - fi - continue - fi - - extradist=`cat $makefile | sed 'H ; s/.*//g ; x ; s/\n/ /g ; s/[ \t][ \t]*/ /g ; /\\\\$/! { p ; d } ; s/\\\\$// ; x ; d' | grep '^[ \t]*EXTRA_DIST' | sed 's/^.*EXTRA_DIST.*=//'` - for pattern in $extradist ; do - if test x`echo $pattern | grep '^[$]'` != x ; then - echo -n "[$directory] " - echo "Warning: Skipping check for variable '$pattern' in EXTRA_DIST." - continue - fi - for file in $directory/$pattern ; do - if test ! -f $file ; then - echo -n "[$directory] " - echo "Error: Distributed file does not exists: $file" - errors=$((errors+1)) - fi - done - done - # IGNORE_HEADERS fem headercheck ignore - ignore=`grep "IGNORE_HEADERS" $makefile` - if test "x$ignore" != "x" ; then - continue - fi - - # headercheck_IGNORE core headercheck ignore - ignore=`grep "headercheck_IGNORE" $makefile` - if test "x$ignore" != "x" ; then - continue - fi - - headers=`cat $makefile | sed 'H ; s/.*//g ; x ; s/\n/ /g ; s/[ \t][ \t]*/ /g ; /\\\\$/! { p ; d } ; s/\\\\$// ; x ; d' | grep '_HEADERS' | sed 's/^.*_HEADERS.*=//'` +MODULES="" +for modctrl in $(ls -d */); do + MODULES+=" $(basename $modctrl)" +done - for header in $headers ; do - if test x`echo $header | grep '^[$]'` != x ; then - echo -n "[$directory] " - echo "Warning: Skipping check for variable '$header' in headers declaration." - continue - fi - if test ! -e $directory/$header ; then - echo -n "[$directory] " - echo "Error: Header does not exist: $header" +for module in $MODULES; do + cd $module + echo + echo "Checking headers in $module ..." + CHECKLOG=$WORKINGDIR/headercheck-$module.log + make headercheck -i $MAKE_FLAGS &> $CHECKLOG + hc_errors=$(grep error: $CHECKLOG) + if test -z "$hc_errors"; then + rm $CHECKLOG + else + if test "x$module" = "x$MODULENAME" ; then + echo "Error: headercheck for module $module failed (see headercheck-$module.log)" errors=$((errors+1)) + else + echo "Warning: headercheck for module $module failed (see headercheck-$module.log)" fi - done - - for filename in $headerfiles ; do - found="false" - for header in $headers ; do - if test "x$header" = "x$filename" ; then - found="true" - fi - done - if test "x$found" = "xfalse" ; then - echo -n "[$directory] " - echo "Warning: Header is not included in Makefile.am: $filename" - fi - done - - if test $compile -ne 0 ; then - for filename in $headerfiles ; do - if ! $SHELL $SCRIPTSDIR/check-header.sh $directory/$filename &>/dev/null ; then - echo -n "[$directory] " - echo "Error: Header does not compile: $filename" - errors=$((errors+1)) - fi - done fi - -# for filename in `ls $directory | sed "/.*.hh/ p ; d"` ; do -# echo $directory : $filename -# done + cd $BUILDDIR done -if [ $errors -gt 0 ] ; then - echo "Number of errors: $errors" + +if test $errors -gt 0 ; then exit 1 +else + exit 0 fi diff --git a/scripts/check-opts.sh b/scripts/check-opts.sh new file mode 100755 index 00000000..95a5e7ad --- /dev/null +++ b/scripts/check-opts.sh @@ -0,0 +1,126 @@ +#!/bin/bash + +# check for parameter pointing to DUNE base directory +# --------------------------------------------------- + +DUNECONTROL="dune-common/bin/dunecontrol" + +if test \( $# -lt 3 \) -o ! -e $1/$DUNECONTROL ; then + echo "Usage: $0 <dune-base-dir> <opts-file> <headercheck{true,false}>" + exit 1 +fi + +# set up some variables +# --------------------- + +WORKINGDIR=`pwd` +cd $1 +DUNEDIR=`pwd` +FEMDIR="$DUNEDIR/dune-fem-dg" +SCRIPTSDIR="$FEMDIR/scripts" +OPTSDIR="$SCRIPTSDIR/opts" +OPTS=$2 +HEADERCHECK=$3 + +if ! test -e $OPTSDIR/$OPTS; then + echo "Error: $OPTS file not found in $OPTSDIR." + exit 1 +fi +#search for dune modules: + +MODULES="" +for file in $(find -maxdepth 2 -name "dune.module" ) ; do + MODULENAME="$(basename $(dirname $file))" + MODULES+=" $MODULENAME" +done + +# check for dependencies +MAKE_CHECK_DEPS="" +MAKE_CHECK_DEPS="$(source $OPTSDIR/$OPTS; echo $MAKE_CHECK_DEPS)" + +MISSINGDEPS="" +for dep in $MAKE_CHECK_DEPS ; do + if ! echo $MODULES | grep $dep >/dev/null; then + MISSINGDEPS+=" $dep" + fi +done + +# we can skip this opts file if a dependend module is not found +if ! test -z "$MISSINGDEPS" ; then + echo "Skipping $OPTS due to missing dependencies:$MISSINGDEPS" + exit 0 +fi + +BUILDDIR="$DUNEDIR/$(source $OPTSDIR/$OPTS; echo $BUILD_DIR)" + +# perform tests +# ------------- + +do_configure() +{ + local check=`mktemp -p $WORKINGDIR check.XXXXXX` + { + $DUNECONTROL --opts=$OPTSDIR/$OPTS --builddir=$BUILDDIR --module=dune-fem-dg all + echo $? > $check + } 2>&1 | dd conv=notrunc > $CONFIGLOG 2>/dev/null + local return_value=`cat $check` + rm $check + return $return_value +} + + +echo +echo "Configuring with $OPTS ...." + +CONFIGLOG="$WORKINGDIR/${OPTS%.opts}-conf.log" +if ! do_configure ; then + echo "Error: Cannot configure with $OPTS (see ${OPTS%.opts}-conf.log)" + exit 1 +fi + + +# run headercheck +# --------------- + +if $HEADERCHECK; then + cd $WORKINGDIR + if ! ./check-headers.sh $BUILDDIR dune-fem-dg "$MAKE_CHECK_FLAGS"; then + errors=$((errors+1)) + fi +fi +# run tests +# --------- + +cd $WORKINGDIR +CHECKLOG="$WORKINGDIR/${OPTS%.opts}-check.log" +TESTLOG="$WORKINGDIR/${OPTS%.opts}-test.log" +TIMINGS="$WORKINGDIR/${OPTS%.opts}-timings.log" + +if ! $SCRIPTSDIR/check-tests.sh $BUILDDIR/dune-fem-dg "$MAKE_CHECK_FLAGS"; then + build_test_errors=$(grep error: $WORKINGDIR/check-tests.log | wc -l) + if test $build_test_errors -gt 0; then + echo "Error: Building tests failed with $OPTS (see ${OPTS%.opts}-check.log)" + fi + + if test -e $WORKINGDIR/LastTestsFailed.log; then + failed_tests=$(cat $WORKINGDIR/LastTestsFailed.log | cut -d ':' -f2 | tr '\n' ' ' ) + echo "Error: For $OPTS the following tests failed: $failed_tests" + echo " see ${OPTS%.opts}-test.log for details." + rm $WORKINGDIR/LastTestsFailed.log + fi + errors=$((errors+1)) +fi +echo "Timings for $opts are stored in ${OPTS%.opts}-timings.log" +echo + +# copy files +mv $WORKINGDIR/check-tests.log $CHECKLOG &>/dev/null +mv $WORKINGDIR/LastTest.log $TESTLOG &>/dev/null +mv $WORKINGDIR/CTestCostData.txt $TIMINGS &>/dev/null + + +if test $errors -gt 0 ; then + exit 1 +else + exit 0 +fi diff --git a/scripts/check-tests.sh b/scripts/check-tests.sh index 0e69d562..aacea4bf 100755 --- a/scripts/check-tests.sh +++ b/scripts/check-tests.sh @@ -1,7 +1,7 @@ #!/bin/bash if test $# -lt 1 ; then - echo "Usage: $0 <dune-fem-dir> [MAKE_CHECK_FLAGS]" + echo "Usage: $0 <dune-base-dir> [MAKE_CHECK_FLAGS]" exit 1 fi @@ -9,25 +9,39 @@ MAKE_CHECK_FLAGS=$2 WORKINGDIR=`pwd` cd $1 -FEMDIR=`pwd` +BUILDDIR=`pwd` -CHECKLOG=$WORKINGDIR/check-tests.out -make build_tests $MAKE_CHECK_FLAGS -i && make -i test $MAKE_CHECK_FLAGS &> $CHECKLOG +echo +echo "Performing make build_tests && make test in $(basename $BUILDDIR) ..." + +CHECKLOG=$WORKINGDIR/check-tests.log +make -i build_tests $MAKE_CHECK_FLAGS &> $CHECKLOG +make test &> /dev/null retvalue=0 warnings=`grep warning: $CHECKLOG | grep -v "default CommunicationManager is used" | grep -v "GRIDDIM not defined" | grep -v "No GRIDTYPE defined" | grep -v "Hdiv-Projection only working for polOrd = 1" | grep -v "YaspGrid does not provide a HierarchicIndexSet" | wc -l` if test $warnings -gt 0 ; then echo "Warning: $warnings compiler warnings occurred." fi -errors=`grep Error $CHECKLOG | wc -l` + +errors=`grep error: $CHECKLOG | wc -l` if test $errors -gt 0 ; then echo "Error: $errors compile time errors occurred." retvalue=1 fi + urefs=`grep ": undefined reference" $CHECKLOG | wc -l` if test $urefs -gt 0 ; then echo "Error: $urefs undefined linker references occurred." retvalue=1 fi +# if a test has faild this file is writen +if test -e $BUILDDIR/Testing/Temporary/LastTestsFailed.log ; then + retvalue=1 +fi + +# copy files with test logs and timings +mv $BUILDDIR/Testing/Temporary/* $WORKINGDIR/ + exit $retvalue diff --git a/scripts/fullcheck.sh b/scripts/fullcheck.sh index 954d7b2c..e6e0a9a2 100755 --- a/scripts/fullcheck.sh +++ b/scripts/fullcheck.sh @@ -10,9 +10,7 @@ if test \( $# -lt 1 \) -o ! -e $1/$DUNECONTROL ; then exit 1 fi -MODNAME="dune-fem-dg" - -echo "Full Check of $MODNAME" +echo "Full Check of dune-fem-dg" echo "-------------------------" echo @@ -25,95 +23,28 @@ echo "Host Type: $HOSTTYPE" WORKINGDIR=`pwd` cd $1 DUNEDIR=`pwd` -FEMDIR="$DUNEDIR/$MODNAME" -BUILDDIR="$DUNEDIR" +FEMDIR="$DUNEDIR/dune-fem-dg" SCRIPTSDIR="$FEMDIR/scripts" OPTSDIR="$SCRIPTSDIR/opts" -# search for all existing dune modules -# ------------------------------------ -MODULES="" -for modctrl in $(find -name dune.module -print); do - MODULES+="$(dirname $modctrl | sed -e 's@^[.]/@@g') " -done - errors=0 -# configure with minimal options -# ------------------------------ - -MINIMALOPTS="$OPTSDIR/minimal.opts" -BUILDDIR="$BUILDDIR/$(source $MINIMALOPTS; echo $BUILD_DIR)" - -MAKE_FLAGS="" -MAKE_FLAGS="$(source $MINIMALOPTS; echo $MAKE_FLAGS)" - -if test ! -e $MINIMALOPTS ; then - echo "Error: $MINIMALOPTS not found." - exit 1 -fi - - -minimal_configure() -{ - local check=`mktemp -p $WORKINGDIR check.XXXXXX` - { - $DUNECONTROL --opts=$MINIMALOPTS --builddir=$BUILDDIR all - echo $? > $check - } 2>&1 | dd conv=notrunc > $WORKINGDIR/minimal-conf.out 2>/dev/null - local return_value=`cat $check` - rm $check - return $return_value -} - - -echo -echo "Configuring with minimal options..." -cd $DUNEDIR -if ! minimal_configure ; then - echo "Fatal: Cannot configure with minimal options (see $WORKINGDIR/minimal-conf.out)." +NONOPTSFILE="" +if test -e $OPTSDIR/config_none.opts; then + NONOPTSFILE="config_none.opts" +else + echo "config_none.opts not found." exit 1 fi +echo "" +echo "Performing checks for config_none.opts..." -# check headers -# ------------- - -for module in $MODULES; -do - CHECKLOG="$WORKINGDIR/minimal-hc-$module.out" - echo - echo "Checking headers in $module ..." - cd $BUILDDIR/$module - make headercheck $MAKE_FLAGS -i &> $CHECKLOG - hc_errors=$(grep error: $CHECKLOG) - if test -z "$hc_errors" ; then - rm $CHECKLOG - else - if test "x$module" == "x$MODNAME"; then - echo "Error: headercheck for module $module failed (see $CHECKLOG )" - errors=$((errors+1)) - else - echo "Warning: headercheck for module $module failed (see $CHECKLOG )" - fi - fi -done - - -# perform make test -# ------------------ - -cd $WORKINGDIR -echo -echo "Checking for minimal options ..." - -CHECKLOG="$WORKINGDIR/minimal-check.out" - -if ! $SCRIPTSDIR/check-tests.sh $BUILDDIR/$MODNAME "$MAKE_FLAGS"; then - echo "Error: make test failed with minimal options (see $CHECKLOG)" +cd $WORKINGDIR +# perform headercheck only ones +if ! $SCRIPTSDIR/check-opts.sh $DUNEDIR $NONOPTSFILE true; then errors=$((errors+1)) fi -mv $WORKINGDIR/check-tests.out $CHECKLOG if test $errors -gt 0 ; then exit 1 diff --git a/scripts/opts/config_none.opts b/scripts/opts/config_none.opts index 929d2724..a8ca836f 100644 --- a/scripts/opts/config_none.opts +++ b/scripts/opts/config_none.opts @@ -1,11 +1,20 @@ -CONFIGURE_FLAGS="\ ---disable-documentation \ ---enable-experimental-grid-extensions \ ---without-gmp \ ---prefix=/hosts/gandalf/raid5/morgoth/dune/src/dune \ ---disable-dependency-tracking " - -# These flags are necessary to perform grid specific checks! -MAKE_CHECK_FLAGS="GRIDTYPE=YASPGRID GRIDDIM=2" +USE_CMAKE=yes + +CC=${CC:-cc} +CXX=${CXX:-c++} +F77=${F77:-gfortran} + +BUILD_DIR=build-none + +CMAKE_FLAGS=" + -DCMAKE_SYSTEM_PREFIX_PATH=\"${SYSTEM_PREFIX_PATH}\" \ + -DCMAKE_CXX_FLAGS=\"-Wall -Winit-self -O1 -g \" \ + -DCMAKE_CXX_COMPILER=\"$(which ${CXX})\" \ + -DCMAKE_C_COMPILER=\"$(which ${CC})\" \ + -DCMAKE_Fortran_COMPILER=\"$(which ${F77} )\" \ + -DCMAKE_EXE_LINKER_FLAGS=\"${LDFLAGS}\" \ + -DENABLE_HEADERCHECK=YES \ + -DDUNE_GRID_EXPERIMENTAL_GRID_EXTENSIONS=TRUE \ +" MAKE_FLAGS=-j8 -- GitLab