This repository has been archived on 2023-11-20. You can view files and clone it, but cannot push or open issues or pull requests.
foam-extend4.1-coherent-io/testHarness/foam-extend/4.1/CMakeFiles/CMakeLists.txt
Martin Beaudoin 2adbd0457a Correction for a problem with newer versions of CMake that are refusing to upload the test harness
results  to the CDash server.
The generated error message is the following: "Error message was: Illegal characters found in URL"

Diagnostic:
    If the environment variable CDASH_SUBMIT_LOCAL_HOST_ID is not initialized, the FQN hostname of the
system will be picked by the CMake/CTest scripts. The CTest internal system command used for retrieving
the FQN hostname is indeed leaving a carriage return in the returned hostname string.
That string is in turn reused to construct an URL that will be shared with the CDash service. The presence
of such characters (\n and \r) is no longer accepted by newer versions of CTest/CMake.

Solution:
    The solution is simply to check and remove such characters from the hostname string.
2018-04-15 21:51:43 -04:00

404 lines
12 KiB
CMake

# /*-------------------------------------------------------------------------*\
# ========= |
# \\ / 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 <http://www.gnu.org/licenses/>.
#
# Description
# CMakeLists.txt file for implementing a test harness for the compilation
# and test of foam-extend-4.1 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
#
#
# \*-------------------------------------------------------------------------*/
cmake_minimum_required (VERSION 2.8)
PROJECT(foam-extend-4.1)
#-----------------------------------------------------------------------------
# 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()
# Cleanup possible presence of \n or \r characters
string(REPLACE "\n" "" thisHostname ${thisHostname})
string(REPLACE "\r" "" thisHostname ${thisHostname})
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.
#