summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorDavid Cole <david.cole@kitware.com>2009-02-19 10:39:08 -0500
committerDavid Cole <david.cole@kitware.com>2009-02-19 10:39:08 -0500
commit1bf669207b2f3dcc21bd3f3f0b88535a34f4a8aa (patch)
tree74999fb92cfca79c47e86b988dcd11507465d44c /Source
parent65c1511814ee581fc21ac06eca92145e52215427 (diff)
downloadcmake-1bf669207b2f3dcc21bd3f3f0b88535a34f4a8aa.tar.gz
BUG: A little bit more refactoring from BundleGenerator to DragNDropGenerator. See issue #8556. Thanks for Clinton Stimpson for the patch.
Diffstat (limited to 'Source')
-rw-r--r--Source/CPack/cmCPackBundleGenerator.cxx126
-rw-r--r--Source/CPack/cmCPackDragNDropGenerator.cxx100
-rw-r--r--Source/CPack/cmCPackDragNDropGenerator.h2
3 files changed, 56 insertions, 172 deletions
diff --git a/Source/CPack/cmCPackBundleGenerator.cxx b/Source/CPack/cmCPackBundleGenerator.cxx
index 62183e62d9..a098c551f8 100644
--- a/Source/CPack/cmCPackBundleGenerator.cxx
+++ b/Source/CPack/cmCPackBundleGenerator.cxx
@@ -98,9 +98,6 @@ int cmCPackBundleGenerator::CompressFiles(const char* outFileName,
}
// Get optional arguments ...
- const std::string cpack_package_icon = this->GetOption("CPACK_PACKAGE_ICON")
- ? this->GetOption("CPACK_PACKAGE_ICON") : "";
-
const std::string cpack_bundle_startup_command =
this->GetOption("CPACK_BUNDLE_STARTUP_COMMAND")
? this->GetOption("CPACK_BUNDLE_STARTUP_COMMAND") : "";
@@ -175,126 +172,5 @@ int cmCPackBundleGenerator::CompressFiles(const char* outFileName,
cmSystemTools::SetPermissions(command_target.str().c_str(), 0777);
}
- // Add a symlink to /Applications so users can drag-and-drop the bundle
- // into it
- cmOStringStream application_link;
- application_link << staging.str() << "/Applications";
- cmSystemTools::CreateSymlink("/Applications",
- application_link.str().c_str());
-
- // Optionally add a custom volume icon ...
- if(!cpack_package_icon.empty())
- {
- cmOStringStream package_icon_source;
- package_icon_source << cpack_package_icon;
-
- cmOStringStream package_icon_destination;
- package_icon_destination << staging.str() << "/.VolumeIcon.icns";
-
- if(!this->CopyFile(package_icon_source, package_icon_destination))
- {
- cmCPackLogger(cmCPackLog::LOG_ERROR,
- "Error copying disk volume icon. "
- "Check the value of CPACK_PACKAGE_ICON."
- << std::endl);
-
- return 0;
- }
- }
-
- // Create a temporary read-write disk image ...
- cmOStringStream temp_image;
- temp_image << this->GetOption("CPACK_TOPLEVEL_DIRECTORY") << "/temp.dmg";
-
- cmOStringStream temp_image_command;
- temp_image_command << this->GetOption("CPACK_COMMAND_HDIUTIL");
- temp_image_command << " create";
- temp_image_command << " -ov";
- temp_image_command << " -srcfolder \"" << staging.str() << "\"";
- temp_image_command << " -volname \""
- << this->GetOption("CPACK_PACKAGE_FILE_NAME") << "\"";
- temp_image_command << " -format UDRW";
- temp_image_command << " \"" << temp_image.str() << "\"";
-
- if(!this->RunCommand(temp_image_command))
- {
- cmCPackLogger(cmCPackLog::LOG_ERROR,
- "Error generating temporary disk image."
- << std::endl);
-
- return 0;
- }
-
- // Optionally set the custom icon flag for the image ...
- if(!cpack_package_icon.empty())
- {
- cmOStringStream temp_mount;
-
- cmOStringStream attach_command;
- attach_command << this->GetOption("CPACK_COMMAND_HDIUTIL");
- attach_command << " attach";
- attach_command << " \"" << temp_image.str() << "\"";
-
- std::string attach_output;
- if(!this->RunCommand(attach_command, &attach_output))
- {
- cmCPackLogger(cmCPackLog::LOG_ERROR,
- "Error attaching temporary disk image."
- << std::endl);
-
- 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";
- setfile_command << " \"" << temp_mount.str() << "\"";
-
- if(!this->RunCommand(setfile_command))
- {
- cmCPackLogger(cmCPackLog::LOG_ERROR,
- "Error assigning custom icon to temporary disk image."
- << std::endl);
-
- return 0;
- }
-
- cmOStringStream detach_command;
- detach_command << this->GetOption("CPACK_COMMAND_HDIUTIL");
- detach_command << " detach";
- detach_command << " \"" << temp_mount.str() << "\"";
-
- if(!this->RunCommand(detach_command))
- {
- cmCPackLogger(cmCPackLog::LOG_ERROR,
- "Error detaching temporary disk image."
- << std::endl);
-
- return 0;
- }
- }
-
- // Create the final compressed read-only disk image ...
- cmOStringStream final_image_command;
- final_image_command << this->GetOption("CPACK_COMMAND_HDIUTIL");
- final_image_command << " convert \"" << temp_image.str() << "\"";
- final_image_command << " -format UDZO";
- final_image_command << " -imagekey";
- final_image_command << " zlib-level=9";
- final_image_command << " -o \"" << outFileName << "\"";
-
- if(!this->RunCommand(final_image_command))
- {
- cmCPackLogger(cmCPackLog::LOG_ERROR,
- "Error compressing disk image."
- << std::endl);
-
- return 0;
- }
-
- return 1;
+ return this->CreateDMG(toplevel, outFileName);
}
diff --git a/Source/CPack/cmCPackDragNDropGenerator.cxx b/Source/CPack/cmCPackDragNDropGenerator.cxx
index 40ade06cbf..2280662055 100644
--- a/Source/CPack/cmCPackDragNDropGenerator.cxx
+++ b/Source/CPack/cmCPackDragNDropGenerator.cxx
@@ -71,6 +71,59 @@ int cmCPackDragNDropGenerator::CompressFiles(const char* outFileName,
{
(void) files;
+ return this->CreateDMG(toplevel, outFileName);
+}
+
+//----------------------------------------------------------------------
+bool cmCPackDragNDropGenerator::CopyFile(cmOStringStream& source,
+ cmOStringStream& target)
+{
+ if(!cmSystemTools::CopyFileIfDifferent(
+ source.str().c_str(),
+ target.str().c_str()))
+ {
+ cmCPackLogger(cmCPackLog::LOG_ERROR,
+ "Error copying "
+ << source.str()
+ << " to "
+ << target.str()
+ << std::endl);
+
+ return false;
+ }
+
+ return true;
+}
+
+//----------------------------------------------------------------------
+bool cmCPackDragNDropGenerator::RunCommand(cmOStringStream& command,
+ std::string* output)
+{
+ int exit_code = 1;
+
+ bool result = cmSystemTools::RunSingleCommand(
+ command.str().c_str(),
+ output,
+ &exit_code,
+ 0,
+ this->GeneratorVerbose,
+ 0);
+
+ if(!result || exit_code)
+ {
+ cmCPackLogger(cmCPackLog::LOG_ERROR,
+ "Error executing: "
+ << command.str()
+ << std::endl);
+
+ return false;
+ }
+
+ return true;
+}
+
+int cmCPackDragNDropGenerator::CreateDMG(const std::string& toplevel, const std::string& outFileName)
+{
// Get optional arguments ...
const std::string cpack_package_icon = this->GetOption("CPACK_PACKAGE_ICON")
? this->GetOption("CPACK_PACKAGE_ICON") : "";
@@ -204,50 +257,3 @@ int cmCPackDragNDropGenerator::CompressFiles(const char* outFileName,
return 1;
}
-//----------------------------------------------------------------------
-bool cmCPackDragNDropGenerator::CopyFile(cmOStringStream& source,
- cmOStringStream& target)
-{
- if(!cmSystemTools::CopyFileIfDifferent(
- source.str().c_str(),
- target.str().c_str()))
- {
- cmCPackLogger(cmCPackLog::LOG_ERROR,
- "Error copying "
- << source.str()
- << " to "
- << target.str()
- << std::endl);
-
- return false;
- }
-
- return true;
-}
-
-//----------------------------------------------------------------------
-bool cmCPackDragNDropGenerator::RunCommand(cmOStringStream& command,
- std::string* output)
-{
- int exit_code = 1;
-
- bool result = cmSystemTools::RunSingleCommand(
- command.str().c_str(),
- output,
- &exit_code,
- 0,
- this->GeneratorVerbose,
- 0);
-
- if(!result || exit_code)
- {
- cmCPackLogger(cmCPackLog::LOG_ERROR,
- "Error executing: "
- << command.str()
- << std::endl);
-
- return false;
- }
-
- return true;
-}
diff --git a/Source/CPack/cmCPackDragNDropGenerator.h b/Source/CPack/cmCPackDragNDropGenerator.h
index 0dd4e5a69c..ed0307d37c 100644
--- a/Source/CPack/cmCPackDragNDropGenerator.h
+++ b/Source/CPack/cmCPackDragNDropGenerator.h
@@ -39,6 +39,8 @@ protected:
bool CopyFile(cmOStringStream& source, cmOStringStream& target);
bool RunCommand(cmOStringStream& command, std::string* output = 0);
+
+ virtual int CreateDMG(const std::string& installdir, const std::string& outdmg);
std::string InstallPrefix;
};