Revision e0010627ee6a984f05a89340b0594fe15dfc03fd authored by Sébastien Loriot on 02 January 2017, 17:14:00 UTC, committed by Sébastien Loriot on 02 January 2017, 18:25:48 UTC
in addition it become a real predicate (no construction)
1 parent 9f2d102
Raw File
create_cgal_test
#! /bin/bash
#
# =============================================================================
# $URL: svn+ssh://fcacciola@scm.gforge.inria.fr/svn/cgal/trunk/Scripts/developer_scripts/create_cgal_test $
# $Id: create_cgal_test 36975 2007-03-09 22:52:40Z spion $
#
# author(s)     : Wieger Wesselink, Geert-Jan Giezeman
#
# coordinator   : Utrecht University
# =============================================================================
#
# This script creates a cgal_test_with_cmake script with entries for files with a common
# C++ file extension (as mentioned in the g++ man page) in the current test directory.

VERSION=1.1

DO_RUN="y"

usage()
{
    echo 'Usage : create_cgal_test [--no-run]'
    echo
    echo '    --help    : prints this usage help'
    echo '    --no-run  : produces a cgal_test_with_cmake script that only does compilation, no execution'
    exit
}

while [ $1 ]; do
    case "$1" in
        -h|-help|--h|--help)
            usage;
        ;;
        --no-run)
            DO_RUN=""
            shift; continue
        ;;
        *) 
            echo "Unknown option: $1"
            usage
        ;;
    esac
done


header()
{
  echo "#---------------------------------------------------------------------#"
  echo "#                    $1"
  echo "#---------------------------------------------------------------------#"
}

create_script()
{
  echo "#! /bin/sh"
  echo
  echo "# This is a script for the CGAL test suite. Such a script must obey"
  echo "# the following rules:"
  echo "#"
  echo "# - the name of the script is cgal_test_with_cmake"
  echo "# - for every target two one line messages are written to the file 'error.txt'"
  echo "#     the first one indicates if the compilation was successful"
  echo "#     the second one indicates if the execution was successful"
  echo "#   if one of the two was not successful, the line should start with 'ERROR:'"
  echo "# - running the script should not require any user interaction"
  echo "# - the script should clean up object files and executables"
  echo
cat << EOF
  ERRORFILE=error.txt
  DO_RUN=${DO_RUN}
  if [ -z "\${MAKE_CMD}" ]; then
    MAKE_CMD=make
  fi
  NEED_CLEAN=

EOF
  header "configure"
cat << EOF

configure()
{
  echo "Configuring... "

  if eval 'cmake "\$CMAKE_GENERATOR" -DRUNNING_CGAL_AUTO_TEST=TRUE  \\
                                     -DCGAL_DIR="\$CGAL_DIR" \\
                                     --no-warn-unused-cli \\
                                     .' ; then

    echo "   successful configuration" >> \$ERRORFILE
  else
    echo "   ERROR:    configuration" >> \$ERRORFILE
  fi
}

EOF
  header "compile_and_run <target>"
cat << EOF

compile_and_run()
{
  echo "Compiling \$1 ... "
  SUCCESS="y"

  if eval '"\${MAKE_CMD}" VERBOSE=ON -fMakefile \$1' ; then
    echo "   successful compilation of \$1" >> \$ERRORFILE
  else
    echo "   ERROR:    compilation of \$1" >> \$ERRORFILE
    SUCCESS=""
  fi

  if [ -n "\$DO_RUN" ] ; then
    if [ -n "\${SUCCESS}" ] ; then
      OUTPUTFILE=ProgramOutput.\$1.\$PLATFORM
      rm -f \$OUTPUTFILE
      COMMAND="./\$1"
      if [ -f \$1.cmd ] ; then
        COMMAND="\$COMMAND \`cat \$1.cmd\`"
      fi
      if [ -f \$1.cin ] ; then
        COMMAND="cat \$1.cin | \$COMMAND"
      fi
      echo "Executing \$1 ... "
      echo
      ulimit -t 3600 2> /dev/null
      if eval \$COMMAND > \$OUTPUTFILE 2>&1 ; then
        echo "   successful execution   of \$1" >> \$ERRORFILE
      else
        echo "   ERROR:    execution   of \$1" >> \$ERRORFILE
      fi
    else
      echo   "   ERROR:    not executed   \$1" >> \$ERRORFILE
    fi
  fi
}

EOF
  header "remove the previous error file"
cat << EOF

rm -f \$ERRORFILE
touch \$ERRORFILE

EOF
  header "configure, compile and run the tests"
cat << EOF

configure

if [ \$# -ne 0 ] ; then
  for file in \$* ; do
    compile_and_run \$file
  done
else
  echo "Run all tests."
EOF

  # workaround for Cygwin, to avoid that the 'sort' from
  # C:\Windows\system32 is used instead of /usr/bin/sort
  PATH=/usr/bin:$PATH

  for file in `ls *.cc *.cp *.cxx *.cpp *.CPP *.c++ *.C 2> /dev/null | sort` ; do
    if [ -n "`grep '\<main\>' $file`" ] ; then
      BASE=`basename $file .cc`
      BASE=`basename $BASE .cp`
      BASE=`basename $BASE .cxx`
      BASE=`basename $BASE .cpp`
      BASE=`basename $BASE .CPP`
      BASE=`basename $BASE .c++`
      BASE=`basename $BASE .C`
      cat <<EOF
if grep -qE "^${BASE}:" Makefile; then
  compile_and_run $BASE
  NEED_CLEAN=y
fi
EOF
    fi
  done
cat << EOF
fi

#
# The clean target generated by CMake under cygwin
# always fails for some reason
#
if [ -n "\${NEED_CLEAN}" ]; then
  if ! ( uname | grep -q "CYGWIN" ) ; then
    "\${MAKE_CMD}" -fMakefile clean
  fi
fi
EOF

}

if [ -f cgal_test_with_cmake ] ; then
  echo "moving cgal_test_with_cmake to cgal_test_with_cmake.bak ..."
  mv -f cgal_test_with_cmake cgal_test_with_cmake.bak
fi
create_script > cgal_test_with_cmake
chmod 755 cgal_test_with_cmake
echo "created cgal_test_with_cmake, version $VERSION, in $PWD ..."
back to top