CMake/Source/CPack/cmCPackGenerator.h

151 lines
4.4 KiB
C
Raw Normal View History

2009-10-02 01:21:28 +04:00
/*============================================================================
CMake - Cross Platform Makefile Generator
Copyright 2000-2009 Kitware, Inc.
2006-01-02 07:21:05 +03:00
2009-10-02 01:21:28 +04:00
Distributed under the OSI-approved BSD License (the "License");
see accompanying file Copyright.txt for details.
2006-01-02 07:21:05 +03:00
2009-10-02 01:21:28 +04:00
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.
============================================================================*/
2006-01-02 07:21:05 +03:00
2007-11-06 00:55:45 +03:00
#ifndef cmCPackGenerator_h
#define cmCPackGenerator_h
2006-01-02 07:21:05 +03:00
#include "cmObject.h"
#include <map>
#include <vector>
2006-01-02 07:21:05 +03:00
#include "cmCPackComponentGroup.h" // cmCPackComponent and friends
// Forward declarations are insufficient since we use them in
// std::map data members below...
2006-01-02 07:21:05 +03:00
#define cmCPackTypeMacro(class, superclass) \
cmTypeMacro(class, superclass); \
2007-11-06 00:55:45 +03:00
static cmCPackGenerator* CreateGenerator() { return new class; }
2006-01-02 07:21:05 +03:00
2006-01-03 00:14:21 +03:00
#define cmCPackLogger(logType, msg) \
do { \
2006-03-14 00:45:21 +03:00
cmOStringStream cmCPackLog_msg; \
cmCPackLog_msg << msg; \
this->Logger->Log(logType, __FILE__, __LINE__,\
cmCPackLog_msg.str().c_str());\
2006-01-03 00:14:21 +03:00
} while ( 0 )
#ifdef cerr
# undef cerr
#endif
#define cerr no_cerr_use_cmCPack_Log
#ifdef cout
# undef cout
#endif
#define cout no_cout_use_cmCPack_Log
2006-01-02 07:21:05 +03:00
class cmMakefile;
2006-01-03 00:14:21 +03:00
class cmCPackLog;
2006-01-02 07:21:05 +03:00
2007-11-06 00:55:45 +03:00
/** \class cmCPackGenerator
2006-01-02 07:21:05 +03:00
* \brief A superclass of all CPack Generators
*
*/
2007-11-06 00:55:45 +03:00
class cmCPackGenerator : public cmObject
2006-01-02 07:21:05 +03:00
{
public:
2007-11-06 00:55:45 +03:00
cmTypeMacro(cmCPackGenerator, cmObject);
2006-01-02 07:21:05 +03:00
/**
* If verbose then more informaiton is printed out
*/
2006-03-10 21:06:26 +03:00
void SetVerbose(bool val) { this->GeneratorVerbose = val; }
2006-01-02 07:21:05 +03:00
/**
* Do the actual processing. Subclass has to override it.
* Return 0 if error.
*/
virtual int DoPackage();
2006-01-02 07:21:05 +03:00
/**
* Initialize generator
*/
2008-09-24 17:57:52 +04:00
int Initialize(const char* name, cmMakefile* mf);
2006-01-02 07:21:05 +03:00
/**
* Construct generator
*/
2007-11-06 00:55:45 +03:00
cmCPackGenerator();
virtual ~cmCPackGenerator();
2006-01-02 07:21:05 +03:00
//! Set and get the options
void SetOption(const char* op, const char* value);
void SetOptionIfNotSet(const char* op, const char* value);
2006-01-02 07:21:05 +03:00
const char* GetOption(const char* op);
bool IsSet(const char* name) const;
2006-01-02 07:21:05 +03:00
//! Set all the variables
2008-09-23 18:15:13 +04:00
int SetCMakeRoot();
2006-01-02 07:21:05 +03:00
2006-01-03 00:14:21 +03:00
//! Set the logger
2006-03-10 21:06:26 +03:00
void SetLogger(cmCPackLog* log) { this->Logger = log; }
2006-01-03 00:14:21 +03:00
//! Display verbose information via logger
void DisplayVerboseOutput(const char* msg, float progress);
bool ReadListFile(const char* moduleName);
2006-01-02 07:21:05 +03:00
protected:
int PrepareNames();
int InstallProject();
2006-06-09 21:45:09 +04:00
int CleanTemporaryDirectory();
virtual const char* GetOutputExtension() { return ".cpack"; }
2006-01-02 07:21:05 +03:00
virtual const char* GetOutputPostfix() { return 0; }
virtual int CompressFiles(const char* outFileName, const char* toplevel,
const std::vector<std::string>& files);
virtual const char* GetInstallPath();
virtual const char* GetPackagingInstallPrefix();
2006-01-02 07:21:05 +03:00
virtual std::string FindTemplate(const char* name);
2007-01-11 18:49:18 +03:00
virtual bool ConfigureFile(const char* inName, const char* outName,
bool copyOnly = false);
virtual bool ConfigureString(const std::string& input, std::string& output);
virtual int InitializeInternal();
2006-01-02 07:21:05 +03:00
//! Run install commands if specified
virtual int InstallProjectViaInstallCommands(
bool setDestDir, const char* tempInstallDirectory);
virtual int InstallProjectViaInstallScript(
bool setDestDir, const char* tempInstallDirectory);
virtual int InstallProjectViaInstalledDirectories(
bool setDestDir, const char* tempInstallDirectory);
virtual int InstallProjectViaInstallCMakeProjects(
bool setDestDir, const char* tempInstallDirectory);
virtual bool SupportsComponentInstallation() const;
virtual cmCPackInstallationType* GetInstallationType(const char *projectName,
const char* name);
virtual cmCPackComponent* GetComponent(const char *projectName,
const char* name);
virtual cmCPackComponentGroup* GetComponentGroup(const char *projectName,
const char* name);
2006-03-10 21:06:26 +03:00
bool GeneratorVerbose;
std::string Name;
2006-01-02 07:21:05 +03:00
2006-03-10 21:06:26 +03:00
std::string InstallPath;
2006-01-02 07:21:05 +03:00
2006-03-10 21:06:26 +03:00
std::string CPackSelf;
std::string CMakeSelf;
std::string CMakeRoot;
2006-01-02 07:21:05 +03:00
std::map<std::string, cmCPackInstallationType> InstallationTypes;
std::map<std::string, cmCPackComponent> Components;
std::map<std::string, cmCPackComponentGroup> ComponentGroups;
2006-03-10 21:06:26 +03:00
cmCPackLog* Logger;
private:
cmMakefile* MakefileMap;
2006-01-02 07:21:05 +03:00
};
#endif