mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-14 02:08:27 +08:00
160 lines
5.2 KiB
CMake
160 lines
5.2 KiB
CMake
include(RunCMake)
|
|
set(RunCMake_IGNORE_POLICY_VERSION_DEPRECATION ON)
|
|
|
|
run_cmake(BadIF)
|
|
run_cmake(BadCONFIG)
|
|
run_cmake(BadOR)
|
|
run_cmake(BadAND)
|
|
run_cmake(BadNOT)
|
|
run_cmake(BadStrEqual)
|
|
run_cmake(BadZero)
|
|
run_cmake(BadTargetName)
|
|
run_cmake(BadTargetTypeInterface)
|
|
run_cmake(BadTargetTypeObject)
|
|
run_cmake(BadInstallPrefix)
|
|
run_cmake(BadSHELL_PATH)
|
|
run_cmake(NonValidTarget-C_COMPILER_ID)
|
|
run_cmake(NonValidTarget-CXX_COMPILER_ID)
|
|
run_cmake(NonValidTarget-Fortran_COMPILER_ID)
|
|
run_cmake(NonValidTarget-C_COMPILER_VERSION)
|
|
run_cmake(NonValidTarget-CXX_COMPILER_VERSION)
|
|
run_cmake(NonValidTarget-Fortran_COMPILER_VERSION)
|
|
run_cmake(NonValidTarget-C_COMPILER_FRONTEND_VARIANT)
|
|
run_cmake(NonValidTarget-CXX_COMPILER_FRONTEND_VARIANT)
|
|
run_cmake(NonValidTarget-Fortran_COMPILER_FRONTEND_VARIANT)
|
|
run_cmake(NonValidTarget-TARGET_PROPERTY)
|
|
run_cmake(NonValidTarget-TARGET_POLICY)
|
|
run_cmake(COMPILE_ONLY-not-compiling)
|
|
run_cmake(LINK_ONLY-not-linking)
|
|
run_cmake(TARGET_EXISTS-no-arg)
|
|
run_cmake(TARGET_EXISTS-empty-arg)
|
|
run_cmake(TARGET_EXISTS)
|
|
run_cmake(TARGET_EXISTS-not-a-target)
|
|
run_cmake(TARGET_NAME_IF_EXISTS-no-arg)
|
|
run_cmake(TARGET_NAME_IF_EXISTS-empty-arg)
|
|
run_cmake(TARGET_NAME_IF_EXISTS)
|
|
run_cmake(TARGET_NAME_IF_EXISTS-not-a-target)
|
|
run_cmake(TARGET_NAME_IF_EXISTS-alias-target)
|
|
run_cmake(TARGET_NAME_IF_EXISTS-imported-target)
|
|
run_cmake(TARGET_NAME_IF_EXISTS-imported-global-target)
|
|
run_cmake(REMOVE_DUPLICATES-empty)
|
|
run_cmake(REMOVE_DUPLICATES-empty-element)
|
|
run_cmake(REMOVE_DUPLICATES-1)
|
|
run_cmake(REMOVE_DUPLICATES-2)
|
|
run_cmake(REMOVE_DUPLICATES-3)
|
|
run_cmake(REMOVE_DUPLICATES-4)
|
|
run_cmake(FILTER-empty)
|
|
run_cmake(FILTER-InvalidOperator)
|
|
run_cmake(FILTER-Exclude)
|
|
run_cmake(FILTER-Include)
|
|
|
|
function(run_cmake_build test)
|
|
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${test}-build)
|
|
if (RunCMake_GENERATOR_IS_MULTI_CONFIG)
|
|
list(APPEND RunCMake_TEST_OPTIONS -DCMAKE_CONFIGURATION_TYPES=Release)
|
|
else()
|
|
list(APPEND RunCMake_TEST_OPTIONS -DCMAKE_BUILD_TYPE=Release)
|
|
endif()
|
|
|
|
block()
|
|
unset(RunCMake-check-file)
|
|
run_cmake(${test})
|
|
endblock()
|
|
|
|
set(RunCMake_TEST_NO_CLEAN TRUE)
|
|
run_cmake_command(${test}-build ${CMAKE_COMMAND} --build . --config Release)
|
|
endfunction()
|
|
|
|
function(run_linker_genex test lang type)
|
|
set(options_args CHECK_RESULT EXECUTE)
|
|
cmake_parse_arguments(PARSE_ARGV 3 RLG "${options_args}" "" "")
|
|
|
|
set(RunCMake_TEST_VARIANT_DESCRIPTION ".${lang}.${type}")
|
|
set(test_name ${test}${RunCMake_TEST_VARIANT_DESCRIPTION})
|
|
set(RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/${test_name}-build")
|
|
if(NOT RunCMake_GENERATOR_IS_MULTI_CONFIG)
|
|
list(APPEND options -DCMAKE_BUILD_TYPE=Release)
|
|
endif()
|
|
if(RLG_CHECK_RESULT)
|
|
set(RunCMake_TEST_EXPECT_RESULT 1)
|
|
file(READ "${RunCMake_SOURCE_DIR}/${test_name}-stderr.txt" RunCMake_TEST_EXPECT_stderr)
|
|
endif()
|
|
run_cmake_with_options(${test} -DLANG=${lang} -DTYPE=${type})
|
|
set(RunCMake_TEST_NO_CLEAN 1)
|
|
unset(RunCMake_TEST_VARIANT_DESCRIPTION)
|
|
if(RLG_EXECUTE)
|
|
run_cmake_command(${test_name}-build "${CMAKE_COMMAND}" --build . --config Release)
|
|
run_cmake_command(${test_name}-run "${CMAKE_CTEST_COMMAND}" -C Release -V)
|
|
endif()
|
|
endfunction()
|
|
function(exec_linker_genex test lang type)
|
|
run_linker_genex(${ARGV} EXECUTE)
|
|
endfunction()
|
|
|
|
set(languages C CXX)
|
|
foreach(lang IN ITEMS OBJC Fortran CUDA HIP)
|
|
if(CMake_TEST_${lang})
|
|
list(APPEND languages ${lang})
|
|
if(lang STREQUAL OBJC)
|
|
list(APPEND languages OBJCXX)
|
|
endif()
|
|
endif()
|
|
endforeach()
|
|
|
|
foreach(lang IN LISTS languages)
|
|
foreach(type IN ITEMS ID FRONTEND_VARIANT)
|
|
run_linker_genex(NonValidTarget-COMPILER_LINKER ${lang} ${type} CHECK_RESULT)
|
|
exec_linker_genex(COMPILER_LINKER ${lang} ${type})
|
|
endforeach()
|
|
endforeach()
|
|
|
|
if(RunCMake_GENERATOR_IS_MULTI_CONFIG)
|
|
set(RunCMake_TEST_OPTIONS [==[-DCMAKE_CONFIGURATION_TYPES=CustomConfig]==])
|
|
else()
|
|
set(RunCMake_TEST_OPTIONS [==[-DCMAKE_BUILD_TYPE=CustomConfig]==])
|
|
endif()
|
|
run_cmake(CONFIG-multiple-entries)
|
|
if(RunCMake_GENERATOR_IS_MULTI_CONFIG)
|
|
set(RunCMake_TEST_OPTIONS [==[-DCMAKE_CONFIGURATION_TYPES=]==])
|
|
else()
|
|
set(RunCMake_TEST_OPTIONS [==[-DCMAKE_BUILD_TYPE=]==])
|
|
endif()
|
|
run_cmake(CONFIG-empty-entries)
|
|
unset(RunCMake_TEST_OPTIONS)
|
|
|
|
run_cmake(CMP0199-WARN)
|
|
run_cmake_build(CMP0199-OLD)
|
|
run_cmake_build(CMP0199-NEW)
|
|
|
|
run_cmake(CMP0200-WARN)
|
|
run_cmake_build(CMP0200-OLD)
|
|
run_cmake_build(CMP0200-NEW)
|
|
|
|
run_cmake_build(CMP0199-NEW+CMP0200-NEW)
|
|
|
|
set(RunCMake_TEST_OPTIONS -DCMAKE_POLICY_DEFAULT_CMP0085:STRING=OLD)
|
|
run_cmake(CMP0085-OLD)
|
|
unset(RunCMake_TEST_OPTIONS)
|
|
|
|
run_cmake(CMP0085-WARN)
|
|
|
|
set(RunCMake_TEST_OPTIONS -DCMAKE_POLICY_DEFAULT_CMP0085:STRING=NEW)
|
|
run_cmake(CMP0085-NEW)
|
|
unset(RunCMake_TEST_OPTIONS)
|
|
|
|
if(RunCMake_GENERATOR STREQUAL "Xcode" AND "$ENV{CMAKE_OSX_ARCHITECTURES}" MATCHES "[;$]")
|
|
run_cmake(TARGET_INTERMEDIATE_DIR-Xcode)
|
|
else()
|
|
block()
|
|
set(RunCMake-check-file TARGET_INTERMEDIATE_DIR-build-check.cmake)
|
|
foreach(strategy IN ITEMS SHORT FULL)
|
|
set(CMAKE_INTERMEDIATE_DIR_STRATEGY ${strategy})
|
|
set(RunCMake_TEST_OPTIONS -DCMAKE_INTERMEDIATE_DIR_STRATEGY=${strategy})
|
|
run_cmake_build(TARGET_INTERMEDIATE_DIR-${strategy})
|
|
endforeach()
|
|
endblock()
|
|
endif()
|
|
run_cmake(TARGET_INTERMEDIATE_DIR-bad-arg)
|
|
run_cmake(TARGET_INTERMEDIATE_DIR-bad-target)
|
|
run_cmake(TARGET_INTERMEDIATE_DIR-not-a-target)
|