CPack: add generators for .7z and .tar.xz (#13072, #14519)

This commit is contained in:
Daniel Pfeifer 2014-07-10 00:21:36 +02:00 committed by Brad King
parent 38065563b6
commit f931a18c33
9 changed files with 151 additions and 2 deletions

View File

@ -0,0 +1,5 @@
cpack-add-lzma
--------------
* :manual:`cpack(1)` gained ``7Z`` and ``TXZ`` generators supporting
lzma-compressed archives.

View File

@ -580,9 +580,11 @@ set(CPACK_SRCS
CPack/cmCPackIFWGenerator.cxx CPack/cmCPackIFWGenerator.cxx
CPack/cmCPackSTGZGenerator.cxx CPack/cmCPackSTGZGenerator.cxx
CPack/cmCPackTGZGenerator.cxx CPack/cmCPackTGZGenerator.cxx
CPack/cmCPackTXZGenerator.cxx
CPack/cmCPackTarBZip2Generator.cxx CPack/cmCPackTarBZip2Generator.cxx
CPack/cmCPackTarCompressGenerator.cxx CPack/cmCPackTarCompressGenerator.cxx
CPack/cmCPackZIPGenerator.cxx CPack/cmCPackZIPGenerator.cxx
CPack/cmCPack7zGenerator.cxx
) )
if(CYGWIN) if(CYGWIN)

View File

@ -0,0 +1,25 @@
/*============================================================================
CMake - Cross Platform Makefile Generator
Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
Distributed under the OSI-approved BSD License (the "License");
see accompanying file Copyright.txt for details.
This software is distributed WITHOUT ANY WARRANTY; without even the
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the License for more information.
============================================================================*/
#include "cmCPack7zGenerator.h"
//----------------------------------------------------------------------
cmCPack7zGenerator::cmCPack7zGenerator()
:cmCPackArchiveGenerator(cmArchiveWrite::CompressNone,
cmArchiveWrite::Type7Zip)
{
}
//----------------------------------------------------------------------
cmCPack7zGenerator::~cmCPack7zGenerator()
{
}

View File

@ -0,0 +1,36 @@
/*============================================================================
CMake - Cross Platform Makefile Generator
Copyright 2000-2009 Kitware, Inc.
Distributed under the OSI-approved BSD License (the "License");
see accompanying file Copyright.txt for details.
This software is distributed WITHOUT ANY WARRANTY; without even the
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the License for more information.
============================================================================*/
#ifndef cmCPack7zGenerator_h
#define cmCPack7zGenerator_h
#include "cmCPackArchiveGenerator.h"
/** \class cmCPack7zGenerator
* \brief A generator for 7z files
*/
class cmCPack7zGenerator : public cmCPackArchiveGenerator
{
public:
cmCPackTypeMacro(cmCPack7zGenerator, cmCPackArchiveGenerator);
/**
* Construct generator
*/
cmCPack7zGenerator();
virtual ~cmCPack7zGenerator();
protected:
virtual const char* GetOutputExtension() { return ".7z"; }
};
#endif

View File

@ -14,9 +14,11 @@
#include "cmCPackGenerator.h" #include "cmCPackGenerator.h"
#include "cmCPackTGZGenerator.h" #include "cmCPackTGZGenerator.h"
#include "cmCPackTXZGenerator.h"
#include "cmCPackTarBZip2Generator.h" #include "cmCPackTarBZip2Generator.h"
#include "cmCPackTarCompressGenerator.h" #include "cmCPackTarCompressGenerator.h"
#include "cmCPackZIPGenerator.h" #include "cmCPackZIPGenerator.h"
#include "cmCPack7zGenerator.h"
#include "cmCPackSTGZGenerator.h" #include "cmCPackSTGZGenerator.h"
#include "cmCPackNSISGenerator.h" #include "cmCPackNSISGenerator.h"
#include "cmCPackIFWGenerator.h" #include "cmCPackIFWGenerator.h"
@ -57,6 +59,11 @@ cmCPackGeneratorFactory::cmCPackGeneratorFactory()
this->RegisterGenerator("TGZ", "Tar GZip compression", this->RegisterGenerator("TGZ", "Tar GZip compression",
cmCPackTGZGenerator::CreateGenerator); cmCPackTGZGenerator::CreateGenerator);
} }
if (cmCPackTXZGenerator::CanGenerate())
{
this->RegisterGenerator("TXZ", "Tar XZ compression",
cmCPackTXZGenerator::CreateGenerator);
}
if (cmCPackSTGZGenerator::CanGenerate()) if (cmCPackSTGZGenerator::CanGenerate())
{ {
this->RegisterGenerator("STGZ", "Self extracting Tar GZip compression", this->RegisterGenerator("STGZ", "Self extracting Tar GZip compression",
@ -92,6 +99,11 @@ cmCPackGeneratorFactory::cmCPackGeneratorFactory()
this->RegisterGenerator("ZIP", "ZIP file format", this->RegisterGenerator("ZIP", "ZIP file format",
cmCPackZIPGenerator::CreateGenerator); cmCPackZIPGenerator::CreateGenerator);
} }
if (cmCPack7zGenerator::CanGenerate())
{
this->RegisterGenerator("7Z", "7-Zip file format",
cmCPack7zGenerator::CreateGenerator);
}
#ifdef _WIN32 #ifdef _WIN32
if (cmCPackWIXGenerator::CanGenerate()) if (cmCPackWIXGenerator::CanGenerate())
{ {

View File

@ -0,0 +1,25 @@
/*============================================================================
CMake - Cross Platform Makefile Generator
Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
Distributed under the OSI-approved BSD License (the "License");
see accompanying file Copyright.txt for details.
This software is distributed WITHOUT ANY WARRANTY; without even the
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the License for more information.
============================================================================*/
#include "cmCPackTXZGenerator.h"
//----------------------------------------------------------------------
cmCPackTXZGenerator::cmCPackTXZGenerator()
:cmCPackArchiveGenerator(cmArchiveWrite::CompressXZ,
cmArchiveWrite::TypeTAR)
{
}
//----------------------------------------------------------------------
cmCPackTXZGenerator::~cmCPackTXZGenerator()
{
}

View File

@ -0,0 +1,35 @@
/*============================================================================
CMake - Cross Platform Makefile Generator
Copyright 2000-2009 Kitware, Inc.
Distributed under the OSI-approved BSD License (the "License");
see accompanying file Copyright.txt for details.
This software is distributed WITHOUT ANY WARRANTY; without even the
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the License for more information.
============================================================================*/
#ifndef cmCPackTXZGenerator_h
#define cmCPackTXZGenerator_h
#include "cmCPackArchiveGenerator.h"
/** \class cmCPackTXZGenerator
* \brief A generator for TXZ files
*
*/
class cmCPackTXZGenerator : public cmCPackArchiveGenerator
{
public:
cmCPackTypeMacro(cmCPackTXZGenerator, cmCPackArchiveGenerator);
/**
* Construct generator
*/
cmCPackTXZGenerator();
virtual ~cmCPackTXZGenerator();
protected:
virtual const char* GetOutputExtension() { return ".tar.xz"; }
};
#endif

View File

@ -159,7 +159,15 @@ cmArchiveWrite::cmArchiveWrite(std::ostream& os, Compress c, Type t):
this->Error += cm_archive_error_string(this->Archive); this->Error += cm_archive_error_string(this->Archive);
return; return;
} }
break; break;
case Type7Zip:
if(archive_write_set_format_7zip(this->Archive) != ARCHIVE_OK)
{
this->Error = "archive_write_set_format_7zip: ";
this->Error += cm_archive_error_string(this->Archive);
return;
}
break;
} }
// do not pad the last block!! // do not pad the last block!!

View File

@ -42,7 +42,8 @@ public:
enum Type enum Type
{ {
TypeTAR, TypeTAR,
TypeZIP TypeZIP,
Type7Zip
}; };
/** Construct with output stream to which to write archive. */ /** Construct with output stream to which to write archive. */