Browse Source

ENH: Add pre and post install script support

Andy Cedilnik 21 years ago
parent
commit
db68c543ff

+ 11 - 0
Source/cmLocalGenerator.cxx

@@ -130,6 +130,13 @@ void cmLocalGenerator::GenerateInstallRules()
       const char* dest = destination.c_str();
       int type = l->second.GetType();
 
+      const char* preinstall = l->second.GetProperty("PRE_INSTALL_SCRIPT");
+      const char* postinstall = l->second.GetProperty("POST_INSTALL_SCRIPT");
+      if ( preinstall )
+        {
+        fout << "INCLUDE(" << preinstall << ")" << std::endl;
+        }
+
       std::string fname;
       const char* files;
       // now install the target
@@ -226,6 +233,10 @@ void cmLocalGenerator::GenerateInstallRules()
       default:
         break;
         }
+      if ( postinstall )
+        {
+        fout << "INCLUDE(" << postinstall << ")" << std::endl;
+        }
       }
     }
   cmMakefile* mf = this->GetMakefile();

+ 3 - 1
Source/cmSetTargetPropertiesCommand.h

@@ -62,7 +62,9 @@ public:
         "systems and libraries.   CMake also knows about LINK_FLAGS, which "
         "can be used to add extra flags to the link step of a target."
         "DEFINE_SYMBOL is a symbol that is defined when compiling C or C++ "
-        "sources.  "
+        "sources.  PRE_INSTALL_SCRIPT specifies CMake script that is run "
+        "prior to installing the target. POST_INSTALL_SCRIPT specifies "
+        "CMake script that is run after target is installed. "
         "If not set here then it is set to target_EXPORTS by default "
         "(with some substitutions if target is not a valid C identifier).  "
         "You can use and prop value pair you want and extract it later with "

+ 4 - 0
Tests/SimpleInstall/CMakeLists.txt

@@ -64,6 +64,10 @@ ELSE(STAGE2)
   INSTALL_TARGETS(/bin SimpleInstall)
   INSTALL_TARGETS(/lib test1 test2 test3)
   INSTALL_TARGETS(/include lib1.h lib2.h lib3.h)
+  SET_TARGET_PROPERTIES(SimpleInstall PROPERTIES PRE_INSTALL_SCRIPT 
+    ${CMAKE_CURRENT_SOURCE_DIR}/PreInstall.cmake)
+  SET_TARGET_PROPERTIES(SimpleInstall PROPERTIES POST_INSTALL_SCRIPT 
+    ${CMAKE_CURRENT_SOURCE_DIR}/PostInstall.cmake)
 ENDIF(STAGE2)
 
 ADD_CUSTOM_COMMAND(

+ 6 - 0
Tests/SimpleInstall/PostInstall.cmake

@@ -0,0 +1,6 @@
+MESSAGE("In post install")
+IF(PRE_INSTALL_DID_RUN)
+  MESSAGE("Pre and post install work fine")
+ELSE(PRE_INSTALL_DID_RUN)
+  MESSAGE(FATAL_ERROR "Pre install did not run before post install")
+ENDIF(PRE_INSTALL_DID_RUN)

+ 2 - 0
Tests/SimpleInstall/PreInstall.cmake

@@ -0,0 +1,2 @@
+MESSAGE("This is in pre install")
+SET(PRE_INSTALL_DID_RUN 1)

+ 4 - 0
Tests/SimpleInstallS2/CMakeLists.txt

@@ -64,6 +64,10 @@ ELSE(STAGE2)
   INSTALL_TARGETS(/bin SimpleInstall)
   INSTALL_TARGETS(/lib test1 test2 test3)
   INSTALL_TARGETS(/include lib1.h lib2.h lib3.h)
+  SET_TARGET_PROPERTIES(SimpleInstall PROPERTIES PRE_INSTALL_SCRIPT 
+    ${CMAKE_CURRENT_SOURCE_DIR}/PreInstall.cmake)
+  SET_TARGET_PROPERTIES(SimpleInstall PROPERTIES POST_INSTALL_SCRIPT 
+    ${CMAKE_CURRENT_SOURCE_DIR}/PostInstall.cmake)
 ENDIF(STAGE2)
 
 ADD_CUSTOM_COMMAND(

+ 6 - 0
Tests/SimpleInstallS2/PostInstall.cmake

@@ -0,0 +1,6 @@
+MESSAGE("In post install")
+IF(PRE_INSTALL_DID_RUN)
+  MESSAGE("Pre and post install work fine")
+ELSE(PRE_INSTALL_DID_RUN)
+  MESSAGE(FATAL_ERROR "Pre install did not run before post install")
+ENDIF(PRE_INSTALL_DID_RUN)

+ 2 - 0
Tests/SimpleInstallS2/PreInstall.cmake

@@ -0,0 +1,2 @@
+MESSAGE("This is in pre install")
+SET(PRE_INSTALL_DID_RUN 1)