summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Neundorf <neundorf@kde.org>2007-07-25 14:57:33 (GMT)
committerAlexander Neundorf <neundorf@kde.org>2007-07-25 14:57:33 (GMT)
commita39aff52a033943242296bacc193741b0101377d (patch)
tree1ed04854e79820eafa28c5a727f6478c46586d12
parentf4ac0f8373aeb96aae4cd24359586bf1a18c7f7b (diff)
downloadCMake-a39aff52a033943242296bacc193741b0101377d.zip
CMake-a39aff52a033943242296bacc193741b0101377d.tar.gz
CMake-a39aff52a033943242296bacc193741b0101377d.tar.bz2
ENH: add an empty debian package generator, Mathieu volunteered to fill it
:-) Alex
-rw-r--r--Modules/CPackDeb.cmake10
-rw-r--r--Source/CMakeLists.txt1
-rw-r--r--Source/CPack/cmCPackDebGenerator.cxx58
-rw-r--r--Source/CPack/cmCPackDebGenerator.h48
-rw-r--r--Source/CPack/cmCPackGenerators.cxx14
-rw-r--r--Source/cmake.cxx23
6 files changed, 150 insertions, 4 deletions
diff --git a/Modules/CPackDeb.cmake b/Modules/CPackDeb.cmake
new file mode 100644
index 0000000..e4c123b
--- /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 915097e..3e670a1 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 0000000..fdc0514
--- /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 <cmsys/SystemTools.hxx>
+#include <cmsys/Glob.hxx>
+
+//----------------------------------------------------------------------
+cmCPackDebGenerator::cmCPackDebGenerator()
+{
+}
+
+//----------------------------------------------------------------------
+cmCPackDebGenerator::~cmCPackDebGenerator()
+{
+}
+
+//----------------------------------------------------------------------
+int cmCPackDebGenerator::CompressFiles(const char* outFileName,
+ const char* toplevel,
+ const std::vector<std::string>& 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 0000000..edf3402
--- /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<std::string>& 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 629156a..bccee43 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 2746c38..c8d5fde 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<cmStdString> 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