Skip to content

Commit ea29400

Browse files
committed
Render some icons when possible
8-bit icon is required to make builds deterministic
1 parent 1782a87 commit ea29400

File tree

7 files changed

+69
-10
lines changed

7 files changed

+69
-10
lines changed

Makefile.am

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ OSX_APP=Bitcoin-Qt.app
3232
OSX_VOLNAME = $(subst $(space),-,$(PACKAGE_NAME))
3333
OSX_ZIP = $(OSX_VOLNAME).zip
3434
OSX_DEPLOY_SCRIPT=$(top_srcdir)/contrib/macdeploy/macdeployqtplus
35-
OSX_INSTALLER_ICONS=$(top_srcdir)/src/qt/res/icons/bitcoin.icns
35+
OSX_INSTALLER_ICONS=src/qt/res/rendered_icons/bitcoin.icns
3636
OSX_PLIST=$(top_builddir)/share/qt/Info.plist #not installed
3737

3838
DIST_CONTRIB = \
@@ -51,7 +51,7 @@ BIN_CHECKS=$(top_srcdir)/contrib/devtools/symbol-check.py \
5151
$(top_srcdir)/contrib/devtools/security-check.py \
5252
$(top_srcdir)/contrib/devtools/utils.py
5353

54-
WINDOWS_PACKAGING = $(top_srcdir)/src/qt/res/icons/bitcoin.ico \
54+
WINDOWS_PACKAGING = src/qt/res/rendered_icons/bitcoin.ico \
5555
$(top_srcdir)/share/pixmaps/nsis-header.bmp \
5656
$(top_srcdir)/share/pixmaps/nsis-wizard.bmp \
5757
$(top_srcdir)/doc/README_windows.txt
@@ -64,6 +64,9 @@ COVERAGE_INFO = $(COV_TOOL_WRAPPER) baseline.info \
6464
baseline_filtered.info functional_test.info functional_test_filtered.info \
6565
test_bitcoin_coverage.info test_bitcoin.info fuzz.info fuzz_filtered.info fuzz_coverage.info
6666

67+
$(OSX_INSTALLER_ICONS): FORCE
68+
$(MAKE) -C src $(patsubst src/%,%,$@)
69+
6770
dist-hook:
6871
-$(GIT) archive --format=tar HEAD -- src/clientversion.cpp | $(AMTAR) -C $(top_distdir) -xf -
6972

configure.ac

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -617,6 +617,17 @@ AC_ARG_WITH([daemon],
617617
[build_bitcoind=$withval],
618618
[build_bitcoind=yes])
619619

620+
can_render_icons=yes
621+
AC_PATH_PROGS([RSVG_CONVERT],[rsvg-convert rsvg],no)
622+
AC_PATH_PROGS([IMAGEMAGICK_CONVERT],[convert],no)
623+
AC_PATH_PROGS([PNG2ICNS],[png2icns],no)
624+
625+
if test x$RSVG_CONVERT = xno; then
626+
can_render_icons='rsvg-convert'
627+
elif test x$IMAGEMAGICK_CONVERT = xno; then
628+
can_render_icons='(ImageMagick) convert'
629+
fi
630+
620631
case $host in
621632
*mingw*)
622633
TARGET_OS=windows
@@ -672,6 +683,10 @@ case $host in
672683
AX_CHECK_COMPILE_FLAG([-Wa,-muse-unaligned-vector-move], [CORE_CXXFLAGS="$CORE_CXXFLAGS -Wa,-muse-unaligned-vector-move"], [], [$CXXFLAG_WERROR])
673684
;;
674685
*darwin*)
686+
if test x$PNG2ICNS = xno; then
687+
can_render_icons='png2icns'
688+
fi
689+
675690
TARGET_OS=darwin
676691
if test $cross_compiling != "yes"; then
677692
BUILD_OS=darwin
@@ -763,6 +778,11 @@ case $host in
763778
;;
764779
esac
765780

781+
AM_CONDITIONAL([CAN_RENDER_ICONS], [test "$can_render_icons" = "yes"])
782+
if test "$can_render_icons" != "yes"; then
783+
AC_MSG_WARN([Couldn't find ${can_render_icons}; you won't get the Knots-branded Bitcoin icon])
784+
fi
785+
766786
if test "$use_extended_functional_tests" != "no"; then
767787
AC_SUBST(EXTENDED_FUNCTIONAL_TESTS, --extended)
768788
fi

share/setup.nsi.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ Unicode true
1515
!define URL @PACKAGE_URL@
1616

1717
# MUI Symbol Definitions
18-
!define MUI_ICON "@abs_top_srcdir@/src/qt/res/icons/bitcoin.ico"
18+
!define MUI_ICON "@abs_top_srcdir@/src/qt/res/rendered_icons/bitcoin.ico"
1919
!define MUI_WELCOMEFINISHPAGE_BITMAP "@abs_top_srcdir@/share/pixmaps/nsis-wizard.bmp"
2020
!define MUI_HEADERIMAGE
2121
!define MUI_HEADERIMAGE_RIGHT

src/Makefile.qt.include

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -172,12 +172,20 @@ BITCOIN_QT_H = \
172172
QT_RES_FONTS = \
173173
qt/res/fonts/RobotoMono-Bold.ttf
174174

175-
QT_RES_ICONS = \
175+
RES_RENDERED_ICON_SRC = qt/res/src/bitcoin.svg
176+
177+
RES_RENDERED_ICONS = \
178+
qt/res/rendered_icons/bitcoin.ico \
179+
qt/res/rendered_icons/bitcoin1024.png
180+
181+
RES_ALL_RENDERED_ICONS = $(RES_RENDERED_ICONS) \
182+
$(patsubst %,qt/res/rendered_icons/bitcoin%.png,16 32 48 256 512 1024) \
183+
qt/res/rendered_icons/bitcoin.icns
184+
185+
QT_RES_ICONS = $(RES_RENDERED_ICONS) \
176186
qt/res/icons/add.png \
177187
qt/res/icons/address-book.png \
178-
qt/res/icons/bitcoin.ico \
179188
qt/res/icons/bitcoin_testnet.ico \
180-
qt/res/icons/bitcoin.png \
181189
qt/res/icons/chevron.png \
182190
qt/res/icons/clock1.png \
183191
qt/res/icons/clock2.png \
@@ -293,6 +301,8 @@ QT_RES_ANIMATION = $(wildcard $(srcdir)/qt/res/animation/spinner-*.png)
293301

294302
BITCOIN_QT_RC = qt/res/bitcoin-qt-res.rc
295303

304+
$(BITCOIN_RC): qt/res/rendered_icons/bitcoin.ico
305+
296306
BITCOIN_QT_INCLUDES = -DQT_NO_KEYWORDS -DQT_USE_QSTRINGBUILDER
297307

298308
qt_libbitcoinqt_a_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(BITCOIN_QT_INCLUDES) \
@@ -387,7 +397,7 @@ $(QT_QRC_CPP): $(QT_QRC_BUILD) $(QT_FORMS_H) $(QT_RES_FONTS) $(QT_RES_ICONS) $(Q
387397
@test -f $(RCC) || (echo "rcc $(RCC) not found, but is required for generating qrc cpp files"; exit 1)
388398
$(AM_V_GEN) QT_SELECT=$(QT_SELECT) $(RCC) -name bitcoin --format-version 1 $< > $@
389399

390-
CLEAN_QT = $(nodist_qt_libbitcoinqt_a_SOURCES) $(QT_QM) $(QT_FORMS_H) qt/*.gcda qt/*.gcno qt/temp_bitcoin_locale.qrc $(QT_QRC_BUILD)
400+
CLEAN_QT = $(nodist_qt_libbitcoinqt_a_SOURCES) $(QT_QM) $(QT_FORMS_H) qt/*.gcda qt/*.gcno qt/temp_bitcoin_locale.qrc $(QT_QRC_BUILD) $(RES_ALL_RENDERED_ICONS)
391401

392402
CLEANFILES += $(CLEAN_QT)
393403

@@ -411,3 +421,29 @@ moc_%.cpp: %.h
411421
@test -f $(LRELEASE) || (echo "lrelease $(LRELEASE) not found, but is required for generating translations"; exit 1)
412422
@$(MKDIR_P) $(@D)
413423
$(AM_V_GEN) QT_SELECT=$(QT_SELECT) $(LRELEASE) -silent $< -qm $@
424+
425+
EXTRA_DIST += $(RES_RENDERED_ICON_SRC)
426+
427+
if CAN_RENDER_ICONS
428+
429+
qt/res/rendered_icons/bitcoin%.png: qt/res/src/bitcoin.svg
430+
@$(MKDIR_P) $(@D)
431+
$(RSVG_CONVERT) -f png -d $* -p $* < $< > $@
432+
433+
# NOTE: ImageMagick will never convert transparent PNGs to 8-bit ICOs, but GIF is fine
434+
qt/res/rendered_icons/bitcoin%d8.gif: qt/res/rendered_icons/bitcoin%.png
435+
$(IMAGEMAGICK_CONVERT) $^ -colors 256 -channel A -threshold '50%' $@
436+
437+
qt/res/rendered_icons/bitcoin.icns: $(patsubst %,qt/res/rendered_icons/bitcoin%.png,256 512 1024 32 16)
438+
$(PNG2ICNS) $@ $^
439+
440+
qt/res/rendered_icons/bitcoin.ico: qt/res/rendered_icons/bitcoin32d8.gif $(patsubst %,qt/res/rendered_icons/bitcoin%.png,256 64 48 32 20 16)
441+
$(IMAGEMAGICK_CONVERT) $^ $@
442+
443+
else
444+
445+
qt/res/rendered_icons/%: qt/res/icons/%
446+
@$(MKDIR_P) $(@D)
447+
cp $< $@
448+
449+
endif

src/qt/bitcoin.qrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<!DOCTYPE RCC><RCC version="1.0">
22
<qresource prefix="/icons">
3-
<file alias="bitcoin">res/icons/bitcoin.png</file>
3+
<file alias="bitcoin">res/rendered_icons/bitcoin1024.png</file>
44
<file alias="address-book">res/icons/address-book.png</file>
55
<file alias="send">res/icons/send.png</file>
66
<file alias="connect_0">res/icons/connect0.png</file>

src/qt/res/bitcoin-qt-res.rc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
IDI_ICON1 ICON DISCARDABLE "icons/bitcoin.ico"
1+
IDI_ICON1 ICON DISCARDABLE "rendered_icons/bitcoin.ico"
22
IDI_ICON2 ICON DISCARDABLE "icons/bitcoin_testnet.ico"
33

44
#include <windows.h> // needed for VERSIONINFO

src/qt/res/src/bitcoin.svg

Lines changed: 1 addition & 1 deletion
Loading

0 commit comments

Comments
 (0)