summaryrefslogtreecommitdiffstats
path: root/Tests
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2023-09-21 13:39:35 (GMT)
committerKitware Robot <kwrobot@kitware.com>2023-09-21 13:39:56 (GMT)
commitf83790af0b0bdc7c409c2fb5d2e88d8c9c177684 (patch)
treee8d18380202338ba567879667f66727f9eca5e27 /Tests
parent8030dd0986716df5368813b5792dbb28fb06ed82 (diff)
parentec2ba29ac5e424cf0c52ba8ea5c2e3a4c2667d7a (diff)
downloadCMake-f83790af0b0bdc7c409c2fb5d2e88d8c9c177684.zip
CMake-f83790af0b0bdc7c409c2fb5d2e88d8c9c177684.tar.gz
CMake-f83790af0b0bdc7c409c2fb5d2e88d8c9c177684.tar.bz2
Merge topic 'fileset-private-dep'
ec2ba29ac5 Ninja: Allow compilation before generation of dependencies' private sources Acked-by: Kitware Robot <kwrobot@kitware.com> Acked-by: buildbot <buildbot@kitware.com> Merge-request: !8420
Diffstat (limited to 'Tests')
-rw-r--r--Tests/RunCMake/CMakeLists.txt3
-rw-r--r--Tests/RunCMake/NinjaPrivateDeps/CMP0154-NEW-Build-EmptyFileSet-Source-check.cmake3
-rw-r--r--Tests/RunCMake/NinjaPrivateDeps/CMP0154-NEW-Build-EmptyFileSet-check.cmake3
-rw-r--r--Tests/RunCMake/NinjaPrivateDeps/CMP0154-NEW-Build-NoFileSet-Source-check.cmake3
-rw-r--r--Tests/RunCMake/NinjaPrivateDeps/CMP0154-NEW-Build-PrivateFileSet-Source-check.cmake3
-rw-r--r--Tests/RunCMake/NinjaPrivateDeps/CMP0154-NEW-Build-PrivateFileSet-check.cmake3
-rw-r--r--Tests/RunCMake/NinjaPrivateDeps/CMP0154-NEW-Build-PublicFileSet-Source-check.cmake3
-rw-r--r--Tests/RunCMake/NinjaPrivateDeps/CMP0154-NEW.cmake2
-rw-r--r--Tests/RunCMake/NinjaPrivateDeps/CMP0154-OLD-Build-EmptyFileSet-Source-check.cmake3
-rw-r--r--Tests/RunCMake/NinjaPrivateDeps/CMP0154-OLD-Build-PrivateFileSet-Source-check.cmake3
-rw-r--r--Tests/RunCMake/NinjaPrivateDeps/CMP0154-OLD.cmake2
-rw-r--r--Tests/RunCMake/NinjaPrivateDeps/CMP0154-common.cmake45
-rw-r--r--Tests/RunCMake/NinjaPrivateDeps/CMakeLists.txt3
-rw-r--r--Tests/RunCMake/NinjaPrivateDeps/RunCMakeTest.cmake30
-rw-r--r--Tests/RunCMake/NinjaPrivateDeps/header.h.in0
-rw-r--r--Tests/RunCMake/NinjaPrivateDeps/hello.cpp6
-rw-r--r--Tests/RunCMake/NinjaPrivateDeps/hello_lib.cpp8
-rw-r--r--Tests/RunCMake/NinjaPrivateDeps/hello_lib.h1
-rw-r--r--Tests/RunCMake/NinjaPrivateDeps/source.cpp.in0
-rw-r--r--Tests/RunCMake/TargetPolicies/PolicyList-stderr.txt1
20 files changed, 125 insertions, 0 deletions
diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt
index 9b9a53e..62c9628 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)
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\)