1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-10-14 02:08:27 +08:00

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
This commit is contained in:
Brad King
2021-03-17 12:44:48 -04:00
parent fab7fe7ef5
commit 06feb845aa
22 changed files with 58 additions and 100 deletions

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 =

View File

@@ -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`$

View File

@@ -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`$

View File

@@ -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`$

View File

@@ -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`$

View File

@@ -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`$

View File

@@ -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`$

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)

View File

@@ -0,0 +1,2 @@
add_custom_target(top)
add_subdirectory(GenInSubdir)

View File

@@ -0,0 +1,2 @@
cmake_policy(SET CMP0118 NEW)
include(GenInSubdir-Common.cmake)

View File

@@ -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\)

View File

@@ -0,0 +1,2 @@
cmake_policy(SET CMP0118 OLD)
include(GenInSubdir-Common.cmake)

View File

@@ -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\)

View File

@@ -0,0 +1,2 @@
include(GenInSubdir-Common.cmake)

View File

@@ -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)

View File

@@ -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)