summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2021-03-17 12:44:48 -0400
committerBrad King <brad.king@kitware.com>2021-03-18 09:57:49 -0400
commit06feb845aab7127a3067567a8fffb5777eac8187 (patch)
tree8ffb21abe868bb96eff177bf3ff4eddb4554c69e
parentfab7fe7ef5a5462952297611c1dd668a603e3a36 (diff)
downloadcmake-06feb845aab7127a3067567a8fffb5777eac8187.tar.gz
CMP0118: Fix NEW behavior when looking up target sources
Under the CMP0118 NEW behavior, sources generated in one directory should be visible when added to targets in other directories. This was accidentally left out of commit 6624b65b3f (GENERATED prop: Add implementation for policy CMP0118 being set to NEW, 2020-11-09, v3.20.0-rc1~393^2~1). Fixes: #18399
-rw-r--r--Source/cmSourceFile.cxx17
-rw-r--r--Tests/RunCMake/CMP0118/CMP0118-NEW-Test10-stderr.txt11
-rw-r--r--Tests/RunCMake/CMP0118/CMP0118-NEW-Test11-stderr.txt27
-rw-r--r--Tests/RunCMake/CMP0118/CMP0118-NEW-Test14-result.txt1
-rw-r--r--Tests/RunCMake/CMP0118/CMP0118-NEW-Test14-stderr.txt11
-rw-r--r--Tests/RunCMake/CMP0118/CMP0118-NEW-Test15-result.txt1
-rw-r--r--Tests/RunCMake/CMP0118/CMP0118-NEW-Test15-stderr.txt27
-rw-r--r--Tests/RunCMake/CMP0118/CMP0118-NEW-Test6-result.txt1
-rw-r--r--Tests/RunCMake/CMP0118/CMP0118-NEW-Test6-stderr.txt11
-rw-r--r--Tests/RunCMake/CMP0118/CMP0118-NEW-Test8-result.txt1
-rw-r--r--Tests/RunCMake/CMP0118/CMP0118-NEW-Test8-stderr.txt11
-rw-r--r--Tests/RunCMake/CMP0118/CMakeLists.txt2
-rw-r--r--Tests/RunCMake/CMP0118/GenInSubdir-Common.cmake2
-rw-r--r--Tests/RunCMake/CMP0118/GenInSubdir-NEW.cmake2
-rw-r--r--Tests/RunCMake/CMP0118/GenInSubdir-OLD-result.txt (renamed from Tests/RunCMake/CMP0118/CMP0118-NEW-Test10-result.txt)0
-rw-r--r--Tests/RunCMake/CMP0118/GenInSubdir-OLD-stderr.txt8
-rw-r--r--Tests/RunCMake/CMP0118/GenInSubdir-OLD.cmake2
-rw-r--r--Tests/RunCMake/CMP0118/GenInSubdir-WARN-result.txt (renamed from Tests/RunCMake/CMP0118/CMP0118-NEW-Test11-result.txt)0
-rw-r--r--Tests/RunCMake/CMP0118/GenInSubdir-WARN-stderr.txt8
-rw-r--r--Tests/RunCMake/CMP0118/GenInSubdir-WARN.cmake2
-rw-r--r--Tests/RunCMake/CMP0118/GenInSubdir/CMakeLists.txt9
-rw-r--r--Tests/RunCMake/CMP0118/RunCMakeTest.cmake4
22 files changed, 58 insertions, 100 deletions
diff --git a/Source/cmSourceFile.cxx b/Source/cmSourceFile.cxx
index 72bc9729f3..3f3c8d501f 100644
--- a/Source/cmSourceFile.cxx
+++ b/Source/cmSourceFile.cxx
@@ -141,14 +141,21 @@ bool cmSourceFile::FindFullPath(std::string* error,
std::vector<std::string> exts =
makefile->GetCMakeInstance()->GetAllExtensions();
auto cmp0115 = makefile->GetPolicyStatus(cmPolicies::CMP0115);
+ auto cmp0118 = makefile->GetPolicyStatus(cmPolicies::CMP0118);
+ bool const cmp0118new =
+ cmp0118 != cmPolicies::OLD && cmp0118 != cmPolicies::WARN;
// Tries to find the file in a given directory
- auto findInDir = [this, &exts, &lPath, cmp0115, cmp0115Warning,
+ auto findInDir = [this, &exts, &lPath, cmp0115, cmp0115Warning, cmp0118new,
makefile](std::string const& dir) -> bool {
// Compute full path
std::string const fullPath = cmSystemTools::CollapseFullPath(lPath, dir);
// Try full path
- if (cmSystemTools::FileExists(fullPath)) {
+ if (cmp0118new &&
+ makefile->GetGlobalGenerator()->IsGeneratedFile(fullPath)) {
+ this->IsGenerated = true;
+ }
+ if (this->IsGenerated || cmSystemTools::FileExists(fullPath)) {
this->FullPath = fullPath;
return true;
}
@@ -160,7 +167,11 @@ bool cmSourceFile::FindFullPath(std::string* error,
for (std::string const& ext : exts) {
if (!ext.empty()) {
std::string extPath = cmStrCat(fullPath, '.', ext);
- if (cmSystemTools::FileExists(extPath)) {
+ if (cmp0118new &&
+ makefile->GetGlobalGenerator()->IsGeneratedFile(extPath)) {
+ this->IsGenerated = true;
+ }
+ if (this->IsGenerated || cmSystemTools::FileExists(extPath)) {
this->FullPath = extPath;
if (cmp0115 == cmPolicies::WARN) {
std::string warning =
diff --git a/Tests/RunCMake/CMP0118/CMP0118-NEW-Test10-stderr.txt b/Tests/RunCMake/CMP0118/CMP0118-NEW-Test10-stderr.txt
index cee451671c..2bd1cba82e 100644
--- a/Tests/RunCMake/CMP0118/CMP0118-NEW-Test10-stderr.txt
+++ b/Tests/RunCMake/CMP0118/CMP0118-NEW-Test10-stderr.txt
@@ -39,13 +39,4 @@ Generated_source6\.txt: # 1b # GENERATED = `1`
Generated_source6\.txt: # 2a # GENERATED = `1`
Generated_source6\.txt: # 2b # GENERATED = `1`
Generated_source6\.txt: # 3a # GENERATED = `0`
-Generated_source6\.txt: # 3b # GENERATED = `0`
-CMake Error at CMP0118-Common-Test10\.cmake:[0-9]+ \(add_custom_target\):
- Cannot find source file:
-
-[ \t]*.*Tests/RunCMake/CMP0118/CMP0118-NEW-Test10-build/Generated_source4\.txt
-Call Stack \(most recent call first\):
- CMP0118-NEW-Test10\.cmake:[0-9]+ \(include\)
- CMakeLists\.txt:[0-9]+ \(include\)
-+
-CMake Generate step failed\. Build files cannot be regenerated correctly\.$
+Generated_source6\.txt: # 3b # GENERATED = `0`$
diff --git a/Tests/RunCMake/CMP0118/CMP0118-NEW-Test11-stderr.txt b/Tests/RunCMake/CMP0118/CMP0118-NEW-Test11-stderr.txt
index 422a3de67a..05b2353d7e 100644
--- a/Tests/RunCMake/CMP0118/CMP0118-NEW-Test11-stderr.txt
+++ b/Tests/RunCMake/CMP0118/CMP0118-NEW-Test11-stderr.txt
@@ -52,29 +52,4 @@ Generated_source6\.txt: # 1b # GENERATED = `0`
Generated_source6\.txt: # 2a # GENERATED = `0`
Generated_source6\.txt: # 2b # GENERATED = `0`
Generated_source6\.txt: # 3a # GENERATED = `0`
-Generated_source6\.txt: # 3b # GENERATED = `0`
-CMake Error at CMP0118-Common-Test11\.cmake:[0-9]+ \(add_custom_target\):
- Cannot find source file:
-
-[ \t]*.*Tests/RunCMake/CMP0118/CMP0118-NEW-Test11-build/Generated_source[4-6]\.txt
-Call Stack \(most recent call first\):
- CMP0118-NEW-Test11\.cmake:[0-9]+ \(include\)
- CMakeLists\.txt:[0-9]+ \(include\)
-+
-CMake Error at CMP0118-Common-Test11\.cmake:[0-9]+ \(add_custom_target\):
- Cannot find source file:
-
-[ \t]*.*Tests/RunCMake/CMP0118/CMP0118-NEW-Test11-build/Generated_source[4-6]\.txt
-Call Stack \(most recent call first\):
- CMP0118-NEW-Test11\.cmake:[0-9]+ \(include\)
- CMakeLists\.txt:[0-9]+ \(include\)
-+
-CMake Error at CMP0118-Common-Test11\.cmake:[0-9]+ \(add_custom_target\):
- Cannot find source file:
-
-[ \t]*.*Tests/RunCMake/CMP0118/CMP0118-NEW-Test11-build/Generated_source[4-6]\.txt
-Call Stack \(most recent call first\):
- CMP0118-NEW-Test11\.cmake:[0-9]+ \(include\)
- CMakeLists\.txt:[0-9]+ \(include\)
-+
-CMake Generate step failed\. Build files cannot be regenerated correctly\.$
+Generated_source6\.txt: # 3b # GENERATED = `0`$
diff --git a/Tests/RunCMake/CMP0118/CMP0118-NEW-Test14-result.txt b/Tests/RunCMake/CMP0118/CMP0118-NEW-Test14-result.txt
deleted file mode 100644
index d00491fd7e..0000000000
--- a/Tests/RunCMake/CMP0118/CMP0118-NEW-Test14-result.txt
+++ /dev/null
@@ -1 +0,0 @@
-1
diff --git a/Tests/RunCMake/CMP0118/CMP0118-NEW-Test14-stderr.txt b/Tests/RunCMake/CMP0118/CMP0118-NEW-Test14-stderr.txt
index 2f42f362dc..2bd1cba82e 100644
--- a/Tests/RunCMake/CMP0118/CMP0118-NEW-Test14-stderr.txt
+++ b/Tests/RunCMake/CMP0118/CMP0118-NEW-Test14-stderr.txt
@@ -39,13 +39,4 @@ Generated_source6\.txt: # 1b # GENERATED = `1`
Generated_source6\.txt: # 2a # GENERATED = `1`
Generated_source6\.txt: # 2b # GENERATED = `1`
Generated_source6\.txt: # 3a # GENERATED = `0`
-Generated_source6\.txt: # 3b # GENERATED = `0`
-CMake Error at CMP0118-Common-Test14\.cmake:[0-9]+ \(add_custom_target\):
- Cannot find source file:
-
-[ \t]*.*Tests/RunCMake/CMP0118/CMP0118-NEW-Test14-build/Generated_source4\.txt
-Call Stack \(most recent call first\):
- CMP0118-NEW-Test14\.cmake:[0-9]+ \(include\)
- CMakeLists\.txt:[0-9]+ \(include\)
-+
-CMake Generate step failed\. Build files cannot be regenerated correctly\.$
+Generated_source6\.txt: # 3b # GENERATED = `0`$
diff --git a/Tests/RunCMake/CMP0118/CMP0118-NEW-Test15-result.txt b/Tests/RunCMake/CMP0118/CMP0118-NEW-Test15-result.txt
deleted file mode 100644
index d00491fd7e..0000000000
--- a/Tests/RunCMake/CMP0118/CMP0118-NEW-Test15-result.txt
+++ /dev/null
@@ -1 +0,0 @@
-1
diff --git a/Tests/RunCMake/CMP0118/CMP0118-NEW-Test15-stderr.txt b/Tests/RunCMake/CMP0118/CMP0118-NEW-Test15-stderr.txt
index 65bd57745c..3166f45d6d 100644
--- a/Tests/RunCMake/CMP0118/CMP0118-NEW-Test15-stderr.txt
+++ b/Tests/RunCMake/CMP0118/CMP0118-NEW-Test15-stderr.txt
@@ -52,29 +52,4 @@ Generated_source6\.txt: # 1b # GENERATED = `0`
Generated_source6\.txt: # 2a # GENERATED = `0`
Generated_source6\.txt: # 2b # GENERATED = `0`
Generated_source6\.txt: # 3a # GENERATED = `0`
-Generated_source6\.txt: # 3b # GENERATED = `0`
-CMake Error at CMP0118-Common-Test15\.cmake:[0-9]+ \(add_custom_target\):
- Cannot find source file:
-
-[ \t]*.*Tests/RunCMake/CMP0118/CMP0118-NEW-Test15-build/Generated_source[4-6]\.txt
-Call Stack \(most recent call first\):
- CMP0118-NEW-Test15\.cmake:[0-9]+ \(include\)
- CMakeLists\.txt:[0-9]+ \(include\)
-+
-CMake Error at CMP0118-Common-Test15\.cmake:[0-9]+ \(add_custom_target\):
- Cannot find source file:
-
-[ \t]*.*Tests/RunCMake/CMP0118/CMP0118-NEW-Test15-build/Generated_source[4-6]\.txt
-Call Stack \(most recent call first\):
- CMP0118-NEW-Test15\.cmake:[0-9]+ \(include\)
- CMakeLists\.txt:[0-9]+ \(include\)
-+
-CMake Error at CMP0118-Common-Test15\.cmake:[0-9]+ \(add_custom_target\):
- Cannot find source file:
-
-[ \t]*.*Tests/RunCMake/CMP0118/CMP0118-NEW-Test15-build/Generated_source[4-6]\.txt
-Call Stack \(most recent call first\):
- CMP0118-NEW-Test15\.cmake:[0-9]+ \(include\)
- CMakeLists\.txt:[0-9]+ \(include\)
-+
-CMake Generate step failed\. Build files cannot be regenerated correctly\.$
+Generated_source6\.txt: # 3b # GENERATED = `0`$
diff --git a/Tests/RunCMake/CMP0118/CMP0118-NEW-Test6-result.txt b/Tests/RunCMake/CMP0118/CMP0118-NEW-Test6-result.txt
deleted file mode 100644
index d00491fd7e..0000000000
--- a/Tests/RunCMake/CMP0118/CMP0118-NEW-Test6-result.txt
+++ /dev/null
@@ -1 +0,0 @@
-1
diff --git a/Tests/RunCMake/CMP0118/CMP0118-NEW-Test6-stderr.txt b/Tests/RunCMake/CMP0118/CMP0118-NEW-Test6-stderr.txt
index 17e2b4a114..0c84cfe5be 100644
--- a/Tests/RunCMake/CMP0118/CMP0118-NEW-Test6-stderr.txt
+++ b/Tests/RunCMake/CMP0118/CMP0118-NEW-Test6-stderr.txt
@@ -33,13 +33,4 @@ Generated_source6\.txt: # 1b # GENERATED = `1`
Generated_source6\.txt: # 2a # GENERATED = `1`
Generated_source6\.txt: # 2b # GENERATED = `1`
Generated_source6\.txt: # 3a # GENERATED = `0`
-Generated_source6\.txt: # 3b # GENERATED = `0`
-CMake Error at CMP0118-Common-Test6\.cmake:[0-9]+ \(add_custom_target\):
- Cannot find source file:
-
-[ \t]*.*Tests/RunCMake/CMP0118/CMP0118-NEW-Test6-build/Generated_source4\.txt
-Call Stack \(most recent call first\):
- CMP0118-NEW-Test6\.cmake:[0-9]+ \(include\)
- CMakeLists\.txt:[0-9]+ \(include\)
-+
-CMake Generate step failed\. Build files cannot be regenerated correctly\.$
+Generated_source6\.txt: # 3b # GENERATED = `0`$
diff --git a/Tests/RunCMake/CMP0118/CMP0118-NEW-Test8-result.txt b/Tests/RunCMake/CMP0118/CMP0118-NEW-Test8-result.txt
deleted file mode 100644
index d00491fd7e..0000000000
--- a/Tests/RunCMake/CMP0118/CMP0118-NEW-Test8-result.txt
+++ /dev/null
@@ -1 +0,0 @@
-1
diff --git a/Tests/RunCMake/CMP0118/CMP0118-NEW-Test8-stderr.txt b/Tests/RunCMake/CMP0118/CMP0118-NEW-Test8-stderr.txt
index 7f48bf0834..f72387557f 100644
--- a/Tests/RunCMake/CMP0118/CMP0118-NEW-Test8-stderr.txt
+++ b/Tests/RunCMake/CMP0118/CMP0118-NEW-Test8-stderr.txt
@@ -33,13 +33,4 @@ Generated_source6\.txt: # 1b # GENERATED = `1`
Generated_source6\.txt: # 2a # GENERATED = `1`
Generated_source6\.txt: # 2b # GENERATED = `1`
Generated_source6\.txt: # 3a # GENERATED = `0`
-Generated_source6\.txt: # 3b # GENERATED = `0`
-CMake Error at CMP0118-Common-Test8\.cmake:[0-9]+ \(add_custom_target\):
- Cannot find source file:
-
-[ \t]*.*Tests/RunCMake/CMP0118/CMP0118-NEW-Test8-build/Generated_source4\.txt
-Call Stack \(most recent call first\):
- CMP0118-NEW-Test8\.cmake:[0-9]+ \(include\)
- CMakeLists\.txt:[0-9]+ \(include\)
-+
-CMake Generate step failed\. Build files cannot be regenerated correctly\.$
+Generated_source6\.txt: # 3b # GENERATED = `0`$
diff --git a/Tests/RunCMake/CMP0118/CMakeLists.txt b/Tests/RunCMake/CMP0118/CMakeLists.txt
index 0d30651f72..957fe03fad 100644
--- a/Tests/RunCMake/CMP0118/CMakeLists.txt
+++ b/Tests/RunCMake/CMP0118/CMakeLists.txt
@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.19)
cmake_policy(SET CMP0115 NEW)
project(${RunCMake_TEST} NONE)
-include(${RunCMake_TEST}.cmake)
+include(${RunCMake_TEST}.cmake NO_POLICY_SCOPE)
diff --git a/Tests/RunCMake/CMP0118/GenInSubdir-Common.cmake b/Tests/RunCMake/CMP0118/GenInSubdir-Common.cmake
new file mode 100644
index 0000000000..6012c79951
--- /dev/null
+++ b/Tests/RunCMake/CMP0118/GenInSubdir-Common.cmake
@@ -0,0 +1,2 @@
+add_custom_target(top)
+add_subdirectory(GenInSubdir)
diff --git a/Tests/RunCMake/CMP0118/GenInSubdir-NEW.cmake b/Tests/RunCMake/CMP0118/GenInSubdir-NEW.cmake
new file mode 100644
index 0000000000..373e73d316
--- /dev/null
+++ b/Tests/RunCMake/CMP0118/GenInSubdir-NEW.cmake
@@ -0,0 +1,2 @@
+cmake_policy(SET CMP0118 NEW)
+include(GenInSubdir-Common.cmake)
diff --git a/Tests/RunCMake/CMP0118/CMP0118-NEW-Test10-result.txt b/Tests/RunCMake/CMP0118/GenInSubdir-OLD-result.txt
index d00491fd7e..d00491fd7e 100644
--- a/Tests/RunCMake/CMP0118/CMP0118-NEW-Test10-result.txt
+++ b/Tests/RunCMake/CMP0118/GenInSubdir-OLD-result.txt
diff --git a/Tests/RunCMake/CMP0118/GenInSubdir-OLD-stderr.txt b/Tests/RunCMake/CMP0118/GenInSubdir-OLD-stderr.txt
new file mode 100644
index 0000000000..d3aa546301
--- /dev/null
+++ b/Tests/RunCMake/CMP0118/GenInSubdir-OLD-stderr.txt
@@ -0,0 +1,8 @@
+^CMake Error at GenInSubdir-Common.cmake:[0-9]+ \(add_custom_target\):
+ Cannot find source file:
+
+ [^
+]*/Tests/RunCMake/CMP0118/GenInSubdir-OLD-build/GenInSubdir/sub.txt
+Call Stack \(most recent call first\):
+ GenInSubdir-OLD.cmake:[0-9]+ \(include\)
+ CMakeLists.txt:[0-9]+ \(include\)
diff --git a/Tests/RunCMake/CMP0118/GenInSubdir-OLD.cmake b/Tests/RunCMake/CMP0118/GenInSubdir-OLD.cmake
new file mode 100644
index 0000000000..48be27ef66
--- /dev/null
+++ b/Tests/RunCMake/CMP0118/GenInSubdir-OLD.cmake
@@ -0,0 +1,2 @@
+cmake_policy(SET CMP0118 OLD)
+include(GenInSubdir-Common.cmake)
diff --git a/Tests/RunCMake/CMP0118/CMP0118-NEW-Test11-result.txt b/Tests/RunCMake/CMP0118/GenInSubdir-WARN-result.txt
index d00491fd7e..d00491fd7e 100644
--- a/Tests/RunCMake/CMP0118/CMP0118-NEW-Test11-result.txt
+++ b/Tests/RunCMake/CMP0118/GenInSubdir-WARN-result.txt
diff --git a/Tests/RunCMake/CMP0118/GenInSubdir-WARN-stderr.txt b/Tests/RunCMake/CMP0118/GenInSubdir-WARN-stderr.txt
new file mode 100644
index 0000000000..5eb8a34b60
--- /dev/null
+++ b/Tests/RunCMake/CMP0118/GenInSubdir-WARN-stderr.txt
@@ -0,0 +1,8 @@
+^CMake Error at GenInSubdir-Common.cmake:[0-9]+ \(add_custom_target\):
+ Cannot find source file:
+
+ [^
+]*/Tests/RunCMake/CMP0118/GenInSubdir-WARN-build/GenInSubdir/sub.txt
+Call Stack \(most recent call first\):
+ GenInSubdir-WARN.cmake:[0-9]+ \(include\)
+ CMakeLists.txt:[0-9]+ \(include\)
diff --git a/Tests/RunCMake/CMP0118/GenInSubdir-WARN.cmake b/Tests/RunCMake/CMP0118/GenInSubdir-WARN.cmake
new file mode 100644
index 0000000000..8e7e39536b
--- /dev/null
+++ b/Tests/RunCMake/CMP0118/GenInSubdir-WARN.cmake
@@ -0,0 +1,2 @@
+
+include(GenInSubdir-Common.cmake)
diff --git a/Tests/RunCMake/CMP0118/GenInSubdir/CMakeLists.txt b/Tests/RunCMake/CMP0118/GenInSubdir/CMakeLists.txt
new file mode 100644
index 0000000000..3f1ce8dabc
--- /dev/null
+++ b/Tests/RunCMake/CMP0118/GenInSubdir/CMakeLists.txt
@@ -0,0 +1,9 @@
+add_custom_command(
+ OUTPUT sub.txt
+ COMMAND ${CMAKE_COMMAND} -E touch sub.txt
+ VERBATIM
+ )
+add_custom_target(gen DEPENDS sub.txt)
+
+add_dependencies(top gen)
+target_sources(top PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/sub.txt)
diff --git a/Tests/RunCMake/CMP0118/RunCMakeTest.cmake b/Tests/RunCMake/CMP0118/RunCMakeTest.cmake
index 72064bd742..f7f135e61e 100644
--- a/Tests/RunCMake/CMP0118/RunCMakeTest.cmake
+++ b/Tests/RunCMake/CMP0118/RunCMakeTest.cmake
@@ -1,5 +1,9 @@
include(RunCMake)
+run_cmake(GenInSubdir-OLD)
+run_cmake(GenInSubdir-WARN)
+run_cmake(GenInSubdir-NEW)
+
run_cmake(CMP0118-OLD-Test1)
run_cmake(CMP0118-OLD-Test2)
run_cmake(CMP0118-OLD-Test3)