aboutsummaryrefslogtreecommitdiff
path: root/src/qt/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'src/qt/CMakeLists.txt')
-rw-r--r--src/qt/CMakeLists.txt331
1 files changed, 331 insertions, 0 deletions
diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt
new file mode 100644
index 0000000000..297408a926
--- /dev/null
+++ b/src/qt/CMakeLists.txt
@@ -0,0 +1,331 @@
+# Copyright (c) 2023-present The Bitcoin Core developers
+# Distributed under the MIT software license, see the accompanying
+# file COPYING or https://opensource.org/license/mit/.
+
+if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+ enable_language(OBJCXX)
+ set(CMAKE_OBJCXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
+ set(CMAKE_OBJCXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
+ set(CMAKE_OBJCXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
+ set(CMAKE_OBJCXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL}")
+ string(APPEND CMAKE_OBJCXX_COMPILE_OBJECT " ${APPEND_CPPFLAGS} ${APPEND_CXXFLAGS}")
+endif()
+
+get_target_property(qt_lib_type Qt5::Core TYPE)
+
+function(import_plugins target)
+ if(qt_lib_type STREQUAL "STATIC_LIBRARY")
+ set(plugins Qt5::QMinimalIntegrationPlugin)
+ if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ list(APPEND plugins Qt5::QXcbIntegrationPlugin)
+ elseif(WIN32)
+ list(APPEND plugins Qt5::QWindowsIntegrationPlugin Qt5::QWindowsVistaStylePlugin)
+ elseif(APPLE)
+ list(APPEND plugins Qt5::QCocoaIntegrationPlugin Qt5::QMacStylePlugin)
+ endif()
+ qt5_import_plugins(${target}
+ INCLUDE ${plugins}
+ EXCLUDE_BY_TYPE imageformats iconengines
+ )
+ endif()
+endfunction()
+
+# For Qt-specific commands and variables, please consult:
+# - https://cmake.org/cmake/help/latest/manual/cmake-qt.7.html
+# - https://doc.qt.io/qt-5/cmake-manual.html
+
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+set(CMAKE_AUTOUIC ON)
+set(CMAKE_AUTOUIC_SEARCH_PATHS forms)
+
+# TODO: The file(GLOB ...) command should be replaced with an explicit
+# file list. Such a change must be synced with the corresponding change
+# to https://github.com/bitcoin-core/bitcoin-maintainer-tools/blob/main/update-translations.py
+file(GLOB ts_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} locale/*.ts)
+set_source_files_properties(${ts_files} PROPERTIES OUTPUT_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/locale)
+qt5_add_translation(qm_files ${ts_files})
+
+configure_file(bitcoin_locale.qrc bitcoin_locale.qrc USE_SOURCE_PERMISSIONS COPYONLY)
+
+# The bitcoinqt sources have to include headers in
+# order to parse them to collect translatable strings.
+add_library(bitcoinqt STATIC EXCLUDE_FROM_ALL
+ bantablemodel.cpp
+ bantablemodel.h
+ bitcoin.cpp
+ bitcoin.h
+ bitcoinaddressvalidator.cpp
+ bitcoinaddressvalidator.h
+ bitcoinamountfield.cpp
+ bitcoinamountfield.h
+ bitcoingui.cpp
+ bitcoingui.h
+ bitcoinunits.cpp
+ bitcoinunits.h
+ clientmodel.cpp
+ clientmodel.h
+ csvmodelwriter.cpp
+ csvmodelwriter.h
+ guiutil.cpp
+ guiutil.h
+ initexecutor.cpp
+ initexecutor.h
+ intro.cpp
+ intro.h
+ $<$<PLATFORM_ID:Darwin>:macdockiconhandler.h>
+ $<$<PLATFORM_ID:Darwin>:macdockiconhandler.mm>
+ $<$<PLATFORM_ID:Darwin>:macnotificationhandler.h>
+ $<$<PLATFORM_ID:Darwin>:macnotificationhandler.mm>
+ $<$<PLATFORM_ID:Darwin>:macos_appnap.h>
+ $<$<PLATFORM_ID:Darwin>:macos_appnap.mm>
+ modaloverlay.cpp
+ modaloverlay.h
+ networkstyle.cpp
+ networkstyle.h
+ notificator.cpp
+ notificator.h
+ optionsdialog.cpp
+ optionsdialog.h
+ optionsmodel.cpp
+ optionsmodel.h
+ peertablemodel.cpp
+ peertablemodel.h
+ peertablesortproxy.cpp
+ peertablesortproxy.h
+ platformstyle.cpp
+ platformstyle.h
+ qvalidatedlineedit.cpp
+ qvalidatedlineedit.h
+ qvaluecombobox.cpp
+ qvaluecombobox.h
+ rpcconsole.cpp
+ rpcconsole.h
+ splashscreen.cpp
+ splashscreen.h
+ trafficgraphwidget.cpp
+ trafficgraphwidget.h
+ utilitydialog.cpp
+ utilitydialog.h
+ $<$<PLATFORM_ID:Windows>:winshutdownmonitor.cpp>
+ $<$<PLATFORM_ID:Windows>:winshutdownmonitor.h>
+ bitcoin.qrc
+ ${CMAKE_CURRENT_BINARY_DIR}/bitcoin_locale.qrc
+)
+target_compile_definitions(bitcoinqt
+ PUBLIC
+ QT_NO_KEYWORDS
+ QT_USE_QSTRINGBUILDER
+)
+target_include_directories(bitcoinqt
+ PUBLIC
+ $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src>
+)
+set_property(SOURCE macnotificationhandler.mm
+ # Ignore warnings "'NSUserNotificationCenter' is deprecated: first deprecated in macOS 11.0".
+ APPEND PROPERTY COMPILE_OPTIONS -Wno-deprecated-declarations
+)
+target_link_libraries(bitcoinqt
+ PUBLIC
+ Qt5::Widgets
+ PRIVATE
+ core_interface
+ bitcoin_cli
+ leveldb
+ Boost::headers
+ $<TARGET_NAME_IF_EXISTS:NATPMP::NATPMP>
+ $<TARGET_NAME_IF_EXISTS:MiniUPnPc::MiniUPnPc>
+ $<TARGET_NAME_IF_EXISTS:PkgConfig::libqrencode>
+ $<$<PLATFORM_ID:Darwin>:-framework\ AppKit>
+ $<$<CXX_COMPILER_ID:MSVC>:shlwapi>
+)
+
+if(ENABLE_WALLET)
+ target_sources(bitcoinqt
+ PRIVATE
+ addressbookpage.cpp
+ addressbookpage.h
+ addresstablemodel.cpp
+ addresstablemodel.h
+ askpassphrasedialog.cpp
+ askpassphrasedialog.h
+ coincontroldialog.cpp
+ coincontroldialog.h
+ coincontroltreewidget.cpp
+ coincontroltreewidget.h
+ createwalletdialog.cpp
+ createwalletdialog.h
+ editaddressdialog.cpp
+ editaddressdialog.h
+ openuridialog.cpp
+ openuridialog.h
+ overviewpage.cpp
+ overviewpage.h
+ paymentserver.cpp
+ paymentserver.h
+ psbtoperationsdialog.cpp
+ psbtoperationsdialog.h
+ qrimagewidget.cpp
+ qrimagewidget.h
+ receivecoinsdialog.cpp
+ receivecoinsdialog.h
+ receiverequestdialog.cpp
+ receiverequestdialog.h
+ recentrequeststablemodel.cpp
+ recentrequeststablemodel.h
+ sendcoinsdialog.cpp
+ sendcoinsdialog.h
+ sendcoinsentry.cpp
+ sendcoinsentry.h
+ signverifymessagedialog.cpp
+ signverifymessagedialog.h
+ transactiondesc.cpp
+ transactiondesc.h
+ transactiondescdialog.cpp
+ transactiondescdialog.h
+ transactionfilterproxy.cpp
+ transactionfilterproxy.h
+ transactionoverviewwidget.cpp
+ transactionoverviewwidget.h
+ transactionrecord.cpp
+ transactionrecord.h
+ transactiontablemodel.cpp
+ transactiontablemodel.h
+ transactionview.cpp
+ transactionview.h
+ walletcontroller.cpp
+ walletcontroller.h
+ walletframe.cpp
+ walletframe.h
+ walletmodel.cpp
+ walletmodel.h
+ walletmodeltransaction.cpp
+ walletmodeltransaction.h
+ walletview.cpp
+ walletview.h
+ )
+ target_link_libraries(bitcoinqt
+ PRIVATE
+ bitcoin_wallet
+ Qt5::Network
+ )
+endif()
+
+if(WITH_DBUS)
+ target_link_libraries(bitcoinqt PRIVATE Qt5::DBus)
+endif()
+
+if(qt_lib_type STREQUAL "STATIC_LIBRARY")
+ # We want to define static plugins to link ourselves, thus preventing
+ # automatic linking against a "sane" set of default static plugins.
+ qt5_import_plugins(bitcoinqt
+ EXCLUDE_BY_TYPE bearer iconengines imageformats platforms styles
+ )
+endif()
+
+add_executable(bitcoin-qt
+ main.cpp
+ ../init/bitcoin-qt.cpp
+)
+
+add_windows_resources(bitcoin-qt res/bitcoin-qt-res.rc)
+
+target_link_libraries(bitcoin-qt
+ core_interface
+ bitcoinqt
+ bitcoin_node
+)
+
+import_plugins(bitcoin-qt)
+set(installable_targets bitcoin-qt)
+if(WIN32)
+ set_target_properties(bitcoin-qt PROPERTIES WIN32_EXECUTABLE TRUE)
+endif()
+
+if(WITH_MULTIPROCESS)
+ add_executable(bitcoin-gui
+ main.cpp
+ ../init/bitcoin-gui.cpp
+ )
+ target_link_libraries(bitcoin-gui
+ core_interface
+ bitcoinqt
+ bitcoin_node
+ bitcoin_ipc
+ )
+ import_plugins(bitcoin-gui)
+ list(APPEND installable_targets bitcoin-gui)
+ if(WIN32)
+ set_target_properties(bitcoin-gui PROPERTIES WIN32_EXECUTABLE TRUE)
+ endif()
+endif()
+
+install(TARGETS ${installable_targets}
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ COMPONENT GUI
+)
+
+if(BUILD_GUI_TESTS)
+ add_subdirectory(test)
+endif()
+
+
+# Gets sources to be parsed to gather translatable strings.
+function(get_translatable_sources var)
+ set(result)
+ set(targets)
+ foreach(dir IN ITEMS ${ARGN})
+ get_directory_property(dir_targets DIRECTORY ${PROJECT_SOURCE_DIR}/${dir} BUILDSYSTEM_TARGETS)
+ list(APPEND targets ${dir_targets})
+ endforeach()
+ foreach(target IN LISTS targets)
+ get_target_property(target_sources ${target} SOURCES)
+ if(target_sources)
+ foreach(source IN LISTS target_sources)
+ # Get an expression from the generator expression, if any.
+ if(source MATCHES ":([^>]+)>$")
+ set(source ${CMAKE_MATCH_1})
+ endif()
+ cmake_path(GET source EXTENSION LAST_ONLY ext)
+ if(ext STREQUAL ".qrc")
+ continue()
+ endif()
+ if(NOT IS_ABSOLUTE source)
+ get_target_property(target_source_dir ${target} SOURCE_DIR)
+ cmake_path(APPEND target_source_dir ${source} OUTPUT_VARIABLE source)
+ endif()
+ list(APPEND result ${source})
+ endforeach()
+ endif()
+ endforeach()
+ set(${var} ${result} PARENT_SCOPE)
+endfunction()
+
+find_program(XGETTEXT_EXECUTABLE xgettext)
+find_program(SED_EXECUTABLE sed)
+if(NOT XGETTEXT_EXECUTABLE)
+ add_custom_target(translate
+ COMMAND ${CMAKE_COMMAND} -E echo "Error: GNU gettext-tools not found"
+ )
+elseif(NOT SED_EXECUTABLE)
+ add_custom_target(translate
+ COMMAND ${CMAKE_COMMAND} -E echo "Error: GNU sed not found"
+ )
+else()
+ set(translatable_sources_directories src src/qt src/util)
+ if(ENABLE_WALLET)
+ list(APPEND translatable_sources_directories src/wallet)
+ endif()
+ get_translatable_sources(translatable_sources ${translatable_sources_directories})
+ get_translatable_sources(qt_translatable_sources src/qt)
+ file(GLOB ui_files ${CMAKE_CURRENT_SOURCE_DIR}/forms/*.ui)
+ add_custom_target(translate
+ COMMAND ${CMAKE_COMMAND} -E env XGETTEXT=${XGETTEXT_EXECUTABLE} COPYRIGHT_HOLDERS=${COPYRIGHT_HOLDERS} ${Python3_EXECUTABLE} ${PROJECT_SOURCE_DIR}/share/qt/extract_strings_qt.py ${translatable_sources}
+ COMMAND Qt5::lupdate -no-obsolete -I ${PROJECT_SOURCE_DIR}/src -locations relative ${CMAKE_CURRENT_SOURCE_DIR}/bitcoinstrings.cpp ${ui_files} ${qt_translatable_sources} -ts ${CMAKE_CURRENT_SOURCE_DIR}/locale/bitcoin_en.ts
+ COMMAND Qt5::lconvert -drop-translations -o ${CMAKE_CURRENT_SOURCE_DIR}/locale/bitcoin_en.xlf -i ${CMAKE_CURRENT_SOURCE_DIR}/locale/bitcoin_en.ts
+ COMMAND ${SED_EXECUTABLE} -i.old -e "s|source-language=\"en\" target-language=\"en\"|source-language=\"en\"|" -e "/<target xml:space=\"preserve\"><\\/target>/d" ${CMAKE_CURRENT_SOURCE_DIR}/locale/bitcoin_en.xlf
+ COMMAND ${CMAKE_COMMAND} -E rm ${CMAKE_CURRENT_SOURCE_DIR}/locale/bitcoin_en.xlf.old
+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/src
+ VERBATIM
+ )
+endif()