ENH: add an empty debian package generator, Mathieu volunteered to fill it

:-)

Alex
This commit is contained in:
Alexander Neundorf 2007-07-25 10:57:33 -04:00
parent f4ac0f8373
commit a39aff52a0
6 changed files with 150 additions and 4 deletions

10
Modules/CPackDeb.cmake Normal file
View File

@ -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)

View File

@ -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})

View File

@ -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();
}

View File

@ -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

View File

@ -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)();

View File

@ -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