--- cmake-2.6.3-RC-13/Modules/CPack.cmake.xz~ 2009-02-11 00:37:49.000000000 +0100 +++ cmake-2.6.3-RC-13/Modules/CPack.cmake 2009-02-12 07:35:30.000000000 +0100 @@ -717,6 +717,7 @@ option(CPACK_BINARY_STGZ "Enable to build STGZ packages" ON) option(CPACK_BINARY_TGZ "Enable to build TGZ packages" ON) option(CPACK_BINARY_TBZ2 "Enable to build TBZ2 packages" OFF) + option(CPACK_BINARY_TXZ "Enable to build TXZ packages" OFF) option(CPACK_BINARY_DEB "Enable to build Debian packages" OFF) option(CPACK_BINARY_RPM "Enable to build RPM packages" OFF) option(CPACK_BINARY_NSIS "Enable to build NSIS packages" OFF) @@ -737,6 +738,7 @@ cpack_optional_append(CPACK_GENERATOR CPACK_BINARY_STGZ STGZ) cpack_optional_append(CPACK_GENERATOR CPACK_BINARY_TGZ TGZ) cpack_optional_append(CPACK_GENERATOR CPACK_BINARY_TBZ2 TBZ2) + cpack_optional_append(CPACK_GENERATOR CPACK_BINARY_TXZ TXZ) cpack_optional_append(CPACK_GENERATOR CPACK_BINARY_TZ TZ) cpack_optional_append(CPACK_GENERATOR CPACK_BINARY_ZIP ZIP) @@ -750,6 +752,7 @@ else(CYGWIN) option(CPACK_SOURCE_TBZ2 "Enable to build TBZ2 source packages" ON) option(CPACK_SOURCE_TGZ "Enable to build TGZ source packages" ON) + option(CPACK_SOURCE_TXZ "Enable to build TXZ source packages" ON) option(CPACK_SOURCE_TZ "Enable to build TZ source packages" ON) option(CPACK_SOURCE_ZIP "Enable to build ZIP source packages" OFF) endif(CYGWIN) @@ -760,6 +763,7 @@ cpack_optional_append(CPACK_SOURCE_GENERATOR CPACK_SOURCE_CYGWIN CygwinSource) cpack_optional_append(CPACK_SOURCE_GENERATOR CPACK_SOURCE_TGZ TGZ) cpack_optional_append(CPACK_SOURCE_GENERATOR CPACK_SOURCE_TBZ2 TBZ2) + cpack_optional_append(CPACK_SOURCE_GENERATOR CPACK_SOURCE_TXZ TXZ) cpack_optional_append(CPACK_SOURCE_GENERATOR CPACK_SOURCE_TZ TZ) cpack_optional_append(CPACK_SOURCE_GENERATOR CPACK_SOURCE_ZIP ZIP) endif(NOT CPACK_SOURCE_GENERATOR) @@ -770,7 +774,7 @@ CPACK_BINARY_DEB CPACK_BINARY_RPM CPACK_BINARY_TZ CPACK_BINARY_NSIS CPACK_BINARY_ZIP CPACK_BINARY_BUNDLE CPACK_SOURCE_CYGWIN CPACK_SOURCE_TBZ2 CPACK_SOURCE_TGZ - CPACK_SOURCE_TZ CPACK_SOURCE_ZIP CPACK_BINARY_DRAGNDROP) + CPACK_SOURCE_TXZ CPACK_SOURCE_TZ CPACK_SOURCE_ZIP CPACK_BINARY_DRAGNDROP) # Set some other variables cpack_set_if_not_set(CPACK_INSTALL_CMAKE_PROJECTS --- cmake-2.6.3-RC-8/Modules/FindLibLZMA.cmake.xz~ 2009-01-22 00:42:55.000000000 +0100 +++ cmake-2.6.3-RC-8/Modules/FindLibLZMA.cmake 2009-01-22 00:42:55.000000000 +0100 @@ -0,0 +1,39 @@ +# - Find LibLZMA +# Find LibLZMA headers and library +# +# LIBLZMA_FOUND - True if liblzma is found. +# LIBLZMA_INCLUDE_DIR - Directory where liblzma headers are located. +# LIBLZMA_LIBRARIES - Lzma libraries to link against. +# LIBLZMA_HAS_AUTO_DECODER - True if lzma_auto_decoder() is found (required). +# LIBLZMA_HAS_EASY_ENCODER - True if lzma_easy_encoder() is found (required). +# LIBLZMA_HAS_LZMA_PRESET - True if lzma_lzma_preset() is found (required). + + +# Copyright (c) 2008, Per Øyvind Karlsen, <peroyvind@mandriva.org> + + +IF (LIBLZMA_INCLUDE_DIRS AND LIBLZMA_LIBRARIES) + SET(LIBLZMA_FIND_QUIETLY TRUE) +ENDIF (LIBLZMA_INCLUDE_DIRS AND LIBLZMA_LIBRARIES) + +IF (NOT WIN32) + INCLUDE(FindPkgConfig) + PKG_SEARCH_MODULE(LIBLZMA liblzma) + ELSE (NOT WIN32) + FIND_PATH(LIBLZMA_INCLUDE_DIRS lzma.h ) + FIND_LIBRARY(LIBLZMA_LIBRARIES NAMES lzma ) + INCLUDE(FindPackageHandleStandardArgs) + FIND_PACKAGE_HANDLE_STANDARD_ARGS(LIBLZMA DEFAULT_MSG LIBLZMA_INCLUDE_DIRS LIBLZMA_LIBRARIES) +ENDIF (NOT WIN32) + +IF (LIBLZMA_FOUND) + INCLUDE(CheckLibraryExists) + CHECK_LIBRARY_EXISTS(${LIBLZMA_LIBRARIES} lzma_auto_decoder "" LIBLZMA_HAS_AUTO_DECODER) + CHECK_LIBRARY_EXISTS(${LIBLZMA_LIBRARIES} lzma_easy_encoder "" LIBLZMA_HAS_EASY_ENCODER) + CHECK_LIBRARY_EXISTS(${LIBLZMA_LIBRARIES} lzma_lzma_preset "" LIBLZMA_HAS_LZMA_PRESET) + IF (NOT LIBLZMA_HAS_AUTO_DECODER AND LIBLZMA_HAS_EASY_ENCODER AND LIBLZMA_HAS_LZMA_PRESET) + SET(LIBLZMA_FOUND FALSE) + ENDIF(NOT LIBLZMA_HAS_AUTO_DECODER AND LIBLZMA_HAS_EASY_ENCODER AND LIBLZMA_HAS_LZMA_PRESET) +ENDIF (LIBLZMA_FOUND) + +MARK_AS_ADVANCED( LIBLZMA_INCLUDE_DIRS LIBLZMA_LIBRARIES ) --- cmake-2.6.3-RC-8/Source/CMakeLists.txt.xz~ 2009-01-22 00:42:55.000000000 +0100 +++ cmake-2.6.3-RC-8/Source/CMakeLists.txt 2009-01-22 00:42:55.000000000 +0100 @@ -356,6 +356,7 @@ SET(CPACK_SRCS CPack/cmCPackTGZGenerator.cxx CPack/cmCPackTarBZip2Generator.cxx CPack/cmCPackTarCompressGenerator.cxx + CPack/cmCPackTarXZGenerator.cxx CPack/cmCPackZIPGenerator.cxx ) --- cmake-2.6.3-RC-8/Source/CPack/cmCPackGeneratorFactory.cxx.xz~ 2009-01-22 00:42:55.000000000 +0100 +++ cmake-2.6.3-RC-8/Source/CPack/cmCPackGeneratorFactory.cxx 2009-01-22 00:42:55.000000000 +0100 @@ -21,6 +21,7 @@ #include "cmCPackTGZGenerator.h" #include "cmCPackTarBZip2Generator.h" #include "cmCPackTarCompressGenerator.h" +#include "cmCPackTarXZGenerator.h" #include "cmCPackZIPGenerator.h" #include "cmCPackSTGZGenerator.h" #include "cmCPackNSISGenerator.h" @@ -64,6 +65,8 @@ cmCPackGeneratorFactory::cmCPackGenerato cmCPackZIPGenerator::CreateGenerator); this->RegisterGenerator("TBZ2", "Tar BZip2 compression", cmCPackTarBZip2Generator::CreateGenerator); + this->RegisterGenerator("TXZ", "Tar XZ compression", + cmCPackTarXZGenerator::CreateGenerator); this->RegisterGenerator("TZ", "Tar Compress compression", cmCPackTarCompressGenerator::CreateGenerator); #ifdef __APPLE__ --- cmake-2.6.3-RC-8/Source/CPack/cmCPackTarXZGenerator.cxx.xz~ 2009-01-22 00:42:55.000000000 +0100 +++ cmake-2.6.3-RC-8/Source/CPack/cmCPackTarXZGenerator.cxx 2009-01-22 00:42:55.000000000 +0100 @@ -0,0 +1,180 @@ +/*========================================================================= + + Program: CMake - Cross-Platform Makefile Generator + Module: $RCSfile: cmCPackTarXZGenerator.cxx,v $ + Language: C++ + Date: $Date: 2007-02-02 21:52:20 $ + Version: $Revision: 1.4 $ + + 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 "cmCPackTarXZGenerator.h" + +#include "cmake.h" +#include "cmGlobalGenerator.h" +#include "cmLocalGenerator.h" +#include "cmSystemTools.h" +#include "cmMakefile.h" +#include "cmGeneratedFileStream.h" +#include "cmCPackLog.h" + +#include <cmsys/SystemTools.hxx> + +// Includes needed for implementation of RenameFile. This is not in +// system tools because it is not implemented robustly enough to move +// files across directories. +#ifdef _WIN32 +# include <windows.h> +# include <sys/stat.h> +#endif + +//---------------------------------------------------------------------- +cmCPackTarXZGenerator::cmCPackTarXZGenerator() +{ + this->Compress = false; +} + +//---------------------------------------------------------------------- +cmCPackTarXZGenerator::~cmCPackTarXZGenerator() +{ +} + +//---------------------------------------------------------------------- +int cmCPackTarXZGenerator::InitializeInternal() +{ + this->SetOptionIfNotSet("CPACK_INCLUDE_TOPLEVEL_DIRECTORY", "1"); + std::vector<std::string> path; + std::string pkgPath = cmSystemTools::FindProgram("xz", path, false); + if ( pkgPath.empty() ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, "Cannot find XZ" << std::endl); + return 0; + } + this->SetOptionIfNotSet("CPACK_INSTALLER_PROGRAM", pkgPath.c_str()); + cmCPackLogger(cmCPackLog::LOG_VERBOSE, "Found Compress program: " + << pkgPath.c_str() + << std::endl); + + return this->Superclass::InitializeInternal(); +} + +//---------------------------------------------------------------------- +int cmCPackTarXZGenerator::XZFile(const char* packageDirFileName) +{ + int retVal = 0; + cmOStringStream dmgCmd1; + dmgCmd1 << "\"" << this->GetOption("CPACK_INSTALLER_PROGRAM") + << "\" \"" << packageDirFileName + << "\""; + retVal = -1; + std::string output; + int res = cmSystemTools::RunSingleCommand(dmgCmd1.str().c_str(), &output, + &retVal, 0, this->GeneratorVerbose, 0); + if ( !res || retVal ) + { + std::string tmpFile = this->GetOption("CPACK_TOPLEVEL_DIRECTORY"); + tmpFile += "/CompressXZ.log"; + cmGeneratedFileStream ofs(tmpFile.c_str()); + ofs << "# Run command: " << dmgCmd1.str().c_str() << std::endl + << "# Output:" << std::endl + << output.c_str() << std::endl; + cmCPackLogger(cmCPackLog::LOG_ERROR, "Problem running XZ command: " + << dmgCmd1.str().c_str() << std::endl + << "Please check " << tmpFile.c_str() << " for errors" << std::endl); + return 0; + } + return 1; +} + +//---------------------------------------------------------------------- +int cmCPackTarXZGenerator::CompressFiles(const char* outFileName, + const char* toplevel, const std::vector<std::string>& files) +{ + std::string packageDirFileName + = this->GetOption("CPACK_TEMPORARY_DIRECTORY"); + packageDirFileName += ".tar"; + std::string output; + if ( !this->Superclass::CompressFiles(packageDirFileName.c_str(), + toplevel, files) ) + { + return 0; + } + + if(!this->XZFile(packageDirFileName.c_str())) + { + return 0; + } + + std::string compressOutFile = packageDirFileName + ".xz"; + if ( !cmSystemTools::SameFile(compressOutFile.c_str(), outFileName ) ) + { + if ( !this->RenameFile(compressOutFile.c_str(), outFileName) ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, "Problem renaming: \"" + << compressOutFile.c_str() << "\" to \"" + << (outFileName ? outFileName : "(NULL)") << std::endl); + return 0; + } + } + + return 1; +} + +//---------------------------------------------------------------------------- +int cmCPackTarXZGenerator::RenameFile(const char* oldname, + const char* newname) +{ +#ifdef _WIN32 + /* On Windows the move functions will not replace existing files. + Check if the destination exists. */ + struct stat newFile; + if(stat(newname, &newFile) == 0) + { + /* The destination exists. We have to replace it carefully. The + MoveFileEx function does what we need but is not available on + Win9x. */ + OSVERSIONINFO osv; + DWORD attrs; + + /* Make sure the destination is not read only. */ + attrs = GetFileAttributes(newname); + if(attrs & FILE_ATTRIBUTE_READONLY) + { + SetFileAttributes(newname, attrs & ~FILE_ATTRIBUTE_READONLY); + } + + /* Check the windows version number. */ + osv.dwOSVersionInfoSize = sizeof(osv); + GetVersionEx(&osv); + if(osv.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) + { + /* This is Win9x. There is no MoveFileEx implementation. We + cannot quite rename the file atomically. Just delete the + destination and then move the file. */ + DeleteFile(newname); + return MoveFile(oldname, newname); + } + else + { + /* This is not Win9x. Use the MoveFileEx implementation. */ + return MoveFileEx(oldname, newname, MOVEFILE_REPLACE_EXISTING); + } + } + else + { + /* The destination does not exist. Just move the file. */ + return MoveFile(oldname, newname); + } +#else + /* On UNIX we have an OS-provided call to do this atomically. */ + return rename(oldname, newname) == 0; +#endif +} + --- cmake-2.6.3-RC-8/Source/CPack/cmCPackTarXZGenerator.h.xz~ 2009-01-22 00:42:55.000000000 +0100 +++ cmake-2.6.3-RC-8/Source/CPack/cmCPackTarXZGenerator.h 2009-01-22 00:42:55.000000000 +0100 @@ -0,0 +1,47 @@ +/*========================================================================= + + Program: CMake - Cross-Platform Makefile Generator + Module: $RCSfile: cmCPackTarXZGenerator.h,v $ + Language: C++ + Date: $Date: 2007-02-02 19:40:26 $ + Version: $Revision: 1.2 $ + + 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 cmCPackTarXZGenerator_h +#define cmCPackTarXZGenerator_h + +#include "cmCPackTGZGenerator.h" + +/** \class cmCPackTarXZGenerator + * \brief A generator for TarXZ files + */ +class cmCPackTarXZGenerator : public cmCPackTGZGenerator +{ +public: + friend class cmCPackTarXZGeneratorForward; + cmCPackTypeMacro(cmCPackTarXZGenerator, cmCPackTGZGenerator); + + /** + * Construct generator + */ + cmCPackTarXZGenerator(); + virtual ~cmCPackTarXZGenerator(); + +protected: + virtual int InitializeInternal(); + int CompressFiles(const char* outFileName, const char* toplevel, + const std::vector<std::string>& files); + virtual const char* GetOutputExtension() { return ".tar.xz"; } + int XZFile(const char* filename); + int RenameFile(const char* oldname, const char* newname); +}; + +#endif --- cmake-2.6.3-RC-8/Tests/SimpleInstall/CMakeLists.txt.xz~ 2009-01-22 00:46:52.000000000 +0100 +++ cmake-2.6.3-RC-8/Tests/SimpleInstall/CMakeLists.txt 2009-01-22 00:47:40.000000000 +0100 @@ -351,6 +351,11 @@ IF(UNIX AND NOT APPLE) IF(found_bz2) SET(CPACK_GENERATOR "${CPACK_GENERATOR};TBZ2") ENDIF(found_bz2) + FIND_PROGRAM(found_xz + NAMES xz) + IF(found_xz) + SET(CPACK_GENERATOR "${CPACK_GENERATOR};XZ") + ENDIF(found_xz) ENDIF(UNIX AND NOT APPLE) SET(CPACK_PACKAGE_EXECUTABLES "SimpleInstall" "Simple Install") --- cmake-2.6.3-RC-8/Tests/SimpleInstallS2/CMakeLists.txt.xz~ 2009-01-22 00:47:59.000000000 +0100 +++ cmake-2.6.3-RC-8/Tests/SimpleInstallS2/CMakeLists.txt 2009-01-22 00:48:20.000000000 +0100 @@ -351,6 +351,11 @@ IF(UNIX AND NOT APPLE) IF(found_bz2) SET(CPACK_GENERATOR "${CPACK_GENERATOR};TBZ2") ENDIF(found_bz2) + FIND_PROGRAM(found_xz + NAMES xz) + IF(found_xz) + SET(CPACK_GENERATOR "${CPACK_GENERATOR};XZ") + ENDIF(found_xz) ENDIF(UNIX AND NOT APPLE) SET(CPACK_PACKAGE_EXECUTABLES "SimpleInstall" "Simple Install") --- cmake-2.6.3-RC-8/Utilities/Release/release_cmake.cmake.xz~ 2009-01-22 00:44:06.000000000 +0100 +++ cmake-2.6.3-RC-8/Utilities/Release/release_cmake.cmake 2009-01-22 00:45:01.000000000 +0100 @@ -103,6 +103,13 @@ foreach(gen ${generators}) set(SUFFIXES ${SUFFIXES} "*.tar.bz2") set(extra_files setup.hint) endif("${gen}" MATCHES "Cygwin") + if("${gen}" STREQUAL "TXZ") + set(SUFFIXES ${SUFFIXES} "*.tar.xz") + endif("${gen}" STREQUAL "TXZ") + if("${gen}" MATCHES "Cygwin") + set(SUFFIXES ${SUFFIXES} "*.tar.xz") + set(extra_files setup.hint) + endif("${gen}" MATCHES "Cygwin") if("${gen}" STREQUAL "TZ") set(SUFFIXES ${SUFFIXES} "*.tar.Z") endif("${gen}" STREQUAL "TZ")