3 macx
:TARGET
= "Bitcoin-Qt"
5 INCLUDEPATH
+= src src
/json src
/qt
7 greaterThan(QT_MAJOR_VERSION
, 4): QT
+= widgets
8 DEFINES
+= BOOST_THREAD_USE_LIB BOOST_SPIRIT_THREADSAFE
9 CONFIG
+= no_include_pwd
12 # for boost 1.37, add -mt to the boost libraries
13 # use: qmake BOOST_LIB_SUFFIX=-mt
14 # for boost thread win32 with _win32 sufix
15 # use: BOOST_THREAD_LIB_SUFFIX=_win32-...
16 # or when linking against a specific BerkelyDB version: BDB_LIB_SUFFIX=-4.8
18 # Dependency library locations can be customized with:
19 # BOOST_INCLUDE_PATH, BOOST_LIB_PATH, BDB_INCLUDE_PATH,
20 # BDB_LIB_PATH, OPENSSL_INCLUDE_PATH and OPENSSL_LIB_PATH respectively
26 # use: qmake "RELEASE=1"
27 contains(RELEASE
, 1) {
28 # Mac: compile for maximum compatibility (10.5, 32-bit)
29 macx
:QMAKE_CXXFLAGS
+= -mmacosx
-version
-min
=10.5 -arch i386
-isysroot
/Developer
/SDKs
/MacOSX10
.5
.sdk
30 macx
:QMAKE_CFLAGS
+= -mmacosx
-version
-min
=10.5 -arch i386
-isysroot
/Developer
/SDKs
/MacOSX10
.5
.sdk
31 macx
:QMAKE_OBJECTIVE_CFLAGS
+= -mmacosx
-version
-min
=10.5 -arch i386
-isysroot
/Developer
/SDKs
/MacOSX10
.5
.sdk
34 # Linux: static link and extra security (see: https://wiki.debian.org/Hardening)
35 LIBS
+= -Wl
,-Bstatic
-Wl
,-z
,relro
-Wl
,-z
,now
40 # for extra security against potential buffer overflows: enable GCCs Stack Smashing Protection
41 QMAKE_CXXFLAGS
*= -fstack
-protector
-all
42 QMAKE_LFLAGS
*= -fstack
-protector
-all
43 # Exclude on Windows cross compile with MinGW 4.2.x, as it will result in a non-working executable!
44 # This can be enabled for Windows, when we switch to MinGW >= 4.4.x.
46 # for extra security (see: https://wiki.debian.org/Hardening): this flag is GCC compiler-specific
47 QMAKE_CXXFLAGS
*= -D_FORTIFY_SOURCE
=2
48 # for extra security on Windows: enable ASLR and DEP via GCC linker flags
49 win32
:QMAKE_LFLAGS
*= -Wl
,--dynamicbase
-Wl
,--nxcompat
50 # on Windows: enable GCC large address aware linker flag
51 win32
:QMAKE_LFLAGS
*= -Wl
,--large
-address
-aware
53 # use: qmake "USE_QRCODE=1"
54 # libqrencode (http://fukuchi.org/works/qrencode/index.en.html) must be installed for support
55 contains(USE_QRCODE
, 1) {
56 message(Building with QRCode support
)
61 # use: qmake "USE_UPNP=1" ( enabled by default; default)
62 # or: qmake "USE_UPNP=0" (disabled by default)
63 # or: qmake "USE_UPNP=-" (not supported)
64 # miniupnpc (http://miniupnp.free.fr/files/) must be installed for support
65 contains(USE_UPNP
, -) {
66 message(Building without UPNP support
)
68 message(Building with UPNP support
)
72 DEFINES
+= USE_UPNP
=$$USE_UPNP STATICLIB
73 INCLUDEPATH
+= $$MINIUPNPC_INCLUDE_PATH
74 LIBS
+= $$
join(MINIUPNPC_LIB_PATH
,,-L
,) -lminiupnpc
75 win32
:LIBS
+= -liphlpapi
78 # use: qmake "USE_DBUS=1"
79 contains(USE_DBUS
, 1) {
80 message(Building with
DBUS (Freedesktop notifications
) support
)
85 # use: qmake "USE_IPV6=1" ( enabled by default; default)
86 # or: qmake "USE_IPV6=0" (disabled by default)
87 # or: qmake "USE_IPV6=-" (not supported)
88 contains(USE_IPV6
, -) {
89 message(Building without IPv6 support
)
94 DEFINES
+= USE_IPV6
=$$USE_IPV6
97 contains(BITCOIN_NEED_QT_PLUGINS
, 1) {
98 DEFINES
+= BITCOIN_NEED_QT_PLUGINS
99 QTPLUGIN
+= qcncodecs qjpcodecs qtwcodecs qkrcodecs qtaccessiblewidgets
102 INCLUDEPATH
+= src
/leveldb
/include src
/leveldb
/helpers
103 LIBS
+= $$PWD
/src
/leveldb
/libleveldb
.a $$PWD
/src
/leveldb
/libmemenv
.a
105 # we use QMAKE_CXXFLAGS_RELEASE even without RELEASE=1 because we use RELEASE to indicate linking preferences not -O preferences
106 genleveldb
.commands
= cd $$PWD
/src
/leveldb
&& CC
=$$QMAKE_CC CXX
=$$QMAKE_CXX $
(MAKE
) OPT
=\"$$QMAKE_CXXFLAGS $$QMAKE_CXXFLAGS_RELEASE
\" libleveldb
.a libmemenv
.a
108 # make an educated guess about what the ranlib command is called
109 isEmpty(QMAKE_RANLIB
) {
110 QMAKE_RANLIB
= $$
replace(QMAKE_STRIP
, strip
, ranlib
)
113 genleveldb
.commands
= cd $$PWD
/src
/leveldb
&& CC
=$$QMAKE_CC CXX
=$$QMAKE_CXX TARGET_OS
=OS_WINDOWS_CROSSCOMPILE $
(MAKE
) OPT
=\"$$QMAKE_CXXFLAGS $$QMAKE_CXXFLAGS_RELEASE
\" libleveldb
.a libmemenv
.a
&& $$QMAKE_RANLIB $$PWD
/src
/leveldb
/libleveldb
.a
&& $$QMAKE_RANLIB $$PWD
/src
/leveldb
/libmemenv
.a
115 genleveldb
.target
= $$PWD
/src
/leveldb
/libleveldb
.a
116 genleveldb
.depends
= FORCE
117 PRE_TARGETDEPS
+= $$PWD
/src
/leveldb
/libleveldb
.a
118 QMAKE_EXTRA_TARGETS
+= genleveldb
119 # Gross ugly hack that depends on qmake internals, unfortunately there is no other way to do it.
120 QMAKE_CLEAN
+= $$PWD
/src
/leveldb
/libleveldb
.a
; cd $$PWD
/src
/leveldb
; $
(MAKE
) clean
122 # regenerate src/build.h
123 !win32
|contains(USE_BUILD_INFO
, 1) {
124 genbuild
.depends
= FORCE
125 genbuild
.commands
= cd $$PWD
; /bin
/sh share
/genbuild
.sh $$OUT_PWD
/build
/build
.h
126 genbuild
.target
= $$OUT_PWD
/build
/build
.h
127 PRE_TARGETDEPS
+= $$OUT_PWD
/build
/build
.h
128 QMAKE_EXTRA_TARGETS
+= genbuild
129 DEFINES
+= HAVE_BUILD_INFO
132 QMAKE_CXXFLAGS_WARN_ON
= -fdiagnostics
-show
-option
-Wall
-Wextra
-Wformat
-Wformat
-security
-Wno
-unused
-parameter
-Wstack
-protector
135 DEPENDPATH
+= src src
/json src
/qt
136 HEADERS
+= src
/qt
/bitcoingui
.h \
137 src
/qt
/transactiontablemodel
.h \
138 src
/qt
/addresstablemodel
.h \
139 src
/qt
/optionsdialog
.h \
140 src
/qt
/sendcoinsdialog
.h \
141 src
/qt
/addressbookpage
.h \
142 src
/qt
/signverifymessagedialog
.h \
143 src
/qt
/aboutdialog
.h \
144 src
/qt
/editaddressdialog
.h \
145 src
/qt
/bitcoinaddressvalidator
.h \
169 src
/json
/json_spirit_writer_template
.h \
170 src
/json
/json_spirit_writer
.h \
171 src
/json
/json_spirit_value
.h \
172 src
/json
/json_spirit_utils
.h \
173 src
/json
/json_spirit_stream_reader
.h \
174 src
/json
/json_spirit_reader_template
.h \
175 src
/json
/json_spirit_reader
.h \
176 src
/json
/json_spirit_error_position
.h \
177 src
/json
/json_spirit
.h \
178 src
/qt
/clientmodel
.h \
180 src
/qt
/transactionrecord
.h \
181 src
/qt
/guiconstants
.h \
182 src
/qt
/optionsmodel
.h \
183 src
/qt
/monitoreddatamapper
.h \
184 src
/qt
/transactiondesc
.h \
185 src
/qt
/transactiondescdialog
.h \
186 src
/qt
/bitcoinamountfield
.h \
189 src
/qt
/transactionfilterproxy
.h \
190 src
/qt
/transactionview
.h \
191 src
/qt
/walletmodel
.h \
192 src
/qt
/walletview
.h \
193 src
/qt
/walletstack
.h \
194 src
/qt
/walletframe
.h \
196 src
/qt
/overviewpage
.h \
197 src
/qt
/csvmodelwriter
.h \
199 src
/qt
/sendcoinsentry
.h \
200 src
/qt
/qvalidatedlineedit
.h \
201 src
/qt
/bitcoinunits
.h \
202 src
/qt
/qvaluecombobox
.h \
203 src
/qt
/askpassphrasedialog
.h \
205 src
/qt
/notificator
.h \
206 src
/qt
/paymentserver
.h \
209 src
/qt
/rpcconsole
.h \
212 src
/clientversion
.h \
217 src
/qt
/splashscreen
.h \
220 SOURCES
+= src
/qt
/bitcoin
.cpp \
221 src
/qt
/bitcoingui
.cpp \
222 src
/qt
/transactiontablemodel
.cpp \
223 src
/qt
/addresstablemodel
.cpp \
224 src
/qt
/optionsdialog
.cpp \
225 src
/qt
/sendcoinsdialog
.cpp \
226 src
/qt
/addressbookpage
.cpp \
227 src
/qt
/signverifymessagedialog
.cpp \
228 src
/qt
/aboutdialog
.cpp \
229 src
/qt
/editaddressdialog
.cpp \
230 src
/qt
/bitcoinaddressvalidator
.cpp \
232 src
/chainparams
.cpp \
245 src
/checkpoints
.cpp \
249 src
/qt
/clientmodel
.cpp \
251 src
/qt
/transactionrecord
.cpp \
252 src
/qt
/optionsmodel
.cpp \
253 src
/qt
/monitoreddatamapper
.cpp \
254 src
/qt
/transactiondesc
.cpp \
255 src
/qt
/transactiondescdialog
.cpp \
256 src
/qt
/bitcoinstrings
.cpp \
257 src
/qt
/bitcoinamountfield
.cpp \
260 src
/qt
/transactionfilterproxy
.cpp \
261 src
/qt
/transactionview
.cpp \
262 src
/qt
/walletmodel
.cpp \
263 src
/qt
/walletview
.cpp \
264 src
/qt
/walletstack
.cpp \
265 src
/qt
/walletframe
.cpp \
271 src
/rpcblockchain
.cpp \
272 src
/rpcrawtransaction
.cpp \
273 src
/qt
/overviewpage
.cpp \
274 src
/qt
/csvmodelwriter
.cpp \
276 src
/qt
/sendcoinsentry
.cpp \
277 src
/qt
/qvalidatedlineedit
.cpp \
278 src
/qt
/bitcoinunits
.cpp \
279 src
/qt
/qvaluecombobox
.cpp \
280 src
/qt
/askpassphrasedialog
.cpp \
282 src
/qt
/notificator
.cpp \
283 src
/qt
/paymentserver
.cpp \
284 src
/qt
/rpcconsole
.cpp \
288 src
/qt
/splashscreen
.cpp \
291 RESOURCES
+= src
/qt
/bitcoin
.qrc
293 FORMS
+= src
/qt
/forms
/sendcoinsdialog
.ui \
294 src
/qt
/forms
/addressbookpage
.ui \
295 src
/qt
/forms
/signverifymessagedialog
.ui \
296 src
/qt
/forms
/aboutdialog
.ui \
297 src
/qt
/forms
/editaddressdialog
.ui \
298 src
/qt
/forms
/transactiondescdialog
.ui \
299 src
/qt
/forms
/overviewpage
.ui \
300 src
/qt
/forms
/sendcoinsentry
.ui \
301 src
/qt
/forms
/askpassphrasedialog
.ui \
302 src
/qt
/forms
/rpcconsole
.ui \
303 src
/qt
/forms
/optionsdialog
.ui \
304 src
/qt
/forms
/intro
.ui
306 contains(USE_QRCODE
, 1) {
307 HEADERS
+= src
/qt
/qrcodedialog
.h
308 SOURCES
+= src
/qt
/qrcodedialog
.cpp
309 FORMS
+= src
/qt
/forms
/qrcodedialog
.ui
312 contains(BITCOIN_QT_TEST
, 1) {
313 SOURCES
+= src
/qt
/test
/test_main
.cpp \
314 src
/qt
/test
/uritests
.cpp
315 HEADERS
+= src
/qt
/test
/uritests
.h
316 DEPENDPATH
+= src
/qt
/test
318 TARGET
= bitcoin
-qt_test
319 DEFINES
+= BITCOIN_QT_TEST
320 macx
: CONFIG
-= app_bundle
323 # Todo: Remove this line when switching to Qt5, as that option was removed
326 # for lrelease/lupdate
327 # also add new translations to src/qt/bitcoin.qrc under translations/
328 TRANSLATIONS
= $$
files(src
/qt
/locale
/bitcoin_
*.ts
)
330 isEmpty(QMAKE_LRELEASE
) {
331 win32
:QMAKE_LRELEASE
= $$
[QT_INSTALL_BINS
]\\lrelease
.exe
332 else
:QMAKE_LRELEASE
= $$
[QT_INSTALL_BINS
]/lrelease
334 isEmpty(QM_DIR
):QM_DIR
= $$PWD
/src
/qt
/locale
335 # automatically build translations, so they can be included in resource file
336 TSQM
.name
= lrelease $
{QMAKE_FILE_IN
}
337 TSQM
.input
= TRANSLATIONS
338 TSQM
.output
= $$QM_DIR
/$
{QMAKE_FILE_BASE
}.qm
339 TSQM
.commands
= $$QMAKE_LRELEASE $
{QMAKE_FILE_IN
} -qm $
{QMAKE_FILE_OUT
}
340 TSQM
.CONFIG
= no_link
341 QMAKE_EXTRA_COMPILERS
+= TSQM
343 # "Other files" to show in Qt Creator
344 OTHER_FILES
+= README
.md \
348 src/qt/res/bitcoin-qt.rc \
354 # platform specific defaults, if not overridden on command line
355 isEmpty(BOOST_LIB_SUFFIX) {
356 macx:BOOST_LIB_SUFFIX = -mt
357 win32:BOOST_LIB_SUFFIX = -mgw44-mt-s-1_50
360 isEmpty(BOOST_THREAD_LIB_SUFFIX) {
361 BOOST_THREAD_LIB_SUFFIX = $$BOOST_LIB_SUFFIX
364 isEmpty(BDB_LIB_PATH) {
365 macx:BDB_LIB_PATH = /opt/local/lib/db48
368 isEmpty(BDB_LIB_SUFFIX) {
369 macx:BDB_LIB_SUFFIX = -4.8
372 isEmpty(BDB_INCLUDE_PATH) {
373 macx:BDB_INCLUDE_PATH = /opt/local/include/db48
376 isEmpty(BOOST_LIB_PATH) {
377 macx:BOOST_LIB_PATH = /opt/local/lib
380 isEmpty(BOOST_INCLUDE_PATH) {
381 macx:BOOST_INCLUDE_PATH = /opt/local/include
384 win32:DEFINES += WIN32
385 win32:RC_FILE = src/qt/res/bitcoin-qt.rc
387 win32:!contains(MINGW_THREAD_BUGFIX, 0) {
388 # At least qmake's win32-g++-cross profile is missing the -lmingwthrd
389 # thread-safety flag. GCC has -mthreads to enable this, but it doesn't
390 # work with static linking. -lmingwthrd must come BEFORE -lmingw, so
391 # it is prepended to QMAKE_LIBS_QT_ENTRY.
392 # It can be turned off with MINGW_THREAD_BUGFIX=0, just in case it causes
393 # any problems on some untested qmake profile now or in the future.
395 QMAKE_LIBS_QT_ENTRY = -lmingwthrd $$QMAKE_LIBS_QT_ENTRY
401 # _FILE_OFFSET_BITS=64 lets 32-bit fopen transparently support large files.
402 DEFINES += _FILE_OFFSET_BITS=64
405 macx:HEADERS += src/qt/macdockiconhandler.h src/qt/macnotificationhandler.h
406 macx:OBJECTIVE_SOURCES += src/qt/macdockiconhandler.mm src/qt/macnotificationhandler.mm
407 macx:LIBS += -framework Foundation -framework ApplicationServices -framework AppKit -framework CoreServices
408 macx:DEFINES += MAC_OSX MSG_NOSIGNAL=0
409 macx:ICON = src/qt/res/icons/bitcoin.icns
410 macx:QMAKE_CFLAGS_THREAD += -pthread
411 macx:QMAKE_LFLAGS_THREAD += -pthread
412 macx:QMAKE_CXXFLAGS_THREAD += -pthread
413 macx:QMAKE_INFO_PLIST = share/qt/Info.plist
415 # Set libraries and includes at end, to use platform-defined defaults if not overridden
416 INCLUDEPATH += $$BOOST_INCLUDE_PATH $$BDB_INCLUDE_PATH $$OPENSSL_INCLUDE_PATH $$QRENCODE_INCLUDE_PATH
417 LIBS += $$join(BOOST_LIB_PATH,,-L,) $$join(BDB_LIB_PATH,,-L,) $$join(OPENSSL_LIB_PATH,,-L,) $$join(QRENCODE_LIB_PATH,,-L,)
418 LIBS += -lssl -lcrypto -ldb_cxx$$BDB_LIB_SUFFIX
419 # -lgdi32 has to happen after -lcrypto (see #681)
420 win32:LIBS += -lws2_32 -lshlwapi -lmswsock -lole32 -loleaut32 -luuid -lgdi32
421 LIBS += -lboost_system$$BOOST_LIB_SUFFIX -lboost_filesystem$$BOOST_LIB_SUFFIX -lboost_program_options$$BOOST_LIB_SUFFIX -lboost_thread$$BOOST_THREAD_LIB_SUFFIX
422 win32:LIBS += -lboost_chrono$$BOOST_LIB_SUFFIX
423 macx:LIBS += -lboost_chrono$$BOOST_LIB_SUFFIX
425 contains(RELEASE, 1) {
427 # Linux: turn dynamic linking back on for c/c++ runtime libraries
428 LIBS += -Wl,-Bdynamic
432 system($$QMAKE_LRELEASE -silent $$TRANSLATIONS)