Browse Source

Use CPACK_xxx and CMAKE_xxx in a consistent way.

CMAKE_xxx vars are now used in the CMake-generated cmake_install.cmake
script while CPACK_xxx equivalent vars are used from within CPack.
CPack is responsible for getting/forwarding definitions of
CPACK_xxxx var corresponding to CMAKE_xxxx when invoking
CMake-generated install scripts.
As a consequence:
CMAKE_ABSOLUTE_DESTINATION_FILES
CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION
CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION
may be used from outside CPack as well.
e.g.
cmake -DCMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION=1 -P cmake_install.cmake
works as expected.
Eric NOULARD 13 years ago
parent
commit
4986d525af

+ 18 - 3
Source/CPack/cmCPackDocumentVariables.cxx

@@ -78,19 +78,34 @@ void cmCPackDocumentVariables::DefineVariables(cmake* cm)
          " The script is not called by e.g.: make install.", false,
          "Variables common to all CPack generators");
 
+  cm->DefineProperty
+        ("CPACK_ABSOLUTE_DESTINATION_FILES", cmProperty::VARIABLE,
+         "List of files which have been installed using "
+         " an ABSOLUTE DESTINATION path.",
+         "This variable is a Read-Only variable which is set internally"
+         " by CPack during installation and before packaging using"
+         " CMAKE_ABSOLUTE_DESTINATION_FILES defined in cmake_install.cmake "
+         "scripts. The value can be used within CPack project configuration"
+         " file and/or CPack<GEN>.cmake file of <GEN> generator.", false,
+         "Variables common to all CPack generators");
+
   cm->DefineProperty
         ("CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION", cmProperty::VARIABLE,
          "Ask CPack to warn each time a file with absolute INSTALL"
          " DESTINATION is encountered.",
-         "", false,
+         "This variable triggers the definition of "
+         "CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION when CPack runs"
+         " cmake_install.cmake scripts.", false,
          "Variables common to all CPack generators");
 
   cm->DefineProperty
         ("CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION", cmProperty::VARIABLE,
          "Ask CPack to error out as soon as a file with absolute INSTALL"
-         " DESTINATION is encountered",
+         " DESTINATION is encountered.",
          "The fatal error is emitted before the installation of "
          "the offending file takes place. Some CPack generators, like NSIS,"
-         "enforce this internally.", false,
+         "enforce this internally. "
+         "This variable triggers the definition of"
+         "CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION when CPack runs"
          "Variables common to all CPack generators");
 }

+ 10 - 2
Source/CPack/cmCPackGenerator.cxx

@@ -854,7 +854,7 @@ int cmCPackGenerator::InstallProjectViaInstallCMakeProjects(
         // then forward request to cmake_install.cmake script
         if (this->GetOption("CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION"))
           {
-            mf->AddDefinition("CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION",
+            mf->AddDefinition("CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION",
                               "1");
           }
         // If current CPack generator does support
@@ -864,11 +864,19 @@ int cmCPackGenerator::InstallProjectViaInstallCMakeProjects(
         if (!SupportsAbsoluteDestination() ||
             this->GetOption("CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION"))
           {
-            mf->AddDefinition("CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION",
+            mf->AddDefinition("CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION",
                               "1");
           }
         // do installation
         int res = mf->ReadListFile(0, installFile.c_str());
+        // forward definition of CMAKE_ABSOLUTE_DESTINATION_FILES
+        // to CPack (may be used by generators like CPack RPM or DEB)
+        // in order to transparently handle ABSOLUTE PATH
+        if (mf->GetDefinition("CMAKE_ABSOLUTE_DESTINATION_FILES"))
+          {
+            mf->AddDefinition("CPACK_ABSOLUTE_DESTINATION_FILES",
+                mf->GetDefinition("CMAKE_ABSOLUTE_DESTINATION_FILES"));
+          }
 
         // Now rebuild the list of files after installation
         // of the current component (if we are in component install)

+ 30 - 0
Source/cmDocumentVariables.cxx

@@ -833,6 +833,36 @@ void cmDocumentVariables::DefineVariables(cmake* cm)
      "Default is ON.",false,
      "Variables That Change Behavior");
 
+  cm->DefineProperty
+    ("CMAKE_ABSOLUTE_DESTINATION_FILES", cmProperty::VARIABLE,
+      "List of files which have been installed using "
+      " an ABSOLUTE DESTINATION path.",
+      "This variable is defined by CMake-generated cmake_install.cmake "
+      "scripts."
+      " It can be used (read-only) by program or script that source those"
+      " install scripts. This is used by some CPack generators (e.g. RPM).",
+      false,
+      "Variables That Change Behavior");
+
+  cm->DefineProperty
+    ("CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION", cmProperty::VARIABLE,
+      "Ask cmake_install.cmake script to warn each time a file with "
+      "absolute INSTALL DESTINATION is encountered.",
+      "This variable is used by CMake-generated cmake_install.cmake"
+      " scripts. If ones set this variable to ON while running the"
+      " script, it may get warning messages from the script.", false,
+      "Variables That Change Behavior");
+
+  cm->DefineProperty
+    ("CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION", cmProperty::VARIABLE,
+      "Ask cmake_install.cmake script to error out as soon as "
+      "a file with absolute INSTALL DESTINATION is encountered.",
+      "The fatal error is emitted before the installation of "
+      "the offending file takes place."
+      " This variable is used by CMake-generated cmake_install.cmake"
+      " scripts. If ones set this variable to ON while running the"
+      " script, it may get fatal error messages from the script.",false,
+      "Variables That Change Behavior");
 
   // Variables defined by CMake that describe the system
 

+ 8 - 8
Source/cmInstallGenerator.cxx

@@ -60,7 +60,7 @@ void cmInstallGenerator
   std::string dest = this->GetInstallDestination();
   if (cmSystemTools::FileIsFullPath(dest.c_str()))
      {
-     os << "list(APPEND CPACK_ABSOLUTE_DESTINATION_FILES\n";
+     os << "list(APPEND CMAKE_ABSOLUTE_DESTINATION_FILES\n";
      os << indent << " \"";
      for(std::vector<std::string>::const_iterator fi = files.begin();
                fi != files.end(); ++fi)
@@ -80,16 +80,16 @@ void cmInstallGenerator
                  }
              }
      os << "\")\n";
-     os << indent << "IF (CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION)\n";
+     os << indent << "IF (CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION)\n";
      os << indent << indent << "message(WARNING \"ABSOLUTE path INSTALL "
-        << "DESTINATION : ${CPACK_ABSOLUTE_DESTINATION_FILES}\")\n";
-     os << indent << "ENDIF (CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION)\n";
+        << "DESTINATION : ${CMAKE_ABSOLUTE_DESTINATION_FILES}\")\n";
+     os << indent << "ENDIF (CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION)\n";
 
-     os << indent << "IF (CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION)\n";
+     os << indent << "IF (CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION)\n";
      os << indent << indent << "message(FATAL_ERROR \"ABSOLUTE path INSTALL "
-        << "DESTINATION forbidden (by CPack): "
-        << "${CPACK_ABSOLUTE_DESTINATION_FILES}\")\n";
-     os << indent << "ENDIF (CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION)\n";
+        << "DESTINATION forbidden (by caller): "
+        << "${CMAKE_ABSOLUTE_DESTINATION_FILES}\")\n";
+     os << indent << "ENDIF (CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION)\n";
      }
   os << "FILE(INSTALL DESTINATION \"" << dest << "\" TYPE " << stype.c_str();
   if(optional)