This adds an introduction screen that is shown when the client is first started in which the user can choose a data directory. It is also possible to force the intro screen to appear using command line argument `-choosedatadir`. The user is warned that the client will download and store 10Gb of data. The intro screen shows how much space is available on the device that contains the chosen directory and warns if this is less than the 10Gb. To make it possible to translate the introduction dialog, the initialization sequence is changed so that translations are loaded before the data directory. This has the by-effect that it is no longer possible to specify a language in bitcoin.conf inside the data directory.
432 lines
14 KiB
Prolog
432 lines
14 KiB
Prolog
TEMPLATE = app
|
|
TARGET = bitcoin-qt
|
|
macx:TARGET = "Bitcoin-Qt"
|
|
VERSION = 0.8.2
|
|
INCLUDEPATH += src src/json src/qt
|
|
QT += core gui network
|
|
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
|
DEFINES += BOOST_THREAD_USE_LIB BOOST_SPIRIT_THREADSAFE
|
|
CONFIG += no_include_pwd
|
|
CONFIG += thread
|
|
|
|
# for boost 1.37, add -mt to the boost libraries
|
|
# use: qmake BOOST_LIB_SUFFIX=-mt
|
|
# for boost thread win32 with _win32 sufix
|
|
# use: BOOST_THREAD_LIB_SUFFIX=_win32-...
|
|
# or when linking against a specific BerkelyDB version: BDB_LIB_SUFFIX=-4.8
|
|
|
|
# Dependency library locations can be customized with:
|
|
# BOOST_INCLUDE_PATH, BOOST_LIB_PATH, BDB_INCLUDE_PATH,
|
|
# BDB_LIB_PATH, OPENSSL_INCLUDE_PATH and OPENSSL_LIB_PATH respectively
|
|
|
|
OBJECTS_DIR = build
|
|
MOC_DIR = build
|
|
UI_DIR = build
|
|
|
|
# use: qmake "RELEASE=1"
|
|
contains(RELEASE, 1) {
|
|
# Mac: compile for maximum compatibility (10.5, 32-bit)
|
|
macx:QMAKE_CXXFLAGS += -mmacosx-version-min=10.5 -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk
|
|
macx:QMAKE_CFLAGS += -mmacosx-version-min=10.5 -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk
|
|
macx:QMAKE_OBJECTIVE_CFLAGS += -mmacosx-version-min=10.5 -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk
|
|
|
|
!win32:!macx {
|
|
# Linux: static link and extra security (see: https://wiki.debian.org/Hardening)
|
|
LIBS += -Wl,-Bstatic -Wl,-z,relro -Wl,-z,now
|
|
}
|
|
}
|
|
|
|
!win32 {
|
|
# for extra security against potential buffer overflows: enable GCCs Stack Smashing Protection
|
|
QMAKE_CXXFLAGS *= -fstack-protector-all
|
|
QMAKE_LFLAGS *= -fstack-protector-all
|
|
# Exclude on Windows cross compile with MinGW 4.2.x, as it will result in a non-working executable!
|
|
# This can be enabled for Windows, when we switch to MinGW >= 4.4.x.
|
|
}
|
|
# for extra security (see: https://wiki.debian.org/Hardening): this flag is GCC compiler-specific
|
|
QMAKE_CXXFLAGS *= -D_FORTIFY_SOURCE=2
|
|
# for extra security on Windows: enable ASLR and DEP via GCC linker flags
|
|
win32:QMAKE_LFLAGS *= -Wl,--dynamicbase -Wl,--nxcompat
|
|
# on Windows: enable GCC large address aware linker flag
|
|
win32:QMAKE_LFLAGS *= -Wl,--large-address-aware
|
|
|
|
# use: qmake "USE_QRCODE=1"
|
|
# libqrencode (http://fukuchi.org/works/qrencode/index.en.html) must be installed for support
|
|
contains(USE_QRCODE, 1) {
|
|
message(Building with QRCode support)
|
|
DEFINES += USE_QRCODE
|
|
LIBS += -lqrencode
|
|
}
|
|
|
|
# use: qmake "USE_UPNP=1" ( enabled by default; default)
|
|
# or: qmake "USE_UPNP=0" (disabled by default)
|
|
# or: qmake "USE_UPNP=-" (not supported)
|
|
# miniupnpc (http://miniupnp.free.fr/files/) must be installed for support
|
|
contains(USE_UPNP, -) {
|
|
message(Building without UPNP support)
|
|
} else {
|
|
message(Building with UPNP support)
|
|
count(USE_UPNP, 0) {
|
|
USE_UPNP=1
|
|
}
|
|
DEFINES += USE_UPNP=$$USE_UPNP STATICLIB
|
|
INCLUDEPATH += $$MINIUPNPC_INCLUDE_PATH
|
|
LIBS += $$join(MINIUPNPC_LIB_PATH,,-L,) -lminiupnpc
|
|
win32:LIBS += -liphlpapi
|
|
}
|
|
|
|
# use: qmake "USE_DBUS=1"
|
|
contains(USE_DBUS, 1) {
|
|
message(Building with DBUS (Freedesktop notifications) support)
|
|
DEFINES += USE_DBUS
|
|
QT += dbus
|
|
}
|
|
|
|
# use: qmake "USE_IPV6=1" ( enabled by default; default)
|
|
# or: qmake "USE_IPV6=0" (disabled by default)
|
|
# or: qmake "USE_IPV6=-" (not supported)
|
|
contains(USE_IPV6, -) {
|
|
message(Building without IPv6 support)
|
|
} else {
|
|
count(USE_IPV6, 0) {
|
|
USE_IPV6=1
|
|
}
|
|
DEFINES += USE_IPV6=$$USE_IPV6
|
|
}
|
|
|
|
contains(BITCOIN_NEED_QT_PLUGINS, 1) {
|
|
DEFINES += BITCOIN_NEED_QT_PLUGINS
|
|
QTPLUGIN += qcncodecs qjpcodecs qtwcodecs qkrcodecs qtaccessiblewidgets
|
|
}
|
|
|
|
INCLUDEPATH += src/leveldb/include src/leveldb/helpers
|
|
LIBS += $$PWD/src/leveldb/libleveldb.a $$PWD/src/leveldb/libmemenv.a
|
|
!win32 {
|
|
# we use QMAKE_CXXFLAGS_RELEASE even without RELEASE=1 because we use RELEASE to indicate linking preferences not -O preferences
|
|
genleveldb.commands = cd $$PWD/src/leveldb && CC=$$QMAKE_CC CXX=$$QMAKE_CXX $(MAKE) OPT=\"$$QMAKE_CXXFLAGS $$QMAKE_CXXFLAGS_RELEASE\" libleveldb.a libmemenv.a
|
|
} else {
|
|
# make an educated guess about what the ranlib command is called
|
|
isEmpty(QMAKE_RANLIB) {
|
|
QMAKE_RANLIB = $$replace(QMAKE_STRIP, strip, ranlib)
|
|
}
|
|
LIBS += -lshlwapi
|
|
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
|
|
}
|
|
genleveldb.target = $$PWD/src/leveldb/libleveldb.a
|
|
genleveldb.depends = FORCE
|
|
PRE_TARGETDEPS += $$PWD/src/leveldb/libleveldb.a
|
|
QMAKE_EXTRA_TARGETS += genleveldb
|
|
# Gross ugly hack that depends on qmake internals, unfortunately there is no other way to do it.
|
|
QMAKE_CLEAN += $$PWD/src/leveldb/libleveldb.a; cd $$PWD/src/leveldb ; $(MAKE) clean
|
|
|
|
# regenerate src/build.h
|
|
!win32|contains(USE_BUILD_INFO, 1) {
|
|
genbuild.depends = FORCE
|
|
genbuild.commands = cd $$PWD; /bin/sh share/genbuild.sh $$OUT_PWD/build/build.h
|
|
genbuild.target = $$OUT_PWD/build/build.h
|
|
PRE_TARGETDEPS += $$OUT_PWD/build/build.h
|
|
QMAKE_EXTRA_TARGETS += genbuild
|
|
DEFINES += HAVE_BUILD_INFO
|
|
}
|
|
|
|
QMAKE_CXXFLAGS_WARN_ON = -fdiagnostics-show-option -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter -Wstack-protector
|
|
|
|
# Input
|
|
DEPENDPATH += src src/json src/qt
|
|
HEADERS += src/qt/bitcoingui.h \
|
|
src/qt/transactiontablemodel.h \
|
|
src/qt/addresstablemodel.h \
|
|
src/qt/optionsdialog.h \
|
|
src/qt/sendcoinsdialog.h \
|
|
src/qt/addressbookpage.h \
|
|
src/qt/signverifymessagedialog.h \
|
|
src/qt/aboutdialog.h \
|
|
src/qt/editaddressdialog.h \
|
|
src/qt/bitcoinaddressvalidator.h \
|
|
src/alert.h \
|
|
src/addrman.h \
|
|
src/base58.h \
|
|
src/bignum.h \
|
|
src/checkpoints.h \
|
|
src/compat.h \
|
|
src/sync.h \
|
|
src/util.h \
|
|
src/hash.h \
|
|
src/uint256.h \
|
|
src/serialize.h \
|
|
src/core.h \
|
|
src/main.h \
|
|
src/net.h \
|
|
src/key.h \
|
|
src/db.h \
|
|
src/walletdb.h \
|
|
src/script.h \
|
|
src/init.h \
|
|
src/bloom.h \
|
|
src/mruset.h \
|
|
src/checkqueue.h \
|
|
src/json/json_spirit_writer_template.h \
|
|
src/json/json_spirit_writer.h \
|
|
src/json/json_spirit_value.h \
|
|
src/json/json_spirit_utils.h \
|
|
src/json/json_spirit_stream_reader.h \
|
|
src/json/json_spirit_reader_template.h \
|
|
src/json/json_spirit_reader.h \
|
|
src/json/json_spirit_error_position.h \
|
|
src/json/json_spirit.h \
|
|
src/qt/clientmodel.h \
|
|
src/qt/guiutil.h \
|
|
src/qt/transactionrecord.h \
|
|
src/qt/guiconstants.h \
|
|
src/qt/optionsmodel.h \
|
|
src/qt/monitoreddatamapper.h \
|
|
src/qt/transactiondesc.h \
|
|
src/qt/transactiondescdialog.h \
|
|
src/qt/bitcoinamountfield.h \
|
|
src/wallet.h \
|
|
src/keystore.h \
|
|
src/qt/transactionfilterproxy.h \
|
|
src/qt/transactionview.h \
|
|
src/qt/walletmodel.h \
|
|
src/qt/walletview.h \
|
|
src/qt/walletstack.h \
|
|
src/qt/walletframe.h \
|
|
src/bitcoinrpc.h \
|
|
src/qt/overviewpage.h \
|
|
src/qt/csvmodelwriter.h \
|
|
src/crypter.h \
|
|
src/qt/sendcoinsentry.h \
|
|
src/qt/qvalidatedlineedit.h \
|
|
src/qt/bitcoinunits.h \
|
|
src/qt/qvaluecombobox.h \
|
|
src/qt/askpassphrasedialog.h \
|
|
src/protocol.h \
|
|
src/qt/notificator.h \
|
|
src/qt/paymentserver.h \
|
|
src/allocators.h \
|
|
src/ui_interface.h \
|
|
src/qt/rpcconsole.h \
|
|
src/version.h \
|
|
src/netbase.h \
|
|
src/clientversion.h \
|
|
src/txdb.h \
|
|
src/leveldb.h \
|
|
src/threadsafety.h \
|
|
src/limitedmap.h \
|
|
src/qt/splashscreen.h \
|
|
src/qt/intro.h
|
|
|
|
SOURCES += src/qt/bitcoin.cpp \
|
|
src/qt/bitcoingui.cpp \
|
|
src/qt/transactiontablemodel.cpp \
|
|
src/qt/addresstablemodel.cpp \
|
|
src/qt/optionsdialog.cpp \
|
|
src/qt/sendcoinsdialog.cpp \
|
|
src/qt/addressbookpage.cpp \
|
|
src/qt/signverifymessagedialog.cpp \
|
|
src/qt/aboutdialog.cpp \
|
|
src/qt/editaddressdialog.cpp \
|
|
src/qt/bitcoinaddressvalidator.cpp \
|
|
src/alert.cpp \
|
|
src/version.cpp \
|
|
src/sync.cpp \
|
|
src/util.cpp \
|
|
src/hash.cpp \
|
|
src/netbase.cpp \
|
|
src/key.cpp \
|
|
src/script.cpp \
|
|
src/core.cpp \
|
|
src/main.cpp \
|
|
src/init.cpp \
|
|
src/net.cpp \
|
|
src/bloom.cpp \
|
|
src/checkpoints.cpp \
|
|
src/addrman.cpp \
|
|
src/db.cpp \
|
|
src/walletdb.cpp \
|
|
src/qt/clientmodel.cpp \
|
|
src/qt/guiutil.cpp \
|
|
src/qt/transactionrecord.cpp \
|
|
src/qt/optionsmodel.cpp \
|
|
src/qt/monitoreddatamapper.cpp \
|
|
src/qt/transactiondesc.cpp \
|
|
src/qt/transactiondescdialog.cpp \
|
|
src/qt/bitcoinstrings.cpp \
|
|
src/qt/bitcoinamountfield.cpp \
|
|
src/wallet.cpp \
|
|
src/keystore.cpp \
|
|
src/qt/transactionfilterproxy.cpp \
|
|
src/qt/transactionview.cpp \
|
|
src/qt/walletmodel.cpp \
|
|
src/qt/walletview.cpp \
|
|
src/qt/walletstack.cpp \
|
|
src/qt/walletframe.cpp \
|
|
src/bitcoinrpc.cpp \
|
|
src/rpcdump.cpp \
|
|
src/rpcnet.cpp \
|
|
src/rpcmining.cpp \
|
|
src/rpcwallet.cpp \
|
|
src/rpcblockchain.cpp \
|
|
src/rpcrawtransaction.cpp \
|
|
src/qt/overviewpage.cpp \
|
|
src/qt/csvmodelwriter.cpp \
|
|
src/crypter.cpp \
|
|
src/qt/sendcoinsentry.cpp \
|
|
src/qt/qvalidatedlineedit.cpp \
|
|
src/qt/bitcoinunits.cpp \
|
|
src/qt/qvaluecombobox.cpp \
|
|
src/qt/askpassphrasedialog.cpp \
|
|
src/protocol.cpp \
|
|
src/qt/notificator.cpp \
|
|
src/qt/paymentserver.cpp \
|
|
src/qt/rpcconsole.cpp \
|
|
src/noui.cpp \
|
|
src/leveldb.cpp \
|
|
src/txdb.cpp \
|
|
src/qt/splashscreen.cpp \
|
|
src/qt/intro.cpp
|
|
|
|
RESOURCES += src/qt/bitcoin.qrc
|
|
|
|
FORMS += src/qt/forms/sendcoinsdialog.ui \
|
|
src/qt/forms/addressbookpage.ui \
|
|
src/qt/forms/signverifymessagedialog.ui \
|
|
src/qt/forms/aboutdialog.ui \
|
|
src/qt/forms/editaddressdialog.ui \
|
|
src/qt/forms/transactiondescdialog.ui \
|
|
src/qt/forms/overviewpage.ui \
|
|
src/qt/forms/sendcoinsentry.ui \
|
|
src/qt/forms/askpassphrasedialog.ui \
|
|
src/qt/forms/rpcconsole.ui \
|
|
src/qt/forms/optionsdialog.ui \
|
|
src/qt/forms/intro.ui
|
|
|
|
contains(USE_QRCODE, 1) {
|
|
HEADERS += src/qt/qrcodedialog.h
|
|
SOURCES += src/qt/qrcodedialog.cpp
|
|
FORMS += src/qt/forms/qrcodedialog.ui
|
|
}
|
|
|
|
contains(BITCOIN_QT_TEST, 1) {
|
|
SOURCES += src/qt/test/test_main.cpp \
|
|
src/qt/test/uritests.cpp
|
|
HEADERS += src/qt/test/uritests.h
|
|
DEPENDPATH += src/qt/test
|
|
QT += testlib
|
|
TARGET = bitcoin-qt_test
|
|
DEFINES += BITCOIN_QT_TEST
|
|
macx: CONFIG -= app_bundle
|
|
}
|
|
|
|
# Todo: Remove this line when switching to Qt5, as that option was removed
|
|
CODECFORTR = UTF-8
|
|
|
|
# for lrelease/lupdate
|
|
# also add new translations to src/qt/bitcoin.qrc under translations/
|
|
TRANSLATIONS = $$files(src/qt/locale/bitcoin_*.ts)
|
|
|
|
isEmpty(QMAKE_LRELEASE) {
|
|
win32:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]\\lrelease.exe
|
|
else:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]/lrelease
|
|
}
|
|
isEmpty(QM_DIR):QM_DIR = $$PWD/src/qt/locale
|
|
# automatically build translations, so they can be included in resource file
|
|
TSQM.name = lrelease ${QMAKE_FILE_IN}
|
|
TSQM.input = TRANSLATIONS
|
|
TSQM.output = $$QM_DIR/${QMAKE_FILE_BASE}.qm
|
|
TSQM.commands = $$QMAKE_LRELEASE ${QMAKE_FILE_IN} -qm ${QMAKE_FILE_OUT}
|
|
TSQM.CONFIG = no_link
|
|
QMAKE_EXTRA_COMPILERS += TSQM
|
|
|
|
# "Other files" to show in Qt Creator
|
|
OTHER_FILES += README.md \
|
|
doc/*.rst \
|
|
doc/*.txt \
|
|
doc/*.md \
|
|
src/bitcoind.cpp \
|
|
src/qt/res/bitcoin-qt.rc \
|
|
src/test/*.cpp \
|
|
src/test/*.h \
|
|
src/qt/test/*.cpp \
|
|
src/qt/test/*.h
|
|
|
|
# platform specific defaults, if not overridden on command line
|
|
isEmpty(BOOST_LIB_SUFFIX) {
|
|
macx:BOOST_LIB_SUFFIX = -mt
|
|
win32:BOOST_LIB_SUFFIX = -mgw44-mt-s-1_50
|
|
}
|
|
|
|
isEmpty(BOOST_THREAD_LIB_SUFFIX) {
|
|
BOOST_THREAD_LIB_SUFFIX = $$BOOST_LIB_SUFFIX
|
|
}
|
|
|
|
isEmpty(BDB_LIB_PATH) {
|
|
macx:BDB_LIB_PATH = /opt/local/lib/db48
|
|
}
|
|
|
|
isEmpty(BDB_LIB_SUFFIX) {
|
|
macx:BDB_LIB_SUFFIX = -4.8
|
|
}
|
|
|
|
isEmpty(BDB_INCLUDE_PATH) {
|
|
macx:BDB_INCLUDE_PATH = /opt/local/include/db48
|
|
}
|
|
|
|
isEmpty(BOOST_LIB_PATH) {
|
|
macx:BOOST_LIB_PATH = /opt/local/lib
|
|
}
|
|
|
|
isEmpty(BOOST_INCLUDE_PATH) {
|
|
macx:BOOST_INCLUDE_PATH = /opt/local/include
|
|
}
|
|
|
|
win32:DEFINES += WIN32
|
|
win32:RC_FILE = src/qt/res/bitcoin-qt.rc
|
|
|
|
win32:!contains(MINGW_THREAD_BUGFIX, 0) {
|
|
# At least qmake's win32-g++-cross profile is missing the -lmingwthrd
|
|
# thread-safety flag. GCC has -mthreads to enable this, but it doesn't
|
|
# work with static linking. -lmingwthrd must come BEFORE -lmingw, so
|
|
# it is prepended to QMAKE_LIBS_QT_ENTRY.
|
|
# It can be turned off with MINGW_THREAD_BUGFIX=0, just in case it causes
|
|
# any problems on some untested qmake profile now or in the future.
|
|
DEFINES += _MT
|
|
QMAKE_LIBS_QT_ENTRY = -lmingwthrd $$QMAKE_LIBS_QT_ENTRY
|
|
}
|
|
|
|
!win32:!macx {
|
|
DEFINES += LINUX
|
|
LIBS += -lrt
|
|
# _FILE_OFFSET_BITS=64 lets 32-bit fopen transparently support large files.
|
|
DEFINES += _FILE_OFFSET_BITS=64
|
|
}
|
|
|
|
macx:HEADERS += src/qt/macdockiconhandler.h src/qt/macnotificationhandler.h
|
|
macx:OBJECTIVE_SOURCES += src/qt/macdockiconhandler.mm src/qt/macnotificationhandler.mm
|
|
macx:LIBS += -framework Foundation -framework ApplicationServices -framework AppKit -framework CoreServices
|
|
macx:DEFINES += MAC_OSX MSG_NOSIGNAL=0
|
|
macx:ICON = src/qt/res/icons/bitcoin.icns
|
|
macx:QMAKE_CFLAGS_THREAD += -pthread
|
|
macx:QMAKE_LFLAGS_THREAD += -pthread
|
|
macx:QMAKE_CXXFLAGS_THREAD += -pthread
|
|
macx:QMAKE_INFO_PLIST = share/qt/Info.plist
|
|
|
|
# Set libraries and includes at end, to use platform-defined defaults if not overridden
|
|
INCLUDEPATH += $$BOOST_INCLUDE_PATH $$BDB_INCLUDE_PATH $$OPENSSL_INCLUDE_PATH $$QRENCODE_INCLUDE_PATH
|
|
LIBS += $$join(BOOST_LIB_PATH,,-L,) $$join(BDB_LIB_PATH,,-L,) $$join(OPENSSL_LIB_PATH,,-L,) $$join(QRENCODE_LIB_PATH,,-L,)
|
|
LIBS += -lssl -lcrypto -ldb_cxx$$BDB_LIB_SUFFIX
|
|
# -lgdi32 has to happen after -lcrypto (see #681)
|
|
win32:LIBS += -lws2_32 -lshlwapi -lmswsock -lole32 -loleaut32 -luuid -lgdi32
|
|
LIBS += -lboost_system$$BOOST_LIB_SUFFIX -lboost_filesystem$$BOOST_LIB_SUFFIX -lboost_program_options$$BOOST_LIB_SUFFIX -lboost_thread$$BOOST_THREAD_LIB_SUFFIX
|
|
win32:LIBS += -lboost_chrono$$BOOST_LIB_SUFFIX
|
|
macx:LIBS += -lboost_chrono$$BOOST_LIB_SUFFIX
|
|
|
|
contains(RELEASE, 1) {
|
|
!win32:!macx {
|
|
# Linux: turn dynamic linking back on for c/c++ runtime libraries
|
|
LIBS += -Wl,-Bdynamic
|
|
}
|
|
}
|
|
|
|
system($$QMAKE_LRELEASE -silent $$TRANSLATIONS)
|