Skip to content

Commit e8ffec6

Browse files
author
MarcoFalke
committed
Merge bitcoin#13732: Depends: Fix Qt's rcc determinism
6b5506a Fix Qt's rcc determinism for depends/gitian (Fuzzbawls) Pull request description: With the update to Qt 5.9 having been merged, Qt's `rcc` tool now embeds a file's last modified time in it's output. Since the build system generates temporary files for all locale translations (`*.qm` files) at build time, the resulting `qrc_bitcoin_locale.cpp` file was always being generated in a non-deterministic way. This is a backport of https://bugreports.qt.io/browse/QTBUG-62511, which is included in Qt versions 5.11+, that allows for an environment variable (`QT_RCC_SOURCE_DATE_OVERRIDE`) to override the behavior described above. This environment variable is in turn set in the gitian descriptors, as that is where determinism is vital for release purposes. Prior to this, the `qt_libbitcoinqt_a-qrc_bitcoin_locale.o` object file (included into `libbitcoinqt.a`) was returning a different `sha256sum` for each and every build, regardless of file contents change, thus breaking determinism in the resulting binaries. This should fix bitcoin#13731 Tree-SHA512: 174017e41f9afc3950ef54a9419de81577ec900db9aec3c78ccd3d879c6aecaaeb944fde0615b933f43e6ca9d7898a27ec071cdd0b91cb772755a3012de96725
2 parents ad51e13 + 6b5506a commit e8ffec6

File tree

5 files changed

+21
-1
lines changed

5 files changed

+21
-1
lines changed

contrib/gitian-descriptors/gitian-linux.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ script: |
4343
HOST_LDFLAGS=-static-libstdc++
4444
4545
export QT_RCC_TEST=1
46+
export QT_RCC_SOURCE_DATE_OVERRIDE=1
4647
export GZIP="-9n"
4748
export TAR_OPTIONS="--mtime="$REFERENCE_DATE\\\ $REFERENCE_TIME""
4849
export TZ="UTC"

contrib/gitian-descriptors/gitian-osx.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ script: |
4040
FAKETIME_PROGS="ar ranlib date dmg genisoimage"
4141
4242
export QT_RCC_TEST=1
43+
export QT_RCC_SOURCE_DATE_OVERRIDE=1
4344
export GZIP="-9n"
4445
export TAR_OPTIONS="--mtime="$REFERENCE_DATE\\\ $REFERENCE_TIME""
4546
export TZ="UTC"

contrib/gitian-descriptors/gitian-win.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ script: |
3636
HOST_CXXFLAGS="-O2 -g"
3737
3838
export QT_RCC_TEST=1
39+
export QT_RCC_SOURCE_DATE_OVERRIDE=1
3940
export GZIP="-9n"
4041
export TAR_OPTIONS="--mtime="$REFERENCE_DATE\\\ $REFERENCE_TIME""
4142
export TZ="UTC"

depends/packages/qt.mk

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ $(package)_dependencies=openssl zlib
88
$(package)_linux_dependencies=freetype fontconfig libxcb libX11 xproto libXext
99
$(package)_build_subdir=qtbase
1010
$(package)_qt_libs=corelib network widgets gui plugins testlib
11-
$(package)_patches=fix_qt_pkgconfig.patch mac-qmake.conf fix_configure_mac.patch fix_no_printer.patch
11+
$(package)_patches=fix_qt_pkgconfig.patch mac-qmake.conf fix_configure_mac.patch fix_no_printer.patch fix_rcc_determinism.patch
1212

1313
$(package)_qttranslations_file_name=qttranslations-$($(package)_suffix)
1414
$(package)_qttranslations_sha256_hash=9822084f8e2d2939ba39f4af4c0c2320e45d5996762a9423f833055607604ed8
@@ -94,6 +94,7 @@ $(package)_config_opts_i686_linux = -xplatform linux-g++-32
9494
$(package)_config_opts_x86_64_linux = -xplatform linux-g++-64
9595
$(package)_config_opts_mingw32 = -no-opengl -xplatform win32-g++ -device-option CROSS_COMPILE="$(host)-"
9696
$(package)_build_env = QT_RCC_TEST=1
97+
$(package)_build_env += QT_RCC_SOURCE_DATE_OVERRIDE=1
9798
endef
9899

99100
define $(package)_fetch_cmds
@@ -133,6 +134,7 @@ define $(package)_preprocess_cmds
133134
patch -p1 -i $($(package)_patch_dir)/fix_qt_pkgconfig.patch &&\
134135
patch -p1 -i $($(package)_patch_dir)/fix_configure_mac.patch &&\
135136
patch -p1 -i $($(package)_patch_dir)/fix_no_printer.patch &&\
137+
patch -p1 -i $($(package)_patch_dir)/fix_rcc_determinism.patch &&\
136138
echo "!host_build: QMAKE_CFLAGS += $($(package)_cflags) $($(package)_cppflags)" >> qtbase/mkspecs/common/gcc-base.conf && \
137139
echo "!host_build: QMAKE_CXXFLAGS += $($(package)_cxxflags) $($(package)_cppflags)" >> qtbase/mkspecs/common/gcc-base.conf && \
138140
echo "!host_build: QMAKE_LFLAGS += $($(package)_ldflags)" >> qtbase/mkspecs/common/gcc-base.conf && \
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
--- old/qtbase/src/tools/rcc/rcc.cpp
2+
+++ new/qtbase/src/tools/rcc/rcc.cpp
3+
@@ -207,7 +207,11 @@ void RCCFileInfo::writeDataInfo(RCCResourceLibrary &lib)
4+
if (lib.formatVersion() >= 2) {
5+
// last modified time stamp
6+
const QDateTime lastModified = m_fileInfo.lastModified();
7+
- lib.writeNumber8(quint64(lastModified.isValid() ? lastModified.toMSecsSinceEpoch() : 0));
8+
+ quint64 lastmod = quint64(lastModified.isValid() ? lastModified.toMSecsSinceEpoch() : 0);
9+
+ static const quint64 sourceDate = 1000 * qgetenv("QT_RCC_SOURCE_DATE_OVERRIDE").toULongLong();
10+
+ if (sourceDate != 0)
11+
+ lastmod = sourceDate;
12+
+ lib.writeNumber8(lastmod);
13+
if (text || pass1)
14+
lib.writeChar('\n');
15+
}

0 commit comments

Comments
 (0)