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:
parent
77ec098b44
commit
2a34b57938
|
@ -31,6 +31,17 @@ public:
|
||||||
cmCPackDebGenerator();
|
cmCPackDebGenerator();
|
||||||
virtual ~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:
|
protected:
|
||||||
virtual int InitializeInternal();
|
virtual int InitializeInternal();
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -62,6 +62,16 @@ public:
|
||||||
{ this->GeneratorVerbose = val ?
|
{ this->GeneratorVerbose = val ?
|
||||||
cmSystemTools::OUTPUT_MERGE : cmSystemTools::OUTPUT_NONE; }
|
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.
|
* Do the actual whole package processing.
|
||||||
* Subclass may redefine it but its usually enough
|
* Subclass may redefine it but its usually enough
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
# include "cmCPackCygwinSourceGenerator.h"
|
# include "cmCPackCygwinSourceGenerator.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined(_WIN32) && !defined(__APPLE__) \
|
#if !defined(_WIN32) \
|
||||||
&& !defined(__QNXNTO__) && !defined(__BEOS__)
|
&& !defined(__QNXNTO__) && !defined(__BEOS__)
|
||||||
# include "cmCPackDebGenerator.h"
|
# include "cmCPackDebGenerator.h"
|
||||||
# include "cmCPackRPMGenerator.h"
|
# include "cmCPackRPMGenerator.h"
|
||||||
|
@ -43,41 +43,83 @@
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
cmCPackGeneratorFactory::cmCPackGeneratorFactory()
|
cmCPackGeneratorFactory::cmCPackGeneratorFactory()
|
||||||
{
|
{
|
||||||
this->RegisterGenerator("TGZ", "Tar GZip compression",
|
if (cmCPackTGZGenerator::CanGenerate())
|
||||||
cmCPackTGZGenerator::CreateGenerator);
|
{
|
||||||
this->RegisterGenerator("STGZ", "Self extracting Tar GZip compression",
|
this->RegisterGenerator("TGZ", "Tar GZip compression",
|
||||||
cmCPackSTGZGenerator::CreateGenerator);
|
cmCPackTGZGenerator::CreateGenerator);
|
||||||
this->RegisterGenerator("NSIS", "Null Soft Installer",
|
}
|
||||||
cmCPackNSISGenerator::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__
|
#ifdef __CYGWIN__
|
||||||
this->RegisterGenerator("CygwinBinary", "Cygwin Binary Installer",
|
if (cmCPackCygwinBinaryGenerator::CanGenerate())
|
||||||
cmCPackCygwinBinaryGenerator::CreateGenerator);
|
{
|
||||||
this->RegisterGenerator("CygwinSource", "Cygwin Source Installer",
|
this->RegisterGenerator("CygwinBinary", "Cygwin Binary Installer",
|
||||||
cmCPackCygwinSourceGenerator::CreateGenerator);
|
cmCPackCygwinBinaryGenerator::CreateGenerator);
|
||||||
|
}
|
||||||
|
if (cmCPackCygwinSourceGenerator::CanGenerate())
|
||||||
|
{
|
||||||
|
this->RegisterGenerator("CygwinSource", "Cygwin Source Installer",
|
||||||
|
cmCPackCygwinSourceGenerator::CreateGenerator);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
this->RegisterGenerator("ZIP", "ZIP file format",
|
if (cmCPackZIPGenerator::CanGenerate())
|
||||||
cmCPackZIPGenerator::CreateGenerator);
|
{
|
||||||
this->RegisterGenerator("TBZ2", "Tar BZip2 compression",
|
this->RegisterGenerator("ZIP", "ZIP file format",
|
||||||
cmCPackTarBZip2Generator::CreateGenerator);
|
cmCPackZIPGenerator::CreateGenerator);
|
||||||
this->RegisterGenerator("TZ", "Tar Compress compression",
|
}
|
||||||
cmCPackTarCompressGenerator::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__
|
#ifdef __APPLE__
|
||||||
this->RegisterGenerator("DragNDrop", "Mac OSX Drag And Drop",
|
if (cmCPackDragNDropGenerator::CanGenerate())
|
||||||
cmCPackDragNDropGenerator::CreateGenerator);
|
{
|
||||||
this->RegisterGenerator("Bundle", "Mac OSX bundle",
|
this->RegisterGenerator("DragNDrop", "Mac OSX Drag And Drop",
|
||||||
cmCPackBundleGenerator::CreateGenerator);
|
cmCPackDragNDropGenerator::CreateGenerator);
|
||||||
this->RegisterGenerator("PackageMaker", "Mac OSX Package Maker installer",
|
}
|
||||||
cmCPackPackageMakerGenerator::CreateGenerator);
|
if (cmCPackBundleGenerator::CanGenerate())
|
||||||
this->RegisterGenerator("OSXX11", "Mac OSX X11 bundle",
|
{
|
||||||
cmCPackOSXX11Generator::CreateGenerator);
|
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
|
#endif
|
||||||
#if !defined(_WIN32) && !defined(__APPLE__) \
|
#if !defined(_WIN32) \
|
||||||
&& !defined(__QNXNTO__) && !defined(__BEOS__)
|
&& !defined(__QNXNTO__) && !defined(__BEOS__)
|
||||||
this->RegisterGenerator("DEB", "Debian packages",
|
if (cmCPackDebGenerator::CanGenerate())
|
||||||
cmCPackDebGenerator::CreateGenerator);
|
{
|
||||||
this->RegisterGenerator("RPM", "RPM packages",
|
this->RegisterGenerator("DEB", "Debian packages",
|
||||||
cmCPackRPMGenerator::CreateGenerator);
|
cmCPackDebGenerator::CreateGenerator);
|
||||||
|
}
|
||||||
|
if (cmCPackRPMGenerator::CanGenerate())
|
||||||
|
{
|
||||||
|
this->RegisterGenerator("RPM", "RPM packages",
|
||||||
|
cmCPackRPMGenerator::CreateGenerator);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,17 @@ public:
|
||||||
cmCPackRPMGenerator();
|
cmCPackRPMGenerator();
|
||||||
virtual ~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:
|
protected:
|
||||||
virtual int InitializeInternal();
|
virtual int InitializeInternal();
|
||||||
virtual int PackageFiles();
|
virtual int PackageFiles();
|
||||||
|
|
|
@ -699,6 +699,31 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
|
||||||
ENDIF(CTEST_RUN_CPackComponents)
|
ENDIF(CTEST_RUN_CPackComponents)
|
||||||
|
|
||||||
IF(CTEST_RUN_CPackComponentsForAll)
|
IF(CTEST_RUN_CPackComponentsForAll)
|
||||||
|
# Analyze 'cpack --help' output for list of available generators:
|
||||||
|
execute_process(COMMAND ${CMAKE_CPACK_COMMAND} --help
|
||||||
|
RESULT_VARIABLE result
|
||||||
|
OUTPUT_VARIABLE stdout
|
||||||
|
ERROR_VARIABLE stderr)
|
||||||
|
|
||||||
|
string(REPLACE ";" "\\;" stdout "${stdout}")
|
||||||
|
string(REPLACE "\n" "E;" stdout "${stdout}")
|
||||||
|
|
||||||
|
set(collecting 0)
|
||||||
|
set(ACTIVE_CPACK_GENERATORS)
|
||||||
|
foreach(eline ${stdout})
|
||||||
|
string(REGEX REPLACE "^(.*)E$" "\\1" line "${eline}")
|
||||||
|
if(collecting AND NOT line STREQUAL "")
|
||||||
|
string(REGEX REPLACE "^ ([^ ]+) += (.*)$" "\\1" gen "${line}")
|
||||||
|
string(REGEX REPLACE "^ ([^ ]+) += (.*)$" "\\2" doc "${line}")
|
||||||
|
list(APPEND ACTIVE_CPACK_GENERATORS ${gen})
|
||||||
|
endif()
|
||||||
|
if(line STREQUAL "Generators")
|
||||||
|
set(collecting 1)
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
# ACTIVE_CPACK_GENERATORS variable
|
||||||
|
# now contains the list of 'active generators'
|
||||||
|
|
||||||
set(CPackComponentsForAll_EXTRA_OPTIONS)
|
set(CPackComponentsForAll_EXTRA_OPTIONS)
|
||||||
set(CPackRun_CPackCommand "-DCPackCommand=${CMAKE_CPACK_COMMAND}")
|
set(CPackRun_CPackCommand "-DCPackCommand=${CMAKE_CPACK_COMMAND}")
|
||||||
# set up list of CPack generators
|
# set up list of CPack generators
|
||||||
|
@ -706,18 +731,17 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
list(APPEND GENLST "DragNDrop")
|
list(APPEND GENLST "DragNDrop")
|
||||||
endif(APPLE)
|
endif(APPLE)
|
||||||
if (CMAKE_SYSTEM_NAME MATCHES "Linux" AND NOT CMAKE_CURRENT_BINARY_DIR MATCHES ".* .*")
|
if (NOT CMAKE_CURRENT_BINARY_DIR MATCHES ".* .*")
|
||||||
find_program(RPMBUILD NAMES rpmbuild)
|
list(FIND ACTIVE_CPACK_GENERATORS "RPM" RPM_ACTIVE)
|
||||||
endif(CMAKE_SYSTEM_NAME MATCHES "Linux" AND NOT CMAKE_CURRENT_BINARY_DIR MATCHES ".* .*")
|
if (NOT ${RPM_ACTIVE} EQUAL -1)
|
||||||
if (RPMBUILD)
|
list(APPEND GENLST "RPM")
|
||||||
list(APPEND GENLST "RPM")
|
endif(NOT ${RPM_ACTIVE} EQUAL -1)
|
||||||
endif(RPMBUILD)
|
endif(NOT CMAKE_CURRENT_BINARY_DIR MATCHES ".* .*")
|
||||||
if (CMAKE_SYSTEM_NAME MATCHES "Linux")
|
list(FIND ACTIVE_CPACK_GENERATORS "DEB" DEB_ACTIVE)
|
||||||
find_program(DPKG NAMES dpkg)
|
if (NOT ${DEB_ACTIVE} EQUAL -1)
|
||||||
if (DPKG)
|
list(APPEND GENLST "DEB")
|
||||||
list(APPEND GENLST "DEB")
|
endif(NOT ${DEB_ACTIVE} EQUAL -1)
|
||||||
endif(DPKG)
|
|
||||||
endif(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
|
||||||
# set up list of component packaging ways
|
# set up list of component packaging ways
|
||||||
list(APPEND CWAYLST "default")
|
list(APPEND CWAYLST "default")
|
||||||
list(APPEND CWAYLST "OnePackPerGroup")
|
list(APPEND CWAYLST "OnePackPerGroup")
|
||||||
|
|
Loading…
Reference in New Issue