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 d41dd7906f (GENERATED prop: Add
implementation for policy CMP0118 being set to NEW, 2020-11-09,
v3.20.0-rc1~393^2~1).

Fixes: #18399
This commit is contained in:
Brad King
2021-03-17 12:44:48 -04:00
parent 2e81d0e63b
commit 29d24f2f30
22 changed files with 58 additions and 100 deletions
+14 -3
View File
@@ -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 =
@@ -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`$
@@ -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`$
@@ -1 +0,0 @@
1
@@ -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`$
@@ -1 +0,0 @@
1
@@ -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`$
@@ -1 +0,0 @@
1
@@ -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`$
@@ -1 +0,0 @@
1
@@ -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`$
+1 -1
View File
@@ -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)
@@ -0,0 +1,2 @@
add_custom_target(top)
add_subdirectory(GenInSubdir)
@@ -0,0 +1,2 @@
cmake_policy(SET CMP0118 NEW)
include(GenInSubdir-Common.cmake)
@@ -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\)
@@ -0,0 +1,2 @@
cmake_policy(SET CMP0118 OLD)
include(GenInSubdir-Common.cmake)
@@ -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\)
@@ -0,0 +1,2 @@
include(GenInSubdir-Common.cmake)
@@ -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)
@@ -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)