From ee2a13b11f08efcde4ec3579763ae3236b278693 Mon Sep 17 00:00:00 2001 From: Bill Hoffman Date: Tue, 19 Feb 2008 14:26:20 -0500 Subject: [PATCH] ENH: install working with symlink qt tool --- Source/CPack/cmCPackPackageMakerGenerator.cxx | 68 ++++++++++++++++--- Source/CPack/cmCPackPackageMakerGenerator.h | 3 + Source/QtDialog/CMakeLists.txt | 12 +++- Source/QtDialog/QtDialogCPack.cmake.in | 14 ++-- Source/QtDialog/postflight.sh.in | 4 ++ Source/QtDialog/postupgrade.sh.in | 2 + 6 files changed, 88 insertions(+), 15 deletions(-) create mode 100755 Source/QtDialog/postflight.sh.in create mode 100755 Source/QtDialog/postupgrade.sh.in diff --git a/Source/CPack/cmCPackPackageMakerGenerator.cxx b/Source/CPack/cmCPackPackageMakerGenerator.cxx index 1e9a3eb56..a5884a96e 100644 --- a/Source/CPack/cmCPackPackageMakerGenerator.cxx +++ b/Source/CPack/cmCPackPackageMakerGenerator.cxx @@ -38,6 +38,22 @@ cmCPackPackageMakerGenerator::~cmCPackPackageMakerGenerator() { } +int cmCPackPackageMakerGenerator::CopyInstallScript(const char* resdir, + const char* script, + const char* name) +{ + std::string dst = resdir; + dst += "/"; + dst += name; + cmSystemTools::CopyFileAlways(script, dst.c_str()); + cmSystemTools::SetPermissions(dst.c_str(),0777); + cmCPackLogger(cmCPackLog::LOG_VERBOSE, + "copy script : " << script << "\ninto " << dst.c_str() << + std::endl); + + return 1; +} + //---------------------------------------------------------------------- int cmCPackPackageMakerGenerator::CompressFiles(const char* outFileName, const char* toplevel, @@ -50,15 +66,51 @@ int cmCPackPackageMakerGenerator::CompressFiles(const char* outFileName, resDir += "/Resources"; std::string preflightDirName = resDir + "/PreFlight"; std::string postflightDirName = resDir + "/PostFlight"; - - if ( !cmsys::SystemTools::MakeDirectory(preflightDirName.c_str()) - || !cmsys::SystemTools::MakeDirectory(postflightDirName.c_str()) ) + const char* preflight = this->GetOption("CPACK_PREFLIGHT_SCRIPT"); + const char* postflight = this->GetOption("CPACK_POSTFLIGHT_SCRIPT"); + const char* postupgrade = this->GetOption("CPACK_POSTUPGRADE_SCRIPT"); + // if preflight or postflight scripts not there create directories + // of the same name, I think this makes it work + if(!preflight) { - cmCPackLogger(cmCPackLog::LOG_ERROR, - "Problem creating installer directories: " - << preflightDirName.c_str() << " and " - << postflightDirName.c_str() << std::endl); - return 0; + if ( !cmsys::SystemTools::MakeDirectory(preflightDirName.c_str())) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Problem creating installer directory: " + << preflightDirName.c_str() << std::endl); + return 0; + } + } + if(!postflight) + { + if ( !cmsys::SystemTools::MakeDirectory(postflightDirName.c_str())) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Problem creating installer directory: " + << postflightDirName.c_str() << std::endl); + return 0; + } + } + // if preflight, postflight, or postupgrade are set + // then copy them into the resource directory and make + // them executable + if(preflight) + { + this->CopyInstallScript(resDir.c_str(), + preflight, + "preflight"); + } + if(postflight) + { + this->CopyInstallScript(resDir.c_str(), + postflight, + "postflight"); + } + if(postupgrade) + { + this->CopyInstallScript(resDir.c_str(), + postupgrade, + "postupgrade"); } if ( !this->CopyCreateResourceFile("License") diff --git a/Source/CPack/cmCPackPackageMakerGenerator.h b/Source/CPack/cmCPackPackageMakerGenerator.h index 64df6b585..6c16c75ce 100644 --- a/Source/CPack/cmCPackPackageMakerGenerator.h +++ b/Source/CPack/cmCPackPackageMakerGenerator.h @@ -39,6 +39,9 @@ public: virtual ~cmCPackPackageMakerGenerator(); protected: + int CopyInstallScript(const char* resdir, + const char* script, + const char* name); virtual int InitializeInternal(); int CompressFiles(const char* outFileName, const char* toplevel, const std::vector& files); diff --git a/Source/QtDialog/CMakeLists.txt b/Source/QtDialog/CMakeLists.txt index a2cfdbf7e..dc77a2885 100644 --- a/Source/QtDialog/CMakeLists.txt +++ b/Source/QtDialog/CMakeLists.txt @@ -13,8 +13,6 @@ ELSE(NOT QT4_FOUND) IF(WIN32 AND NOT QT_CONFIG MATCHES "static") SET(CMAKE_PACKAGE_QTGUI FALSE) ENDIF(WIN32 AND NOT QT_CONFIG MATCHES "static") - CONFIGURE_FILE("${QtDialog_SOURCE_DIR}/QtDialogCPack.cmake.in" - "${QtDialog_BINARY_DIR}/QtDialogCPack.cmake" @ONLY) SET(SRCS AddCacheEntry.cxx AddCacheEntry.h @@ -69,9 +67,19 @@ ELSE(NOT QT4_FOUND) ${CMAKE_INSTALL_DESTINATION_ARGS}) ENDIF(CMAKE_PACKAGE_QTGUI) IF(APPLE) + SET(CMAKE_POSTFLIGHT_SCRIPT + "${CMake_BINARY_DIR}/Source/QtDialog/postflight.sh") + SET(CMAKE_POSTUPGRADE_SCRIPT + "${CMake_BINARY_DIR}/Source/QtDialog/postupgrade.sh") + configure_file("${CMake_SOURCE_DIR}/Source/QtDialog/postflight.sh.in" + "${CMake_BINARY_DIR}/Source/QtDialog/postflight.sh") + configure_file("${CMake_SOURCE_DIR}/Source/QtDialog/postupgrade.sh.in" + "${CMake_BINARY_DIR}/Source/QtDialog/postupgrade.sh") INSTALL(CODE "set(input_file \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/MacOS/cmake-gui\")") INSTALL(SCRIPT "${CMake_SOURCE_DIR}/Source/QtDialog/CMakeIngestOSXBundleLibraries.cmake") ENDIF(APPLE) + CONFIGURE_FILE("${QtDialog_SOURCE_DIR}/QtDialogCPack.cmake.in" + "${QtDialog_BINARY_DIR}/QtDialogCPack.cmake" @ONLY) ENDIF(NOT QT4_FOUND) diff --git a/Source/QtDialog/QtDialogCPack.cmake.in b/Source/QtDialog/QtDialogCPack.cmake.in index fc1fa799c..27bcbada9 100644 --- a/Source/QtDialog/QtDialogCPack.cmake.in +++ b/Source/QtDialog/QtDialogCPack.cmake.in @@ -3,11 +3,15 @@ SET(CMAKE_PACKAGE_QTGUI @CMAKE_PACKAGE_QTGUI@) IF(CMAKE_PACKAGE_QTGUI) SET(CPACK_PACKAGE_EXECUTABLES ${CPACK_PACKAGE_EXECUTABLES} "cmake-gui" "cmake-gui(beta)") -IF(IS_APPLE) - # for apple install we set the install prefix to /Applications and then install - # cmake into the bundle for cmake-gui - SET(CPACK_SET_DESTDIR TRUE) -ENDIF(IS_APPLE) + IF(IS_APPLE) + # for apple install we set the install prefix to + # / and then install + # cmake into the bundle for cmake-gui and must use DESTDIR + SET(CPACK_SET_DESTDIR TRUE) + # we also want to run post install stuff to setup command line + SET(CPACK_POSTFLIGHT_SCRIPT "@CMAKE_POSTFLIGHT_SCRIPT@") + SET(CPACK_POSTUPGRADE_SCRIPT "@CMAKE_POSTUPGRADE_SCRIPT@") + ENDIF(IS_APPLE) ENDIF(CMAKE_PACKAGE_QTGUI) diff --git a/Source/QtDialog/postflight.sh.in b/Source/QtDialog/postflight.sh.in new file mode 100755 index 000000000..88dd06659 --- /dev/null +++ b/Source/QtDialog/postflight.sh.in @@ -0,0 +1,4 @@ +#!/bin/bash +echo "$2/@CMAKE_INSTALL_SUBDIR@/cmake-gui.app/Contents/MacOS/cmake-gui" >>/tmp/mylog +"$2/@CMAKE_INSTALL_SUBDIR@/cmake-gui.app/Contents/MacOS/cmake-gui" --mac-install +exit 0 diff --git a/Source/QtDialog/postupgrade.sh.in b/Source/QtDialog/postupgrade.sh.in new file mode 100755 index 000000000..06bd98656 --- /dev/null +++ b/Source/QtDialog/postupgrade.sh.in @@ -0,0 +1,2 @@ +#!/bin/bash +exit 0