mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-06 05:40:54 -06:00
Teach configure_file to handle directory names
This commit teaches configure_file how to handle directories for input and output. It is an error if the input is a directory. If the output is a directory we put the configured copy of the input file in it with the same name. See issue #9537.
This commit is contained in:
@@ -36,6 +36,17 @@ bool cmConfigureFileCommand
|
||||
}
|
||||
this->InputFile += inFile;
|
||||
|
||||
// If the input location is a directory, error out.
|
||||
if(cmSystemTools::FileIsDirectory(this->InputFile.c_str()))
|
||||
{
|
||||
cmOStringStream e;
|
||||
e << "input location\n"
|
||||
<< " " << this->InputFile << "\n"
|
||||
<< "is a directory but a file was expected.";
|
||||
this->SetError(e.str().c_str());
|
||||
return false;
|
||||
}
|
||||
|
||||
const char* outFile = args[1].c_str();
|
||||
if(!cmSystemTools::FileIsFullPath(outFile))
|
||||
{
|
||||
@@ -44,6 +55,13 @@ bool cmConfigureFileCommand
|
||||
}
|
||||
this->OutputFile += outFile;
|
||||
|
||||
// If the output location is already a directory put the file in it.
|
||||
if(cmSystemTools::FileIsDirectory(this->OutputFile.c_str()))
|
||||
{
|
||||
this->OutputFile += "/";
|
||||
this->OutputFile += cmSystemTools::GetFilenameName(inFile);
|
||||
}
|
||||
|
||||
if ( !this->Makefile->CanIWriteThisFile(this->OutputFile.c_str()) )
|
||||
{
|
||||
std::string e = "attempted to configure a file: " + this->OutputFile
|
||||
|
||||
Reference in New Issue
Block a user