diff options
author | David Cole <david.cole@kitware.com> | 2009-01-21 13:39:22 -0500 |
---|---|---|
committer | David Cole <david.cole@kitware.com> | 2009-01-21 13:39:22 -0500 |
commit | 36c228814b18ef115a1a72cac4f103691f249569 (patch) | |
tree | 8bcec68f08b0480ce329df9e0e28bf51b81af6ff | |
parent | 88a499c54c699c0893aee2736f22afbb457fbb41 (diff) | |
download | cmake-36c228814b18ef115a1a72cac4f103691f249569.tar.gz |
BUG: Fix issue #7523: Analyze output of 'hdiutil attach' to get the name of the volume that was mounted. Eliminates the need to use the -mountpoint arg of hdiutil which has a silly 90 character limit on the name of the mount point. Also add a custom volume icon to the BundleGeneratorTest to cover this code.
-rw-r--r-- | Source/CPack/cmCPackBundleGenerator.cxx | 18 | ||||
-rw-r--r-- | Source/CPack/cmCPackBundleGenerator.h | 2 | ||||
-rw-r--r-- | Tests/BundleGeneratorTest/CMakeLists.txt | 11 | ||||
-rw-r--r-- | Tests/BundleGeneratorTest/CustomVolumeIcon.icns | bin | 0 -> 37827 bytes |
4 files changed, 22 insertions, 9 deletions
diff --git a/Source/CPack/cmCPackBundleGenerator.cxx b/Source/CPack/cmCPackBundleGenerator.cxx index d1ecdd81fd..b37c267814 100644 --- a/Source/CPack/cmCPackBundleGenerator.cxx +++ b/Source/CPack/cmCPackBundleGenerator.cxx @@ -19,6 +19,8 @@ #include "cmCPackLog.h" #include "cmSystemTools.h" +#include <cmsys/RegularExpression.hxx> + //---------------------------------------------------------------------- cmCPackBundleGenerator::cmCPackBundleGenerator() { @@ -245,16 +247,14 @@ int cmCPackBundleGenerator::CompressFiles(const char* outFileName, if(!cpack_package_icon.empty()) { cmOStringStream temp_mount; - temp_mount << this->GetOption("CPACK_TOPLEVEL_DIRECTORY") << "/mnt"; - cmSystemTools::MakeDirectory(temp_mount.str().c_str()); cmOStringStream attach_command; attach_command << this->GetOption("CPACK_COMMAND_HDIUTIL"); attach_command << " attach"; - attach_command << " -mountpoint \"" << temp_mount.str() << "\""; attach_command << " \"" << temp_image.str() << "\""; - if(!this->RunCommand(attach_command)) + std::string attach_output; + if(!this->RunCommand(attach_command, &attach_output)) { cmCPackLogger(cmCPackLog::LOG_ERROR, "Error attaching temporary disk image." @@ -263,6 +263,10 @@ int cmCPackBundleGenerator::CompressFiles(const char* outFileName, return 0; } + cmsys::RegularExpression mountpoint_regex(".*(/Volumes/[^\n]+)\n.*"); + mountpoint_regex.find(attach_output.c_str()); + temp_mount << mountpoint_regex.match(1); + cmOStringStream setfile_command; setfile_command << this->GetOption("CPACK_COMMAND_SETFILE"); setfile_command << " -a C"; @@ -335,14 +339,14 @@ bool cmCPackBundleGenerator::CopyFile(cmOStringStream& source, } //---------------------------------------------------------------------- -bool cmCPackBundleGenerator::RunCommand(cmOStringStream& command) +bool cmCPackBundleGenerator::RunCommand(cmOStringStream& command, + std::string* output) { - std::string output; int exit_code = 1; bool result = cmSystemTools::RunSingleCommand( command.str().c_str(), - &output, + output, &exit_code, 0, this->GeneratorVerbose, diff --git a/Source/CPack/cmCPackBundleGenerator.h b/Source/CPack/cmCPackBundleGenerator.h index 9335fdd47c..2a794f3bc3 100644 --- a/Source/CPack/cmCPackBundleGenerator.h +++ b/Source/CPack/cmCPackBundleGenerator.h @@ -41,7 +41,7 @@ protected: const std::vector<std::string>& files); bool CopyFile(cmOStringStream& source, cmOStringStream& target); - bool RunCommand(cmOStringStream& command); + bool RunCommand(cmOStringStream& command, std::string* output = 0); std::string InstallPrefix; }; diff --git a/Tests/BundleGeneratorTest/CMakeLists.txt b/Tests/BundleGeneratorTest/CMakeLists.txt index e671d40b35..e1fc2c1d40 100644 --- a/Tests/BundleGeneratorTest/CMakeLists.txt +++ b/Tests/BundleGeneratorTest/CMakeLists.txt @@ -18,7 +18,16 @@ SET(CPACK_BUNDLE_NAME "BundleGeneratorTest") SET(CPACK_BUNDLE_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Info.plist") SET(CPACK_BUNDLE_STARTUP_COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/StartupCommand") SET(CPACK_PACKAGE_DESCRIPTION "Project for testing OSX bundle generation") + +# The custom volume icon is a copy of the normal Mac OSX volume icon, but +# on a white background. This is to differentiate it from the normal one +# so that you can verify that the custom icon is being used by doing a +# visual inspection of the mounted volume... This was added when fixing +# issue #7523... +# +SET(CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/CustomVolumeIcon.icns") + SET(CPACK_PACKAGE_NAME "BundleGeneratorTest") SET(CPACK_PACKAGE_VERSION "0.1") -INCLUDE(CPack) +INCLUDE(CPack) diff --git a/Tests/BundleGeneratorTest/CustomVolumeIcon.icns b/Tests/BundleGeneratorTest/CustomVolumeIcon.icns Binary files differnew file mode 100644 index 0000000000..3862a51917 --- /dev/null +++ b/Tests/BundleGeneratorTest/CustomVolumeIcon.icns |