mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-18 17:31:57 +08:00
Revert "Ninja: Use full path for all source files"
This reverts commit v3.7.0-rc1~275^2 (Ninja: Use full path for all source files, 2016-08-05). Unfortunately using absolute paths can cause incorrect rebuilds due to ninja limitations. The ninja manual [1] explains: > ... using absolute paths, your depfile may result in a mixture of > relative and absolute paths. Paths used by other build rules need > to match exactly. Passing an absolute path to a source file to the compiler while using a relative path in the ninja build manifest can cause such mixture and lead to incorrect rebuilds. Simply revert the change for now. Note that there was a follow-up to the original change in commit v3.7.0-rc2~10^2 (Ninja: Fix RC language depfile generation with cmcldeps, 2016-10-13). We don't need to revert that because that change made the relevant code cleverly adapt to whatever variable we use to reference the source file. [1] https://ninja-build.org/manual.html#_deps Fixes: #16675 Issue: #13894
This commit is contained in:
@@ -377,7 +377,7 @@ void cmNinjaTargetGenerator::WriteCompileRule(const std::string& lang)
|
|||||||
vars.RuleLauncher = "RULE_LAUNCH_COMPILE";
|
vars.RuleLauncher = "RULE_LAUNCH_COMPILE";
|
||||||
vars.CMTarget = this->GetGeneratorTarget();
|
vars.CMTarget = this->GetGeneratorTarget();
|
||||||
vars.Language = lang.c_str();
|
vars.Language = lang.c_str();
|
||||||
vars.Source = "$IN_ABS";
|
vars.Source = "$in";
|
||||||
vars.Object = "$out";
|
vars.Object = "$out";
|
||||||
vars.Defines = "$DEFINES";
|
vars.Defines = "$DEFINES";
|
||||||
vars.Includes = "$INCLUDES";
|
vars.Includes = "$INCLUDES";
|
||||||
@@ -729,7 +729,8 @@ void cmNinjaTargetGenerator::WriteObjectBuildStatement(
|
|||||||
cmSourceFile const* source, bool writeOrderDependsTargetForTarget)
|
cmSourceFile const* source, bool writeOrderDependsTargetForTarget)
|
||||||
{
|
{
|
||||||
std::string const language = source->GetLanguage();
|
std::string const language = source->GetLanguage();
|
||||||
std::string const sourceFileName = this->GetSourceFilePath(source);
|
std::string const sourceFileName =
|
||||||
|
language == "RC" ? source->GetFullPath() : this->GetSourceFilePath(source);
|
||||||
std::string const objectDir =
|
std::string const objectDir =
|
||||||
this->ConvertToNinjaPath(this->GeneratorTarget->GetSupportDirectory());
|
this->ConvertToNinjaPath(this->GeneratorTarget->GetSupportDirectory());
|
||||||
std::string const objectFileName =
|
std::string const objectFileName =
|
||||||
@@ -738,8 +739,6 @@ void cmNinjaTargetGenerator::WriteObjectBuildStatement(
|
|||||||
cmSystemTools::GetFilenamePath(objectFileName);
|
cmSystemTools::GetFilenamePath(objectFileName);
|
||||||
|
|
||||||
cmNinjaVars vars;
|
cmNinjaVars vars;
|
||||||
vars["IN_ABS"] = this->GetLocalGenerator()->ConvertToOutputFormat(
|
|
||||||
source->GetFullPath(), cmOutputConverter::SHELL);
|
|
||||||
vars["FLAGS"] = this->ComputeFlagsForObject(source, language);
|
vars["FLAGS"] = this->ComputeFlagsForObject(source, language);
|
||||||
vars["DEFINES"] = this->ComputeDefines(source, language);
|
vars["DEFINES"] = this->ComputeDefines(source, language);
|
||||||
vars["INCLUDES"] = this->GetIncludes(language);
|
vars["INCLUDES"] = this->GetIncludes(language);
|
||||||
|
Reference in New Issue
Block a user