ENH: Simplify CMAKE_INSTALL_ALWAYS implementation

This simplifies cmFileInstaller internally by storing the 'always' mark
as an instance variable instead of passing it through all method
signatures.
This commit is contained in:
Brad King 2009-04-29 08:46:36 -04:00
parent 8d685184f3
commit dc0621ba5a
1 changed files with 20 additions and 27 deletions

View File

@ -904,15 +904,17 @@ cmFileCommand::HandleDifferentCommand(std::vector<std::string> const& args)
struct cmFileInstaller
{
// Methods to actually install files.
bool InstallFile(const char* fromFile, const char* toFile, bool always);
bool InstallDirectory(const char* source, const char* destination,
bool always);
bool InstallFile(const char* fromFile, const char* toFile);
bool InstallDirectory(const char* source, const char* destination);
// All instances need the file command and makefile using them.
cmFileInstaller(cmFileCommand* command):
FileCommand(command), Makefile(command->GetMakefile()),
DestDirLength(0), MatchlessFiles(true)
Always(false), DestDirLength(0), MatchlessFiles(true)
{
// Check whether to copy files always or only if they have changed.
this->Always =
cmSystemTools::IsOn(cmSystemTools::GetEnv("CMAKE_INSTALL_ALWAYS"));
// Get the current manifest.
this->Manifest =
this->Makefile->GetSafeDefinition("CMAKE_INSTALL_MANIFEST_FILES");
@ -927,6 +929,7 @@ struct cmFileInstaller
private:
cmFileCommand* FileCommand;
cmMakefile* Makefile;
bool Always;
cmFileTimeComparison FileTimes;
public:
@ -1022,12 +1025,11 @@ public:
}
private:
bool InstallSymlink(const char* fromFile, const char* toFile, bool always);
bool InstallSymlink(const char* fromFile, const char* toFile);
};
//----------------------------------------------------------------------------
bool cmFileInstaller::InstallSymlink(const char* fromFile, const char* toFile,
bool always)
bool cmFileInstaller::InstallSymlink(const char* fromFile, const char* toFile)
{
// Read the original symlink.
std::string symlinkTarget;
@ -1043,7 +1045,7 @@ bool cmFileInstaller::InstallSymlink(const char* fromFile, const char* toFile,
// Compare the symlink value to that at the destination if not
// always installing.
bool copy = true;
if(!always)
if(!this->Always)
{
std::string oldSymlinkTarget;
if(cmSystemTools::ReadSymlink(toFile, oldSymlinkTarget))
@ -1083,8 +1085,7 @@ bool cmFileInstaller::InstallSymlink(const char* fromFile, const char* toFile,
}
//----------------------------------------------------------------------------
bool cmFileInstaller::InstallFile(const char* fromFile, const char* toFile,
bool always)
bool cmFileInstaller::InstallFile(const char* fromFile, const char* toFile)
{
// Collect any properties matching this file name.
MatchProperties match_properties =
@ -1099,12 +1100,12 @@ bool cmFileInstaller::InstallFile(const char* fromFile, const char* toFile,
// Short-circuit for symbolic links.
if(cmSystemTools::FileIsSymlink(fromFile))
{
return this->InstallSymlink(fromFile, toFile, always);
return this->InstallSymlink(fromFile, toFile);
}
// Determine whether we will copy the file.
bool copy = true;
if(!always)
if(!this->Always)
{
// If both files exist with the same time do not copy.
if(!this->FileTimes.FileTimesDiffer(fromFile, toFile))
@ -1132,7 +1133,7 @@ bool cmFileInstaller::InstallFile(const char* fromFile, const char* toFile,
this->ManifestAppend(toFile);
// Set the file modification time of the destination file.
if(copy && !always)
if(copy && !this->Always)
{
if (!cmSystemTools::CopyFileTime(fromFile, toFile))
{
@ -1165,8 +1166,7 @@ bool cmFileInstaller::InstallFile(const char* fromFile, const char* toFile,
//----------------------------------------------------------------------------
bool cmFileInstaller::InstallDirectory(const char* source,
const char* destination,
bool always)
const char* destination)
{
// Collect any properties matching this directory name.
MatchProperties match_properties =
@ -1181,7 +1181,7 @@ bool cmFileInstaller::InstallDirectory(const char* source,
// Short-circuit for symbolic links.
if(cmSystemTools::FileIsSymlink(source))
{
return this->InstallSymlink(source, destination, always);
return this->InstallSymlink(source, destination);
}
// Inform the user about this directory installation.
@ -1256,7 +1256,7 @@ bool cmFileInstaller::InstallDirectory(const char* source,
cmsys_stl::string toDir = destination;
toDir += "/";
toDir += dir.GetFile(fileNum);
if(!this->InstallDirectory(fromPath.c_str(), toDir.c_str(), always))
if(!this->InstallDirectory(fromPath.c_str(), toDir.c_str()))
{
return false;
}
@ -1267,7 +1267,7 @@ bool cmFileInstaller::InstallDirectory(const char* source,
std::string toFile = destination;
toFile += "/";
toFile += dir.GetFile(fileNum);
if(!this->InstallFile(fromPath.c_str(), toFile.c_str(), always))
if(!this->InstallFile(fromPath.c_str(), toFile.c_str()))
{
return false;
}
@ -2041,11 +2041,6 @@ bool cmFileCommand::DoInstall( cmFileInstaller& installer,
{
typedef std::set<cmStdString>::const_iterator iter_type;
// Check whether files should be copied always or only if they have
// changed.
bool copy_always =
cmSystemTools::IsOn(cmSystemTools::GetEnv("CMAKE_INSTALL_ALWAYS"));
// Handle each file listed.
for (std::vector<std::string>::size_type i = 0; i < files.size(); i ++ )
{
@ -2082,8 +2077,7 @@ bool cmFileCommand::DoInstall( cmFileInstaller& installer,
cmSystemTools::FileIsDirectory(fromFile.c_str())))
{
// Try installing this directory.
if(!installer.InstallDirectory(fromFile.c_str(), toFile.c_str(),
copy_always))
if(!installer.InstallDirectory(fromFile.c_str(), toFile.c_str()))
{
return false;
}
@ -2091,8 +2085,7 @@ bool cmFileCommand::DoInstall( cmFileInstaller& installer,
else if(cmSystemTools::FileExists(fromFile.c_str()))
{
// Install this file.
if(!installer.InstallFile(fromFile.c_str(), toFile.c_str(),
copy_always))
if(!installer.InstallFile(fromFile.c_str(), toFile.c_str()))
{
return false;
}