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:
Brad King
2009-09-16 15:09:42 -04:00
parent 700cdf393a
commit 6e8aeba415
2 changed files with 21 additions and 0 deletions

View File

@@ -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