[CMake] Bundle Generator Background Image/Custom .DS_Store support

Clinton Stimpson clinton at elemtech.com
Thu Feb 5 13:25:16 EST 2009


cmCPackBundleGenerator has a new base class cmCPackDragNDropGenerator.  
Can we please put this functionality there, and if necessary modify the 
CompressFiles(...) so they both get it (maybe the addition of a couple 
virtual functions would help).
The DragNDrop generator supports multiple bundles, and uses whatever 
bundle properties were already set on the targets.  It also supports 
installing non bundle things such as readme files.  The Bundle generator 
is a specialization of the DragNDrop generator which is convenience for 
some.

Clint

Mike Arthur wrote:
> Please review the attached patch for inclusion.
>
> It adds support to the bundle generator to add a background image and 
> .DS_Store for people (like myself/Mozilla/Last.fm) who want CPack to be able 
> to set a nice background to the Bundle without having to manually convert it.
>   
> ------------------------------------------------------------------------
>
> --- source/Source/CPack/cmCPackBundleGenerator.cxx	2009-02-04 15:00:24.727403954 +0000
> +++ cmake-patch/Source/CPack/cmCPackBundleGenerator.cxx	2009-02-05 14:12:28.439443802 +0000
> @@ -105,6 +105,14 @@
>      this->GetOption("CPACK_BUNDLE_STARTUP_COMMAND") 
>      ? this->GetOption("CPACK_BUNDLE_STARTUP_COMMAND") : "";
>  
> +  const std::string cpack_bundle_dmg_background_image =
> +    this->GetOption("CPACK_BUNDLE_DMG_BACKGROUND_IMAGE")
> +    ? this->GetOption("CPACK_BUNDLE_DMG_BACKGROUND_IMAGE") : "";
> +
> +  const std::string cpack_bundle_dmg_ds_store =
> +    this->GetOption("CPACK_BUNDLE_DMG_DS_STORE")
> +    ? this->GetOption("CPACK_BUNDLE_DMG_DS_STORE") : "";
> +
>    // The staging directory contains everything that will end-up inside the
>    // final disk image ...
>    cmOStringStream staging;
> @@ -202,6 +210,63 @@
>        }
>      }
>  
> +  // Optionally add a custom .DS_Store file
> +  // (e.g. for setting background/layout) ...
> +  if(!cpack_bundle_dmg_ds_store.empty())
> +    {
> +    cmOStringStream package_settings_source;
> +    package_settings_source << cpack_bundle_dmg_ds_store;
> +
> +    cmOStringStream package_settings_destination;
> +    package_settings_destination << staging.str() << "/.DS_Store";
> +
> +    if(!this->CopyFile(package_settings_source, package_settings_destination))
> +      {
> +      cmCPackLogger(cmCPackLog::LOG_ERROR,
> +        "Error copying disk volume settings file.  "
> +                    "Check the value of CPACK_BUNDLE_DMG_DS_STORE."
> +        << std::endl);
> +
> +      return 0;
> +      }
> +    }
> +
> +  // Optionally add a custom background image ...
> +  if(!cpack_bundle_dmg_background_image.empty())
> +    {
> +    cmOStringStream package_background_source;
> +    package_background_source << cpack_bundle_dmg_background_image;
> +
> +    cmOStringStream package_background_destination;
> +    package_background_destination << staging.str() << "/background.png";
> +
> +    if(!this->CopyFile(package_background_source,
> +        package_background_destination))
> +      {
> +      cmCPackLogger(cmCPackLog::LOG_ERROR,
> +        "Error copying disk volume background image.  "
> +                    "Check the value of CPACK_BUNDLE_DMG_BACKGROUND_IMAGE."
> +        << std::endl);
> +
> +      return 0;
> +      }
> +
> +    cmOStringStream temp_background_hiding_command;
> +    temp_background_hiding_command << this->GetOption("CPACK_COMMAND_SETFILE");
> +    temp_background_hiding_command << " -a V \"";
> +    temp_background_hiding_command << package_background_destination.str();
> +    temp_background_hiding_command << "\"";
> +
> +    if(!this->RunCommand(temp_background_hiding_command))
> +      {
> +        cmCPackLogger(cmCPackLog::LOG_ERROR,
> +          "Error setting attributes on disk volume background image."
> +          << std::endl);
> +
> +      return 0;
> +      }
> +    }
> +
>    // Create a temporary read-write disk image ...
>    cmOStringStream temp_image;
>    temp_image << this->GetOption("CPACK_TOPLEVEL_DIRECTORY") << "/temp.dmg";
>   
> ------------------------------------------------------------------------
>
> _______________________________________________
> CMake mailing list
> CMake at cmake.org
> http://www.cmake.org/mailman/listinfo/cmake



More information about the CMake mailing list