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:
@@ -141,14 +141,21 @@ bool cmSourceFile::FindFullPath(std::string* error,
|
|||||||
std::vector<std::string> exts =
|
std::vector<std::string> exts =
|
||||||
makefile->GetCMakeInstance()->GetAllExtensions();
|
makefile->GetCMakeInstance()->GetAllExtensions();
|
||||||
auto cmp0115 = makefile->GetPolicyStatus(cmPolicies::CMP0115);
|
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
|
// 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 {
|
makefile](std::string const& dir) -> bool {
|
||||||
// Compute full path
|
// Compute full path
|
||||||
std::string const fullPath = cmSystemTools::CollapseFullPath(lPath, dir);
|
std::string const fullPath = cmSystemTools::CollapseFullPath(lPath, dir);
|
||||||
// Try full path
|
// 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;
|
this->FullPath = fullPath;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -160,7 +167,11 @@ bool cmSourceFile::FindFullPath(std::string* error,
|
|||||||
for (std::string const& ext : exts) {
|
for (std::string const& ext : exts) {
|
||||||
if (!ext.empty()) {
|
if (!ext.empty()) {
|
||||||
std::string extPath = cmStrCat(fullPath, '.', ext);
|
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;
|
this->FullPath = extPath;
|
||||||
if (cmp0115 == cmPolicies::WARN) {
|
if (cmp0115 == cmPolicies::WARN) {
|
||||||
std::string warning =
|
std::string warning =
|
||||||
|
@@ -39,13 +39,4 @@ Generated_source6\.txt: # 1b # GENERATED = `1`
|
|||||||
Generated_source6\.txt: # 2a # GENERATED = `1`
|
Generated_source6\.txt: # 2a # GENERATED = `1`
|
||||||
Generated_source6\.txt: # 2b # GENERATED = `1`
|
Generated_source6\.txt: # 2b # GENERATED = `1`
|
||||||
Generated_source6\.txt: # 3a # GENERATED = `0`
|
Generated_source6\.txt: # 3a # GENERATED = `0`
|
||||||
Generated_source6\.txt: # 3b # 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\.$
|
|
||||||
|
@@ -52,29 +52,4 @@ Generated_source6\.txt: # 1b # GENERATED = `0`
|
|||||||
Generated_source6\.txt: # 2a # GENERATED = `0`
|
Generated_source6\.txt: # 2a # GENERATED = `0`
|
||||||
Generated_source6\.txt: # 2b # GENERATED = `0`
|
Generated_source6\.txt: # 2b # GENERATED = `0`
|
||||||
Generated_source6\.txt: # 3a # GENERATED = `0`
|
Generated_source6\.txt: # 3a # GENERATED = `0`
|
||||||
Generated_source6\.txt: # 3b # 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\.$
|
|
||||||
|
@@ -1 +0,0 @@
|
|||||||
1
|
|
@@ -39,13 +39,4 @@ Generated_source6\.txt: # 1b # GENERATED = `1`
|
|||||||
Generated_source6\.txt: # 2a # GENERATED = `1`
|
Generated_source6\.txt: # 2a # GENERATED = `1`
|
||||||
Generated_source6\.txt: # 2b # GENERATED = `1`
|
Generated_source6\.txt: # 2b # GENERATED = `1`
|
||||||
Generated_source6\.txt: # 3a # GENERATED = `0`
|
Generated_source6\.txt: # 3a # GENERATED = `0`
|
||||||
Generated_source6\.txt: # 3b # 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\.$
|
|
||||||
|
@@ -1 +0,0 @@
|
|||||||
1
|
|
@@ -52,29 +52,4 @@ Generated_source6\.txt: # 1b # GENERATED = `0`
|
|||||||
Generated_source6\.txt: # 2a # GENERATED = `0`
|
Generated_source6\.txt: # 2a # GENERATED = `0`
|
||||||
Generated_source6\.txt: # 2b # GENERATED = `0`
|
Generated_source6\.txt: # 2b # GENERATED = `0`
|
||||||
Generated_source6\.txt: # 3a # GENERATED = `0`
|
Generated_source6\.txt: # 3a # GENERATED = `0`
|
||||||
Generated_source6\.txt: # 3b # 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\.$
|
|
||||||
|
@@ -1 +0,0 @@
|
|||||||
1
|
|
@@ -33,13 +33,4 @@ Generated_source6\.txt: # 1b # GENERATED = `1`
|
|||||||
Generated_source6\.txt: # 2a # GENERATED = `1`
|
Generated_source6\.txt: # 2a # GENERATED = `1`
|
||||||
Generated_source6\.txt: # 2b # GENERATED = `1`
|
Generated_source6\.txt: # 2b # GENERATED = `1`
|
||||||
Generated_source6\.txt: # 3a # GENERATED = `0`
|
Generated_source6\.txt: # 3a # GENERATED = `0`
|
||||||
Generated_source6\.txt: # 3b # 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\.$
|
|
||||||
|
@@ -1 +0,0 @@
|
|||||||
1
|
|
@@ -33,13 +33,4 @@ Generated_source6\.txt: # 1b # GENERATED = `1`
|
|||||||
Generated_source6\.txt: # 2a # GENERATED = `1`
|
Generated_source6\.txt: # 2a # GENERATED = `1`
|
||||||
Generated_source6\.txt: # 2b # GENERATED = `1`
|
Generated_source6\.txt: # 2b # GENERATED = `1`
|
||||||
Generated_source6\.txt: # 3a # GENERATED = `0`
|
Generated_source6\.txt: # 3a # GENERATED = `0`
|
||||||
Generated_source6\.txt: # 3b # 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\.$
|
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
cmake_minimum_required(VERSION 3.19)
|
cmake_minimum_required(VERSION 3.19)
|
||||||
cmake_policy(SET CMP0115 NEW)
|
cmake_policy(SET CMP0115 NEW)
|
||||||
project(${RunCMake_TEST} NONE)
|
project(${RunCMake_TEST} NONE)
|
||||||
include(${RunCMake_TEST}.cmake)
|
include(${RunCMake_TEST}.cmake NO_POLICY_SCOPE)
|
||||||
|
2
Tests/RunCMake/CMP0118/GenInSubdir-Common.cmake
Normal file
2
Tests/RunCMake/CMP0118/GenInSubdir-Common.cmake
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
add_custom_target(top)
|
||||||
|
add_subdirectory(GenInSubdir)
|
2
Tests/RunCMake/CMP0118/GenInSubdir-NEW.cmake
Normal file
2
Tests/RunCMake/CMP0118/GenInSubdir-NEW.cmake
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
cmake_policy(SET CMP0118 NEW)
|
||||||
|
include(GenInSubdir-Common.cmake)
|
8
Tests/RunCMake/CMP0118/GenInSubdir-OLD-stderr.txt
Normal file
8
Tests/RunCMake/CMP0118/GenInSubdir-OLD-stderr.txt
Normal 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\)
|
2
Tests/RunCMake/CMP0118/GenInSubdir-OLD.cmake
Normal file
2
Tests/RunCMake/CMP0118/GenInSubdir-OLD.cmake
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
cmake_policy(SET CMP0118 OLD)
|
||||||
|
include(GenInSubdir-Common.cmake)
|
8
Tests/RunCMake/CMP0118/GenInSubdir-WARN-stderr.txt
Normal file
8
Tests/RunCMake/CMP0118/GenInSubdir-WARN-stderr.txt
Normal 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\)
|
2
Tests/RunCMake/CMP0118/GenInSubdir-WARN.cmake
Normal file
2
Tests/RunCMake/CMP0118/GenInSubdir-WARN.cmake
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
|
||||||
|
include(GenInSubdir-Common.cmake)
|
9
Tests/RunCMake/CMP0118/GenInSubdir/CMakeLists.txt
Normal file
9
Tests/RunCMake/CMP0118/GenInSubdir/CMakeLists.txt
Normal 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)
|
@@ -1,5 +1,9 @@
|
|||||||
include(RunCMake)
|
include(RunCMake)
|
||||||
|
|
||||||
|
run_cmake(GenInSubdir-OLD)
|
||||||
|
run_cmake(GenInSubdir-WARN)
|
||||||
|
run_cmake(GenInSubdir-NEW)
|
||||||
|
|
||||||
run_cmake(CMP0118-OLD-Test1)
|
run_cmake(CMP0118-OLD-Test1)
|
||||||
run_cmake(CMP0118-OLD-Test2)
|
run_cmake(CMP0118-OLD-Test2)
|
||||||
run_cmake(CMP0118-OLD-Test3)
|
run_cmake(CMP0118-OLD-Test3)
|
||||||
|
Reference in New Issue
Block a user