summaryrefslogtreecommitdiffstats
path: root/Tests/RunCMake
diff options
context:
space:
mode:
Diffstat (limited to 'Tests/RunCMake')
-rw-r--r--Tests/RunCMake/CMakeLists.txt2
-rw-r--r--Tests/RunCMake/LinkItemValidation/CMP0028-NEW-iface-result.txt (renamed from Tests/RunCMake/CMP0028/CMP0028-NEW-iface-result.txt)0
-rw-r--r--Tests/RunCMake/LinkItemValidation/CMP0028-NEW-iface-stderr.txt (renamed from Tests/RunCMake/CMP0028/CMP0028-NEW-iface-stderr.txt)0
-rw-r--r--Tests/RunCMake/LinkItemValidation/CMP0028-NEW-iface.cmake (renamed from Tests/RunCMake/CMP0028/CMP0028-NEW-iface.cmake)0
-rw-r--r--Tests/RunCMake/LinkItemValidation/CMP0028-NEW-result.txt (renamed from Tests/RunCMake/CMP0028/CMP0028-NEW-result.txt)0
-rw-r--r--Tests/RunCMake/LinkItemValidation/CMP0028-NEW-stderr.txt (renamed from Tests/RunCMake/CMP0028/CMP0028-NEW-stderr.txt)0
-rw-r--r--Tests/RunCMake/LinkItemValidation/CMP0028-NEW.cmake (renamed from Tests/RunCMake/CMP0028/CMP0028-NEW.cmake)0
-rw-r--r--Tests/RunCMake/LinkItemValidation/CMP0028-OLD-iface-result.txt (renamed from Tests/RunCMake/CMP0028/CMP0028-OLD-iface-result.txt)0
-rw-r--r--Tests/RunCMake/LinkItemValidation/CMP0028-OLD-iface-stderr.txt (renamed from Tests/RunCMake/CMP0028/CMP0028-OLD-iface-stderr.txt)0
-rw-r--r--Tests/RunCMake/LinkItemValidation/CMP0028-OLD-iface.cmake (renamed from Tests/RunCMake/CMP0028/CMP0028-OLD-iface.cmake)0
-rw-r--r--Tests/RunCMake/LinkItemValidation/CMP0028-OLD-result.txt (renamed from Tests/RunCMake/CMP0028/CMP0028-OLD-result.txt)0
-rw-r--r--Tests/RunCMake/LinkItemValidation/CMP0028-OLD-stderr.txt (renamed from Tests/RunCMake/CMP0028/CMP0028-OLD-stderr.txt)0
-rw-r--r--Tests/RunCMake/LinkItemValidation/CMP0028-OLD.cmake (renamed from Tests/RunCMake/CMP0028/CMP0028-OLD.cmake)0
-rw-r--r--Tests/RunCMake/LinkItemValidation/CMP0028-WARN-iface-result.txt (renamed from Tests/RunCMake/CMP0028/CMP0028-WARN-iface-result.txt)0
-rw-r--r--Tests/RunCMake/LinkItemValidation/CMP0028-WARN-iface-stderr.txt (renamed from Tests/RunCMake/CMP0028/CMP0028-WARN-iface-stderr.txt)0
-rw-r--r--Tests/RunCMake/LinkItemValidation/CMP0028-WARN-iface.cmake (renamed from Tests/RunCMake/CMP0028/CMP0028-WARN-iface.cmake)0
-rw-r--r--Tests/RunCMake/LinkItemValidation/CMP0028-WARN-result.txt (renamed from Tests/RunCMake/CMP0028/CMP0028-WARN-result.txt)0
-rw-r--r--Tests/RunCMake/LinkItemValidation/CMP0028-WARN-stderr.txt (renamed from Tests/RunCMake/CMP0028/CMP0028-WARN-stderr.txt)0
-rw-r--r--Tests/RunCMake/LinkItemValidation/CMP0028-WARN.cmake (renamed from Tests/RunCMake/CMP0028/CMP0028-WARN.cmake)0
-rw-r--r--Tests/RunCMake/LinkItemValidation/CMakeLists.txt (renamed from Tests/RunCMake/CMP0028/CMakeLists.txt)3
-rw-r--r--Tests/RunCMake/LinkItemValidation/OnlyTargets-result.txt1
-rw-r--r--Tests/RunCMake/LinkItemValidation/OnlyTargets-stderr.txt40
-rw-r--r--Tests/RunCMake/LinkItemValidation/OnlyTargets.cmake56
-rw-r--r--Tests/RunCMake/LinkItemValidation/RunCMakeTest.cmake (renamed from Tests/RunCMake/CMP0028/RunCMakeTest.cmake)2
-rw-r--r--Tests/RunCMake/LinkItemValidation/empty.cpp (renamed from Tests/RunCMake/CMP0028/empty.cpp)0
-rw-r--r--Tests/RunCMake/LinkItemValidation/main.c4
26 files changed, 107 insertions, 1 deletions
diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt
index 5dc7031..2363d7d 100644
--- a/Tests/RunCMake/CMakeLists.txt
+++ b/Tests/RunCMake/CMakeLists.txt
@@ -94,7 +94,6 @@ add_RunCMake_test(CMP0019)
add_RunCMake_test(CMP0022)
add_RunCMake_test(CMP0026)
add_RunCMake_test(CMP0027)
-add_RunCMake_test(CMP0028)
add_RunCMake_test(CMP0037)
add_RunCMake_test(CMP0038)
add_RunCMake_test(CMP0039)
@@ -329,6 +328,7 @@ add_RunCMake_test(GoogleTest) # Note: does not actually depend on Google Test
add_RunCMake_test(Graphviz)
add_RunCMake_test(TargetPropertyGeneratorExpressions)
add_RunCMake_test(Languages)
+add_RunCMake_test(LinkItemValidation)
add_RunCMake_test(LinkStatic)
if(CMAKE_CXX_COMPILER_ID MATCHES "^(Cray|PGI|NVHPC|XL|XLClang|Fujitsu|FujitsuClang)$")
add_RunCMake_test(MetaCompileFeatures)
diff --git a/Tests/RunCMake/CMP0028/CMP0028-NEW-iface-result.txt b/Tests/RunCMake/LinkItemValidation/CMP0028-NEW-iface-result.txt
index d00491f..d00491f 100644
--- a/Tests/RunCMake/CMP0028/CMP0028-NEW-iface-result.txt
+++ b/Tests/RunCMake/LinkItemValidation/CMP0028-NEW-iface-result.txt
diff --git a/Tests/RunCMake/CMP0028/CMP0028-NEW-iface-stderr.txt b/Tests/RunCMake/LinkItemValidation/CMP0028-NEW-iface-stderr.txt
index 111d1f0..111d1f0 100644
--- a/Tests/RunCMake/CMP0028/CMP0028-NEW-iface-stderr.txt
+++ b/Tests/RunCMake/LinkItemValidation/CMP0028-NEW-iface-stderr.txt
diff --git a/Tests/RunCMake/CMP0028/CMP0028-NEW-iface.cmake b/Tests/RunCMake/LinkItemValidation/CMP0028-NEW-iface.cmake
index 1a71433..1a71433 100644
--- a/Tests/RunCMake/CMP0028/CMP0028-NEW-iface.cmake
+++ b/Tests/RunCMake/LinkItemValidation/CMP0028-NEW-iface.cmake
diff --git a/Tests/RunCMake/CMP0028/CMP0028-NEW-result.txt b/Tests/RunCMake/LinkItemValidation/CMP0028-NEW-result.txt
index d00491f..d00491f 100644
--- a/Tests/RunCMake/CMP0028/CMP0028-NEW-result.txt
+++ b/Tests/RunCMake/LinkItemValidation/CMP0028-NEW-result.txt
diff --git a/Tests/RunCMake/CMP0028/CMP0028-NEW-stderr.txt b/Tests/RunCMake/LinkItemValidation/CMP0028-NEW-stderr.txt
index 17b25de..17b25de 100644
--- a/Tests/RunCMake/CMP0028/CMP0028-NEW-stderr.txt
+++ b/Tests/RunCMake/LinkItemValidation/CMP0028-NEW-stderr.txt
diff --git a/Tests/RunCMake/CMP0028/CMP0028-NEW.cmake b/Tests/RunCMake/LinkItemValidation/CMP0028-NEW.cmake
index a0a6ae8..a0a6ae8 100644
--- a/Tests/RunCMake/CMP0028/CMP0028-NEW.cmake
+++ b/Tests/RunCMake/LinkItemValidation/CMP0028-NEW.cmake
diff --git a/Tests/RunCMake/CMP0028/CMP0028-OLD-iface-result.txt b/Tests/RunCMake/LinkItemValidation/CMP0028-OLD-iface-result.txt
index 573541a..573541a 100644
--- a/Tests/RunCMake/CMP0028/CMP0028-OLD-iface-result.txt
+++ b/Tests/RunCMake/LinkItemValidation/CMP0028-OLD-iface-result.txt
diff --git a/Tests/RunCMake/CMP0028/CMP0028-OLD-iface-stderr.txt b/Tests/RunCMake/LinkItemValidation/CMP0028-OLD-iface-stderr.txt
index b7a0755..b7a0755 100644
--- a/Tests/RunCMake/CMP0028/CMP0028-OLD-iface-stderr.txt
+++ b/Tests/RunCMake/LinkItemValidation/CMP0028-OLD-iface-stderr.txt
diff --git a/Tests/RunCMake/CMP0028/CMP0028-OLD-iface.cmake b/Tests/RunCMake/LinkItemValidation/CMP0028-OLD-iface.cmake
index d7bd60e..d7bd60e 100644
--- a/Tests/RunCMake/CMP0028/CMP0028-OLD-iface.cmake
+++ b/Tests/RunCMake/LinkItemValidation/CMP0028-OLD-iface.cmake
diff --git a/Tests/RunCMake/CMP0028/CMP0028-OLD-result.txt b/Tests/RunCMake/LinkItemValidation/CMP0028-OLD-result.txt
index 573541a..573541a 100644
--- a/Tests/RunCMake/CMP0028/CMP0028-OLD-result.txt
+++ b/Tests/RunCMake/LinkItemValidation/CMP0028-OLD-result.txt
diff --git a/Tests/RunCMake/CMP0028/CMP0028-OLD-stderr.txt b/Tests/RunCMake/LinkItemValidation/CMP0028-OLD-stderr.txt
index 586a876..586a876 100644
--- a/Tests/RunCMake/CMP0028/CMP0028-OLD-stderr.txt
+++ b/Tests/RunCMake/LinkItemValidation/CMP0028-OLD-stderr.txt
diff --git a/Tests/RunCMake/CMP0028/CMP0028-OLD.cmake b/Tests/RunCMake/LinkItemValidation/CMP0028-OLD.cmake
index d4a870b..d4a870b 100644
--- a/Tests/RunCMake/CMP0028/CMP0028-OLD.cmake
+++ b/Tests/RunCMake/LinkItemValidation/CMP0028-OLD.cmake
diff --git a/Tests/RunCMake/CMP0028/CMP0028-WARN-iface-result.txt b/Tests/RunCMake/LinkItemValidation/CMP0028-WARN-iface-result.txt
index 573541a..573541a 100644
--- a/Tests/RunCMake/CMP0028/CMP0028-WARN-iface-result.txt
+++ b/Tests/RunCMake/LinkItemValidation/CMP0028-WARN-iface-result.txt
diff --git a/Tests/RunCMake/CMP0028/CMP0028-WARN-iface-stderr.txt b/Tests/RunCMake/LinkItemValidation/CMP0028-WARN-iface-stderr.txt
index bb6a16e..bb6a16e 100644
--- a/Tests/RunCMake/CMP0028/CMP0028-WARN-iface-stderr.txt
+++ b/Tests/RunCMake/LinkItemValidation/CMP0028-WARN-iface-stderr.txt
diff --git a/Tests/RunCMake/CMP0028/CMP0028-WARN-iface.cmake b/Tests/RunCMake/LinkItemValidation/CMP0028-WARN-iface.cmake
index 9270023..9270023 100644
--- a/Tests/RunCMake/CMP0028/CMP0028-WARN-iface.cmake
+++ b/Tests/RunCMake/LinkItemValidation/CMP0028-WARN-iface.cmake
diff --git a/Tests/RunCMake/CMP0028/CMP0028-WARN-result.txt b/Tests/RunCMake/LinkItemValidation/CMP0028-WARN-result.txt
index 573541a..573541a 100644
--- a/Tests/RunCMake/CMP0028/CMP0028-WARN-result.txt
+++ b/Tests/RunCMake/LinkItemValidation/CMP0028-WARN-result.txt
diff --git a/Tests/RunCMake/CMP0028/CMP0028-WARN-stderr.txt b/Tests/RunCMake/LinkItemValidation/CMP0028-WARN-stderr.txt
index c0cb5b0..c0cb5b0 100644
--- a/Tests/RunCMake/CMP0028/CMP0028-WARN-stderr.txt
+++ b/Tests/RunCMake/LinkItemValidation/CMP0028-WARN-stderr.txt
diff --git a/Tests/RunCMake/CMP0028/CMP0028-WARN.cmake b/Tests/RunCMake/LinkItemValidation/CMP0028-WARN.cmake
index 70a6cc6..70a6cc6 100644
--- a/Tests/RunCMake/CMP0028/CMP0028-WARN.cmake
+++ b/Tests/RunCMake/LinkItemValidation/CMP0028-WARN.cmake
diff --git a/Tests/RunCMake/CMP0028/CMakeLists.txt b/Tests/RunCMake/LinkItemValidation/CMakeLists.txt
index 4f867df..185cd91 100644
--- a/Tests/RunCMake/CMP0028/CMakeLists.txt
+++ b/Tests/RunCMake/LinkItemValidation/CMakeLists.txt
@@ -1,3 +1,6 @@
cmake_minimum_required(VERSION 2.8.12)
+if(NOT RunCMake_TEST MATCHES "^CMP0028")
+ cmake_minimum_required(VERSION 3.22)
+endif()
project(${RunCMake_TEST} CXX)
include(${RunCMake_TEST}.cmake NO_POLICY_SCOPE) # policy used at end of dir
diff --git a/Tests/RunCMake/LinkItemValidation/OnlyTargets-result.txt b/Tests/RunCMake/LinkItemValidation/OnlyTargets-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/LinkItemValidation/OnlyTargets-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/LinkItemValidation/OnlyTargets-stderr.txt b/Tests/RunCMake/LinkItemValidation/OnlyTargets-stderr.txt
new file mode 100644
index 0000000..bbb0170
--- /dev/null
+++ b/Tests/RunCMake/LinkItemValidation/OnlyTargets-stderr.txt
@@ -0,0 +1,40 @@
+^CMake Error at OnlyTargets\.cmake:11 \(target_link_libraries\):
+ Target "exe" has LINK_LIBRARIES_ONLY_TARGETS enabled, but it links to:
+
+ non_target_in_exe
+
+ which is not a target\. Possible reasons include:
+(
+ \*[^
+]+)*
+
+Call Stack \(most recent call first\):
+ CMakeLists\.txt:[0-9]+ \(include\)
++
+CMake Error at OnlyTargets\.cmake:21 \(target_link_libraries\):
+ Target "iface" has LINK_LIBRARIES_ONLY_TARGETS enabled, but its link
+ interface contains:
+
+ non_target_in_iface
+
+ which is not a target\. Possible reasons include:
+(
+ \*[^
+]+)*
+
+Call Stack \(most recent call first\):
+ CMakeLists\.txt:[0-9]+ \(include\)
++
+CMake Error at OnlyTargets\.cmake:30 \(target_link_libraries\):
+ Target "iface_imported_checked" has LINK_LIBRARIES_ONLY_TARGETS enabled,
+ but its link interface contains:
+
+ non_target_in_iface_imported_checked
+
+ which is not a target\. Possible reasons include:
+(
+ \*[^
+]+)*
+
+Call Stack \(most recent call first\):
+ CMakeLists\.txt:[0-9]+ \(include\)
diff --git a/Tests/RunCMake/LinkItemValidation/OnlyTargets.cmake b/Tests/RunCMake/LinkItemValidation/OnlyTargets.cmake
new file mode 100644
index 0000000..9417318
--- /dev/null
+++ b/Tests/RunCMake/LinkItemValidation/OnlyTargets.cmake
@@ -0,0 +1,56 @@
+enable_language(C)
+
+set(CMAKE_LINK_LIBRARIES_ONLY_TARGETS 1)
+
+# Use imported interface library to name toolchain-provided libraries.
+add_library(toolchain::m INTERFACE IMPORTED)
+set_property(TARGET toolchain::m PROPERTY IMPORTED_LIBNAME "m")
+
+# Linking directly warns.
+add_executable(exe main.c)
+target_link_libraries(exe PRIVATE
+ -lflag_in_exe # accepted
+ /abs/path/in_exe # accepted
+ rel/path/in_exe # accepted
+ toolchain::m # accepted
+ non_target_in_exe # rejected
+ )
+
+# Link interfaces warn.
+add_library(iface INTERFACE)
+target_link_libraries(iface INTERFACE
+ -lflag_in_iface # accepted
+ /abs/path/in_iface # accepted
+ rel/path/in_iface # accepted
+ non_target_in_iface # rejected
+ )
+
+# Imported target link interfaces warn if explicitly enabled.
+add_library(iface_imported_checked INTERFACE IMPORTED)
+target_link_libraries(iface_imported_checked INTERFACE
+ -lflag_iface_imported_checked # accepted
+ /abs/path/in_iface_imported_checked # accepted
+ rel/path/in_iface_imported_checked # accepted
+ non_target_in_iface_imported_checked # rejected
+ )
+set_property(TARGET iface_imported_checked PROPERTY LINK_LIBRARIES_ONLY_TARGETS 1)
+
+# Linking directly does not warn if explicitly disabled.
+add_executable(exe_not_checked main.c)
+target_link_libraries(exe_not_checked PRIVATE
+ non_target_in_exe_not_checked
+ )
+set_property(TARGET exe_not_checked PROPERTY LINK_LIBRARIES_ONLY_TARGETS 0)
+
+# Link interfaces do not warn if explicitly disabled.
+add_library(iface_not_checked INTERFACE)
+target_link_libraries(iface_not_checked INTERFACE
+ non_target_in_iface_not_checked
+ )
+set_property(TARGET iface_not_checked PROPERTY LINK_LIBRARIES_ONLY_TARGETS 0)
+
+# Imported target link interfaces do not warn if not explicitly enabled.
+add_library(iface_imported_default INTERFACE IMPORTED)
+target_link_libraries(iface_imported_default INTERFACE
+ non_target_in_iface_imported_default
+ )
diff --git a/Tests/RunCMake/CMP0028/RunCMakeTest.cmake b/Tests/RunCMake/LinkItemValidation/RunCMakeTest.cmake
index 0c72ca2..c423f6a 100644
--- a/Tests/RunCMake/CMP0028/RunCMakeTest.cmake
+++ b/Tests/RunCMake/LinkItemValidation/RunCMakeTest.cmake
@@ -6,3 +6,5 @@ run_cmake(CMP0028-WARN)
run_cmake(CMP0028-NEW-iface)
run_cmake(CMP0028-OLD-iface)
run_cmake(CMP0028-WARN-iface)
+
+run_cmake(OnlyTargets)
diff --git a/Tests/RunCMake/CMP0028/empty.cpp b/Tests/RunCMake/LinkItemValidation/empty.cpp
index e69de29..e69de29 100644
--- a/Tests/RunCMake/CMP0028/empty.cpp
+++ b/Tests/RunCMake/LinkItemValidation/empty.cpp
diff --git a/Tests/RunCMake/LinkItemValidation/main.c b/Tests/RunCMake/LinkItemValidation/main.c
new file mode 100644
index 0000000..8488f4e
--- /dev/null
+++ b/Tests/RunCMake/LinkItemValidation/main.c
@@ -0,0 +1,4 @@
+int main(void)
+{
+ return 0;
+}