9f48d3bac2
Most of these are turned into strings in the body of the method (multiple times in some cases). Accept strings to simplify the API and keep string construction down.
194 lines
5.9 KiB
C++
194 lines
5.9 KiB
C++
/*============================================================================
|
|
CMake - Cross Platform Makefile Generator
|
|
Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
|
|
|
|
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.
|
|
============================================================================*/
|
|
|
|
#include "cmCPackGeneratorFactory.h"
|
|
|
|
#include "cmCPackGenerator.h"
|
|
#include "cmCPackTGZGenerator.h"
|
|
#include "cmCPackTarBZip2Generator.h"
|
|
#include "cmCPackTarCompressGenerator.h"
|
|
#include "cmCPackZIPGenerator.h"
|
|
#include "cmCPackSTGZGenerator.h"
|
|
#include "cmCPackNSISGenerator.h"
|
|
|
|
#ifdef __APPLE__
|
|
# include "cmCPackDragNDropGenerator.h"
|
|
# include "cmCPackBundleGenerator.h"
|
|
# include "cmCPackPackageMakerGenerator.h"
|
|
# include "cmCPackOSXX11Generator.h"
|
|
#endif
|
|
|
|
#ifdef __CYGWIN__
|
|
# include "cmCPackCygwinBinaryGenerator.h"
|
|
# include "cmCPackCygwinSourceGenerator.h"
|
|
#endif
|
|
|
|
#if !defined(_WIN32) \
|
|
&& !defined(__QNXNTO__) && !defined(__BEOS__) && !defined(__HAIKU__)
|
|
# include "cmCPackDebGenerator.h"
|
|
# include "cmCPackRPMGenerator.h"
|
|
#endif
|
|
|
|
#ifdef _WIN32
|
|
# include "WiX/cmCPackWIXGenerator.h"
|
|
#endif
|
|
|
|
#include "cmCPackLog.h"
|
|
|
|
#if defined(__BORLANDC__)
|
|
# pragma warn -8008 /* condition is always true */
|
|
#endif
|
|
|
|
//----------------------------------------------------------------------
|
|
cmCPackGeneratorFactory::cmCPackGeneratorFactory()
|
|
{
|
|
if (cmCPackTGZGenerator::CanGenerate())
|
|
{
|
|
this->RegisterGenerator("TGZ", "Tar GZip compression",
|
|
cmCPackTGZGenerator::CreateGenerator);
|
|
}
|
|
if (cmCPackSTGZGenerator::CanGenerate())
|
|
{
|
|
this->RegisterGenerator("STGZ", "Self extracting Tar GZip compression",
|
|
cmCPackSTGZGenerator::CreateGenerator);
|
|
}
|
|
if (cmCPackNSISGenerator::CanGenerate())
|
|
{
|
|
this->RegisterGenerator("NSIS", "Null Soft Installer",
|
|
cmCPackNSISGenerator::CreateGenerator);
|
|
this->RegisterGenerator("NSIS64", "Null Soft Installer (64-bit)",
|
|
cmCPackNSISGenerator::CreateGenerator64);
|
|
}
|
|
#ifdef __CYGWIN__
|
|
if (cmCPackCygwinBinaryGenerator::CanGenerate())
|
|
{
|
|
this->RegisterGenerator("CygwinBinary", "Cygwin Binary Installer",
|
|
cmCPackCygwinBinaryGenerator::CreateGenerator);
|
|
}
|
|
if (cmCPackCygwinSourceGenerator::CanGenerate())
|
|
{
|
|
this->RegisterGenerator("CygwinSource", "Cygwin Source Installer",
|
|
cmCPackCygwinSourceGenerator::CreateGenerator);
|
|
}
|
|
#endif
|
|
|
|
if (cmCPackZIPGenerator::CanGenerate())
|
|
{
|
|
this->RegisterGenerator("ZIP", "ZIP file format",
|
|
cmCPackZIPGenerator::CreateGenerator);
|
|
}
|
|
#ifdef _WIN32
|
|
if (cmCPackWIXGenerator::CanGenerate())
|
|
{
|
|
this->RegisterGenerator("WIX", "MSI file format via WiX tools",
|
|
cmCPackWIXGenerator::CreateGenerator);
|
|
}
|
|
#endif
|
|
if (cmCPackTarBZip2Generator::CanGenerate())
|
|
{
|
|
this->RegisterGenerator("TBZ2", "Tar BZip2 compression",
|
|
cmCPackTarBZip2Generator::CreateGenerator);
|
|
}
|
|
if (cmCPackTarCompressGenerator::CanGenerate())
|
|
{
|
|
this->RegisterGenerator("TZ", "Tar Compress compression",
|
|
cmCPackTarCompressGenerator::CreateGenerator);
|
|
}
|
|
#ifdef __APPLE__
|
|
if (cmCPackDragNDropGenerator::CanGenerate())
|
|
{
|
|
this->RegisterGenerator("DragNDrop", "Mac OSX Drag And Drop",
|
|
cmCPackDragNDropGenerator::CreateGenerator);
|
|
}
|
|
if (cmCPackBundleGenerator::CanGenerate())
|
|
{
|
|
this->RegisterGenerator("Bundle", "Mac OSX bundle",
|
|
cmCPackBundleGenerator::CreateGenerator);
|
|
}
|
|
if (cmCPackPackageMakerGenerator::CanGenerate())
|
|
{
|
|
this->RegisterGenerator("PackageMaker", "Mac OSX Package Maker installer",
|
|
cmCPackPackageMakerGenerator::CreateGenerator);
|
|
}
|
|
if (cmCPackOSXX11Generator::CanGenerate())
|
|
{
|
|
this->RegisterGenerator("OSXX11", "Mac OSX X11 bundle",
|
|
cmCPackOSXX11Generator::CreateGenerator);
|
|
}
|
|
#endif
|
|
#if !defined(_WIN32) \
|
|
&& !defined(__QNXNTO__) && !defined(__BEOS__) && !defined(__HAIKU__)
|
|
if (cmCPackDebGenerator::CanGenerate())
|
|
{
|
|
this->RegisterGenerator("DEB", "Debian packages",
|
|
cmCPackDebGenerator::CreateGenerator);
|
|
}
|
|
if (cmCPackRPMGenerator::CanGenerate())
|
|
{
|
|
this->RegisterGenerator("RPM", "RPM packages",
|
|
cmCPackRPMGenerator::CreateGenerator);
|
|
}
|
|
#endif
|
|
}
|
|
|
|
//----------------------------------------------------------------------
|
|
cmCPackGeneratorFactory::~cmCPackGeneratorFactory()
|
|
{
|
|
std::vector<cmCPackGenerator*>::iterator it;
|
|
for ( it = this->Generators.begin(); it != this->Generators.end(); ++ it )
|
|
{
|
|
delete *it;
|
|
}
|
|
}
|
|
|
|
//----------------------------------------------------------------------
|
|
cmCPackGenerator* cmCPackGeneratorFactory::NewGenerator(
|
|
const std::string& name)
|
|
{
|
|
cmCPackGenerator* gen = this->NewGeneratorInternal(name);
|
|
if ( !gen )
|
|
{
|
|
return 0;
|
|
}
|
|
this->Generators.push_back(gen);
|
|
gen->SetLogger(this->Logger);
|
|
return gen;
|
|
}
|
|
|
|
//----------------------------------------------------------------------
|
|
cmCPackGenerator* cmCPackGeneratorFactory::NewGeneratorInternal(
|
|
const std::string& name)
|
|
{
|
|
cmCPackGeneratorFactory::t_GeneratorCreatorsMap::iterator it
|
|
= this->GeneratorCreators.find(name);
|
|
if ( it == this->GeneratorCreators.end() )
|
|
{
|
|
return 0;
|
|
}
|
|
return (it->second)();
|
|
}
|
|
|
|
//----------------------------------------------------------------------
|
|
void cmCPackGeneratorFactory::RegisterGenerator(const std::string& name,
|
|
const char* generatorDescription,
|
|
CreateGeneratorCall* createGenerator)
|
|
{
|
|
if ( !createGenerator )
|
|
{
|
|
cmCPack_Log(this->Logger, cmCPackLog::LOG_ERROR,
|
|
"Cannot register generator" << std::endl);
|
|
return;
|
|
}
|
|
this->GeneratorCreators[name] = createGenerator;
|
|
this->GeneratorDescriptions[name] = generatorDescription;
|
|
}
|