diff --git a/Modules/CPackDeb.cmake b/Modules/CPackDeb.cmake new file mode 100644 index 000000000..e4c123b43 --- /dev/null +++ b/Modules/CPackDeb.cmake @@ -0,0 +1,10 @@ +IF(CMAKE_BINARY_DIR) + MESSAGE(FATAL_ERROR "CPackDeb.cmake may only be used by CPack internally.") +ENDIF(CMAKE_BINARY_DIR) + +IF(NOT UNIX) + MESSAGE(FATAL_ERROR "CPackDeb.cmake may only be used under UNIX.") +ENDIF(NOT UNIX) + +FIND_PROGRAM(AR_EXECUTABLE ar) + diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt index 915097e4b..3e670a173 100644 --- a/Source/CMakeLists.txt +++ b/Source/CMakeLists.txt @@ -302,6 +302,7 @@ SET(CPACK_SRCS CPack/cmCPackZIPGenerator.cxx CPack/cmCPackCygwinBinaryGenerator.cxx CPack/cmCPackCygwinSourceGenerator.cxx + CPack/cmCPackDebGenerator.cxx ) # Build CPackLib ADD_LIBRARY(CPackLib ${CPACK_SRCS}) diff --git a/Source/CPack/cmCPackDebGenerator.cxx b/Source/CPack/cmCPackDebGenerator.cxx new file mode 100644 index 000000000..fdc051489 --- /dev/null +++ b/Source/CPack/cmCPackDebGenerator.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 "cmCPackDebGenerator.h" + +#include "cmSystemTools.h" +#include "cmMakefile.h" +#include "cmGeneratedFileStream.h" +#include "cmCPackLog.h" + +#include +#include + +//---------------------------------------------------------------------- +cmCPackDebGenerator::cmCPackDebGenerator() +{ +} + +//---------------------------------------------------------------------- +cmCPackDebGenerator::~cmCPackDebGenerator() +{ +} + +//---------------------------------------------------------------------- +int cmCPackDebGenerator::CompressFiles(const char* outFileName, + const char* toplevel, + const std::vector& files) +{ + const char* arExecutable = this->GetOption("AR_EXECUTABLE"); + const char* cmakeExecutable = this->GetOption("CMAKE_COMMAND"); + return 1; +} + +//---------------------------------------------------------------------- +int cmCPackDebGenerator::InitializeInternal() +{ + this->ReadListFile("CPackDeb.cmake"); + if (!this->IsSet("AR_EXECUTABLE")) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, "Cannot find ar" << std::endl); + return 0; + } + return this->Superclass::InitializeInternal(); +} + diff --git a/Source/CPack/cmCPackDebGenerator.h b/Source/CPack/cmCPackDebGenerator.h new file mode 100644 index 000000000..edf3402eb --- /dev/null +++ b/Source/CPack/cmCPackDebGenerator.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 cmCPackDebGenerator_h +#define cmCPackDebGenerator_h + + +#include "cmCPackGenericGenerator.h" + +/** \class cmCPackDebGenerator + * \brief A generator for Debian packages + * + */ +class cmCPackDebGenerator : public cmCPackGenericGenerator +{ +public: + cmCPackTypeMacro(cmCPackDebGenerator, cmCPackGenericGenerator); + + /** + * Construct generator + */ + cmCPackDebGenerator(); + virtual ~cmCPackDebGenerator(); + +protected: + virtual int InitializeInternal(); + int CompressFiles(const char* outFileName, const char* toplevel, + const std::vector& files); + virtual const char* GetOutputExtension() { return ".deb"; } + virtual const char* GetInstallPrefix() { return "/usr"; } + +}; + +#endif diff --git a/Source/CPack/cmCPackGenerators.cxx b/Source/CPack/cmCPackGenerators.cxx index 629156a3f..bccee43f2 100644 --- a/Source/CPack/cmCPackGenerators.cxx +++ b/Source/CPack/cmCPackGenerators.cxx @@ -34,6 +34,12 @@ # include "cmCPackCygwinSourceGenerator.h" #endif +#if !defined(_WIN32) && !defined(__APPLE__) \ + && !defined(__QNXNTO__) && !defined(__BEOS__) +# include "cmCPackDebGenerator.h" +#endif + + #include "cmCPackLog.h" //---------------------------------------------------------------------- @@ -64,6 +70,10 @@ cmCPackGenerators::cmCPackGenerators() this->RegisterGenerator("OSXX11", "Mac OSX X11 bundle", cmCPackOSXX11Generator::CreateGenerator); #endif +#if !defined(_WIN32) && !defined(__APPLE__) && !defined(__QNXNTO__) && !defined(__BEOS__) + this->RegisterGenerator("DEB", "Debian packages", + cmCPackDebGenerator::CreateGenerator); +#endif } //---------------------------------------------------------------------- @@ -80,6 +90,7 @@ cmCPackGenerators::~cmCPackGenerators() cmCPackGenericGenerator* cmCPackGenerators::NewGenerator(const char* name) { cmCPackGenericGenerator* gen = this->NewGeneratorInternal(name); + fprintf(stderr, "********* NewGen %s\n", name); if ( !gen ) { return 0; @@ -95,12 +106,15 @@ cmCPackGenericGenerator* cmCPackGenerators::NewGeneratorInternal( { if ( !name ) { + fprintf(stderr, "*** 1 name==0\n"); return 0; } + fprintf(stderr, "*** 2 name==%s\n", name); cmCPackGenerators::t_GeneratorCreatorsMap::iterator it = this->GeneratorCreators.find(name); if ( it == this->GeneratorCreators.end() ) { + fprintf(stderr, "*** 2 name==%s not found\n", name); return 0; } return (it->second)(); diff --git a/Source/cmake.cxx b/Source/cmake.cxx index 2746c3828..c8d5fded7 100644 --- a/Source/cmake.cxx +++ b/Source/cmake.cxx @@ -690,10 +690,17 @@ void cmake::SetDirectoriesFromFile(const char* arg) // cache int cmake::AddCMakePaths(const char *arg0) { - // Find our own executable. + // Find the cmake executable std::vector failures; std::string cMakeSelf = arg0; cmSystemTools::ConvertToUnixSlashes(cMakeSelf); + if ((strstr(arg0, "cpack")!=0) || (strstr(arg0, "ctest")!=0)) + { + // when called from cpack or ctest CMAKE_COMMAND would otherwise point + // to cpack or ctest and not cmake + cMakeSelf = cmSystemTools::GetFilenamePath(cMakeSelf) + + "/cmake" + cmSystemTools::GetFilenameExtension(cMakeSelf); + } failures.push_back(cMakeSelf); cMakeSelf = cmSystemTools::FindProgram(cMakeSelf.c_str()); cmSystemTools::ConvertToUnixSlashes(cMakeSelf); @@ -746,6 +753,12 @@ int cmake::AddCMakePaths(const char *arg0) editCacheCommand = cmSystemTools::GetFilenamePath(cMakeSelf) + "/CMakeSetup" + cmSystemTools::GetFilenameExtension(cMakeSelf); } + if(cmSystemTools::FileExists(editCacheCommand.c_str())) + { + this->CacheManager->AddCacheEntry + ("CMAKE_EDIT_COMMAND", editCacheCommand.c_str(), + "Path to cache edit program executable.", cmCacheManager::INTERNAL); + } std::string ctestCommand = cmSystemTools::GetFilenamePath(cMakeSelf) + "/ctest" + cmSystemTools::GetFilenameExtension(cMakeSelf); if(cmSystemTools::FileExists(ctestCommand.c_str())) @@ -754,11 +767,13 @@ int cmake::AddCMakePaths(const char *arg0) ("CMAKE_CTEST_COMMAND", ctestCommand.c_str(), "Path to ctest program executable.", cmCacheManager::INTERNAL); } - if(cmSystemTools::FileExists(editCacheCommand.c_str())) + std::string cpackCommand = cmSystemTools::GetFilenamePath(cMakeSelf) + + "/cpack" + cmSystemTools::GetFilenameExtension(cMakeSelf); + if(cmSystemTools::FileExists(ctestCommand.c_str())) { this->CacheManager->AddCacheEntry - ("CMAKE_EDIT_COMMAND", editCacheCommand.c_str(), - "Path to cache edit program executable.", cmCacheManager::INTERNAL); + ("CMAKE_CPACK_COMMAND", cpackCommand.c_str(), + "Path to cpack program executable.", cmCacheManager::INTERNAL); } // do CMAKE_ROOT, look for the environment variable first