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.
+#