diff options
Diffstat (limited to 'Tests/RunCMake')
312 files changed, 2982 insertions, 675 deletions
diff --git a/Tests/RunCMake/Autogen/RunCMakeTest.cmake b/Tests/RunCMake/Autogen/RunCMakeTest.cmake deleted file mode 100644 index 0036551..0000000 --- a/Tests/RunCMake/Autogen/RunCMakeTest.cmake +++ /dev/null @@ -1,487 +0,0 @@ -include(RunCMake) - -run_cmake(NoQt) -if (DEFINED with_qt_version) - set(RunCMake_TEST_OPTIONS - -Dwith_qt_version=${with_qt_version} - "-DQt${with_qt_version}_DIR:PATH=${Qt${with_qt_version}_DIR}" - "-DCMAKE_PREFIX_PATH:STRING=${CMAKE_PREFIX_PATH}" - ) - - run_cmake(QtInFunction) - run_cmake(QtInFunctionNested) - run_cmake(QtInFunctionProperty) - - run_cmake(CMP0111-imported-target-full) - run_cmake(CMP0111-imported-target-libname) - run_cmake(CMP0111-imported-target-implib-only) - - block() - set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/MocPredefs-build) - run_cmake(MocPredefs) - set(RunCMake_TEST_NO_CLEAN 1) - run_cmake_command(MocPredefs-build ${CMAKE_COMMAND} --build . --config Debug) - endblock() - - # Detect information from the toolchain: - # - CMAKE_INCLUDE_FLAG_CXX - # - CMAKE_INCLUDE_SYSTEM_FLAG_CXX - run_cmake(Inspect) - include("${RunCMake_BINARY_DIR}/Inspect-build/info.cmake") - - if(CMAKE_INCLUDE_SYSTEM_FLAG_CXX) - if(RunCMake_GENERATOR MATCHES "Visual Studio") - string(REGEX REPLACE "^-" "/" test_expect_stdout "${CMAKE_INCLUDE_SYSTEM_FLAG_CXX}") - else() - set(test_expect_stdout "-*${CMAKE_INCLUDE_SYSTEM_FLAG_CXX}") - endif() - string(APPEND test_expect_stdout " *(\"[^\"]*|([^ ]|\\ )*)[\\/]dummy_autogen[\\/]include") - if(RunCMake_GENERATOR_IS_MULTI_CONFIG) - string(APPEND test_expect_stdout "_Debug") - endif() - - block() - set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/CMP0151-new-build) - run_cmake_with_options(CMP0151-new ${RunCMake_TEST_OPTIONS} -DCMAKE_POLICY_DEFAULT_CMP0151=NEW) - set(RunCMake_TEST_NO_CLEAN 1) - set(RunCMake_TEST_EXPECT_stdout "${test_expect_stdout}") - message(STATUS "RunCMake_TEST_EXPECT_stdout: ${RunCMake_TEST_EXPECT_stdout}") - run_cmake_command(CMP0151-new-build ${CMAKE_COMMAND} --build . --config Debug --verbose) - endblock() - - block() - set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/AutogenUseSystemIncludeOn-build) - run_cmake_with_options(AutogenUseSystemIncludeOn ${RunCMake_TEST_OPTIONS} -DCMAKE_POLICY_DEFAULT_CMP0151=NEW) - set(RunCMake_TEST_NO_CLEAN 1) - set(RunCMake_TEST_EXPECT_stdout "${test_expect_stdout}") - message(STATUS "RunCMake_TEST_EXPECT_stdout: ${RunCMake_TEST_EXPECT_stdout}") - run_cmake_command(AutogenUseSystemIncludeOn ${CMAKE_COMMAND} --build . --config Debug --verbose) - endblock() - endif() - - if(CMAKE_INCLUDE_FLAG_CXX) - if(RunCMake_GENERATOR MATCHES "Visual Studio") - string(REGEX REPLACE "^-" "/" test_expect_stdout "${CMAKE_INCLUDE_FLAG_CXX}") - else() - set(test_expect_stdout "-*${CMAKE_INCLUDE_FLAG_CXX}") - endif() - string(APPEND test_expect_stdout " *(\"[^\"]*|([^ ]|\\ )*)[\\/]dummy_autogen[\\/]include") - if(RunCMake_GENERATOR_IS_MULTI_CONFIG) - string(APPEND test_expect_stdout "_Debug") - endif() - - block() - set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/CMP0151-old-build) - run_cmake_with_options(CMP0151-old ${RunCMake_TEST_OPTIONS} -DCMAKE_POLICY_DEFAULT_CMP0151=OLD) - set(RunCMake_TEST_NO_CLEAN 1) - set(RunCMake_TEST_EXPECT_stdout "${test_expect_stdout}") - message(STATUS "RunCMake_TEST_EXPECT_stdout: ${RunCMake_TEST_EXPECT_stdout}") - run_cmake_command(CMP0151-old-build ${CMAKE_COMMAND} --build . --config Debug --verbose) - endblock() - - block() - set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/AutogenUseSystemIncludeOff-build) - run_cmake_with_options(AutogenUseSystemIncludeOff ${RunCMake_TEST_OPTIONS} -DCMAKE_POLICY_DEFAULT_CMP0151=NEW) - set(RunCMake_TEST_NO_CLEAN 1) - set(RunCMake_TEST_EXPECT_stdout "${test_expect_stdout}") - message(STATUS "RunCMake_TEST_EXPECT_stdout: ${RunCMake_TEST_EXPECT_stdout}") - run_cmake_command(AutogenUseSystemIncludeOff ${CMAKE_COMMAND} --build . --config Debug --verbose) - endblock() - - if(RunCMake_GENERATOR MATCHES "Make|Ninja") - block() - set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/AutogenSkipLinting-build) - list(APPEND RunCMake_TEST_OPTIONS - "-DPSEUDO_CPPCHECK=${PSEUDO_CPPCHECK}" - "-DPSEUDO_CPPLINT=${PSEUDO_CPPLINT}" - "-DPSEUDO_IWYU=${PSEUDO_IWYU}" - "-DPSEUDO_TIDY=${PSEUDO_TIDY}") - - run_cmake(AutogenSkipLinting) - set(RunCMake_TEST_NO_CLEAN 1) - run_cmake_command(AutogenSkipLinting-build ${CMAKE_COMMAND} --build . --config Debug --verbose) - endblock() - endif() - endif() - - if(RunCMake_GENERATOR_IS_MULTI_CONFIG AND NOT RunCMake_GENERATOR MATCHES "Xcode") - block() - set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/MocGeneratedFile-build) - run_cmake(MocGeneratedFile) - set(RunCMake_TEST_NO_CLEAN 1) - run_cmake_command(MocGeneratedFile-build ${CMAKE_COMMAND} --build . --config Debug --verbose) - endblock() - if(RunCMake_GENERATOR MATCHES "Ninja Multi-Config") - block() - set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/MocGeneratedFile-cross-config-build) - list(APPEND RunCMake_TEST_OPTIONS -DCMAKE_CROSS_CONFIGS=all) - run_cmake(MocGeneratedFile) - set(RunCMake_TEST_NO_CLEAN 1) - run_cmake_command(MocGeneratedFile-cross-config-build ${CMAKE_COMMAND} --build . --config Release --target libgen:Debug) - run_cmake_command(MocGeneratedFile-cross-config-build ${CMAKE_COMMAND} --build . --config Debug --target libgen:Release) - endblock() - endif() - endif() - - if(RunCMake_GENERATOR MATCHES "Make|Ninja") - block() - if(QtCore_VERSION VERSION_GREATER_EQUAL 5.15.0) - if (RunCMake_GENERATOR MATCHES "Ninja Multi-Config") - set(config_list Debug Release RelWithDebInfo) - set(use_better_graph_list ON OFF) - else() - set(config_list single-config) - set(use_better_graph_list OFF) - endif() - - foreach(use_better_graph IN ITEMS ${use_better_graph_list}) - foreach(config IN ITEMS ${config_list}) - block() - if (config STREQUAL "single-config") - set(config_suffix "") - else() - set(config_path "_${config}") - if (use_better_graph) - set(config_suffix "_${config}") - endif() - endif() - - set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/QtAutoMocDeps${config_path}-build) - run_cmake_with_options(QtAutoMocDeps ${RunCMake_TEST_OPTIONS} -DCMAKE_AUTOGEN_BETTER_GRAPH_MULTI_CONFIG=${use_better_graph}) - set(RunCMake_TEST_NO_CLEAN 1) - # Build the project. - if (config STREQUAL "single-config") - set(config_param "") - else() - set(config_param "--config ${config}") - endif() - run_cmake_command(QtAutoMocDeps-build ${CMAKE_COMMAND} --build . --verbose ${config_param}) - # Touch just the library source file, which shouldn't cause a rerun of AUTOMOC - # for app_with_qt target. - file(TOUCH "${RunCMake_SOURCE_DIR}/simple_lib.cpp") - set(RunCMake_TEST_NOT_EXPECT_stdout "Automatic MOC for target app_with_qt|\ -Automatic MOC for target sub_exe_1|\ -Automatic MOC for target sub_exe_2") - set(RunCMake_TEST_VARIANT_DESCRIPTION "-Don't execute AUTOMOC for 'app_with_qt', 'sub_exe_1' and 'sub_exe_2'") - # Build and assert that AUTOMOC was not run for app_with_qt, sub_exe_1 and sub_exe_2. - run_cmake_command(QtAutoMocDeps-build ${CMAKE_COMMAND} --build . --verbose ${config_param}) - unset(RunCMake_TEST_VARIANT_DESCRIPTION) - unset(RunCMake_TEST_NOT_EXPECT_stdout) - - macro(check_file_exists file) - if (EXISTS "${file}") - set(check_result "PASSED") - set(message_type "STATUS") - else() - set(check_result "FAILED") - set(message_type "FATAL_ERROR") - endif() - - message(${message_type} "QtAutoMocDeps-build-\"${file}\" was generated - ${check_result}") - endmacro() - - check_file_exists("${RunCMake_TEST_BINARY_DIR}/app_with_qt_autogen/deps${config_suffix}") - check_file_exists("${RunCMake_TEST_BINARY_DIR}/QtSubDir1/sub_exe_1_autogen/deps${config_suffix}") - check_file_exists("${RunCMake_TEST_BINARY_DIR}/QtSubDir2/sub_exe_2_autogen/deps${config_suffix}") - - check_file_exists("${RunCMake_TEST_BINARY_DIR}/app_with_qt_autogen/timestamp${config_suffix}") - check_file_exists("${RunCMake_TEST_BINARY_DIR}/QtSubDir1/sub_exe_1_autogen/timestamp${config_suffix}") - check_file_exists("${RunCMake_TEST_BINARY_DIR}/QtSubDir2/sub_exe_2_autogen/timestamp${config_suffix}") - - # Touch a header file to make sure an automoc dependency cycle is not introduced. - file(TOUCH "${RunCMake_SOURCE_DIR}/MyWindow.h") - set(RunCMake_TEST_VARIANT_DESCRIPTION "-First build after touch to detect dependency cycle") - run_cmake_command(QtAutoMocDeps-build ${CMAKE_COMMAND} --build . --verbose) - # Need to run a second time to hit the dependency cycle. - set(RunCMake_TEST_VARIANT_DESCRIPTION "-Don't hit dependency cycle") - run_cmake_command(QtAutoMocDeps-build ${CMAKE_COMMAND} --build . --verbose) - endblock() - endforeach() - endforeach() - endif() - endblock() - endif() - - function(run_make_program dir) - execute_process( - COMMAND "${RunCMake_MAKE_PROGRAM}" ${ARGN} - WORKING_DIRECTORY "${dir}" - OUTPUT_VARIABLE make_program_stdout - ERROR_VARIABLE make_program_stderr - RESULT_VARIABLE make_program_result - ) - if (NOT DEFINED RunMakeProgram_expected_result) - set(RunMakeProgram_expected_result 0) - endif() - if(NOT "${make_program_result}" MATCHES "${RunMakeProgram_expected_result}") - message(STATUS " -============ beginning of ${RunCMake_MAKE_PROGRAM}'s stdout ============ -${make_program_stdout} -=============== end of ${RunCMake_MAKE_PROGRAM}'s stdout =============== -") - message(STATUS " -============ beginning of ${RunCMake_MAKE_PROGRAM}'s stderr ============ -${make_program_stderr} -=============== end of ${RunCMake_MAKE_PROGRAM}'s stderr =============== -") - message(FATAL_ERROR - "top ${RunCMake_MAKE_PROGRAM} build failed exited with status ${make_program_result}") - endif() - set(make_program_stdout "${make_program_stdout}" PARENT_SCOPE) - endfunction(run_make_program) - - function(count_substring STRING SUBSTRING COUNT_VAR) - string(LENGTH "${STRING}" STRING_LENGTH) - string(LENGTH "${SUBSTRING}" SUBSTRING_LENGTH) - if (SUBSTRING_LENGTH EQUAL 0) - message(FATAL_ERROR "SUBSTRING_LENGTH is 0") - endif() - - if (STRING_LENGTH EQUAL 0) - message(FATAL_ERROR "STRING_LENGTH is 0") - endif() - - if (STRING_LENGTH LESS SUBSTRING_LENGTH) - message(FATAL_ERROR "STRING_LENGTH is less than SUBSTRING_LENGTH") - endif() - - set(COUNT 0) - string(FIND "${STRING}" "${SUBSTRING}" SUBSTRING_START) - while(SUBSTRING_START GREATER_EQUAL 0) - math(EXPR COUNT "${COUNT} + 1") - math(EXPR SUBSTRING_START "${SUBSTRING_START} + ${SUBSTRING_LENGTH}") - string(SUBSTRING "${STRING}" ${SUBSTRING_START} -1 STRING) - string(FIND "${STRING}" "${SUBSTRING}" SUBSTRING_START) - endwhile() - - set(${COUNT_VAR} ${COUNT} PARENT_SCOPE) - endfunction() - - function(expect_only_once make_program_stdout expected_output test_name) - count_substring("${make_program_stdout}" "${expected_output}" count) - if(NOT count EQUAL 1) - message(STATUS "${test_name}-expect_only_once - FAILED") - message(FATAL_ERROR "Expected to find ${expected_output} exactly once in ${make_program_stdout} but found ${count} occurrences of ${expected_output}") - else() - message(STATUS "${test_name}-expect_only_once - PASSED") - endif() - endfunction() - - function(expect_n_times string_to_check expected_output expected_count test_name) - count_substring("${string_to_check}" "${expected_output}" count) - if(NOT count EQUAL ${expected_count}) - message(STATUS "${test_name}-expect_${expected_count}_times - FAILED") - message(FATAL_ERROR "Expected to find ${expected_output} exactly ${expected_count} times in ${string_to_check} but found ${count} occurrences of ${expected_output}") - else() - message(STATUS "${test_name}-expect_${expected_count}_times - PASSED") - endif() - endfunction() - - function(not_expect make_program_stdout unexpected_output test_name) - count_substring("${make_program_stdout}" "${unexpected_output}" count) - if(NOT count EQUAL 0) - message(STATUS "${test_name}-not_expect - FAILED") - message(FATAL_ERROR "Expected to find ${unexpected_output} exactly 0 times in ${make_program_stdout} but found ${count} occurrences of ${unexpected_output}") - else() - message(STATUS "${test_name}-not_expect - PASSED") - endif() - endfunction() - - if (QtCore_VERSION VERSION_GREATER_EQUAL 5.15.0) - foreach(exe IN ITEMS Moc Uic Rcc) - if(RunCMake_GENERATOR MATCHES "Ninja Multi-Config") - block() - set(RunCMake_TEST_VARIANT_DESCRIPTION "-CMake-configure") - set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Auto${exe}ExecutableConfig-multi-config-build) - run_cmake_with_options(Auto${exe}ExecutableConfig ${RunCMake_TEST_OPTIONS} -DCMAKE_AUTOGEN_VERBOSE=ON -DCMAKE_AUTOGEN_BETTER_GRAPH_MULTI_CONFIG=ON) - unset(RunCMake_TEST_VARIANT_DESCRIPTION) - set(RunCMake_TEST_NO_CLEAN 1) - foreach(config IN ITEMS Debug Release RelWithDebInfo) - block() - set(RunCMake_TEST_EXPECT_stdout ".*running_exe_${config}*") - set(RunCMake_TEST_VARIANT_DESCRIPTION "-${config}-expect_running_exe_${config}") - run_cmake_command(Auto${exe}ExecutableConfig-multi-config-build ${CMAKE_COMMAND} --build . --config ${config}) - endblock() - endforeach() - set(RunCMake_TEST_EXPECT_stdout "ninja: no work to do") - foreach(config IN ITEMS Debug Release RelWithDebInfo) - block() - set(RunCMake_TEST_VARIANT_DESCRIPTION "-${config}-expect_no_work_to_do") - run_cmake_command(Auto${exe}ExecutableConfig-multi-config-build ${CMAKE_COMMAND} --build . --config ${config}) - endblock() - endforeach() - endblock() - block() - set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Auto${exe}ExecutableConfig-build) - run_cmake_with_options(Auto${exe}ExecutableConfig ${RunCMake_TEST_OPTIONS} -DCMAKE_AUTOGEN_VERBOSE=ON -DCMAKE_AUTOGEN_BETTER_GRAPH_MULTI_CONFIG=ON) - foreach(config IN ITEMS Debug Release RelWithDebInfo) - block() - run_make_program(${RunCMake_TEST_BINARY_DIR} --verbose -f build-${config}.ninja) - - set(expected_output "running_exe_${config}") - expect_only_once("${make_program_stdout}" "${expected_output}" "Auto${exe}ExecutableConfig-${config}-${expected_output}") - - foreach(sub_config IN ITEMS Debug Release RelWithDebInfo) - if(NOT sub_config STREQUAL config) - set(unexpected_output "running_exe_${sub_config}") - not_expect("${make_program_stdout}" "${unexpected_output}" "Auto${exe}ExecutableConfig-${config}-${unexpected_output}") - endif() - endforeach() - - if (exe STREQUAL "Moc" OR exe STREQUAL "Uic") - set(expected_output "cmake_autogen") - else() - set(expected_output "cmake_autorcc") - endif() - expect_only_once("${make_program_stdout}" "${expected_output}" "Auto${exe}ExecutableConfig-${config}-${expected_output}") - endblock() - endforeach() - endblock() - block() - foreach(ninja_config IN ITEMS Debug Release RelWithDebInfo) - foreach(target_config IN ITEMS Debug Release RelWithDebInfo) - block() - set(TEST_SUFFIX "-CrossConfig-${ninja_config}-${target_config}") - set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Auto${exe}ExecutableConfig${TEST_SUFFIX}-build) - set(RunCMake_TEST_VARIANT_DESCRIPTION ${TEST_SUFFIX}) - run_cmake_with_options(Auto${exe}ExecutableConfig ${RunCMake_TEST_OPTIONS} -DCMAKE_CROSS_CONFIGS=all -DCMAKE_DEFAULT_BUILD_TYPE=${ninja_config} -DCMAKE_AUTOGEN_BETTER_GRAPH_MULTI_CONFIG=ON) - unset(RunCMake_TEST_VARIANT_DESCRIPTION) - - run_make_program(${RunCMake_TEST_BINARY_DIR} --verbose -f build-${ninja_config}.ninja dummy:${target_config}) - - set(expected_output "running_exe_${ninja_config}") - expect_only_once("${make_program_stdout}" "${expected_output}" "Auto${exe}ExecutableConfig${TEST_SUFFIX}-${expected_output}") - - foreach(sub_config IN ITEMS Debug Release RelWithDebInfo) - if(NOT sub_config STREQUAL ninja_config) - set(unexpected_output "running_exe_${sub_config}") - not_expect("${make_program_stdout}" "${unexpected_output}" "Auto${exe}ExecutableConfig${TEST_SUFFIX}-${unexpected_output}") - endif() - endforeach() - - if (exe STREQUAL "Moc" OR exe STREQUAL "Uic") - set(expected_output "cmake_autogen") - else() - set(expected_output "cmake_autorcc") - endif() - expect_only_once("${make_program_stdout}" "${expected_output}" "Auto${exe}ExecutableConfig${TEST_SUFFIX}-${expected_output}") - endblock() - endforeach() - endforeach() - endblock() - block() - foreach(ninja_config IN ITEMS Debug Release RelWithDebInfo) - set(TEST_SUFFIX "-CrossConfig-${ninja_config}-all-all") - set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Auto${exe}ExecutableConfig${TEST_SUFFIX}-build) - set(RunCMake_TEST_VARIANT_DESCRIPTION ${TEST_SUFFIX}) - run_cmake_with_options(Auto${exe}ExecutableConfig ${RunCMake_TEST_OPTIONS} -DCMAKE_CROSS_CONFIGS=all -DCMAKE_AUTOGEN_BETTER_GRAPH_MULTI_CONFIG=ON) - unset(RunCMake_TEST_VARIANT_DESCRIPTION) - run_make_program(${RunCMake_TEST_BINARY_DIR} --verbose -f build-${ninja_config}.ninja all:all) - endforeach() - endblock() - elseif (RunCMake_GENERATOR MATCHES "Ninja|Make") - block() - set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Auto${exe}ExecutableConfig-build) - foreach(config IN ITEMS Debug Release RelWithDebInfo) - block() - set(RunCMake_TEST_VARIANT_DESCRIPTION "-${config}") - run_cmake_with_options(Auto${exe}ExecutableConfig ${RunCMake_TEST_OPTIONS} -DCMAKE_BUILD_TYPE=${config} -DCMAKE_AUTOGEN_VERBOSE=ON) - unset(RunCMake_TEST_VARIANT_DESCRIPTION) - set(RunCMake_TEST_NO_CLEAN 1) - set(RunCMake_TEST_EXPECT_stdout ".*running_exe_${config}*") - run_cmake_command(Auto${exe}ExecutableConfig-${config}-build ${CMAKE_COMMAND} --build .) - endblock() - endforeach() - endblock() - endif() - endforeach() - endif() - - # Visual Studio specific dependency tests - if (RunCMake_GENERATOR MATCHES "Visual Studio") - foreach(exe IN ITEMS Moc Uic Rcc) - block() - set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${exe}Example-build) - set(RunCMake_TEST_VARIANT_DESCRIPTION "-CMake-configure") - run_cmake_with_options(${exe}Example ${RunCMake_TEST_OPTIONS} -DCMAKE_AUTOGEN_VERBOSE=ON) - unset(RunCMake_TEST_VARIANT_DESCRIPTION) - set(RunCMake_TEST_NO_CLEAN 1) - foreach(config IN ITEMS Debug Release RelWithDebInfo) - block() - set(RunCMake_TEST_VARIANT_DESCRIPTION "-${config}-first-build") - run_cmake_command(${exe}Example-build ${CMAKE_COMMAND} --build . --config ${config}) - endblock() - endforeach() - foreach(config IN ITEMS Debug Release RelWithDebInfo) - block() - if (exe STREQUAL "Moc" OR exe STREQUAL "Uic") - set(RunCMake_TEST_NOT_EXPECT_stdout "Auto${exe}") - set(not_expect_descripton "Auto${exe}") - else () - set(RunCMake_TEST_NOT_EXPECT_stdout "Auto${exe}") - set(not_expect_descripton "Auto${exe}") - endif() - set(RunCMake_TEST_VARIANT_DESCRIPTION "-second-build-${config}_expect_no_${not_expect_descripton}") - run_cmake_command(${exe}Example-build ${CMAKE_COMMAND} --build . --config ${config}) - endblock() - endforeach() - endblock() - endforeach() - endif() - - if (RunCMake_GENERATOR MATCHES "Xcode") - foreach(exe IN ITEMS Moc Uic Rcc) - block() - set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${exe}Example-build) - set(RunCMake_TEST_VARIANT_DESCRIPTION "-CMake-configure") - set(RunCMake_TEST_EXPECT_stderr ".*") - run_cmake_with_options(${exe}Example ${RunCMake_TEST_OPTIONS} -DCMAKE_AUTOGEN_VERBOSE=ON) - set(RunCMake_TEST_NO_CLEAN 1) - set(RunCMake_MAKE_PROGRAM ${CMAKE_COMMAND}) - run_make_program(${RunCMake_TEST_BINARY_DIR} --build . --config Debug) - if (exe STREQUAL "Moc") - set(expected_count 16) - elseif (exe STREQUAL "Uic") - set(expected_count 4) - else() - set(expected_count 12) - endif() - expect_n_times("${make_program_stdout}" "Auto${exe}:" ${expected_count} "${exe}Example-build-Auto${exe}") - expect_n_times("${make_program_stdout}" "Auto${exe}:" ${expected_count} "${exe}Example-build-Auto${exe}") - - if (exe STREQUAL "Moc" OR exe STREQUAL "Uic") - expect_n_times("${make_program_stdout}" "AutoGen:" 20 "${exe}Example-build-AutoGen:") - endif() - - foreach(config IN ITEMS Debug Release RelWithDebInfo) - block() - run_make_program(${RunCMake_TEST_BINARY_DIR} --build . --config ${config}) - not_expect("${make_program_stdout}" "Auto${exe}" "${exe}Example-${config}_Auto${exe}") - not_expect("${make_program_stdout}" "AutoGen:" "${exe}Example-${config}_AutoGen") - endblock() - endforeach() - endblock() - endforeach() - endif() - - if (QtCore_VERSION VERSION_GREATER_EQUAL 6) - if (RunCMake_GENERATOR MATCHES "Make|Ninja") - foreach(value IN ITEMS ON OFF) - block() - set(RunCMake_TEST_BINARY_DIR - ${RunCMake_BINARY_DIR}/RccNoZTSD-${value}-build) - run_cmake_with_options(RccExample ${RunCMake_TEST_OPTIONS} - -DCMAKE_AUTOGEN_VERBOSE=ON -DZSTD_VALUE=${value}) - if (value STREQUAL "OFF") - set(RunCMake_TEST_EXPECT_stdout "--no-zstd") - else() - set(RunCMake_TEST_NOT_EXPECT_stdout "--no-zstd") - endif() - set(RunCMake_TEST_NO_CLEAN 1) - run_cmake_command(RccNoZTSD-${value}-build ${CMAKE_COMMAND} - --build . --config Debug) - endblock() - endforeach() - endif() - endif() -endif () diff --git a/Tests/RunCMake/Autogen/AutogenSkipLinting-build-stderr.txt b/Tests/RunCMake/Autogen_1/AutogenSkipLinting-build-stderr.txt index 8d98f9d..8d98f9d 100644 --- a/Tests/RunCMake/Autogen/AutogenSkipLinting-build-stderr.txt +++ b/Tests/RunCMake/Autogen_1/AutogenSkipLinting-build-stderr.txt diff --git a/Tests/RunCMake/Autogen/AutogenSkipLinting.cmake b/Tests/RunCMake/Autogen_1/AutogenSkipLinting.cmake index 3ce2092..3ce2092 100644 --- a/Tests/RunCMake/Autogen/AutogenSkipLinting.cmake +++ b/Tests/RunCMake/Autogen_1/AutogenSkipLinting.cmake diff --git a/Tests/RunCMake/Autogen/AutogenUseSystemIncludeCommon.cmake b/Tests/RunCMake/Autogen_1/AutogenUseSystemIncludeCommon.cmake index bbefd5f..e0f3ce8 100644 --- a/Tests/RunCMake/Autogen/AutogenUseSystemIncludeCommon.cmake +++ b/Tests/RunCMake/Autogen_1/AutogenUseSystemIncludeCommon.cmake @@ -2,8 +2,6 @@ enable_language(CXX) find_package(Qt${with_qt_version} REQUIRED COMPONENTS Core Widgets Gui) -set(CMAKE_AUTOMOC ON) - add_library(dummy SHARED empty.cpp) target_link_libraries(dummy Qt${with_qt_version}::Core Qt${with_qt_version}::Widgets diff --git a/Tests/RunCMake/Autogen/AutogenUseSystemIncludeOff.cmake b/Tests/RunCMake/Autogen_1/AutogenUseSystemIncludeOff.cmake index dfdbb98..dfdbb98 100644 --- a/Tests/RunCMake/Autogen/AutogenUseSystemIncludeOff.cmake +++ b/Tests/RunCMake/Autogen_1/AutogenUseSystemIncludeOff.cmake diff --git a/Tests/RunCMake/Autogen/AutogenUseSystemIncludeOn.cmake b/Tests/RunCMake/Autogen_1/AutogenUseSystemIncludeOn.cmake index f556ed4..f556ed4 100644 --- a/Tests/RunCMake/Autogen/AutogenUseSystemIncludeOn.cmake +++ b/Tests/RunCMake/Autogen_1/AutogenUseSystemIncludeOn.cmake diff --git a/Tests/RunCMake/Autogen/CMP0111-imported-target-full.cmake b/Tests/RunCMake/Autogen_1/CMP0111-imported-target-full.cmake index 331da64..331da64 100644 --- a/Tests/RunCMake/Autogen/CMP0111-imported-target-full.cmake +++ b/Tests/RunCMake/Autogen_1/CMP0111-imported-target-full.cmake diff --git a/Tests/RunCMake/Autogen/CMP0111-imported-target-implib-only.cmake b/Tests/RunCMake/Autogen_1/CMP0111-imported-target-implib-only.cmake index 8640fdc..8640fdc 100644 --- a/Tests/RunCMake/Autogen/CMP0111-imported-target-implib-only.cmake +++ b/Tests/RunCMake/Autogen_1/CMP0111-imported-target-implib-only.cmake diff --git a/Tests/RunCMake/Autogen/CMP0111-imported-target-libname.cmake b/Tests/RunCMake/Autogen_1/CMP0111-imported-target-libname.cmake index e1318c2..e1318c2 100644 --- a/Tests/RunCMake/Autogen/CMP0111-imported-target-libname.cmake +++ b/Tests/RunCMake/Autogen_1/CMP0111-imported-target-libname.cmake diff --git a/Tests/RunCMake/Autogen/CMP0111-imported-target-prelude.cmake b/Tests/RunCMake/Autogen_1/CMP0111-imported-target-prelude.cmake index 6d26f99..6d26f99 100644 --- a/Tests/RunCMake/Autogen/CMP0111-imported-target-prelude.cmake +++ b/Tests/RunCMake/Autogen_1/CMP0111-imported-target-prelude.cmake diff --git a/Tests/RunCMake/Autogen/CMP0151-common.cmake b/Tests/RunCMake/Autogen_1/CMP0151-common.cmake index bbefd5f..bbefd5f 100644 --- a/Tests/RunCMake/Autogen/CMP0151-common.cmake +++ b/Tests/RunCMake/Autogen_1/CMP0151-common.cmake diff --git a/Tests/RunCMake/Autogen/CMP0151-new.cmake b/Tests/RunCMake/Autogen_1/CMP0151-new.cmake index 9c77e58..9c77e58 100644 --- a/Tests/RunCMake/Autogen/CMP0151-new.cmake +++ b/Tests/RunCMake/Autogen_1/CMP0151-new.cmake diff --git a/Tests/RunCMake/Autogen/CMP0151-old.cmake b/Tests/RunCMake/Autogen_1/CMP0151-old.cmake index 9c77e58..9c77e58 100644 --- a/Tests/RunCMake/Autogen/CMP0151-old.cmake +++ b/Tests/RunCMake/Autogen_1/CMP0151-old.cmake diff --git a/Tests/RunCMake/Autogen/CMakeLists.txt b/Tests/RunCMake/Autogen_1/CMakeLists.txt index 2632ffa..2632ffa 100644 --- a/Tests/RunCMake/Autogen/CMakeLists.txt +++ b/Tests/RunCMake/Autogen_1/CMakeLists.txt diff --git a/Tests/RunCMake/Autogen/Inspect.cmake b/Tests/RunCMake/Autogen_1/Inspect.cmake index d5dc4b4..d5dc4b4 100644 --- a/Tests/RunCMake/Autogen/Inspect.cmake +++ b/Tests/RunCMake/Autogen_1/Inspect.cmake diff --git a/Tests/RunCMake/Autogen/MocGeneratedFile.cmake b/Tests/RunCMake/Autogen_1/MocGeneratedFile.cmake index 7bb55e9..7bb55e9 100644 --- a/Tests/RunCMake/Autogen/MocGeneratedFile.cmake +++ b/Tests/RunCMake/Autogen_1/MocGeneratedFile.cmake diff --git a/Tests/RunCMake/Autogen/MocPredefs-build-stderr.txt b/Tests/RunCMake/Autogen_1/MocPredefs-build-stderr.txt index 8d98f9d..8d98f9d 100644 --- a/Tests/RunCMake/Autogen/MocPredefs-build-stderr.txt +++ b/Tests/RunCMake/Autogen_1/MocPredefs-build-stderr.txt diff --git a/Tests/RunCMake/Autogen/MocPredefs-check.cxx b/Tests/RunCMake/Autogen_1/MocPredefs-check.cxx index 2b4791f..2b4791f 100644 --- a/Tests/RunCMake/Autogen/MocPredefs-check.cxx +++ b/Tests/RunCMake/Autogen_1/MocPredefs-check.cxx diff --git a/Tests/RunCMake/Autogen/MocPredefs-prefix.cmake b/Tests/RunCMake/Autogen_1/MocPredefs-prefix.cmake index 460a05d..460a05d 100644 --- a/Tests/RunCMake/Autogen/MocPredefs-prefix.cmake +++ b/Tests/RunCMake/Autogen_1/MocPredefs-prefix.cmake diff --git a/Tests/RunCMake/Autogen/MocPredefs.cmake b/Tests/RunCMake/Autogen_1/MocPredefs.cmake index 8307e04..8307e04 100644 --- a/Tests/RunCMake/Autogen/MocPredefs.cmake +++ b/Tests/RunCMake/Autogen_1/MocPredefs.cmake diff --git a/Tests/RunCMake/Autogen/MocPredefs.cxx b/Tests/RunCMake/Autogen_1/MocPredefs.cxx index b27cec5..b27cec5 100644 --- a/Tests/RunCMake/Autogen/MocPredefs.cxx +++ b/Tests/RunCMake/Autogen_1/MocPredefs.cxx diff --git a/Tests/RunCMake/Autogen/NoQt-stderr.txt b/Tests/RunCMake/Autogen_1/NoQt-stderr.txt index 1c6660a..1c6660a 100644 --- a/Tests/RunCMake/Autogen/NoQt-stderr.txt +++ b/Tests/RunCMake/Autogen_1/NoQt-stderr.txt diff --git a/Tests/RunCMake/Autogen/NoQt.cmake b/Tests/RunCMake/Autogen_1/NoQt.cmake index b2d375a..b2d375a 100644 --- a/Tests/RunCMake/Autogen/NoQt.cmake +++ b/Tests/RunCMake/Autogen_1/NoQt.cmake diff --git a/Tests/RunCMake/Autogen/QtInFunction.cmake b/Tests/RunCMake/Autogen_1/QtInFunction.cmake index 6c42cc2..6c42cc2 100644 --- a/Tests/RunCMake/Autogen/QtInFunction.cmake +++ b/Tests/RunCMake/Autogen_1/QtInFunction.cmake diff --git a/Tests/RunCMake/Autogen/QtInFunctionNested-stderr.txt b/Tests/RunCMake/Autogen_1/QtInFunctionNested-stderr.txt index 1c6660a..1c6660a 100644 --- a/Tests/RunCMake/Autogen/QtInFunctionNested-stderr.txt +++ b/Tests/RunCMake/Autogen_1/QtInFunctionNested-stderr.txt diff --git a/Tests/RunCMake/Autogen/QtInFunctionNested.cmake b/Tests/RunCMake/Autogen_1/QtInFunctionNested.cmake index 2e7b8ad..2e7b8ad 100644 --- a/Tests/RunCMake/Autogen/QtInFunctionNested.cmake +++ b/Tests/RunCMake/Autogen_1/QtInFunctionNested.cmake diff --git a/Tests/RunCMake/Autogen/QtInFunctionProperty.cmake b/Tests/RunCMake/Autogen_1/QtInFunctionProperty.cmake index d9296c4..d9296c4 100644 --- a/Tests/RunCMake/Autogen/QtInFunctionProperty.cmake +++ b/Tests/RunCMake/Autogen_1/QtInFunctionProperty.cmake diff --git a/Tests/RunCMake/Autogen_1/RunCMakeTest.cmake b/Tests/RunCMake/Autogen_1/RunCMakeTest.cmake new file mode 100644 index 0000000..2cf60e4 --- /dev/null +++ b/Tests/RunCMake/Autogen_1/RunCMakeTest.cmake @@ -0,0 +1,134 @@ +include(RunCMake) + +run_cmake(NoQt) +if (DEFINED with_qt_version) + set(RunCMake_TEST_OPTIONS + -Dwith_qt_version=${with_qt_version} + "-DQt${with_qt_version}_DIR:PATH=${Qt${with_qt_version}_DIR}" + "-DCMAKE_PREFIX_PATH:STRING=${CMAKE_PREFIX_PATH}" + ) + + run_cmake(QtInFunction) + run_cmake(QtInFunctionNested) + run_cmake(QtInFunctionProperty) + + run_cmake(CMP0111-imported-target-full) + run_cmake(CMP0111-imported-target-libname) + run_cmake(CMP0111-imported-target-implib-only) + + block() + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/MocPredefs-build) + run_cmake(MocPredefs) + set(RunCMake_TEST_NO_CLEAN 1) + run_cmake_command(MocPredefs-build ${CMAKE_COMMAND} --build . --config Debug) + endblock() + + # Detect information from the toolchain: + # - CMAKE_INCLUDE_FLAG_CXX + # - CMAKE_INCLUDE_SYSTEM_FLAG_CXX + run_cmake(Inspect) + include("${RunCMake_BINARY_DIR}/Inspect-build/info.cmake") + foreach(autogen_type IN ITEMS MOC UIC) + block() + set(RunCMake_TEST_VARIANT_DESCRIPTION "-AUTO${autogen_type}=ON") + if(CMAKE_INCLUDE_SYSTEM_FLAG_CXX) + if(RunCMake_GENERATOR MATCHES "Visual Studio") + string(REGEX REPLACE "^-" "/" test_expect_stdout_common "${CMAKE_INCLUDE_SYSTEM_FLAG_CXX}") + else() + set(test_expect_stdout_common "-*${CMAKE_INCLUDE_SYSTEM_FLAG_CXX}") + endif() + set(test_expect_stdout_1 "${test_expect_stdout_common}") + set(test_expect_stdout_2 "${test_expect_stdout_common}") + string(APPEND test_expect_stdout_1 " *(\"[^\"]*|([^ ]|\\ )*)[\\/]dummy_autogen[\\/]include") + if(RunCMake_GENERATOR_IS_MULTI_CONFIG) + string(APPEND test_expect_stdout_1 "_Debug") + endif() + string(APPEND test_expect_stdout_2 " *(\"[^\"]*|([^ ]|\\ )*)[\\/]QtCore") + set(test_expect_stdout "${test_expect_stdout_1}.*${test_expect_stdout_2}") + + block() + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/CMP0151-new-build) + run_cmake_with_options(CMP0151-new ${RunCMake_TEST_OPTIONS} -DCMAKE_AUTO${autogen_type}=ON -DCMAKE_POLICY_DEFAULT_CMP0151=NEW) + set(RunCMake_TEST_NO_CLEAN 1) + set(RunCMake_TEST_EXPECT_stdout "${test_expect_stdout}") + run_cmake_command(CMP0151-new-build ${CMAKE_COMMAND} --build . --config Debug --verbose) + endblock() + + block() + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/AutogenUseSystemIncludeOn-build) + run_cmake_with_options(AutogenUseSystemIncludeOn ${RunCMake_TEST_OPTIONS} -DCMAKE_AUTO${autogen_type}=ON -DCMAKE_POLICY_DEFAULT_CMP0151=NEW) + set(RunCMake_TEST_NO_CLEAN 1) + set(RunCMake_TEST_EXPECT_stdout "${test_expect_stdout}") + run_cmake_command(AutogenUseSystemIncludeOn-build ${CMAKE_COMMAND} --build . --config Debug --verbose) + endblock() + endif() + + if(CMAKE_INCLUDE_FLAG_CXX) + if(RunCMake_GENERATOR MATCHES "Visual Studio") + string(REGEX REPLACE "^-" "/" test_expect_stdout "${CMAKE_INCLUDE_FLAG_CXX}") + else() + set(test_expect_stdout "-*${CMAKE_INCLUDE_FLAG_CXX}") + endif() + string(APPEND test_expect_stdout " *(\"[^\"]*|([^ ]|\\ )*)[\\/]dummy_autogen[\\/]include") + if(RunCMake_GENERATOR_IS_MULTI_CONFIG) + string(APPEND test_expect_stdout "_Debug") + endif() + + block() + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/CMP0151-old-build) + run_cmake_with_options(CMP0151-old ${RunCMake_TEST_OPTIONS} -DCMAKE_AUTO${autogen_type}=ON -DCMAKE_POLICY_DEFAULT_CMP0151=OLD) + set(RunCMake_TEST_NO_CLEAN 1) + set(RunCMake_TEST_EXPECT_stdout "${test_expect_stdout}") + run_cmake_command(CMP0151-old-build ${CMAKE_COMMAND} --build . --config Debug --verbose) + endblock() + + block() + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/AutogenUseSystemIncludeOff-build) + run_cmake_with_options(AutogenUseSystemIncludeOff ${RunCMake_TEST_OPTIONS} -DCMAKE_AUTO${autogen_type}=ON -DCMAKE_POLICY_DEFAULT_CMP0151=NEW) + set(RunCMake_TEST_NO_CLEAN 1) + set(RunCMake_TEST_EXPECT_stdout "${test_expect_stdout}") + run_cmake_command(AutogenUseSystemIncludeOff-build ${CMAKE_COMMAND} --build . --config Debug --verbose) + endblock() + endif() + endblock() + endforeach() + if(CMAKE_INCLUDE_FLAG_CXX) + if(RunCMake_GENERATOR MATCHES "Make|Ninja") + block() + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/AutogenSkipLinting-build) + list(APPEND RunCMake_TEST_OPTIONS + "-DPSEUDO_CPPCHECK=${PSEUDO_CPPCHECK}" + "-DPSEUDO_CPPLINT=${PSEUDO_CPPLINT}" + "-DPSEUDO_IWYU=${PSEUDO_IWYU}" + "-DPSEUDO_TIDY=${PSEUDO_TIDY}") + + run_cmake(AutogenSkipLinting) + set(RunCMake_TEST_NO_CLEAN 1) + run_cmake_command(AutogenSkipLinting-build ${CMAKE_COMMAND} --build . --config Debug --verbose) + endblock() + endif() + endif() + + if(RunCMake_GENERATOR_IS_MULTI_CONFIG AND NOT RunCMake_GENERATOR MATCHES "Xcode") + block() + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/MocGeneratedFile-build) + run_cmake(MocGeneratedFile) + set(RunCMake_TEST_NO_CLEAN 1) + run_cmake_command(MocGeneratedFile-build ${CMAKE_COMMAND} --build . --config Debug --verbose) + endblock() + if(RunCMake_GENERATOR MATCHES "Ninja Multi-Config") + block() + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/MocGeneratedFile-cross-config-build) + list(APPEND RunCMake_TEST_OPTIONS -DCMAKE_CROSS_CONFIGS=all) + set(RunCMake_TEST_VARIANT_DESCRIPTION "-CMAKE_CROSS_CONFIGS-all") + run_cmake(MocGeneratedFile) + set(RunCMake_TEST_NO_CLEAN 1) + set(RunCMake_TEST_VARIANT_DESCRIPTION "-Release") + run_cmake_command(MocGeneratedFile-cross-config-build ${CMAKE_COMMAND} --build . --config Release --target libgen:Debug) + set(RunCMake_TEST_VARIANT_DESCRIPTION "-Debug") + run_cmake_command(MocGeneratedFile-cross-config-build ${CMAKE_COMMAND} --build . --config Debug --target libgen:Release) + unset(RunCMake_TEST_VARIANT_DESCRIPTION) + endblock() + endif() + endif() +endif () diff --git a/Tests/RunCMake/Autogen/SkipLinting.cxx b/Tests/RunCMake/Autogen_1/SkipLinting.cxx index 9e09b27..9e09b27 100644 --- a/Tests/RunCMake/Autogen/SkipLinting.cxx +++ b/Tests/RunCMake/Autogen_1/SkipLinting.cxx diff --git a/Tests/RunCMake/Autogen/SkipLinting.h b/Tests/RunCMake/Autogen_1/SkipLinting.h index def56a0..def56a0 100644 --- a/Tests/RunCMake/Autogen/SkipLinting.h +++ b/Tests/RunCMake/Autogen_1/SkipLinting.h diff --git a/Tests/RunCMake/Autogen/empty.cpp b/Tests/RunCMake/Autogen_1/empty.cpp index e69de29..e69de29 100644 --- a/Tests/RunCMake/Autogen/empty.cpp +++ b/Tests/RunCMake/Autogen_1/empty.cpp diff --git a/Tests/RunCMake/Autogen_2/CMakeLists.txt b/Tests/RunCMake/Autogen_2/CMakeLists.txt new file mode 100644 index 0000000..2632ffa --- /dev/null +++ b/Tests/RunCMake/Autogen_2/CMakeLists.txt @@ -0,0 +1,3 @@ +cmake_minimum_required(VERSION 3.16) +project(${RunCMake_TEST} NONE) +include(${RunCMake_TEST}.cmake) diff --git a/Tests/RunCMake/Autogen/MyWindow.cpp b/Tests/RunCMake/Autogen_2/MyWindow.cpp index d87c2e9..d87c2e9 100644 --- a/Tests/RunCMake/Autogen/MyWindow.cpp +++ b/Tests/RunCMake/Autogen_2/MyWindow.cpp diff --git a/Tests/RunCMake/Autogen/MyWindow.h b/Tests/RunCMake/Autogen_2/MyWindow.h index c267610..c267610 100644 --- a/Tests/RunCMake/Autogen/MyWindow.h +++ b/Tests/RunCMake/Autogen_2/MyWindow.h diff --git a/Tests/RunCMake/Autogen/MyWindow.ui b/Tests/RunCMake/Autogen_2/MyWindow.ui index fbf294c..fbf294c 100644 --- a/Tests/RunCMake/Autogen/MyWindow.ui +++ b/Tests/RunCMake/Autogen_2/MyWindow.ui diff --git a/Tests/RunCMake/Autogen/QtAutoMocDeps-stderr.txt b/Tests/RunCMake/Autogen_2/QtAutoMocDeps-stderr.txt index 6024984..6024984 100644 --- a/Tests/RunCMake/Autogen/QtAutoMocDeps-stderr.txt +++ b/Tests/RunCMake/Autogen_2/QtAutoMocDeps-stderr.txt diff --git a/Tests/RunCMake/Autogen/QtAutoMocDeps.cmake b/Tests/RunCMake/Autogen_2/QtAutoMocDeps.cmake index fc3b2f2..fc3b2f2 100644 --- a/Tests/RunCMake/Autogen/QtAutoMocDeps.cmake +++ b/Tests/RunCMake/Autogen_2/QtAutoMocDeps.cmake diff --git a/Tests/RunCMake/Autogen/QtSubDir1/CMakeLists.txt b/Tests/RunCMake/Autogen_2/QtSubDir1/CMakeLists.txt index f215b9e..f215b9e 100644 --- a/Tests/RunCMake/Autogen/QtSubDir1/CMakeLists.txt +++ b/Tests/RunCMake/Autogen_2/QtSubDir1/CMakeLists.txt diff --git a/Tests/RunCMake/Autogen/QtSubDir2/CMakeLists.txt b/Tests/RunCMake/Autogen_2/QtSubDir2/CMakeLists.txt index cccb1e0..cccb1e0 100644 --- a/Tests/RunCMake/Autogen/QtSubDir2/CMakeLists.txt +++ b/Tests/RunCMake/Autogen_2/QtSubDir2/CMakeLists.txt diff --git a/Tests/RunCMake/Autogen/QtSubDir3/CMakeLists.txt b/Tests/RunCMake/Autogen_2/QtSubDir3/CMakeLists.txt index d268bfe..d268bfe 100644 --- a/Tests/RunCMake/Autogen/QtSubDir3/CMakeLists.txt +++ b/Tests/RunCMake/Autogen_2/QtSubDir3/CMakeLists.txt diff --git a/Tests/RunCMake/Autogen_2/RunCMakeTest.cmake b/Tests/RunCMake/Autogen_2/RunCMakeTest.cmake new file mode 100644 index 0000000..e97e896 --- /dev/null +++ b/Tests/RunCMake/Autogen_2/RunCMakeTest.cmake @@ -0,0 +1,87 @@ +include(RunCMake) + +if (DEFINED with_qt_version) + set(RunCMake_TEST_OPTIONS + -Dwith_qt_version=${with_qt_version} + "-DQt${with_qt_version}_DIR:PATH=${Qt${with_qt_version}_DIR}" + "-DCMAKE_PREFIX_PATH:STRING=${CMAKE_PREFIX_PATH}" + ) + if(RunCMake_GENERATOR MATCHES "Make|Ninja") + block() + if(QtCore_VERSION VERSION_GREATER_EQUAL 5.15.0) + if (RunCMake_GENERATOR MATCHES "Ninja Multi-Config") + set(config_list Debug Release RelWithDebInfo) + set(use_better_graph_list ON OFF) + else() + set(config_list single-config) + set(use_better_graph_list OFF) + endif() + + foreach(use_better_graph IN ITEMS ${use_better_graph_list}) + foreach(config IN ITEMS ${config_list}) + block() + if (config STREQUAL "single-config") + set(config_suffix "") + else() + set(config_path "_${config}") + if (use_better_graph) + set(config_suffix "_${config}") + endif() + endif() + + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/QtAutoMocDeps${config_path}-build) + run_cmake_with_options(QtAutoMocDeps ${RunCMake_TEST_OPTIONS} -DCMAKE_AUTOGEN_BETTER_GRAPH_MULTI_CONFIG=${use_better_graph}) + set(RunCMake_TEST_NO_CLEAN 1) + # Build the project. + if (config STREQUAL "single-config") + set(config_param "") + else() + set(config_param "--config ${config}") + endif() + run_cmake_command(QtAutoMocDeps-build ${CMAKE_COMMAND} --build . --verbose ${config_param}) + # Touch just the library source file, which shouldn't cause a rerun of AUTOMOC + # for app_with_qt target. + file(TOUCH "${RunCMake_SOURCE_DIR}/simple_lib.cpp") + set(RunCMake_TEST_NOT_EXPECT_stdout "Automatic MOC for target app_with_qt|\ +Automatic MOC for target sub_exe_1|\ +Automatic MOC for target sub_exe_2") + set(RunCMake_TEST_VARIANT_DESCRIPTION "-Don't execute AUTOMOC for 'app_with_qt', 'sub_exe_1' and 'sub_exe_2'") + # Build and assert that AUTOMOC was not run for app_with_qt, sub_exe_1 and sub_exe_2. + run_cmake_command(QtAutoMocDeps-build ${CMAKE_COMMAND} --build . --verbose ${config_param}) + unset(RunCMake_TEST_VARIANT_DESCRIPTION) + unset(RunCMake_TEST_NOT_EXPECT_stdout) + + macro(check_file_exists file) + if (EXISTS "${file}") + set(check_result "PASSED") + set(message_type "STATUS") + else() + set(check_result "FAILED") + set(message_type "FATAL_ERROR") + endif() + + message(${message_type} "QtAutoMocDeps-build-\"${file}\" was generated - ${check_result}") + endmacro() + + check_file_exists("${RunCMake_TEST_BINARY_DIR}/app_with_qt_autogen/deps${config_suffix}") + check_file_exists("${RunCMake_TEST_BINARY_DIR}/QtSubDir1/sub_exe_1_autogen/deps${config_suffix}") + check_file_exists("${RunCMake_TEST_BINARY_DIR}/QtSubDir2/sub_exe_2_autogen/deps${config_suffix}") + + check_file_exists("${RunCMake_TEST_BINARY_DIR}/app_with_qt_autogen/timestamp${config_suffix}") + check_file_exists("${RunCMake_TEST_BINARY_DIR}/QtSubDir1/sub_exe_1_autogen/timestamp${config_suffix}") + check_file_exists("${RunCMake_TEST_BINARY_DIR}/QtSubDir2/sub_exe_2_autogen/timestamp${config_suffix}") + + # Touch a header file to make sure an automoc dependency cycle is not introduced. + file(TOUCH "${RunCMake_SOURCE_DIR}/MyWindow.h") + set(RunCMake_TEST_VARIANT_DESCRIPTION "-First build after touch to detect dependency cycle") + run_cmake_command(QtAutoMocDeps-build ${CMAKE_COMMAND} --build . --verbose) + # Need to run a second time to hit the dependency cycle. + set(RunCMake_TEST_VARIANT_DESCRIPTION "-Don't hit dependency cycle") + run_cmake_command(QtAutoMocDeps-build ${CMAKE_COMMAND} --build . --verbose) + endblock() + endforeach() + endforeach() + endif() + endblock() + endif() +endif () diff --git a/Tests/RunCMake/Autogen/app.cpp b/Tests/RunCMake/Autogen_2/app.cpp index 57380e4..57380e4 100644 --- a/Tests/RunCMake/Autogen/app.cpp +++ b/Tests/RunCMake/Autogen_2/app.cpp diff --git a/Tests/RunCMake/Autogen/app_qt.cpp b/Tests/RunCMake/Autogen_2/app_qt.cpp index 302c672..302c672 100644 --- a/Tests/RunCMake/Autogen/app_qt.cpp +++ b/Tests/RunCMake/Autogen_2/app_qt.cpp diff --git a/Tests/RunCMake/Autogen/simple_lib.cpp b/Tests/RunCMake/Autogen_2/simple_lib.cpp index cf8d689..cf8d689 100644 --- a/Tests/RunCMake/Autogen/simple_lib.cpp +++ b/Tests/RunCMake/Autogen_2/simple_lib.cpp diff --git a/Tests/RunCMake/Autogen/AutoMocExecutableConfig.cmake b/Tests/RunCMake/Autogen_3/AutoMocExecutableConfig.cmake index 3ee9be9..fc6ed7f 100644 --- a/Tests/RunCMake/Autogen/AutoMocExecutableConfig.cmake +++ b/Tests/RunCMake/Autogen_3/AutoMocExecutableConfig.cmake @@ -7,9 +7,9 @@ endif() get_target_property(moc_location Qt${with_qt_version}::moc IMPORTED_LOCATION) set_target_properties(dummy PROPERTIES AUTOMOC_MOC_OPTIONS "EXE_PATH=${moc_location}") -add_executable(mymoc $<$<CONFIG:Debug>:exe_debug.cpp> - $<$<CONFIG:Release>:exe_release.cpp> - $<$<CONFIG:RelWithDebInfo>:exe_relwithdebinfo.cpp> +add_executable(mymoc $<$<CONFIG:Debug>:../Autogen_common/exe_debug.cpp> + $<$<CONFIG:Release>:../Autogen_common/exe_release.cpp> + $<$<CONFIG:RelWithDebInfo>:../Autogen_common/exe_relwithdebinfo.cpp> ) set_target_properties(dummy PROPERTIES AUTOMOC_EXECUTABLE $<TARGET_FILE:mymoc>) diff --git a/Tests/RunCMake/Autogen_3/CMakeLists.txt b/Tests/RunCMake/Autogen_3/CMakeLists.txt new file mode 100644 index 0000000..2632ffa --- /dev/null +++ b/Tests/RunCMake/Autogen_3/CMakeLists.txt @@ -0,0 +1,3 @@ +cmake_minimum_required(VERSION 3.16) +project(${RunCMake_TEST} NONE) +include(${RunCMake_TEST}.cmake) diff --git a/Tests/RunCMake/Autogen/MocExample.cmake b/Tests/RunCMake/Autogen_3/MocExample.cmake index f06f8f6..b4f4729 100644 --- a/Tests/RunCMake/Autogen/MocExample.cmake +++ b/Tests/RunCMake/Autogen_3/MocExample.cmake @@ -3,7 +3,7 @@ enable_language(CXX) set(CMAKE_CXX_STANDARD 11) find_package(Qt${with_qt_version} REQUIRED COMPONENTS Core Widgets Gui) -add_library(dummy STATIC example.cpp) +add_library(dummy STATIC ../Autogen_common/example.cpp) target_link_libraries(dummy Qt${with_qt_version}::Core Qt${with_qt_version}::Widgets Qt${with_qt_version}::Gui) diff --git a/Tests/RunCMake/Autogen_3/RunCMakeTest.cmake b/Tests/RunCMake/Autogen_3/RunCMakeTest.cmake new file mode 100644 index 0000000..a2fb3df --- /dev/null +++ b/Tests/RunCMake/Autogen_3/RunCMakeTest.cmake @@ -0,0 +1,11 @@ +include(RunCMake) +include(Autogen_common/utils) + +if (DEFINED with_qt_version) + set(RunCMake_TEST_OPTIONS + -Dwith_qt_version=${with_qt_version} + "-DQt${with_qt_version}_DIR:PATH=${Qt${with_qt_version}_DIR}" + "-DCMAKE_PREFIX_PATH:STRING=${CMAKE_PREFIX_PATH}" + ) + autogen_executable_test(Moc) +endif () diff --git a/Tests/RunCMake/Autogen/AutoUicExecutableConfig.cmake b/Tests/RunCMake/Autogen_4/AutoUicExecutableConfig.cmake index 55b88b8..72a0d9f 100644 --- a/Tests/RunCMake/Autogen/AutoUicExecutableConfig.cmake +++ b/Tests/RunCMake/Autogen_4/AutoUicExecutableConfig.cmake @@ -7,9 +7,9 @@ endif() get_target_property(uic_location Qt${with_qt_version}::uic IMPORTED_LOCATION) set_target_properties(dummy PROPERTIES AUTOUIC_OPTIONS "EXE_PATH=${uic_location}") -add_executable(myuic $<$<CONFIG:Debug>:exe_debug.cpp> - $<$<CONFIG:Release>:exe_release.cpp> - $<$<CONFIG:RelWithDebInfo>:exe_relwithdebinfo.cpp> +add_executable(myuic $<$<CONFIG:Debug>:../Autogen_common/exe_debug.cpp> + $<$<CONFIG:Release>:../Autogen_common/exe_release.cpp> + $<$<CONFIG:RelWithDebInfo>:../Autogen_common/exe_relwithdebinfo.cpp> ) set_target_properties(dummy PROPERTIES AUTOUIC_EXECUTABLE $<TARGET_FILE:myuic>) diff --git a/Tests/RunCMake/Autogen_4/CMakeLists.txt b/Tests/RunCMake/Autogen_4/CMakeLists.txt new file mode 100644 index 0000000..2632ffa --- /dev/null +++ b/Tests/RunCMake/Autogen_4/CMakeLists.txt @@ -0,0 +1,3 @@ +cmake_minimum_required(VERSION 3.16) +project(${RunCMake_TEST} NONE) +include(${RunCMake_TEST}.cmake) diff --git a/Tests/RunCMake/Autogen_4/RunCMakeTest.cmake b/Tests/RunCMake/Autogen_4/RunCMakeTest.cmake new file mode 100644 index 0000000..ac8c5d4 --- /dev/null +++ b/Tests/RunCMake/Autogen_4/RunCMakeTest.cmake @@ -0,0 +1,11 @@ +include(RunCMake) +include(Autogen_common/utils) + +if (DEFINED with_qt_version) + set(RunCMake_TEST_OPTIONS + -Dwith_qt_version=${with_qt_version} + "-DQt${with_qt_version}_DIR:PATH=${Qt${with_qt_version}_DIR}" + "-DCMAKE_PREFIX_PATH:STRING=${CMAKE_PREFIX_PATH}" + ) + autogen_executable_test(Uic) +endif () diff --git a/Tests/RunCMake/Autogen/UicExample.cmake b/Tests/RunCMake/Autogen_4/UicExample.cmake index 4b1f8c1..4b1f8c1 100644 --- a/Tests/RunCMake/Autogen/UicExample.cmake +++ b/Tests/RunCMake/Autogen_4/UicExample.cmake diff --git a/Tests/RunCMake/Autogen/example_ui.cpp b/Tests/RunCMake/Autogen_4/example_ui.cpp index fb97c32..fb97c32 100644 --- a/Tests/RunCMake/Autogen/example_ui.cpp +++ b/Tests/RunCMake/Autogen_4/example_ui.cpp diff --git a/Tests/RunCMake/Autogen/example_ui.h b/Tests/RunCMake/Autogen_4/example_ui.h index d691133..d691133 100644 --- a/Tests/RunCMake/Autogen/example_ui.h +++ b/Tests/RunCMake/Autogen_4/example_ui.h diff --git a/Tests/RunCMake/Autogen/uiA.ui b/Tests/RunCMake/Autogen_4/uiA.ui index 4c5762e..4c5762e 100644 --- a/Tests/RunCMake/Autogen/uiA.ui +++ b/Tests/RunCMake/Autogen_4/uiA.ui diff --git a/Tests/RunCMake/Autogen/AutoRccExecutableConfig.cmake b/Tests/RunCMake/Autogen_5/AutoRccExecutableConfig.cmake index 0e46420..b15dd72 100644 --- a/Tests/RunCMake/Autogen/AutoRccExecutableConfig.cmake +++ b/Tests/RunCMake/Autogen_5/AutoRccExecutableConfig.cmake @@ -7,9 +7,9 @@ endif() get_target_property(rcc_location Qt${with_qt_version}::rcc IMPORTED_LOCATION) set_target_properties(dummy PROPERTIES AUTORCC_OPTIONS "EXE_PATH=${rcc_location}") -add_executable(myrcc $<$<CONFIG:Debug>:exe_debug.cpp> - $<$<CONFIG:Release>:exe_release.cpp> - $<$<CONFIG:RelWithDebInfo>:exe_relwithdebinfo.cpp> +add_executable(myrcc $<$<CONFIG:Debug>:../Autogen_common/exe_debug.cpp> + $<$<CONFIG:Release>:../Autogen_common/exe_release.cpp> + $<$<CONFIG:RelWithDebInfo>:../Autogen_common/exe_relwithdebinfo.cpp> ) set_target_properties(dummy PROPERTIES AUTORCC_EXECUTABLE $<TARGET_FILE:myrcc>) diff --git a/Tests/RunCMake/Autogen_5/CMakeLists.txt b/Tests/RunCMake/Autogen_5/CMakeLists.txt new file mode 100644 index 0000000..2632ffa --- /dev/null +++ b/Tests/RunCMake/Autogen_5/CMakeLists.txt @@ -0,0 +1,3 @@ +cmake_minimum_required(VERSION 3.16) +project(${RunCMake_TEST} NONE) +include(${RunCMake_TEST}.cmake) diff --git a/Tests/RunCMake/Autogen/RccExample.cmake b/Tests/RunCMake/Autogen_5/RccExample.cmake index ade0fef..9f8dc59 100644 --- a/Tests/RunCMake/Autogen/RccExample.cmake +++ b/Tests/RunCMake/Autogen_5/RccExample.cmake @@ -3,7 +3,7 @@ enable_language(CXX) set(CMAKE_CXX_STANDARD 11) find_package(Qt${with_qt_version} REQUIRED COMPONENTS Core Widgets Gui) -add_library(dummy STATIC example.cpp data.qrc) +add_library(dummy STATIC ../Autogen_common/example.cpp data.qrc) target_link_libraries(dummy Qt${with_qt_version}::Core Qt${with_qt_version}::Widgets Qt${with_qt_version}::Gui) diff --git a/Tests/RunCMake/Autogen_5/RunCMakeTest.cmake b/Tests/RunCMake/Autogen_5/RunCMakeTest.cmake new file mode 100644 index 0000000..8060ec4 --- /dev/null +++ b/Tests/RunCMake/Autogen_5/RunCMakeTest.cmake @@ -0,0 +1,31 @@ +include(RunCMake) +include(Autogen_common/utils) + +if (DEFINED with_qt_version) + set(RunCMake_TEST_OPTIONS + -Dwith_qt_version=${with_qt_version} + "-DQt${with_qt_version}_DIR:PATH=${Qt${with_qt_version}_DIR}" + "-DCMAKE_PREFIX_PATH:STRING=${CMAKE_PREFIX_PATH}" + ) + autogen_executable_test(Rcc) + if (QtCore_VERSION VERSION_GREATER_EQUAL 6) + if (RunCMake_GENERATOR MATCHES "Make|Ninja") + foreach(value IN ITEMS ON OFF) + block() + set(RunCMake_TEST_BINARY_DIR + ${RunCMake_BINARY_DIR}/RccNoZTSD-${value}-build) + run_cmake_with_options(RccExample ${RunCMake_TEST_OPTIONS} + -DCMAKE_AUTOGEN_VERBOSE=ON -DZSTD_VALUE=${value}) + if (value STREQUAL "OFF") + set(RunCMake_TEST_EXPECT_stdout "--no-zstd") + else() + set(RunCMake_TEST_NOT_EXPECT_stdout "--no-zstd") + endif() + set(RunCMake_TEST_NO_CLEAN 1) + run_cmake_command(RccNoZTSD-${value}-build ${CMAKE_COMMAND} + --build . --config Debug) + endblock() + endforeach() + endif() + endif() +endif () diff --git a/Tests/RunCMake/Autogen/data.qrc b/Tests/RunCMake/Autogen_5/data.qrc index 9bd068c..9bd068c 100644 --- a/Tests/RunCMake/Autogen/data.qrc +++ b/Tests/RunCMake/Autogen_5/data.qrc diff --git a/Tests/RunCMake/Autogen_6/CMakeLists.txt b/Tests/RunCMake/Autogen_6/CMakeLists.txt new file mode 100644 index 0000000..2632ffa --- /dev/null +++ b/Tests/RunCMake/Autogen_6/CMakeLists.txt @@ -0,0 +1,3 @@ +cmake_minimum_required(VERSION 3.16) +project(${RunCMake_TEST} NONE) +include(${RunCMake_TEST}.cmake) diff --git a/Tests/RunCMake/Autogen_6/RunCMakeTest.cmake b/Tests/RunCMake/Autogen_6/RunCMakeTest.cmake new file mode 100644 index 0000000..b629a5c --- /dev/null +++ b/Tests/RunCMake/Autogen_6/RunCMakeTest.cmake @@ -0,0 +1,70 @@ +include(RunCMake) +include(Autogen_common/utils) + +if (DEFINED with_qt_version) + set(RunCMake_TEST_OPTIONS + -Dwith_qt_version=${with_qt_version} + "-DQt${with_qt_version}_DIR:PATH=${Qt${with_qt_version}_DIR}" + "-DCMAKE_PREFIX_PATH:STRING=${CMAKE_PREFIX_PATH}" + ) + if (QtCore_VERSION VERSION_GREATER_EQUAL 5.15.0) + macro(set_test_variables_for_unwanted_builds) + if (RunCMake_GENERATOR MATCHES "Ninja") + set(RunCMake_TEST_NOT_EXPECT_stdout "widget2.cpp.o.d|mainwindow.cpp.o.d") + elseif (RunCMake_GENERATOR MATCHES "Make") + set(RunCMake_TEST_NOT_EXPECT_stdout "Building CXX object multi_ui_files/CMakeFiles/example.dir/src/widget2.cpp.o|\ + Building CXX object multi_ui_files/CMakeFiles/example.dir/src/mainwindow.cpp.o") + elseif (RunCMake_GENERATOR MATCHES "Visual Studio") + set(RunCMake_TEST_NOT_EXPECT_stdout "widget2.cpp|mainwindow.cpp") + elseif (RunCMake_GENERATOR MATCHES "Xcode") + set(RunCMake_TEST_NOT_EXPECT_stdout "widget2.cpp|mainwindow.cpp") + endif() + endmacro() + + function(uic_build_test test_name binary_dir source_dir file_to_touch test_config) + set(RunCMake_TEST_BINARY_DIR ${binary_dir}) + set(RunCMake_TEST_SOURCE_DIR ${source_dir}) + + if (NOT RunCMake_GENERATOR MATCHES "Visual Studio") + set(test_verbose_arg "--verbose") + endif() + if (RunCMake_GENERATOR_IS_MULTI_CONFIG) + set(config_desc "-${test_config}") + set(RunCMake_TEST_VARIANT_DESCRIPTION "${config_desc}") + set(multiconfig_config_arg "--config ${test_config}") + else() + set(RunCMake_TEST_VARIANT_DESCRIPTION "") + set(config_arg "-DCMAKE_BUILD_TYPE=Debug") + endif() + run_cmake_with_options(${test_name} ${RunCMake_TEST_OPTIONS} ${config_arg}) + set(RunCMake_TEST_NO_CLEAN 1) + run_cmake_command("${test_name}-build" ${CMAKE_COMMAND} --build . ${test_verbose_arg} ${multiconfig_config_arg}) + + file(TOUCH ${file_to_touch}) + set(RunCMake_TEST_VARIANT_DESCRIPTION "${config_desc}-first_build_after_touching") + set_test_variables_for_unwanted_builds() + run_cmake_command("${test_name}-build" ${CMAKE_COMMAND} --build . ${test_verbose_arg} ${multiconfig_config_arg}) + message(STATUS "${test_name}-build${config_desc}-Only build files that were touched were built - PASSED") + endfunction() + + if(RunCMake_GENERATOR MATCHES "Make|Ninja|Visual Studio|Xcode") + if (RunCMake_GENERATOR_IS_MULTI_CONFIG) + set(configs "Debug" "Release") + else() + set(configs "single_config") + endif() + + foreach(config IN ITEMS ${configs}) + if (NOT ${config} STREQUAL "single_config") + set(config_desc "-${config}") + endif() + + uic_build_test(multi_ui_files_touch_ui ${RunCMake_BINARY_DIR}/multi_ui_files_touch_ui${config_desc}-build + ${RunCMake_SOURCE_DIR}/multi_ui_files ${RunCMake_SOURCE_DIR}/multi_ui_files/src/widget1.ui ${config}) + + uic_build_test(multi_ui_files_touch_cpp ${RunCMake_BINARY_DIR}/multi_ui_files_touch_cpp${config_desc}-build + ${RunCMake_SOURCE_DIR}/multi_ui_files ${RunCMake_SOURCE_DIR}/multi_ui_files/src/widget1.cpp ${config}) + endforeach() + endif() + endif() +endif () diff --git a/Tests/RunCMake/Autogen_6/multi_ui_files/CMakeLists.txt b/Tests/RunCMake/Autogen_6/multi_ui_files/CMakeLists.txt new file mode 100644 index 0000000..f472337 --- /dev/null +++ b/Tests/RunCMake/Autogen_6/multi_ui_files/CMakeLists.txt @@ -0,0 +1,25 @@ +cmake_minimum_required(VERSION 3.5) + +project(UicIncrementalBuild LANGUAGES CXX) + +find_package(Qt${with_qt_version} REQUIRED COMPONENTS Core Widgets Gui) + +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTOUIC ON) + +add_executable(example + src/mainwindow.ui + src/widget1.ui + src/widget2.ui + src/mainwindow.h + src/widget1.h + src/widget2.h + src/main.cpp + src/mainwindow.cpp + src/widget1.cpp + src/widget2.cpp +) + +target_link_libraries(example PRIVATE Qt${with_qt_version}::Widgets + Qt${with_qt_version}::Core + Qt${with_qt_version}::Gui) diff --git a/Tests/RunCMake/Autogen_6/multi_ui_files/src/main.cpp b/Tests/RunCMake/Autogen_6/multi_ui_files/src/main.cpp new file mode 100644 index 0000000..8d76ad9 --- /dev/null +++ b/Tests/RunCMake/Autogen_6/multi_ui_files/src/main.cpp @@ -0,0 +1,11 @@ +#include <QApplication> + +#include "mainwindow.h" + +int main(int argc, char* argv[]) +{ + QApplication a(argc, argv); + MainWindow w; + w.show(); + return a.exec(); +} diff --git a/Tests/RunCMake/Autogen_6/multi_ui_files/src/mainwindow.cpp b/Tests/RunCMake/Autogen_6/multi_ui_files/src/mainwindow.cpp new file mode 100644 index 0000000..eb3d366 --- /dev/null +++ b/Tests/RunCMake/Autogen_6/multi_ui_files/src/mainwindow.cpp @@ -0,0 +1,25 @@ +#include "mainwindow.h" + +#include <QVBoxLayout> + +#include "src/ui_mainwindow.h" +#include "widget1.h" + +MainWindow::MainWindow(QWidget* parent) + : QMainWindow(parent) + , ui(new Ui::MainWindow) +{ + ui->setupUi(this); + auto layout = new QVBoxLayout; + layout->addWidget(new Widget1); + + QWidget* w = new QWidget(this); + w->setLayout(layout); + + setCentralWidget(w); +} + +MainWindow::~MainWindow() +{ + delete ui; +} diff --git a/Tests/RunCMake/Autogen_6/multi_ui_files/src/mainwindow.h b/Tests/RunCMake/Autogen_6/multi_ui_files/src/mainwindow.h new file mode 100644 index 0000000..3e64459 --- /dev/null +++ b/Tests/RunCMake/Autogen_6/multi_ui_files/src/mainwindow.h @@ -0,0 +1,22 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include <QMainWindow> + +QT_BEGIN_NAMESPACE +namespace Ui { +class MainWindow; +} +QT_END_NAMESPACE + +class MainWindow : public QMainWindow +{ + Q_OBJECT +public: + MainWindow(QWidget* parent = nullptr); + ~MainWindow(); + +private: + Ui::MainWindow* ui; +}; +#endif // MAINWINDOW_H diff --git a/Tests/RunCMake/Autogen_6/multi_ui_files/src/mainwindow.ui b/Tests/RunCMake/Autogen_6/multi_ui_files/src/mainwindow.ui new file mode 100644 index 0000000..828d7c1 --- /dev/null +++ b/Tests/RunCMake/Autogen_6/multi_ui_files/src/mainwindow.ui @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>MainWindow</class> + <widget class="QMainWindow" name="MainWindow"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>800</width> + <height>600</height> + </rect> + </property> + <property name="windowTitle"> + <string>MainWindow</string> + </property> + <widget class="QWidget" name="centralwidget"> + <layout class="QGridLayout" name="gridLayout"/> + </widget> + <widget class="QMenuBar" name="menubar"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>800</width> + <height>22</height> + </rect> + </property> + </widget> + <widget class="QStatusBar" name="statusbar"/> + </widget> + <resources/> + <connections/> +</ui> diff --git a/Tests/RunCMake/Autogen_6/multi_ui_files/src/widget1.cpp b/Tests/RunCMake/Autogen_6/multi_ui_files/src/widget1.cpp new file mode 100644 index 0000000..05657ce --- /dev/null +++ b/Tests/RunCMake/Autogen_6/multi_ui_files/src/widget1.cpp @@ -0,0 +1,22 @@ +#include "widget1.h" + +#include "src/ui_widget1.h" + +Widget1::Widget1(QWidget* parent) + : QWidget(parent) + , ui(new Ui::Widget1) +{ + ui->setupUi(this); + connect(ui->lineEdit, SIGNAL(textChanged(const QString&)), this, + SLOT(onTextChanged(const QString&))); +} + +Widget1::~Widget1() +{ + delete ui; +} + +void Widget1::onTextChanged(const QString& text) +{ + ui->OnTextChanged->setText(text); +} diff --git a/Tests/RunCMake/Autogen_6/multi_ui_files/src/widget1.h b/Tests/RunCMake/Autogen_6/multi_ui_files/src/widget1.h new file mode 100644 index 0000000..8c28d6d --- /dev/null +++ b/Tests/RunCMake/Autogen_6/multi_ui_files/src/widget1.h @@ -0,0 +1,23 @@ +#ifndef WIDGET1_H +#define WIDGET1_H + +#include <QWidget> + +namespace Ui { +class Widget1; +} + +class Widget1 : public QWidget +{ + Q_OBJECT +public: + explicit Widget1(QWidget* parent = nullptr); + ~Widget1(); +public slots: + void onTextChanged(const QString& text); + +private: + Ui::Widget1* ui; +}; + +#endif // WIDGET1_H diff --git a/Tests/RunCMake/Autogen_6/multi_ui_files/src/widget1.ui b/Tests/RunCMake/Autogen_6/multi_ui_files/src/widget1.ui new file mode 100644 index 0000000..db0c58d --- /dev/null +++ b/Tests/RunCMake/Autogen_6/multi_ui_files/src/widget1.ui @@ -0,0 +1,52 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>Widget1</class> + <widget class="QWidget" name="Widget1"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>400</width> + <height>300</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QFormLayout" name="formLayout"> + <item row="0" column="0"> + <widget class="QLabel" name="label_3"> + <property name="text"> + <string>Input:</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QLineEdit" name="lineEdit"/> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="label"> + <property name="text"> + <string>OnTextChanged:</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QLabel" name="OnTextChanged"> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="label_2"> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/Tests/RunCMake/Autogen_6/multi_ui_files/src/widget2.cpp b/Tests/RunCMake/Autogen_6/multi_ui_files/src/widget2.cpp new file mode 100644 index 0000000..7f4bbaf --- /dev/null +++ b/Tests/RunCMake/Autogen_6/multi_ui_files/src/widget2.cpp @@ -0,0 +1,22 @@ +#include "widget2.h" + +#include "src/ui_widget2.h" + +Widget2::Widget2(QWidget* parent) + : QWidget(parent) + , ui(new Ui::Widget2) +{ + ui->setupUi(this); + connect(ui->lineEdit, SIGNAL(textChanged(const QString&)), this, + SLOT(onTextChanged(const QString&))); +} + +Widget2::~Widget2() +{ + delete ui; +} + +void Widget2::onTextChanged(const QString& text) +{ + ui->OnTextChanged->setText(text); +} diff --git a/Tests/RunCMake/Autogen_6/multi_ui_files/src/widget2.h b/Tests/RunCMake/Autogen_6/multi_ui_files/src/widget2.h new file mode 100644 index 0000000..41d7e1f --- /dev/null +++ b/Tests/RunCMake/Autogen_6/multi_ui_files/src/widget2.h @@ -0,0 +1,24 @@ +#ifndef WIDGET2_H +#define WIDGET2_H + +#include <QWidget> + +namespace Ui { +class Widget2; +} + +class Widget2 : public QWidget +{ + Q_OBJECT + +public: + explicit Widget2(QWidget* parent = nullptr); + ~Widget2(); +public slots: + void onTextChanged(const QString& text); + +private: + Ui::Widget2* ui; +}; + +#endif // WIDGET2_H diff --git a/Tests/RunCMake/Autogen_6/multi_ui_files/src/widget2.ui b/Tests/RunCMake/Autogen_6/multi_ui_files/src/widget2.ui new file mode 100644 index 0000000..facf467 --- /dev/null +++ b/Tests/RunCMake/Autogen_6/multi_ui_files/src/widget2.ui @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>Widget2</class> + <widget class="QWidget" name="Widget2"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>400</width> + <height>300</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QFormLayout" name="formLayout"> + <item row="0" column="0"> + <widget class="QLabel" name="label_3"> + <property name="text"> + <string>Input:</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QLineEdit" name="lineEdit"/> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="label"> + <property name="text"> + <string>OnTextChanged:</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QLabel" name="OnTextChanged"> + <property name="text"> + <string/> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/Tests/RunCMake/Autogen/example.cpp b/Tests/RunCMake/Autogen_common/example.cpp index 7f1a781..7f1a781 100644 --- a/Tests/RunCMake/Autogen/example.cpp +++ b/Tests/RunCMake/Autogen_common/example.cpp diff --git a/Tests/RunCMake/Autogen/example.h b/Tests/RunCMake/Autogen_common/example.h index e8bfa42..e8bfa42 100644 --- a/Tests/RunCMake/Autogen/example.h +++ b/Tests/RunCMake/Autogen_common/example.h diff --git a/Tests/RunCMake/Autogen/exe_common.h b/Tests/RunCMake/Autogen_common/exe_common.h index 15311c6..15311c6 100644 --- a/Tests/RunCMake/Autogen/exe_common.h +++ b/Tests/RunCMake/Autogen_common/exe_common.h diff --git a/Tests/RunCMake/Autogen/exe_debug.cpp b/Tests/RunCMake/Autogen_common/exe_debug.cpp index ae5185b..ae5185b 100644 --- a/Tests/RunCMake/Autogen/exe_debug.cpp +++ b/Tests/RunCMake/Autogen_common/exe_debug.cpp diff --git a/Tests/RunCMake/Autogen/exe_release.cpp b/Tests/RunCMake/Autogen_common/exe_release.cpp index 384c992..384c992 100644 --- a/Tests/RunCMake/Autogen/exe_release.cpp +++ b/Tests/RunCMake/Autogen_common/exe_release.cpp diff --git a/Tests/RunCMake/Autogen/exe_relwithdebinfo.cpp b/Tests/RunCMake/Autogen_common/exe_relwithdebinfo.cpp index aa6c558..aa6c558 100644 --- a/Tests/RunCMake/Autogen/exe_relwithdebinfo.cpp +++ b/Tests/RunCMake/Autogen_common/exe_relwithdebinfo.cpp diff --git a/Tests/RunCMake/Autogen_common/utils.cmake b/Tests/RunCMake/Autogen_common/utils.cmake new file mode 100644 index 0000000..1208807 --- /dev/null +++ b/Tests/RunCMake/Autogen_common/utils.cmake @@ -0,0 +1,257 @@ +function(run_make_program dir) + execute_process( + COMMAND "${RunCMake_MAKE_PROGRAM}" ${ARGN} + WORKING_DIRECTORY "${dir}" + OUTPUT_VARIABLE make_program_stdout + ERROR_VARIABLE make_program_stderr + RESULT_VARIABLE make_program_result + ) + if (NOT DEFINED RunMakeProgram_expected_result) + set(RunMakeProgram_expected_result 0) + endif() + if(NOT "${make_program_result}" MATCHES "${RunMakeProgram_expected_result}") + message(STATUS " +============ beginning of ${RunCMake_MAKE_PROGRAM}'s stdout ============ +${make_program_stdout} +=============== end of ${RunCMake_MAKE_PROGRAM}'s stdout =============== +") + message(STATUS " +============ beginning of ${RunCMake_MAKE_PROGRAM}'s stderr ============ +${make_program_stderr} +=============== end of ${RunCMake_MAKE_PROGRAM}'s stderr =============== +") + message(FATAL_ERROR + "top ${RunCMake_MAKE_PROGRAM} build failed exited with status ${make_program_result}") + endif() + set(make_program_stdout "${make_program_stdout}" PARENT_SCOPE) +endfunction(run_make_program) + +function(count_substring STRING SUBSTRING COUNT_VAR) + string(LENGTH "${STRING}" STRING_LENGTH) + string(LENGTH "${SUBSTRING}" SUBSTRING_LENGTH) + if (SUBSTRING_LENGTH EQUAL 0) + message(FATAL_ERROR "SUBSTRING_LENGTH is 0") + endif() + + if (STRING_LENGTH EQUAL 0) + message(FATAL_ERROR "STRING_LENGTH is 0") + endif() + + if (STRING_LENGTH LESS SUBSTRING_LENGTH) + message(FATAL_ERROR "STRING_LENGTH is less than SUBSTRING_LENGTH") + endif() + + set(COUNT 0) + string(FIND "${STRING}" "${SUBSTRING}" SUBSTRING_START) + while(SUBSTRING_START GREATER_EQUAL 0) + math(EXPR COUNT "${COUNT} + 1") + math(EXPR SUBSTRING_START "${SUBSTRING_START} + ${SUBSTRING_LENGTH}") + string(SUBSTRING "${STRING}" ${SUBSTRING_START} -1 STRING) + string(FIND "${STRING}" "${SUBSTRING}" SUBSTRING_START) + endwhile() + + set(${COUNT_VAR} ${COUNT} PARENT_SCOPE) +endfunction() + +function(not_expect make_program_stdout unexpected_output test_name) + count_substring("${make_program_stdout}" "${unexpected_output}" count) + if(NOT count EQUAL 0) + message(STATUS "${test_name}-not_expect - FAILED") + message(FATAL_ERROR "Expected to find ${unexpected_output} exactly 0 times in ${make_program_stdout} but found ${count} occurrences of ${unexpected_output}") + else() + message(STATUS "${test_name}-not_expect - PASSED") + endif() +endfunction() + +function(expect_only_once make_program_stdout expected_output test_name) + count_substring("${make_program_stdout}" "${expected_output}" count) + if(NOT count EQUAL 1) + message(STATUS "${test_name}-expect_only_once - FAILED") + message(FATAL_ERROR "Expected to find ${expected_output} exactly once in ${make_program_stdout} but found ${count} occurrences of ${expected_output}") + else() + message(STATUS "${test_name}-expect_only_once - PASSED") + endif() +endfunction() + +function(expect_n_times string_to_check expected_output expected_count test_name) + count_substring("${string_to_check}" "${expected_output}" count) + if(NOT count EQUAL ${expected_count}) + message(STATUS "${test_name}-expect_${expected_count}_times - FAILED") + message(FATAL_ERROR "Expected to find ${expected_output} exactly ${expected_count} times in ${string_to_check} but found ${count} occurrences of ${expected_output}") + else() + message(STATUS "${test_name}-expect_${expected_count}_times - PASSED") + endif() +endfunction() + +function(autogen_executable_test exe) + if (QtCore_VERSION VERSION_GREATER_EQUAL 5.15.0) + if(RunCMake_GENERATOR MATCHES "Ninja Multi-Config") + block() + set(RunCMake_TEST_VARIANT_DESCRIPTION "-CMake-configure") + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Auto${exe}ExecutableConfig-multi-config-build) + run_cmake_with_options(Auto${exe}ExecutableConfig ${RunCMake_TEST_OPTIONS} -DCMAKE_AUTOGEN_VERBOSE=ON -DCMAKE_AUTOGEN_BETTER_GRAPH_MULTI_CONFIG=ON) + unset(RunCMake_TEST_VARIANT_DESCRIPTION) + set(RunCMake_TEST_NO_CLEAN 1) + foreach(config IN ITEMS Debug Release RelWithDebInfo) + block() + set(RunCMake_TEST_EXPECT_stdout ".*running_exe_${config}*") + set(RunCMake_TEST_VARIANT_DESCRIPTION "-${config}-expect_running_exe_${config}") + run_cmake_command(Auto${exe}ExecutableConfig-multi-config-build ${CMAKE_COMMAND} --build . --config ${config}) + endblock() + endforeach() + set(RunCMake_TEST_EXPECT_stdout "ninja: no work to do") + foreach(config IN ITEMS Debug Release RelWithDebInfo) + block() + set(RunCMake_TEST_VARIANT_DESCRIPTION "-${config}-expect_no_work_to_do") + run_cmake_command(Auto${exe}ExecutableConfig-multi-config-build ${CMAKE_COMMAND} --build . --config ${config}) + endblock() + endforeach() + endblock() + block() + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Auto${exe}ExecutableConfig-build) + run_cmake_with_options(Auto${exe}ExecutableConfig ${RunCMake_TEST_OPTIONS} -DCMAKE_AUTOGEN_VERBOSE=ON -DCMAKE_AUTOGEN_BETTER_GRAPH_MULTI_CONFIG=ON) + foreach(config IN ITEMS Debug Release RelWithDebInfo) + block() + run_make_program(${RunCMake_TEST_BINARY_DIR} --verbose -f build-${config}.ninja) + + set(expected_output "running_exe_${config}") + expect_only_once("${make_program_stdout}" "${expected_output}" "Auto${exe}ExecutableConfig-${config}-${expected_output}") + + foreach(sub_config IN ITEMS Debug Release RelWithDebInfo) + if(NOT sub_config STREQUAL config) + set(unexpected_output "running_exe_${sub_config}") + not_expect("${make_program_stdout}" "${unexpected_output}" "Auto${exe}ExecutableConfig-${config}-${unexpected_output}") + endif() + endforeach() + + if (exe STREQUAL "Moc" OR exe STREQUAL "Uic") + set(expected_output "cmake_autogen") + else() + set(expected_output "cmake_autorcc") + endif() + expect_only_once("${make_program_stdout}" "${expected_output}" "Auto${exe}ExecutableConfig-${config}-${expected_output}") + endblock() + endforeach() + endblock() + block() + foreach(ninja_config IN ITEMS Debug Release RelWithDebInfo) + foreach(target_config IN ITEMS Debug Release RelWithDebInfo) + block() + set(TEST_SUFFIX "-CrossConfig-${ninja_config}-${target_config}") + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Auto${exe}ExecutableConfig${TEST_SUFFIX}-build) + set(RunCMake_TEST_VARIANT_DESCRIPTION ${TEST_SUFFIX}) + run_cmake_with_options(Auto${exe}ExecutableConfig ${RunCMake_TEST_OPTIONS} -DCMAKE_CROSS_CONFIGS=all -DCMAKE_DEFAULT_BUILD_TYPE=${ninja_config} -DCMAKE_AUTOGEN_BETTER_GRAPH_MULTI_CONFIG=ON) + unset(RunCMake_TEST_VARIANT_DESCRIPTION) + + run_make_program(${RunCMake_TEST_BINARY_DIR} --verbose -f build-${ninja_config}.ninja dummy:${target_config}) + + set(expected_output "running_exe_${ninja_config}") + expect_only_once("${make_program_stdout}" "${expected_output}" "Auto${exe}ExecutableConfig${TEST_SUFFIX}-${expected_output}") + + foreach(sub_config IN ITEMS Debug Release RelWithDebInfo) + if(NOT sub_config STREQUAL ninja_config) + set(unexpected_output "running_exe_${sub_config}") + not_expect("${make_program_stdout}" "${unexpected_output}" "Auto${exe}ExecutableConfig${TEST_SUFFIX}-${unexpected_output}") + endif() + endforeach() + + if (exe STREQUAL "Moc" OR exe STREQUAL "Uic") + set(expected_output "cmake_autogen") + else() + set(expected_output "cmake_autorcc") + endif() + expect_only_once("${make_program_stdout}" "${expected_output}" "Auto${exe}ExecutableConfig${TEST_SUFFIX}-${expected_output}") + endblock() + endforeach() + endforeach() + endblock() + block() + foreach(ninja_config IN ITEMS Debug Release RelWithDebInfo) + set(TEST_SUFFIX "-CrossConfig-${ninja_config}-all-all") + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Auto${exe}ExecutableConfig${TEST_SUFFIX}-build) + set(RunCMake_TEST_VARIANT_DESCRIPTION ${TEST_SUFFIX}) + run_cmake_with_options(Auto${exe}ExecutableConfig ${RunCMake_TEST_OPTIONS} -DCMAKE_CROSS_CONFIGS=all -DCMAKE_AUTOGEN_BETTER_GRAPH_MULTI_CONFIG=ON) + unset(RunCMake_TEST_VARIANT_DESCRIPTION) + run_make_program(${RunCMake_TEST_BINARY_DIR} --verbose -f build-${ninja_config}.ninja all:all) + endforeach() + endblock() + elseif (RunCMake_GENERATOR MATCHES "Ninja|Make") + block() + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Auto${exe}ExecutableConfig-build) + foreach(config IN ITEMS Debug Release RelWithDebInfo) + block() + set(RunCMake_TEST_VARIANT_DESCRIPTION "-${config}") + run_cmake_with_options(Auto${exe}ExecutableConfig ${RunCMake_TEST_OPTIONS} -DCMAKE_BUILD_TYPE=${config} -DCMAKE_AUTOGEN_VERBOSE=ON) + unset(RunCMake_TEST_VARIANT_DESCRIPTION) + set(RunCMake_TEST_NO_CLEAN 1) + set(RunCMake_TEST_EXPECT_stdout ".*running_exe_${config}*") + run_cmake_command(Auto${exe}ExecutableConfig-${config}-build ${CMAKE_COMMAND} --build .) + endblock() + endforeach() + endblock() + endif() + endif() + + # Visual Studio specific dependency tests + if (RunCMake_GENERATOR MATCHES "Visual Studio") + block() + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${exe}Example-build) + set(RunCMake_TEST_VARIANT_DESCRIPTION "-CMake-configure") + run_cmake_with_options(${exe}Example ${RunCMake_TEST_OPTIONS} -DCMAKE_AUTOGEN_VERBOSE=ON) + unset(RunCMake_TEST_VARIANT_DESCRIPTION) + set(RunCMake_TEST_NO_CLEAN 1) + foreach(config IN ITEMS Debug Release RelWithDebInfo) + block() + set(RunCMake_TEST_VARIANT_DESCRIPTION "-${config}-first-build") + run_cmake_command(${exe}Example-build ${CMAKE_COMMAND} --build . --config ${config}) + endblock() + endforeach() + foreach(config IN ITEMS Debug Release RelWithDebInfo) + block() + if (exe STREQUAL "Moc" OR exe STREQUAL "Uic") + set(RunCMake_TEST_NOT_EXPECT_stdout "Auto${exe}") + set(not_expect_descripton "Auto${exe}") + else () + set(RunCMake_TEST_NOT_EXPECT_stdout "Auto${exe}") + set(not_expect_descripton "Auto${exe}") + endif() + set(RunCMake_TEST_VARIANT_DESCRIPTION "-second-build-${config}_expect_no_${not_expect_descripton}") + run_cmake_command(${exe}Example-build ${CMAKE_COMMAND} --build . --config ${config}) + endblock() + endforeach() + endblock() + endif() + + if (RunCMake_GENERATOR MATCHES "Xcode") + block() + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${exe}Example-build) + set(RunCMake_TEST_VARIANT_DESCRIPTION "-CMake-configure") + set(RunCMake_TEST_EXPECT_stderr ".*") + run_cmake_with_options(${exe}Example ${RunCMake_TEST_OPTIONS} -DCMAKE_AUTOGEN_VERBOSE=ON) + set(RunCMake_TEST_NO_CLEAN 1) + set(RunCMake_MAKE_PROGRAM ${CMAKE_COMMAND}) + run_make_program(${RunCMake_TEST_BINARY_DIR} --build . --config Debug) + if (exe STREQUAL "Moc") + set(expected_count 16) + elseif (exe STREQUAL "Uic") + set(expected_count 4) + else() + set(expected_count 12) + endif() + expect_n_times("${make_program_stdout}" "Auto${exe}:" ${expected_count} "${exe}Example-build-Auto${exe}") + expect_n_times("${make_program_stdout}" "Auto${exe}:" ${expected_count} "${exe}Example-build-Auto${exe}") + + if (exe STREQUAL "Moc" OR exe STREQUAL "Uic") + expect_n_times("${make_program_stdout}" "AutoGen:" 20 "${exe}Example-build-AutoGen:") + endif() + + foreach(config IN ITEMS Debug Release RelWithDebInfo) + block() + run_make_program(${RunCMake_TEST_BINARY_DIR} --build . --config ${config}) + not_expect("${make_program_stdout}" "Auto${exe}" "${exe}Example-${config}_Auto${exe}") + not_expect("${make_program_stdout}" "AutoGen:" "${exe}Example-${config}_AutoGen") + endblock() + endforeach() + endblock() + endif() +endfunction() diff --git a/Tests/RunCMake/BuildDepends/RunCMakeTest.cmake b/Tests/RunCMake/BuildDepends/RunCMakeTest.cmake index a5f9622..d5be807 100644 --- a/Tests/RunCMake/BuildDepends/RunCMakeTest.cmake +++ b/Tests/RunCMake/BuildDepends/RunCMakeTest.cmake @@ -68,7 +68,10 @@ if(NOT RunCMake_GENERATOR STREQUAL "Xcode") unset(run_BuildDepends_skip_step_2) endif() -if(CMake_TEST_Fortran) +if(CMake_TEST_Fortran + # FIXME(lfortran): The compiler fails on the test's includes. + AND NOT CMAKE_Fortran_COMPILER_ID STREQUAL "LFortran" + ) run_BuildDepends(FortranInclude) endif() diff --git a/Tests/RunCMake/CMP0129/C-NEW.cmake b/Tests/RunCMake/CMP0129/C-NEW.cmake new file mode 100644 index 0000000..1c8f4c0 --- /dev/null +++ b/Tests/RunCMake/CMP0129/C-NEW.cmake @@ -0,0 +1,2 @@ +cmake_policy(SET CMP0129 NEW) +include(C-common.cmake) diff --git a/Tests/RunCMake/CMP0129/C-OLD-stderr.txt b/Tests/RunCMake/CMP0129/C-OLD-stderr.txt new file mode 100644 index 0000000..5c622d2 --- /dev/null +++ b/Tests/RunCMake/CMP0129/C-OLD-stderr.txt @@ -0,0 +1,10 @@ +^CMake Deprecation Warning at C-OLD\.cmake:[0-9]+ \(cmake_policy\): + The OLD behavior for policy CMP0129 will be removed from a future version + of CMake\. + + The cmake-policies\(7\) manual explains that the OLD behaviors of all + policies are deprecated and that a policy should be set to OLD only under + specific short-term circumstances\. Projects should be ported to the NEW + behavior and not rely on setting a policy to OLD\. +Call Stack \(most recent call first\): + CMakeLists\.txt:[0-9]+ \(include\)$ diff --git a/Tests/RunCMake/CMP0129/C-OLD.cmake b/Tests/RunCMake/CMP0129/C-OLD.cmake new file mode 100644 index 0000000..789bf64 --- /dev/null +++ b/Tests/RunCMake/CMP0129/C-OLD.cmake @@ -0,0 +1,2 @@ +cmake_policy(SET CMP0129 OLD) +include(C-common.cmake) diff --git a/Tests/RunCMake/CMP0129/C-WARN.cmake b/Tests/RunCMake/CMP0129/C-WARN.cmake new file mode 100644 index 0000000..09b5167 --- /dev/null +++ b/Tests/RunCMake/CMP0129/C-WARN.cmake @@ -0,0 +1 @@ +include(C-common.cmake) diff --git a/Tests/RunCMake/CMP0129/C.cmake b/Tests/RunCMake/CMP0129/C-common.cmake index e9ebe90..1e91327 100644 --- a/Tests/RunCMake/CMP0129/C.cmake +++ b/Tests/RunCMake/CMP0129/C-common.cmake @@ -1,7 +1,3 @@ -if(SET_CMP0129) - cmake_policy(SET CMP0129 ${SET_CMP0129}) -endif() - enable_language(C) set(CMAKE_VERBOSE_MAKEFILE TRUE) include(CompareCompilerVersion.cmake) diff --git a/Tests/RunCMake/CMP0129/CMakeLists.txt b/Tests/RunCMake/CMP0129/CMakeLists.txt index d8200fc..f5cf5b7 100644 --- a/Tests/RunCMake/CMP0129/CMakeLists.txt +++ b/Tests/RunCMake/CMP0129/CMakeLists.txt @@ -1,3 +1,3 @@ cmake_minimum_required(VERSION 3.22) project(${RunCMake_TEST} NONE) -include(${RunCMake_TEST}.cmake) +include(${RunCMake_TEST}.cmake NO_POLICY_SCOPE) diff --git a/Tests/RunCMake/CMP0129/CXX-NEW.cmake b/Tests/RunCMake/CMP0129/CXX-NEW.cmake new file mode 100644 index 0000000..00cd7c5 --- /dev/null +++ b/Tests/RunCMake/CMP0129/CXX-NEW.cmake @@ -0,0 +1,2 @@ +cmake_policy(SET CMP0129 NEW) +include(CXX-common.cmake) diff --git a/Tests/RunCMake/CMP0129/CXX-OLD-stderr.txt b/Tests/RunCMake/CMP0129/CXX-OLD-stderr.txt new file mode 100644 index 0000000..71a1ecf --- /dev/null +++ b/Tests/RunCMake/CMP0129/CXX-OLD-stderr.txt @@ -0,0 +1,10 @@ +^CMake Deprecation Warning at CXX-OLD\.cmake:[0-9]+ \(cmake_policy\): + The OLD behavior for policy CMP0129 will be removed from a future version + of CMake\. + + The cmake-policies\(7\) manual explains that the OLD behaviors of all + policies are deprecated and that a policy should be set to OLD only under + specific short-term circumstances\. Projects should be ported to the NEW + behavior and not rely on setting a policy to OLD\. +Call Stack \(most recent call first\): + CMakeLists\.txt:[0-9]+ \(include\)$ diff --git a/Tests/RunCMake/CMP0129/CXX-OLD.cmake b/Tests/RunCMake/CMP0129/CXX-OLD.cmake new file mode 100644 index 0000000..b7d8641 --- /dev/null +++ b/Tests/RunCMake/CMP0129/CXX-OLD.cmake @@ -0,0 +1,2 @@ +cmake_policy(SET CMP0129 OLD) +include(CXX-common.cmake) diff --git a/Tests/RunCMake/CMP0129/CXX-WARN.cmake b/Tests/RunCMake/CMP0129/CXX-WARN.cmake new file mode 100644 index 0000000..db36956 --- /dev/null +++ b/Tests/RunCMake/CMP0129/CXX-WARN.cmake @@ -0,0 +1 @@ +include(CXX-common.cmake) diff --git a/Tests/RunCMake/CMP0129/CXX.cmake b/Tests/RunCMake/CMP0129/CXX-common.cmake index ffb81b8..016e8ff 100644 --- a/Tests/RunCMake/CMP0129/CXX.cmake +++ b/Tests/RunCMake/CMP0129/CXX-common.cmake @@ -1,7 +1,3 @@ -if(SET_CMP0129) - cmake_policy(SET CMP0129 ${SET_CMP0129}) -endif() - enable_language(CXX) set(CMAKE_VERBOSE_MAKEFILE TRUE) include(CompareCompilerVersion.cmake) diff --git a/Tests/RunCMake/CMP0129/Fortran-NEW.cmake b/Tests/RunCMake/CMP0129/Fortran-NEW.cmake new file mode 100644 index 0000000..6ac9cb9 --- /dev/null +++ b/Tests/RunCMake/CMP0129/Fortran-NEW.cmake @@ -0,0 +1,2 @@ +cmake_policy(SET CMP0129 NEW) +include(Fortran-common.cmake) diff --git a/Tests/RunCMake/CMP0129/Fortran-OLD-stderr.txt b/Tests/RunCMake/CMP0129/Fortran-OLD-stderr.txt new file mode 100644 index 0000000..01260c0 --- /dev/null +++ b/Tests/RunCMake/CMP0129/Fortran-OLD-stderr.txt @@ -0,0 +1,10 @@ +^CMake Deprecation Warning at Fortran-OLD\.cmake:[0-9]+ \(cmake_policy\): + The OLD behavior for policy CMP0129 will be removed from a future version + of CMake\. + + The cmake-policies\(7\) manual explains that the OLD behaviors of all + policies are deprecated and that a policy should be set to OLD only under + specific short-term circumstances\. Projects should be ported to the NEW + behavior and not rely on setting a policy to OLD\. +Call Stack \(most recent call first\): + CMakeLists\.txt:[0-9]+ \(include\)$ diff --git a/Tests/RunCMake/CMP0129/Fortran-OLD.cmake b/Tests/RunCMake/CMP0129/Fortran-OLD.cmake new file mode 100644 index 0000000..df6ca83 --- /dev/null +++ b/Tests/RunCMake/CMP0129/Fortran-OLD.cmake @@ -0,0 +1,2 @@ +cmake_policy(SET CMP0129 OLD) +include(Fortran-common.cmake) diff --git a/Tests/RunCMake/CMP0129/Fortran-WARN.cmake b/Tests/RunCMake/CMP0129/Fortran-WARN.cmake new file mode 100644 index 0000000..3dc27c3 --- /dev/null +++ b/Tests/RunCMake/CMP0129/Fortran-WARN.cmake @@ -0,0 +1 @@ +include(Fortran-common.cmake) diff --git a/Tests/RunCMake/CMP0129/Fortran-common.cmake b/Tests/RunCMake/CMP0129/Fortran-common.cmake new file mode 100644 index 0000000..7b6ecc7 --- /dev/null +++ b/Tests/RunCMake/CMP0129/Fortran-common.cmake @@ -0,0 +1,4 @@ +enable_language(Fortran) +set(CMAKE_VERBOSE_MAKEFILE TRUE) +include(CompareCompilerVersion.cmake) +compare_compiler_version(Fortran) diff --git a/Tests/RunCMake/CMP0129/Fortran.cmake b/Tests/RunCMake/CMP0129/Fortran.cmake deleted file mode 100644 index abaca7e..0000000 --- a/Tests/RunCMake/CMP0129/Fortran.cmake +++ /dev/null @@ -1,15 +0,0 @@ -include(CheckLanguage) -check_language(Fortran) -if(NOT CMAKE_Fortran_COMPILER) - # No Fortran compiler, skipping Fortran test - return() -endif() - -if(SET_CMP0129) - cmake_policy(SET CMP0129 ${SET_CMP0129}) -endif() - -enable_language(Fortran) -set(CMAKE_VERBOSE_MAKEFILE TRUE) -include(CompareCompilerVersion.cmake) -compare_compiler_version(Fortran) diff --git a/Tests/RunCMake/CMP0129/RunCMakeTest.cmake b/Tests/RunCMake/CMP0129/RunCMakeTest.cmake index 1b0e11b..c147352 100644 --- a/Tests/RunCMake/CMP0129/RunCMakeTest.cmake +++ b/Tests/RunCMake/CMP0129/RunCMakeTest.cmake @@ -1,8 +1,14 @@ set(RunCMake_TEST_NO_CMP0129 ON) include(RunCMake) -foreach(lang C CXX Fortran) - run_cmake(${lang}) - run_cmake_with_options(${lang} "-DSET_CMP0129=NEW") - run_cmake_with_options(${lang} "-DSET_CMP0129=OLD") -endforeach() +run_cmake(C-WARN) +run_cmake(C-OLD) +run_cmake(C-NEW) +run_cmake(CXX-WARN) +run_cmake(CXX-OLD) +run_cmake(CXX-NEW) +if(CMake_TEST_Fortran) + run_cmake(Fortran-WARN) + run_cmake(Fortran-OLD) + run_cmake(Fortran-NEW) +endif() diff --git a/Tests/RunCMake/file/MAKE_DIRECTORY-fail-result.txt b/Tests/RunCMake/CMP0171/CMP0171-NEW-result.txt index d00491f..d00491f 100644 --- a/Tests/RunCMake/file/MAKE_DIRECTORY-fail-result.txt +++ b/Tests/RunCMake/CMP0171/CMP0171-NEW-result.txt diff --git a/Tests/RunCMake/CMP0171/CMP0171-NEW-stderr.txt b/Tests/RunCMake/CMP0171/CMP0171-NEW-stderr.txt new file mode 100644 index 0000000..155ddd2 --- /dev/null +++ b/Tests/RunCMake/CMP0171/CMP0171-NEW-stderr.txt @@ -0,0 +1,4 @@ +CMake Error at CMP0171-NEW\.cmake:[0-9]+ \(add_custom_target\): + The target name "codegen" is reserved\. +Call Stack \(most recent call first\): + CMakeLists\.txt:[0-9]+ \(include\) diff --git a/Tests/RunCMake/CMP0171/CMP0171-NEW.cmake b/Tests/RunCMake/CMP0171/CMP0171-NEW.cmake new file mode 100644 index 0000000..547f6c0 --- /dev/null +++ b/Tests/RunCMake/CMP0171/CMP0171-NEW.cmake @@ -0,0 +1,6 @@ +# codegen is now a reserved name and this will cause an error since the policy is new. +add_custom_target(codegen + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/generated.h.in + ${CMAKE_CURRENT_BINARY_DIR}/generated.h +) diff --git a/Tests/RunCMake/CMP0171/CMP0171-OLD-result.txt b/Tests/RunCMake/CMP0171/CMP0171-OLD-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/CMP0171/CMP0171-OLD-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/CMP0171/CMP0171-OLD-stderr.txt b/Tests/RunCMake/CMP0171/CMP0171-OLD-stderr.txt new file mode 100644 index 0000000..1ae3318 --- /dev/null +++ b/Tests/RunCMake/CMP0171/CMP0171-OLD-stderr.txt @@ -0,0 +1,4 @@ +CMake Error at CMP0171-OLD\.cmake:[0-9]+ \(add_custom_command\): + add_custom_command CODEGEN option requires policy CMP0171 be set to NEW\! +Call Stack \(most recent call first\): + CMakeLists\.txt:[0-9]+ \(include\) diff --git a/Tests/RunCMake/CMP0171/CMP0171-OLD.cmake b/Tests/RunCMake/CMP0171/CMP0171-OLD.cmake new file mode 100644 index 0000000..c34b3fb --- /dev/null +++ b/Tests/RunCMake/CMP0171/CMP0171-OLD.cmake @@ -0,0 +1,9 @@ +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/generated.hpp + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/generated.h.in + ${CMAKE_CURRENT_BINARY_DIR}/generated.hpp + # This will cause an error since the CODEGEN option + # requires that CMP0171 is set to NEW + CODEGEN +) diff --git a/Tests/RunCMake/CMP0171/CMP0171-WARN-stderr.txt b/Tests/RunCMake/CMP0171/CMP0171-WARN-stderr.txt new file mode 100644 index 0000000..ee79553 --- /dev/null +++ b/Tests/RunCMake/CMP0171/CMP0171-WARN-stderr.txt @@ -0,0 +1,9 @@ +CMake Warning \(dev\) at CMP0171-WARN\.cmake:[0-9]+ \(add_custom_target\): + Policy CMP0171 is not set: 'codegen' is a reserved target name\. Run "cmake + --help-policy CMP0171" for policy details. Use the cmake_policy command to + set the policy and suppress this warning\. + + The target name "codegen" is reserved\. +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\) +This warning is for project developers\. Use -Wno-dev to suppress it\. diff --git a/Tests/RunCMake/CMP0171/CMP0171-WARN.cmake b/Tests/RunCMake/CMP0171/CMP0171-WARN.cmake new file mode 100644 index 0000000..6d61723 --- /dev/null +++ b/Tests/RunCMake/CMP0171/CMP0171-WARN.cmake @@ -0,0 +1,6 @@ +# CMake should warn the user if they have a target named codegen. +add_custom_target(codegen + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/generated.h.in + ${CMAKE_CURRENT_BINARY_DIR}/generated.h +) diff --git a/Tests/RunCMake/CMP0171/CMP0171-codegen-build-result.txt b/Tests/RunCMake/CMP0171/CMP0171-codegen-build-result.txt new file mode 100644 index 0000000..d197c91 --- /dev/null +++ b/Tests/RunCMake/CMP0171/CMP0171-codegen-build-result.txt @@ -0,0 +1 @@ +[^0] diff --git a/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkCustomCommandsTarget-result.txt b/Tests/RunCMake/CMP0171/CMP0171-codegen.cmake index e69de29..e69de29 100644 --- a/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkCustomCommandsTarget-result.txt +++ b/Tests/RunCMake/CMP0171/CMP0171-codegen.cmake diff --git a/Tests/RunCMake/CMP0171/CMakeLists.txt b/Tests/RunCMake/CMP0171/CMakeLists.txt new file mode 100644 index 0000000..1a5755c --- /dev/null +++ b/Tests/RunCMake/CMP0171/CMakeLists.txt @@ -0,0 +1,6 @@ +cmake_minimum_required(VERSION 3.29) +project(${RunCMake_TEST} LANGUAGES C) + +include(${RunCMake_TEST}.cmake) + +enable_testing() diff --git a/Tests/RunCMake/CMP0171/RunCMakeTest.cmake b/Tests/RunCMake/CMP0171/RunCMakeTest.cmake new file mode 100644 index 0000000..75941d7 --- /dev/null +++ b/Tests/RunCMake/CMP0171/RunCMakeTest.cmake @@ -0,0 +1,18 @@ +include(RunCMake) + +run_cmake("CMP0171-WARN") + +run_cmake_with_options(CMP0171-OLD "-DCMAKE_POLICY_DEFAULT_CMP0171=OLD") + +run_cmake_with_options(CMP0171-NEW "-DCMAKE_POLICY_DEFAULT_CMP0171=NEW") + +# The entire point of this test is to ensure the codegen target is not created +# unintentionally. It can only be created if CMP0171 is NEW. +block() + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/CMP0171-codegen-build) + run_cmake(CMP0171-codegen) + set(RunCMake_TEST_NO_CLEAN 1) + set(RunCMake_TEST_OUTPUT_MERGE 1) + # This command will fail with either 1 or 2 depending. + run_cmake_command(CMP0171-codegen-build ${CMAKE_COMMAND} --build . --config Debug --target codegen) +endblock() diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt index e205d9f..2f4554f 100644 --- a/Tests/RunCMake/CMakeLists.txt +++ b/Tests/RunCMake/CMakeLists.txt @@ -35,10 +35,6 @@ macro(add_RunCMake_test test) ${TEST_ARGS} -P "${CMAKE_CURRENT_SOURCE_DIR}/${Test_Dir}/RunCMakeTest.cmake" ) - set_tests_properties("RunCMake.${test}" PROPERTIES LABELS "CMake;run") - if(${test} MATCHES ^CMP) - set_property(TEST "RunCMake.${test}" APPEND PROPERTY LABELS "policy") - endif() endmacro() function(add_RunCMake_test_group test types) @@ -153,6 +149,9 @@ add_RunCMake_test(CMP0126) if("${CMAKE_C_COMPILER_ID}" STREQUAL "LCC" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "LCC" OR "${CMAKE_Fortran_COMPILER_ID}" STREQUAL "LCC") + if(CMAKE_Fortran_COMPILER) + list(APPEND CMP0129_ARGS -DCMake_TEST_Fortran=1) + endif() add_RunCMake_test("CMP0129") set_property(TEST RunCMake.CMP0129 APPEND PROPERTY LABELS "Fortran") endif() @@ -177,6 +176,7 @@ add_RunCMake_test(CMP0163) add_RunCMake_test(CMP0165) add_RunCMake_test(CMP0169) add_RunCMake_test(CMP0170) +add_RunCMake_test(CMP0171) # The test for Policy 65 requires the use of the # CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS variable, which both the VS and Xcode @@ -213,7 +213,10 @@ if(CMAKE_GENERATOR MATCHES "Ninja") -DCMAKE_SHARED_LIBRARY_PREFIX=${CMAKE_SHARED_LIBRARY_PREFIX} -DCMAKE_SHARED_LIBRARY_SUFFIX=${CMAKE_SHARED_LIBRARY_SUFFIX}) if(CMAKE_Fortran_COMPILER) - list(APPEND Ninja_ARGS -DTEST_Fortran=1) + list(APPEND Ninja_ARGS + -DCMake_TEST_Fortran=1 + -DCMAKE_Fortran_COMPILER_ID=${CMAKE_Fortran_COMPILER_ID} + ) endif() if(ninja_test_with_qt_version) list(APPEND Ninja_ARGS @@ -254,8 +257,8 @@ if(CMAKE_GENERATOR MATCHES "Ninja") add_RunCMake_test(NinjaPrivateDeps -DCMAKE_C_OUTPUT_EXTENSION=${CMAKE_C_OUTPUT_EXTENSION} -DRunCMake_GENERATOR_IS_MULTI_CONFIG=${_isMultiConfig}) - add_RunCMake_test(InstallParallel) endif() +add_RunCMake_test(InstallParallel) add_RunCMake_test(CTest) if(NOT CMake_TEST_EXTERNAL_CMAKE) @@ -280,33 +283,40 @@ if(CMake_TEST_APPLE_SILICON) add_RunCMake_test(AppleSilicon) endif() set(want_NoQt_test TRUE) +set(autogen_test_number 1 2 3 4 5 6) if(CMake_TEST_Qt6 AND Qt6Widgets_FOUND) # Work around Qt6 not finding sibling dependencies without CMAKE_PREFIX_PATH cmake_path(GET Qt6_DIR PARENT_PATH base_dir) # <base>/lib/cmake cmake_path(GET base_dir PARENT_PATH base_dir) # <base>/lib cmake_path(GET base_dir PARENT_PATH base_dir) # <base> - add_RunCMake_test(AutogenQt6 TEST_DIR Autogen - -Dwith_qt_version=6 - -DQtCore_VERSION=${Qt6Core_VERSION} - "-DQt6_DIR:PATH=${Qt6_DIR}" - "-DCMAKE_PREFIX_PATH:STRING=${base_dir}" - -DPSEUDO_TIDY=$<TARGET_FILE:pseudo_tidy> - -DPSEUDO_IWYU=$<TARGET_FILE:pseudo_iwyu> - -DPSEUDO_CPPLINT=$<TARGET_FILE:pseudo_cpplint> - -DPSEUDO_CPPCHECK=$<TARGET_FILE:pseudo_cppcheck> - ) + # Note: Since RunCMake.Autogen tests cause time out on some CI, + # we split the tests. + foreach(val IN ITEMS ${autogen_test_number}) + add_RunCMake_test("Autogen_Qt6_${val}" TEST_DIR "Autogen_${val}" + -Dwith_qt_version=6 + -DQtCore_VERSION=${Qt6Core_VERSION} + "-DQt6_DIR:PATH=${Qt6_DIR}" + "-DCMAKE_PREFIX_PATH:STRING=${base_dir}" + -DPSEUDO_TIDY=$<TARGET_FILE:pseudo_tidy> + -DPSEUDO_IWYU=$<TARGET_FILE:pseudo_iwyu> + -DPSEUDO_CPPLINT=$<TARGET_FILE:pseudo_cpplint> + -DPSEUDO_CPPCHECK=$<TARGET_FILE:pseudo_cppcheck> + ) + endforeach() set(want_NoQt_test FALSE) endif () if(CMake_TEST_Qt5 AND Qt5Widgets_FOUND) - add_RunCMake_test(AutogenQt5 TEST_DIR Autogen - -Dwith_qt_version=5 - -DQtCore_VERSION=${Qt5Core_VERSION} - "-DQt5_DIR:PATH=${Qt5_DIR}" - ) + foreach(val IN ITEMS ${autogen_test_number}) + add_RunCMake_test("Autogen_Qt5_${val}" TEST_DIR "Autogen_${val}" + -Dwith_qt_version=5 + -DQtCore_VERSION=${Qt5Core_VERSION} + "-DQt5_DIR:PATH=${Qt5_DIR}" + ) + endforeach() set(want_NoQt_test FALSE) endif () if(want_NoQt_test) - add_RunCMake_test(AutogenNoQt TEST_DIR Autogen) + add_RunCMake_test(AutogenNoQt TEST_DIR Autogen_1) endif() if(NOT DEFINED CMake_TEST_BuildDepends_GNU_AS @@ -322,7 +332,10 @@ if(NOT DEFINED CMake_TEST_BuildDepends_GNU_AS endif() if(CMAKE_Fortran_COMPILER) - list(APPEND BuildDepends_ARGS -DCMake_TEST_Fortran=1) + list(APPEND BuildDepends_ARGS + -DCMake_TEST_Fortran=1 + -DCMAKE_Fortran_COMPILER_ID=${CMAKE_Fortran_COMPILER_ID} + ) endif() add_RunCMake_test(BuildDepends @@ -547,6 +560,7 @@ add_RunCMake_test(cmake_language) add_RunCMake_test(cmake_minimum_required) add_RunCMake_test(cmake_parse_arguments) add_RunCMake_test(cmake_path -DMSYS=${MSYS}) +add_RunCMake_test(cmake_pkg_config) add_RunCMake_test(continue) add_executable(color_warning color_warning.c) add_executable(fake_build_command fake_build_command.c) @@ -585,6 +599,7 @@ foreach(var endif() endforeach() add_RunCMake_test(file-DOWNLOAD) +add_RunCMake_test(file-MAKE_DIRECTORY) add_RunCMake_test(file-RPATH -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME} -DCMake_TEST_ELF_LARGE=${CMake_TEST_ELF_LARGE} @@ -672,7 +687,13 @@ if(CMake_TEST_CUDA) set_property(TEST RunCMake.CUDA_architectures APPEND PROPERTY LABELS "CUDA") endif() -add_RunCMake_test(DependencyGraph -DCMAKE_Fortran_COMPILER=${CMAKE_Fortran_COMPILER}) +if(CMAKE_Fortran_COMPILER) + list(APPEND DependencyGraph_ARGS + -DCMake_TEST_Fortran=1 + -DCMAKE_Fortran_COMPILER_ID=${CMAKE_Fortran_COMPILER_ID} + ) + endif() +add_RunCMake_test(DependencyGraph) set_property(TEST RunCMake.DependencyGraph APPEND PROPERTY LABELS "Fortran") # Add C++ Module tests. @@ -1056,6 +1077,7 @@ set(cpack_tests DEB.DEB_DESCRIPTION DEB.PROJECT_META DEB.COMPONENT_WITH_SPECIAL_CHARS + DEB.MULTIARCH RPM.AUTO_SUFFIXES RPM.CUSTOM_BINARY_SPEC_FILE @@ -1216,7 +1238,8 @@ add_RunCMake_test(CMakePresetsWorkflow add_RunCMake_test(VerifyHeaderSets) add_RunCMake_test(set_tests_properties) -if(${CMAKE_GENERATOR} MATCHES "Make|Ninja") +if(CMAKE_GENERATOR MATCHES "Make|Ninja") + add_RunCMake_test(Codegen) add_RunCMake_test(TransformDepfile) endif() diff --git a/Tests/RunCMake/CMakePresets/CommentValid-result.txt b/Tests/RunCMake/CMakePresets/CommentValid-result.txt new file mode 100644 index 0000000..573541a --- /dev/null +++ b/Tests/RunCMake/CMakePresets/CommentValid-result.txt @@ -0,0 +1 @@ +0 diff --git a/Tests/RunCMake/CMakePresets/CommentValid.cmake b/Tests/RunCMake/CMakePresets/CommentValid.cmake new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/Tests/RunCMake/CMakePresets/CommentValid.cmake diff --git a/Tests/RunCMake/CMakePresets/CommentValid.json.in b/Tests/RunCMake/CMakePresets/CommentValid.json.in new file mode 100644 index 0000000..1206ded --- /dev/null +++ b/Tests/RunCMake/CMakePresets/CommentValid.json.in @@ -0,0 +1,14 @@ +{ + "$comment": [ + "example comment", + "with an array of strings" + ], + "version": 10, + "configurePresets": [ + { + "name": "CommentValid", + "generator": "@RunCMake_GENERATOR@", + "binaryDir": "${sourceDir}/build" + } + ] +} diff --git a/Tests/RunCMake/CMakePresets/CommentValidFull-result.txt b/Tests/RunCMake/CMakePresets/CommentValidFull-result.txt new file mode 100644 index 0000000..573541a --- /dev/null +++ b/Tests/RunCMake/CMakePresets/CommentValidFull-result.txt @@ -0,0 +1 @@ +0 diff --git a/Tests/RunCMake/CMakePresets/CommentValidFull.cmake b/Tests/RunCMake/CMakePresets/CommentValidFull.cmake new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/Tests/RunCMake/CMakePresets/CommentValidFull.cmake diff --git a/Tests/RunCMake/CMakePresets/CommentValidFull.json.in b/Tests/RunCMake/CMakePresets/CommentValidFull.json.in new file mode 100644 index 0000000..40bab97 --- /dev/null +++ b/Tests/RunCMake/CMakePresets/CommentValidFull.json.in @@ -0,0 +1,179 @@ +{ + "$comment": [ + "example comment", + "with an array of strings" + ], + "version": 10, + "cmakeMinimumRequired": { + "$comment": "We can add comments in version" + }, + "configurePresets": [ + { + "name": "CommentValidFull", + "$comment": "example comment", + "generator": "@RunCMake_GENERATOR@", + "binaryDir": "${sourceDir}/build", + "architecture": { + "$comment": "We can add comments in architecture", + "value": "v143", + "strategy": "external" + }, + "toolset": { + "$comment": "We can add comments in toolset", + "value": "x64", + "strategy": "external" + }, + "cacheVariables": { + "SOME_VARIABLE": { + "$comment": "We can add comments in every cacheVariable, that we created", + "value": "SOME_VALUE" + } + }, + "warnings": { + "$comment": "We can add comments in warnings", + "dev": false + }, + "errors": { + "$comment": "We can add comments in errors", + "dev": false + }, + "debug": { + "$comment": "We can add comments in debug", + "find": false + }, + "trace": { + "$comment": "We can add comments in trace", + "mode": "off" + } + } + ], + "buildPresets": [ + { + "$comment": "example comment", + "name": "default", + "condition": { + "$comment": "We can add comments in condition", + "type": "const", + "value": false + }, + "configurePreset": "CommentValidFull" + } + ], + "testPresets": [ + { + "name": "default", + "configurePreset": "CommentValidFull", + "filter": { + "$comment": "We can add comments in filter", + "include": { + "$comment": ["example comment", "with an array of strings", "inside include"], + "index": { + "$comment": ["example comment", "with an array of strings"], + "start": 0 + } + }, + "exclude": { + "$comment": ["example comment", "with an array of strings", "inside exclude"], + "fixtures": { + "$comment": ["example comment", "with an array of strings"], + "any": ".*full.*" + } + } + }, + "execution": { + "$comment": ["example comment", "with an array of strings"], + "repeat": { + "$comment": "Some comments here", + "mode": "until-fail", + "count": 1 + } + }, + "condition": { + "$comment": "We can add comments in equal & non-equal conditions", + "type": "equals", + "lhs": "test1", + "rhs": "test2" + }, + "$comment": ["example comment", "with an array of strings"] + } + ], + "packagePresets": [ + { + "name": "CommentValidFull", + "$comment": ["example comment", "with an array of strings"], + "configurePreset": "CommentValidFull", + "condition": { + "$comment": "We can add comments in list check conditions", + "type": "notInList", + "list": [ + "test1", + "test2" + ], + "string": "test1" + }, + "output": { + "$comment": "Hello, World!", + "debug": false + } + }, + { + "name": "CommentValidFull1", + "configurePreset": "CommentValidFull", + "condition": { + "$comment": "We can add comments in aggregation conditions", + "type": "allOf", + "conditions": [ + { + "$comment": "We can add comments in regex match conditions", + "type": "matches", + "regex": ".*tests.*", + "string": "test1" + }, + { + "type": "matches", + "regex": ".*tests.*", + "string": "test2" + }, + { + "type": "not", + "$comment": "We can add comments in not conditions", + "condition": { + "type": "matches", + "regex": ".*tests.*", + "string": "test3" + } + } + ] + }, + "output": { + "$comment": "Hello, World 123!", + "verbose": false + } + } + ], + "workflowPresets": [ + { + "name": "CommentValidFull", + "$comment": ["example comment", "with an array of strings"], + "steps": [ + { + "type": "configure", + "name": "CommentValidFull" + }, + { + "type": "build", + "name": "default" + }, + { + "$comment": "We must test it before we can package it", + "type": "test", + "name": "default" + }, + { + "type": "package", + "name": "CommentValidFull" + } + ] + } + ] +} diff --git a/Tests/RunCMake/CMakePresets/CommentValidOldSchema-result.txt b/Tests/RunCMake/CMakePresets/CommentValidOldSchema-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/CMakePresets/CommentValidOldSchema-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/CMakePresets/CommentValidOldSchema-stderr.txt b/Tests/RunCMake/CMakePresets/CommentValidOldSchema-stderr.txt new file mode 100644 index 0000000..b102f5b --- /dev/null +++ b/Tests/RunCMake/CMakePresets/CommentValidOldSchema-stderr.txt @@ -0,0 +1,2 @@ +^CMake Error: Could not read presets from .* +Error: @2,15: Invalid extra field \"\$comment\" in root object diff --git a/Tests/RunCMake/CMakePresets/CommentValidOldSchema.cmake b/Tests/RunCMake/CMakePresets/CommentValidOldSchema.cmake new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/Tests/RunCMake/CMakePresets/CommentValidOldSchema.cmake diff --git a/Tests/RunCMake/CMakePresets/CommentValidOldSchema.json.in b/Tests/RunCMake/CMakePresets/CommentValidOldSchema.json.in new file mode 100644 index 0000000..d92ee1d --- /dev/null +++ b/Tests/RunCMake/CMakePresets/CommentValidOldSchema.json.in @@ -0,0 +1,14 @@ +{ + "$comment": [ + "invalid comment", + "version less than 10" + ], + "version": 9, + "configurePresets": [ + { + "name": "CommentValidOldSchema", + "generator": "@RunCMake_GENERATOR@", + "binaryDir": "${sourceDir}/build" + } + ] +} diff --git a/Tests/RunCMake/CMakePresets/GraphvizValid-result.txt b/Tests/RunCMake/CMakePresets/GraphvizValid-result.txt new file mode 100644 index 0000000..573541a --- /dev/null +++ b/Tests/RunCMake/CMakePresets/GraphvizValid-result.txt @@ -0,0 +1 @@ +0 diff --git a/Tests/RunCMake/CMakePresets/GraphvizValid-stdout.txt b/Tests/RunCMake/CMakePresets/GraphvizValid-stdout.txt new file mode 100644 index 0000000..43d0958 --- /dev/null +++ b/Tests/RunCMake/CMakePresets/GraphvizValid-stdout.txt @@ -0,0 +1,2 @@ + +Generate graphviz: .+[\\/]my_graphviz\.dot diff --git a/Tests/RunCMake/CMakePresets/GraphvizValid.cmake b/Tests/RunCMake/CMakePresets/GraphvizValid.cmake new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/Tests/RunCMake/CMakePresets/GraphvizValid.cmake diff --git a/Tests/RunCMake/CMakePresets/GraphvizValid.json.in b/Tests/RunCMake/CMakePresets/GraphvizValid.json.in new file mode 100644 index 0000000..0a4ab6a --- /dev/null +++ b/Tests/RunCMake/CMakePresets/GraphvizValid.json.in @@ -0,0 +1,11 @@ +{ + "version": 10, + "configurePresets": [ + { + "name": "GraphvizValid", + "generator": "@RunCMake_GENERATOR@", + "graphviz": "${sourceDir}/my_graphviz.dot", + "binaryDir": "${sourceDir}/build" + } + ] +} diff --git a/Tests/RunCMake/CMakePresets/GraphvizValidOldSchema-result.txt b/Tests/RunCMake/CMakePresets/GraphvizValidOldSchema-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/CMakePresets/GraphvizValidOldSchema-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/CMakePresets/GraphvizValidOldSchema-stderr.txt b/Tests/RunCMake/CMakePresets/GraphvizValidOldSchema-stderr.txt new file mode 100644 index 0000000..0b7b4d6 --- /dev/null +++ b/Tests/RunCMake/CMakePresets/GraphvizValidOldSchema-stderr.txt @@ -0,0 +1,2 @@ +^CMake Error: Could not read presets from .* +File version must be 10 or higher for graphviz preset support diff --git a/Tests/RunCMake/CMakePresets/GraphvizValidOldSchema.cmake b/Tests/RunCMake/CMakePresets/GraphvizValidOldSchema.cmake new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/Tests/RunCMake/CMakePresets/GraphvizValidOldSchema.cmake diff --git a/Tests/RunCMake/CMakePresets/GraphvizValidOldSchema.json.in b/Tests/RunCMake/CMakePresets/GraphvizValidOldSchema.json.in new file mode 100644 index 0000000..85d0b1b --- /dev/null +++ b/Tests/RunCMake/CMakePresets/GraphvizValidOldSchema.json.in @@ -0,0 +1,11 @@ +{ + "version": 9, + "configurePresets": [ + { + "name": "GraphvizValid", + "generator": "@RunCMake_GENERATOR@", + "graphviz": "${sourceDir}/my_graphviz.dot", + "binaryDir": "${sourceDir}/build" + } + ] +} diff --git a/Tests/RunCMake/CMakePresets/NoCommentValid-result.txt b/Tests/RunCMake/CMakePresets/NoCommentValid-result.txt new file mode 100644 index 0000000..573541a --- /dev/null +++ b/Tests/RunCMake/CMakePresets/NoCommentValid-result.txt @@ -0,0 +1 @@ +0 diff --git a/Tests/RunCMake/CMakePresets/NoCommentValid.cmake b/Tests/RunCMake/CMakePresets/NoCommentValid.cmake new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/Tests/RunCMake/CMakePresets/NoCommentValid.cmake diff --git a/Tests/RunCMake/CMakePresets/NoCommentValid.json.in b/Tests/RunCMake/CMakePresets/NoCommentValid.json.in new file mode 100644 index 0000000..cf10ee2 --- /dev/null +++ b/Tests/RunCMake/CMakePresets/NoCommentValid.json.in @@ -0,0 +1,10 @@ +{ + "version": 10, + "configurePresets": [ + { + "name": "NoCommentValid", + "generator": "@RunCMake_GENERATOR@", + "binaryDir": "${sourceDir}/build" + } + ] +} diff --git a/Tests/RunCMake/CMakePresets/NoGraphvizValid-result.txt b/Tests/RunCMake/CMakePresets/NoGraphvizValid-result.txt new file mode 100644 index 0000000..573541a --- /dev/null +++ b/Tests/RunCMake/CMakePresets/NoGraphvizValid-result.txt @@ -0,0 +1 @@ +0 diff --git a/Tests/RunCMake/CMakePresets/NoGraphvizValid.cmake b/Tests/RunCMake/CMakePresets/NoGraphvizValid.cmake new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/Tests/RunCMake/CMakePresets/NoGraphvizValid.cmake diff --git a/Tests/RunCMake/CMakePresets/NoGraphvizValid.json.in b/Tests/RunCMake/CMakePresets/NoGraphvizValid.json.in new file mode 100644 index 0000000..b689833 --- /dev/null +++ b/Tests/RunCMake/CMakePresets/NoGraphvizValid.json.in @@ -0,0 +1,10 @@ +{ + "version": 10, + "configurePresets": [ + { + "name": "NoGraphvizValid", + "generator": "@RunCMake_GENERATOR@", + "binaryDir": "${sourceDir}/build" + } + ] +} diff --git a/Tests/RunCMake/CMakePresets/RunCMakeTest.cmake b/Tests/RunCMake/CMakePresets/RunCMakeTest.cmake index 2ec0a43..a92a4c4 100644 --- a/Tests/RunCMake/CMakePresets/RunCMakeTest.cmake +++ b/Tests/RunCMake/CMakePresets/RunCMakeTest.cmake @@ -92,6 +92,17 @@ endfunction() set(CMakePresets_SCHEMA_EXPECTED_RESULT 1) run_cmake_presets(NoCMakePresets) run_cmake_presets(Comment) +set(CMakePresets_SCHEMA_EXPECTED_RESULT 0) +run_cmake_presets(NoCommentValid) +run_cmake_presets(CommentValid) +run_cmake_presets(CommentValidFull) +set(CMakePresets_SCHEMA_EXPECTED_RESULT 1) +run_cmake_presets(CommentValidOldSchema) +set(CMakePresets_SCHEMA_EXPECTED_RESULT 0) +run_cmake_presets(NoGraphvizValid) +run_cmake_presets(GraphvizValid) +set(CMakePresets_SCHEMA_EXPECTED_RESULT 1) +run_cmake_presets(GraphvizValidOldSchema) run_cmake_presets(JSONParseError) run_cmake_presets(InvalidRoot) run_cmake_presets(NoVersion) diff --git a/Tests/RunCMake/CPack/README.txt b/Tests/RunCMake/CPack/README.txt index 2165125..d403db0 100644 --- a/Tests/RunCMake/CPack/README.txt +++ b/Tests/RunCMake/CPack/README.txt @@ -10,8 +10,8 @@ CPack test root directory: 'Tests/RunCMake/CPack/tests'. All phases are executed separately for each generator that is bound to a test. Tests for each generator are subtests of test 'RunCMake.CPack_<generator_name>'. -Each test must also be added to 'RunCMakeTest.cmake' script located in CPack -test root directory. +Each test must be added to list "cpack_tests" in 'Tests/RunCMake/CMakeLists.txt' +and also to 'RunCMakeTest.cmake' script located in 'Tests/RunCMake/CPack/'. Line that adds a test is: run_cpack_test(<test_name> "<generator_name_list>" <compile_stage> @@ -53,7 +53,7 @@ Test consists of - verification of generated files The phases are executed once per specified generator, packaging type and subtest -combinatiion. +combination. test prerequirements phase (optional): -------------------------------------- @@ -136,7 +136,7 @@ this step and must contain - EXPECTED_FILES_COUNT variable that contains the number of expected files that will be generated (0 or more) -- EXPECTED_FILE_<file_number_starting_with_1> that contains globing expression +- EXPECTED_FILE_<file_number_starting_with_1> that contains globbing expression that uniquely defines expected file name (will be used to find expected file) and should be present once for each expected file. NOTE: This variable should be used only as last resort as it sets generator diff --git a/Tests/RunCMake/CPack/RunCMakeTest.cmake b/Tests/RunCMake/CPack/RunCMakeTest.cmake index 5d32404..54671aa 100644 --- a/Tests/RunCMake/CPack/RunCMakeTest.cmake +++ b/Tests/RunCMake/CPack/RunCMakeTest.cmake @@ -73,3 +73,4 @@ run_cpack_test_package_target(PRE_POST_SCRIPTS "ZIP" false "MONOLITHIC;COMPONENT run_cpack_test_subtests(DUPLICATE_FILE "success;conflict_file;conflict_symlink" "TGZ" false "COMPONENT;GROUP") run_cpack_test(COMPONENT_WITH_SPECIAL_CHARS "RPM.COMPONENT_WITH_SPECIAL_CHARS;DEB.COMPONENT_WITH_SPECIAL_CHARS;7Z;TBZ2;TGZ;TXZ;TZ;ZIP;STGZ" false "MONOLITHIC;COMPONENT;GROUP") run_cpack_test_package_target(COMPONENT_WITH_SPECIAL_CHARS "RPM.COMPONENT_WITH_SPECIAL_CHARS;DEB.COMPONENT_WITH_SPECIAL_CHARS;7Z;TBZ2;TGZ;TXZ;TZ;ZIP;STGZ" false "MONOLITHIC;COMPONENT;GROUP") +run_cpack_test_subtests(MULTIARCH "same;foreign;allowed;fail" "DEB.MULTIARCH" false "MONOLITHIC;COMPONENT") diff --git a/Tests/RunCMake/CPack/tests/MULTIARCH/DEB-fail-stderr.txt b/Tests/RunCMake/CPack/tests/MULTIARCH/DEB-fail-stderr.txt new file mode 100644 index 0000000..8164e83 --- /dev/null +++ b/Tests/RunCMake/CPack/tests/MULTIARCH/DEB-fail-stderr.txt @@ -0,0 +1 @@ +Error: invalid value for Multi-Arch: fail\. Valid values are: same, foreign, allowed diff --git a/Tests/RunCMake/CPack/tests/MULTIARCH/ExpectedFiles.cmake b/Tests/RunCMake/CPack/tests/MULTIARCH/ExpectedFiles.cmake new file mode 100644 index 0000000..14b898f --- /dev/null +++ b/Tests/RunCMake/CPack/tests/MULTIARCH/ExpectedFiles.cmake @@ -0,0 +1,5 @@ +set(EXPECTED_FILES_COUNT "0") +if(NOT ${RunCMake_SUBTEST_SUFFIX} STREQUAL "fail") + set(EXPECTED_FILES_COUNT "1") + set(EXPECTED_FILE_CONTENT_1_LIST "/foo;/foo/CMakeLists.txt") +endif () diff --git a/Tests/RunCMake/CPack/tests/MULTIARCH/VerifyResult.cmake b/Tests/RunCMake/CPack/tests/MULTIARCH/VerifyResult.cmake new file mode 100644 index 0000000..f4e8050 --- /dev/null +++ b/Tests/RunCMake/CPack/tests/MULTIARCH/VerifyResult.cmake @@ -0,0 +1,4 @@ +if(NOT ${RunCMake_SUBTEST_SUFFIX} STREQUAL "fail") + set(MULTIARCH_control "Multi-Arch: ${RunCMake_SUBTEST_SUFFIX}") + verifyDebControl("${FOUND_FILE_1}" "MULTIARCH" "control") +endif () diff --git a/Tests/RunCMake/CPack/tests/MULTIARCH/test.cmake b/Tests/RunCMake/CPack/tests/MULTIARCH/test.cmake new file mode 100644 index 0000000..9784342 --- /dev/null +++ b/Tests/RunCMake/CPack/tests/MULTIARCH/test.cmake @@ -0,0 +1,7 @@ +install(FILES CMakeLists.txt DESTINATION foo COMPONENT test) + +set(CPACK_DEBIAN_PACKAGE_MULTIARCH ${RunCMake_SUBTEST_SUFFIX}) + +if(PACKAGING_TYPE STREQUAL "COMPONENT") + set(CPACK_COMPONENTS_ALL test) +endif() diff --git a/Tests/RunCMake/CPackConfig/CMP0172-NEW-check.cmake b/Tests/RunCMake/CPackConfig/CMP0172-NEW-check.cmake new file mode 100644 index 0000000..3e26e53 --- /dev/null +++ b/Tests/RunCMake/CPackConfig/CMP0172-NEW-check.cmake @@ -0,0 +1,2 @@ +include(${RunCMake_SOURCE_DIR}/check.cmake) +test_variable(CPACK_WIX_INSTALL_SCOPE "perMachine") diff --git a/Tests/RunCMake/CPackConfig/CMP0172-NEW.cmake b/Tests/RunCMake/CPackConfig/CMP0172-NEW.cmake new file mode 100644 index 0000000..ddab227 --- /dev/null +++ b/Tests/RunCMake/CPackConfig/CMP0172-NEW.cmake @@ -0,0 +1 @@ +cmake_policy(SET CMP0172 NEW) diff --git a/Tests/RunCMake/CPackConfig/CMP0172-OLD-check.cmake b/Tests/RunCMake/CPackConfig/CMP0172-OLD-check.cmake new file mode 100644 index 0000000..63889b4 --- /dev/null +++ b/Tests/RunCMake/CPackConfig/CMP0172-OLD-check.cmake @@ -0,0 +1,2 @@ +include(${RunCMake_SOURCE_DIR}/check.cmake) +test_variable(CPACK_WIX_INSTALL_SCOPE "") diff --git a/Tests/RunCMake/CPackConfig/CMP0172-OLD.cmake b/Tests/RunCMake/CPackConfig/CMP0172-OLD.cmake new file mode 100644 index 0000000..856c9e7 --- /dev/null +++ b/Tests/RunCMake/CPackConfig/CMP0172-OLD.cmake @@ -0,0 +1,2 @@ +set(CMAKE_POLICY_WARNING_CMP0172 1) +cmake_policy(SET CMP0172 OLD) diff --git a/Tests/RunCMake/CPackConfig/CMP0172-WARN-check.cmake b/Tests/RunCMake/CPackConfig/CMP0172-WARN-check.cmake new file mode 100644 index 0000000..63889b4 --- /dev/null +++ b/Tests/RunCMake/CPackConfig/CMP0172-WARN-check.cmake @@ -0,0 +1,2 @@ +include(${RunCMake_SOURCE_DIR}/check.cmake) +test_variable(CPACK_WIX_INSTALL_SCOPE "") diff --git a/Tests/RunCMake/CPackConfig/CMP0172-WARN-stderr.txt b/Tests/RunCMake/CPackConfig/CMP0172-WARN-stderr.txt new file mode 100644 index 0000000..4596686 --- /dev/null +++ b/Tests/RunCMake/CPackConfig/CMP0172-WARN-stderr.txt @@ -0,0 +1,12 @@ +^CMake Warning \(dev\) at [^ +]*/Modules/CPack\.cmake:[0-9]+ \(message\): + Policy CMP0172 is not set: The CPack module enables per-machine + installation by default in the CPack WIX Generator\. Run "cmake + --help-policy CMP0172" for policy details\. Use the cmake_policy command to + set the policy and suppress this warning. + + For compatibility, CMake will not enable per-machine installation by + default in the CPack WIX Generator\. +Call Stack \(most recent call first\): + CMakeLists\.txt:[0-9]+ \(include\) +This warning is for project developers\. Use -Wno-dev to suppress it\.$ diff --git a/Tests/RunCMake/CPackConfig/CMP0172-WARN.cmake b/Tests/RunCMake/CPackConfig/CMP0172-WARN.cmake new file mode 100644 index 0000000..d9c4f0a --- /dev/null +++ b/Tests/RunCMake/CPackConfig/CMP0172-WARN.cmake @@ -0,0 +1 @@ +set(CMAKE_POLICY_WARNING_CMP0172 1) diff --git a/Tests/RunCMake/CPackConfig/RunCMakeTest.cmake b/Tests/RunCMake/CPackConfig/RunCMakeTest.cmake index 1de640b..4d61073 100644 --- a/Tests/RunCMake/CPackConfig/RunCMakeTest.cmake +++ b/Tests/RunCMake/CPackConfig/RunCMakeTest.cmake @@ -5,6 +5,9 @@ run_cmake(CMP0133-WARN) run_cmake(CMP0161-NEW) run_cmake(CMP0161-OLD) run_cmake(CMP0161-WARN) +run_cmake(CMP0172-NEW) +run_cmake(CMP0172-OLD) +run_cmake(CMP0172-WARN) run_cmake(Simple) run_cmake(Default) run_cmake(Special) diff --git a/Tests/RunCMake/CTestCommandLine/FailureLabels-result.txt b/Tests/RunCMake/CTestCommandLine/FailureLabels-result.txt new file mode 100644 index 0000000..45a4fb7 --- /dev/null +++ b/Tests/RunCMake/CTestCommandLine/FailureLabels-result.txt @@ -0,0 +1 @@ +8 diff --git a/Tests/RunCMake/CTestCommandLine/FailureLabels-stderr.txt b/Tests/RunCMake/CTestCommandLine/FailureLabels-stderr.txt new file mode 100644 index 0000000..ba4235d --- /dev/null +++ b/Tests/RunCMake/CTestCommandLine/FailureLabels-stderr.txt @@ -0,0 +1 @@ +Errors while running CTest diff --git a/Tests/RunCMake/CTestCommandLine/FailureLabels-stdout.txt b/Tests/RunCMake/CTestCommandLine/FailureLabels-stdout.txt new file mode 100644 index 0000000..3fa9fb8 --- /dev/null +++ b/Tests/RunCMake/CTestCommandLine/FailureLabels-stdout.txt @@ -0,0 +1,4 @@ +The following tests FAILED: +[ ]+1 - ShortName \(Failed\) Label1 Label2 +[ ]+2 - LongerName \(Failed\) Label3 +[ ]+3 - Long_Test_Name_That_Is_Over_Fifty_Characters_In_Length \(Failed\) Label4 diff --git a/Tests/RunCMake/CTestCommandLine/PrintLabels-stdout.txt b/Tests/RunCMake/CTestCommandLine/PrintLabels-stdout.txt new file mode 100644 index 0000000..21791aa --- /dev/null +++ b/Tests/RunCMake/CTestCommandLine/PrintLabels-stdout.txt @@ -0,0 +1,6 @@ +^Test project [^ +]*/Tests/RunCMake/CTestCommandLine/PrintLabels +All Labels: + Label1 + Label2 + Label3$ diff --git a/Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake b/Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake index 190c6c1..b2374ca 100644 --- a/Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake +++ b/Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake @@ -7,6 +7,36 @@ set(ENV{no_proxy} "$ENV{no_proxy},badhostname.invalid") set(RunCMake_TEST_TIMEOUT 60) +block() + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/FailureLabels) + set(RunCMake_TEST_NO_CLEAN 1) + file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}") + file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}") + file(WRITE "${RunCMake_TEST_BINARY_DIR}/CTestTestfile.cmake" " +add_test(ShortName \"${CMAKE_COMMAND}\" -E false) +set_tests_properties(ShortName PROPERTIES LABELS \"Label1;Label2\") +add_test(LongerName \"${CMAKE_COMMAND}\" -E false) +set_tests_properties(LongerName PROPERTIES LABELS \"Label3\") +add_test(Long_Test_Name_That_Is_Over_Fifty_Characters_In_Length \"${CMAKE_COMMAND}\" -E false) +set_tests_properties(Long_Test_Name_That_Is_Over_Fifty_Characters_In_Length PROPERTIES LABELS \"Label4\") +") + run_cmake_command(FailureLabels ${CMAKE_CTEST_COMMAND}) +endblock() + +block() + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/PrintLabels) + set(RunCMake_TEST_NO_CLEAN 1) + file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}") + file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}") + file(WRITE "${RunCMake_TEST_BINARY_DIR}/CTestTestfile.cmake" " +add_test(A \"${CMAKE_COMMAND}\" -E true) +set_tests_properties(A PROPERTIES LABELS \"Label1;Label2\") +add_test(B \"${CMAKE_COMMAND}\" -E true) +set_tests_properties(B PROPERTIES LABELS \"Label3\") +") + run_cmake_command(PrintLabels ${CMAKE_CTEST_COMMAND} --print-labels) +endblock() + run_cmake_command(repeat-opt-bad1 ${CMAKE_CTEST_COMMAND} --repeat until-pass ) diff --git a/Tests/RunCMake/Codegen/CMakeLists.txt b/Tests/RunCMake/Codegen/CMakeLists.txt new file mode 100644 index 0000000..f65150d --- /dev/null +++ b/Tests/RunCMake/Codegen/CMakeLists.txt @@ -0,0 +1,7 @@ +cmake_minimum_required(VERSION 3.29) +project(${RunCMake_TEST} LANGUAGES C) + +# This value is read from the top level CMakeLists.txt +cmake_policy(SET CMP0171 NEW) + +include(${RunCMake_TEST}.cmake) diff --git a/Tests/RunCMake/Codegen/RunCMakeTest.cmake b/Tests/RunCMake/Codegen/RunCMakeTest.cmake new file mode 100644 index 0000000..bbd70b0 --- /dev/null +++ b/Tests/RunCMake/Codegen/RunCMakeTest.cmake @@ -0,0 +1,33 @@ +include(RunCMake) + +function(run_codegen case) + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${case}-build) + + run_cmake(${case}) + + set(RunCMake_TEST_NO_CLEAN 1) + + run_cmake_command(${case}-build ${CMAKE_COMMAND} --build . --target codegen --config Debug) +endfunction() + +# Builds codegen target when there are no custom commands marked codegen +run_codegen("no-codegen") + +# We don't want codegen to drive parts of the project that are EXCLUDE_FROM_ALL +run_codegen("exclude-from-all") + +# Ensures codegen builds minimal build graphs +run_codegen("min-graph-1") +run_codegen("min-graph-2") +run_codegen("min-graph-3") + +# Handle specific cases that can affect codegen +run_codegen("add-dependencies") +run_codegen("add-custom-command-depends") +run_codegen("byproducts") + +# Error handling +run_cmake("implicit-depends") +run_cmake("implicit-depends-append-codegen") +run_cmake("append-implicit-depends") +run_cmake("no-output") diff --git a/Tests/RunCMake/Codegen/add-custom-command-depends-build-check.cmake b/Tests/RunCMake/Codegen/add-custom-command-depends-build-check.cmake new file mode 100644 index 0000000..d371d73 --- /dev/null +++ b/Tests/RunCMake/Codegen/add-custom-command-depends-build-check.cmake @@ -0,0 +1,5 @@ +set(filename "${RunCMake_TEST_BINARY_DIR}/generated.hpp") +if (NOT EXISTS "${filename}") + set(RunCMake_TEST_FAILED "expected file NOT created:\n ${filename}") + return() +endif() diff --git a/Tests/RunCMake/Codegen/add-custom-command-depends.cmake b/Tests/RunCMake/Codegen/add-custom-command-depends.cmake new file mode 100644 index 0000000..793ab5f --- /dev/null +++ b/Tests/RunCMake/Codegen/add-custom-command-depends.cmake @@ -0,0 +1,16 @@ +add_custom_target(foobar + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/generated.h.in + ${CMAKE_CURRENT_BINARY_DIR}/generated.h +) + +add_custom_command( + OUTPUT generated.hpp + # This test will fail if DEPENDS isn't accounted for in the codegen build graph + DEPENDS foobar + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/generated.h + ${CMAKE_CURRENT_BINARY_DIR}/generated.hpp + CODEGEN +) + +add_custom_target(hpp_creator ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/generated.hpp) diff --git a/Tests/RunCMake/Codegen/add-dependencies-build-check.cmake b/Tests/RunCMake/Codegen/add-dependencies-build-check.cmake new file mode 100644 index 0000000..d371d73 --- /dev/null +++ b/Tests/RunCMake/Codegen/add-dependencies-build-check.cmake @@ -0,0 +1,5 @@ +set(filename "${RunCMake_TEST_BINARY_DIR}/generated.hpp") +if (NOT EXISTS "${filename}") + set(RunCMake_TEST_FAILED "expected file NOT created:\n ${filename}") + return() +endif() diff --git a/Tests/RunCMake/Codegen/add-dependencies.cmake b/Tests/RunCMake/Codegen/add-dependencies.cmake new file mode 100644 index 0000000..fbb7e99 --- /dev/null +++ b/Tests/RunCMake/Codegen/add-dependencies.cmake @@ -0,0 +1,18 @@ +add_custom_target(foobar + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/generated.h.in + ${CMAKE_CURRENT_BINARY_DIR}/generated.h +) + +add_custom_command( + OUTPUT generated.hpp + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/generated.h + ${CMAKE_CURRENT_BINARY_DIR}/generated.hpp + CODEGEN +) + +add_custom_target(hpp_creator ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/generated.hpp) + +# This test will fail if add_dependencies isn't account for in the +# codegen build graph +add_dependencies(hpp_creator foobar) diff --git a/Tests/RunCMake/Codegen/append-implicit-depends-result.txt b/Tests/RunCMake/Codegen/append-implicit-depends-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/Codegen/append-implicit-depends-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/Codegen/append-implicit-depends-stderr.txt b/Tests/RunCMake/Codegen/append-implicit-depends-stderr.txt new file mode 100644 index 0000000..c8ef03e --- /dev/null +++ b/Tests/RunCMake/Codegen/append-implicit-depends-stderr.txt @@ -0,0 +1,2 @@ +CMake Error: + Cannot append IMPLICIT_DEPENDS to existing CODEGEN custom command\. diff --git a/Tests/RunCMake/Codegen/append-implicit-depends.cmake b/Tests/RunCMake/Codegen/append-implicit-depends.cmake new file mode 100644 index 0000000..d212fe5 --- /dev/null +++ b/Tests/RunCMake/Codegen/append-implicit-depends.cmake @@ -0,0 +1,19 @@ +add_custom_command( + OUTPUT + ${CMAKE_CURRENT_BINARY_DIR}/main.cpp + COMMAND + ${CMAKE_COMMAND} -E + copy ${CMAKE_CURRENT_SOURCE_DIR}/error.c + ${CMAKE_CURRENT_BINARY_DIR}/main.cpp + CODEGEN +) + +add_custom_command( + OUTPUT + ${CMAKE_CURRENT_BINARY_DIR}/main.cpp + + # ERROR out if IMPLICIT_DEPENDS is used with CODEGEN + IMPLICIT_DEPENDS C main.c + + APPEND +) diff --git a/Tests/RunCMake/Codegen/byproducts-build-check.cmake b/Tests/RunCMake/Codegen/byproducts-build-check.cmake new file mode 100644 index 0000000..d371d73 --- /dev/null +++ b/Tests/RunCMake/Codegen/byproducts-build-check.cmake @@ -0,0 +1,5 @@ +set(filename "${RunCMake_TEST_BINARY_DIR}/generated.hpp") +if (NOT EXISTS "${filename}") + set(RunCMake_TEST_FAILED "expected file NOT created:\n ${filename}") + return() +endif() diff --git a/Tests/RunCMake/Codegen/byproducts.cmake b/Tests/RunCMake/Codegen/byproducts.cmake new file mode 100644 index 0000000..ea0b6c7 --- /dev/null +++ b/Tests/RunCMake/Codegen/byproducts.cmake @@ -0,0 +1,19 @@ +add_custom_target(foobar + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/generated.h.in + ${CMAKE_CURRENT_BINARY_DIR}/generated.h + BYPRODUCTS + ${CMAKE_CURRENT_BINARY_DIR}/generated.h +) + +# This codegen step relies on the BYPRODUCTS of the previous command. +# If foobar isn't properly accounted for as a dependency it will fail. +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/generated.hpp + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/generated.h + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/generated.h + ${CMAKE_CURRENT_BINARY_DIR}/generated.hpp + CODEGEN +) + +add_custom_target(hpp_creator ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/generated.hpp) diff --git a/Tests/RunCMake/Codegen/error.c b/Tests/RunCMake/Codegen/error.c new file mode 100644 index 0000000..34cb350 --- /dev/null +++ b/Tests/RunCMake/Codegen/error.c @@ -0,0 +1 @@ +#error "This file should not be compiled" diff --git a/Tests/RunCMake/Codegen/exclude-from-all.cmake b/Tests/RunCMake/Codegen/exclude-from-all.cmake new file mode 100644 index 0000000..bcd4ac0 --- /dev/null +++ b/Tests/RunCMake/Codegen/exclude-from-all.cmake @@ -0,0 +1,11 @@ +add_custom_command( + OUTPUT + ${CMAKE_CURRENT_BINARY_DIR}/generated.h + COMMAND + ${CMAKE_COMMAND} -E false + CODEGEN +) + +# We don't want codegen to drive parts of the project that are EXCLUDE_FROM_ALL. +# This tests that foobar is properly excluded from the codegen build. +add_executable(foobar EXCLUDE_FROM_ALL error.c ${CMAKE_CURRENT_BINARY_DIR}/generated.h) diff --git a/Tests/RunCMake/Codegen/generated.h.in b/Tests/RunCMake/Codegen/generated.h.in new file mode 100644 index 0000000..82ccf67 --- /dev/null +++ b/Tests/RunCMake/Codegen/generated.h.in @@ -0,0 +1 @@ +// hello diff --git a/Tests/RunCMake/Codegen/implicit-depends-append-codegen-result.txt b/Tests/RunCMake/Codegen/implicit-depends-append-codegen-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/Codegen/implicit-depends-append-codegen-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/Codegen/implicit-depends-append-codegen-stderr.txt b/Tests/RunCMake/Codegen/implicit-depends-append-codegen-stderr.txt new file mode 100644 index 0000000..570cf62 --- /dev/null +++ b/Tests/RunCMake/Codegen/implicit-depends-append-codegen-stderr.txt @@ -0,0 +1,4 @@ +^CMake Error at implicit-depends-append-codegen\.cmake:[0-9]+ \(add_custom_command\): + add_custom_command CODEGEN may not be used with APPEND\. +Call Stack \(most recent call first\): + CMakeLists\.txt:[0-9]+ \(include\)$ diff --git a/Tests/RunCMake/Codegen/implicit-depends-append-codegen.cmake b/Tests/RunCMake/Codegen/implicit-depends-append-codegen.cmake new file mode 100644 index 0000000..76151cc --- /dev/null +++ b/Tests/RunCMake/Codegen/implicit-depends-append-codegen.cmake @@ -0,0 +1,18 @@ +add_custom_command( + OUTPUT + ${CMAKE_CURRENT_BINARY_DIR}/main.cpp + + # ERROR out if IMPLICIT_DEPENDS is used with CODEGEN + IMPLICIT_DEPENDS C main.c +) + +add_custom_command( + OUTPUT + ${CMAKE_CURRENT_BINARY_DIR}/main.cpp + COMMAND + ${CMAKE_COMMAND} -E + copy ${CMAKE_CURRENT_SOURCE_DIR}/error.c + ${CMAKE_CURRENT_BINARY_DIR}/main.cpp + CODEGEN + APPEND +) diff --git a/Tests/RunCMake/Codegen/implicit-depends-result.txt b/Tests/RunCMake/Codegen/implicit-depends-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/Codegen/implicit-depends-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/Codegen/implicit-depends-stderr.txt b/Tests/RunCMake/Codegen/implicit-depends-stderr.txt new file mode 100644 index 0000000..b9ea8f4 --- /dev/null +++ b/Tests/RunCMake/Codegen/implicit-depends-stderr.txt @@ -0,0 +1,4 @@ +CMake Error at implicit-depends\.cmake:[0-9]+ \(add_custom_command\): + add_custom_command CODEGEN is not compatible with IMPLICIT_DEPENDS\. +Call Stack \(most recent call first\): + CMakeLists\.txt:[0-9]+ \(include\) diff --git a/Tests/RunCMake/Codegen/implicit-depends.cmake b/Tests/RunCMake/Codegen/implicit-depends.cmake new file mode 100644 index 0000000..011d4b3 --- /dev/null +++ b/Tests/RunCMake/Codegen/implicit-depends.cmake @@ -0,0 +1,11 @@ +add_custom_command( + OUTPUT + ${CMAKE_CURRENT_BINARY_DIR}/main.cpp + COMMAND + ${CMAKE_COMMAND} -E + copy ${CMAKE_CURRENT_SOURCE_DIR}/error.c + ${CMAKE_CURRENT_BINARY_DIR}/main.cpp + CODEGEN + # ERROR out if IMPLICIT_DEPENDS is used with CODEGEN + IMPLICIT_DEPENDS C main.c +) diff --git a/Tests/RunCMake/Autogen/exe.cpp b/Tests/RunCMake/Codegen/main.c index f8b643a..8488f4e 100644 --- a/Tests/RunCMake/Autogen/exe.cpp +++ b/Tests/RunCMake/Codegen/main.c @@ -1,4 +1,4 @@ -int main() +int main(void) { return 0; } diff --git a/Tests/RunCMake/Codegen/min-graph-1-build-check.cmake b/Tests/RunCMake/Codegen/min-graph-1-build-check.cmake new file mode 100644 index 0000000..32e1557 --- /dev/null +++ b/Tests/RunCMake/Codegen/min-graph-1-build-check.cmake @@ -0,0 +1,13 @@ +set(filename "${RunCMake_TEST_BINARY_DIR}/generated.h") +if (NOT EXISTS "${filename}") + set(RunCMake_TEST_FAILED "expected file NOT created:\n ${filename}") + return() +endif() + +# foobar should be built since it was needed +# by the code generation +set(filename "${RunCMake_TEST_BINARY_DIR}/foobar.txt") +if (NOT EXISTS "${filename}") + set(RunCMake_TEST_FAILED "expected file NOT created:\n ${filename}") + return() +endif() diff --git a/Tests/RunCMake/Codegen/min-graph-1.cmake b/Tests/RunCMake/Codegen/min-graph-1.cmake new file mode 100644 index 0000000..ea47b8f --- /dev/null +++ b/Tests/RunCMake/Codegen/min-graph-1.cmake @@ -0,0 +1,26 @@ +add_executable(foobar main.c) +add_custom_command( + TARGET foobar POST_BUILD + COMMAND ${CMAKE_COMMAND} -E + copy ${CMAKE_CURRENT_SOURCE_DIR}/generated.h.in + ${CMAKE_CURRENT_BINARY_DIR}/foobar.txt +) + +add_custom_command( + OUTPUT + ${CMAKE_CURRENT_BINARY_DIR}/generated.h + COMMAND + ${CMAKE_COMMAND} -E + copy ${CMAKE_CURRENT_SOURCE_DIR}/generated.h.in + ${CMAKE_CURRENT_BINARY_DIR}/generated.h + COMMAND + # Generate a header file that requires foobar + foobar + CODEGEN +) + +add_library(errorlib + # If this library is built error.c will cause the build to fail + error.c + ${CMAKE_CURRENT_BINARY_DIR}/generated.h +) diff --git a/Tests/RunCMake/Codegen/min-graph-2-build-check.cmake b/Tests/RunCMake/Codegen/min-graph-2-build-check.cmake new file mode 100644 index 0000000..fab168b --- /dev/null +++ b/Tests/RunCMake/Codegen/min-graph-2-build-check.cmake @@ -0,0 +1,5 @@ +set(filename "${RunCMake_TEST_BINARY_DIR}/generated.h") +if (NOT EXISTS "${filename}") + set(RunCMake_TEST_FAILED "expected file NOT created:\n ${filename}") + return() +endif() diff --git a/Tests/RunCMake/Codegen/min-graph-2.cmake b/Tests/RunCMake/Codegen/min-graph-2.cmake new file mode 100644 index 0000000..277a901 --- /dev/null +++ b/Tests/RunCMake/Codegen/min-graph-2.cmake @@ -0,0 +1,18 @@ +add_custom_command( + OUTPUT + ${CMAKE_CURRENT_BINARY_DIR}/generated.h + COMMAND + ${CMAKE_COMMAND} -E + copy ${CMAKE_CURRENT_SOURCE_DIR}/generated.h.in + ${CMAKE_CURRENT_BINARY_DIR}/generated.h + CODEGEN +) + +# This target should not be built. It has no reason +# to be part of the codegen build graph +add_custom_target(error_custom_target ALL + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/generated.h + + # Cause the build to fail + COMMAND ${CMAKE_COMMAND} -E false +) diff --git a/Tests/RunCMake/Codegen/min-graph-3-build-check.cmake b/Tests/RunCMake/Codegen/min-graph-3-build-check.cmake new file mode 100644 index 0000000..734777b --- /dev/null +++ b/Tests/RunCMake/Codegen/min-graph-3-build-check.cmake @@ -0,0 +1,5 @@ +set(filename "${RunCMake_TEST_BINARY_DIR}/error_lib.c") +if (NOT EXISTS "${filename}") + set(RunCMake_TEST_FAILED "expected file NOT created:\n ${filename}") + return() +endif() diff --git a/Tests/RunCMake/Codegen/min-graph-3.cmake b/Tests/RunCMake/Codegen/min-graph-3.cmake new file mode 100644 index 0000000..c7d61dc --- /dev/null +++ b/Tests/RunCMake/Codegen/min-graph-3.cmake @@ -0,0 +1,12 @@ +add_custom_command( + OUTPUT + ${CMAKE_CURRENT_BINARY_DIR}/error_lib.c + COMMAND + ${CMAKE_COMMAND} -E + copy ${CMAKE_CURRENT_SOURCE_DIR}/error.c + ${CMAKE_CURRENT_BINARY_DIR}/error_lib.c + CODEGEN +) + +# This test will fail if error_lib.c is actually compiled +add_executable(foobar ${CMAKE_CURRENT_BINARY_DIR}/error_lib.c) diff --git a/Tests/RunCMake/Codegen/no-codegen-check.cmake b/Tests/RunCMake/Codegen/no-codegen-check.cmake new file mode 100644 index 0000000..97fc46b --- /dev/null +++ b/Tests/RunCMake/Codegen/no-codegen-check.cmake @@ -0,0 +1,5 @@ +# Verify generated.hpp was NOT created +set(unexpected "${RunCMake_TEST_BINARY_DIR}/generated.hpp") +if(EXISTS "${unexpected}") + set(RunCMake_TEST_FAILED "unexpected file created:\n ${unexpected}") +endif() diff --git a/Tests/RunCMake/Codegen/no-codegen.cmake b/Tests/RunCMake/Codegen/no-codegen.cmake new file mode 100644 index 0000000..00ddd03 --- /dev/null +++ b/Tests/RunCMake/Codegen/no-codegen.cmake @@ -0,0 +1,6 @@ +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/generated.hpp + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/generated.h.in + ${CMAKE_CURRENT_BINARY_DIR}/generated.hpp +) diff --git a/Tests/RunCMake/Codegen/no-output-result.txt b/Tests/RunCMake/Codegen/no-output-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/Codegen/no-output-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/Codegen/no-output-stderr.txt b/Tests/RunCMake/Codegen/no-output-stderr.txt new file mode 100644 index 0000000..7aad679 --- /dev/null +++ b/Tests/RunCMake/Codegen/no-output-stderr.txt @@ -0,0 +1,4 @@ +CMake Error at no-output\.cmake:[0-9]+ \(add_custom_command\): + add_custom_command CODEGEN requires at least 1 OUTPUT\. +Call Stack \(most recent call first\): + CMakeLists\.txt:[0-9]+ \(include\) diff --git a/Tests/RunCMake/Codegen/no-output.cmake b/Tests/RunCMake/Codegen/no-output.cmake new file mode 100644 index 0000000..61eb83c --- /dev/null +++ b/Tests/RunCMake/Codegen/no-output.cmake @@ -0,0 +1,11 @@ +add_custom_target(foobar + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/generated.h.in + ${CMAKE_CURRENT_BINARY_DIR}/generated.h +) + +add_custom_command(TARGET foobar POST_BUILD + COMMAND + ${CMAKE_COMMAND} -E true + CODEGEN +) diff --git a/Tests/RunCMake/CommandLine/RunCMakeTest.cmake b/Tests/RunCMake/CommandLine/RunCMakeTest.cmake index 7a5a334..8e5bffe 100644 --- a/Tests/RunCMake/CommandLine/RunCMakeTest.cmake +++ b/Tests/RunCMake/CommandLine/RunCMakeTest.cmake @@ -49,6 +49,16 @@ run_cmake_command(E___run_co_compile-no--- ${CMAKE_COMMAND} -E __run_co_compile run_cmake_command(E___run_co_compile-no-cc ${CMAKE_COMMAND} -E __run_co_compile --iwyu=iwyu-does-not-exist --) run_cmake_command(E___run_co_compile-tidy-remove-fixes ${CMAKE_COMMAND} -E __run_co_compile "--tidy=${CMAKE_COMMAND}\\;-E\\;true\\;--export-fixes=${RunCMake_BINARY_DIR}/tidy-fixes.yaml" -- ${CMAKE_COMMAND} -E true) +block() + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/list-cache-build) + run_cmake(list-cache) + set(RunCMake_TEST_NO_CLEAN 1) + run_cmake_command(list-cache-LR ${CMAKE_COMMAND} . -LR MIDDLE) + run_cmake_command(list-cache-LRA ${CMAKE_COMMAND} . -LRA MIDDLE) + run_cmake_command(list-cache-LRH ${CMAKE_COMMAND} . -LRH MIDDLE) + run_cmake_command(list-cache-LRAH ${CMAKE_COMMAND} . -LRAH MIDDLE) +endblock() + run_cmake_command(G_no-arg ${CMAKE_COMMAND} -B DummyBuildDir -G) run_cmake_command(G_bad-arg ${CMAKE_COMMAND} -B DummyBuildDir -G NoSuchGenerator) run_cmake_command(P_no-arg ${CMAKE_COMMAND} -P) @@ -1128,3 +1138,17 @@ if(RunCMake_GENERATOR MATCHES "^Visual Studio 12 2013") endif() run_cmake_with_options(help-arbitrary "--help" "CMAKE_CXX_IGNORE_EXTENSIONS") + +if (WIN32 OR DEFINED ENV{HOME}) + set(config_dir_test print-config-dir) + if (WIN32) + set(config_dir_test print-config-dir-win) + elseif(APPLE) + set(config_dir_test print-config-dir-apple) + endif() + unset(ENV{CMAKE_CONFIG_DIR}) + unset(ENV{XDG_CONFIG_HOME}) + run_cmake_command(${config_dir_test} ${CMAKE_COMMAND} "--print-config-dir") +endif() +set(ENV{CMAKE_CONFIG_DIR} cmake_config_dir) +run_cmake_command(print-config-dir-env ${CMAKE_COMMAND} "--print-config-dir") diff --git a/Tests/RunCMake/CommandLine/list-cache-LR-stdout.txt b/Tests/RunCMake/CommandLine/list-cache-LR-stdout.txt new file mode 100644 index 0000000..9a4e0db --- /dev/null +++ b/Tests/RunCMake/CommandLine/list-cache-LR-stdout.txt @@ -0,0 +1,3 @@ +-- Cache values +MIDDLE_ENTRY_1:STRING=1 +MIDDLE_ENTRY_2:STRING=2$ diff --git a/Tests/RunCMake/CommandLine/list-cache-LRA-stdout.txt b/Tests/RunCMake/CommandLine/list-cache-LRA-stdout.txt new file mode 100644 index 0000000..a452355 --- /dev/null +++ b/Tests/RunCMake/CommandLine/list-cache-LRA-stdout.txt @@ -0,0 +1,4 @@ +-- Cache values +MIDDLE_ENTRY_1:STRING=1 +MIDDLE_ENTRY_2:STRING=2 +MIDDLE_ENTRY_3:STRING=3$ diff --git a/Tests/RunCMake/CommandLine/list-cache-LRAH-stdout.txt b/Tests/RunCMake/CommandLine/list-cache-LRAH-stdout.txt new file mode 100644 index 0000000..cf502c1 --- /dev/null +++ b/Tests/RunCMake/CommandLine/list-cache-LRAH-stdout.txt @@ -0,0 +1,9 @@ +-- Cache values +// mid 1 +MIDDLE_ENTRY_1:STRING=1 + +// mid 2 +MIDDLE_ENTRY_2:STRING=2 + +// mid 3 +MIDDLE_ENTRY_3:STRING=3$ diff --git a/Tests/RunCMake/CommandLine/list-cache-LRH-stdout.txt b/Tests/RunCMake/CommandLine/list-cache-LRH-stdout.txt new file mode 100644 index 0000000..0f6b3a0d --- /dev/null +++ b/Tests/RunCMake/CommandLine/list-cache-LRH-stdout.txt @@ -0,0 +1,6 @@ +-- Cache values +// mid 1 +MIDDLE_ENTRY_1:STRING=1 + +// mid 2 +MIDDLE_ENTRY_2:STRING=2$ diff --git a/Tests/RunCMake/CommandLine/list-cache.cmake b/Tests/RunCMake/CommandLine/list-cache.cmake new file mode 100644 index 0000000..5617054 --- /dev/null +++ b/Tests/RunCMake/CommandLine/list-cache.cmake @@ -0,0 +1,6 @@ +set(EARLY_ENTRY_1 "1" CACHE STRING "early") +set(MIDDLE_ENTRY_1 "1" CACHE STRING "mid 1") +set(MIDDLE_ENTRY_2 "2" CACHE STRING "mid 2") +set(MIDDLE_ENTRY_3 "3" CACHE STRING "mid 3") +mark_as_advanced(MIDDLE_ENTRY_3) +set(LATER_ENTRY_1 "1" CACHE STRING "later") diff --git a/Tests/RunCMake/CommandLine/print-config-dir-apple-stdout.txt b/Tests/RunCMake/CommandLine/print-config-dir-apple-stdout.txt new file mode 100644 index 0000000..59db482 --- /dev/null +++ b/Tests/RunCMake/CommandLine/print-config-dir-apple-stdout.txt @@ -0,0 +1 @@ +.*Library/Application\\ Support/CMake$ diff --git a/Tests/RunCMake/CommandLine/print-config-dir-env-stdout.txt b/Tests/RunCMake/CommandLine/print-config-dir-env-stdout.txt new file mode 100644 index 0000000..49f1d7b --- /dev/null +++ b/Tests/RunCMake/CommandLine/print-config-dir-env-stdout.txt @@ -0,0 +1 @@ +cmake_config_dir diff --git a/Tests/RunCMake/CommandLine/print-config-dir-stdout.txt b/Tests/RunCMake/CommandLine/print-config-dir-stdout.txt new file mode 100644 index 0000000..53f6c8b --- /dev/null +++ b/Tests/RunCMake/CommandLine/print-config-dir-stdout.txt @@ -0,0 +1 @@ +.*config/cmake$ diff --git a/Tests/RunCMake/CommandLine/print-config-dir-win-stdout.txt b/Tests/RunCMake/CommandLine/print-config-dir-win-stdout.txt new file mode 100644 index 0000000..9df0671 --- /dev/null +++ b/Tests/RunCMake/CommandLine/print-config-dir-win-stdout.txt @@ -0,0 +1 @@ +.*AppData\\Local\\CMake$ diff --git a/Tests/RunCMake/DependencyGraph/RunCMakeTest.cmake b/Tests/RunCMake/DependencyGraph/RunCMakeTest.cmake index f7959dc..1981fce 100644 --- a/Tests/RunCMake/DependencyGraph/RunCMakeTest.cmake +++ b/Tests/RunCMake/DependencyGraph/RunCMakeTest.cmake @@ -60,7 +60,7 @@ run_cmake(Property) run_optimize_test(OptimizeShared SharedTop) run_optimize_test(OptimizeStatic StaticTop) -if(CMAKE_Fortran_COMPILER) +if(CMake_TEST_Fortran) run_optimize_test(OptimizeFortran FortranTop) endif() diff --git a/Tests/RunCMake/DependencyGraph/mylib.f90 b/Tests/RunCMake/DependencyGraph/mylib.f90 index 104768f..d3fac72 100644 --- a/Tests/RunCMake/DependencyGraph/mylib.f90 +++ b/Tests/RunCMake/DependencyGraph/mylib.f90 @@ -1,3 +1,4 @@ function mylib_fortran() + integer :: mylib_fortran mylib_fortran = 42 end function mylib_fortran diff --git a/Tests/RunCMake/Framework/FrameworkLayout-check-common.cmake b/Tests/RunCMake/Framework/FrameworkLayout-check-common.cmake new file mode 100644 index 0000000..13a91df --- /dev/null +++ b/Tests/RunCMake/Framework/FrameworkLayout-check-common.cmake @@ -0,0 +1,24 @@ +macro(check_plist key expect) + execute_process( + COMMAND plutil -extract "${key}" xml1 "${plist-file}" -o - + RESULT_VARIABLE result + OUTPUT_VARIABLE actual + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + if(actual MATCHES "<string>([^<>]*)</string>") + set(actual "${CMAKE_MATCH_1}") + endif() + if(NOT "${actual}" STREQUAL "${expect}") + string(CONCAT RunCMake_TEST_FAILED + "Framework Info.plist key \"${key}\" has value:\n" + " \"${actual}\"\n" + "but we expected:\n" + " \"${expect}\"" + ) + endif() +endmacro() + +check_plist(CFBundleIdentifier MyFrameworkId) +check_plist(CFBundleName MyFrameworkBundleName) +check_plist(CFBundleVersion 3.2.1) +check_plist(CFBundleShortVersionString 3) diff --git a/Tests/RunCMake/Framework/FrameworkLayout.cmake b/Tests/RunCMake/Framework/FrameworkLayout.cmake index d09e8a0..e230e07 100644 --- a/Tests/RunCMake/Framework/FrameworkLayout.cmake +++ b/Tests/RunCMake/Framework/FrameworkLayout.cmake @@ -15,6 +15,10 @@ if("${CMAKE_FRAMEWORK}" STREQUAL "") FRAMEWORK TRUE) endif() set_target_properties(Framework PROPERTIES + MACOSX_FRAMEWORK_BUNDLE_NAME MyFrameworkBundleName + MACOSX_FRAMEWORK_BUNDLE_VERSION 3.2.1 + MACOSX_FRAMEWORK_SHORT_VERSION_STRING 3 + MACOSX_FRAMEWORK_IDENTIFIER MyFrameworkId PUBLIC_HEADER foo.h RESOURCE "res.txt") set_source_files_properties(flatresource.txt PROPERTIES MACOSX_PACKAGE_LOCATION Resources) diff --git a/Tests/RunCMake/Framework/FrameworkMultiConfigPostfix-build-final-check.cmake b/Tests/RunCMake/Framework/FrameworkMultiConfigPostfix-build-final-check.cmake index 76fe6b8..7a1d70e 100644 --- a/Tests/RunCMake/Framework/FrameworkMultiConfigPostfix-build-final-check.cmake +++ b/Tests/RunCMake/Framework/FrameworkMultiConfigPostfix-build-final-check.cmake @@ -20,26 +20,32 @@ else() endif() if(NOT IS_DIRECTORY ${framework_dir}) - message(SEND_ERROR "Framework dir not found at ${framework_dir}") + set(RunCMake_TEST_FAILED "Framework dir not found at \n ${framework_dir}") + return() endif() if(IS_DIRECTORY ${non_existent_debug_framework_dir}) - message(SEND_ERROR - "A framework dir with a debug suffix should not exist at ${non_existent_debug_framework_dir}") + set(RunCMake_TEST_FAILED + "A framework dir with a debug suffix should not exist at \n ${non_existent_debug_framework_dir}") + return() endif() if(NOT IS_SYMLINK "${symlink_release_path}") - message(SEND_ERROR "Release framework symlink not found at ${symlink_release_path}") + set(RunCMake_TEST_FAILED "Release framework symlink not found at \n ${symlink_release_path}") + return() endif() if(NOT IS_SYMLINK "${symlink_debug_path}") - message(SEND_ERROR "Debug framework symlink not found at ${symlink_debug_path}") + set(RunCMake_TEST_FAILED "Debug framework symlink not found at \n ${symlink_debug_path}") + return() endif() if(NOT EXISTS "${framework_release_path}") - message(SEND_ERROR "Release framework not found at ${framework_release_path}") + set(RunCMake_TEST_FAILED "Release framework not found at \n ${framework_release_path}") + return() endif() if(NOT EXISTS "${framework_debug_path}") - message(SEND_ERROR "Debug framework not found at ${framework_debug_path}") + set(RunCMake_TEST_FAILED "Debug framework not found at \n ${framework_debug_path}") + return() endif() diff --git a/Tests/RunCMake/Framework/OSXFrameworkLayout-build-check.cmake b/Tests/RunCMake/Framework/OSXFrameworkLayout-build-check.cmake index eb71394..b436128 100644 --- a/Tests/RunCMake/Framework/OSXFrameworkLayout-build-check.cmake +++ b/Tests/RunCMake/Framework/OSXFrameworkLayout-build-check.cmake @@ -10,41 +10,53 @@ set(plist-file "${framework-resources}/Info.plist") set(framework-header "${framework-dir}/Headers/foo.h") if(NOT IS_DIRECTORY ${framework-dir}) - message(SEND_ERROR "Framework not found at ${framework-dir}") + set(RunCMake_TEST_FAILED "Framework not found at \n ${framework-dir}") + return() endif() if(NOT EXISTS ${plist-file}) - message(SEND_ERROR "plist file not found at ${plist-file}") + set(RunCMake_TEST_FAILED "plist file not found at \n ${plist-file}") + return() endif() if(NOT EXISTS ${framework-library}) - message(SEND_ERROR "Framework library not found at ${framework-library}") + set(RunCMake_TEST_FAILED "Framework library not found at \n ${framework-library}") + return() endif() if(NOT EXISTS ${framework-resource-file}) - message(SEND_ERROR "Framework resource file not found at ${framework-resource-file}") + set(RunCMake_TEST_FAILED "Framework resource file not found at \n ${framework-resource-file}") + return() endif() if(NOT EXISTS ${framework-flat-resource-file}) - message(SEND_ERROR "Framework flat resource file not found at ${framework-flat-resource-file}") + set(RunCMake_TEST_FAILED "Framework flat resource file not found at \n ${framework-flat-resource-file}") + return() endif() if(NOT EXISTS ${framework-deep-resource-file}) - message(SEND_ERROR "Framework deep resource file not found at ${framework-deep-resource-file}") + set(RunCMake_TEST_FAILED "Framework deep resource file not found at \n ${framework-deep-resource-file}") + return() endif() if(NOT EXISTS ${framework-some-file}) - message(SEND_ERROR "Framework some file not found at ${framework-some-file}") + set(RunCMake_TEST_FAILED "Framework some file not found at \n ${framework-some-file}") + return() endif() if(NOT EXISTS ${framework-versions}) - message(SEND_ERROR "Framework versions not found at ${framework-versions}") + set(RunCMake_TEST_FAILED "Framework versions not found at \n ${framework-versions}") + return() endif() if(NOT EXISTS ${framework-resources}) - message(SEND_ERROR "Framework Resources not found at ${framework-resources}") + set(RunCMake_TEST_FAILED "Framework Resources not found at \n ${framework-resources}") + return() endif() if(NOT EXISTS ${framework-header}) - message(SEND_ERROR "Framework header file not found at ${framework-header}") + set(RunCMake_TEST_FAILED "Framework header file not found at \n ${framework-header}") + return() endif() + +include(${CMAKE_CURRENT_LIST_DIR}/FrameworkLayout-check-common.cmake) diff --git a/Tests/RunCMake/Framework/iOSFrameworkLayout-build-check.cmake b/Tests/RunCMake/Framework/iOSFrameworkLayout-build-check.cmake index 2da60d2..be9a5fe 100644 --- a/Tests/RunCMake/Framework/iOSFrameworkLayout-build-check.cmake +++ b/Tests/RunCMake/Framework/iOSFrameworkLayout-build-check.cmake @@ -10,41 +10,53 @@ set(plist-file "${framework-dir}/Info.plist") set(framework-header "${framework-dir}/Headers/foo.h") if(NOT IS_DIRECTORY ${framework-dir}) - message(SEND_ERROR "Framework not found at ${framework-dir}") + set(RunCMake_TEST_FAILED "Framework not found at\n ${framework-dir}") + return() endif() if(NOT EXISTS ${plist-file}) - message(SEND_ERROR "plist file not found at ${plist-file}") + set(RunCMake_TEST_FAILED "plist file not found at\n ${plist-file}") + return() endif() if(NOT EXISTS ${framework-library}) - message(SEND_ERROR "Framework library not found at ${framework-library}") + set(RunCMake_TEST_FAILED "Framework library not found at\n ${framework-library}") + return() endif() if(NOT EXISTS ${framework-resource-file}) - message(SEND_ERROR "Framework resource file not found at ${framework-resource-file}") + set(RunCMake_TEST_FAILED "Framework resource file not found at\n ${framework-resource-file}") + return() endif() if(NOT EXISTS ${framework-flat-resource-file}) - message(SEND_ERROR "Framework flat resource file not found at ${framework-flat-resource-file}") + set(RunCMake_TEST_FAILED "Framework flat resource file not found at\n ${framework-flat-resource-file}") + return() endif() if(NOT EXISTS ${framework-deep-resource-file}) - message(SEND_ERROR "Framework deep resource file not found at ${framework-deep-resource-file}") + set(RunCMake_TEST_FAILED "Framework deep resource file not found at\n ${framework-deep-resource-file}") + return() endif() if(NOT EXISTS ${framework-some-file}) - message(SEND_ERROR "Framework some file not found at ${framework-some-file}") + set(RunCMake_TEST_FAILED "Framework some file not found at\n ${framework-some-file}") + return() endif() if(EXISTS ${framework-versions}) - message(SEND_ERROR "Framework versions found at ${framework-versions}") + set(RunCMake_TEST_FAILED "Framework versions found at\n ${framework-versions}") + return() endif() if(EXISTS ${framework-resources}) - message(SEND_ERROR "Framework Resources found at ${framework-resources}") + set(RunCMake_TEST_FAILED "Framework Resources found at\n ${framework-resources}") + return() endif() if(NOT EXISTS ${framework-header}) - message(SEND_ERROR "Framework headers not found at ${framework-header}") + set(RunCMake_TEST_FAILED "Framework headers not found at\n ${framework-header}") + return() endif() + +include(${CMAKE_CURRENT_LIST_DIR}/FrameworkLayout-check-common.cmake) diff --git a/Tests/RunCMake/InstallParallel/RunCMakeTest.cmake b/Tests/RunCMake/InstallParallel/RunCMakeTest.cmake index ae3f112..b64ff38 100644 --- a/Tests/RunCMake/InstallParallel/RunCMakeTest.cmake +++ b/Tests/RunCMake/InstallParallel/RunCMakeTest.cmake @@ -1,17 +1,59 @@ include(RunCMake) -function(install_test test parallel install_target check_script) +function(install_test test) + cmake_parse_arguments(ARGS "PARALLEL;NINJA;TOUCH_CACHE" "ARGS;COMPONENT" "" ${ARGN}) set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${test}-install) - set(RunCMake_TEST_OPTIONS -DINSTALL_PARALLEL=${parallel}) + set(RunCMake_TEST_OPTIONS -DINSTALL_PARALLEL=${ARGS_PARALLEL} -DCMAKE_INSTALL_PREFIX=install) + set(RunCMake_TEST_OUTPUT_MERGE 1) if (NOT RunCMake_GENERATOR_IS_MULTI_CONFIG) list(APPEND RunCMake_TEST_OPTIONS -DCMAKE_BUILD_TYPE=Debug) endif() + if (ARGS_COMPONENT) + list(APPEND ARGS_ARGS "--component ${ARGS_COMPONENT}") + endif() run_cmake(install) set(RunCMake_TEST_NO_CLEAN 1) - run_cmake_command(${test}-install ${CMAKE_COMMAND} --build . --config Debug -t ${install_target}) - set(RunCMake_TEST_COMMAND_WORKING_DIRECTORY ${RunCMake_SOURCE_DIR}) - run_cmake_command(verify-parallel ${CMAKE_COMMAND} -P ${check_script} ${RunCMake_TEST_BINARY_DIR}/.ninja_log) + if (ARGS_TOUCH_CACHE) + run_cmake_command(${test}-sleep ${CMAKE_COMMAND} -E sleep 2) + run_cmake_command(${test}-touch + ${CMAKE_COMMAND} -E touch ${RunCMake_TEST_BINARY_DIR}/CMakeFiles/cmake.check_cache) + endif() + if (ARGS_NINJA) + if (ARGS_PARALLEL) + set(INSTALL_COUNT 5) + else() + set(INSTALL_COUNT 1) + endif() + set(RunCMake-check-file check-num-installs.cmake) + run_cmake_command(${test}-install ${CMAKE_COMMAND} --build . --config Debug ${ARGS_ARGS}) + unset(RunCMake-check-file) + else() + if (ARGS_COMPONENT) + if(ARGS_COMPONENT MATCHES "^[a-zA-Z0-9_.+-]+$") + set(INSTALL_MANIFEST "install_manifest_${ARGS_COMPONENT}.txt") + else() + string(MD5 COMPONENT_HASH "${ARGS_COMPONENT}") + set(INSTALL_MANIFEST "install_manifest_${COMPONENT_HASH}.txt") + endif() + set(INSTALL_COUNT 0) + else() + set(INSTALL_MANIFEST "install_manifest.txt") + set(INSTALL_COUNT 5) + endif() + set(INSTALL_MANIFEST ${RunCMake_TEST_BINARY_DIR}/${INSTALL_MANIFEST}) + set(RunCMake-check-file check-manifest.cmake) + run_cmake_command(${test}-install ${CMAKE_COMMAND} --install . ${ARGS_ARGS}) + unset(RunCMake-check-file) + endif() endfunction() -install_test(parallel 1 install/parallel check-parallel.cmake) -install_test(no-parallel 0 install check-single.cmake) +install_test(parallel PARALLEL ARGS "-j 4") +install_test(no-parallel ARGS "-j 4") +install_test(out-of-date-json TOUCH_CACHE PARALLEL ARGS "-j 4") +install_test(component PARALLEL ARGS "-j 4" COMPONENT "ALPHANUMERIC123") +install_test(component-hash PARALLEL ARGS "-j 4" COMPONENT "@#$") + +if(RunCMake_GENERATOR MATCHES "Ninja") + install_test(ninja-parallel ARGS "-t install/parallel" NINJA PARALLEL) + install_test(ninja-no-parallel ARGS "-t install" NINJA) +endif() diff --git a/Tests/RunCMake/InstallParallel/check-manifest.cmake b/Tests/RunCMake/InstallParallel/check-manifest.cmake new file mode 100644 index 0000000..4253e60 --- /dev/null +++ b/Tests/RunCMake/InstallParallel/check-manifest.cmake @@ -0,0 +1,10 @@ +if (NOT EXISTS ${INSTALL_MANIFEST}) + set(RunCMake_TEST_FAILED "Install manifest not generated: ${INSTALL_MANIFEST}") +endif() + +file(STRINGS ${INSTALL_MANIFEST} lines ENCODING UTF-8) +list(LENGTH lines len) + +if (NOT len EQUAL ${INSTALL_COUNT}) + set(RunCMake_TEST_FAILED "Install manifest missing content: ${len}/${INSTALL_COUNT}") +endif() diff --git a/Tests/RunCMake/InstallParallel/check-num-installs.cmake b/Tests/RunCMake/InstallParallel/check-num-installs.cmake new file mode 100644 index 0000000..9137997 --- /dev/null +++ b/Tests/RunCMake/InstallParallel/check-num-installs.cmake @@ -0,0 +1,7 @@ +file(STRINGS ${RunCMake_TEST_BINARY_DIR}/.ninja_log lines ENCODING UTF-8) +list(FILTER lines INCLUDE REGEX ".*install.*util") +list(LENGTH lines len) + +if (NOT ${len} STREQUAL ${INSTALL_COUNT}) + set(RunCMake_TEST_FAILED "Wrong number of cmake -P calls to install: ${len}/${INSTALL_COUNT}") +endif() diff --git a/Tests/RunCMake/InstallParallel/check-parallel.cmake b/Tests/RunCMake/InstallParallel/check-parallel.cmake deleted file mode 100644 index 4e4cf52..0000000 --- a/Tests/RunCMake/InstallParallel/check-parallel.cmake +++ /dev/null @@ -1,15 +0,0 @@ -include(read-ninja-install.cmake) - -foreach(line ${lines}) - string(REPLACE "\t" ";" line ${line}) - list(GET line 0 start) - list(GET line 1 end) - list(APPEND start_times ${start}) - list(APPEND end_times ${end}) -endforeach() -list(GET start_times 1 start_2) -list(GET end_times 0 end_1) - -if (NOT start_2 LESS end_1) - message(FATAL_ERROR "Install is not parallel") -endif() diff --git a/Tests/RunCMake/InstallParallel/check-single.cmake b/Tests/RunCMake/InstallParallel/check-single.cmake deleted file mode 100644 index 79c4d5c..0000000 --- a/Tests/RunCMake/InstallParallel/check-single.cmake +++ /dev/null @@ -1,5 +0,0 @@ -include(read-ninja-install.cmake) -list(LENGTH lines len) -if (NOT ${len} STREQUAL "1") - message(FATAL_ERROR "Expected single installation call") -endif() diff --git a/Tests/RunCMake/InstallParallel/install.cmake b/Tests/RunCMake/InstallParallel/install.cmake index 54b5078..a64b5d7 100644 --- a/Tests/RunCMake/InstallParallel/install.cmake +++ b/Tests/RunCMake/InstallParallel/install.cmake @@ -1,4 +1,4 @@ -install(CODE "message(installing:${CMAKE_CURRENT_SOURCE_DIR})") +install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt TYPE DATA RENAME root.txt) if (INSTALL_PARALLEL) set_property(GLOBAL PROPERTY INSTALL_PARALLEL ON) endif() diff --git a/Tests/RunCMake/InstallParallel/ninja-no-parallel-install-stdout.txt b/Tests/RunCMake/InstallParallel/ninja-no-parallel-install-stdout.txt new file mode 100644 index 0000000..aa0a9d3 --- /dev/null +++ b/Tests/RunCMake/InstallParallel/ninja-no-parallel-install-stdout.txt @@ -0,0 +1,12 @@ +\-\- Install configuration:[^ +]* +\-\- Installing:[^ +]* +\-\- Installing:[^ +]* +\-\- Installing:[^ +]* +\-\- Installing:[^ +]* +\-\- Installing:[^ +]* diff --git a/Tests/RunCMake/InstallParallel/ninja-parallel-install-stdout.txt b/Tests/RunCMake/InstallParallel/ninja-parallel-install-stdout.txt new file mode 100644 index 0000000..f49acf1 --- /dev/null +++ b/Tests/RunCMake/InstallParallel/ninja-parallel-install-stdout.txt @@ -0,0 +1,25 @@ +\[1\/5\] Installing only the local directory... +\-\- Install configuration:[^ +]* +\-\- Installing:[^ +]* +\[2\/5\] Installing only the local directory... +\-\- Install configuration:[^ +]* +\-\- Installing:[^ +]* +\[3\/5\] Installing only the local directory... +\-\- Install configuration:[^ +]* +\-\- Installing:[^ +]* +\[4\/5\] Installing only the local directory... +\-\- Install configuration:[^ +]* +\-\- Installing:[^ +]* +\[5\/5\] Installing only the local directory... +\-\- Install configuration:[^ +]* +\-\- Installing:[^ +]* diff --git a/Tests/RunCMake/InstallParallel/no-parallel-install-stderr.txt b/Tests/RunCMake/InstallParallel/no-parallel-install-stderr.txt deleted file mode 100644 index 8f69a04..0000000 --- a/Tests/RunCMake/InstallParallel/no-parallel-install-stderr.txt +++ /dev/null @@ -1,5 +0,0 @@ -installing:.* -installing:.* -installing:.* -installing:.* -installing:.* diff --git a/Tests/RunCMake/InstallParallel/no-parallel-install-stdout.txt b/Tests/RunCMake/InstallParallel/no-parallel-install-stdout.txt new file mode 100644 index 0000000..aa0a9d3 --- /dev/null +++ b/Tests/RunCMake/InstallParallel/no-parallel-install-stdout.txt @@ -0,0 +1,12 @@ +\-\- Install configuration:[^ +]* +\-\- Installing:[^ +]* +\-\- Installing:[^ +]* +\-\- Installing:[^ +]* +\-\- Installing:[^ +]* +\-\- Installing:[^ +]* diff --git a/Tests/RunCMake/InstallParallel/out-of-date-json-install-stdout.txt b/Tests/RunCMake/InstallParallel/out-of-date-json-install-stdout.txt new file mode 100644 index 0000000..aa0a9d3 --- /dev/null +++ b/Tests/RunCMake/InstallParallel/out-of-date-json-install-stdout.txt @@ -0,0 +1,12 @@ +\-\- Install configuration:[^ +]* +\-\- Installing:[^ +]* +\-\- Installing:[^ +]* +\-\- Installing:[^ +]* +\-\- Installing:[^ +]* +\-\- Installing:[^ +]* diff --git a/Tests/RunCMake/InstallParallel/parallel-install-stdout.txt b/Tests/RunCMake/InstallParallel/parallel-install-stdout.txt index e0d2a56..61a52b0 100644 --- a/Tests/RunCMake/InstallParallel/parallel-install-stdout.txt +++ b/Tests/RunCMake/InstallParallel/parallel-install-stdout.txt @@ -1,15 +1,30 @@ -\[1\/5\] Installing only the local directory... -\-\- Install configuration: \"Debug\" -installing:.* -\[2\/5\] Installing only the local directory... -\-\- Install configuration: \"Debug\" -installing:.* -\[3\/5\] Installing only the local directory... -\-\- Install configuration: \"Debug\" -installing:.* -\[4\/5\] Installing only the local directory... -\-\- Install configuration: \"Debug\" -installing:.* -\[5\/5\] Installing only the local directory... -\-\- Install configuration: \"Debug\" -installing:.* +\[1\/5\] [^ +]* +\-\- Install configuration:[^ +]* +\-\- Installing:[^ +]* +\[2\/5\] [^ +]* +\-\- Install configuration:[^ +]* +\-\- Installing:[^ +]* +\[3\/5\] [^ +]* +\-\- Install configuration:[^ +]* +\-\- Installing:[^ +]* +\[4\/5\] [^ +]* +\-\- Install configuration:[^ +]* +\-\- Installing:[^ +]* +\[5\/5\] [^ +]* +\-\- Install configuration:[^ +]* +\-\- Installing:[^ +]* diff --git a/Tests/RunCMake/InstallParallel/read-ninja-install.cmake b/Tests/RunCMake/InstallParallel/read-ninja-install.cmake deleted file mode 100644 index 731c5eb..0000000 --- a/Tests/RunCMake/InstallParallel/read-ninja-install.cmake +++ /dev/null @@ -1,4 +0,0 @@ -set(ninja_log ${CMAKE_ARGV3}) -file(STRINGS ${ninja_log} lines) -list(POP_FRONT lines) -list(FILTER lines INCLUDE REGEX ".*install.*util") diff --git a/Tests/RunCMake/InstallParallel/subdir-1/CMakeLists.txt b/Tests/RunCMake/InstallParallel/subdir-1/CMakeLists.txt index 6b235c4..139724d 100644 --- a/Tests/RunCMake/InstallParallel/subdir-1/CMakeLists.txt +++ b/Tests/RunCMake/InstallParallel/subdir-1/CMakeLists.txt @@ -1,3 +1,3 @@ -install(CODE "message(installing:${CMAKE_CURRENT_SOURCE_DIR})") +install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt TYPE DATA RENAME 1.txt) add_subdirectory(subdir-3) add_subdirectory(subdir-4) diff --git a/Tests/RunCMake/InstallParallel/subdir-1/subdir-3/CMakeLists.txt b/Tests/RunCMake/InstallParallel/subdir-1/subdir-3/CMakeLists.txt index dd7eac3..71dea43 100644 --- a/Tests/RunCMake/InstallParallel/subdir-1/subdir-3/CMakeLists.txt +++ b/Tests/RunCMake/InstallParallel/subdir-1/subdir-3/CMakeLists.txt @@ -1 +1 @@ -install(CODE "message(installing:${CMAKE_CURRENT_SOURCE_DIR})") +install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt TYPE DATA RENAME 3.txt) diff --git a/Tests/RunCMake/InstallParallel/subdir-1/subdir-4/CMakeLists.txt b/Tests/RunCMake/InstallParallel/subdir-1/subdir-4/CMakeLists.txt index dd7eac3..bfda21e 100644 --- a/Tests/RunCMake/InstallParallel/subdir-1/subdir-4/CMakeLists.txt +++ b/Tests/RunCMake/InstallParallel/subdir-1/subdir-4/CMakeLists.txt @@ -1 +1 @@ -install(CODE "message(installing:${CMAKE_CURRENT_SOURCE_DIR})") +install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt TYPE DATA RENAME 4.txt) diff --git a/Tests/RunCMake/InstallParallel/subdir-2/CMakeLists.txt b/Tests/RunCMake/InstallParallel/subdir-2/CMakeLists.txt index dd7eac3..e6efc54 100644 --- a/Tests/RunCMake/InstallParallel/subdir-2/CMakeLists.txt +++ b/Tests/RunCMake/InstallParallel/subdir-2/CMakeLists.txt @@ -1 +1 @@ -install(CODE "message(installing:${CMAKE_CURRENT_SOURCE_DIR})") +install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt TYPE DATA RENAME 2.txt) diff --git a/Tests/RunCMake/Ninja/RunCMakeTest.cmake b/Tests/RunCMake/Ninja/RunCMakeTest.cmake index 8b24c16..d1f99b2 100644 --- a/Tests/RunCMake/Ninja/RunCMakeTest.cmake +++ b/Tests/RunCMake/Ninja/RunCMakeTest.cmake @@ -108,7 +108,10 @@ run_cmake(JobPoolUsesTerminal) run_cmake(RspFileC) run_cmake(RspFileCXX) -if(TEST_Fortran) +if(CMake_TEST_Fortran + # FIXME(lfortran): The compiler does not support response files. + AND NOT CMAKE_Fortran_COMPILER_ID STREQUAL "LFortran" + ) run_cmake(RspFileFortran) endif() diff --git a/Tests/RunCMake/NinjaMultiConfig/RunCMakeTest.cmake b/Tests/RunCMake/NinjaMultiConfig/RunCMakeTest.cmake index 88fd1e8..f1e8b30 100644 --- a/Tests/RunCMake/NinjaMultiConfig/RunCMakeTest.cmake +++ b/Tests/RunCMake/NinjaMultiConfig/RunCMakeTest.cmake @@ -17,7 +17,7 @@ function(check_files dir) list(SORT expected) file(GLOB_RECURSE actual "${dir}/*") - list(FILTER actual EXCLUDE REGEX "/CMakeFiles/|\\.ninja$|/CMakeCache\\.txt$|/target_files[^/]*\\.cmake$|/\\.ninja_[^/]*$|/cmake_install\\.cmake$|\\.ilk$|\\.manifest$|\\.odx$|\\.pdb$|\\.exp$|/install_manifest\\.txt$|/\\.qt/QtDeploySupport[^/]*\\.cmake$") + list(FILTER actual EXCLUDE REGEX "/CMakeFiles/|\\.ninja$|/CMakeCache\\.txt$|/target_files[^/]*\\.cmake$|/\\.ninja_[^/]*$|/cmake_install\\.cmake$|\\.ilk$|\\.manifest$|\\.odx$|\\.pdb$|\\.exp$|/install_manifest\\.txt$|/\\.qt/(QtDeploySupport|QtDeployTargets)[^/]*\\.cmake$") foreach(f IN LISTS _check_files_INCLUDE _check_files_EXCLUDE) if(EXISTS ${f}) list(APPEND actual ${f}) diff --git a/Tests/RunCMake/ParseImplicitData/linux-Fortran-GNU-13.3.0-static-libquadmath.input b/Tests/RunCMake/ParseImplicitData/linux-Fortran-GNU-13.3.0-static-libquadmath.input new file mode 100644 index 0000000..b1ab2f0 --- /dev/null +++ b/Tests/RunCMake/ParseImplicitData/linux-Fortran-GNU-13.3.0-static-libquadmath.input @@ -0,0 +1,80 @@ +CMAKE_LANG=Fortran +CMAKE_LINKER=/usr/bin/ld +CMAKE_Fortran_COMPILER_ABI= +CMAKE_Fortran_COMPILER_AR=/usr/bin/gcc-ar-13 +CMAKE_Fortran_COMPILER_ARCHITECTURE_ID= +CMAKE_Fortran_COMPILER_EXTERNAL_TOOLCHAIN= +CMAKE_Fortran_COMPILER_ID=GNU +CMAKE_Fortran_COMPILER_LAUNCHER= +CMAKE_Fortran_COMPILER_LOADED=1 +CMAKE_Fortran_COMPILER_RANLIB=/usr/bin/gcc-ranlib-13 +CMAKE_Fortran_COMPILER_TARGET= +CMAKE_Fortran_COMPILER_VERSION=13.3.0 +CMAKE_Fortran_COMPILER_VERSION_INTERAL= +CMAKE_Fortran_IMPLICIT_LINK_LIBRARY_quadmath=/usr/lib/gcc/x86_64-linux-gnu/13/libquadmath.a +Change Dir: '/tmp/ii/CMakeFiles/CMakeTmp' + +Run Build Command(s): /tmp/CMake/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_9b1c8/fast +/usr/bin/gmake -f CMakeFiles/cmTC_9b1c8.dir/build.make CMakeFiles/cmTC_9b1c8.dir/build +gmake[1]: Entering directory '/tmp/ii/CMakeFiles/CMakeTmp' +Building Fortran object CMakeFiles/cmTC_9b1c8.dir/CMakeFortranCompilerABI.F.o +/usr/bin/gfortran -static-libquadmath -v -c /tmp/CMake/Modules/CMakeFortranCompilerABI.F -o CMakeFiles/cmTC_9b1c8.dir/CMakeFortranCompilerABI.F.o +Using built-in specs. +COLLECT_GCC=/usr/bin/gfortran +OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa +OFFLOAD_TARGET_DEFAULT=1 +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Debian 13.3.0-1' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-libstdcxx-backtrace --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/reproducible-path/gcc-13-13.3.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/reproducible-path/gcc-13-13.3.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=3 +Thread model: posix +Supported LTO compression algorithms: zlib zstd +gcc version 13.3.0 (Debian 13.3.0-1) +COLLECT_GCC_OPTIONS='-static-libquadmath' '-v' '-c' '-o' 'CMakeFiles/cmTC_9b1c8.dir/CMakeFortranCompilerABI.F.o' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_9b1c8.dir/' + /usr/libexec/gcc/x86_64-linux-gnu/13/f951 /tmp/CMake/Modules/CMakeFortranCompilerABI.F -ffixed-form -cpp=/tmp/ccPxd9HW.f90 -quiet -v -imultiarch x86_64-linux-gnu /tmp/CMake/Modules/CMakeFortranCompilerABI.F -quiet -dumpdir CMakeFiles/cmTC_9b1c8.dir/ -dumpbase CMakeFortranCompilerABI.F.F -dumpbase-ext .F -mtune=generic -march=x86-64 -version -fintrinsic-modules-path /usr/lib/gcc/x86_64-linux-gnu/13/finclude -fpre-include=/usr/include/finclude/x86_64-linux-gnu/math-vector-fortran.h -o /tmp/ccWH03h1.s +GNU Fortran (Debian 13.3.0-1) version 13.3.0 (x86_64-linux-gnu) + compiled by GNU C version 13.3.0, GMP version 6.3.0, MPFR version 4.2.1, MPC version 1.3.1, isl version isl-0.26-GMP + +GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 +ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" +ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed/x86_64-linux-gnu" +ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed" +ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/../../../../x86_64-linux-gnu/include" +#include "..." search starts here: +#include <...> search starts here: + /usr/lib/gcc/x86_64-linux-gnu/13/finclude + /usr/lib/gcc/x86_64-linux-gnu/13/include + /usr/local/include + /usr/include/x86_64-linux-gnu + /usr/include +End of search list. +COLLECT_GCC_OPTIONS='-static-libquadmath' '-v' '-c' '-o' 'CMakeFiles/cmTC_9b1c8.dir/CMakeFortranCompilerABI.F.o' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_9b1c8.dir/' + as -v --64 -o CMakeFiles/cmTC_9b1c8.dir/CMakeFortranCompilerABI.F.o /tmp/ccWH03h1.s +GNU assembler version 2.42.50 (x86_64-linux-gnu) using BFD version (GNU Binutils for Debian) 2.42.50.20240625 +COMPILER_PATH=/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/ +LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../:/lib/:/usr/lib/ +COLLECT_GCC_OPTIONS='-static-libquadmath' '-v' '-c' '-o' 'CMakeFiles/cmTC_9b1c8.dir/CMakeFortranCompilerABI.F.o' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_9b1c8.dir/CMakeFortranCompilerABI.F.' +Linking Fortran executable cmTC_9b1c8 +/tmp/CMake/bin/cmake -E cmake_link_script CMakeFiles/cmTC_9b1c8.dir/link.txt --verbose=1 +/usr/bin/gfortran -v -Wl,-v -static-libquadmath CMakeFiles/cmTC_9b1c8.dir/CMakeFortranCompilerABI.F.o -o cmTC_9b1c8 +Driving: /usr/bin/gfortran -v -Wl,-v -static-libquadmath CMakeFiles/cmTC_9b1c8.dir/CMakeFortranCompilerABI.F.o -o cmTC_9b1c8 -l gfortran -l m -shared-libgcc +Using built-in specs. +COLLECT_GCC=/usr/bin/gfortran +COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper +OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa +OFFLOAD_TARGET_DEFAULT=1 +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Debian 13.3.0-1' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-libstdcxx-backtrace --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/reproducible-path/gcc-13-13.3.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/reproducible-path/gcc-13-13.3.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=3 +Thread model: posix +Supported LTO compression algorithms: zlib zstd +gcc version 13.3.0 (Debian 13.3.0-1) +Reading specs from /usr/lib/gcc/x86_64-linux-gnu/13/libgfortran.spec +rename spec lib to liborig +COLLECT_GCC_OPTIONS='-v' '-static-libquadmath' '-o' 'cmTC_9b1c8' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_9b1c8-' +COMPILER_PATH=/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/ +LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../:/lib/:/usr/lib/ +COLLECT_GCC_OPTIONS='-v' '-static-libquadmath' '-o' 'cmTC_9b1c8' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_9b1c8.' + /usr/libexec/gcc/x86_64-linux-gnu/13/collect2 -plugin /usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper -plugin-opt=-fresolution=/tmp/ccBedNT7.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lquadmath -plugin-opt=-pass-through=-lm -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -o cmTC_9b1c8 /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/13 -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/13/../../.. -v CMakeFiles/cmTC_9b1c8.dir/CMakeFortranCompilerABI.F.o -lgfortran -lm -lgcc_s -lgcc --as-needed -Bstatic -lquadmath -Bdynamic --no-as-needed -lm -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o +collect2 version 13.3.0 +/usr/bin/ld -plugin /usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper -plugin-opt=-fresolution=/tmp/ccBedNT7.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lquadmath -plugin-opt=-pass-through=-lm -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -o cmTC_9b1c8 /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/13 -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/13/../../.. -v CMakeFiles/cmTC_9b1c8.dir/CMakeFortranCompilerABI.F.o -lgfortran -lm -lgcc_s -lgcc --as-needed -Bstatic -lquadmath -Bdynamic --no-as-needed -lm -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o +GNU ld (GNU Binutils for Debian) 2.42.50.20240625 +COLLECT_GCC_OPTIONS='-v' '-static-libquadmath' '-o' 'cmTC_9b1c8' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_9b1c8.' +gmake[1]: Leaving directory '/tmp/ii/CMakeFiles/CMakeTmp' diff --git a/Tests/RunCMake/ParseImplicitIncludeInfo/ParseImplicitIncludeInfo.cmake b/Tests/RunCMake/ParseImplicitIncludeInfo/ParseImplicitIncludeInfo.cmake index c5bb5d7..c58722d 100644 --- a/Tests/RunCMake/ParseImplicitIncludeInfo/ParseImplicitIncludeInfo.cmake +++ b/Tests/RunCMake/ParseImplicitIncludeInfo/ParseImplicitIncludeInfo.cmake @@ -24,6 +24,7 @@ set(targets linux-C-GNU-10.2.1-static-libgcc linux-CXX-GNU-10.2.1-static-libstdc++ linux-Fortran-GNU-10.2.1-static-libgfortran + linux-Fortran-GNU-13.3.0-static-libquadmath linux-C-GNU-12.2.0 linux-CXX-GNU-12.2.0 linux-Fortran-GNU-12.2.0 linux-C-Intel-18.0.0.20170811 linux-CXX-Intel-18.0.0.20170811 linux-C-Intel-2021.10.0.20230609 linux-CXX-Intel-2021.10.0.20230609 linux-Fortran-Intel-2021.10.0.20230609 diff --git a/Tests/RunCMake/ParseImplicitIncludeInfo/results/linux-Fortran-GNU-13.3.0-static-libquadmath.output b/Tests/RunCMake/ParseImplicitIncludeInfo/results/linux-Fortran-GNU-13.3.0-static-libquadmath.output new file mode 100644 index 0000000..defc375 --- /dev/null +++ b/Tests/RunCMake/ParseImplicitIncludeInfo/results/linux-Fortran-GNU-13.3.0-static-libquadmath.output @@ -0,0 +1 @@ +/usr/lib/gcc/x86_64-linux-gnu/13/finclude;/usr/lib/gcc/x86_64-linux-gnu/13/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include diff --git a/Tests/RunCMake/ParseImplicitLinkInfo/ParseImplicitLinkInfo.cmake b/Tests/RunCMake/ParseImplicitLinkInfo/ParseImplicitLinkInfo.cmake index 8d6c739..c988536 100644 --- a/Tests/RunCMake/ParseImplicitLinkInfo/ParseImplicitLinkInfo.cmake +++ b/Tests/RunCMake/ParseImplicitLinkInfo/ParseImplicitLinkInfo.cmake @@ -24,6 +24,7 @@ set(targets linux-C-GNU-10.2.1-static-libgcc linux-CXX-GNU-10.2.1-static-libstdc++ linux-Fortran-GNU-10.2.1-static-libgfortran + linux-Fortran-GNU-13.3.0-static-libquadmath linux-C-GNU-12.2.0 linux-CXX-GNU-12.2.0 linux-Fortran-GNU-12.2.0 linux-C-Intel-18.0.0.20170811 linux-CXX-Intel-18.0.0.20170811 linux-C-Intel-2021.10.0.20230609 linux-CXX-Intel-2021.10.0.20230609 linux-Fortran-Intel-2021.10.0.20230609 diff --git a/Tests/RunCMake/ParseImplicitLinkInfo/results/linux-Fortran-GNU-13.3.0-static-libquadmath.output b/Tests/RunCMake/ParseImplicitLinkInfo/results/linux-Fortran-GNU-13.3.0-static-libquadmath.output new file mode 100644 index 0000000..1595560 --- /dev/null +++ b/Tests/RunCMake/ParseImplicitLinkInfo/results/linux-Fortran-GNU-13.3.0-static-libquadmath.output @@ -0,0 +1,4 @@ +libs=gfortran;m;gcc_s;gcc;/usr/lib/gcc/x86_64-linux-gnu/13/libquadmath.a;m;c;gcc_s;gcc +dirs=/usr/lib/gcc/x86_64-linux-gnu/13;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib +library_arch=x86_64-linux-gnu +linker_tool=/usr/bin/ld diff --git a/Tests/RunCMake/README.rst b/Tests/RunCMake/README.rst index ea6db54..f4bcc57 100644 --- a/Tests/RunCMake/README.rst +++ b/Tests/RunCMake/README.rst @@ -6,9 +6,11 @@ precisely checking their return code and stdout/stderr content. The RunCMake infrastructure is useful for testing error cases and diagnostic output. -See also `../README.rst`_ and the `CMake Source Code Guide`_. +See also `../README.rst`_, the `CMake Testing Guide`_, +and the `CMake Source Code Guide`_. .. _`../README.rst`: ../README.rst +.. _`CMake Testing Guide`: ../../Help/dev/testing.rst .. _`CMake Source Code Guide`: ../../Help/dev/source.rst .. _`CMakeLists.txt`: CMakeLists.txt diff --git a/Tests/RunCMake/VS10Project/RunCMakeTest.cmake b/Tests/RunCMake/VS10Project/RunCMakeTest.cmake index e0d74cf..85fefbf 100644 --- a/Tests/RunCMake/VS10Project/RunCMakeTest.cmake +++ b/Tests/RunCMake/VS10Project/RunCMakeTest.cmake @@ -98,6 +98,7 @@ run_cmake(DebugInformationFormat) run_cmake(VsCLREmpty) run_cmake(VsCLRPure) run_cmake(VsCLRSafe) +run_cmake(VsFrameworkReference) if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 19.20) run_cmake(VsCLRNetcore) diff --git a/Tests/RunCMake/VS10Project/VsFrameworkReference-check.cmake b/Tests/RunCMake/VS10Project/VsFrameworkReference-check.cmake new file mode 100644 index 0000000..7abe8a0 --- /dev/null +++ b/Tests/RunCMake/VS10Project/VsFrameworkReference-check.cmake @@ -0,0 +1,24 @@ +set(vcProjectFile "${RunCMake_TEST_BINARY_DIR}/foo.vcxproj") +if(NOT EXISTS "${vcProjectFile}") + set(RunCMake_TEST_FAILED "Project file ${vcProjectFile} does not exist.") + return() +endif() + +set(frameworkReferenceSet FALSE) + +file(STRINGS "${vcProjectFile}" lines) +foreach(line IN LISTS lines) + if(line MATCHES "^ *<FrameworkReference Include=\"([^\"]*)\" />$") + if("${CMAKE_MATCH_1}" STREQUAL "Microsoft.WindowsDesktop.App.WPF") + message(STATUS "foo.vcxproj has FrameworkReference set") + set(frameworkReferenceSet TRUE) + else() + message(STATUS "foo.vcxproj has FrameworkReference incorrectly set to ${CMAKE_MATCH_1}") + endif() + endif() +endforeach() + +if(NOT frameworkReferenceSet) + set(RunCMake_TEST_FAILED "FrameworkReference not found or not set correctly.") + return() +endif() diff --git a/Tests/RunCMake/VS10Project/VsFrameworkReference.cmake b/Tests/RunCMake/VS10Project/VsFrameworkReference.cmake new file mode 100644 index 0000000..0e4d6fb --- /dev/null +++ b/Tests/RunCMake/VS10Project/VsFrameworkReference.cmake @@ -0,0 +1,8 @@ +enable_language(CXX) + +add_executable(foo foo.cpp) + +set_target_properties(foo PROPERTIES + COMMON_LANGUAGE_RUNTIME "netcore" + DOTNET_TARGET_FRAMEWORK "net8.0-windows" + VS_FRAMEWORK_REFERENCES "Microsoft.WindowsDesktop.App.WPF") diff --git a/Tests/RunCMake/VsDotnetSdk/RunCMakeTest.cmake b/Tests/RunCMake/VsDotnetSdk/RunCMakeTest.cmake index 34259b7..0be77ae 100644 --- a/Tests/RunCMake/VsDotnetSdk/RunCMakeTest.cmake +++ b/Tests/RunCMake/VsDotnetSdk/RunCMakeTest.cmake @@ -1,7 +1,6 @@ cmake_policy(SET CMP0053 NEW) include(RunCMake) -run_cmake(VsDotnetSdkCustomCommandsTarget) run_cmake(VsDotnetSdkCustomCommandsSource) run_cmake(VsDotnetSdkStartupObject) run_cmake(VsDotnetSdkDefines) @@ -18,3 +17,16 @@ function(run_VsDotnetSdk) run_cmake_command(VsDotnetSdk-build ${CMAKE_COMMAND} --build . -- ${build_flags}) endfunction() run_VsDotnetSdk() + +function(runCmakeAndBuild CASE) + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${CASE}-build) + set(RunCMake_TEST_NO_CLEAN 1) + file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}") + file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}") + run_cmake(${CASE}) + set(build_flags /restore) + run_cmake_command(${CASE}-build ${CMAKE_COMMAND} --build . -- ${build_flags}) + run_cmake_command(${CASE}-build ${CMAKE_COMMAND} --build .) +endfunction() + +runCmakeAndBuild(VsDotnetSdkCustomCommandsTarget) diff --git a/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkCustomCommandsTarget-build-stdout.txt b/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkCustomCommandsTarget-build-stdout.txt new file mode 100644 index 0000000..890a8f1 --- /dev/null +++ b/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkCustomCommandsTarget-build-stdout.txt @@ -0,0 +1 @@ +.*"This should happen!".* diff --git a/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkCustomCommandsTarget-stderr.txt b/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkCustomCommandsTarget-stderr.txt deleted file mode 100644 index 90af627..0000000 --- a/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkCustomCommandsTarget-stderr.txt +++ /dev/null @@ -1,7 +0,0 @@ -CMake Error in CMakeLists.txt: - The target "foo" does not currently support add_custom_command as the - Visual Studio generators have not yet learned how to generate custom - commands in .Net SDK-style projects. - - -CMake Generate step failed. Build files cannot be regenerated correctly. diff --git a/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkCustomCommandsTarget.cmake b/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkCustomCommandsTarget.cmake index f5cd317..078d7dd 100644 --- a/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkCustomCommandsTarget.cmake +++ b/Tests/RunCMake/VsDotnetSdk/VsDotnetSdkCustomCommandsTarget.cmake @@ -8,5 +8,5 @@ set(CMAKE_DOTNET_SDK "Microsoft.NET.Sdk") add_library(foo SHARED lib1.cs) add_custom_command(TARGET foo PRE_BUILD - COMMAND echo "This shouldn't happen!" + COMMAND echo "This should happen!" VERBATIM) diff --git a/Tests/RunCMake/XcFramework/RunCMakeTest.cmake b/Tests/RunCMake/XcFramework/RunCMakeTest.cmake index 0d181ca..64505ff 100644 --- a/Tests/RunCMake/XcFramework/RunCMakeTest.cmake +++ b/Tests/RunCMake/XcFramework/RunCMakeTest.cmake @@ -1,5 +1,11 @@ include(RunCMake) +if(RunCMake_GENERATOR STREQUAL "Xcode") + set(maybe_ios_catalyst "") +else() + set(maybe_ios_catalyst ios-catalyst) +endif() + function(create_library type platform system_name archs sysroot) set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/create-${type}-${platform}-build) run_cmake_with_options(create-${type}-${platform} -DCMAKE_SYSTEM_NAME=${system_name} -DCMAKE_OSX_ARCHITECTURES=${archs} -DCMAKE_OSX_SYSROOT=${sysroot} -DCMAKE_INSTALL_PREFIX=${RunCMake_TEST_BINARY_DIR}/install) @@ -12,6 +18,9 @@ endfunction() function(create_libraries type) create_library(${type} macos Darwin "${macos_archs_2}" macosx) create_library(${type} ios iOS "arm64" iphoneos) + if(maybe_ios_catalyst) + create_library(${type} ios-catalyst iOS "${macos_archs_2}" macosx) + endif() create_library(${type} tvos tvOS "arm64" appletvos) create_library(${type} watchos watchOS "armv7k\\\\;arm64_32" watchos) if(CMake_TEST_XCODE_VERSION VERSION_GREATER_EQUAL 15.2) @@ -58,6 +67,9 @@ endfunction() function(create_executables name type) create_executable(${name}-macos ${type} Darwin "${macos_archs_2}" macosx) create_executable(${name}-ios ${type} iOS "arm64" iphoneos) + if(maybe_ios_catalyst) + create_executable(${name}-ios-catalyst ${type} iOS "${macos_archs_2}" macosx) + endif() create_executable(${name}-tvos ${type} tvOS "arm64" appletvos) create_executable(${name}-watchos ${type} watchOS "armv7k\\\\;arm64_32" watchos) if(CMake_TEST_XCODE_VERSION VERSION_GREATER_EQUAL 15.2) @@ -71,7 +83,7 @@ function(create_executables name type) endif() endfunction() -set(xcframework_platforms macos ios tvos watchos ios-simulator tvos-simulator watchos-simulator) +set(xcframework_platforms macos ios ${maybe_ios_catalyst} tvos watchos ios-simulator tvos-simulator watchos-simulator) if(CMake_TEST_XCODE_VERSION VERSION_GREATER_EQUAL 15.2) list(APPEND xcframework_platforms visionos visionos-simulator) endif() @@ -141,6 +153,20 @@ run_cmake_command(export-ios-install ${CMAKE_COMMAND} --install . ${_config_arg} unset(RunCMake_TEST_NO_CLEAN) unset(RunCMake_TEST_BINARY_DIR) +if(maybe_ios_catalyst) + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/export-ios-catalyst-build) + run_cmake_with_options(export-ios-catalyst -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=macosx "-DCMAKE_OSX_ARCHITECTURES=${macos_archs_1}" -DCMAKE_INSTALL_PREFIX=${RunCMake_BINARY_DIR}/export-install) + set(RunCMake_TEST_NO_CLEAN 1) + set(_config_arg) + if(RunCMake_GENERATOR_IS_MULTI_CONFIG) + set(_config_arg --config Release) + endif() + run_cmake_command(export-ios-catalyst-build ${CMAKE_COMMAND} --build . ${_config_arg}) + run_cmake_command(export-ios-catalyst-install ${CMAKE_COMMAND} --install . ${_config_arg}) + unset(RunCMake_TEST_NO_CLEAN) + unset(RunCMake_TEST_BINARY_DIR) +endif() + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/export-ios-simulator-build) run_cmake_with_options(export-ios-simulator -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator "-DCMAKE_OSX_ARCHITECTURES=${macos_archs_1}" -DCMAKE_INSTALL_PREFIX=${RunCMake_BINARY_DIR}/export-install) set(RunCMake_TEST_NO_CLEAN 1) @@ -175,6 +201,19 @@ else() set(src_dir "${RunCMake_SOURCE_DIR}") set(bld_dir "${RunCMake_BINARY_DIR}") endif() +if(maybe_ios_catalyst) + set(maybe_ios_catalyst_mylib + -library ${bld_dir}/export-install/lib/ios-catalyst/libmylib.a + -headers ${src_dir}/mylib/include + ) + set(maybe_ios_catalyst_mylib_genex + -library ${bld_dir}/export-install/lib/ios-catalyst/libmylib-genex.a + -headers ${src_dir}/mylib/include + ) +else() + set(maybe_ios_catalyst_mylib "") + set(maybe_ios_catalyst_mylib_genex "") +endif() set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/export-install) run_cmake_command(export-install-xcframework xcodebuild -create-xcframework -output ${bld_dir}/export-install/lib/mylib.xcframework @@ -182,6 +221,7 @@ run_cmake_command(export-install-xcframework xcodebuild -create-xcframework -headers ${src_dir}/mylib/include -library ${bld_dir}/export-install/lib/ios/libmylib.a -headers ${src_dir}/mylib/include + ${maybe_ios_catalyst_mylib} -library ${bld_dir}/export-install/lib/ios-simulator/libmylib.a -headers ${src_dir}/mylib/include ) @@ -191,6 +231,7 @@ run_cmake_command(export-install-xcframework-genex xcodebuild -create-xcframewor -headers ${src_dir}/mylib/include -library ${bld_dir}/export-install/lib/ios/libmylib-genex.a -headers ${src_dir}/mylib/include + ${maybe_ios_catalyst_mylib_genex} -library ${bld_dir}/export-install/lib/ios-simulator/libmylib-genex.a -headers ${src_dir}/mylib/include ) diff --git a/Tests/RunCMake/XcFramework/create-executable-framework-ios-catalyst.cmake b/Tests/RunCMake/XcFramework/create-executable-framework-ios-catalyst.cmake new file mode 100644 index 0000000..ce415ef --- /dev/null +++ b/Tests/RunCMake/XcFramework/create-executable-framework-ios-catalyst.cmake @@ -0,0 +1,2 @@ +set(CMAKE_OSX_DEPLOYMENT_TARGET "15.0") +include(create-executable.cmake) diff --git a/Tests/RunCMake/XcFramework/create-executable-framework-link-phase-ios-catalyst.cmake b/Tests/RunCMake/XcFramework/create-executable-framework-link-phase-ios-catalyst.cmake new file mode 100644 index 0000000..9351dd4 --- /dev/null +++ b/Tests/RunCMake/XcFramework/create-executable-framework-link-phase-ios-catalyst.cmake @@ -0,0 +1,2 @@ +set(CMAKE_OSX_DEPLOYMENT_TARGET "15.0") +include(create-executable-link-phase.cmake) diff --git a/Tests/RunCMake/XcFramework/create-executable-library-ios-catalyst.cmake b/Tests/RunCMake/XcFramework/create-executable-library-ios-catalyst.cmake new file mode 100644 index 0000000..ce415ef --- /dev/null +++ b/Tests/RunCMake/XcFramework/create-executable-library-ios-catalyst.cmake @@ -0,0 +1,2 @@ +set(CMAKE_OSX_DEPLOYMENT_TARGET "15.0") +include(create-executable.cmake) diff --git a/Tests/RunCMake/XcFramework/create-executable-library-link-phase-ios-catalyst.cmake b/Tests/RunCMake/XcFramework/create-executable-library-link-phase-ios-catalyst.cmake new file mode 100644 index 0000000..9351dd4 --- /dev/null +++ b/Tests/RunCMake/XcFramework/create-executable-library-link-phase-ios-catalyst.cmake @@ -0,0 +1,2 @@ +set(CMAKE_OSX_DEPLOYMENT_TARGET "15.0") +include(create-executable-link-phase.cmake) diff --git a/Tests/RunCMake/XcFramework/create-executable-target-framework-ios-catalyst.cmake b/Tests/RunCMake/XcFramework/create-executable-target-framework-ios-catalyst.cmake new file mode 100644 index 0000000..1682ed3 --- /dev/null +++ b/Tests/RunCMake/XcFramework/create-executable-target-framework-ios-catalyst.cmake @@ -0,0 +1,2 @@ +set(CMAKE_OSX_DEPLOYMENT_TARGET "15.0") +include(create-executable-target.cmake) diff --git a/Tests/RunCMake/XcFramework/create-executable-target-framework-link-phase-ios-catalyst.cmake b/Tests/RunCMake/XcFramework/create-executable-target-framework-link-phase-ios-catalyst.cmake new file mode 100644 index 0000000..55788f9 --- /dev/null +++ b/Tests/RunCMake/XcFramework/create-executable-target-framework-link-phase-ios-catalyst.cmake @@ -0,0 +1,2 @@ +set(CMAKE_OSX_DEPLOYMENT_TARGET "15.0") +include(create-executable-target-link-phase.cmake) diff --git a/Tests/RunCMake/XcFramework/create-executable-target-library-ios-catalyst.cmake b/Tests/RunCMake/XcFramework/create-executable-target-library-ios-catalyst.cmake new file mode 100644 index 0000000..1682ed3 --- /dev/null +++ b/Tests/RunCMake/XcFramework/create-executable-target-library-ios-catalyst.cmake @@ -0,0 +1,2 @@ +set(CMAKE_OSX_DEPLOYMENT_TARGET "15.0") +include(create-executable-target.cmake) diff --git a/Tests/RunCMake/XcFramework/create-executable-target-library-link-phase-ios-catalyst.cmake b/Tests/RunCMake/XcFramework/create-executable-target-library-link-phase-ios-catalyst.cmake new file mode 100644 index 0000000..55788f9 --- /dev/null +++ b/Tests/RunCMake/XcFramework/create-executable-target-library-link-phase-ios-catalyst.cmake @@ -0,0 +1,2 @@ +set(CMAKE_OSX_DEPLOYMENT_TARGET "15.0") +include(create-executable-target-link-phase.cmake) diff --git a/Tests/RunCMake/XcFramework/create-framework-ios-catalyst.cmake b/Tests/RunCMake/XcFramework/create-framework-ios-catalyst.cmake new file mode 100644 index 0000000..e5dcb9f --- /dev/null +++ b/Tests/RunCMake/XcFramework/create-framework-ios-catalyst.cmake @@ -0,0 +1,2 @@ +set(CMAKE_OSX_DEPLOYMENT_TARGET "15.0") +include(create-framework.cmake) diff --git a/Tests/RunCMake/XcFramework/create-library-ios-catalyst.cmake b/Tests/RunCMake/XcFramework/create-library-ios-catalyst.cmake new file mode 100644 index 0000000..31128c1 --- /dev/null +++ b/Tests/RunCMake/XcFramework/create-library-ios-catalyst.cmake @@ -0,0 +1,2 @@ +set(CMAKE_OSX_DEPLOYMENT_TARGET "15.0") +include(create-library.cmake) diff --git a/Tests/RunCMake/XcFramework/export-common.cmake b/Tests/RunCMake/XcFramework/export-common.cmake index 844b7d3..2e2e5ee 100644 --- a/Tests/RunCMake/XcFramework/export-common.cmake +++ b/Tests/RunCMake/XcFramework/export-common.cmake @@ -36,6 +36,7 @@ generate_apple_platform_selection_file(mylib-config-top.cmake INSTALL_DESTINATION lib/cmake/mylib MACOS_INCLUDE_FILE lib/macos/cmake/mylib/mylib-config.cmake IOS_INCLUDE_FILE lib/ios/cmake/mylib/mylib-config.cmake + IOS_CATALYST_INCLUDE_FILE lib/ios-catalyst/cmake/mylib/mylib-config.cmake IOS_SIMULATOR_INCLUDE_FILE lib/ios-simulator/cmake/mylib/mylib-config.cmake ) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/mylib-config-top.cmake DESTINATION lib/cmake/mylib RENAME mylib-config.cmake) diff --git a/Tests/RunCMake/XcFramework/export-ios-catalyst.cmake b/Tests/RunCMake/XcFramework/export-ios-catalyst.cmake new file mode 100644 index 0000000..28a7a20 --- /dev/null +++ b/Tests/RunCMake/XcFramework/export-ios-catalyst.cmake @@ -0,0 +1,4 @@ +set(platform_name ios-catalyst) +set(platform_arg IOS_CATALYST_INCLUDE_FILE) +set(CMAKE_OSX_DEPLOYMENT_TARGET "15.0") +include(export-common.cmake) diff --git a/Tests/RunCMake/cmake_pkg_config/CMakeLists.txt b/Tests/RunCMake/cmake_pkg_config/CMakeLists.txt new file mode 100644 index 0000000..b3f15ed --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 3.30) +project(${RunCMake_TEST} NONE) + +set(CMAKE_PKG_CONFIG_PC_LIB_DIRS ${CMAKE_CURRENT_LIST_DIR}/PackageRoot) +include(${RunCMake_TEST}.cmake) diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/a.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/a.pc new file mode 100644 index 0000000..7492f30 --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/a.pc @@ -0,0 +1,3 @@ +Name: +Version: aa +Description: diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/one.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/one.pc new file mode 100644 index 0000000..ec939ff --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/one.pc @@ -0,0 +1,3 @@ +Name: +Version: 11 +Description: diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/onedot.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/onedot.pc new file mode 100644 index 0000000..e7d3cfd --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/onedot.pc @@ -0,0 +1,3 @@ +Name: +Version: 1.1.1 +Description: diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/pseudo-empty.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/pseudo-empty.pc new file mode 100644 index 0000000..66d4163 --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/pseudo-empty.pc @@ -0,0 +1,3 @@ +Name: +Version: ~0 +Description: diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/tilde.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/tilde.pc new file mode 100644 index 0000000..8d8b38d --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/tilde.pc @@ -0,0 +1,3 @@ +Name: +Version: ~~1 +Description: diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/zeroone.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/zeroone.pc new file mode 100644 index 0000000..265e8aa --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/VersionPackages/zeroone.pc @@ -0,0 +1,3 @@ +Name: +Version: 01 +Description: diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/all-extract-fields.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/all-extract-fields.pc new file mode 100644 index 0000000..bd361fc --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/all-extract-fields.pc @@ -0,0 +1,15 @@ +Name: Extract All +Description: All flags example +Version: 1.0.0 + +Conflicts: Alpha Beta +Provides: Gamma Delta + +Requires: Epsilon Zea +Requires.private: Eta Theta + +Cflags: Iota -IKappa Lambda -IMu +Cflags.private: Nu -IXi Omnicron -IPi + +Libs: Rho -LSigma -lTau Upsilon -LPhi -lChi +Libs.private: Psi -LOmega -lMoe Larry -LCurly -lShemp diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/bar.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/bar.pc new file mode 100644 index 0000000..bf2942c --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/bar.pc @@ -0,0 +1,3 @@ +Name: Bar +Description: Bar Description +Version: 1.0.0 diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/baz.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/baz.pc new file mode 100644 index 0000000..f1152d4 --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/baz.pc @@ -0,0 +1,3 @@ +Name: Baz +Description: Baz Description +Version: 1.0.0 diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/cflags-bothcase-f.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/cflags-bothcase-f.pc new file mode 100644 index 0000000..d242c11 --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/cflags-bothcase-f.pc @@ -0,0 +1,6 @@ +Name: Cflags Bothcase +Description: The f is lowercase and uppercase +Version: 1.0.0 + +Cflags: lowercase +CFlags: uppercase diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/cflags-lowercase-f.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/cflags-lowercase-f.pc new file mode 100644 index 0000000..1640d8b --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/cflags-lowercase-f.pc @@ -0,0 +1,5 @@ +Name: Cflags Lowercase +Description: The f is lowercase +Version: 1.0.0 + +Cflags: lowercase diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/cflags-uppercase-f.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/cflags-uppercase-f.pc new file mode 100644 index 0000000..0f7c308 --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/cflags-uppercase-f.pc @@ -0,0 +1,5 @@ +Name: CFlags Uppercase +Description: The f is uppercase +Version: 1.0.0 + +CFlags: uppercase diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/empty-key.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/empty-key.pc new file mode 100644 index 0000000..93ec694 --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/empty-key.pc @@ -0,0 +1,3 @@ +Name: +Description: +Version: diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/foo.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/foo.pc new file mode 100644 index 0000000..0a98509 --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/foo.pc @@ -0,0 +1,3 @@ +Name: Foo +Description: Foo Description +Version: 1.0.0 diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/invalid.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/invalid.pc new file mode 100644 index 0000000..be1f433 --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/invalid.pc @@ -0,0 +1,4 @@ +Name: Invalid +Description: Will cause a parse error +Version: 1.0.0 +BrokenKey diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/no-description.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/no-description.pc new file mode 100644 index 0000000..69007b5 --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/no-description.pc @@ -0,0 +1,2 @@ +Name: name +Version: version diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/no-name.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/no-name.pc new file mode 100644 index 0000000..5b878c0 --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/no-name.pc @@ -0,0 +1,2 @@ +Description: description +Version: version diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/no-version.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/no-version.pc new file mode 100644 index 0000000..850e26e --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/no-version.pc @@ -0,0 +1,2 @@ +Name: name +Description: description diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/qux-uninstalled.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/qux-uninstalled.pc new file mode 100644 index 0000000..8f9462f --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/qux-uninstalled.pc @@ -0,0 +1,5 @@ +Name: Qux +Description: Qux Description +Version: 1.0.0 + +Cflags: QuxUninstalled diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/qux.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/qux.pc new file mode 100644 index 0000000..6cf66b1 --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/qux.pc @@ -0,0 +1,5 @@ +Name: Qux +Description: Qux Description +Version: 1.0.0 + +Cflags: QuxInstalled diff --git a/Tests/RunCMake/cmake_pkg_config/PackageRoot/relocate.pc b/Tests/RunCMake/cmake_pkg_config/PackageRoot/relocate.pc new file mode 100644 index 0000000..5abce76 --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/PackageRoot/relocate.pc @@ -0,0 +1,6 @@ +Name: Relocate +Description: For testing relocation and flag mangling +Version: 1.0.0 + +Cflags: -I/Alpha Beta -I/Gamma +Libs: -L/Delta Epsilon -L/Zeta diff --git a/Tests/RunCMake/cmake_pkg_config/RunCMakeTest.cmake b/Tests/RunCMake/cmake_pkg_config/RunCMakeTest.cmake new file mode 100644 index 0000000..4f9200b --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/RunCMakeTest.cmake @@ -0,0 +1,18 @@ +include(RunCMake) + +set(cmd ${CMAKE_COMMAND} ${CMAKE_CURRENT_LIST_DIR} -G ${RunCMake_GENERATOR}) + +foreach(strictness IN ITEMS STRICT PERMISSIVE BEST_EFFORT) + run_cmake_command(TestStrictness-${strictness} ${cmd} + -DRunCMake_TEST=TestStrictness -DSTRICTNESS=${strictness} + ) +endforeach() + +run_cmake(TestEnv) +run_cmake(TestExtract) +run_cmake(TestMangle) +run_cmake(TestQuiet) +run_cmake(TestRequired) +run_cmake(TestReroot) +run_cmake(TestUninstalled) +run_cmake(TestVersion) diff --git a/Tests/RunCMake/cmake_pkg_config/TestEnv-stderr.txt b/Tests/RunCMake/cmake_pkg_config/TestEnv-stderr.txt new file mode 100644 index 0000000..67713c9 --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/TestEnv-stderr.txt @@ -0,0 +1,15 @@ +Includes: -I/Alpha;-I/Gamma +LibDirs: -L/Delta;-L/Zeta +Cflags: QuxInstalled +PC_LIB_DIRS: Alpha;Beta +PC_PATH: [^ +]*/PackageRoot +DISABLE_UNINSTALLED: ON +SYSROOT_DIR: Delta +TOP_BUILD_DIR: Epsilon +SYSTEM_INCLUDE_DIRS: Zeta;Eta +SYSTEM_LIB_DIRS: Theta;Iota +ALLOW_SYSTEM_INCLUDES: ON +ALLOW_SYSTEM_LIBRARIES: ON +PKGCONF_INCLUDES: Mu;Nu;Xi;Omnicron;Pi;Rho;Sigma;Tau +PKGCONF_LIB_DIRS: Upsilon;Phi diff --git a/Tests/RunCMake/cmake_pkg_config/TestEnv.cmake b/Tests/RunCMake/cmake_pkg_config/TestEnv.cmake new file mode 100644 index 0000000..dcbb958 --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/TestEnv.cmake @@ -0,0 +1,75 @@ +set(CMAKE_PKG_CONFIG_PC_LIB_DIRS) + +set(ENV{PKG_CONFIG_PATH} ${CMAKE_CURRENT_LIST_DIR}/PackageRoot) + +if(WIN32) + set(sep ";") +else() + set(sep ":") +endif() + +set(ENV{PKG_CONFIG_LIBDIR} "Alpha${sep}Beta") +set(ENV{PKG_CONFIG_DISABLE_UNINSTALLED} Gamma) +set(ENV{PKG_CONFIG_SYSROOT_DIR} Delta) +set(ENV{PKG_CONFIG_TOP_BUILD_DIR} Epsilon) +set(ENV{PKG_CONFIG_SYSTEM_INCLUDE_PATH} "Zeta${sep}Eta") +set(ENV{PKG_CONFIG_SYSTEM_LIBRARY_PATH} "Theta${sep}Iota") +set(ENV{PKG_CONFIG_ALLOW_SYSTEM_CFLAGS} Kappa) +set(ENV{PKG_CONFIG_ALLOW_SYSTEM_LIBS} Lambda) + +set(ENV{CPATH} "Mu${sep}Nu") +set(ENV{C_INCLUDE_PATH} "Xi${sep}Omnicron") +set(ENV{CPLUS_INCLUDE_PATH} "Pi${sep}Rho") + +if(WIN32) + set(ENV{OBJC_INCLUDE_PATH} Sigma) + set(ENV{INCLUDE} Tau) +else() + set(ENV{OBJC_INCLUDE_PATH} Sigma:Tau) +endif() + +set(ENV{LIBRARY_PATH} "Upsilon${sep}Phi") + +cmake_pkg_config( + EXTRACT relocate + ENV_MODE IGNORE + PC_PATH ${CMAKE_CURRENT_LIST_DIR}/PackageRoot + SYSTEM_INCLUDE_DIRS /Alpha + SYSTEM_LIBRARY_DIRS /Beta +) + +# Shouldn't mangle, ALLOW_SYSTEM_* should default to on under ENV IGNORE +message("Includes: ${CMAKE_PKG_CONFIG_INCLUDES}") +message("LibDirs: ${CMAKE_PKG_CONFIG_LIBDIRS}") + +cmake_pkg_config( + EXTRACT qux + ENV_MODE IGNORE + PC_PATH ${CMAKE_CURRENT_LIST_DIR}/PackageRoot +) + +# Shouldn't find uninstalled package +message("Cflags: ${CMAKE_PKG_CONFIG_CFLAGS}") + +cmake_pkg_config( + EXTRACT foo + ENV_MODE FDO +) + +message("PC_LIB_DIRS: ${CMAKE_PKG_CONFIG_PC_LIB_DIRS}") +message("PC_PATH: ${CMAKE_PKG_CONFIG_PC_PATH}") +message("DISABLE_UNINSTALLED: ${CMAKE_PKG_CONFIG_DISABLE_UNINSTALLED}") +message("SYSROOT_DIR: ${CMAKE_PKG_CONFIG_SYSROOT_DIR}") +message("TOP_BUILD_DIR: ${CMAKE_PKG_CONFIG_TOP_BUILD_DIR}") +message("SYSTEM_INCLUDE_DIRS: ${CMAKE_PKG_CONFIG_SYS_INCLUDE_DIRS}") +message("SYSTEM_LIB_DIRS: ${CMAKE_PKG_CONFIG_SYS_LIB_DIRS}") +message("ALLOW_SYSTEM_INCLUDES: ${CMAKE_PKG_CONFIG_ALLOW_SYS_INCLUDES}") +message("ALLOW_SYSTEM_LIBRARIES: ${CMAKE_PKG_CONFIG_ALLOW_SYS_LIBS}") + +cmake_pkg_config( + EXTRACT foo + ENV_MODE PKGCONF +) + +message("PKGCONF_INCLUDES: ${CMAKE_PKG_CONFIG_PKGCONF_INCLUDES}") +message("PKGCONF_LIB_DIRS: ${CMAKE_PKG_CONFIG_PKGCONF_LIB_DIRS}") diff --git a/Tests/RunCMake/cmake_pkg_config/TestExtract-stderr.txt b/Tests/RunCMake/cmake_pkg_config/TestExtract-stderr.txt new file mode 100644 index 0000000..42e4534 --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/TestExtract-stderr.txt @@ -0,0 +1,21 @@ +Name: Extract All +Description: All flags example +Version: 1.0.0 +Conflicts: Alpha;Beta +Provides: Gamma;Delta +Requires: Epsilon;Zea +Requires.private: Eta;Theta +Cflags: Iota -IKappa Lambda -IMu +Includes: -IKappa;-IMu +CompileOptions: Iota;Lambda +Cflags.private: Nu -IXi Omnicron -IPi +Includes.private: -IXi;-IPi +CompileOptions.private: Nu;Omnicron +Libs: Rho -LSigma -lTau Upsilon -LPhi -lChi +LibDirs: -LSigma;-LPhi +LibNames: -lTau;-lChi +LinkOptions: Rho;Upsilon +Libs.private: Psi -LOmega -lMoe Larry -LCurly -lShemp +LibDirs.private: -LOmega;-LCurly +LibNames.private: -lMoe;-lShemp +LinkOptions.private: Psi;Larry diff --git a/Tests/RunCMake/cmake_pkg_config/TestExtract.cmake b/Tests/RunCMake/cmake_pkg_config/TestExtract.cmake new file mode 100644 index 0000000..eb05966 --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/TestExtract.cmake @@ -0,0 +1,29 @@ +cmake_pkg_config(EXTRACT all-extract-fields) + +message("Name: ${CMAKE_PKG_CONFIG_NAME}") +message("Description: ${CMAKE_PKG_CONFIG_DESCRIPTION}") +message("Version: ${CMAKE_PKG_CONFIG_VERSION}") + +message("Conflicts: ${CMAKE_PKG_CONFIG_CONFLICTS}") +message("Provides: ${CMAKE_PKG_CONFIG_PROVIDES}") + +message("Requires: ${CMAKE_PKG_CONFIG_REQUIRES}") +message("Requires.private: ${CMAKE_PKG_CONFIG_REQUIRES_PRIVATE}") + +message("Cflags: ${CMAKE_PKG_CONFIG_CFLAGS}") +message("Includes: ${CMAKE_PKG_CONFIG_INCLUDES}") +message("CompileOptions: ${CMAKE_PKG_CONFIG_COMPILE_OPTIONS}") + +message("Cflags.private: ${CMAKE_PKG_CONFIG_CFLAGS_PRIVATE}") +message("Includes.private: ${CMAKE_PKG_CONFIG_INCLUDES_PRIVATE}") +message("CompileOptions.private: ${CMAKE_PKG_CONFIG_COMPILE_OPTIONS_PRIVATE}") + +message("Libs: ${CMAKE_PKG_CONFIG_LIBS}") +message("LibDirs: ${CMAKE_PKG_CONFIG_LIBDIRS}") +message("LibNames: ${CMAKE_PKG_CONFIG_LIBNAMES}") +message("LinkOptions: ${CMAKE_PKG_CONFIG_LINK_OPTIONS}") + +message("Libs.private: ${CMAKE_PKG_CONFIG_LIBS_PRIVATE}") +message("LibDirs.private: ${CMAKE_PKG_CONFIG_LIBDIRS_PRIVATE}") +message("LibNames.private: ${CMAKE_PKG_CONFIG_LIBNAMES_PRIVATE}") +message("LinkOptions.private: ${CMAKE_PKG_CONFIG_LINK_OPTIONS_PRIVATE}") diff --git a/Tests/RunCMake/cmake_pkg_config/TestMangle-stderr.txt b/Tests/RunCMake/cmake_pkg_config/TestMangle-stderr.txt new file mode 100644 index 0000000..75557fc --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/TestMangle-stderr.txt @@ -0,0 +1,8 @@ +Cflags: Beta -I/Gamma +Includes: -I/Gamma +Libs: Epsilon -L/Zeta +LibDirs: -L/Zeta +Cflags: -I/Alpha Beta -I/Gamma +Includes: -I/Alpha;-I/Gamma +Libs: -L/Delta Epsilon -L/Zeta +LibDirs: -L/Delta;-L/Zeta diff --git a/Tests/RunCMake/cmake_pkg_config/TestMangle.cmake b/Tests/RunCMake/cmake_pkg_config/TestMangle.cmake new file mode 100644 index 0000000..b880d31 --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/TestMangle.cmake @@ -0,0 +1,22 @@ +set(CMAKE_PKG_CONFIG_SYS_INCLUDE_DIRS /Alpha) +set(CMAKE_PKG_CONFIG_SYS_LIB_DIRS /Delta) + +cmake_pkg_config(EXTRACT relocate) + +message("Cflags: ${CMAKE_PKG_CONFIG_CFLAGS}") +message("Includes: ${CMAKE_PKG_CONFIG_INCLUDES}") + +message("Libs: ${CMAKE_PKG_CONFIG_LIBS}") +message("LibDirs: ${CMAKE_PKG_CONFIG_LIBDIRS}") + +cmake_pkg_config( + EXTRACT relocate + ALLOW_SYSTEM_INCLUDES ON + ALLOW_SYSTEM_LIBS ON +) + +message("Cflags: ${CMAKE_PKG_CONFIG_CFLAGS}") +message("Includes: ${CMAKE_PKG_CONFIG_INCLUDES}") + +message("Libs: ${CMAKE_PKG_CONFIG_LIBS}") +message("LibDirs: ${CMAKE_PKG_CONFIG_LIBDIRS}") diff --git a/Tests/RunCMake/cmake_pkg_config/TestQuiet.cmake b/Tests/RunCMake/cmake_pkg_config/TestQuiet.cmake new file mode 100644 index 0000000..ac72ab2 --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/TestQuiet.cmake @@ -0,0 +1,29 @@ +cmake_pkg_config( + EXTRACT foo + QUIET + STRICTNESS STRICT +) + +cmake_pkg_config( + EXTRACT no-name + QUIET + STRICTNESS STRICT +) + +cmake_pkg_config( + EXTRACT empty-key + QUIET + STRICTNESS STRICT +) + +cmake_pkg_config( + EXTRACT cflags-bothcase-f + QUIET + STRICTNESS STRICT +) + +cmake_pkg_config( + EXTRACT does-not-exist + QUIET + STRICTNESS STRICT +) diff --git a/Tests/RunCMake/cmake_pkg_config/TestRequired-result.txt b/Tests/RunCMake/cmake_pkg_config/TestRequired-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/TestRequired-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/cmake_pkg_config/TestRequired-stderr.txt b/Tests/RunCMake/cmake_pkg_config/TestRequired-stderr.txt new file mode 100644 index 0000000..d7f5158 --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/TestRequired-stderr.txt @@ -0,0 +1,4 @@ +CMake Error at TestRequired.cmake:[0-9]+ \(cmake_pkg_config\): + cmake_pkg_config Could not find 'does-not-exist' +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\) diff --git a/Tests/RunCMake/cmake_pkg_config/TestRequired.cmake b/Tests/RunCMake/cmake_pkg_config/TestRequired.cmake new file mode 100644 index 0000000..fcc72ce --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/TestRequired.cmake @@ -0,0 +1,9 @@ +cmake_pkg_config( + EXTRACT foo + REQUIRED +) + +cmake_pkg_config( + EXTRACT does-not-exist + REQUIRED +) diff --git a/Tests/RunCMake/cmake_pkg_config/TestReroot-stderr.txt b/Tests/RunCMake/cmake_pkg_config/TestReroot-stderr.txt new file mode 100644 index 0000000..ab524d4 --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/TestReroot-stderr.txt @@ -0,0 +1,4 @@ +Cflags: -I/NewRoot/Alpha Beta -I/NewRoot/Gamma +Includes: -I/NewRoot/Alpha;-I/NewRoot/Gamma +Libs: -L/NewRoot/Delta Epsilon -L/NewRoot/Zeta +LibDirs: -L/NewRoot/Delta;-L/NewRoot/Zeta diff --git a/Tests/RunCMake/cmake_pkg_config/TestReroot.cmake b/Tests/RunCMake/cmake_pkg_config/TestReroot.cmake new file mode 100644 index 0000000..0f55558 --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/TestReroot.cmake @@ -0,0 +1,10 @@ +cmake_pkg_config( + EXTRACT relocate + PC_SYSROOT_DIR /NewRoot +) + +message("Cflags: ${CMAKE_PKG_CONFIG_CFLAGS}") +message("Includes: ${CMAKE_PKG_CONFIG_INCLUDES}") + +message("Libs: ${CMAKE_PKG_CONFIG_LIBS}") +message("LibDirs: ${CMAKE_PKG_CONFIG_LIBDIRS}") diff --git a/Tests/RunCMake/cmake_pkg_config/TestStrictness-BEST_EFFORT-stderr.txt b/Tests/RunCMake/cmake_pkg_config/TestStrictness-BEST_EFFORT-stderr.txt new file mode 100644 index 0000000..e18e88e --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/TestStrictness-BEST_EFFORT-stderr.txt @@ -0,0 +1,3 @@ +Cflags: lowercase +CFlags: uppercase +Cflags: lowercase uppercase diff --git a/Tests/RunCMake/cmake_pkg_config/TestStrictness-PERMISSIVE-stderr.txt b/Tests/RunCMake/cmake_pkg_config/TestStrictness-PERMISSIVE-stderr.txt new file mode 100644 index 0000000..2f4a69c --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/TestStrictness-PERMISSIVE-stderr.txt @@ -0,0 +1,31 @@ +CMake Warning at TestStrictness.cmake:[0-9]+ \(cmake_pkg_config\): + Resolution failed for file[^ +]*(.)*/PackageRoot/no-name.pc' +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\) + + +CMake Warning at TestStrictness.cmake:[0-9]+ \(cmake_pkg_config\): + Resolution failed for file[^ +]*(.)*/PackageRoot/no-description.pc' +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\) + + +CMake Warning at TestStrictness.cmake:[0-9]+ \(cmake_pkg_config\): + Resolution failed for file[^ +]*(.)*/PackageRoot/no-version.pc' +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\) + + +CMake Warning at TestStrictness.cmake:[0-9]+ \(cmake_pkg_config\): + Parsing failed for file[^ +]*(.)*/PackageRoot/invalid.pc' +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\) + + +Cflags: lowercase +CFlags: uppercase +Cflags: lowercase uppercase diff --git a/Tests/RunCMake/cmake_pkg_config/TestStrictness-STRICT-stderr.txt b/Tests/RunCMake/cmake_pkg_config/TestStrictness-STRICT-stderr.txt new file mode 100644 index 0000000..7329e8d --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/TestStrictness-STRICT-stderr.txt @@ -0,0 +1,38 @@ +CMake Warning at TestStrictness.cmake:[0-9]+ \(cmake_pkg_config\): + Resolution failed for file[^ +]*(.)*/PackageRoot/no-name.pc' +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\) + + +CMake Warning at TestStrictness.cmake:[0-9]+ \(cmake_pkg_config\): + Resolution failed for file[^ +]*(.)*/PackageRoot/no-description.pc' +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\) + + +CMake Warning at TestStrictness.cmake:[0-9]+ \(cmake_pkg_config\): + Resolution failed for file[^ +]*(.)*/PackageRoot/no-version.pc' +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\) + + +CMake Warning at TestStrictness.cmake:[0-9]+ \(cmake_pkg_config\): + Parsing failed for file[^ +]*(.)*/PackageRoot/invalid.pc' +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\) + + +Cflags: lowercase +CFlags: uppercase +CMake Warning at TestStrictness.cmake:[0-9]+ \(cmake_pkg_config\): + Resolution failed for file[^ +]*(.)*/PackageRoot/cflags-bothcase-f.pc' +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\) + + +Cflags: diff --git a/Tests/RunCMake/cmake_pkg_config/TestStrictness.cmake b/Tests/RunCMake/cmake_pkg_config/TestStrictness.cmake new file mode 100644 index 0000000..d34f85e --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/TestStrictness.cmake @@ -0,0 +1,51 @@ +cmake_pkg_config( + EXTRACT foo + STRICTNESS ${STRICTNESS} + REQUIRED +) + +cmake_pkg_config( + EXTRACT empty-key + STRICTNESS ${STRICTNESS} + REQUIRED +) + +cmake_pkg_config( + EXTRACT no-name + STRICTNESS ${STRICTNESS} +) + +cmake_pkg_config( + EXTRACT no-description + STRICTNESS ${STRICTNESS} +) + +cmake_pkg_config( + EXTRACT no-version + STRICTNESS ${STRICTNESS} +) + +cmake_pkg_config( + EXTRACT invalid + STRICTNESS ${STRICTNESS} +) + +cmake_pkg_config( + EXTRACT cflags-lowercase-f + STRICTNESS ${STRICTNESS} +) +message("Cflags: ${CMAKE_PKG_CONFIG_CFLAGS}") + +set(CMAKE_PKG_CONFIG_CFLAGS) +cmake_pkg_config( + EXTRACT cflags-uppercase-f + STRICTNESS ${STRICTNESS} +) +message("CFlags: ${CMAKE_PKG_CONFIG_CFLAGS}") + +set(CMAKE_PKG_CONFIG_CFLAGS) +cmake_pkg_config( + EXTRACT cflags-bothcase-f + STRICTNESS ${STRICTNESS} +) +message("Cflags: ${CMAKE_PKG_CONFIG_CFLAGS}") diff --git a/Tests/RunCMake/cmake_pkg_config/TestUninstalled-stderr.txt b/Tests/RunCMake/cmake_pkg_config/TestUninstalled-stderr.txt new file mode 100644 index 0000000..25afa68 --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/TestUninstalled-stderr.txt @@ -0,0 +1,2 @@ +QuxUninstalled +QuxInstalled diff --git a/Tests/RunCMake/cmake_pkg_config/TestUninstalled.cmake b/Tests/RunCMake/cmake_pkg_config/TestUninstalled.cmake new file mode 100644 index 0000000..fafed11 --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/TestUninstalled.cmake @@ -0,0 +1,10 @@ +cmake_pkg_config(EXTRACT qux) + +message(${CMAKE_PKG_CONFIG_CFLAGS}) + +cmake_pkg_config( + EXTRACT qux + DISABLE_UNINSTALLED ON +) + +message(${CMAKE_PKG_CONFIG_CFLAGS}) diff --git a/Tests/RunCMake/cmake_pkg_config/TestVersion-stderr.txt b/Tests/RunCMake/cmake_pkg_config/TestVersion-stderr.txt new file mode 100644 index 0000000..4b710d8 --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/TestVersion-stderr.txt @@ -0,0 +1,103 @@ +CMake Warning at TestVersion.cmake:[0-9]+ \(cmake_pkg_config\): + Package 'a' version 'aa' does not meet version requirement '<a' +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\) + + +CMake Warning at TestVersion.cmake:[0-9]+ \(cmake_pkg_config\): + Package 'a' version 'aa' does not meet version requirement '>aaa' +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\) + + +CMake Warning at TestVersion.cmake:[0-9]+ \(cmake_pkg_config\): + Package 'a' version 'aa' does not meet version requirement '>bb' +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\) + + +CMake Warning at TestVersion.cmake:[0-9]+ \(cmake_pkg_config\): + Package 'a' version 'aa' does not meet version requirement '>1' +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\) + + +CMake Warning at TestVersion.cmake:[0-9]+ \(cmake_pkg_config\): + Package 'empty-key' version '' does not meet version requirement '!=' +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\) + + +CMake Warning at TestVersion.cmake:[0-9]+ \(cmake_pkg_config\): + Package 'empty-key' version '' does not meet version requirement '=0' +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\) + + +CMake Warning at TestVersion.cmake:[0-9]+ \(cmake_pkg_config\): + Package 'one' version '11' does not meet version requirement '<1' +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\) + + +CMake Warning at TestVersion.cmake:[0-9]+ \(cmake_pkg_config\): + Package 'one' version '11' does not meet version requirement '>111' +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\) + + +CMake Warning at TestVersion.cmake:[0-9]+ \(cmake_pkg_config\): + Package 'one' version '11' does not meet version requirement '>22' +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\) + + +CMake Warning at TestVersion.cmake:[0-9]+ \(cmake_pkg_config\): + Package 'one' version '11' does not meet version requirement '<a' +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\) + + +CMake Warning at TestVersion.cmake:[0-9]+ \(cmake_pkg_config\): + Package 'onedot' version '1.1.1' does not meet version requirement '>1.2.1' +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\) + + +CMake Warning at TestVersion.cmake:[0-9]+ \(cmake_pkg_config\): + Package 'onedot' version '1.1.1' does not meet version requirement '> + 1.2.1' +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\) + + +CMake Warning at TestVersion.cmake:[0-9]+ \(cmake_pkg_config\): + Package 'onedot' version '1.1.1' does not meet exact version requirement + '01.01.01' +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\) + + +CMake Warning at TestVersion.cmake:[0-9]+ \(cmake_pkg_config\): + Package 'pseudo-empty' version '~0' does not meet version requirement '=~' +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\) + + +CMake Warning at TestVersion.cmake:[0-9]+ \(cmake_pkg_config\): + Package 'pseudo-empty' version '~0' does not meet version requirement + '!=~0' +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\) + + +CMake Warning at TestVersion.cmake:[0-9]+ \(cmake_pkg_config\): + Package 'tilde' version '~~1' does not meet version requirement '>~1' +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\) + + +CMake Warning at TestVersion.cmake:[0-9]+ \(cmake_pkg_config\): + Package 'tilde' version '~~1' does not meet version requirement '<~~~1' +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\) diff --git a/Tests/RunCMake/cmake_pkg_config/TestVersion.cmake b/Tests/RunCMake/cmake_pkg_config/TestVersion.cmake new file mode 100644 index 0000000..18fa587 --- /dev/null +++ b/Tests/RunCMake/cmake_pkg_config/TestVersion.cmake @@ -0,0 +1,65 @@ +set(CMAKE_PKG_CONFIG_PC_PATH ${CMAKE_CURRENT_LIST_DIR}/PackageRoot/VersionPackages) + +# Good = Should Succeed +# Bad = Should Warn + +cmake_pkg_config(EXTRACT a =aa) # Good +cmake_pkg_config(EXTRACT a >a) # Good +cmake_pkg_config(EXTRACT a <a) # Bad +cmake_pkg_config(EXTRACT a >aaa) # Bad +cmake_pkg_config(EXTRACT a <aaa) # Good + +cmake_pkg_config(EXTRACT a !=bb) # Good +cmake_pkg_config(EXTRACT a >bb) # Bad +cmake_pkg_config(EXTRACT a <bb) # Good + +cmake_pkg_config(EXTRACT a >1) # Bad +cmake_pkg_config(EXTRACT a <1) # Good + +cmake_pkg_config(EXTRACT empty-key =) # Good +cmake_pkg_config(EXTRACT empty-key !=) # Bad +cmake_pkg_config(EXTRACT empty-key =0) # Bad +cmake_pkg_config(EXTRACT empty-key !=0) # Good + +cmake_pkg_config(EXTRACT empty-key EXACT) # Good + +cmake_pkg_config(EXTRACT one =11) # Good +cmake_pkg_config(EXTRACT one >1) # Good +cmake_pkg_config(EXTRACT one <1) # Bad +cmake_pkg_config(EXTRACT one >111) # Bad +cmake_pkg_config(EXTRACT one <111) # Good + +cmake_pkg_config(EXTRACT one !=22) # Good +cmake_pkg_config(EXTRACT one >22) # Bad +cmake_pkg_config(EXTRACT one <22) # Good + +cmake_pkg_config(EXTRACT one >a) # Good +cmake_pkg_config(EXTRACT one <a) # Bad + +cmake_pkg_config(EXTRACT onedot 1.1.1) # Good +cmake_pkg_config(EXTRACT onedot 01.01.01) # Good +cmake_pkg_config(EXTRACT onedot =1.1.1) # Good +cmake_pkg_config(EXTRACT onedot =01.01.01) # Good +cmake_pkg_config(EXTRACT onedot <1.2.1) # Good +cmake_pkg_config(EXTRACT onedot >1.2.1) # Bad + +cmake_pkg_config(EXTRACT onedot "< 1.2.1") # Good +cmake_pkg_config(EXTRACT onedot "> 1.2.1") # Bad + +cmake_pkg_config(EXTRACT onedot 1.1.1 EXACT) # Good +cmake_pkg_config(EXTRACT onedot =1.1.1 EXACT) # Good +cmake_pkg_config(EXTRACT onedot =01.01.01 EXACT) # Bad + +cmake_pkg_config(EXTRACT pseudo-empty =~) # Bad +cmake_pkg_config(EXTRACT pseudo-empty !=~) # Good +cmake_pkg_config(EXTRACT pseudo-empty =~0) # Good +cmake_pkg_config(EXTRACT pseudo-empty !=~0) # Bad + +cmake_pkg_config(EXTRACT tilde =~~1) # Good +cmake_pkg_config(EXTRACT tilde <~1) # Good +cmake_pkg_config(EXTRACT tilde >~1) # Bad +cmake_pkg_config(EXTRACT tilde <~~~1) # Bad +cmake_pkg_config(EXTRACT tilde >~~~1) # Good + +cmake_pkg_config(EXTRACT zeroone =1) # Good +cmake_pkg_config(EXTRACT zeroone =001) # Good diff --git a/Tests/RunCMake/file-MAKE_DIRECTORY/CMakeLists.txt b/Tests/RunCMake/file-MAKE_DIRECTORY/CMakeLists.txt new file mode 100644 index 0000000..93ee9df --- /dev/null +++ b/Tests/RunCMake/file-MAKE_DIRECTORY/CMakeLists.txt @@ -0,0 +1,3 @@ +cmake_minimum_required(VERSION 3.5) +project(${RunCMake_TEST} NONE) +include(${RunCMake_TEST}.cmake) diff --git a/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-many-dirs-FAIL-stdout.txt b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-many-dirs-FAIL-stdout.txt new file mode 100644 index 0000000..63d46fd --- /dev/null +++ b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-many-dirs-FAIL-stdout.txt @@ -0,0 +1,3 @@ +^-- Result=Failed to create directory: [^ +]*/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-many-dirs-FAIL-build/file/directory0 Error: [^ +]*$ diff --git a/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-many-dirs-FAIL.cmake b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-many-dirs-FAIL.cmake new file mode 100644 index 0000000..0cfccbf --- /dev/null +++ b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-many-dirs-FAIL.cmake @@ -0,0 +1,9 @@ +file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/file" "") + +file(MAKE_DIRECTORY + "${CMAKE_CURRENT_BINARY_DIR}/file/directory0" + "${CMAKE_CURRENT_BINARY_DIR}/file/directory1" + "${CMAKE_CURRENT_BINARY_DIR}/file/directory2" + RESULT resultVal +) +message(STATUS "Result=${resultVal}") diff --git a/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-many-dirs-SUCCESS-stdout.txt b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-many-dirs-SUCCESS-stdout.txt new file mode 100644 index 0000000..09df4f9 --- /dev/null +++ b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-many-dirs-SUCCESS-stdout.txt @@ -0,0 +1 @@ +^-- Result=0 diff --git a/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-many-dirs-SUCCESS.cmake b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-many-dirs-SUCCESS.cmake new file mode 100644 index 0000000..e0781ce --- /dev/null +++ b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-many-dirs-SUCCESS.cmake @@ -0,0 +1,7 @@ +file(MAKE_DIRECTORY + "${CMAKE_CURRENT_BINARY_DIR}/file/directory0" + "${CMAKE_CURRENT_BINARY_DIR}/file/directory1" + "${CMAKE_CURRENT_BINARY_DIR}/file/directory2" + RESULT resultVal +) +message(STATUS "Result=${resultVal}") diff --git a/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-one-dir-FAIL-stdout.txt b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-one-dir-FAIL-stdout.txt new file mode 100644 index 0000000..5d16178 --- /dev/null +++ b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-one-dir-FAIL-stdout.txt @@ -0,0 +1,3 @@ +^-- Result=Failed to create directory: [^ +]*/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-one-dir-FAIL-build/file/directory Error: [^ +]*$ diff --git a/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-one-dir-FAIL.cmake b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-one-dir-FAIL.cmake new file mode 100644 index 0000000..0287d67 --- /dev/null +++ b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-one-dir-FAIL.cmake @@ -0,0 +1,3 @@ +file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/file" "") +file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/file/directory" RESULT resultVal) +message(STATUS "Result=${resultVal}") diff --git a/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-one-dir-SUCCESS-stdout.txt b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-one-dir-SUCCESS-stdout.txt new file mode 100644 index 0000000..09df4f9 --- /dev/null +++ b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-one-dir-SUCCESS-stdout.txt @@ -0,0 +1 @@ +^-- Result=0 diff --git a/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-one-dir-SUCCESS.cmake b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-one-dir-SUCCESS.cmake new file mode 100644 index 0000000..3005b83 --- /dev/null +++ b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-Result-one-dir-SUCCESS.cmake @@ -0,0 +1,2 @@ +file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/file/directory" RESULT resultVal) +message(STATUS "Result=${resultVal}") diff --git a/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-one-dir-FAIL-result.txt b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-one-dir-FAIL-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-one-dir-FAIL-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-one-dir-FAIL-stderr.txt b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-one-dir-FAIL-stderr.txt new file mode 100644 index 0000000..2bc275c --- /dev/null +++ b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-one-dir-FAIL-stderr.txt @@ -0,0 +1,9 @@ +^CMake Error at [^ +]*/MAKE_DIRECTORY-one-dir-FAIL.cmake:[0-9]+ \(file\): + file failed to create directory: + + [^ +]*/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-one-dir-FAIL-build/file/directory + + because: [^ +]+$ diff --git a/Tests/RunCMake/file/MAKE_DIRECTORY-fail.cmake b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-one-dir-FAIL.cmake index 57a68e5..57a68e5 100644 --- a/Tests/RunCMake/file/MAKE_DIRECTORY-fail.cmake +++ b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-one-dir-FAIL.cmake diff --git a/Tests/RunCMake/file-MAKE_DIRECTORY/RunCMakeTest.cmake b/Tests/RunCMake/file-MAKE_DIRECTORY/RunCMakeTest.cmake new file mode 100644 index 0000000..1eacd90 --- /dev/null +++ b/Tests/RunCMake/file-MAKE_DIRECTORY/RunCMakeTest.cmake @@ -0,0 +1,7 @@ +include(RunCMake) + +run_cmake_script(MAKE_DIRECTORY-one-dir-FAIL) +run_cmake_script(MAKE_DIRECTORY-Result-one-dir-FAIL) +run_cmake_script(MAKE_DIRECTORY-Result-one-dir-SUCCESS) +run_cmake_script(MAKE_DIRECTORY-Result-many-dirs-FAIL) +run_cmake_script(MAKE_DIRECTORY-Result-many-dirs-SUCCESS) diff --git a/Tests/RunCMake/file-RPATH/Common.cmake b/Tests/RunCMake/file-RPATH/Common.cmake index 7034aad..d6d3eeb 100644 --- a/Tests/RunCMake/file-RPATH/Common.cmake +++ b/Tests/RunCMake/file-RPATH/Common.cmake @@ -1,12 +1,16 @@ # Prepare binaries on which to operate. set(in "${CMAKE_CURRENT_LIST_DIR}/${format}") set(out "${CMAKE_CURRENT_BINARY_DIR}") -foreach(f ${names}) +foreach(f ${dynamic}) file(COPY ${in}/${f} DESTINATION ${out} NO_SOURCE_PERMISSIONS) - list(APPEND files "${out}/${f}") + list(APPEND dynamic_files "${out}/${f}") +endforeach() +foreach(f ${static}) + file(COPY ${in}/${f} DESTINATION ${out} NO_SOURCE_PERMISSIONS) + list(APPEND static_files "${out}/${f}") endforeach() -foreach(f ${files}) +foreach(f ${dynamic_files}) # Check for the initial RPATH. file(RPATH_CHECK FILE "${f}" RPATH "/sample/rpath") if(NOT EXISTS "${f}") @@ -65,11 +69,11 @@ endforeach() # TODO Implement RPATH_SET in XCOFF. if(format STREQUAL "ELF") - foreach(f ${names}) + foreach(f ${dynamic}) file(COPY ${in}/${f} DESTINATION ${out} NO_SOURCE_PERMISSIONS) endforeach() - foreach(f ${files}) + foreach(f ${dynamic_files}) # Set the RPATH. file(RPATH_SET FILE "${f}" NEW_RPATH "/new/rpath") @@ -99,3 +103,8 @@ if(format STREQUAL "ELF") endif() endforeach() endif() + +# Verify that modifying rpaths on a static library is a no-op +foreach(f ${static_files}) + file(RPATH_CHANGE FILE "${f}" OLD_RPATH "/rpath/foo" NEW_RPATH "/rpath/bar") +endforeach() diff --git a/Tests/RunCMake/file-RPATH/ELF.cmake b/Tests/RunCMake/file-RPATH/ELF.cmake index 558b2e2..b8919ef 100644 --- a/Tests/RunCMake/file-RPATH/ELF.cmake +++ b/Tests/RunCMake/file-RPATH/ELF.cmake @@ -1,9 +1,12 @@ -set(names +set(dynamic elf32lsb.bin elf32msb.bin elf64lsb.bin elf64msb.bin ) +set(static + elf64lsb-static.bin + ) set(format ELF) include(${CMAKE_CURRENT_LIST_DIR}/Common.cmake) diff --git a/Tests/RunCMake/file-RPATH/ELF/elf64lsb-static.bin b/Tests/RunCMake/file-RPATH/ELF/elf64lsb-static.bin Binary files differnew file mode 100755 index 0000000..b48c4f3 --- /dev/null +++ b/Tests/RunCMake/file-RPATH/ELF/elf64lsb-static.bin diff --git a/Tests/RunCMake/file-RPATH/XCOFF.cmake b/Tests/RunCMake/file-RPATH/XCOFF.cmake index b570920..f7464c2 100644 --- a/Tests/RunCMake/file-RPATH/XCOFF.cmake +++ b/Tests/RunCMake/file-RPATH/XCOFF.cmake @@ -1,4 +1,4 @@ -set(names +set(dynamic xcoff32.bin xcoff64.bin ) diff --git a/Tests/RunCMake/file/MAKE_DIRECTORY-fail-stderr.txt b/Tests/RunCMake/file/MAKE_DIRECTORY-fail-stderr.txt deleted file mode 100644 index 95fccdf..0000000 --- a/Tests/RunCMake/file/MAKE_DIRECTORY-fail-stderr.txt +++ /dev/null @@ -1,9 +0,0 @@ -^CMake Error at [^ -]*/MAKE_DIRECTORY-fail.cmake:[0-9]+ \(file\): - file failed to create directory: - - [^ -]*/Tests/RunCMake/file/MAKE_DIRECTORY-fail-build/file/directory - - because: [^ -]+$ diff --git a/Tests/RunCMake/file/RunCMakeTest.cmake b/Tests/RunCMake/file/RunCMakeTest.cmake index be8ee7c..524636d 100644 --- a/Tests/RunCMake/file/RunCMakeTest.cmake +++ b/Tests/RunCMake/file/RunCMakeTest.cmake @@ -62,8 +62,6 @@ run_cmake_script(COPY_FILE-arg-unknown) run_cmake_script(COPY_FILE-input-missing) run_cmake_script(COPY_FILE-output-missing) -run_cmake_script(MAKE_DIRECTORY-fail) - run_cmake_script(RENAME-file-replace) run_cmake_script(RENAME-file-to-file) run_cmake_script(RENAME-file-to-dir-capture) |