diff -ubB -r -N cmake-2.6.3-orig/Modules/CPack7z.cmake cmake-2.6.3/Modules/CPack7z.cmake --- cmake-2.6.3-orig/Modules/CPack7z.cmake 1970-01-01 01:00:00.000000000 +0100 +++ cmake-2.6.3/Modules/CPack7z.cmake 2009-04-21 12:29:11.046875000 +0200 @@ -0,0 +1,10 @@ +IF(CMAKE_BINARY_DIR) + MESSAGE(FATAL_ERROR "CPack7z.cmake may only be used by CPack internally.") +ENDIF(CMAKE_BINARY_DIR) + +FIND_PROGRAM(SEVENZIP_EXECUTABLE 7z PATHS "$ENV{ProgramFiles}/7-zip") +IF(SEVENZIP_EXECUTABLE) + SET(CPACK_SEVENZIP_COMMAND "\"${SEVENZIP_EXECUTABLE}\" a \"\" @") + SET(CPACK_SEVENZIP_NEED_QUOTES TRUE) +ENDIF(SEVENZIP_EXECUTABLE) + diff -ubB -r -N cmake-2.6.3-orig/Source/CPack/cmCPack7zGenerator.cxx cmake-2.6.3/Source/CPack/cmCPack7zGenerator.cxx --- cmake-2.6.3-orig/Source/CPack/cmCPack7zGenerator.cxx 1970-01-01 01:00:00.000000000 +0100 +++ cmake-2.6.3/Source/CPack/cmCPack7zGenerator.cxx 2009-04-21 12:24:50.765625000 +0200 @@ -0,0 +1,106 @@ +/*========================================================================= + + Program: CMake - Cross-Platform Makefile Generator + Module: $RCSfile: cmCPack7zGenerator.cxx,v $ + Language: C++ + Date: $Date: 2007-07-27 14:55:24 $ + Version: $Revision: 1.11 $ + + 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 "cmCPack7zGenerator.h" + +#include "cmSystemTools.h" +#include "cmGeneratedFileStream.h" +#include "cmCPackLog.h" + +#include + +//---------------------------------------------------------------------- +cmCPack7zGenerator::cmCPack7zGenerator() +{ +} + +//---------------------------------------------------------------------- +cmCPack7zGenerator::~cmCPack7zGenerator() +{ +} + +//---------------------------------------------------------------------- +int cmCPack7zGenerator::InitializeInternal() +{ + this->SetOptionIfNotSet("CPACK_INCLUDE_TOPLEVEL_DIRECTORY", "1"); + this->ReadListFile("CPack7z.cmake"); + if ((!this->IsSet("SEVENZIP_EXECUTABLE")) + || (!this->IsSet("CPACK_SEVENZIP_COMMAND"))) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, "Cannot find the 7-zip program" + << std::endl); + return 0; + } + return this->Superclass::InitializeInternal(); +} + +//---------------------------------------------------------------------- +int cmCPack7zGenerator::CompressFiles(const char* outFileName, + const char* toplevel, const std::vector& files) +{ + std::string tempFileName; + tempFileName = toplevel; + tempFileName += "/7z.filelist"; + bool needQuotesInFile = cmSystemTools::IsOn( + this->GetOption("CPACK_SEVENZIP_NEED_QUOTES")); + + std::string cmd = this->GetOption("CPACK_SEVENZIP_COMMAND"); + cmsys::SystemTools::ReplaceString(cmd, "", outFileName); + cmsys::SystemTools::ReplaceString(cmd, "", "7z.filelist"); + + std::string options = this->GetOption("CPACK_GENERATOR_7Z_OPTIONS"); + cmsys::SystemTools::ReplaceString(cmd, "", options.c_str()); + + { // the scope is needed for cmGeneratedFileStream + cmGeneratedFileStream out(tempFileName.c_str()); + std::vector::const_iterator fileIt; + for ( fileIt = files.begin(); fileIt != files.end(); ++ fileIt ) + { + if ( needQuotesInFile ) + { + out << "\""; + } + out << cmSystemTools::RelativePath(toplevel, fileIt->c_str()); + if ( needQuotesInFile ) + { + out << "\""; + } + out << std::endl; + } + } + + + std::string output; + int retVal = -1; + int res = cmSystemTools::RunSingleCommand(cmd.c_str(), &output, + &retVal, toplevel, this->GeneratorVerbose, 0); + + if ( !res || retVal ) + { + std::string tmpFile = this->GetOption("CPACK_TOPLEVEL_DIRECTORY"); + tmpFile += "/Compress7z.log"; + cmGeneratedFileStream ofs(tmpFile.c_str()); + ofs << "# Run command: " << cmd.c_str() << std::endl + << "# Output:" << std::endl + << output.c_str() << std::endl; + cmCPackLogger(cmCPackLog::LOG_ERROR, "Problem running 7z command: " + << cmd.c_str() << std::endl + << "Please check " << tmpFile.c_str() << " for errors" << std::endl); + return 0; + } + return 1; +} diff -ubB -r -N cmake-2.6.3-orig/Source/CPack/cmCPack7zGenerator.h cmake-2.6.3/Source/CPack/cmCPack7zGenerator.h --- cmake-2.6.3-orig/Source/CPack/cmCPack7zGenerator.h 1970-01-01 01:00:00.000000000 +0100 +++ cmake-2.6.3/Source/CPack/cmCPack7zGenerator.h 2009-04-21 10:02:39.890625000 +0200 @@ -0,0 +1,49 @@ +/*========================================================================= + + Program: CMake - Cross-Platform Makefile Generator + Module: $RCSfile: cmCPack7zGenerator.h,v $ + Language: C++ + Date: $Date: 2007-11-05 21:55:45 $ + Version: $Revision: 1.6 $ + + 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 cmCPack7zGenerator_h +#define cmCPack7zGenerator_h + +#include "cmCPackGenerator.h" + +class cmCPack7zGeneratorForward; + +/** \class cmCPack7zGenerator + * \brief A generator for ZIP files + */ +class cmCPack7zGenerator : public cmCPackGenerator +{ +public: + friend class cmCPack7zGeneratorForward; + cmCPackTypeMacro(cmCPack7zGenerator, cmCPackGenerator); + + /** + * Construct generator + */ + cmCPack7zGenerator(); + virtual ~cmCPack7zGenerator(); + +protected: + virtual int InitializeInternal(); + int CompressFiles(const char* outFileName, const char* toplevel, + const std::vector& files); + virtual const char* GetOutputExtension() { return ".7z"; } + + int ZipStyle; +}; + +#endif diff -ubB -r -N cmake-2.6.3-orig/Source/CPack/cmCPackGeneratorFactory.cxx cmake-2.6.3/Source/CPack/cmCPackGeneratorFactory.cxx --- cmake-2.6.3-orig/Source/CPack/cmCPackGeneratorFactory.cxx 2009-04-21 12:56:17.937500000 +0200 +++ cmake-2.6.3/Source/CPack/cmCPackGeneratorFactory.cxx 2009-04-21 10:17:43.578125000 +0200 @@ -24,6 +24,7 @@ #include "cmCPackZIPGenerator.h" #include "cmCPackSTGZGenerator.h" #include "cmCPackNSISGenerator.h" +#include "cmCPack7zGenerator.h" #ifdef __APPLE__ # include "cmCPackDragNDropGenerator.h" # include "cmCPackBundleGenerator.h" @@ -67,6 +68,8 @@ cmCPackTarBZip2Generator::CreateGenerator); this->RegisterGenerator("TZ", "Tar Compress compression", cmCPackTarCompressGenerator::CreateGenerator); + this->RegisterGenerator("7z", "7z file format", + cmCPack7zGenerator::CreateGenerator); #ifdef __APPLE__ this->RegisterGenerator("DragNDrop", "Mac OSX Drag And Drop", cmCPackDragNDropGenerator::CreateGenerator);