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