From 23c34892938d49701c8ec356d7077bc9221dc2e7 Mon Sep 17 00:00:00 2001 From: Henrik Rusche Date: Tue, 15 May 2018 13:31:05 +0200 Subject: [PATCH] Added options (BUILD_WITH_CMAKE, RUN_TESTS) to main CMakeLists.txt --- CMakeLists.txt | 198 +------------------- cmake/compileFOAM.cmake | 222 ++++++++++++++++++++++ cmake/tests.cmake | 395 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 626 insertions(+), 189 deletions(-) create mode 100644 cmake/compileFOAM.cmake create mode 100644 cmake/tests.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index cab5da3ac..bc18fed28 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,197 +32,17 @@ cmake_minimum_required (VERSION 2.8) -project(foam-extend C CXX) +project(foam-extend-4.1 C CXX) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") -# -# Determine project version & Set-up automatic update during build -# +option(BUILD_WITH_CMAKE "Build using cmake" ON) +option(RUN_TESTS "Run test loop" OFF) -include(getGitVersion) - -add_custom_target(getGitVersion ALL - COMMAND ${CMAKE_COMMAND} -P cmake/getGitVersion.cmake - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - COMMENT "Getting GIT version" -) - -set(PROJECT_VERSION ${FOAM_VERSION}) - - -# -# Include helper functions -# - -include(FOAMMacros) - -set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) - - -# -# External dependencies -# - -find_package(MPI REQUIRED) -add_library(mpi SHARED IMPORTED) -set_property(TARGET mpi PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${MPI_C_INCLUDE_PATH}) -set_property(TARGET mpi PROPERTY IMPORTED_LOCATION ${MPI_LIBRARY}) - -find_package(ZLIB REQUIRED) - -find_package(FLEX REQUIRED) - -find_package(Git REQUIRED) - -# Path to ParaViewConfig.cmake -set(ParaView_DIR ${CMAKE_CURRENT_SOURCE_DIR}/ThirdParty/packages/ParaView-4.4.0/platforms/linux64GccDPOpt/lib/cmake/paraview-4.4) -find_package(ParaView REQUIRED) - -find_package(Mesquite REQUIRED) -if(MESQUITE_FOUND) - add_library(mesquite SHARED IMPORTED) - set_property(TARGET mesquite PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${MESQUITE_INCLUDE_DIRS}) - set_property(TARGET mesquite PROPERTY IMPORTED_LOCATION ${MESQUITE_LIBRARY}) -endif() - -find_package(Scotch REQUIRED) -if(SCOTCH_FOUND) - add_library(scotch SHARED IMPORTED) - set_property(TARGET scotch PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${SCOTCH_INCLUDE_DIRS}) - set_property(TARGET scotch PROPERTY IMPORTED_LOCATION ${SCOTCH_LIBRARY}) -endif() - -find_package(Metis REQUIRED) -if(METIS_FOUND) - add_library(metis SHARED IMPORTED) - set_property(TARGET metis PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${METIS_INCLUDE_DIRS}) - set_property(TARGET metis PROPERTY IMPORTED_LOCATION ${METIS_LIBRARY}) -endif() - -find_package(ParMetis REQUIRED) -if(PARMETIS_FOUND) - add_library(parmetis SHARED IMPORTED) - set_property(TARGET parmetis PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${PARMETIS_INCLUDE_DIRS}) - set_property(TARGET parmetis PROPERTY IMPORTED_LOCATION ${PARMETIS_LIBRARY}) -endif() - -find_package(ParMGridGen REQUIRED) -if(PARMGRIDGEN_FOUND) - add_library(parmgridgen SHARED IMPORTED) - set_property(TARGET parmgridgen PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${PARMGRIDGEN_INCLUDE_DIRS}) - set_property(TARGET parmgridgen PROPERTY IMPORTED_LOCATION ${PARMGRIDGEN_LIBRARY}) -endif() - -find_package(CCMIO REQUIRED) -if(CCMIO_FOUND) - add_library(ccmio SHARED IMPORTED) - set_property(TARGET ccmio PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${CCMIO_INCLUDE_DIRS}) - set_property(TARGET ccmio PROPERTY IMPORTED_LOCATION ${CCMIO_LIBRARY}) - set_property(TARGET ccmio PROPERTY INTERFACE_LINK_LIBRARIES ${CCMIO_LIBRARIES}) -endif() - -# -# Recurse into the source -# - -# Set variable to indicate that we are compiling internally. Used in applications. -set(FOAM_FOUND 1) - -# Write something into FOAMTargets.cmake so that we can append to the file. -file(WRITE ${CMAKE_BINARY_DIR}/cmake/FOAMTargets.cmake "#" ) - -add_subdirectory(src) -add_subdirectory(applications) - - -# -# Set default build type -# - -if(NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE Release CACHE STRING - "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." - FORCE) -endif() - -# -# Definitions inherited by all targets -# - -# Single/Double precision -set(FOAM_PRECISION "double" CACHE STRING "Numerical precision") -set_property(CACHE FOAM_PRECISION PROPERTY STRINGS single double) -if(FOAM_PRECISION EQUAL "single") - target_compile_definitions(OSspecific PUBLIC WM_SP) -else() - target_compile_definitions(OSspecific PUBLIC WM_DP) -endif() - -# No Repository -target_compile_definitions(OSspecific PUBLIC NoRepository) - -# FOAM's full debug mode -if(${CMAKE_BUILD_TYPE} STREQUAL "Debug") - target_compile_definitions(OSspecific PUBLIC FULLDEBUG) - target_compile_options(OSspecific PUBLIC -fdefault-inline -ggdb3) -endif() - -#option(FOAM_PRECISION "help string describing option" -WM_DP) - - -# -# Exports and install -# - -include(GenerateExportHeader) -set(ConfigPackageLocation lib/cmake/foam) - -include(CMakePackageConfigHelpers) -write_basic_package_version_file( - "${CMAKE_CURRENT_BINARY_DIR}/cmake/FOAMConfigVersion.cmake" - VERSION ${FOAM_VERSION} - COMPATIBILITY AnyNewerVersion -) - -configure_package_config_file(cmake/FOAMConfig.cmake.in - ${CMAKE_CURRENT_BINARY_DIR}/cmake/FOAMConfig.cmake - INSTALL_DESTINATION ${ConfigPackageLocation} -) - -install(EXPORT FOAMTargets - FILE FOAMTargets.cmake - DESTINATION ${ConfigPackageLocation} -) - -install(FILES - cmake/FOAMConfig.cmake - "${CMAKE_CURRENT_BINARY_DIR}/cmake/FOAMConfigVersion.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/cmake/FOAMMacros.cmake" - DESTINATION ${ConfigPackageLocation} - COMPONENT Devel -) - -file(GLOB_RECURSE files "${CMAKE_CURRENT_SOURCE_DIR}/etc/*") -install(FILES ${files} DESTINATION etc) - -# -# Register with CMake user package registry -# - -export(PACKAGE FOAM) - - -# -# Make a package -# - -set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Henrik Rusche") -set(CPACK_PACKAGE_CONTACT "h.rusche@wikki-gmbh.de") -set(CPACK_GENERATOR "DEB") -set(CPACK_PACKAGING_INSTALL_PREFIX "/opt/foam-extend-4.0") -set(CPACK_SOURCE_STRIP_FILES "1") -include(CPack) +if(BUILD_WITH_CMAKE) + include(compileFOAM) +endif(BUILD_WITH_CMAKE) +if(RUN_TESTS) + include(tests) +endif(RUN_TESTS) diff --git a/cmake/compileFOAM.cmake b/cmake/compileFOAM.cmake new file mode 100644 index 000000000..b5bbf7004 --- /dev/null +++ b/cmake/compileFOAM.cmake @@ -0,0 +1,222 @@ +# -------------------------------------------------------------------------- +# ======== | +# \ / F ield | foam-extend: Open Source CFD +# \ / O peration | Version: 4.1 +# \ / A nd | Web: http://www.foam-extend.org +# \/ M anipulation | For copyright notice see file Copyright +# -------------------------------------------------------------------------- +# License +# This file is part of foam-extend. +# +# foam-extend is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or {at your +# option} any later version. +# +# foam-extend is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with foam-extend. If not, see . +# +# Description +# CMakeLists.txt file for libraries and applications +# +# Author +# Henrik Rusche, Wikki GmbH, 2017. All rights reserved +# +# +# -------------------------------------------------------------------------- + +# +# Determine project version & Set-up automatic update during build +# + +include(getGitVersion) + +add_custom_target(getGitVersion ALL + COMMAND ${CMAKE_COMMAND} -P cmake/getGitVersion.cmake + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + COMMENT "Getting GIT version" +) + +set(PROJECT_VERSION ${FOAM_VERSION}) + + +# +# Include helper functions +# + +include(FOAMMacros) + +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) + + +# +# External dependencies +# + +find_package(MPI REQUIRED) +add_library(mpi SHARED IMPORTED) +set_property(TARGET mpi PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${MPI_C_INCLUDE_PATH}) +set_property(TARGET mpi PROPERTY IMPORTED_LOCATION ${MPI_LIBRARY}) + +find_package(ZLIB REQUIRED) + +find_package(FLEX REQUIRED) + +find_package(Git REQUIRED) + +# Path to ParaViewConfig.cmake +set(ParaView_DIR ${CMAKE_CURRENT_SOURCE_DIR}/ThirdParty/packages/ParaView-4.4.0/platforms/linux64GccDPOpt/lib/cmake/paraview-4.4) +find_package(ParaView REQUIRED) + +find_package(Mesquite REQUIRED) +if(MESQUITE_FOUND) + add_library(mesquite SHARED IMPORTED) + set_property(TARGET mesquite PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${MESQUITE_INCLUDE_DIRS}) + set_property(TARGET mesquite PROPERTY IMPORTED_LOCATION ${MESQUITE_LIBRARY}) +endif() + +find_package(Scotch REQUIRED) +if(SCOTCH_FOUND) + add_library(scotch SHARED IMPORTED) + set_property(TARGET scotch PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${SCOTCH_INCLUDE_DIRS}) + set_property(TARGET scotch PROPERTY IMPORTED_LOCATION ${SCOTCH_LIBRARY}) +endif() + +find_package(Metis REQUIRED) +if(METIS_FOUND) + add_library(metis SHARED IMPORTED) + set_property(TARGET metis PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${METIS_INCLUDE_DIRS}) + set_property(TARGET metis PROPERTY IMPORTED_LOCATION ${METIS_LIBRARY}) +endif() + +find_package(ParMetis REQUIRED) +if(PARMETIS_FOUND) + add_library(parmetis SHARED IMPORTED) + set_property(TARGET parmetis PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${PARMETIS_INCLUDE_DIRS}) + set_property(TARGET parmetis PROPERTY IMPORTED_LOCATION ${PARMETIS_LIBRARY}) +endif() + +find_package(ParMGridGen REQUIRED) +if(PARMGRIDGEN_FOUND) + add_library(parmgridgen SHARED IMPORTED) + set_property(TARGET parmgridgen PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${PARMGRIDGEN_INCLUDE_DIRS}) + set_property(TARGET parmgridgen PROPERTY IMPORTED_LOCATION ${PARMGRIDGEN_LIBRARY}) +endif() + +find_package(CCMIO REQUIRED) +if(CCMIO_FOUND) + add_library(ccmio SHARED IMPORTED) + set_property(TARGET ccmio PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${CCMIO_INCLUDE_DIRS}) + set_property(TARGET ccmio PROPERTY IMPORTED_LOCATION ${CCMIO_LIBRARY}) + set_property(TARGET ccmio PROPERTY INTERFACE_LINK_LIBRARIES ${CCMIO_LIBRARIES}) +endif() + +# +# Recurse into the source +# + +# Set variable to indicate that we are compiling internally. Used in applications. +set(FOAM_FOUND 1) + +# Write something into FOAMTargets.cmake so that we can append to the file. +file(WRITE ${CMAKE_BINARY_DIR}/cmake/FOAMTargets.cmake "#" ) + +add_subdirectory(src) +add_subdirectory(applications) + + +# +# Set default build type +# + +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release CACHE STRING + "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." + FORCE) +endif() + +# +# Definitions inherited by all targets +# + +# Single/Double precision +set(FOAM_PRECISION "double" CACHE STRING "Numerical precision") +set_property(CACHE FOAM_PRECISION PROPERTY STRINGS single double) +if(FOAM_PRECISION EQUAL "single") + target_compile_definitions(OSspecific PUBLIC WM_SP) +else() + target_compile_definitions(OSspecific PUBLIC WM_DP) +endif() + +# No Repository +target_compile_definitions(OSspecific PUBLIC NoRepository) + +# FOAM's full debug mode +if(${CMAKE_BUILD_TYPE} STREQUAL "Debug") + target_compile_definitions(OSspecific PUBLIC FULLDEBUG) + target_compile_options(OSspecific PUBLIC -fdefault-inline -ggdb3) +endif() + +#option(FOAM_PRECISION "help string describing option" -WM_DP) + + +# +# Exports and install +# + +include(GenerateExportHeader) +set(ConfigPackageLocation lib/cmake/foam) + +include(CMakePackageConfigHelpers) +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/cmake/FOAMConfigVersion.cmake" + VERSION ${FOAM_VERSION} + COMPATIBILITY AnyNewerVersion +) + +configure_package_config_file(cmake/FOAMConfig.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/cmake/FOAMConfig.cmake + INSTALL_DESTINATION ${ConfigPackageLocation} +) + +install(EXPORT FOAMTargets + FILE FOAMTargets.cmake + DESTINATION ${ConfigPackageLocation} +) + +install(FILES + cmake/FOAMConfig.cmake + "${CMAKE_CURRENT_BINARY_DIR}/cmake/FOAMConfigVersion.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/cmake/FOAMMacros.cmake" + DESTINATION ${ConfigPackageLocation} + COMPONENT Devel +) + +file(GLOB_RECURSE files "${CMAKE_CURRENT_SOURCE_DIR}/etc/*") +install(FILES ${files} DESTINATION etc) + +# +# Register with CMake user package registry +# + +export(PACKAGE FOAM) + + +# +# Make a package +# + +set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Henrik Rusche") +set(CPACK_PACKAGE_CONTACT "h.rusche@wikki-gmbh.de") +set(CPACK_GENERATOR "DEB") +set(CPACK_PACKAGING_INSTALL_PREFIX "/opt/foam-extend-4.0") +set(CPACK_SOURCE_STRIP_FILES "1") +include(CPack) + diff --git a/cmake/tests.cmake b/cmake/tests.cmake new file mode 100644 index 000000000..f9f2e28ae --- /dev/null +++ b/cmake/tests.cmake @@ -0,0 +1,395 @@ +# /*-------------------------------------------------------------------------*\ +# ========= | +# \\ / F ield | foam-extend: Open Source CFD +# \\ / O peration | Version: 4.0 +# \\ / A nd | Web: http://www.foam-extend.org +# \\/ M anipulation | For copyright notice see file Copyright +# ----------------------------------------------------------------------------- +# License +# This file is part of foam-extend. +# +# foam-extend is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# foam-extend is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with foam-extend. If not, see . +# +# Description +# CMakeLists.txt file for implementing a test harness for the compilation +# and test of foam-extend-3.2 using Kitware CTest/CMake/CDash +# +# The results will be submitted to the CDash server identified by the file +# CTestConfig.cmake +# +# Author +# Martin Beaudoin, Hydro-Quebec, 2010. All rights reserved +# +# +# \*-------------------------------------------------------------------------*/ + +#----------------------------------------------------------------------------- +# Utility functions +# +# GetHostName(var) +# +# Set the variable named ${var} to the host hostname +# +function(GetHostName var) + set( thisHostName "unknown") + + if(CMAKE_HOST_WIN32) + execute_process( + COMMAND hostname + OUTPUT_VARIABLE thisHostname + ) + else() + execute_process( + COMMAND hostname -f + OUTPUT_VARIABLE thisHostname + ) + endif() + set(${var} ${thisHostname} PARENT_SCOPE) +endfunction() + +# +# GetGitStatus(status ecode) +# +# Get the git status for the local git repository of the source code +# The variable named ${status} will get the git status +# The variable named ${ecode} will get the command error code +# +function(GetGitStatus _status _ecode) + set( git_status "unknown") + set( git_ecode "1") + + execute_process( + COMMAND git status + WORKING_DIRECTORY ${FOAM_ROOT} + OUTPUT_VARIABLE git_status + RESULT_VARIABLE git_ecode + ERROR_QUIET + ) + set(${_status} ${git_status} PARENT_SCOPE) + set(${_ecode} ${git_ecode} PARENT_SCOPE) +endfunction() + +# +# GetGitBranchName(var) +# +# Set the variable named ${var} to the git branch name of the source code +# +function(GetGitBranchName var) + set( retValue "unknown") + + execute_process( + COMMAND git branch --no-color + WORKING_DIRECTORY ${FOAM_ROOT} + OUTPUT_VARIABLE listOfGitBranches + ) + # Create list of strings + string(REPLACE "\n" ";" listOfGitBranches ${listOfGitBranches}) + + # Iterate over list, find the string beginning with "* " + foreach(branch ${listOfGitBranches}) + string(REGEX MATCH "\\* .*$" matchString ${branch}) + string(LENGTH "${matchString}" lengthMatchString) + if(lengthMatchString GREATER 0) + # We have match. Cleanup and set retValue + string(REPLACE "* " "" retValue ${matchString}) + endif() + endforeach() + + set(${var} ${retValue} PARENT_SCOPE) +endfunction() + +# +# GetGitRevNumber(var) +# +# Set the variable named ${var} to the git revision number of the source code +# +function(GetGitRevNumber var) + set( retValue "unknown") + + execute_process( + COMMAND git rev-parse --short=12 HEAD + WORKING_DIRECTORY ${FOAM_ROOT} + OUTPUT_VARIABLE git_rev_number + ) + + # Minimal check that we do have a valid string + string(LENGTH "${git_rev_number}" lengthString) + if(lengthString GREATER 0) + set(retValue ${git_rev_number}) + endif() + + set(${var} ${retValue} PARENT_SCOPE) +endfunction() + +# CleanUpStringForCDash(var) +# +# Cleanup the variable named ${value} for characters not supported +# for CDash identifiers. Return the modified value in retVar +# +function(CleanUpStringForCDash value retVar) + string(REPLACE "/" "_" value "${value}") + string(REPLACE " " "_" value ${value}) + set(${retVar} ${value} PARENT_SCOPE) +endfunction() + +#----------------------------------------------------------------------------- +# +# +# Initialization of CTest specific variables +# +## Run ctest in parallel if environment variable WM_NCOMPPROCS is set +IF (NOT $ENV{WM_NCOMPPROCS} STREQUAL "") + # Will run ctest in parallel over $WM_NCOMPPROCS processors + set(CMAKE_CTEST_COMMAND ${CMAKE_CTEST_COMMAND} --parallel $ENV{WM_NCOMPPROCS}) + MESSAGE("Running tests in parallel using $ENV{WM_NCOMPPROCS} processors") +ENDIF () + +# Initialize the site name + +IF (NOT $ENV{CDASH_SUBMIT_LOCAL_HOST_ID} STREQUAL "") + # We can override the site name with the environment variable + # $CDASH_SUBMIT_LOCAL_HOST_ID + SET( + SITENAME $ENV{CDASH_SUBMIT_LOCAL_HOST_ID} + CACHE STRING "Name of the local site" + ) +ELSE () + # Grab the hostname FQN; will be used for the sitename + GetHostName(SITENAME) + +ENDIF() + +MESSAGE("Initializing the name of this local site to: ${SITENAME}") + +SET( + SITE ${SITENAME} + CACHE STRING "Name of the local site" +) + +#Grab the FOAM installation directory. +SET( + FOAM_ROOT $ENV{WM_PROJECT_DIR} + CACHE INTERNAL "FOAM root directory." +) + +# Construct the build name. +# No need to add $WM_PROJECT_VERSION to the name of the build, +# the test harness name should have taken care of that. +SET( + BUILDNAME $ENV{WM_OPTIONS} + CACHE STRING "Build ID" +) + +# We allow overriding the git branch and revision information with some +# user-supplied information using the CDASH_SCM_INFO environment variable. +# +# Mercurial or other SCM users should be using this environment variable +# in order to provide branch and revision information for the buildname. +# +# Git users should use this environment variable in order to provide +# additionnal information instead of just the branch and revision number. +# +# Otherwise, the buildname will be appended with the following information: +# -git-branch=the_git_branch_name-git-rev=the_git_revision_number +SET( + BUILDNAME_SCM_INFO $ENV{CDASH_SCM_INFO} + CACHE STRING "SCM info for CDash buildname" +) + +# Find out the version of the compiler being used. +# Add this information to the buildname +# This is for gcc or icc because they both support the -dumpversion option +EXEC_PROGRAM($ENV{WM_CC} + ARGS -dumpversion + OUTPUT_VARIABLE COMPILER_VERSION +) +SET(BUILDNAME "${BUILDNAME}-$ENV{WM_CC}${COMPILER_VERSION}") +# +# We will support more compilers eventually. +# + +# Timeout for running every single test: 4 hours: 4 x 3600 seconds +#SET( +# DART_TESTING_TIMEOUT 14400 +# CACHE STRING "Maximum time allowed (4 hours) before CTest will kill the test." +#) +# Timeout for running all this: 20 minutes : 1200 seconds (for debug) +SET( + DART_TESTING_TIMEOUT 1200 + CACHE STRING "Maximum time allowed (20 minutes) before CTest will kill the test." +) + +SET( + CMAKE_VERBOSE_MAKEFILE TRUE +) + + +# Update section +#----------------------------------------------------------------------------- +set (UPDATE_TYPE git) + +# +# Using GIT as SCM +# +find_package(Git) + +if(NOT BUILDNAME_SCM_INFO STREQUAL "") + SET(BUILDNAME "${BUILDNAME}-${BUILDNAME_SCM_INFO}") + +elseif(GIT_FOUND) + message("The git command was found: ${GIT_EXECUTABLE}") + + # Check if the source code is under a valid git repository + GetGitStatus(GIT_STATUS GIT_ECODE) + + if(NOT GIT_ECODE) + # We have a valid git repository. + # Grab the branch and revision info. Add to the build name + GetGitBranchName(GIT_BRANCH_NAME) + message("Git branch: ${GIT_BRANCH_NAME}") + + GetGitRevNumber(GIT_REV_NUMBER) + message("Git revision: ${GIT_REV_NUMBER}") + + SET(BUILDNAME "${BUILDNAME}-git-branch=${GIT_BRANCH_NAME}") + SET(BUILDNAME "${BUILDNAME}-git-rev=${GIT_REV_NUMBER}") + else() + execute_process( + COMMAND hg id + WORKING_DIRECTORY ${FOAM_ROOT} + OUTPUT_VARIABLE HG_STATUS + RESULT_VARIABLE HG_ECODE + ERROR_QUIET + ) + if(NOT HG_ECODE) + # We have a valid git repository. Grab the branch and revision info. + # Add to the build name + message("No git-branch. Mercurial?") + EXEC_PROGRAM(hg + ARGS id --bookmarks + OUTPUT_VARIABLE GIT_BRANCH_NAME + ) + EXEC_PROGRAM(hg + ARGS id --id + OUTPUT_VARIABLE GIT_REV_NUMBER + ) + EXEC_PROGRAM(hg + ARGS log --template='git_{gitnode|short}' -l 1 + OUTPUT_VARIABLE GIT_REAL_REV_NUMBER + ) + string(REPLACE " " "_" GIT_BRANCH_NAME ${GIT_BRANCH_NAME}) + string(REPLACE "+" ":modified" GIT_REV_NUMBER ${GIT_REV_NUMBER}) + SET(GIT_REV_NUMBER "${GIT_REV_NUMBER}_${GIT_REAL_REV_NUMBER}") + message("Git branch (mercurial): ${GIT_BRANCH_NAME} Revision: ${GIT_REV_NUMBER}") + + SET(BUILDNAME "${BUILDNAME}-hg-branch=${GIT_BRANCH_NAME}") + SET(BUILDNAME "${BUILDNAME}-hg-rev=${GIT_REV_NUMBER}") + else() + # Not a git or mercurial repository: no branch nor revision information available + SET(BUILDNAME "${BUILDNAME}-git-branch=unknown") + SET(BUILDNAME "${BUILDNAME}-git-rev=unknown") + endif() + endif() +else() + # Git is not available: no branch nor revision information supplied + SET(BUILDNAME "${BUILDNAME}-git-branch=unknown") + SET(BUILDNAME "${BUILDNAME}-git-rev=unknown") +endif() + +# Some last minute cleanup +# Seems like no '/' or ' 'are allowed in the BUILDNAME or in the SITE name +CleanUpStringForCDash(${BUILDNAME} BUILDNAME) +CleanUpStringForCDash(${SITE} SITE) + +message("Build name: ${BUILDNAME}") +message("Site name: ${SITE}") + +# +# Build section +#----------------------------------------------------------------------------- + +# Compile FOAM, libs and apps +add_custom_target (foam-extend-$ENV{WM_PROJECT_VERSION} ALL + ${FOAM_ROOT}/Allwmake +) + +set_property( + TARGET foam-extend-$ENV{WM_PROJECT_VERSION} + PROPERTY LABELS foam-extend-$ENV{WM_PROJECT_VERSION} +) + +# Compile the FOAM unit tests located under applications/test +# This part will not be compiled and run by default. +# This would be a good candidate for a sub-project +add_custom_target (foam-extend-$ENV{WM_PROJECT_VERSION}_unitTests + wmake all ${FOAM_ROOT}/applications/test +) + +# Test section +#----------------------------------------------------------------------------- + +#Enable testing and dashboard +ENABLE_TESTING() +INCLUDE(CTest) + +SET (CTEST_UPDATE_COMMAND ${GIT_EXECUTABLE}) + +SET( + CTEST_CUSTOM_MAXIMUM_NUMBER_OF_ERRORS 1000 + CACHE INTERNAL "Max number of errors" +) +SET( + CTEST_CUSTOM_MAXIMUM_NUMBER_OF_WARNINGS 1000 + CACHE INTERNAL "Max number of warnings" +) + +IF(BUILD_TESTING) + + # Modify this variable if you want the full length test case simulations + # Beware, this might take a long time to execute. + # Otherwise, the default behaviour is to run each tutorial for 1 "timestep" + #SET(RUN_FROM_ONE_TIMESTEP 0) + SET(RUN_FROM_ONE_TIMESTEP 1) + + IF(RUN_FROM_ONE_TIMESTEP) + SET(testIdSuffix "_oneTimeStep") + ENDIF(RUN_FROM_ONE_TIMESTEP) + + # FOAM will run against this test suite: + + # Add the suite of FOAM tutorials + # + INCLUDE($ENV{FOAM_TEST_HARNESS_DIR}/CMakeFiles/FOAM_Tutorials.cmake) + + IF(RUN_FROM_ONE_TIMESTEP) + # Modify the cases controlDict file in order to run for only one time step + MESSAGE("${testRunTimeDirectory}: Modifying the controlDict files for running only one time step in directory: ${TEST_CASE_DIR}") + if(CMAKE_HOST_WIN32) + # Need to supply a bash shell to run the script under Windows + EXECUTE_PROCESS( + COMMAND bash -c "$ENV{FOAM_TEST_HARNESS_DIR}/scripts/prepareCasesForOneTimeStep.sh ${TEST_CASE_DIR}" + WORKING_DIRECTORY . + ) + else() + EXECUTE_PROCESS( + COMMAND $ENV{FOAM_TEST_HARNESS_DIR}/scripts/prepareCasesForOneTimeStep.sh ${TEST_CASE_DIR} + WORKING_DIRECTORY . + ) + endif() + ENDIF(RUN_FROM_ONE_TIMESTEP) + +ENDIF(BUILD_TESTING) + +# That's it. +#