Tests: Optionally configure tests exclusively, with an external CMake
Add an undocumented CMake_TEST_EXTERNAL_CMAKE option to name an external CMake 'bin' directory. Skip all main CMake binary builds and instead configure the Tests directory to run using the external CMake provided. This will provide a means to exercise the CMake test suite generating for target platforms and compilers with which the CMake source does not build. That will allow us to raise the level of C++ features required of a compiler to build our source while retaining tests for generating projects with older compiler tools.
This commit is contained in:
parent
9f5bd180c8
commit
9608ef6f40
|
@ -21,7 +21,9 @@ if(CMAKE_BOOTSTRAP)
|
||||||
unset(CMAKE_BOOTSTRAP CACHE)
|
unset(CMAKE_BOOTSTRAP CACHE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(NOT CMake_TEST_EXTERNAL_CMAKE)
|
||||||
set(CMake_BIN_DIR ${CMake_BINARY_DIR}/bin)
|
set(CMake_BIN_DIR ${CMake_BINARY_DIR}/bin)
|
||||||
|
endif()
|
||||||
|
|
||||||
if("${CMake_SOURCE_DIR}" STREQUAL "${CMAKE_SOURCE_DIR}")
|
if("${CMake_SOURCE_DIR}" STREQUAL "${CMAKE_SOURCE_DIR}")
|
||||||
# Disallow architecture-specific try_run. It may not run on the host.
|
# Disallow architecture-specific try_run. It may not run on the host.
|
||||||
|
@ -102,10 +104,12 @@ endmacro()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(NOT CMake_TEST_EXTERNAL_CMAKE)
|
||||||
set(CMAKE_BUILD_ON_VISUAL_STUDIO 0)
|
set(CMAKE_BUILD_ON_VISUAL_STUDIO 0)
|
||||||
if(WIN32 AND NOT UNIX AND NOT BORLAND AND NOT MINGW )
|
if(WIN32 AND NOT UNIX AND NOT BORLAND AND NOT MINGW )
|
||||||
set(CMAKE_BUILD_ON_VISUAL_STUDIO 1)
|
set(CMAKE_BUILD_ON_VISUAL_STUDIO 1)
|
||||||
endif()
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
#-----------------------------------------------------------------------
|
#-----------------------------------------------------------------------
|
||||||
|
@ -126,10 +130,20 @@ macro(CMAKE_SETUP_TESTING)
|
||||||
# the ctest from this cmake is used for testing
|
# the ctest from this cmake is used for testing
|
||||||
# and not the ctest from the cmake building and testing
|
# and not the ctest from the cmake building and testing
|
||||||
# cmake.
|
# cmake.
|
||||||
|
if(CMake_TEST_EXTERNAL_CMAKE)
|
||||||
|
set(CMAKE_CTEST_COMMAND "${CMake_TEST_EXTERNAL_CMAKE}/ctest")
|
||||||
|
set(CMAKE_CMAKE_COMMAND "${CMake_TEST_EXTERNAL_CMAKE}/cmake")
|
||||||
|
set(CMAKE_CPACK_COMMAND "${CMake_TEST_EXTERNAL_CMAKE}/cpack")
|
||||||
|
foreach(exe cmake ctest cpack)
|
||||||
|
add_executable(${exe} IMPORTED)
|
||||||
|
set_property(TARGET ${exe} PROPERTY IMPORTED_LOCATION ${CMake_TEST_EXTERNAL_CMAKE}/${exe})
|
||||||
|
endforeach()
|
||||||
|
else()
|
||||||
set(CMAKE_CTEST_COMMAND "${CMake_BIN_DIR}/ctest")
|
set(CMAKE_CTEST_COMMAND "${CMake_BIN_DIR}/ctest")
|
||||||
set(CMAKE_CMAKE_COMMAND "${CMake_BIN_DIR}/cmake")
|
set(CMAKE_CMAKE_COMMAND "${CMake_BIN_DIR}/cmake")
|
||||||
set(CMAKE_CPACK_COMMAND "${CMake_BIN_DIR}/cpack")
|
set(CMAKE_CPACK_COMMAND "${CMake_BIN_DIR}/cpack")
|
||||||
endif()
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
# configure some files for testing
|
# configure some files for testing
|
||||||
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/Templates/CTestScript.cmake.in"
|
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/Templates/CTestScript.cmake.in"
|
||||||
|
@ -362,6 +376,7 @@ macro (CMAKE_BUILD_UTILITIES)
|
||||||
endmacro ()
|
endmacro ()
|
||||||
|
|
||||||
#-----------------------------------------------------------------------
|
#-----------------------------------------------------------------------
|
||||||
|
if(NOT CMake_TEST_EXTERNAL_CMAKE)
|
||||||
if(CMAKE_CXX_PLATFORM_ID MATCHES "OpenBSD")
|
if(CMAKE_CXX_PLATFORM_ID MATCHES "OpenBSD")
|
||||||
execute_process(COMMAND ${CMAKE_CXX_COMPILER}
|
execute_process(COMMAND ${CMAKE_CXX_COMPILER}
|
||||||
${CMAKE_CXX_COMPILER_ARG1} -dumpversion
|
${CMAKE_CXX_COMPILER_ARG1} -dumpversion
|
||||||
|
@ -376,6 +391,7 @@ if(CMAKE_CXX_PLATFORM_ID MATCHES "OpenBSD")
|
||||||
"${CMAKE_CXX_COMPILER} version is: ${_GXX_VERSION}")
|
"${CMAKE_CXX_COMPILER} version is: ${_GXX_VERSION}")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
#-----------------------------------------------------------------------
|
#-----------------------------------------------------------------------
|
||||||
# The main section of the CMakeLists file
|
# The main section of the CMakeLists file
|
||||||
|
@ -392,6 +408,7 @@ include (${CMAKE_ROOT}/Modules/Dart.cmake)
|
||||||
set_directory_properties(PROPERTIES
|
set_directory_properties(PROPERTIES
|
||||||
TEST_INCLUDE_FILE "${CMake_BINARY_DIR}/Tests/EnforceConfig.cmake")
|
TEST_INCLUDE_FILE "${CMake_BINARY_DIR}/Tests/EnforceConfig.cmake")
|
||||||
|
|
||||||
|
if(NOT CMake_TEST_EXTERNAL_CMAKE)
|
||||||
# where to write the resulting executables and libraries
|
# where to write the resulting executables and libraries
|
||||||
set(BUILD_SHARED_LIBS OFF)
|
set(BUILD_SHARED_LIBS OFF)
|
||||||
set(EXECUTABLE_OUTPUT_PATH "" CACHE INTERNAL "No configurable exe dir.")
|
set(EXECUTABLE_OUTPUT_PATH "" CACHE INTERNAL "No configurable exe dir.")
|
||||||
|
@ -416,6 +433,7 @@ include(CompileFlags.cmake)
|
||||||
include(CheckSymbolExists)
|
include(CheckSymbolExists)
|
||||||
CHECK_SYMBOL_EXISTS(unsetenv "stdlib.h" HAVE_UNSETENV)
|
CHECK_SYMBOL_EXISTS(unsetenv "stdlib.h" HAVE_UNSETENV)
|
||||||
CHECK_SYMBOL_EXISTS(environ "stdlib.h" HAVE_ENVIRON_NOT_REQUIRE_PROTOTYPE)
|
CHECK_SYMBOL_EXISTS(environ "stdlib.h" HAVE_ENVIRON_NOT_REQUIRE_PROTOTYPE)
|
||||||
|
endif()
|
||||||
|
|
||||||
# CMAKE_TESTS_CDASH_SERVER: CDash server used by CMake/Tests.
|
# CMAKE_TESTS_CDASH_SERVER: CDash server used by CMake/Tests.
|
||||||
#
|
#
|
||||||
|
@ -434,6 +452,7 @@ if("x${CMAKE_TESTS_CDASH_SERVER}" STREQUAL "x")
|
||||||
set(CMAKE_TESTS_CDASH_SERVER "http://www.cdash.org/CDash")
|
set(CMAKE_TESTS_CDASH_SERVER "http://www.cdash.org/CDash")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(NOT CMake_TEST_EXTERNAL_CMAKE)
|
||||||
# build the utilities (a macro defined in this file)
|
# build the utilities (a macro defined in this file)
|
||||||
CMAKE_BUILD_UTILITIES()
|
CMAKE_BUILD_UTILITIES()
|
||||||
|
|
||||||
|
@ -498,6 +517,8 @@ add_custom_target(uninstall
|
||||||
|
|
||||||
include (CMakeCPack.cmake)
|
include (CMakeCPack.cmake)
|
||||||
|
|
||||||
|
endif()
|
||||||
|
|
||||||
# setup some Testing support (a macro defined in this file)
|
# setup some Testing support (a macro defined in this file)
|
||||||
CMAKE_SETUP_TESTING()
|
CMAKE_SETUP_TESTING()
|
||||||
configure_file(
|
configure_file(
|
||||||
|
@ -505,6 +526,7 @@ configure_file(
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/DartLocal.conf"
|
"${CMAKE_CURRENT_BINARY_DIR}/DartLocal.conf"
|
||||||
COPYONLY)
|
COPYONLY)
|
||||||
|
|
||||||
|
if(NOT CMake_TEST_EXTERNAL_CMAKE)
|
||||||
if(NOT CMake_VERSION_IS_RELEASE)
|
if(NOT CMake_VERSION_IS_RELEASE)
|
||||||
if("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" AND
|
if("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" AND
|
||||||
NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS 4.2)
|
NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS 4.2)
|
||||||
|
@ -532,8 +554,11 @@ endif()
|
||||||
# build the remaining subdirectories
|
# build the remaining subdirectories
|
||||||
add_subdirectory(Source)
|
add_subdirectory(Source)
|
||||||
add_subdirectory(Utilities)
|
add_subdirectory(Utilities)
|
||||||
|
endif()
|
||||||
|
|
||||||
add_subdirectory(Tests)
|
add_subdirectory(Tests)
|
||||||
|
|
||||||
|
if(NOT CMake_TEST_EXTERNAL_CMAKE)
|
||||||
if(BUILD_TESTING)
|
if(BUILD_TESTING)
|
||||||
CMAKE_SET_TARGET_FOLDER(CMakeLibTests "Tests")
|
CMAKE_SET_TARGET_FOLDER(CMakeLibTests "Tests")
|
||||||
endif()
|
endif()
|
||||||
|
@ -541,11 +566,13 @@ CMAKE_SET_TARGET_FOLDER(cmw9xcom "Utilities/Win9xCompat")
|
||||||
if(TARGET documentation)
|
if(TARGET documentation)
|
||||||
CMAKE_SET_TARGET_FOLDER(documentation "Documentation")
|
CMAKE_SET_TARGET_FOLDER(documentation "Documentation")
|
||||||
endif()
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
# add a test
|
# add a test
|
||||||
add_test(SystemInformationNew "${CMAKE_CMAKE_COMMAND}"
|
add_test(SystemInformationNew "${CMAKE_CMAKE_COMMAND}"
|
||||||
--system-information -G "${CMAKE_GENERATOR}" )
|
--system-information -G "${CMAKE_GENERATOR}" )
|
||||||
|
|
||||||
|
if(NOT CMake_TEST_EXTERNAL_CMAKE)
|
||||||
# Install license file as it requires.
|
# Install license file as it requires.
|
||||||
install(FILES Copyright.txt DESTINATION ${CMAKE_DOC_DIR})
|
install(FILES Copyright.txt DESTINATION ${CMAKE_DOC_DIR})
|
||||||
|
|
||||||
|
@ -564,3 +591,4 @@ install(
|
||||||
|
|
||||||
# Install auxiliary files integrating with other tools.
|
# Install auxiliary files integrating with other tools.
|
||||||
add_subdirectory(Auxiliary)
|
add_subdirectory(Auxiliary)
|
||||||
|
endif()
|
||||||
|
|
|
@ -57,9 +57,11 @@ if(BUILD_TESTING)
|
||||||
set(CMake_TEST_EXPLICIT_MAKE_PROGRAM "${CMAKE_MAKE_PROGRAM}")
|
set(CMake_TEST_EXPLICIT_MAKE_PROGRAM "${CMAKE_MAKE_PROGRAM}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(NOT CMake_TEST_EXTERNAL_CMAKE)
|
||||||
if("${CMAKE_GENERATOR}" MATCHES "Unix Makefiles" OR ("${CMAKE_GENERATOR}" MATCHES Ninja AND NOT WIN32))
|
if("${CMAKE_GENERATOR}" MATCHES "Unix Makefiles" OR ("${CMAKE_GENERATOR}" MATCHES Ninja AND NOT WIN32))
|
||||||
set(TEST_CompileCommandOutput 1)
|
set(TEST_CompileCommandOutput 1)
|
||||||
endif()
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
set(MAKE_IS_GNU )
|
set(MAKE_IS_GNU )
|
||||||
if(CMAKE_MAKE_PROGRAM MATCHES make)
|
if(CMAKE_MAKE_PROGRAM MATCHES make)
|
||||||
|
@ -95,13 +97,17 @@ if(BUILD_TESTING)
|
||||||
list(APPEND build_options -DCMAKE_MAKE_PROGRAM:FILEPATH=${CMake_TEST_EXPLICIT_MAKE_PROGRAM})
|
list(APPEND build_options -DCMAKE_MAKE_PROGRAM:FILEPATH=${CMake_TEST_EXPLICIT_MAKE_PROGRAM})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(NOT CMake_TEST_EXTERNAL_CMAKE)
|
||||||
add_subdirectory(CMakeLib)
|
add_subdirectory(CMakeLib)
|
||||||
|
endif()
|
||||||
add_subdirectory(CMakeOnly)
|
add_subdirectory(CMakeOnly)
|
||||||
add_subdirectory(RunCMake)
|
add_subdirectory(RunCMake)
|
||||||
|
|
||||||
add_subdirectory(FindPackageModeMakefileTest)
|
add_subdirectory(FindPackageModeMakefileTest)
|
||||||
|
|
||||||
|
if(NOT CMake_TEST_EXTERNAL_CMAKE)
|
||||||
add_subdirectory(CTestTestMemcheck)
|
add_subdirectory(CTestTestMemcheck)
|
||||||
|
endif()
|
||||||
|
|
||||||
# Collect a list of all test build directories.
|
# Collect a list of all test build directories.
|
||||||
set(TEST_BUILD_DIRS)
|
set(TEST_BUILD_DIRS)
|
||||||
|
@ -248,7 +254,9 @@ if(BUILD_TESTING)
|
||||||
ADD_TEST_MACRO(SetLang SetLang)
|
ADD_TEST_MACRO(SetLang SetLang)
|
||||||
ADD_TEST_MACRO(EmptyProperty EmptyProperty)
|
ADD_TEST_MACRO(EmptyProperty EmptyProperty)
|
||||||
ADD_TEST_MACRO(ExternalOBJ ExternalOBJ)
|
ADD_TEST_MACRO(ExternalOBJ ExternalOBJ)
|
||||||
|
if(NOT CMake_TEST_EXTERNAL_CMAKE)
|
||||||
ADD_TEST_MACRO(LoadCommand LoadedCommand)
|
ADD_TEST_MACRO(LoadCommand LoadedCommand)
|
||||||
|
endif()
|
||||||
ADD_TEST_MACRO(LinkDirectory bin/LinkDirectory)
|
ADD_TEST_MACRO(LinkDirectory bin/LinkDirectory)
|
||||||
ADD_TEST_MACRO(LinkLanguage LinkLanguage)
|
ADD_TEST_MACRO(LinkLanguage LinkLanguage)
|
||||||
ADD_TEST_MACRO(LinkLine LinkLine)
|
ADD_TEST_MACRO(LinkLine LinkLine)
|
||||||
|
@ -1018,6 +1026,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
|
||||||
"${CMake_BINARY_DIR}/Tests/CMakeTestMultipleConfigures")
|
"${CMake_BINARY_DIR}/Tests/CMakeTestMultipleConfigures")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(NOT CMake_TEST_EXTERNAL_CMAKE)
|
||||||
add_test(LoadedCommandOneConfig ${CMAKE_CTEST_COMMAND}
|
add_test(LoadedCommandOneConfig ${CMAKE_CTEST_COMMAND}
|
||||||
--build-and-test
|
--build-and-test
|
||||||
"${CMake_SOURCE_DIR}/Tests/LoadCommandOneConfig"
|
"${CMake_SOURCE_DIR}/Tests/LoadCommandOneConfig"
|
||||||
|
@ -1028,6 +1037,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
|
||||||
--test-command LoadedCommand
|
--test-command LoadedCommand
|
||||||
)
|
)
|
||||||
list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/LoadCommandOneConfig")
|
list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/LoadCommandOneConfig")
|
||||||
|
endif()
|
||||||
|
|
||||||
add_test(complex ${CMAKE_CTEST_COMMAND}
|
add_test(complex ${CMAKE_CTEST_COMMAND}
|
||||||
--build-and-test
|
--build-and-test
|
||||||
|
@ -2771,5 +2781,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
|
||||||
WORKING_DIRECTORY ${CMake_BINARY_DIR}/Utilities/KWStyle)
|
WORKING_DIRECTORY ${CMake_BINARY_DIR}/Utilities/KWStyle)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(NOT CMake_TEST_EXTERNAL_CMAKE)
|
||||||
add_subdirectory(CMakeTests)
|
add_subdirectory(CMakeTests)
|
||||||
endif()
|
endif()
|
||||||
|
endif()
|
||||||
|
|
Loading…
Reference in New Issue