mirror of
https://github.com/Kitware/CMake.git
synced 2026-04-19 04:40:39 -05:00
@@ -1257,8 +1257,6 @@ cmNinjaBuild GetScanBuildStatement(const std::string& ruleName,
|
|||||||
{
|
{
|
||||||
cmNinjaBuild scanBuild(ruleName);
|
cmNinjaBuild scanBuild(ruleName);
|
||||||
|
|
||||||
scanBuild.RspFile = "$out.rsp";
|
|
||||||
|
|
||||||
if (compilePP) {
|
if (compilePP) {
|
||||||
// Move compilation dependencies to the scan/preprocessing build statement.
|
// Move compilation dependencies to the scan/preprocessing build statement.
|
||||||
std::swap(scanBuild.ExplicitDeps, objBuild.ExplicitDeps);
|
std::swap(scanBuild.ExplicitDeps, objBuild.ExplicitDeps);
|
||||||
@@ -1299,6 +1297,7 @@ cmNinjaBuild GetScanBuildStatement(const std::string& ruleName,
|
|||||||
// Tell dependency scanner where to store dyndep intermediate results.
|
// Tell dependency scanner where to store dyndep intermediate results.
|
||||||
std::string ddiFileName = cmStrCat(objectFileName, ".ddi");
|
std::string ddiFileName = cmStrCat(objectFileName, ".ddi");
|
||||||
scanBuild.Variables["DYNDEP_INTERMEDIATE_FILE"] = ddiFileName;
|
scanBuild.Variables["DYNDEP_INTERMEDIATE_FILE"] = ddiFileName;
|
||||||
|
scanBuild.RspFile = cmStrCat(ddiFileName, ".rsp");
|
||||||
|
|
||||||
// Outputs of the scan/preprocessor build statement.
|
// Outputs of the scan/preprocessor build statement.
|
||||||
if (compilePP) {
|
if (compilePP) {
|
||||||
|
|||||||
23
Tests/RunCMake/CXXModules/NinjaForceResponseFile-check.cmake
Normal file
23
Tests/RunCMake/CXXModules/NinjaForceResponseFile-check.cmake
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
if (RunCMake_GENERATOR_IS_MULTI_CONFIG)
|
||||||
|
set(path "${RunCMake_TEST_BINARY_DIR}/CMakeFiles/impl-Debug.ninja")
|
||||||
|
else ()
|
||||||
|
set(path "${RunCMake_TEST_BINARY_DIR}/build.ninja")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
if (NOT EXISTS "${path}")
|
||||||
|
list(APPEND RunCMake_TEST_FAILED
|
||||||
|
"Failed to find `ninja` build file: '${path}'")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
file(READ "${path}" rspfiles
|
||||||
|
REGEX "^ *RSP_FILE =")
|
||||||
|
|
||||||
|
if (rspfiles MATCHES "\\$out\\.rsp$")
|
||||||
|
message(FATAL_ERROR
|
||||||
|
"rspfiles for modules should be specified explicitly")
|
||||||
|
elseif (NOT rspfiles MATCHES "ddi\\.rsp")
|
||||||
|
message(FATAL_ERROR
|
||||||
|
"rspfiles for scanning rules should be specified according to scan output filenames")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
string(REPLACE ";" "\n " RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}")
|
||||||
27
Tests/RunCMake/CXXModules/NinjaForceResponseFile.cmake
Normal file
27
Tests/RunCMake/CXXModules/NinjaForceResponseFile.cmake
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
# Fake out that we have dyndep; we only need to generate, not actually build
|
||||||
|
# here.
|
||||||
|
set(CMAKE_CXX_SCANDEP_SOURCE "")
|
||||||
|
|
||||||
|
enable_language(CXX)
|
||||||
|
|
||||||
|
if (NOT CMAKE_GENERATOR MATCHES "Ninja")
|
||||||
|
message(FATAL_ERROR
|
||||||
|
"This test requires a 'Ninja' generator to be used.")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
set(CMAKE_NINJA_FORCE_RESPONSE_FILE 1)
|
||||||
|
|
||||||
|
add_library(ninja-forced-response-file)
|
||||||
|
target_sources(ninja-forced-response-file
|
||||||
|
PRIVATE
|
||||||
|
FILE_SET modules TYPE CXX_MODULES
|
||||||
|
BASE_DIRS
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/sources"
|
||||||
|
FILES
|
||||||
|
sources/module.cxx
|
||||||
|
sources/module-part.cxx
|
||||||
|
FILE_SET internal_partitions TYPE CXX_MODULES FILES
|
||||||
|
sources/module-internal-part.cxx)
|
||||||
|
target_compile_features(ninja-forced-response-file
|
||||||
|
PRIVATE
|
||||||
|
cxx_std_20)
|
||||||
@@ -94,6 +94,7 @@ if (RunCMake_GENERATOR MATCHES "Ninja")
|
|||||||
run_cmake(NinjaDependInfoFileSet)
|
run_cmake(NinjaDependInfoFileSet)
|
||||||
run_cmake(NinjaDependInfoExport)
|
run_cmake(NinjaDependInfoExport)
|
||||||
run_cmake(NinjaDependInfoBMIInstall)
|
run_cmake(NinjaDependInfoBMIInstall)
|
||||||
|
run_cmake(NinjaForceResponseFile) # issue#25367
|
||||||
elseif (RunCMake_GENERATOR MATCHES "Visual Studio")
|
elseif (RunCMake_GENERATOR MATCHES "Visual Studio")
|
||||||
run_cmake(VisualStudioNoSyntheticTargets)
|
run_cmake(VisualStudioNoSyntheticTargets)
|
||||||
else ()
|
else ()
|
||||||
|
|||||||
Reference in New Issue
Block a user