1
0
mirror of https://github.com/rwengine/openrw.git synced 2024-11-22 10:22:52 +01:00
openrw/cmake/ctest/build.ctest
2018-06-08 10:18:05 +02:00

164 lines
3.8 KiB
Plaintext

# This file does:
# - check whether all arguments are defined,
# - clean the build directory,
# - configure, build and test,
# - coverage and memcheck,
# - submit
set(_ARGS_BOOL
EMPTY_BINARY_DIR
DEBUG
CHECK_INCLUDES
BUILD_VIEWER
RUN_TESTS
TESTS_NODATA
SEPARATE_TEST_SUITES
RUN_MEMCHECK
ENABLE_SANITIZERS
APPEND_RESULTS
RUN_COVERAGE
SUBMIT
)
set(_ARGS_ONEVAL
CTEST_SOURCE_DIRECTORY
CTEST_BINARY_DIRECTORY
MODEL_NAME
BUILDER_NAME
BUILD_NAME
CMAKE_GENERATOR
COVERAGE_COMMAND
)
set(_ARGS_MULVAL
CONFIGURE_EXTRA_OPTIONS
)
foreach(_ARG ${_ARGS_BOOL} ${_ARGS_ONEVAL} ${_ARGS_MULVAL})
set(_VAL "${${_ARG}}")
message(STATUS "build parameter: ${_ARG}='${_VAL}'")
if(NOT DEFINED _VAL)
message(FATAL_ERROR "Build parameter '${_ARG}' not defined")
endif()
endforeach()
# CTEST_CMAKE_GENERATOR and CTEST_COVERAGE_COMMAND needed by CTest
set(CTEST_CMAKE_GENERATOR "${CMAKE_GENERATOR}")
set(CTEST_COVERAGE_COMMAND "${COVERAGE_COMMAND}")
set(CTEST_SITE "${BUILDER_NAME}")
set(CTEST_BUILD_NAME "${BUILD_NAME}")
set(NUMBER_ERRORS "0")
set(NUMBER_WARNINGS "0")
if(EMPTY_BINARY_DIR)
message(STATUS "Removing binary directory '${CTEST_BINARY_DIRECTORY}'...")
if(EXISTS "${CTEST_BINARY_DIRECTORY}/CMakeCache.txt")
message(STATUS "CMakeCache.txt file exists ==> removing")
ctest_empty_binary_directory("${CTEST_BINARY_DIRECTORY}")
endif()
endif()
set(_CTEST_START_EXTRA_ARGS)
set(_CTEST_CONFIGURE_EXTRA_ARGS)
if(APPEND_RESULTS)
list(APPEND _CTEST_START_EXTRA_ARGS "APPEND")
list(APPEND _CTEST_CONFIGURE_EXTRA_ARGS "APPEND")
endif()
message(STATUS "Starting test...")
ctest_start("${MODEL_NAME}" ${_CTEST_START_EXTRA_ARGS})
# CTEST_CONFIGURATION_TYPE is needed on Windows (no leading underscore)
if(DEBUG)
set(_CMAKE_BUILD_TYPE "Debug")
set(_CTEST_BUILD_CONFIGURATION "Debug")
set(CTEST_CONFIGURATION_TYPE "Debug")
else()
set(_CMAKE_BUILD_TYPE "Release")
set(_CTEST_BUILD_CONFIGURATION "Release")
set(CTEST_CONFIGURATION_TYPE "Release")
endif()
set(_CONFIGURE_OPTIONS
"-DBUILD_VIEWER=${BUILD_VIEWER}"
"-DBUILD_TESTS=TRUE"
"-DTESTS_NODATA=${TESTS_NODATA}"
"-DTEST_COVERAGE=${RUN_COVERAGE}"
"-DSEPARATE_TEST_SUITES=${SEPARATE_TEST_SUITES}"
"-DCHECK_INCLUDES=${CHECK_INCLUDES}"
"-DCMAKE_BUILD_TYPE=${_CMAKE_BUILD_TYPE}"
"-DENABLE_SANITIZERS=${ENABLE_SANITIZERS}"
)
message(STATUS "Configuring...")
message(STATUS "options='${_CONFIGURE_OPTIONS}'")
message(STATUS "extra options='${CONFIGURE_EXTRA_OPTIONS}'")
ctest_configure(
OPTIONS
"${_CONFIGURE_OPTIONS};${CONFIGURE_EXTRA_OPTIONS}"
RETURN_VALUE
_CONFIGURE_RESULT
${_CTEST_CONFIGURE_EXTRA_ARGS}
)
message(STATUS "Building...")
ctest_build(
CONFIGURATION "${_CTEST_BUILD_CONFIGURATION}"
NUMBER_ERRORS _NB_BUILD_ERRORS
NUMBER_WARNINGS _NB_BUILD_WARNINGS
)
if(RUN_TESTS)
message(STATUS "Running tests...")
ctest_test(
RETURN_VALUE _TEST_RESULT
)
else()
message(STATUS "Skipping tests...")
endif()
if(RUN_COVERAGE)
message(STATUS "Collecting coverage...")
ctest_coverage(
RETURN_VALUE _COVERAGE_RESULT
)
else()
message(STATUS "Coverage skipped.")
endif()
if(RUN_MEMCHECK)
message(STATUS "Running memcheck...")
message(AUTHOR_WARNING "Memcheck not implemented (yet).")
else()
message(STATUS "Memcheck skipped.")
endif()
if(SUBMIT)
message(STATUS "Submitting...")
ctest_submit(
RETURN_VALUE _SUBMIT_RESULT
)
else()
message(STATUS "Submit skipped.")
endif()
if(_CONFIGURE_RESULT)
list(APPEND ERROR_MESSAGES "Configure error detected!")
endif()
if(_NB_BUILD_ERRORS)
list(APPEND ERROR_MESSAGES "Build failure detected!")
endif()
if(_TEST_RESULT)
list(APPEND WARNING_MESSAGES "Test failure detected!")
endif()