Force rcc to use resource format version 1. (#1784)

Qt 5.8.0 introduced format version 2 for resources embedded into executable,
and now rcc uses this format by default to generate them.

Unfortunately, v2 format includes timestamps for embedded resource files.
Some of resource files (translations) are generated automatically
and have different timestamps for every build.

This means that dash-qt executable is slightly different for every build
because resource data contain different timestamps.

As a result, it makes reproducible build extremely difficult.

Fortunately, Qt 5.9.0 introduced --format-version option for rcc.
This change adds configure check for whether rcc accepts this option
and uses it to force rcc to generate version 1 format data.

Signed-off-by: Oleg Girko <ol@infoserver.lv>
This commit is contained in:
Oleg Girko 2017-12-15 15:21:44 +00:00 committed by UdjinM6
parent 86e6f0dd23
commit 837c4fc5de
2 changed files with 17 additions and 2 deletions

View File

@ -203,6 +203,21 @@ AC_DEFUN([BITCOIN_QT_CONFIGURE],[
BITCOIN_QT_PATH_PROGS([LRELEASE], [lrelease-qt${bitcoin_qt_got_major_vers} lrelease${bitcoin_qt_got_major_vers} lrelease], $qt_bin_path)
BITCOIN_QT_PATH_PROGS([LUPDATE], [lupdate-qt${bitcoin_qt_got_major_vers} lupdate${bitcoin_qt_got_major_vers} lupdate],$qt_bin_path, yes)
BITCOIN_QT_CHECK([
AC_CACHE_CHECK([whether $RCC accepts --format-version option],
[ac_cv_prog_rcc_accepts_format_version],
[ac_cv_prog_rcc_accepts_format_version=no
echo '<!DOCTYPE RCC><RCC version="1.0"/>' > conftest.qrc
$RCC --format-version 1 conftest.qrc >/dev/null 2>&1 && ac_cv_prog_rcc_accepts_format_version=yes
rm -f conftest.qrc])
if test "$ac_cv_prog_rcc_accepts_format_version" = yes; then
RCCFLAGS="--format-version 1"
else
RCCFLAGS=
fi
AC_SUBST(RCCFLAGS)
])
MOC_DEFS='-DHAVE_CONFIG_H -I$(srcdir)'
case $host in
*darwin*)

View File

@ -580,12 +580,12 @@ translate: qt/dashstrings.cpp $(QT_FORMS_UI) $(QT_FORMS_UI) $(BITCOIN_QT_CPP) qt
$(QT_QRC_LOCALE_CPP): $(QT_QRC_LOCALE) $(QT_QM)
@test -f $(RCC)
@test -f $(@D)/$(<F) || cp -f $< $(@D)
$(AM_V_GEN) QT_SELECT=$(QT_SELECT) $(RCC) -name dash_locale $(@D)/$(<F) | \
$(AM_V_GEN) QT_SELECT=$(QT_SELECT) $(RCC) $(RCCFLAGS) -name dash_locale $(@D)/$(<F) | \
$(SED) -e '/^\*\*.*Created:/d' -e '/^\*\*.*by:/d' > $@
$(QT_QRC_CPP): $(QT_QRC) $(QT_FORMS_H) $(RES_ICONS) $(RES_IMAGES) $(RES_CSS) $(RES_MOVIES) $(PROTOBUF_H)
@test -f $(RCC)
$(AM_V_GEN) QT_SELECT=$(QT_SELECT) $(RCC) -name dash $< | \
$(AM_V_GEN) QT_SELECT=$(QT_SELECT) $(RCC) $(RCCFLAGS) -name dash $< | \
$(SED) -e '/^\*\*.*Created:/d' -e '/^\*\*.*by:/d' > $@
CLEAN_QT = $(nodist_qt_libbitcoinqt_a_SOURCES) $(QT_QM) $(QT_FORMS_H) qt/*.gcda qt/*.gcno