mirror of
https://github.com/Kitware/CMake.git
synced 2026-05-02 20:29:49 -05:00
configure_file: canonicalize input and output path in dependencies
Represent the input file path internally in canonical form. Otherwise multiple `configure_file` calls that share the same input file but specify it relative to different directories (e.g. via `../`) result in multiple copies of the dependency on the rule to re-run CMake. This causes the Ninja generator to emit duplicate phony build statements for these dependencies, which generates an error with `-w dupbuild=err`, which will be default in Ninja 1.9. Also canonicalize the output path for consistency. Add a test case. Fixes: #18584
This commit is contained in:
committed by
Brad King
parent
48bc74710d
commit
6199637e95
@@ -20,11 +20,8 @@ bool cmConfigureFileCommand::InitialPass(std::vector<std::string> const& args,
|
||||
}
|
||||
|
||||
std::string const& inFile = args[0];
|
||||
if (!cmSystemTools::FileIsFullPath(inFile)) {
|
||||
this->InputFile = this->Makefile->GetCurrentSourceDirectory();
|
||||
this->InputFile += "/";
|
||||
}
|
||||
this->InputFile += inFile;
|
||||
this->InputFile = cmSystemTools::CollapseFullPath(
|
||||
inFile, this->Makefile->GetCurrentSourceDirectory());
|
||||
|
||||
// If the input location is a directory, error out.
|
||||
if (cmSystemTools::FileIsDirectory(this->InputFile)) {
|
||||
@@ -39,11 +36,8 @@ bool cmConfigureFileCommand::InitialPass(std::vector<std::string> const& args,
|
||||
}
|
||||
|
||||
std::string const& outFile = args[1];
|
||||
if (!cmSystemTools::FileIsFullPath(outFile)) {
|
||||
this->OutputFile = this->Makefile->GetCurrentBinaryDirectory();
|
||||
this->OutputFile += "/";
|
||||
}
|
||||
this->OutputFile += outFile;
|
||||
this->OutputFile = cmSystemTools::CollapseFullPath(
|
||||
outFile, this->Makefile->GetCurrentBinaryDirectory());
|
||||
|
||||
// If the output location is already a directory put the file in it.
|
||||
if (cmSystemTools::FileIsDirectory(this->OutputFile)) {
|
||||
|
||||
Reference in New Issue
Block a user