added 3 changesets to branch 'refs/remotes/weinhold-github/new-hpkg-format' old head: d1f1dd4262029d3e4e699c3a4e7e0f7a94d0b359 new head: 4d54b5c51dd50ae2e135a11652122aa942808a10 overview: https://github.com/weinhold/HaikuPM/compare/d1f1dd4...4d54b5c ---------------------------------------------------------------------------- ae85e59: ZlibCompressor: Allow setting the compression level 914c310: Allow specifying the compression level for package creation * Introduce BPackageWriterParameters which comprises all parameters for package creation, currently flags and compression level. Such an object can be passed to BPackageWriter::Init() and is passed on to PackageWriterImpl and WriterImplBase. * PackageFileHeapWriter: Add compressionLevel property and pass the value on to ZlibCompressor. * package add/create: Add options -0 ... -9 to specify the compression level to be used. 4d54b5c: Add HAIKU_PACKAGE_COMPRESSION_LEVEL build variable It allows to control the compression level used for package creation and update. The default (9) is *very* slow, so developers may want to use a smaller level during the regular development process to keep turn-around times low. [ Ingo Weinhold <ingo_weinhold@xxxxxx> ] ---------------------------------------------------------------------------- 18 files changed, 196 insertions(+), 39 deletions(-) build/jam/PackageRules | 6 +++ build/jam/UserBuildConfig.ReadMe | 12 +++++ build/scripts/build_haiku_package | 7 ++- headers/os/package/hpkg/HPKGDefs.h | 7 +++ headers/os/package/hpkg/PackageWriter.h | 21 +++++++- .../private/package/hpkg/PackageFileHeapWriter.h | 4 +- headers/private/package/hpkg/PackageWriterImpl.h | 7 ++- headers/private/package/hpkg/WriterImplBase.h | 8 +-- headers/private/package/hpkg/ZlibCompressor.h | 5 +- src/bin/package/command_add.cpp | 26 +++++++-- src/bin/package/command_create.cpp | 26 +++++++-- src/bin/package/package.cpp | 6 +++ src/kits/package/hpkg/PackageFileHeapWriter.cpp | 10 ++-- src/kits/package/hpkg/PackageWriter.cpp | 55 +++++++++++++++++++- src/kits/package/hpkg/PackageWriterImpl.cpp | 10 ++-- src/kits/package/hpkg/RepositoryWriterImpl.cpp | 2 +- src/kits/package/hpkg/WriterImplBase.cpp | 14 ++--- src/kits/package/hpkg/ZlibCompressor.cpp | 9 ++-- ############################################################################ Commit: ae85e594e1d5a7e13914b6ff80df186cc39d222e Author: Ingo Weinhold <ingo_weinhold@xxxxxx> Date: Sat May 18 23:00:36 2013 UTC ZlibCompressor: Allow setting the compression level ---------------------------------------------------------------------------- diff --git a/headers/private/package/hpkg/ZlibCompressor.h b/headers/private/package/hpkg/ZlibCompressor.h index d29abdd..4f6dd14 100644 --- a/headers/private/package/hpkg/ZlibCompressor.h +++ b/headers/private/package/hpkg/ZlibCompressor.h @@ -27,14 +27,15 @@ public: ZlibCompressor(BDataOutput* output); ~ZlibCompressor(); - status_t Init(); + status_t Init(int compressionLevel = Z_BEST_COMPRESSION); status_t CompressNext(const void* input, size_t inputSize); status_t Finish(); static status_t CompressSingleBuffer(const void* input, size_t inputSize, void* output, - size_t outputSize, size_t& _compressedSize); + size_t outputSize, size_t& _compressedSize, + int compressionLevel = Z_BEST_COMPRESSION); private: z_stream fStream; diff --git a/src/kits/package/hpkg/ZlibCompressor.cpp b/src/kits/package/hpkg/ZlibCompressor.cpp index 17801b4..ed4219d 100644 --- a/src/kits/package/hpkg/ZlibCompressor.cpp +++ b/src/kits/package/hpkg/ZlibCompressor.cpp @@ -38,7 +38,7 @@ ZlibCompressor::~ZlibCompressor() status_t -ZlibCompressor::Init() +ZlibCompressor::Init(int compressionLevel) { // initialize the stream fStream.next_in = NULL; @@ -56,7 +56,7 @@ ZlibCompressor::Init() fStream.adler = 0; fStream.reserved = 0; - int zlibError = deflateInit(&fStream, Z_BEST_COMPRESSION); + int zlibError = deflateInit(&fStream, compressionLevel); if (zlibError != Z_OK) return TranslateZlibError(zlibError); @@ -128,7 +128,8 @@ ZlibCompressor::Finish() /*static*/ status_t ZlibCompressor::CompressSingleBuffer(const void* input, size_t inputSize, - void* output, size_t outputSize, size_t& _compressedSize) + void* output, size_t outputSize, size_t& _compressedSize, + int compressionLevel) { if (inputSize == 0 || outputSize == 0) return B_BAD_VALUE; @@ -151,7 +152,7 @@ ZlibCompressor::CompressSingleBuffer(const void* input, size_t inputSize, 0 // reserved }; - int zlibError = deflateInit(&zStream, Z_BEST_COMPRESSION); + int zlibError = deflateInit(&zStream, compressionLevel); if (zlibError != Z_OK) return TranslateZlibError(zlibError); ############################################################################ Commit: 914c310717a2e36b194d8b2c95aa380c50bbd20c Author: Ingo Weinhold <ingo_weinhold@xxxxxx> Date: Sat May 18 23:07:08 2013 UTC Allow specifying the compression level for package creation * Introduce BPackageWriterParameters which comprises all parameters for package creation, currently flags and compression level. Such an object can be passed to BPackageWriter::Init() and is passed on to PackageWriterImpl and WriterImplBase. * PackageFileHeapWriter: Add compressionLevel property and pass the value on to ZlibCompressor. * package add/create: Add options -0 ... -9 to specify the compression level to be used. ---------------------------------------------------------------------------- diff --git a/headers/os/package/hpkg/HPKGDefs.h b/headers/os/package/hpkg/HPKGDefs.h index 7cd931b..b11a788 100644 --- a/headers/os/package/hpkg/HPKGDefs.h +++ b/headers/os/package/hpkg/HPKGDefs.h @@ -166,6 +166,13 @@ enum { }; +enum { + B_HPKG_COMPRESSION_LEVEL_NONE = 0, + B_HPKG_COMPRESSION_LEVEL_FASTEST = 1, + B_HPKG_COMPRESSION_LEVEL_BEST = 9 +}; + + } // namespace BHPKG } // namespace BPackageKit diff --git a/headers/os/package/hpkg/PackageWriter.h b/headers/os/package/hpkg/PackageWriter.h index e3eb30d..99c924b 100644 --- a/headers/os/package/hpkg/PackageWriter.h +++ b/headers/os/package/hpkg/PackageWriter.h @@ -41,13 +41,32 @@ public: }; +class BPackageWriterParameters { +public: + BPackageWriterParameters(); + ~BPackageWriterParameters(); + + uint32 Flags() const; + void SetFlags(uint32 flags); + + int32 CompressionLevel() const; + void SetCompressionLevel(int32 compressionLevel); + +private: + uint32 fFlags; + int32 fCompressionLevel; +}; + + class BPackageWriter { public: BPackageWriter( BPackageWriterListener* listener); ~BPackageWriter(); - status_t Init(const char* fileName, uint32 flags = 0); + status_t Init(const char* fileName, + const BPackageWriterParameters* parameters + = NULL); status_t SetInstallPath(const char* installPath); void SetCheckLicenses(bool checkLicenses); status_t AddEntry(const char* fileName, int fd = -1); diff --git a/headers/private/package/hpkg/PackageFileHeapWriter.h b/headers/private/package/hpkg/PackageFileHeapWriter.h index 3b4d24e..d62f82e 100644 --- a/headers/private/package/hpkg/PackageFileHeapWriter.h +++ b/headers/private/package/hpkg/PackageFileHeapWriter.h @@ -35,7 +35,8 @@ class PackageFileHeapWriter : public PackageFileHeapAccessorBase, private AbstractDataWriter { public: PackageFileHeapWriter(BErrorOutput* errorOutput, - int fd, off_t heapOffset); + int fd, off_t heapOffset, + int32 compressionLevel); ~PackageFileHeapWriter(); void Init(); @@ -86,6 +87,7 @@ private: void* fCompressedDataBuffer; size_t fPendingDataSize; Array<uint64> fOffsets; + int32 fCompressionLevel; }; diff --git a/headers/private/package/hpkg/PackageWriterImpl.h b/headers/private/package/hpkg/PackageWriterImpl.h index 306f5cc..c9499c8 100644 --- a/headers/private/package/hpkg/PackageWriterImpl.h +++ b/headers/private/package/hpkg/PackageWriterImpl.h @@ -29,6 +29,7 @@ namespace BHPKG { class BDataReader; class BErrorOutput; +class BPackageWriterParameters; namespace BPrivate { @@ -46,7 +47,8 @@ public: BPackageWriterListener* listener); ~PackageWriterImpl(); - status_t Init(const char* fileName, uint32 flags); + status_t Init(const char* fileName, + const BPackageWriterParameters& parameters); status_t SetInstallPath(const char* installPath); void SetCheckLicenses(bool checkLicenses); status_t AddEntry(const char* fileName, int fd = -1); @@ -62,7 +64,8 @@ private: typedef DoublyLinkedList<Entry> EntryList; private: - status_t _Init(const char* fileName, uint32 flags); + status_t _Init(const char* fileName, + const BPackageWriterParameters& parameters); status_t _Finish(); status_t _RegisterEntry(const char* fileName, int fd); diff --git a/headers/private/package/hpkg/WriterImplBase.h b/headers/private/package/hpkg/WriterImplBase.h index 0965bcf..c45d850 100644 --- a/headers/private/package/hpkg/WriterImplBase.h +++ b/headers/private/package/hpkg/WriterImplBase.h @@ -12,6 +12,7 @@ #include <package/hpkg/DataOutput.h> #include <package/hpkg/DataWriters.h> +#include <package/hpkg/PackageWriter.h> #include <package/hpkg/Strings.h> #include <package/hpkg/ZlibCompressor.h> @@ -99,7 +100,8 @@ protected: typedef DoublyLinkedList<PackageAttribute> PackageAttributeList; protected: - status_t Init(const char* fileName, uint32 flags); + status_t Init(const char* fileName, + const BPackageWriterParameters& parameters); void RegisterPackageInfo( PackageAttributeList& attributeList, @@ -168,7 +170,7 @@ private: const char* fFileType; BErrorOutput* fErrorOutput; const char* fFileName; - uint32 fFlags; + BPackageWriterParameters fParameters; int fFD; bool fFinished; @@ -211,7 +213,7 @@ WriterImplBase::FD() const inline uint32 WriterImplBase::Flags() const { - return fFlags; + return fParameters.Flags(); } diff --git a/src/bin/package/command_add.cpp b/src/bin/package/command_add.cpp index 601624c..4759244 100644 --- a/src/bin/package/command_add.cpp +++ b/src/bin/package/command_add.cpp @@ -35,6 +35,7 @@ command_add(int argc, const char* const* argv) bool quiet = false; bool verbose = false; bool force = false; + int32 compressionLevel = BPackageKit::BHPKG::B_HPKG_COMPRESSION_LEVEL_BEST; while (true) { static struct option sLongOptions[] = { @@ -45,12 +46,25 @@ command_add(int argc, const char* const* argv) }; opterr = 0; // don't print errors - int c = getopt_long(argc, (char**)argv, "+C:fhi:qv", sLongOptions, - NULL); + int c = getopt_long(argc, (char**)argv, "+0123456789C:fhi:qv", + sLongOptions, NULL); if (c == -1) break; switch (c) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + compressionLevel = c - '0'; + break; + case 'C': changeToDirectory = optarg; break; @@ -96,10 +110,14 @@ command_add(int argc, const char* const* argv) int entriesToAddCount = argc - optind; // create package + BPackageWriterParameters writerParameters; + writerParameters.SetFlags( + B_HPKG_WRITER_UPDATE_PACKAGE | (force ? B_HPKG_WRITER_FORCE_ADD : 0)); + writerParameters.SetCompressionLevel(compressionLevel); + PackageWriterListener listener(verbose, quiet); BPackageWriter packageWriter(&listener); - status_t result = packageWriter.Init(packageFileName, - B_HPKG_WRITER_UPDATE_PACKAGE | (force ? B_HPKG_WRITER_FORCE_ADD : 0)); + status_t result = packageWriter.Init(packageFileName, &writerParameters); if (result != B_OK) return 1; diff --git a/src/bin/package/command_create.cpp b/src/bin/package/command_create.cpp index 2e9d027..b3777dd 100644 --- a/src/bin/package/command_create.cpp +++ b/src/bin/package/command_create.cpp @@ -24,8 +24,9 @@ #include "PackageWritingUtils.h" -using BPackageKit::BHPKG::BPackageWriterListener; using BPackageKit::BHPKG::BPackageWriter; +using BPackageKit::BHPKG::BPackageWriterListener; +using BPackageKit::BHPKG::BPackageWriterParameters; int @@ -37,6 +38,7 @@ command_create(int argc, const char* const* argv) bool isBuildPackage = false; bool quiet = false; bool verbose = false; + int32 compressionLevel = BPackageKit::BHPKG::B_HPKG_COMPRESSION_LEVEL_BEST; while (true) { static struct option sLongOptions[] = { @@ -47,12 +49,25 @@ command_create(int argc, const char* const* argv) }; opterr = 0; // don't print errors - int c = getopt_long(argc, (char**)argv, "+bC:hi:I:qv", sLongOptions, - NULL); + int c = getopt_long(argc, (char**)argv, "+b0123456789C:hi:I:qv", + sLongOptions, NULL); if (c == -1) break; switch (c) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + compressionLevel = c - '0'; + break; + case 'b': isBuildPackage = true; break; @@ -101,9 +116,12 @@ command_create(int argc, const char* const* argv) } // create package + BPackageWriterParameters writerParameters; + writerParameters.SetCompressionLevel(compressionLevel); + PackageWriterListener listener(verbose, quiet); BPackageWriter packageWriter(&listener); - status_t result = packageWriter.Init(packageFileName); + status_t result = packageWriter.Init(packageFileName, &writerParameters); if (result != B_OK) return 1; diff --git a/src/bin/package/package.cpp b/src/bin/package/package.cpp index d7bbe3a..240517b 100644 --- a/src/bin/package/package.cpp +++ b/src/bin/package/package.cpp @@ -26,6 +26,9 @@ static const char* kUsage = " add [ <options> ] <package> <entries>...\n" " Adds the specified entries <entries> to package file <package>.\n" "\n" + " -0 ... -9 - Use compression level 0 ... 9. 0 means no, 9 best " + "compression.\n" + " Defaults to 9.\n" " -C <dir> - Change to directory <dir> before adding entries.\n" " -f - Force adding, replacing already existing entries. " "Without\n" @@ -41,6 +44,9 @@ static const char* kUsage = " create [ <options> ] <package>\n" " Creates package file <package> from contents of current directory.\n" "\n" + " -0 ... -9 - Use compression level 0 ... 9. 0 means no, 9 best " + "compression.\n" + " Defaults to 9.\n" " -b - Create an empty build package. Only the .PackageInfo " "will\n" " be added.\n" diff --git a/src/kits/package/hpkg/PackageFileHeapWriter.cpp b/src/kits/package/hpkg/PackageFileHeapWriter.cpp index d7fc523..1ca2fe7 100644 --- a/src/kits/package/hpkg/PackageFileHeapWriter.cpp +++ b/src/kits/package/hpkg/PackageFileHeapWriter.cpp @@ -210,13 +210,14 @@ private: PackageFileHeapWriter::PackageFileHeapWriter(BErrorOutput* errorOutput, int fd, - off_t heapOffset) + off_t heapOffset, int32 compressionLevel) : PackageFileHeapAccessorBase(errorOutput, fd, heapOffset), fPendingDataBuffer(NULL), fCompressedDataBuffer(NULL), fPendingDataSize(0), - fOffsets() + fOffsets(), + fCompressionLevel(compressionLevel) { } @@ -566,9 +567,12 @@ PackageFileHeapWriter::_WriteChunk(const void* data, size_t size, status_t PackageFileHeapWriter::_WriteDataCompressed(const void* data, size_t size) { + if (fCompressionLevel == B_HPKG_COMPRESSION_LEVEL_NONE) + return B_BUFFER_OVERFLOW; + size_t compressedSize; status_t error = ZlibCompressor::CompressSingleBuffer(data, size, - fCompressedDataBuffer, size, compressedSize); + fCompressedDataBuffer, size, compressedSize, fCompressionLevel); if (error != B_OK) return error; diff --git a/src/kits/package/hpkg/PackageWriter.cpp b/src/kits/package/hpkg/PackageWriter.cpp index 3fcbec8..2a5582e 100644 --- a/src/kits/package/hpkg/PackageWriter.cpp +++ b/src/kits/package/hpkg/PackageWriter.cpp @@ -16,6 +16,53 @@ namespace BPackageKit { namespace BHPKG { +// #pragma mark - BPackageWriterParameters + + +BPackageWriterParameters::BPackageWriterParameters() + : + fFlags(0), + fCompressionLevel(B_HPKG_COMPRESSION_LEVEL_BEST) +{ +} + + +BPackageWriterParameters::~BPackageWriterParameters() +{ +} + + +uint32 +BPackageWriterParameters::Flags() const +{ + return fFlags; +} + + +void +BPackageWriterParameters::SetFlags(uint32 flags) +{ + fFlags = flags; +} + + +int32 +BPackageWriterParameters::CompressionLevel() const +{ + return fCompressionLevel; +} + + +void +BPackageWriterParameters::SetCompressionLevel(int32 compressionLevel) +{ + fCompressionLevel = compressionLevel; +} + + +// #pragma mark - BPackageWriter + + BPackageWriter::BPackageWriter(BPackageWriterListener* listener) : fImpl(new (std::nothrow) PackageWriterImpl(listener)) @@ -30,12 +77,16 @@ BPackageWriter::~BPackageWriter() status_t -BPackageWriter::Init(const char* fileName, uint32 flags) +BPackageWriter::Init(const char* fileName, + const BPackageWriterParameters* parameters) { if (fImpl == NULL) return B_NO_MEMORY; - return fImpl->Init(fileName, flags); + BPackageWriterParameters defaultParameters; + + return fImpl->Init(fileName, + parameters != NULL ? *parameters : defaultParameters); } diff --git a/src/kits/package/hpkg/PackageWriterImpl.cpp b/src/kits/package/hpkg/PackageWriterImpl.cpp index fc407ea..11813db 100644 --- a/src/kits/package/hpkg/PackageWriterImpl.cpp +++ b/src/kits/package/hpkg/PackageWriterImpl.cpp @@ -463,10 +463,11 @@ PackageWriterImpl::~PackageWriterImpl() status_t -PackageWriterImpl::Init(const char* fileName, uint32 flags) +PackageWriterImpl::Init(const char* fileName, + const BPackageWriterParameters& parameters) { try { - return _Init(fileName, flags); + return _Init(fileName, parameters); } catch (status_t error) { return error; } catch (std::bad_alloc) { @@ -602,9 +603,10 @@ PackageWriterImpl::Finish() status_t -PackageWriterImpl::_Init(const char* fileName, uint32 flags) +PackageWriterImpl::_Init(const char* fileName, + const BPackageWriterParameters& parameters) { - status_t result = inherited::Init(fileName, flags); + status_t result = inherited::Init(fileName, parameters); if (result != B_OK) return result; diff --git a/src/kits/package/hpkg/RepositoryWriterImpl.cpp b/src/kits/package/hpkg/RepositoryWriterImpl.cpp index c8ceb33..ec9cf99 100644 --- a/src/kits/package/hpkg/RepositoryWriterImpl.cpp +++ b/src/kits/package/hpkg/RepositoryWriterImpl.cpp @@ -250,7 +250,7 @@ RepositoryWriterImpl::Finish() status_t RepositoryWriterImpl::_Init(const char* fileName) { - return inherited::Init(fileName, 0); + return inherited::Init(fileName, BPackageWriterParameters()); } diff --git a/src/kits/package/hpkg/WriterImplBase.cpp b/src/kits/package/hpkg/WriterImplBase.cpp index 88d9d9b..0e3e6aa 100644 --- a/src/kits/package/hpkg/WriterImplBase.cpp +++ b/src/kits/package/hpkg/WriterImplBase.cpp @@ -220,7 +220,7 @@ WriterImplBase::WriterImplBase(const char* fileType, BErrorOutput* errorOutput) fFileType(fileType), fErrorOutput(errorOutput), fFileName(NULL), - fFlags(0), + fParameters(), fFD(-1), fFinished(false), fDataWriter(NULL) @@ -236,21 +236,24 @@ WriterImplBase::~WriterImplBase() close(fFD); if (!fFinished && fFileName != NULL - && (fFlags & B_HPKG_WRITER_UPDATE_PACKAGE) == 0) { + && (Flags() & B_HPKG_WRITER_UPDATE_PACKAGE) == 0) { unlink(fFileName); } } status_t -WriterImplBase::Init(const char* fileName, uint32 flags) +WriterImplBase::Init(const char* fileName, + const BPackageWriterParameters& parameters) { + fParameters = parameters; + if (fPackageStringCache.Init() != B_OK) throw std::bad_alloc(); // open file (don't truncate in update mode) int openMode = O_RDWR; - if ((flags & B_HPKG_WRITER_UPDATE_PACKAGE) == 0) + if ((Flags() & B_HPKG_WRITER_UPDATE_PACKAGE) == 0) openMode |= O_CREAT | O_TRUNC; fFD = open(fileName, openMode, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); @@ -261,11 +264,10 @@ WriterImplBase::Init(const char* fileName, uint32 flags) } fFileName = fileName; - fFlags = flags; // create heap writer fHeapWriter = new PackageFileHeapWriter(fErrorOutput, FD(), - sizeof(hpkg_header)); + sizeof(hpkg_header), fParameters.CompressionLevel()); fHeapWriter->Init(); fDataWriter = fHeapWriter->DataWriter(); ############################################################################ Commit: 4d54b5c51dd50ae2e135a11652122aa942808a10 Author: Ingo Weinhold <ingo_weinhold@xxxxxx> Date: Sat May 18 23:48:53 2013 UTC Add HAIKU_PACKAGE_COMPRESSION_LEVEL build variable It allows to control the compression level used for package creation and update. The default (9) is *very* slow, so developers may want to use a smaller level during the regular development process to keep turn-around times low. ---------------------------------------------------------------------------- diff --git a/build/jam/PackageRules b/build/jam/PackageRules index 9502174..602cef0 100644 --- a/build/jam/PackageRules +++ b/build/jam/PackageRules @@ -310,6 +310,8 @@ rule BuildHaikuPackage package : packageInfo AddVariableToScript $(script) : tmpDir : $(tempDir) ; AddVariableToScript $(script) : addBuildCompatibilityLibDir : $(HOST_ADD_BUILD_COMPATIBILITY_LIB_DIR) ; + AddVariableToScript $(script) : compressionLevel + : $(HAIKU_PACKAGE_COMPRESSION_LEVEL) ; AddVariableToScript $(script) : updateOnly : [ on $(package) return $(HAIKU_CONTAINER_UPDATE_ONLY) ] ; AddTargetVariableToScript $(script) : <build>addattr ; @@ -434,3 +436,7 @@ rule AddLibrariesToPackage directory : libs AddLibrariesToContainer $(HAIKU_CURRENTLY_BUILT_HAIKU_PACKAGE) : $(directory) : $(libs) ; } + + +# default value for the package compression level +HAIKU_PACKAGE_COMPRESSION_LEVEL ?= 9 ; diff --git a/build/jam/UserBuildConfig.ReadMe b/build/jam/UserBuildConfig.ReadMe index 53ff677..2252fd9 100644 --- a/build/jam/UserBuildConfig.ReadMe +++ b/build/jam/UserBuildConfig.ReadMe @@ -79,6 +79,18 @@ HAIKU_INSTALL_DIR = /Haiku ; # freshly be initialized with BFS. Useful when installing Haiku on a partition. HAIKU_DONT_CLEAR_IMAGE = 1 ; +# Set the compression level for the creation and update of Haiku packages to 1. +# Values from 0 to 9 are supported. 0 means no compression, 1 fastest, ..., and +# 9 best. The default is 9 which should be used for official builds (release or +# nightly) to achieve the smallest possible package files at the cost of long +# package building times. For developers who frequently rebuild/update packages +# level 1 is a good compromise. Depending on the package data it's about an +# order of magnitude faster while still achieving acceptable compression ratios. +# Using level 0 will make package creation mostly I/O bound. It can be used, if +# package size is not a concern. Depending on the package data, files may be +# several times larger than even with level 1. +HAIKU_PACKAGE_COMPRESSION_LEVEL = 1 ; + # Affects the haiku-image, haiku-vmware-image, and install-haiku targets. Only # targets on which the HAIKU_INCLUDE_IN_IMAGE variable has been set will be diff --git a/build/scripts/build_haiku_package b/build/scripts/build_haiku_package index b2e091f..736d94c 100755 --- a/build/scripts/build_haiku_package +++ b/build/scripts/build_haiku_package @@ -7,6 +7,7 @@ set -o errexit # outputDir # sourceDir # tmpDir +# compressionLevel # updateOnly # # addattr @@ -69,7 +70,9 @@ $mimeset --mimedb "$mimeDB" "$contentsDir" # create the package if [ ! $updateOnly ]; then rm -f "$packagePath" - $package create -q -i "$packageInfoPath" -C "$contentsDir" "$packagePath" + $package create -q "-$compressionLevel" -i "$packageInfoPath" \ + -C "$contentsDir" "$packagePath" else - $package add -q -f -i "$packageInfoPath" -C "$contentsDir" "$packagePath" . + $package add -q -f "-$compressionLevel" -i "$packageInfoPath" \ + -C "$contentsDir" "$packagePath" . fi