ENH: Preserve permissions when copying files

This commit is contained in:
Andy Cedilnik 2004-01-26 15:50:38 -05:00
parent 900ad59867
commit 09421a261c
3 changed files with 18 additions and 1 deletions

View File

@ -74,6 +74,8 @@ void cmConfigureFileCommand::ConfigureFile()
{
m_Makefile->AddCMakeDependFile(m_InputFile.c_str());
cmSystemTools::ConvertToUnixSlashes(m_OuputFile);
mode_t perm = 0;
cmSystemTools::GetPermissions(m_InputFile.c_str(), perm);
std::string::size_type pos = m_OuputFile.rfind('/');
if(pos != std::string::npos)
{
@ -142,6 +144,7 @@ void cmConfigureFileCommand::ConfigureFile()
cmSystemTools::CopyFileIfDifferent(tempOutputFile.c_str(),
m_OuputFile.c_str());
cmSystemTools::RemoveFile(tempOutputFile.c_str());
cmSystemTools::SetPermissions(m_OuputFile.c_str(), perm);
}
}

View File

@ -810,7 +810,19 @@ bool cmSystemTools::DoesFileExistWithExtensions(
bool cmSystemTools::cmCopyFile(const char* source, const char* destination)
{
return Superclass::CopyFileAlways(source, destination);
mode_t perm = 0;
return cmSystemTools::GetPermissions(source, perm) &&
Superclass::CopyFileAlways(source, destination) &&
cmSystemTools::SetPermissions(destination, perm);
}
bool cmSystemTools::CopyFileIfDifferent(const char* source,
const char* destination)
{
mode_t perm = 0;
return cmSystemTools::GetPermissions(source, perm) &&
Superclass::CopyFileIfDifferent(source, destination) &&
cmSystemTools::SetPermissions(destination, perm);
}
void cmSystemTools::Glob(const char *directory, const char *regexp,

View File

@ -150,6 +150,8 @@ public:
///! Copy a file.
static bool cmCopyFile(const char* source, const char* destination);
static bool CopyFileIfDifferent(const char* source,
const char* destination);
/**
* Run an executable command and put the stdout in output.