mirror of
https://github.com/reactos/CMake.git
synced 2024-11-25 04:29:52 +00:00
4374441f3f
Previously, setting CPACK_POSTFLIGHT_SCRIPT had no effect in component mode, when CPACK_COMPONENTS_ALL was set. In component mode, a .mpkg is created that contains multiple .pkg's. Because postflight scripts only work in a .pkg, add another .pkg to the .mpkg and put the postflight script in that. This is the same approach taken by the PackageMaker GUI when adding a postflight script to a metapackage.
123 lines
4.7 KiB
C++
123 lines
4.7 KiB
C++
/*============================================================================
|
|
CMake - Cross Platform Makefile Generator
|
|
Copyright 2000-2009 Kitware, Inc.
|
|
|
|
Distributed under the OSI-approved BSD License (the "License");
|
|
see accompanying file Copyright.txt for details.
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even the
|
|
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
See the License for more information.
|
|
============================================================================*/
|
|
|
|
#ifndef cmCPackPackageMakerGenerator_h
|
|
#define cmCPackPackageMakerGenerator_h
|
|
|
|
|
|
#include "cmCPackGenerator.h"
|
|
|
|
class cmCPackComponent;
|
|
|
|
/** \class cmCPackPackageMakerGenerator
|
|
* \brief A generator for PackageMaker files
|
|
*
|
|
* http://developer.apple.com/documentation/Darwin
|
|
* /Reference/ManPages/man1/packagemaker.1.html
|
|
*/
|
|
class cmCPackPackageMakerGenerator : public cmCPackGenerator
|
|
{
|
|
public:
|
|
cmCPackTypeMacro(cmCPackPackageMakerGenerator, cmCPackGenerator);
|
|
|
|
/**
|
|
* Construct generator
|
|
*/
|
|
cmCPackPackageMakerGenerator();
|
|
virtual ~cmCPackPackageMakerGenerator();
|
|
|
|
virtual bool SupportsComponentInstallation() const;
|
|
|
|
protected:
|
|
int CopyInstallScript(const char* resdir,
|
|
const char* script,
|
|
const char* name);
|
|
virtual int InitializeInternal();
|
|
int PackageFiles();
|
|
virtual const char* GetOutputExtension() { return ".dmg"; }
|
|
virtual const char* GetOutputPostfix() { return "darwin"; }
|
|
|
|
// Copies or creates the resource file with the given name to the
|
|
// package or package staging directory dirName. The variable
|
|
// CPACK_RESOURCE_FILE_${NAME} (where ${NAME} is the uppercased
|
|
// version of name) specifies the input file to use for this file,
|
|
// which will be configured via ConfigureFile.
|
|
bool CopyCreateResourceFile(const char* name, const char *dirName);
|
|
bool CopyResourcePlistFile(const char* name, const char* outName = 0);
|
|
|
|
// Run PackageMaker with the given command line, which will (if
|
|
// successful) produce the given package file. Returns true if
|
|
// PackageMaker succeeds, false otherwise.
|
|
bool RunPackageMaker(const char *command, const char *packageFile);
|
|
|
|
// Retrieve the name of package file that will be generated for this
|
|
// component. The name is just the file name with extension, and
|
|
// does not include the subdirectory.
|
|
std::string GetPackageName(const cmCPackComponent& component);
|
|
|
|
// Generate a package in the file packageFile for the given
|
|
// component. All of the files within this component are stored in
|
|
// the directory packageDir. Returns true if successful, false
|
|
// otherwise.
|
|
bool GenerateComponentPackage(const char *packageFile,
|
|
const char *packageDir,
|
|
const cmCPackComponent& component);
|
|
|
|
// Writes a distribution.dist file, which turns a metapackage into a
|
|
// full-fledged distribution. This file is used to describe
|
|
// inter-component dependencies. metapackageFile is the name of the
|
|
// metapackage for the distribution. Only valid for a
|
|
// component-based install.
|
|
void WriteDistributionFile(const char* metapackageFile);
|
|
|
|
// Subroutine of WriteDistributionFile that writes out the
|
|
// dependency attributes for inter-component dependencies.
|
|
void AddDependencyAttributes(const cmCPackComponent& component,
|
|
std::set<const cmCPackComponent *>& visited,
|
|
cmOStringStream& out);
|
|
|
|
// Subroutine of WriteDistributionFile that writes out the
|
|
// reverse dependency attributes for inter-component dependencies.
|
|
void
|
|
AddReverseDependencyAttributes(const cmCPackComponent& component,
|
|
std::set<const cmCPackComponent *>& visited,
|
|
cmOStringStream& out);
|
|
|
|
// Generates XML that encodes the hierarchy of component groups and
|
|
// their components in a form that can be used by distribution
|
|
// metapackages.
|
|
void CreateChoiceOutline(const cmCPackComponentGroup& group,
|
|
cmOStringStream& out);
|
|
|
|
/// Create the "choice" XML element to describe a component group
|
|
/// for the installer GUI.
|
|
void CreateChoice(const cmCPackComponentGroup& group,
|
|
cmOStringStream& out);
|
|
|
|
/// Create the "choice" XML element to describe a component for the
|
|
/// installer GUI.
|
|
void CreateChoice(const cmCPackComponent& component,
|
|
cmOStringStream& out);
|
|
|
|
// Escape the given string to make it usable as an XML attribute
|
|
// value.
|
|
std::string EscapeForXML(std::string str);
|
|
|
|
// The PostFlight component when creating a metapackage
|
|
cmCPackComponent PostFlightComponent;
|
|
|
|
double PackageMakerVersion;
|
|
double PackageCompatibilityVersion;
|
|
};
|
|
|
|
#endif
|