Bläddra i källkod

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.
Brad King 16 år sedan
förälder
incheckning
dc0621ba5a
1 ändrade filer med 20 tillägg och 27 borttagningar
  1. 20 27
      Source/cmFileCommand.cxx

+ 20 - 27
Source/cmFileCommand.cxx

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