diff --git a/Modules/CPack.cmake b/Modules/CPack.cmake index ac9be773d..1e0503682 100644 --- a/Modules/CPack.cmake +++ b/Modules/CPack.cmake @@ -115,6 +115,7 @@ if(NOT CPACK_GENERATOR) option(CPACK_TGZ "Enable to build TGZ packages" ON) option(CPACK_TBZ2 "Enable to build TBZ2 packages" ON) option(CPACK_DEB "Enable to build Debian packages" OFF) + option(CPACK_RPM "Enable to build RPM packages" OFF) option(CPACK_NSIS "Enable to build NSIS packages" OFF) endif(CYGWIN) else(UNIX) @@ -126,6 +127,7 @@ if(NOT CPACK_GENERATOR) cpack_optional_append(CPACK_GENERATOR CPACK_OSXX11 OSXX11) cpack_optional_append(CPACK_GENERATOR CPACK_CYGWIN_BINARY CygwinBinary) cpack_optional_append(CPACK_GENERATOR CPACK_DEB DEB) + cpack_optional_append(CPACK_GENERATOR CPACK_RPM RPM) cpack_optional_append(CPACK_GENERATOR CPACK_NSIS NSIS) cpack_optional_append(CPACK_GENERATOR CPACK_STGZ STGZ) cpack_optional_append(CPACK_GENERATOR CPACK_TGZ TGZ) diff --git a/Modules/CPackRPM.cmake b/Modules/CPackRPM.cmake new file mode 100644 index 000000000..dc6cd1f95 --- /dev/null +++ b/Modules/CPackRPM.cmake @@ -0,0 +1,14 @@ +IF(CMAKE_BINARY_DIR) + MESSAGE(FATAL_ERROR "CPackRPM.cmake may only be used by CPack internally.") +ENDIF(CMAKE_BINARY_DIR) + +IF(NOT UNIX) + MESSAGE(FATAL_ERROR "CPackRPM.cmake may only be used under UNIX.") +ENDIF(NOT UNIX) + +FIND_PROGRAM(RPMBUILD_EXECUTABLE rpmbuild) + +IF(NOT RPMBUILD_EXECUTABLE) + MESSAGE(FATAL_ERROR "RPM package requires rpmbuild executable") +ENDIF(NOT RPMBUILD_EXECUTABLE) + diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt index 1a0e8abbc..fe54ef8ac 100644 --- a/Source/CMakeLists.txt +++ b/Source/CMakeLists.txt @@ -305,6 +305,7 @@ SET(CPACK_SRCS CPack/cmCPackCygwinBinaryGenerator.cxx CPack/cmCPackCygwinSourceGenerator.cxx CPack/cmCPackDebGenerator.cxx + CPack/cmCPackRPMGenerator.cxx ) # Build CPackLib ADD_LIBRARY(CPackLib ${CPACK_SRCS}) diff --git a/Source/CPack/cmCPackGenerators.cxx b/Source/CPack/cmCPackGenerators.cxx index 595145782..9baa2aa03 100644 --- a/Source/CPack/cmCPackGenerators.cxx +++ b/Source/CPack/cmCPackGenerators.cxx @@ -37,6 +37,7 @@ #if !defined(_WIN32) && !defined(__APPLE__) \ && !defined(__QNXNTO__) && !defined(__BEOS__) # include "cmCPackDebGenerator.h" +# include "cmCPackRPMGenerator.h" #endif @@ -74,6 +75,8 @@ cmCPackGenerators::cmCPackGenerators() && !defined(__QNXNTO__) && !defined(__BEOS__) this->RegisterGenerator("DEB", "Debian packages", cmCPackDebGenerator::CreateGenerator); + this->RegisterGenerator("RPM", "RPM packages", + cmCPackDebGenerator::CreateGenerator); #endif } diff --git a/Source/CPack/cmCPackRPMGenerator.cxx b/Source/CPack/cmCPackRPMGenerator.cxx new file mode 100644 index 000000000..59ef94f3a --- /dev/null +++ b/Source/CPack/cmCPackRPMGenerator.cxx @@ -0,0 +1,58 @@ +/*========================================================================= + + Program: CMake - Cross-Platform Makefile Generator + Module: $RCSfile$ + Language: C++ + Date: $Date$ + Version: $Revision$ + + Copyright (c) 2002 Kitware, Inc., Insight Consortium. 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. + +=========================================================================*/ +#include "cmCPackRPMGenerator.h" + +#include "cmSystemTools.h" +#include "cmMakefile.h" +#include "cmGeneratedFileStream.h" +#include "cmCPackLog.h" + +#include +#include + +//---------------------------------------------------------------------- +cmCPackRPMGenerator::cmCPackRPMGenerator() +{ +} + +//---------------------------------------------------------------------- +cmCPackRPMGenerator::~cmCPackRPMGenerator() +{ +} + +//---------------------------------------------------------------------- +int cmCPackRPMGenerator::CompressFiles(const char* outFileName, + const char* toplevel, + const std::vector& files) +{ + this->ReadListFile("CPackRPM.cmake"); + if (!this->IsSet("RPMBUILD_EXECUTABLE")) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, "Cannot find rpmbuild" << std::endl); + return 0; + } + const char* rpmbuildExecutable = this->GetOption("RPMBUILD_EXECUTABLE"); + + return 1; +} + +//---------------------------------------------------------------------- +int cmCPackRPMGenerator::InitializeInternal() +{ + return this->Superclass::InitializeInternal(); +} + diff --git a/Source/CPack/cmCPackRPMGenerator.h b/Source/CPack/cmCPackRPMGenerator.h new file mode 100644 index 000000000..17c93f46a --- /dev/null +++ b/Source/CPack/cmCPackRPMGenerator.h @@ -0,0 +1,48 @@ +/*========================================================================= + + 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 cmCPackRPMGenerator_h +#define cmCPackRPMGenerator_h + + +#include "cmCPackGenericGenerator.h" + +/** \class cmCPackRPMGenerator + * \brief A generator for RPM packages + * + */ +class cmCPackRPMGenerator : public cmCPackGenericGenerator +{ +public: + cmCPackTypeMacro(cmCPackRPMGenerator, cmCPackGenericGenerator); + + /** + * Construct generator + */ + cmCPackRPMGenerator(); + virtual ~cmCPackRPMGenerator(); + +protected: + virtual int InitializeInternal(); + int CompressFiles(const char* outFileName, const char* toplevel, + const std::vector& files); + virtual const char* GetOutputExtension() { return ".rpm"; } + virtual const char* GetInstallPrefix() { return "/usr"; } + +}; + +#endif