Tests: Port LinkFlags test to RunCMake

This commit is contained in:
Tyler Yankee
2026-01-20 12:45:21 -05:00
committed by Brad King
parent e41256b568
commit 3ea9d225f7
39 changed files with 115 additions and 104 deletions

View File

@@ -761,40 +761,6 @@ if(BUILD_TESTING)
)
endif()
add_test(LinkFlags-prepare
${CMAKE_CTEST_COMMAND} -C \${CTEST_CONFIGURATION_TYPE}
--build-and-test
"${CMake_SOURCE_DIR}/Tests/LinkFlags"
"${CMake_BINARY_DIR}/Tests/LinkFlags"
${build_generator_args}
--build-project LinkFlags
--build-target LinkFlags
--build-options
-DTEST_CONFIG=\${CTEST_CONFIGURATION_TYPE}
)
list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/LinkFlags")
macro(ADD_LINK_FLAGS_TEST name depends)
add_test(LinkFlags-${name}
${CMAKE_CMAKE_COMMAND} --build "${CMake_BINARY_DIR}/Tests/LinkFlags"
--target LinkFlags_${name} --config \${CTEST_CONFIGURATION_TYPE}
)
set_tests_properties(LinkFlags-${name} PROPERTIES
PASS_REGULAR_EXPRESSION "BADFLAG" DEPENDS LinkFlags-${depends})
endmacro()
ADD_LINK_FLAGS_TEST(dll prepare)
ADD_LINK_FLAGS_TEST(mod dll)
ADD_LINK_FLAGS_TEST(exe mod)
ADD_LINK_FLAGS_TEST(dll_config exe)
ADD_LINK_FLAGS_TEST(mod_config dll_config)
ADD_LINK_FLAGS_TEST(exe_config mod_config)
ADD_LINK_FLAGS_TEST(dll_flags exe_config)
ADD_LINK_FLAGS_TEST(mod_flags dll_flags)
ADD_LINK_FLAGS_TEST(exe_flags mod_flags)
ADD_LINK_FLAGS_TEST(dll_flags_config exe_flags)
ADD_LINK_FLAGS_TEST(mod_flags_config dll_flags_config)
ADD_LINK_FLAGS_TEST(exe_flags_config mod_flags_config)
# test for correct sub-project generation
# not implemented in Xcode or Ninja
if(NOT CMAKE_GENERATOR MATCHES "Xcode|Ninja|FASTBuild")

View File

@@ -1,36 +0,0 @@
cmake_minimum_required(VERSION 3.10)
project(LinkFlags C)
string(TOUPPER "${TEST_CONFIG}" TEST_CONFIG_UPPER)
set(obj "${CMAKE_C_OUTPUT_EXTENSION}")
if(BORLAND)
set(pre -)
endif()
add_library(LinkFlags_dll SHARED LinkFlagsLib.c)
set_property(TARGET LinkFlags_dll PROPERTY LINK_FLAGS ${pre}BADFLAG${obj})
add_library(LinkFlags_mod MODULE LinkFlagsLib.c)
set_property(TARGET LinkFlags_mod PROPERTY LINK_FLAGS ${pre}BADFLAG${obj})
add_executable(LinkFlags_exe LinkFlagsExe.c)
set_property(TARGET LinkFlags_exe PROPERTY LINK_FLAGS ${pre}BADFLAG${obj})
add_library(LinkFlags_dll_config SHARED LinkFlagsLib.c)
set_property(TARGET LinkFlags_dll_config PROPERTY LINK_FLAGS_${TEST_CONFIG_UPPER} ${pre}BADFLAG_${TEST_CONFIG}${obj})
add_library(LinkFlags_mod_config MODULE LinkFlagsLib.c)
set_property(TARGET LinkFlags_mod_config PROPERTY LINK_FLAGS_${TEST_CONFIG_UPPER} ${pre}BADFLAG_${TEST_CONFIG}${obj})
add_executable(LinkFlags_exe_config LinkFlagsExe.c)
set_property(TARGET LinkFlags_exe_config PROPERTY LINK_FLAGS_${TEST_CONFIG_UPPER} ${pre}BADFLAG_${TEST_CONFIG}${obj})
add_executable(LinkFlags LinkFlags.c)
if("x${CMAKE_C_COMPILER_ID}" STREQUAL "xMSVC")
set_property(TARGET LinkFlags PROPERTY
LINK_FLAGS "/NODEFAULTLIB:\"libcdg.lib\" /NODEFAULTLIB:\"libcmtg.lib\" /NODEFAULTLIB:\"foomsvcrt.lib\" /NODEFAULTLIB:\"libbar.lib\" /NODEFAULTLIB:\"libfooba.lib\""
)
endif()
add_subdirectory(LinkerFlags)
add_subdirectory(LinkerFlagsConfig)

View File

@@ -1,9 +0,0 @@
int main(void)
{
return 0;
}
/* Intel compiler does not reject bad flags or objects! */
#if defined(__INTEL_COMPILER)
# error BADFLAG
#endif

View File

@@ -1,9 +0,0 @@
int flags_lib(void)
{
return 0;
}
/* Intel compiler does not reject bad flags or objects! */
#if defined(__INTEL_COMPILER)
# error BADFLAG
#endif

View File

@@ -1,8 +0,0 @@
set(CMAKE_SHARED_LINKER_FLAGS ${pre}BADFLAG${obj})
add_library(LinkFlags_dll_flags SHARED ../LinkFlagsLib.c)
set(CMAKE_MODULE_LINKER_FLAGS ${pre}BADFLAG${obj})
add_library(LinkFlags_mod_flags MODULE ../LinkFlagsLib.c)
set(CMAKE_EXE_LINKER_FLAGS ${pre}BADFLAG${obj})
add_executable(LinkFlags_exe_flags ../LinkFlagsExe.c)

View File

@@ -1,8 +0,0 @@
set(CMAKE_SHARED_LINKER_FLAGS_${TEST_CONFIG_UPPER} ${pre}BADFLAG${obj})
add_library(LinkFlags_dll_flags_config SHARED ../LinkFlagsLib.c)
set(CMAKE_MODULE_LINKER_FLAGS_${TEST_CONFIG_UPPER} ${pre}BADFLAG${obj})
add_library(LinkFlags_mod_flags_config MODULE ../LinkFlagsLib.c)
set(CMAKE_EXE_LINKER_FLAGS_${TEST_CONFIG_UPPER} ${pre}BADFLAG${obj})
add_executable(LinkFlags_exe_flags_config ../LinkFlagsExe.c)

View File

@@ -980,6 +980,7 @@ endif()
add_RunCMake_test(LinkLibrariesProcessing)
add_RunCMake_test(LinkLibrariesStrategy)
add_RunCMake_test(LinkFlags)
add_RunCMake_test(File_Archive -DPython_EXECUTABLE=${Python_EXECUTABLE})
add_RunCMake_test(File_Configure)
add_RunCMake_test(File_Generate)

View File

@@ -0,0 +1 @@
[^0]

View File

@@ -0,0 +1 @@
.*BADFLAG_EXECUTABLE.*

View File

@@ -0,0 +1 @@
[^0]

View File

@@ -0,0 +1 @@
.*BADFLAG_MODULE.*

View File

@@ -0,0 +1 @@
[^0]

View File

@@ -0,0 +1 @@
.*BADFLAG_SHARED.*

View File

@@ -0,0 +1,8 @@
set(CMAKE_SHARED_LINKER_FLAGS ${pre}BADFLAG_SHARED${obj})
add_library(LinkFlags_shared SHARED LinkFlagsLib.c)
set(CMAKE_MODULE_LINKER_FLAGS ${pre}BADFLAG_MODULE${obj})
add_library(LinkFlags_mod MODULE LinkFlagsLib.c)
set(CMAKE_EXE_LINKER_FLAGS ${pre}BADFLAG_EXECUTABLE${obj})
add_executable(LinkFlags_exe LinkFlagsExe.c)

View File

@@ -0,0 +1 @@
[^0]

View File

@@ -0,0 +1 @@
.*BADFLAG_EXECUTABLE_RELEASE.*

View File

@@ -0,0 +1 @@
[^0]

View File

@@ -0,0 +1 @@
.*BADFLAG_MODULE_RELEASE.*

View File

@@ -0,0 +1 @@
[^0]

View File

@@ -0,0 +1 @@
.*BADFLAG_SHARED_RELEASE.*

View File

@@ -0,0 +1,8 @@
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE ${pre}BADFLAG_SHARED_RELEASE${obj})
add_library(LinkFlags_shared SHARED LinkFlagsLib.c)
set(CMAKE_MODULE_LINKER_FLAGS_RELEASE ${pre}BADFLAG_MODULE_RELEASE${obj})
add_library(LinkFlags_mod MODULE LinkFlagsLib.c)
set(CMAKE_EXE_LINKER_FLAGS_RELEASE ${pre}BADFLAG_EXECUTABLE_RELEASE${obj})
add_executable(LinkFlags_exe LinkFlagsExe.c)

View File

@@ -0,0 +1,9 @@
cmake_minimum_required(VERSION 3.10)
project(${RunCMake_TEST} C)
set(obj "${CMAKE_C_OUTPUT_EXTENSION}")
if(BORLAND)
set(pre -)
endif()
include(${RunCMake_TEST}.cmake)

View File

@@ -0,0 +1 @@
[^0]

View File

@@ -0,0 +1 @@
.*BADFLAG_EXECUTABLE.*

View File

@@ -0,0 +1 @@
[^0]

View File

@@ -0,0 +1 @@
.*BADFLAG_MODULE.*

View File

@@ -0,0 +1 @@
[^0]

View File

@@ -0,0 +1 @@
.*BADFLAG_SHARED.*

View File

@@ -0,0 +1,8 @@
add_library(LinkFlags_shared SHARED LinkFlagsLib.c)
set_property(TARGET LinkFlags_shared PROPERTY LINK_FLAGS ${pre}BADFLAG_SHARED${obj})
add_library(LinkFlags_mod MODULE LinkFlagsLib.c)
set_property(TARGET LinkFlags_mod PROPERTY LINK_FLAGS ${pre}BADFLAG_MODULE${obj})
add_executable(LinkFlags_exe LinkFlagsExe.c)
set_property(TARGET LinkFlags_exe PROPERTY LINK_FLAGS ${pre}BADFLAG_EXECUTABLE${obj})

View File

@@ -0,0 +1 @@
[^0]

View File

@@ -0,0 +1 @@
.*BADFLAG_EXECUTABLE_RELEASE.*

View File

@@ -0,0 +1 @@
[^0]

View File

@@ -0,0 +1 @@
.*BADFLAG_MODULE_RELEASE.*

View File

@@ -0,0 +1 @@
[^0]

View File

@@ -0,0 +1 @@
.*BADFLAG_SHARED_RELEASE.*

View File

@@ -0,0 +1,8 @@
add_library(LinkFlags_shared SHARED LinkFlagsLib.c)
set_property(TARGET LinkFlags_shared PROPERTY LINK_FLAGS_RELEASE ${pre}BADFLAG_SHARED_RELEASE${obj})
add_library(LinkFlags_mod MODULE LinkFlagsLib.c)
set_property(TARGET LinkFlags_mod PROPERTY LINK_FLAGS_RELEASE ${pre}BADFLAG_MODULE_RELEASE${obj})
add_executable(LinkFlags_exe LinkFlagsExe.c)
set_property(TARGET LinkFlags_exe PROPERTY LINK_FLAGS_RELEASE ${pre}BADFLAG_EXECUTABLE_RELEASE${obj})

View File

@@ -0,0 +1,4 @@
int flags_lib(void)
{
return 0;
}

View File

@@ -0,0 +1,45 @@
include(RunCMake)
macro(run_cmake_target test subtest)
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${test}-build)
set(RunCMake_TEST_NO_CLEAN 1)
run_cmake_command(${test}-${subtest}
${CMAKE_COMMAND} --build .
--target LinkFlags_${subtest}
${ARGN}
)
unset(RunCMake_TEST_BINARY_DIR)
unset(RunCMake_TEST_NO_CLEAN)
endmacro()
if (NOT CMAKE_C_COMPILER_ID STREQUAL "Intel")
# Intel compiler does not reject bad flags or objects!
set(RunCMake_TEST_OUTPUT_MERGE TRUE)
if (NOT RunCMake_GENERATOR_IS_MULTI_CONFIG)
set(RunCMake_TEST_OPTIONS -DCMAKE_BUILD_TYPE=Release)
endif()
run_cmake(LINK_FLAGS)
run_cmake_target(LINK_FLAGS shared)
run_cmake_target(LINK_FLAGS mod)
run_cmake_target(LINK_FLAGS exe)
run_cmake(LINK_FLAGS_CONFIG)
run_cmake_target(LINK_FLAGS_CONFIG shared --config Release)
run_cmake_target(LINK_FLAGS_CONFIG mod --config Release)
run_cmake_target(LINK_FLAGS_CONFIG exe --config Release)
run_cmake(CMAKE_LINKER_FLAGS)
run_cmake_target(CMAKE_LINKER_FLAGS shared)
run_cmake_target(CMAKE_LINKER_FLAGS mod)
run_cmake_target(CMAKE_LINKER_FLAGS exe)
run_cmake(CMAKE_LINKER_FLAGS_CONFIG)
run_cmake_target(CMAKE_LINKER_FLAGS_CONFIG shared --config Release)
run_cmake_target(CMAKE_LINKER_FLAGS_CONFIG mod --config Release)
run_cmake_target(CMAKE_LINKER_FLAGS_CONFIG exe --config Release)
unset(RunCMake_TEST_OPTIONS)
unset(RunCMake_TEST_OUTPUT_MERGE)
endif()