diff options
author | Alexandru Croitor <alexandru.croitor@qt.io> | 2020-03-09 19:16:28 +0100 |
---|---|---|
committer | Alexandru Croitor <alexandru.croitor@qt.io> | 2020-03-12 11:41:26 +0100 |
commit | 14546d1816a877690cda71f02c275303ef42afa8 (patch) | |
tree | 0c5ac465688285bb789aa3034cd6b0000b1a0ab7 /src/tools | |
parent | 39ad96033ced146567d68929a50131a6ab410f2d (diff) |
rcc: Teach rcc the --no-zstd option
It is needed when cross-building Qt using CMake, where the zstd
feature might have different values between the host and target,
in which case the build system tells rcc not to use zstd when
the feature is disabled.
Amends d20c9805763ab3dc504ebf2cefd33499d89ef22c
Change-Id: I9dc55b59b1be5272b79aa5f1e2daf2b516a157d6
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'src/tools')
-rw-r--r-- | src/tools/rcc/main.cpp | 5 | ||||
-rw-r--r-- | src/tools/rcc/rcc.cpp | 21 | ||||
-rw-r--r-- | src/tools/rcc/rcc.h | 4 |
3 files changed, 23 insertions, 7 deletions
diff --git a/src/tools/rcc/main.cpp b/src/tools/rcc/main.cpp index ac87e48e39..0c3290b34b 100644 --- a/src/tools/rcc/main.cpp +++ b/src/tools/rcc/main.cpp @@ -180,6 +180,9 @@ int runRcc(int argc, char *argv[]) QCommandLineOption nocompressOption(QStringLiteral("no-compress"), QStringLiteral("Disable all compression. Same as --compress-algo=none.")); parser.addOption(nocompressOption); + QCommandLineOption noZstdOption(QStringLiteral("no-zstd"), QStringLiteral("Disable usage of zstd compression.")); + parser.addOption(noZstdOption); + QCommandLineOption thresholdOption(QStringLiteral("threshold"), QStringLiteral("Threshold to consider compressing files."), QStringLiteral("level")); parser.addOption(thresholdOption); @@ -252,6 +255,8 @@ int runRcc(int argc, char *argv[]) errorMsg = QLatin1String("Zstandard compression requires format version 3 or higher"); if (parser.isSet(nocompressOption)) library.setCompressionAlgorithm(RCCResourceLibrary::CompressionAlgorithm::None); + if (parser.isSet(noZstdOption)) + library.setNoZstd(true); if (parser.isSet(compressOption) && errorMsg.isEmpty()) { int level = library.parseCompressionLevel(library.compressionAlgorithm(), parser.value(compressOption), &errorMsg); library.setCompressLevel(level); diff --git a/src/tools/rcc/rcc.cpp b/src/tools/rcc/rcc.cpp index 5bd1fba272..808208573a 100644 --- a/src/tools/rcc/rcc.cpp +++ b/src/tools/rcc/rcc.cpp @@ -113,7 +113,8 @@ public: uint flags = NoFlags, RCCResourceLibrary::CompressionAlgorithm compressAlgo = CONSTANT_COMPRESSALGO_DEFAULT, int compressLevel = CONSTANT_COMPRESSLEVEL_DEFAULT, - int compressThreshold = CONSTANT_COMPRESSTHRESHOLD_DEFAULT); + int compressThreshold = CONSTANT_COMPRESSTHRESHOLD_DEFAULT, + bool noZstd = false); ~RCCFileInfo(); QString resourceName() const; @@ -137,11 +138,13 @@ public: qint64 m_nameOffset; qint64 m_dataOffset; qint64 m_childOffset; + bool m_noZstd; }; RCCFileInfo::RCCFileInfo(const QString &name, const QFileInfo &fileInfo, QLocale::Language language, QLocale::Country country, uint flags, - RCCResourceLibrary::CompressionAlgorithm compressAlgo, int compressLevel, int compressThreshold) + RCCResourceLibrary::CompressionAlgorithm compressAlgo, int compressLevel, int compressThreshold, + bool noZstd) { m_name = name; m_fileInfo = fileInfo; @@ -155,6 +158,7 @@ RCCFileInfo::RCCFileInfo(const QString &name, const QFileInfo &fileInfo, m_compressAlgo = compressAlgo; m_compressLevel = compressLevel; m_compressThreshold = compressThreshold; + m_noZstd = noZstd; } RCCFileInfo::~RCCFileInfo() @@ -267,11 +271,11 @@ qint64 RCCFileInfo::writeDataBlob(RCCResourceLibrary &lib, qint64 offset, // Check if compression is useful for this file if (data.size() != 0) { #if QT_CONFIG(zstd) - if (m_compressAlgo == RCCResourceLibrary::CompressionAlgorithm::Best) { + if (m_compressAlgo == RCCResourceLibrary::CompressionAlgorithm::Best && !m_noZstd) { m_compressAlgo = RCCResourceLibrary::CompressionAlgorithm::Zstd; m_compressLevel = 19; // not ZSTD_maxCLevel(), as 20+ are experimental } - if (m_compressAlgo == RCCResourceLibrary::CompressionAlgorithm::Zstd) { + if (m_compressAlgo == RCCResourceLibrary::CompressionAlgorithm::Zstd && !m_noZstd) { if (lib.m_zstdCCtx == nullptr) lib.m_zstdCCtx = ZSTD_createCCtx(); qsizetype size = data.size(); @@ -471,7 +475,8 @@ RCCResourceLibrary::RCCResourceLibrary(quint8 formatVersion) m_useNameSpace(CONSTANT_USENAMESPACE), m_errorDevice(0), m_outDevice(0), - m_formatVersion(formatVersion) + m_formatVersion(formatVersion), + m_noZstd(false) { m_out.reserve(30 * 1000 * 1000); #if QT_CONFIG(zstd) @@ -651,7 +656,8 @@ bool RCCResourceLibrary::interpretResourceFile(QIODevice *inputDevice, child.isDir() ? RCCFileInfo::Directory : RCCFileInfo::NoFlags, compressAlgo, compressLevel, - compressThreshold) + compressThreshold, + m_noZstd) ); if (!arc) m_failedResources.push_back(child.fileName()); @@ -667,7 +673,8 @@ bool RCCResourceLibrary::interpretResourceFile(QIODevice *inputDevice, RCCFileInfo::NoFlags, compressAlgo, compressLevel, - compressThreshold) + compressThreshold, + m_noZstd) ); if (!arc) m_failedResources.push_back(absFileName); diff --git a/src/tools/rcc/rcc.h b/src/tools/rcc/rcc.h index 190c37a1f6..ac5ea15bb1 100644 --- a/src/tools/rcc/rcc.h +++ b/src/tools/rcc/rcc.h @@ -109,6 +109,9 @@ public: int formatVersion() const { return m_formatVersion; } + void setNoZstd(bool v) { m_noZstd = v; } + bool noZstd() const { return m_noZstd; } + private: struct Strings { Strings(); @@ -170,6 +173,7 @@ private: QIODevice *m_outDevice; QByteArray m_out; quint8 m_formatVersion; + bool m_noZstd; }; QT_END_NAMESPACE |