mirror of
https://github.com/Kitware/CMake.git
synced 2026-03-03 05:08:47 -06:00
CPack allow RPM and DEB generator to be used on OSX.
More generally add the check for possible generator "activation" at runtime depending on a generator specific check. The dynamic behavior is currently implemented only for MacOS and should be fully backward compatible for other system. Inspired-By Tom Hughes <tomtheengineer@gmail.com>
This commit is contained in:
@@ -31,6 +31,17 @@ public:
|
||||
cmCPackDebGenerator();
|
||||
virtual ~cmCPackDebGenerator();
|
||||
|
||||
static bool CanGenerate()
|
||||
{
|
||||
#ifdef __APPLE__
|
||||
// on MacOS enable CPackDeb iff dpkg is found
|
||||
return cmSystemTools::FindProgram("dpkg") != "" ? true : false;
|
||||
#else
|
||||
// legacy behavior on other systems
|
||||
return true;
|
||||
#endif
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual int InitializeInternal();
|
||||
/**
|
||||
|
||||
@@ -62,6 +62,16 @@ public:
|
||||
{ this->GeneratorVerbose = val ?
|
||||
cmSystemTools::OUTPUT_MERGE : cmSystemTools::OUTPUT_NONE; }
|
||||
|
||||
/**
|
||||
* Returns true if the generator may work on this system.
|
||||
* Rational:
|
||||
* Some CPack generator may run on some host and may not on others
|
||||
* (with the same system) because some tools are missing. If the tool
|
||||
* is missing then CPack won't activate (in the CPackGeneratorFactory)
|
||||
* this particular generator.
|
||||
*/
|
||||
static bool CanGenerate() { return true; }
|
||||
|
||||
/**
|
||||
* Do the actual whole package processing.
|
||||
* Subclass may redefine it but its usually enough
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
# include "cmCPackCygwinSourceGenerator.h"
|
||||
#endif
|
||||
|
||||
#if !defined(_WIN32) && !defined(__APPLE__) \
|
||||
#if !defined(_WIN32) \
|
||||
&& !defined(__QNXNTO__) && !defined(__BEOS__)
|
||||
# include "cmCPackDebGenerator.h"
|
||||
# include "cmCPackRPMGenerator.h"
|
||||
@@ -43,41 +43,83 @@
|
||||
//----------------------------------------------------------------------
|
||||
cmCPackGeneratorFactory::cmCPackGeneratorFactory()
|
||||
{
|
||||
this->RegisterGenerator("TGZ", "Tar GZip compression",
|
||||
cmCPackTGZGenerator::CreateGenerator);
|
||||
this->RegisterGenerator("STGZ", "Self extracting Tar GZip compression",
|
||||
cmCPackSTGZGenerator::CreateGenerator);
|
||||
this->RegisterGenerator("NSIS", "Null Soft Installer",
|
||||
cmCPackNSISGenerator::CreateGenerator);
|
||||
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);
|
||||
}
|
||||
#ifdef __CYGWIN__
|
||||
this->RegisterGenerator("CygwinBinary", "Cygwin Binary Installer",
|
||||
cmCPackCygwinBinaryGenerator::CreateGenerator);
|
||||
this->RegisterGenerator("CygwinSource", "Cygwin Source Installer",
|
||||
cmCPackCygwinSourceGenerator::CreateGenerator);
|
||||
if (cmCPackCygwinBinaryGenerator::CanGenerate())
|
||||
{
|
||||
this->RegisterGenerator("CygwinBinary", "Cygwin Binary Installer",
|
||||
cmCPackCygwinBinaryGenerator::CreateGenerator);
|
||||
}
|
||||
if (cmCPackCygwinSourceGenerator::CanGenerate())
|
||||
{
|
||||
this->RegisterGenerator("CygwinSource", "Cygwin Source Installer",
|
||||
cmCPackCygwinSourceGenerator::CreateGenerator);
|
||||
}
|
||||
#endif
|
||||
|
||||
this->RegisterGenerator("ZIP", "ZIP file format",
|
||||
cmCPackZIPGenerator::CreateGenerator);
|
||||
this->RegisterGenerator("TBZ2", "Tar BZip2 compression",
|
||||
cmCPackTarBZip2Generator::CreateGenerator);
|
||||
this->RegisterGenerator("TZ", "Tar Compress compression",
|
||||
cmCPackTarCompressGenerator::CreateGenerator);
|
||||
if (cmCPackZIPGenerator::CanGenerate())
|
||||
{
|
||||
this->RegisterGenerator("ZIP", "ZIP file format",
|
||||
cmCPackZIPGenerator::CreateGenerator);
|
||||
}
|
||||
if (cmCPackTarBZip2Generator::CanGenerate())
|
||||
{
|
||||
this->RegisterGenerator("TBZ2", "Tar BZip2 compression",
|
||||
cmCPackTarBZip2Generator::CreateGenerator);
|
||||
}
|
||||
if (cmCPackTarCompressGenerator::CanGenerate())
|
||||
{
|
||||
this->RegisterGenerator("TZ", "Tar Compress compression",
|
||||
cmCPackTarCompressGenerator::CreateGenerator);
|
||||
}
|
||||
#ifdef __APPLE__
|
||||
this->RegisterGenerator("DragNDrop", "Mac OSX Drag And Drop",
|
||||
cmCPackDragNDropGenerator::CreateGenerator);
|
||||
this->RegisterGenerator("Bundle", "Mac OSX bundle",
|
||||
cmCPackBundleGenerator::CreateGenerator);
|
||||
this->RegisterGenerator("PackageMaker", "Mac OSX Package Maker installer",
|
||||
cmCPackPackageMakerGenerator::CreateGenerator);
|
||||
this->RegisterGenerator("OSXX11", "Mac OSX X11 bundle",
|
||||
cmCPackOSXX11Generator::CreateGenerator);
|
||||
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(__APPLE__) \
|
||||
#if !defined(_WIN32) \
|
||||
&& !defined(__QNXNTO__) && !defined(__BEOS__)
|
||||
this->RegisterGenerator("DEB", "Debian packages",
|
||||
cmCPackDebGenerator::CreateGenerator);
|
||||
this->RegisterGenerator("RPM", "RPM packages",
|
||||
cmCPackRPMGenerator::CreateGenerator);
|
||||
if (cmCPackDebGenerator::CanGenerate())
|
||||
{
|
||||
this->RegisterGenerator("DEB", "Debian packages",
|
||||
cmCPackDebGenerator::CreateGenerator);
|
||||
}
|
||||
if (cmCPackRPMGenerator::CanGenerate())
|
||||
{
|
||||
this->RegisterGenerator("RPM", "RPM packages",
|
||||
cmCPackRPMGenerator::CreateGenerator);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -35,6 +35,17 @@ public:
|
||||
cmCPackRPMGenerator();
|
||||
virtual ~cmCPackRPMGenerator();
|
||||
|
||||
static bool CanGenerate()
|
||||
{
|
||||
#ifdef __APPLE__
|
||||
// on MacOS enable CPackRPM iff rpmbuild is found
|
||||
return cmSystemTools::FindProgram("rpmbuild") != "" ? true : false;
|
||||
#else
|
||||
// legacy behavior on other systems
|
||||
return true;
|
||||
#endif
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual int InitializeInternal();
|
||||
virtual int PackageFiles();
|
||||
|
||||
Reference in New Issue
Block a user