diff options
Diffstat (limited to 'Tests/RunCMake')
25 files changed, 165 insertions, 13 deletions
diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt index 9b9a53e..2eccb2a 100644 --- a/Tests/RunCMake/CMakeLists.txt +++ b/Tests/RunCMake/CMakeLists.txt @@ -242,6 +242,9 @@ if(CMAKE_GENERATOR MATCHES "Ninja") add_RunCMake_test(NinjaMultiConfig) set_property(TEST RunCMake.NinjaMultiConfig APPEND PROPERTY LABELS "CUDA") + add_RunCMake_test(NinjaPrivateDeps + -DCMAKE_C_OUTPUT_EXTENSION=${CMAKE_C_OUTPUT_EXTENSION} + -DRunCMake_GENERATOR_IS_MULTI_CONFIG=${_isMultiConfig}) endif() add_RunCMake_test(CTest) @@ -707,10 +710,11 @@ if(XCODE_VERSION) set_property(TEST RunCMake.XcodeProject PROPERTY TIMEOUT ${CMake_TEST_XcodeProject_TIMEOUT}) endif() -if(CMAKE_C_COMPILER_ID STREQUAL "AppleClang" +if((CMAKE_C_COMPILER_ID STREQUAL "AppleClang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 6.0) - add_RunCMake_test(Framework) - if(NOT DEFINED CMake_TEST_XcFramework) + OR (APPLE AND CMAKE_C_COMPILER_ID STREQUAL "GNU" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 5.0)) + add_RunCMake_test(Framework -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID}) + if(CMAKE_C_COMPILER_ID STREQUAL "AppleClang" AND NOT DEFINED CMake_TEST_XcFramework) set(CMake_TEST_XcFramework ON) endif() if(CMake_TEST_XcFramework AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 11.0) diff --git a/Tests/RunCMake/FileAPI/codemodel-v2-data/targets/apple_exe_framework.json b/Tests/RunCMake/FileAPI/codemodel-v2-data/targets/apple_exe_framework.json index 6d320f4..a4c13a8 100644 --- a/Tests/RunCMake/FileAPI/codemodel-v2-data/targets/apple_exe_framework.json +++ b/Tests/RunCMake/FileAPI/codemodel-v2-data/targets/apple_exe_framework.json @@ -34,7 +34,7 @@ "lto": null, "commandFragments": [ { - "fragment": "-iframework .+/framework(/(Debug|Release|RelWithDebInfo|MinSizeRel))?\"? -iframework /usr/Frameworks$", + "fragment": "-F.+/framework(/(Debug|Release|RelWithDebInfo|MinSizeRel))?\"? -F/usr/Frameworks$", "role": "frameworkPath", "backtrace": null }, diff --git a/Tests/RunCMake/FindPkgConfig/FindPkgConfig_GET_VARIABLE_DEFINE_VARIABLES.cmake b/Tests/RunCMake/FindPkgConfig/FindPkgConfig_GET_VARIABLE_DEFINE_VARIABLES.cmake new file mode 100644 index 0000000..98f3cd6 --- /dev/null +++ b/Tests/RunCMake/FindPkgConfig/FindPkgConfig_GET_VARIABLE_DEFINE_VARIABLES.cmake @@ -0,0 +1,19 @@ +# Prepare environment and variables +set(PKG_CONFIG_USE_CMAKE_PREFIX_PATH TRUE) +if(WIN32) + set(ENV{CMAKE_PREFIX_PATH} "${CMAKE_CURRENT_SOURCE_DIR}\\pc-bletch") +else() + set(ENV{CMAKE_PREFIX_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/pc-bletch") +endif() + +find_package(PkgConfig REQUIRED) +pkg_check_modules(BLETCH QUIET bletch) + +if (NOT BLETCH_FOUND) + message(FATAL_ERROR "Failed to find embedded package bletch via CMAKE_PREFIX_PATH") +endif () + +pkg_get_variable(bletchvar bletch exec_prefix DEFINE_VARIABLES prefix=customprefix) +if (NOT bletchvar STREQUAL "customprefix") + message(FATAL_ERROR "Failed to fetch variable exec_prefix from embedded package bletch with prefix overridden to customprefix") +endif () diff --git a/Tests/RunCMake/FindPkgConfig/RunCMakeTest.cmake b/Tests/RunCMake/FindPkgConfig/RunCMakeTest.cmake index 2bfe028..7af425a 100644 --- a/Tests/RunCMake/FindPkgConfig/RunCMakeTest.cmake +++ b/Tests/RunCMake/FindPkgConfig/RunCMakeTest.cmake @@ -51,6 +51,7 @@ Libs: -L\${libdir} endif() endif() run_cmake(FindPkgConfig_GET_VARIABLE) + run_cmake(FindPkgConfig_GET_VARIABLE_DEFINE_VARIABLES) run_cmake(FindPkgConfig_GET_VARIABLE_PREFIX_PATH) run_cmake(FindPkgConfig_GET_VARIABLE_PKGCONFIG_PATH) run_cmake(FindPkgConfig_cache_variables) diff --git a/Tests/RunCMake/Framework/FrameworkSystemIncludeTest.cmake b/Tests/RunCMake/Framework/FrameworkSystemIncludeTest.cmake index 94c0b87..b50a8ad 100644 --- a/Tests/RunCMake/Framework/FrameworkSystemIncludeTest.cmake +++ b/Tests/RunCMake/Framework/FrameworkSystemIncludeTest.cmake @@ -8,7 +8,7 @@ set_target_properties(Example::Example PROPERTIES ) add_library(testcase FrameworkSystemIncludeTest.c) -target_compile_options(testcase PRIVATE "-Werror=#pragma-messages") +target_compile_options(testcase PRIVATE "$<IF:$<C_COMPILER_ID:GNU>,-Werror,-Werror=#pragma-messages>") target_link_libraries(testcase PRIVATE Example::Example) @@ -20,7 +20,7 @@ set_target_properties(Example::Example2 PROPERTIES ) add_library(testcase2 FrameworkSystemIncludeTest.c) -target_compile_options(testcase2 PRIVATE "-Werror=#pragma-messages") +target_compile_options(testcase2 PRIVATE "$<IF:$<C_COMPILER_ID:GNU>,-Werror,-Werror=#pragma-messages>") target_link_libraries(testcase2 PRIVATE Example::Example2) @@ -32,5 +32,5 @@ set_target_properties(Example::Example3 PROPERTIES ) add_library(testcase3 FrameworkSystemIncludeTest.c) -target_compile_options(testcase3 PRIVATE "-Werror=#pragma-messages") +target_compile_options(testcase3 PRIVATE "$<IF:$<C_COMPILER_ID:GNU>,-Werror,-Werror=#pragma-messages>") target_link_libraries(testcase3 PRIVATE Example::Example3) diff --git a/Tests/RunCMake/Framework/RunCMakeTest.cmake b/Tests/RunCMake/Framework/RunCMakeTest.cmake index 7319a59..2c5b46f 100644 --- a/Tests/RunCMake/Framework/RunCMakeTest.cmake +++ b/Tests/RunCMake/Framework/RunCMakeTest.cmake @@ -15,8 +15,10 @@ function(framework_layout_test Name Toolchain Type) run_cmake_command(${Name} ${CMAKE_COMMAND} --build .) endfunction() -framework_layout_test(iOSFrameworkLayout-build ios SHARED) -framework_layout_test(iOSFrameworkLayout-build ios STATIC) +if (NOT CMAKE_C_COMPILER_ID STREQUAL "GNU") + framework_layout_test(iOSFrameworkLayout-build ios SHARED) + framework_layout_test(iOSFrameworkLayout-build ios STATIC) +endif() framework_layout_test(OSXFrameworkLayout-build osx SHARED) framework_layout_test(OSXFrameworkLayout-build osx STATIC) @@ -36,13 +38,17 @@ function(framework_type_test Toolchain Type UseProperty) run_cmake_command(FrameworkType${Type}-build ${CMAKE_COMMAND} --build .) endfunction() -framework_type_test(ios SHARED NO) -framework_type_test(ios STATIC NO) +if (NOT CMAKE_C_COMPILER_ID STREQUAL "GNU") + framework_type_test(ios SHARED NO) + framework_type_test(ios STATIC NO) +endif() framework_type_test(osx SHARED NO) framework_type_test(osx STATIC NO) -framework_type_test(ios SHARED YES) -framework_type_test(ios STATIC YES) +if (NOT CMAKE_C_COMPILER_ID STREQUAL "GNU") + framework_type_test(ios SHARED YES) + framework_type_test(ios STATIC YES) +endif() framework_type_test(osx SHARED YES) framework_type_test(osx STATIC YES) diff --git a/Tests/RunCMake/NinjaPrivateDeps/CMP0154-NEW-Build-EmptyFileSet-Source-check.cmake b/Tests/RunCMake/NinjaPrivateDeps/CMP0154-NEW-Build-EmptyFileSet-Source-check.cmake new file mode 100644 index 0000000..7658930 --- /dev/null +++ b/Tests/RunCMake/NinjaPrivateDeps/CMP0154-NEW-Build-EmptyFileSet-Source-check.cmake @@ -0,0 +1,3 @@ +if (EXISTS ${RunCMake_TEST_BINARY_DIR}/empty.cpp) + set(RunCMake_TEST_FAILED "Compiled source generated before compilation of consumers.") +endif() diff --git a/Tests/RunCMake/NinjaPrivateDeps/CMP0154-NEW-Build-EmptyFileSet-check.cmake b/Tests/RunCMake/NinjaPrivateDeps/CMP0154-NEW-Build-EmptyFileSet-check.cmake new file mode 100644 index 0000000..3287a65 --- /dev/null +++ b/Tests/RunCMake/NinjaPrivateDeps/CMP0154-NEW-Build-EmptyFileSet-check.cmake @@ -0,0 +1,3 @@ +if (NOT EXISTS ${RunCMake_TEST_BINARY_DIR}/empty.cpp) + set(RunCMake_TEST_FAILED "Compiled source did not generate.") +endif() diff --git a/Tests/RunCMake/NinjaPrivateDeps/CMP0154-NEW-Build-NoFileSet-Source-check.cmake b/Tests/RunCMake/NinjaPrivateDeps/CMP0154-NEW-Build-NoFileSet-Source-check.cmake new file mode 100644 index 0000000..9e99ed8 --- /dev/null +++ b/Tests/RunCMake/NinjaPrivateDeps/CMP0154-NEW-Build-NoFileSet-Source-check.cmake @@ -0,0 +1,3 @@ +if (NOT EXISTS ${RunCMake_TEST_BINARY_DIR}/none.cpp) + set(RunCMake_TEST_FAILED "Private source dependency used for target without filesets.") +endif() diff --git a/Tests/RunCMake/NinjaPrivateDeps/CMP0154-NEW-Build-PrivateFileSet-Source-check.cmake b/Tests/RunCMake/NinjaPrivateDeps/CMP0154-NEW-Build-PrivateFileSet-Source-check.cmake new file mode 100644 index 0000000..dd814c9 --- /dev/null +++ b/Tests/RunCMake/NinjaPrivateDeps/CMP0154-NEW-Build-PrivateFileSet-Source-check.cmake @@ -0,0 +1,3 @@ +if (EXISTS ${RunCMake_TEST_BINARY_DIR}/private.h) + set(RunCMake_TEST_FAILED "Private header generated before compilation.") +endif() diff --git a/Tests/RunCMake/NinjaPrivateDeps/CMP0154-NEW-Build-PrivateFileSet-check.cmake b/Tests/RunCMake/NinjaPrivateDeps/CMP0154-NEW-Build-PrivateFileSet-check.cmake new file mode 100644 index 0000000..357b8c0 --- /dev/null +++ b/Tests/RunCMake/NinjaPrivateDeps/CMP0154-NEW-Build-PrivateFileSet-check.cmake @@ -0,0 +1,3 @@ +if (NOT EXISTS ${RunCMake_TEST_BINARY_DIR}/private.h) + set(RunCMake_TEST_FAILED "Private header generated before compilation.") +endif() diff --git a/Tests/RunCMake/NinjaPrivateDeps/CMP0154-NEW-Build-PublicFileSet-Source-check.cmake b/Tests/RunCMake/NinjaPrivateDeps/CMP0154-NEW-Build-PublicFileSet-Source-check.cmake new file mode 100644 index 0000000..cfceb7a --- /dev/null +++ b/Tests/RunCMake/NinjaPrivateDeps/CMP0154-NEW-Build-PublicFileSet-Source-check.cmake @@ -0,0 +1,3 @@ +if (NOT EXISTS ${RunCMake_TEST_BINARY_DIR}/public.h) + set(RunCMake_TEST_FAILED "Public header did not generate before compilation.") +endif() diff --git a/Tests/RunCMake/NinjaPrivateDeps/CMP0154-NEW.cmake b/Tests/RunCMake/NinjaPrivateDeps/CMP0154-NEW.cmake new file mode 100644 index 0000000..3330269 --- /dev/null +++ b/Tests/RunCMake/NinjaPrivateDeps/CMP0154-NEW.cmake @@ -0,0 +1,2 @@ +cmake_policy(SET CMP0154 NEW) +include(CMP0154-common.cmake) diff --git a/Tests/RunCMake/NinjaPrivateDeps/CMP0154-OLD-Build-EmptyFileSet-Source-check.cmake b/Tests/RunCMake/NinjaPrivateDeps/CMP0154-OLD-Build-EmptyFileSet-Source-check.cmake new file mode 100644 index 0000000..8ee1ad4 --- /dev/null +++ b/Tests/RunCMake/NinjaPrivateDeps/CMP0154-OLD-Build-EmptyFileSet-Source-check.cmake @@ -0,0 +1,3 @@ +if (NOT EXISTS ${RunCMake_TEST_BINARY_DIR}/empty.cpp) + set(RunCMake_TEST_FAILED "Policy CMP0154 set to OLD but using new behavior compiled sources.") +endif() diff --git a/Tests/RunCMake/NinjaPrivateDeps/CMP0154-OLD-Build-PrivateFileSet-Source-check.cmake b/Tests/RunCMake/NinjaPrivateDeps/CMP0154-OLD-Build-PrivateFileSet-Source-check.cmake new file mode 100644 index 0000000..25c23d7 --- /dev/null +++ b/Tests/RunCMake/NinjaPrivateDeps/CMP0154-OLD-Build-PrivateFileSet-Source-check.cmake @@ -0,0 +1,3 @@ +if (NOT EXISTS ${RunCMake_TEST_BINARY_DIR}/private.h) + set(RunCMake_TEST_FAILED "Policy CMP0154 set to OLD but using new behavior private headers.") +endif() diff --git a/Tests/RunCMake/NinjaPrivateDeps/CMP0154-OLD.cmake b/Tests/RunCMake/NinjaPrivateDeps/CMP0154-OLD.cmake new file mode 100644 index 0000000..691530c --- /dev/null +++ b/Tests/RunCMake/NinjaPrivateDeps/CMP0154-OLD.cmake @@ -0,0 +1,2 @@ +cmake_policy(SET CMP0154 OLD) +include(CMP0154-common.cmake) diff --git a/Tests/RunCMake/NinjaPrivateDeps/CMP0154-common.cmake b/Tests/RunCMake/NinjaPrivateDeps/CMP0154-common.cmake new file mode 100644 index 0000000..a9e6d20 --- /dev/null +++ b/Tests/RunCMake/NinjaPrivateDeps/CMP0154-common.cmake @@ -0,0 +1,45 @@ +enable_language(CXX) + +function(copy_file file dest) + add_custom_command( + OUTPUT ${CMAKE_BINARY_DIR}/${dest} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_SOURCE_DIR}/${file} ${CMAKE_BINARY_DIR}/${dest} + ) +endfunction() + +copy_file(header.h.in private.h) +copy_file(header.h.in public.h) +copy_file(source.cpp.in empty.cpp) +copy_file(source.cpp.in none.cpp) + +add_library(HelloLib_PrivateFileSet STATIC hello_lib.cpp) +target_sources(HelloLib_PrivateFileSet + PRIVATE FILE_SET HEADERS + BASE_DIRS ${CMAKE_BINARY_DIR} + FILES ${CMAKE_BINARY_DIR}/private.h +) + +add_library(HelloLib_PublicFileSet STATIC hello_lib.cpp) +target_sources(HelloLib_PublicFileSet + PUBLIC FILE_SET HEADERS + BASE_DIRS ${CMAKE_BINARY_DIR} + FILES ${CMAKE_BINARY_DIR}/public.h +) + +add_library(HelloLib_EmptyFileSet STATIC hello_lib.cpp empty.cpp) +target_sources(HelloLib_EmptyFileSet + PUBLIC FILE_SET HEADERS +) + +add_library(HelloLib_NoFileSet STATIC hello_lib.cpp none.cpp) + +function(hello_executable name) + add_executable(Hello_${name} hello.cpp) + target_link_libraries(Hello_${name} PRIVATE HelloLib_${name}) +endfunction() + +hello_executable(PrivateFileSet) +hello_executable(PublicFileSet) +hello_executable(EmptyFileSet) +hello_executable(NoFileSet) diff --git a/Tests/RunCMake/NinjaPrivateDeps/CMakeLists.txt b/Tests/RunCMake/NinjaPrivateDeps/CMakeLists.txt new file mode 100644 index 0000000..54a4d62 --- /dev/null +++ b/Tests/RunCMake/NinjaPrivateDeps/CMakeLists.txt @@ -0,0 +1,3 @@ +cmake_minimum_required(VERSION 3.26) +project(${RunCMake_TEST} NONE) +include(${RunCMake_TEST}.cmake) diff --git a/Tests/RunCMake/NinjaPrivateDeps/RunCMakeTest.cmake b/Tests/RunCMake/NinjaPrivateDeps/RunCMakeTest.cmake new file mode 100644 index 0000000..e821185 --- /dev/null +++ b/Tests/RunCMake/NinjaPrivateDeps/RunCMakeTest.cmake @@ -0,0 +1,30 @@ +include(RunCMake) + +function(compile_source test target) + if (RunCMake_GENERATOR_IS_MULTI_CONFIG) + set(config "Debug/") + endif() + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${test}-build) + set(RunCMake_TEST_NO_CLEAN 1) + run_cmake_command(${test}-Build-${target}-Source ${CMAKE_COMMAND} --build . + --target CMakeFiles/Hello_${target}.dir/${config}hello.cpp${CMAKE_C_OUTPUT_EXTENSION}) +endfunction() + +function(compile_target test target) + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${test}-build) + set(RunCMake_TEST_NO_CLEAN 1) + run_cmake_command(${test}-Build-${target} ${CMAKE_COMMAND} --build . + --target Hello_${target}) +endfunction() + +run_cmake(CMP0154-OLD) +compile_source(CMP0154-OLD PrivateFileSet) +compile_source(CMP0154-OLD EmptyFileSet) + +run_cmake(CMP0154-NEW) +compile_source(CMP0154-NEW PrivateFileSet) +compile_target(CMP0154-NEW PrivateFileSet) +compile_source(CMP0154-NEW PublicFileSet) +compile_source(CMP0154-NEW NoFileSet) +compile_source(CMP0154-NEW EmptyFileSet) +compile_target(CMP0154-NEW EmptyFileSet) diff --git a/Tests/RunCMake/NinjaPrivateDeps/header.h.in b/Tests/RunCMake/NinjaPrivateDeps/header.h.in new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/Tests/RunCMake/NinjaPrivateDeps/header.h.in diff --git a/Tests/RunCMake/NinjaPrivateDeps/hello.cpp b/Tests/RunCMake/NinjaPrivateDeps/hello.cpp new file mode 100644 index 0000000..34fabe9 --- /dev/null +++ b/Tests/RunCMake/NinjaPrivateDeps/hello.cpp @@ -0,0 +1,6 @@ +#include "hello_lib.h" + +int main() +{ + say_hello(); +} diff --git a/Tests/RunCMake/NinjaPrivateDeps/hello_lib.cpp b/Tests/RunCMake/NinjaPrivateDeps/hello_lib.cpp new file mode 100644 index 0000000..d67113f --- /dev/null +++ b/Tests/RunCMake/NinjaPrivateDeps/hello_lib.cpp @@ -0,0 +1,8 @@ +#include "hello_lib.h" + +#include <iostream> + +void say_hello() +{ + std::cout << "hello" << std::endl; +} diff --git a/Tests/RunCMake/NinjaPrivateDeps/hello_lib.h b/Tests/RunCMake/NinjaPrivateDeps/hello_lib.h new file mode 100644 index 0000000..3b4775f --- /dev/null +++ b/Tests/RunCMake/NinjaPrivateDeps/hello_lib.h @@ -0,0 +1 @@ +void say_hello(); diff --git a/Tests/RunCMake/NinjaPrivateDeps/source.cpp.in b/Tests/RunCMake/NinjaPrivateDeps/source.cpp.in new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/Tests/RunCMake/NinjaPrivateDeps/source.cpp.in diff --git a/Tests/RunCMake/TargetPolicies/PolicyList-stderr.txt b/Tests/RunCMake/TargetPolicies/PolicyList-stderr.txt index 0d8e4c9..7e91b76 100644 --- a/Tests/RunCMake/TargetPolicies/PolicyList-stderr.txt +++ b/Tests/RunCMake/TargetPolicies/PolicyList-stderr.txt @@ -37,6 +37,7 @@ \* CMP0119 \* CMP0131 \* CMP0142 + \* CMP0154 Call Stack \(most recent call first\): CMakeLists.txt:3 \(include\) |