Makefile: Fix double escaping when DEPFILE is used

In commit cfd8a5ac1f (Makefiles: Add support of DEPFILE for
add_custom_command, 2020-12-04, v3.20.0-rc1~237^2~1) we added a
`ConvertToOutputPath` call on a path given to the `depends` field of
`WriteMakeRule`.  The latter already handles escaping for Makefile
syntax.

Fixes: #25554
This commit is contained in:
Orkun Tokdemir
2024-01-08 14:36:45 +01:00
committed by Brad King
parent 5162ff64d4
commit 7198f0d149
4 changed files with 24 additions and 3 deletions

View File

@@ -1722,9 +1722,8 @@ void cmMakefileTargetGenerator::GenerateCustomRuleFile(
if (!ccg.GetCC().GetDepfile().empty()) {
// Add dependency over timestamp file for dependencies management
auto dependTimestamp = cmSystemTools::ConvertToOutputPath(
this->LocalGenerator->MaybeRelativeToTopBinDir(
cmStrCat(this->TargetBuildDirectoryFull, "/compiler_depend.ts")));
auto dependTimestamp = this->LocalGenerator->MaybeRelativeToTopBinDir(
cmStrCat(this->TargetBuildDirectoryFull, "/compiler_depend.ts"));
depends.emplace_back(std::move(dependTimestamp));
}

View File

@@ -24,6 +24,17 @@ add_library(toplib STATIC toplib.c)
add_subdirectory(DepfileSubdir)
set(TEST_SPACE 1)
if(CMAKE_GENERATOR STREQUAL "Unix Makefiles")
execute_process(COMMAND "${CMAKE_MAKE_PROGRAM}" no_such_target --version RESULT_VARIABLE res OUTPUT_VARIABLE out ERROR_VARIABLE out)
if(NOT res EQUAL 0 OR NOT out MATCHES "GNU")
set(TEST_SPACE 0)
endif()
endif()
if(TEST_SPACE)
add_subdirectory(DepfileSubdirWithSpace)
endif()
add_custom_command(
OUTPUT toplib2.c
DEPFILE toplib2.c.d

View File

@@ -0,0 +1,2 @@
add_subdirectory("path with space")

View File

@@ -0,0 +1,9 @@
add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/dummy.txt"
COMMAND ${CMAKE_COMMAND} -E touch "${CMAKE_CURRENT_BINARY_DIR}/dummy.txt"
DEPFILE dummy.txt.d
)
add_custom_target(subdir_space ALL
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/dummy.txt"
)