126 lines
4.8 KiB
C++
126 lines
4.8 KiB
C++
/*=========================================================================
|
|
|
|
Program: CMake - Cross-Platform Makefile Generator
|
|
Module: $RCSfile$
|
|
Language: C++
|
|
Date: $Date$
|
|
Version: $Revision$
|
|
|
|
Copyright (c) 2002 Kitware, Inc. All rights reserved.
|
|
See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
PURPOSE. See the above copyright notices 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 CompressFiles(const char* outFileName, const char* toplevel,
|
|
const std::vector<std::string>& files);
|
|
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);
|
|
|
|
double PackageMakerVersion;
|
|
double PackageCompatibilityVersion;
|
|
};
|
|
|
|
#endif
|