mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-11-05 01:23:24 -08:00
Some checks are pending
CodeQL / Analyze (cpp) (push) Waiting to run
CodeQL / Analyze (actions) (push) Waiting to run
Build Desktop / Configure (push) Waiting to run
Build Desktop / Debian 13 (push) Blocked by required conditions
Build Desktop / Debian 12 (push) Blocked by required conditions
Build Desktop / Fedora 44 (push) Blocked by required conditions
Build Desktop / Fedora 43 (push) Blocked by required conditions
Build Desktop / Servatrice_Debian 12 (push) Blocked by required conditions
Build Desktop / Ubuntu 26.04 (push) Blocked by required conditions
Build Desktop / Ubuntu 24.04 (push) Blocked by required conditions
Build Desktop / Arch (push) Blocked by required conditions
Build Desktop / macOS 13 Intel (push) Blocked by required conditions
Build Desktop / macOS 14 (push) Blocked by required conditions
Build Desktop / macOS 15 (push) Blocked by required conditions
Build Desktop / macOS 26 Debug (push) Blocked by required conditions
Build Desktop / Windows 10 (push) Blocked by required conditions
Build Docker / Servatrice (arm) (push) Waiting to run
Build Docker / Servatrice (x86) (push) Waiting to run
Build Docker / Publish multi-platform Servatrice image (push) Blocked by required conditions
* [Windows] Purge every runtime DLL on upgrade instead of a named few A user updating from 3.0.2 to 3.1 got "abseil_dll.dll is either not designed to run on Windows or it contains an error" and could not start the client. abseil_dll.dll comes from vcpkg, not Qt. It rides into the install directory on the "*.dll" glob in cockatrice/CMakeLists.txt, alongside libprotobuf.dll, liblzma.dll and z.dll, and none of those were named in the upgrade purge. So on an upgrade the old uninstaller's RMDir /r skipped whichever of them was locked, the purge did not look for them, HasStaleRuntimeFiles did not look for them either, and the installer reported success - having written the new executables next to the previous version's protobuf runtime. Windows then refused to load it. The mask list was also already wrong where it existed: it matches zlib*.dll while vcpkg ships z.dll. Delete every top-level DLL instead of naming library families. The payload is written after the purge, so a DLL the new build still needs is put straight back; what the purge has to guarantee is only that nothing from the previous build is left to be loaded next to the new executables. Enumerated families cannot do that - every transitive dependency that arrives between two releases is one more name to forget, and the three previous rounds of this work each reasoned about Qt because that is what the reports named at the time. HasStaleRuntimeFiles collapses to the matching *.dll probe, so the abort fires on any survivor rather than only on the families it was told about. IsExistingCockatriceInstall stays on Qt6*.dll on purpose: it decides whether a directory is ours at all, and a folder that merely holds some DLLs of its own must not be purged. Qt6*.dll is enough even when only the protobuf runtime survived, because the whole Qt set is mapped by the same process that maps abseil_dll.dll and so is locked or free with it. * [CI] Assert the whole Windows runtime, not just the Qt modules required-qt-runtime.txt listed only the Qt modules COCKATRICE_QT_MODULES names, so it could not see any other runtime go missing. The three previous rounds of installer work all reasoned about Qt*.dll because that was all the build knew how to ask about, and the one runtime that actually broke the reported upgrade - abseil_dll.dll - was outside the set entirely. - Rename it to required-runtime.txt and take the third party runtime names from the vcpkg bin directory the app-local copies come from, so a dependency bump cannot leave the list behind and a versioned name such as libcrypto-3-x64.dll becoming libcrypto-4-x64.dll cannot either - Union the three applications' module lists rather than the client's alone: Servatrice contributes Qt6Sql.dll, servatrice.exe is installed next to cockatrice.exe and cannot start without it, and nothing asserted it - Add Core to the client's module list. It is the one module nothing can do without and it only ever arrived transitively, so Qt6Core.dll was shipped and never checked - the new unknown-runtime check flagged it on the first run - Fail the build on a missing runtime, as before, and warn on a runtime nothing requires. Only the test framework is a hard failure there: "no shipped executable links gtest" is a fact, whereas a runtime missing from the manifest may be one the manifest failed to derive, and a check that has never run before should not be able to block a release The warning is meant to be read. Qt6::Quick pulls in Qml, QmlModels, QmlWorkerScript, QuickBasic, QuickTemplates2 and OpenGL transitively and none are named, so the manifest is known to be a partial list; the first Windows run reports the real one, which is evidence rather than a guess about what Qt links. Fold that back in when it lands. * [CI] Stop deriving the required runtime from the vcpkg bin directory The first Windows run of this check failed, and the seven files it named as missing are not runtime at all: gmock.dll, gmock_main.dll, legacy.dll, libprotobuf-lite.dll, libprotoc.dll and pthreadVC3/VCE3/VSE3.dll. None of them is linked by any shipped executable, so a correct package leaves them out. vcpkg_installed/x64-windows/bin is everything vcpkg installed, not everything the applications import. The protoc compiler, the GoogleMock library, a port tool and three CMake FindThreads probes sit beside the genuine runtimes, and a directory listing cannot tell them apart. Asserting it fails the build over a package that is right - which is what happened, and it is the same mistake as the one that produced this bug report: reasoning about a list of names instead of about the build. The real source of truth is the three executables' import tables, which fixup_bundle already walks to decide what to copy. Until CMake can read that result, the Qt half is what can be derived honestly, from the same module lists the targets are built against. So assert that, and report the rest rather than require it: - Drop the vcpkg bin glob, its gtest filter and the vcpkg-runtime-known marker. All three existed only to support the glob. - Report top level DLLs the manifest does not name without failing. These are expected: protobuf, Abseil, OpenSSL, liblzma, ffmpeg and the Qt debug DLLs all arrive on the build output glob because nothing in the build declares them by name. The list is a report of what the package carries, not a verdict, and it is how the missing Qt6Qml/Quick/OpenGL entries above became visible. - Report a leaked gtest or gmock instead of failing on it. "No shipped executable links this" is a fact, but a check that has never passed on a real package has not earned the right to block a release, and the first run of an enforcing version is exactly when its own wrong assumptions show up. - Skip DLLs under a subdirectory, which are platform plugins rather than imported runtimes, and the NSIS plugins, which extract to $PLUGINSDIR and so reach the comparison looking like payload. Verified against the paths 7-Zip actually listed in the failing package: the check passes on it, still fails when Qt6Sql.dll or the qwindows plugin is removed, and still reports gtest.dll and gmock.dll if either is added. The purge in cmake/NSIS.template.in covers the runtimes the manifest does not name. That fix is independent of any list and is what makes the reported update failure go away. * [Installer] Fix the /R upgrade aborting before it does anything WaitForLauncherToExit read the wrong registers. System.dll writes its .rN outputs to $N and its .RN outputs to $RN, but the wait used p.r0/i.r1 while testing $R1. $R1 therefore stayed empty, and the "did not exit" test compared "" with "0" - true every time. Every in-app update passes /PID=, so every upgrade hit AbortInstall before writing anything; because /R also sets silent, the override just vanished with exit code 1 and no message. The bug came in with #7372 and is inherited by this branch, not introduced by it. Use the uppercase .RN forms, and treat a null or plugin-failed OpenProcess as the launcher already being gone - the case the old ${Errors} check never caught, because System.dll does not set the NSIS error flag from the callee's return value. Also restore the abort dialog for the in-app updater: AbortInstall and the two inline warnings gated their message box on ${IfNot} ${Silent}, which is false for a /R upgrade, so any abort on that path was equally silent. The unattended case is a /S install without /R, not /R, so show the box for $ReinstallMode = 1 or an interactive install. The stale-runtime abort now goes through AbortInstall so that decision lives in one place. * [Installer] Log every upgrade step to %TEMP%\Cockatrice-installer.log * [Installer] Actually append to the upgrade log (FileSeek END) * [Installer] Wait for the old uninstaller before replacing files An NSIS uninstaller copies itself to %TEMP% and runs from there so that it can delete its own directory; the process the installer started exits immediately. A plain ExecWait therefore returns before the uninstall has run, and the temp copy's "RMDir /r $INSTDIR" then executes concurrently with the install section, deleting files the payload just wrote. That is why an upgrade could leave Qt6Core/Gui/Multimedia and the other alphabetically-first DLLs missing while the tail of the directory survived: a recursive delete marching from the front while the final listing ran. Pass _?=$INSTDIR to the old uninstaller so it runs in place and ExecWait actually blocks until the uninstall completes. _?= must be the last argument and unquoted, even for paths with spaces. Applied to both the silent /R path (AutoUninstallIfNeeded) and the interactive path (componentsPagePre). * [Installer] Tighten the wording of the upgrade comments Drop the dash-heavy phrasing from the comments this PR adds, and say plainly in the _?= comment that ExecWait returns before the old uninstaller has run and the temp copy then deletes the payload the section is still writing. --------- Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
819 lines
41 KiB
CMake
819 lines
41 KiB
CMake
# CMakeLists for cockatrice directory
|
|
#
|
|
# provides the cockatrice binary
|
|
|
|
project(Cockatrice VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}")
|
|
|
|
set(cockatrice_SOURCES
|
|
${VERSION_STRING_CPP}
|
|
# sort by alphabetical order, so that there is no debate about where to add new sources to the list
|
|
src/client/network/connection_controller/remote_connection_controller.cpp
|
|
src/client/network/update/client/update_downloader.cpp
|
|
src/client/network/interfaces/deck_stats_interface.cpp
|
|
src/client/network/interfaces/tapped_out_interface.cpp
|
|
src/client/network/parsers/deck_link_to_api_transformer.cpp
|
|
src/client/network/update/client/client_update_checker.cpp
|
|
src/client/network/update/client/release_channel.cpp
|
|
src/client/network/update/card_spoiler/spoiler_background_updater.cpp
|
|
src/client/latency_graph_widget.cpp
|
|
src/client/latency_status_widget.cpp
|
|
src/client/lag_monitor.cpp
|
|
src/client/sound_engine.cpp
|
|
src/client/settings/cache_settings.cpp
|
|
src/client/settings/card_counter_settings.cpp
|
|
src/client/settings/shortcut_treeview.cpp
|
|
src/client/settings/shortcuts_settings.cpp
|
|
src/interface/deck_loader/card_node_function.cpp
|
|
src/interface/deck_loader/deck_file_format.cpp
|
|
src/interface/deck_loader/deck_loader.cpp
|
|
src/interface/deck_loader/loaded_deck.cpp
|
|
src/interface/widgets/dialogs/dlg_connect.cpp
|
|
src/interface/widgets/dialogs/dlg_convert_deck_to_cod_format.cpp
|
|
src/interface/widgets/dialogs/dlg_create_game.cpp
|
|
src/interface/widgets/dialogs/dlg_default_tags_editor.cpp
|
|
src/interface/widgets/dialogs/dlg_edit_avatar.cpp
|
|
src/interface/widgets/dialogs/dlg_edit_password.cpp
|
|
src/interface/widgets/dialogs/dlg_edit_tokens.cpp
|
|
src/interface/widgets/dialogs/dlg_edit_user.cpp
|
|
src/interface/widgets/dialogs/dlg_filter_games.cpp
|
|
src/interface/widgets/dialogs/dlg_forgot_password_challenge.cpp
|
|
src/interface/widgets/dialogs/dlg_forgot_password_request.cpp
|
|
src/interface/widgets/dialogs/dlg_forgot_password_reset.cpp
|
|
src/interface/widgets/dialogs/dlg_invite_to_game.cpp
|
|
src/interface/widgets/dialogs/dlg_load_deck.cpp
|
|
src/interface/widgets/dialogs/dlg_load_deck_from_clipboard.cpp
|
|
src/interface/widgets/dialogs/dlg_load_deck_from_website.cpp
|
|
src/interface/widgets/dialogs/dlg_load_remote_deck.cpp
|
|
src/interface/widgets/dialogs/dlg_local_game_options.cpp
|
|
src/interface/widgets/dialogs/dlg_login_prompt.cpp
|
|
src/interface/widgets/dialogs/dlg_manage_sets.cpp
|
|
src/interface/widgets/dialogs/dlg_my_reports.cpp
|
|
src/interface/widgets/dialogs/dlg_register.cpp
|
|
src/interface/widgets/dialogs/dlg_report_user.cpp
|
|
src/interface/widgets/dialogs/dlg_select_set_for_cards.cpp
|
|
src/interface/widgets/dialogs/dlg_share_deck.cpp
|
|
src/interface/widgets/dialogs/dlg_shared_decks_preview.cpp
|
|
src/interface/widgets/dialogs/dlg_settings.cpp
|
|
src/interface/widgets/dialogs/dlg_startup_card_check.cpp
|
|
src/interface/widgets/dialogs/dlg_tip_of_the_day.cpp
|
|
src/interface/widgets/dialogs/dlg_update.cpp
|
|
src/interface/widgets/dialogs/dlg_view_log.cpp
|
|
src/interface/widgets/dialogs/override_printing_warning.cpp
|
|
src/interface/widgets/dialogs/tip_of_the_day.cpp
|
|
src/interface/widgets/deck_share/deck_share_utils.cpp
|
|
src/interface/widgets/deck_share/shared_deck_preview_widget.cpp
|
|
src/interface/widgets/deck_share/share_bar_widget.cpp
|
|
src/filters/deck_filter_string.cpp
|
|
src/filters/filter_builder.cpp
|
|
src/filters/filter_tree_model.cpp
|
|
src/filters/syntax_help.cpp
|
|
src/game/abstract_game.cpp
|
|
src/game/arrow_registry.cpp
|
|
src/game_graphics/board/abstract_card_drag_item.cpp
|
|
src/game_graphics/board/abstract_card_item.cpp
|
|
src/game_graphics/board/abstract_counter.cpp
|
|
src/game/board/arrow_data.cpp
|
|
src/game_graphics/board/arrow_item.cpp
|
|
src/game_graphics/board/arrow_target.cpp
|
|
src/game_graphics/board/card_drag_item.cpp
|
|
src/game_graphics/board/card_item.cpp
|
|
src/game/board/card_list.cpp
|
|
src/game/board/card_state.cpp
|
|
src/game_graphics/board/counter_general.cpp
|
|
src/game/board/counter_state.cpp
|
|
src/game_graphics/board/translate_counter_name.cpp
|
|
src/game_graphics/deckview/deck_view.cpp
|
|
src/game_graphics/deckview/deck_view_container.cpp
|
|
src/game_graphics/deckview/tabbed_deck_view_container.cpp
|
|
src/game_graphics/dialogs/dlg_create_token.cpp
|
|
src/game_graphics/dialogs/dlg_move_top_cards_until.cpp
|
|
src/game_graphics/dialogs/dlg_roll_dice.cpp
|
|
src/game/game.cpp
|
|
src/game/game_event_handler.cpp
|
|
src/game/game_meta_info.cpp
|
|
src/game_graphics/game_scene.cpp
|
|
src/game/game_state.cpp
|
|
src/game_graphics/game_view.cpp
|
|
src/game_graphics/hand_counter.cpp
|
|
src/game_graphics/log/message_log_widget.cpp
|
|
src/game/phase.cpp
|
|
src/game_graphics/phases_toolbar.cpp
|
|
src/game_graphics/player/menu/card_menu.cpp
|
|
src/game_graphics/player/menu/custom_zone_menu.cpp
|
|
src/game_graphics/player/menu/grave_menu.cpp
|
|
src/game_graphics/player/menu/hand_menu.cpp
|
|
src/game_graphics/player/menu/library_menu.cpp
|
|
src/game_graphics/player/menu/move_menu.cpp
|
|
src/game_graphics/player/menu/player_menu.cpp
|
|
src/game_graphics/player/menu/pt_menu.cpp
|
|
src/game_graphics/player/menu/rfg_menu.cpp
|
|
src/game_graphics/player/menu/say_menu.cpp
|
|
src/game_graphics/player/menu/sideboard_menu.cpp
|
|
src/game_graphics/player/menu/tally_menu.cpp
|
|
src/game_graphics/player/menu/utility_menu.cpp
|
|
src/game_graphics/tally/stats_tally.cpp
|
|
src/game_graphics/tally/subtype_tally.cpp
|
|
src/game_graphics/tally/tally.cpp
|
|
src/game/player/player_actions.cpp
|
|
src/game_graphics/player/player_area.cpp
|
|
src/game_graphics/player/player_dialogs.cpp
|
|
src/game/player/player_event_handler.cpp
|
|
src/game_graphics/player/player_graphics_item.cpp
|
|
src/game/player/player_info.cpp
|
|
src/game_graphics/player/player_list_widget.cpp
|
|
src/game/player/player_logic.cpp
|
|
src/game/player/player_manager.cpp
|
|
src/game_graphics/player/player_target.cpp
|
|
src/game/replay.cpp
|
|
src/game/zones/card_zone_logic.cpp
|
|
src/game/zones/hand_zone_logic.cpp
|
|
src/game/zones/pile_zone_logic.cpp
|
|
src/game/zones/stack_zone_logic.cpp
|
|
src/game/zones/table_zone_logic.cpp
|
|
src/game/zones/view_zone_logic.cpp
|
|
src/game_graphics/zones/card_zone.cpp
|
|
src/game_graphics/zones/hand_zone.cpp
|
|
src/game_graphics/zones/pile_zone.cpp
|
|
src/game_graphics/zones/select_zone.cpp
|
|
src/game_graphics/zones/stack_zone.cpp
|
|
src/game_graphics/zones/table_zone.cpp
|
|
src/game_graphics/zones/view_zone.cpp
|
|
src/game_graphics/zones/view_zone_widget.cpp
|
|
src/game_graphics/board/abstract_graphics_item.cpp
|
|
src/interface/card_database_update/card_database_update_status_bar.cpp
|
|
src/interface/card_database_update/card_database_update_status_bar.h
|
|
src/interface/card_database_update/card_update_progress.cpp
|
|
src/interface/card_database_update/card_update_progress.h
|
|
src/interface/card_picture_loader/card_picture_loader.cpp
|
|
src/interface/card_picture_loader/card_picture_loader_local.cpp
|
|
src/interface/card_picture_loader/card_picture_loader_request_status_display_widget.cpp
|
|
src/interface/card_picture_loader/card_picture_loader_status_bar.cpp
|
|
src/interface/card_picture_loader/card_picture_loader_worker.cpp
|
|
src/interface/card_picture_loader/card_picture_loader_worker_work.cpp
|
|
src/interface/card_picture_loader/card_picture_to_load.cpp
|
|
src/interface/intents/intent.cpp
|
|
src/interface/intents/intent.h
|
|
src/interface/intents/intent_open_local_deck.cpp
|
|
src/interface/intents/intent_open_local_deck.h
|
|
src/interface/intents/intent_wait_for_database_load.cpp
|
|
src/interface/intents/intent_wait_for_database_load.h
|
|
src/interface/layouts/flow_layout.cpp
|
|
src/interface/layouts/overlap_layout.cpp
|
|
src/interface/widgets/utility/card_completer_delegate.cpp
|
|
src/interface/widgets/utility/card_completer_styler.cpp
|
|
src/interface/widgets/utility/completer_utils.cpp
|
|
src/interface/widgets/utility/line_edit_completer.cpp
|
|
src/interface/widgets/utility/reversed_completer_model.cpp
|
|
src/interface/pixel_map_generator.cpp
|
|
src/interface/theme_config.cpp
|
|
src/interface/theme_manager.cpp
|
|
src/interface/palette_editor/color_button.cpp
|
|
src/interface/palette_editor/palette_generator.cpp
|
|
src/interface/palette_editor/quick_setup_panel.cpp
|
|
src/interface/palette_editor/palette_grid_widget.cpp
|
|
src/interface/palette_editor/palette_editor_dialog.cpp
|
|
src/interface/widgets/cards/additional_info/color_identity_widget.cpp
|
|
src/interface/widgets/cards/additional_info/deck_color_identity.cpp
|
|
src/interface/widgets/cards/additional_info/mana_cost_widget.cpp
|
|
src/interface/widgets/cards/additional_info/mana_symbol_widget.cpp
|
|
src/interface/widgets/cards/art_crop_attribution.cpp
|
|
src/interface/widgets/cards/card_art_utils.cpp
|
|
src/interface/widgets/cards/card_group_display_widgets/card_group_display_widget.cpp
|
|
src/interface/widgets/cards/card_group_display_widgets/flat_card_group_display_widget.cpp
|
|
src/interface/widgets/cards/card_group_display_widgets/overlapped_card_group_display_widget.cpp
|
|
src/interface/widgets/cards/card_info_display_widget.cpp
|
|
src/interface/widgets/cards/card_info_frame_widget.cpp
|
|
src/interface/widgets/cards/card_info_picture_art_crop_widget.cpp
|
|
src/interface/widgets/cards/card_info_picture_enlarged_widget.cpp
|
|
src/interface/widgets/cards/card_info_picture_widget.cpp
|
|
src/interface/widgets/cards/card_info_picture_with_text_overlay_widget.cpp
|
|
src/interface/widgets/cards/card_info_text_widget.cpp
|
|
src/interface/widgets/cards/card_size_widget.cpp
|
|
src/interface/widgets/cards/deck_card_zone_display_widget.cpp
|
|
src/interface/widgets/cards/deck_preview_card_picture_widget.cpp
|
|
src/interface/widgets/deck_analytics/abstract_analytics_panel_widget.cpp
|
|
src/interface/widgets/deck_analytics/add_analytics_panel_dialog.cpp
|
|
src/interface/widgets/deck_analytics/analytics_panel_widget_factory.cpp
|
|
src/interface/widgets/deck_analytics/analytics_panel_widget_registrar.cpp
|
|
src/interface/widgets/deck_analytics/deck_analytics_widget.cpp
|
|
src/interface/widgets/deck_analytics/deck_list_statistics_analyzer.cpp
|
|
src/interface/widgets/deck_analytics/resizable_panel.cpp
|
|
src/interface/widgets/deck_analytics/analyzer_modules/draw_probability/draw_probability_config.cpp
|
|
src/interface/widgets/deck_analytics/analyzer_modules/draw_probability/draw_probability_config_dialog.cpp
|
|
src/interface/widgets/deck_analytics/analyzer_modules/draw_probability/draw_probability_widget.cpp
|
|
src/interface/widgets/deck_analytics/analyzer_modules/mana_base/mana_base_config.cpp
|
|
src/interface/widgets/deck_analytics/analyzer_modules/mana_base/mana_base_config_dialog.cpp
|
|
src/interface/widgets/deck_analytics/analyzer_modules/mana_base/mana_base_widget.cpp
|
|
src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_config.cpp
|
|
src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_config_dialog.cpp
|
|
src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_widget.cpp
|
|
src/interface/widgets/deck_analytics/analyzer_modules/mana_devotion/mana_devotion_config.cpp
|
|
src/interface/widgets/deck_analytics/analyzer_modules/mana_devotion/mana_devotion_config_dialog.cpp
|
|
src/interface/widgets/deck_analytics/analyzer_modules/mana_devotion/mana_devotion_widget.cpp
|
|
src/interface/widgets/deck_analytics/analyzer_modules/mana_distribution/mana_distribution_config.cpp
|
|
src/interface/widgets/deck_analytics/analyzer_modules/mana_distribution/mana_distribution_config_dialog.cpp
|
|
src/interface/widgets/deck_analytics/analyzer_modules/mana_distribution/mana_distribution_widget.cpp
|
|
src/interface/widgets/deck_analytics/analyzer_modules/mana_distribution/mana_distribution_single_display_widget.cpp
|
|
src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_total_widget.cpp
|
|
src/interface/widgets/deck_analytics/analyzer_modules/mana_curve/mana_curve_category_widget.cpp
|
|
src/interface/widgets/deck_editor/card_database_view.cpp
|
|
src/interface/widgets/deck_editor/deck_list_history_manager_widget.cpp
|
|
src/interface/widgets/deck_editor/deck_editor_card_database_dock_widget.cpp
|
|
src/interface/widgets/deck_editor/deck_editor_card_info_dock_widget.cpp
|
|
src/interface/widgets/deck_editor/deck_editor_database_display_widget.cpp
|
|
src/interface/widgets/deck_editor/deck_editor_deck_dock_widget.cpp
|
|
src/interface/widgets/deck_editor/deck_editor_filter_dock_widget.cpp
|
|
src/interface/widgets/deck_editor/deck_editor_printing_selector_dock_widget.cpp
|
|
src/interface/widgets/deck_editor/deck_list_style_proxy.cpp
|
|
src/interface/widgets/deck_editor/deck_state_manager.cpp
|
|
src/interface/widgets/deck_editor/deck_zone_dialog.cpp
|
|
src/interface/widgets/deck_editor/printing_disabled_info_widget.cpp
|
|
src/interface/widgets/general/background_sources.cpp
|
|
src/interface/widgets/general/display/background_plate_widget.cpp
|
|
src/interface/widgets/general/display/banner_widget.cpp
|
|
src/interface/widgets/general/display/dynamic_font_size_label.cpp
|
|
src/interface/widgets/general/display/dynamic_font_size_push_button.cpp
|
|
src/interface/widgets/general/display/labeled_input.cpp
|
|
src/interface/widgets/general/display/shadow_background_label.cpp
|
|
src/interface/widgets/general/display/charts/bars/bar_widget.cpp
|
|
src/interface/widgets/general/display/charts/bars/color_bar.cpp
|
|
src/interface/widgets/general/display/charts/bars/percent_bar_widget.cpp
|
|
src/interface/widgets/general/display/charts/bars/bar_chart_widget.cpp
|
|
src/interface/widgets/general/display/charts/bars/bar_chart_background_widget.cpp
|
|
src/interface/widgets/general/display/charts/bars/segmented_bar_widget.cpp
|
|
src/interface/widgets/general/display/charts/pies/color_pie.cpp
|
|
src/interface/widgets/general/home_styled_button.cpp
|
|
src/interface/widgets/general/home_tab_button_color.h
|
|
src/interface/widgets/general/home_widget.cpp
|
|
src/interface/widgets/general/layout_containers/flow_widget.cpp
|
|
src/interface/widgets/general/layout_containers/overlap_control_widget.cpp
|
|
src/interface/widgets/general/layout_containers/overlap_widget.cpp
|
|
src/interface/widgets/menus/deck_editor_menu.cpp
|
|
src/interface/widgets/printing_selector/all_zones_card_amount_widget.cpp
|
|
src/interface/widgets/printing_selector/card_amount_widget.cpp
|
|
src/interface/widgets/printing_selector/printing_selector.cpp
|
|
src/interface/widgets/printing_selector/printing_selector_card_display_widget.cpp
|
|
src/interface/widgets/printing_selector/printing_selector_card_overlay_widget.cpp
|
|
src/interface/widgets/printing_selector/printing_selector_placeholder_widget.cpp
|
|
src/interface/widgets/printing_selector/printing_selector_card_search_widget.cpp
|
|
src/interface/widgets/printing_selector/printing_selector_card_selection_widget.cpp
|
|
src/interface/widgets/printing_selector/printing_selector_card_sorting_widget.cpp
|
|
src/interface/widgets/printing_selector/set_name_and_collectors_number_display_widget.cpp
|
|
src/interface/widgets/playmat/playmat_collection_dialog.cpp
|
|
src/interface/widgets/playmat/playmat_collection_dialog.h
|
|
src/interface/widgets/playmat/playmat_preview_widget.cpp
|
|
src/interface/widgets/playmat/playmat_settings_dialog.cpp
|
|
src/interface/widgets/quick_settings/settings_button_widget.cpp
|
|
src/interface/widgets/quick_settings/settings_popup_widget.cpp
|
|
src/interface/widgets/replay/replay_manager.cpp
|
|
src/interface/widgets/replay/replay_quick_settings_widget.cpp
|
|
src/interface/widgets/replay/replay_timeline_widget.cpp
|
|
src/interface/widgets/replay/replay_widget.cpp
|
|
src/interface/widgets/server/chat_view/chat_view.cpp
|
|
src/interface/widgets/server/game_filter_configs.cpp
|
|
src/interface/widgets/server/game_link.cpp
|
|
src/interface/widgets/server/game_selector.cpp
|
|
src/interface/widgets/server/game_selector_quick_filter_toolbar.cpp
|
|
src/interface/widgets/server/games_model.cpp
|
|
src/interface/widgets/server/handle_public_servers.cpp
|
|
src/interface/widgets/server/remote/remote_decklist_tree_widget.cpp
|
|
src/interface/widgets/server/remote/remote_replay_list_tree_widget.cpp
|
|
src/interface/widgets/server/user/user_avatar_provider.cpp
|
|
src/interface/widgets/server/user/user_card_art_provider.cpp
|
|
src/interface/widgets/server/user/user_card_settings_dialog.cpp
|
|
src/interface/widgets/server/user/user_context_menu.cpp
|
|
src/interface/widgets/server/user/user_info_box.cpp
|
|
src/interface/widgets/server/user/user_info_connection.cpp
|
|
src/interface/widgets/server/user/user_list_dialog.cpp
|
|
src/interface/widgets/server/user/user_list_manager.cpp
|
|
src/interface/widgets/server/user/user_list_painter.cpp
|
|
src/interface/widgets/server/user/user_list_panel_widget.cpp
|
|
src/interface/widgets/server/user/user_list_widget.cpp
|
|
src/interface/widgets/settings_page/abstract_settings_page.cpp
|
|
src/interface/widgets/settings_page/appearance_settings_page.cpp
|
|
src/interface/widgets/settings_page/deck_editor_settings_page.cpp
|
|
src/interface/widgets/settings_page/general_settings_page.cpp
|
|
src/interface/widgets/settings_page/messages_settings_page.cpp
|
|
src/interface/widgets/settings_page/settings_search_delegate.cpp
|
|
src/interface/widgets/settings_page/settings_search_model.cpp
|
|
src/interface/widgets/settings_page/shortcut_settings_page.cpp
|
|
src/interface/widgets/settings_page/sound_settings_page.cpp
|
|
src/interface/widgets/settings_page/storage_settings_page.cpp
|
|
src/interface/widgets/settings_page/user_interface_settings_page.cpp
|
|
src/interface/widgets/utility/custom_line_edit.cpp
|
|
src/interface/widgets/utility/get_text_with_max.cpp
|
|
src/interface/widgets/utility/report_utils.cpp
|
|
src/interface/widgets/utility/report_utils.h
|
|
src/interface/widgets/utility/sequence_edit.cpp
|
|
src/interface/widgets/utility/visibility_change_listener.cpp
|
|
src/interface/widgets/utility/visibility_change_listener.h
|
|
src/interface/widgets/visual_database_display/visual_database_display_color_filter_widget.cpp
|
|
src/interface/widgets/visual_database_display/visual_database_display_filter_save_load_widget.cpp
|
|
src/interface/widgets/visual_database_display/visual_database_display_filter_toolbar_widget.cpp
|
|
src/interface/widgets/visual_database_display/visual_database_display_format_legality_filter_widget.cpp
|
|
src/interface/widgets/visual_database_display/visual_database_display_main_type_filter_widget.cpp
|
|
src/interface/widgets/visual_database_display/visual_database_display_name_filter_widget.cpp
|
|
src/interface/widgets/visual_database_display/visual_database_display_set_filter_widget.cpp
|
|
src/interface/widgets/visual_database_display/visual_database_display_sub_type_filter_widget.cpp
|
|
src/interface/widgets/visual_database_display/visual_database_display_widget.cpp
|
|
src/interface/widgets/visual_database_display/visual_database_filter_display_widget.cpp
|
|
src/interface/widgets/visual_deck_editor/visual_deck_display_options_widget.cpp
|
|
src/interface/widgets/visual_deck_editor/visual_deck_editor_placeholder_widget.cpp
|
|
src/interface/widgets/visual_deck_editor/visual_deck_editor_sample_hand_widget.cpp
|
|
src/interface/widgets/visual_deck_editor/visual_deck_editor_widget.cpp
|
|
src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_color_identity_filter_widget.cpp
|
|
src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_deck_tags_display_widget.cpp
|
|
src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_tag_addition_widget.cpp
|
|
src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_tag_dialog.cpp
|
|
src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_tag_display_widget.cpp
|
|
src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_tag_item_widget.cpp
|
|
src/interface/widgets/visual_deck_storage/deck_preview/deck_preview_widget.cpp
|
|
src/interface/widgets/visual_deck_storage/deck_preview/public_deck_preview_widget.cpp
|
|
src/interface/widgets/visual_deck_storage/remote_public_decks_model.cpp
|
|
src/interface/widgets/visual_deck_storage/visual_deck_storage_folder_display_widget.cpp
|
|
src/interface/widgets/visual_deck_storage/visual_deck_storage_model.cpp
|
|
src/interface/widgets/visual_deck_storage/visual_deck_storage_quick_settings_widget.cpp
|
|
src/interface/widgets/visual_deck_storage/visual_deck_storage_search_widget.cpp
|
|
src/interface/widgets/visual_deck_storage/visual_deck_storage_sort_filter_proxy_model.cpp
|
|
src/interface/widgets/visual_deck_storage/visual_deck_storage_sort_widget.cpp
|
|
src/interface/widgets/visual_deck_storage/visual_deck_storage_tag_filter_widget.cpp
|
|
src/interface/widgets/visual_deck_storage/visual_deck_storage_widget.cpp
|
|
src/interface/window_main.cpp
|
|
src/main.cpp
|
|
src/single_instance_manager.cpp
|
|
src/interface/widgets/tabs/abstract_tab_deck_editor.cpp
|
|
src/interface/widgets/tabs/api/archidekt/tab_archidekt.cpp
|
|
src/interface/widgets/tabs/api/archidekt/api_response/archidekt_deck_listing_api_response.cpp
|
|
src/interface/widgets/tabs/api/archidekt/api_response/archidekt_formats.h
|
|
src/interface/widgets/tabs/api/archidekt/api_response/card/archidekt_api_response_card.cpp
|
|
src/interface/widgets/tabs/api/archidekt/api_response/card/archidekt_api_response_card_entry.cpp
|
|
src/interface/widgets/tabs/api/archidekt/api_response/card/archidekt_api_response_edition.cpp
|
|
src/interface/widgets/tabs/api/archidekt/api_response/deck/archidekt_api_response_deck.cpp
|
|
src/interface/widgets/tabs/api/archidekt/api_response/deck/archidekt_api_response_deck_category.cpp
|
|
src/interface/widgets/tabs/api/archidekt/api_response/deck_listings/archidekt_api_response_deck_listing_container.cpp
|
|
src/interface/widgets/tabs/api/archidekt/api_response/deck_listings/archidekt_api_response_deck_owner.cpp
|
|
src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_display_widget.cpp
|
|
src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_entry_display_widget.cpp
|
|
src/interface/widgets/tabs/api/archidekt/display/archidekt_api_response_deck_listings_display_widget.cpp
|
|
src/interface/widgets/tabs/api/archidekt/display/archidekt_deck_preview_image_display_widget.cpp
|
|
src/interface/widgets/tabs/api/commander_spellbook/api_response/card_in_deck_request.cpp
|
|
src/interface/widgets/tabs/api/commander_spellbook/api_response/commander_spellbook_deck_request.cpp
|
|
src/interface/widgets/tabs/api/commander_spellbook/api_response/commander_spellbook_card_result.cpp
|
|
src/interface/widgets/tabs/api/commander_spellbook/api_response/commander_spellbook_variant_result.cpp
|
|
src/interface/widgets/tabs/api/commander_spellbook/api_response/commander_spellbook_estimate_bracket_result.cpp
|
|
src/interface/widgets/tabs/api/commander_spellbook/commander_spellbook_bracket_explainer.cpp
|
|
src/interface/widgets/tabs/api/commander_spellbook/commander_spellbook_api_accessor.cpp
|
|
src/interface/widgets/tabs/api/edhrec/api_response/archidekt_links/edhrec_api_response_archidekt_links.cpp
|
|
src/interface/widgets/tabs/api/edhrec/api_response/average_deck/edhrec_average_deck_api_response.cpp
|
|
src/interface/widgets/tabs/api/edhrec/api_response/average_deck/edhrec_deck_api_response.cpp
|
|
src/interface/widgets/tabs/api/edhrec/api_response/card_prices/edhrec_api_response_card_prices.cpp
|
|
src/interface/widgets/tabs/api/edhrec/api_response/cards/edhrec_api_response_card_container.cpp
|
|
src/interface/widgets/tabs/api/edhrec/api_response/cards/edhrec_api_response_card_details.cpp
|
|
src/interface/widgets/tabs/api/edhrec/api_response/cards/edhrec_api_response_card_list.cpp
|
|
src/interface/widgets/tabs/api/edhrec/api_response/cards/edhrec_commander_api_response_commander_details.cpp
|
|
src/interface/widgets/tabs/api/edhrec/api_response/commander/edhrec_commander_api_response.cpp
|
|
src/interface/widgets/tabs/api/edhrec/api_response/commander/edhrec_commander_api_response_average_deck_statistics.cpp
|
|
src/interface/widgets/tabs/api/edhrec/api_response/top_cards/edhrec_top_cards_api_response.cpp
|
|
src/interface/widgets/tabs/api/edhrec/api_response/top_commanders/edhrec_top_commanders_api_response.cpp
|
|
src/interface/widgets/tabs/api/edhrec/api_response/top_tags/edhrec_top_tags_api_response.cpp
|
|
src/interface/widgets/tabs/api/edhrec/display/card_prices/edhrec_api_response_card_prices_display_widget.cpp
|
|
src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_details_display_widget.cpp
|
|
src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_inclusion_display_widget.cpp
|
|
src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_list_display_widget.cpp
|
|
src/interface/widgets/tabs/api/edhrec/display/cards/edhrec_api_response_card_synergy_display_widget.cpp
|
|
src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_api_response_commander_details_display_widget.cpp
|
|
src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_display_widget.cpp
|
|
src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_navigation_widget.cpp
|
|
src/interface/widgets/tabs/api/edhrec/display/top_cards/edhrec_top_cards_api_response_display_widget.cpp
|
|
src/interface/widgets/tabs/api/edhrec/display/top_commander/edhrec_top_commanders_api_response_display_widget.cpp
|
|
src/interface/widgets/tabs/api/edhrec/display/top_tags/edhrec_top_tags_api_response_display_widget.cpp
|
|
src/interface/widgets/tabs/api/edhrec/tab_edhrec.cpp
|
|
src/interface/widgets/tabs/api/edhrec/tab_edhrec_main.cpp
|
|
src/interface/widgets/tabs/tab.cpp
|
|
src/interface/widgets/tabs/tab_account.cpp
|
|
src/interface/widgets/tabs/tab_admin.cpp
|
|
src/interface/widgets/tabs/tab_card_art_rules.cpp
|
|
src/interface/widgets/tabs/tab_deck_editor.cpp
|
|
src/interface/widgets/tabs/tab_deck_storage.cpp
|
|
src/interface/widgets/tabs/tab_developer.cpp
|
|
src/interface/widgets/tabs/tab_game.cpp
|
|
src/interface/widgets/tabs/tab_home.cpp
|
|
src/interface/widgets/tabs/tab_logs.cpp
|
|
src/interface/widgets/tabs/tab_message.cpp
|
|
src/interface/widgets/tabs/tab_moderation.cpp
|
|
src/interface/widgets/tabs/tab_public_decks.cpp
|
|
src/interface/widgets/tabs/tab_report.cpp
|
|
src/interface/widgets/tabs/tab_replays.cpp
|
|
src/interface/widgets/tabs/tab_room.cpp
|
|
src/interface/widgets/tabs/tab_server.cpp
|
|
src/interface/widgets/tabs/tab_supervisor.cpp
|
|
src/interface/widgets/tabs/tab_visual_database_display.cpp
|
|
src/interface/widgets/tabs/visual_deck_editor/tab_deck_editor_visual.cpp
|
|
src/interface/widgets/tabs/visual_deck_editor/tab_deck_editor_visual_tab_widget.cpp
|
|
src/interface/widgets/tabs/visual_deck_storage/tab_deck_storage_visual.cpp
|
|
src/interface/key_signals.cpp
|
|
src/interface/logger.cpp
|
|
src/interface/widgets/tabs/api/commander_spellbook/commander_bracket_service.cpp
|
|
src/interface/widgets/tabs/api/commander_spellbook/commander_bracket_widget.cpp
|
|
src/interface/widgets/tabs/api/commander_spellbook/handle_commander_brackets.cpp
|
|
src/interface/widgets/onboarding/banner_shader_config.h
|
|
src/interface/widgets/onboarding/brand_colors.h
|
|
src/interface/widgets/onboarding/first_run_wizard.cpp
|
|
src/interface/widgets/onboarding/first_run_wizard.h
|
|
src/interface/widgets/onboarding/first_run_wizard_page.cpp
|
|
src/interface/widgets/onboarding/first_run_wizard_page.h
|
|
src/interface/widgets/onboarding/pages/account_setup_page.cpp
|
|
src/interface/widgets/onboarding/pages/account_setup_page.h
|
|
src/interface/widgets/onboarding/pages/card_database_setup_page.cpp
|
|
src/interface/widgets/onboarding/pages/card_database_setup_page.h
|
|
src/interface/widgets/onboarding/pages/finish_page.cpp
|
|
src/interface/widgets/onboarding/pages/finish_page.h
|
|
src/interface/widgets/onboarding/pages/preferences_setup_page.cpp
|
|
src/interface/widgets/onboarding/pages/preferences_setup_page.h
|
|
src/interface/widgets/onboarding/pages/theme_setup_page.cpp
|
|
src/interface/widgets/onboarding/pages/theme_setup_page.h
|
|
src/interface/widgets/onboarding/pages/welcome_page.cpp
|
|
src/interface/widgets/onboarding/pages/welcome_page.h
|
|
src/interface/widgets/onboarding/shader_banner_widget.cpp
|
|
src/interface/widgets/onboarding/shader_banner_widget.h
|
|
src/interface/widgets/onboarding/step_indicator_widget.cpp
|
|
src/interface/widgets/onboarding/step_indicator_widget.h
|
|
src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_bracket_navigation_widget.cpp
|
|
src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_bracket_navigation_widget.h
|
|
src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_budget_navigation_widget.cpp
|
|
src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_budget_navigation_widget.h
|
|
src/interface/widgets/utility/compact_push_button.cpp
|
|
src/interface/widgets/utility/compact_push_button.h
|
|
src/single_instance_manager.h
|
|
src/client/url_scheme_event_filter.h
|
|
src/interface/intents/intent_connect_to_server.cpp
|
|
src/interface/intents/intent_connect_to_server.h
|
|
src/interface/intents/intent_disconnect_from_server.cpp
|
|
src/interface/intents/intent_disconnect_from_server.h
|
|
src/interface/intents/intent_join_server_game.cpp
|
|
src/interface/intents/intent_join_server_game.h
|
|
src/interface/intents/intent_join_server_room.cpp
|
|
src/interface/intents/intent_join_server_room.h
|
|
src/interface/intents/intent_login.cpp
|
|
src/interface/intents/intent_login.h
|
|
src/interface/intents/intent_open_server_room_by_name.cpp
|
|
src/interface/intents/intent_open_server_room_by_name.h
|
|
src/interface/intents/intent_open_shared_deck.cpp
|
|
src/interface/intents/intent_open_shared_deck.h
|
|
src/interface/intents/url_parser.cpp
|
|
src/interface/intents/url_parser.h
|
|
src/interface/widgets/server/user/user_info_popup.cpp
|
|
src/interface/widgets/server/user/user_info_popup.h
|
|
)
|
|
|
|
add_subdirectory(sounds)
|
|
add_subdirectory(themes)
|
|
configure_file(
|
|
${CMAKE_SOURCE_DIR}/cockatrice/resources/config/qtlogging.ini ${CMAKE_BINARY_DIR}/cockatrice/qtlogging.ini COPYONLY
|
|
)
|
|
|
|
set(cockatrice_RESOURCES cockatrice.qrc)
|
|
|
|
if(UPDATE_TRANSLATIONS)
|
|
# Cockatrice main sources
|
|
file(GLOB_RECURSE translate_cockatrice_SRCS ${CMAKE_SOURCE_DIR}/cockatrice/src/*.cpp
|
|
${CMAKE_SOURCE_DIR}/cockatrice/src/*.h
|
|
)
|
|
|
|
# All libcockatrice_* libraries (recursively)
|
|
file(GLOB_RECURSE translate_lib_SRCS ${CMAKE_SOURCE_DIR}/libcockatrice_*/**/*.cpp
|
|
${CMAKE_SOURCE_DIR}/libcockatrice_*/**/*.h
|
|
)
|
|
|
|
# Combine all sources for translation
|
|
set(translate_SRCS ${translate_cockatrice_SRCS} ${translate_lib_SRCS})
|
|
|
|
set(cockatrice_TS "${CMAKE_CURRENT_SOURCE_DIR}/cockatrice_en@source.ts")
|
|
else()
|
|
file(GLOB cockatrice_TS "${CMAKE_CURRENT_SOURCE_DIR}/translations/*.ts")
|
|
endif()
|
|
|
|
if(WIN32)
|
|
set(cockatrice_SOURCES ${cockatrice_SOURCES} cockatrice.rc)
|
|
endif(WIN32)
|
|
|
|
if(APPLE)
|
|
set(MACOSX_BUNDLE_ICON_FILE appicon.icns)
|
|
set_source_files_properties(
|
|
${CMAKE_CURRENT_SOURCE_DIR}/resources/appicon.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources
|
|
)
|
|
set(cockatrice_SOURCES ${cockatrice_SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/resources/appicon.icns)
|
|
endif(APPLE)
|
|
|
|
qt6_add_resources(cockatrice_RESOURCES_RCC ${cockatrice_RESOURCES})
|
|
|
|
# Declare path variables
|
|
set(ICONDIR
|
|
share/icons
|
|
CACHE STRING "icon dir"
|
|
)
|
|
set(DESKTOPDIR
|
|
share/applications
|
|
CACHE STRING "desktop file destination"
|
|
)
|
|
|
|
set(MIMEDIR
|
|
share/mime/packages
|
|
CACHE STRING "mime file destination"
|
|
)
|
|
|
|
set(COCKATRICE_MAC_QM_INSTALL_DIR "cockatrice.app/Contents/Resources/translations")
|
|
set(COCKATRICE_UNIX_QM_INSTALL_DIR "share/cockatrice/translations")
|
|
set(COCKATRICE_WIN32_QM_INSTALL_DIR "translations")
|
|
|
|
qt6_add_executable(
|
|
cockatrice
|
|
WIN32
|
|
MACOSX_BUNDLE
|
|
${cockatrice_SOURCES}
|
|
${cockatrice_RESOURCES_RCC}
|
|
${cockatrice_MOC_SRCS}
|
|
MANUAL_FINALIZATION
|
|
)
|
|
|
|
target_precompile_headers(cockatrice PRIVATE "${CMAKE_SOURCE_DIR}/cmake/pch/qtwidgets_pch.h")
|
|
|
|
qt6_add_shaders(
|
|
cockatrice
|
|
"onboarding_shaders"
|
|
PREFIX
|
|
"/onboarding/shaders"
|
|
BASE
|
|
"src/interface/widgets/onboarding/shaders"
|
|
FILES
|
|
src/interface/widgets/onboarding/shaders/brand_banner.frag
|
|
src/interface/widgets/onboarding/shaders/brand_plate.frag
|
|
)
|
|
|
|
qt6_add_resources(
|
|
cockatrice
|
|
"onboarding_qml"
|
|
PREFIX
|
|
"/onboarding/qml"
|
|
BASE
|
|
"src/interface/widgets/onboarding/qml"
|
|
FILES
|
|
src/interface/widgets/onboarding/qml/BrandBanner.qml
|
|
)
|
|
|
|
target_link_libraries(
|
|
cockatrice
|
|
PUBLIC libcockatrice_card
|
|
libcockatrice_deck_list
|
|
libcockatrice_filters
|
|
libcockatrice_utility
|
|
libcockatrice_network
|
|
libcockatrice_models
|
|
libcockatrice_rng
|
|
libcockatrice_settings
|
|
${COCKATRICE_QT_MODULES}
|
|
)
|
|
|
|
if(UNIX)
|
|
if(APPLE)
|
|
set(MACOSX_BUNDLE_INFO_STRING "${PROJECT_NAME}")
|
|
set(MACOSX_BUNDLE_GUI_IDENTIFIER "com.cockatrice.${PROJECT_NAME}")
|
|
set(MACOSX_BUNDLE_LONG_VERSION_STRING "${PROJECT_NAME}-${PROJECT_VERSION}")
|
|
set(MACOSX_BUNDLE_BUNDLE_NAME "${PROJECT_NAME}")
|
|
set(MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION})
|
|
set(MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION})
|
|
|
|
set_target_properties(cockatrice PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_SOURCE_DIR}/cmake/Info.plist)
|
|
|
|
install(TARGETS cockatrice BUNDLE DESTINATION ./)
|
|
else()
|
|
# Assume linux
|
|
install(TARGETS cockatrice RUNTIME DESTINATION bin/)
|
|
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/resources/cockatrice.png DESTINATION ${ICONDIR}/hicolor/48x48/apps)
|
|
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/resources/cockatrice.svg DESTINATION ${ICONDIR}/hicolor/scalable/apps)
|
|
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/cockatrice.desktop DESTINATION ${DESKTOPDIR})
|
|
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/cockatrice-cod.xml DESTINATION ${MIMEDIR})
|
|
|
|
# Refresh the freedesktop databases so the file associations and scheme
|
|
# handler register without requiring the user to run them manually. The
|
|
# tools may be missing on minimal systems; that is fine, packaging systems
|
|
# usually refresh these databases through their own triggers.
|
|
find_program(UPDATE_MIME_DATABASE update-mime-database)
|
|
if(UPDATE_MIME_DATABASE)
|
|
install(CODE "execute_process(COMMAND \"${UPDATE_MIME_DATABASE}\" \"${CMAKE_INSTALL_PREFIX}/share/mime\")")
|
|
endif()
|
|
|
|
find_program(UPDATE_DESKTOP_DATABASE update-desktop-database)
|
|
if(UPDATE_DESKTOP_DATABASE)
|
|
install(
|
|
CODE "execute_process(COMMAND \"${UPDATE_DESKTOP_DATABASE}\" \"${CMAKE_INSTALL_PREFIX}/share/applications\")"
|
|
)
|
|
endif()
|
|
endif()
|
|
elseif(WIN32)
|
|
install(TARGETS cockatrice RUNTIME DESTINATION ./)
|
|
endif()
|
|
|
|
if(APPLE)
|
|
# these needs to be relative to CMAKE_INSTALL_PREFIX
|
|
set(plugin_dest_dir cockatrice.app/Contents/Plugins)
|
|
set(qtconf_dest_dir cockatrice.app/Contents/Resources)
|
|
|
|
# Qt plugins: audio, iconengines, imageformats, multimedia, platforms, printsupport, styles, tls
|
|
install(
|
|
DIRECTORY "${QT_PLUGINS_DIR}/"
|
|
DESTINATION ${plugin_dest_dir}
|
|
COMPONENT Runtime
|
|
FILES_MATCHING
|
|
PATTERN "*.dSYM" EXCLUDE
|
|
PATTERN "*_debug.dylib" EXCLUDE
|
|
PATTERN "audio/*.dylib"
|
|
PATTERN "iconengines/*.dylib"
|
|
PATTERN "imageformats/*.dylib"
|
|
PATTERN "multimedia/*.dylib"
|
|
PATTERN "platforms/*.dylib"
|
|
PATTERN "printsupport/*.dylib"
|
|
PATTERN "styles/*.dylib"
|
|
PATTERN "tls/*.dylib"
|
|
)
|
|
|
|
install(
|
|
DIRECTORY "${CMAKE_BINARY_DIR}/cockatrice/"
|
|
DESTINATION ${qtconf_dest_dir}/
|
|
FILES_MATCHING
|
|
PATTERN "*.ini"
|
|
)
|
|
|
|
install(
|
|
CODE "
|
|
file(WRITE \"\${CMAKE_INSTALL_PREFIX}/${qtconf_dest_dir}/qt.conf\" \"[Paths]
|
|
Plugins = Plugins
|
|
Translations = Resources/translations
|
|
Data = Resources\")
|
|
"
|
|
COMPONENT Runtime
|
|
)
|
|
|
|
install(
|
|
CODE "
|
|
file(GLOB_RECURSE QTPLUGINS
|
|
\"\${CMAKE_INSTALL_PREFIX}/${plugin_dest_dir}/*.dylib\")
|
|
set(BU_CHMOD_BUNDLE_ITEMS ON)
|
|
include(BundleUtilities)
|
|
fixup_bundle(\"\${CMAKE_INSTALL_PREFIX}/cockatrice.app\" \"\${QTPLUGINS}\" \"${QT_LIBRARY_DIR}\")
|
|
"
|
|
COMPONENT Runtime
|
|
)
|
|
endif()
|
|
|
|
if(WIN32)
|
|
# these needs to be relative to CMAKE_INSTALL_PREFIX
|
|
set(plugin_dest_dir Plugins)
|
|
set(qtconf_dest_dir .)
|
|
|
|
install(
|
|
DIRECTORY "$<TARGET_FILE_DIR:cockatrice>/"
|
|
DESTINATION ./
|
|
FILES_MATCHING
|
|
PATTERN "*.dll"
|
|
PATTERN "*.pdb" EXCLUDE
|
|
PATTERN "*.dir*" EXCLUDE
|
|
PATTERN "*_autogen*" EXCLUDE
|
|
PATTERN "*.tlog*" EXCLUDE
|
|
PATTERN "CMakeFiles*" EXCLUDE
|
|
PATTERN "x64*" EXCLUDE
|
|
PATTERN ".qt*" EXCLUDE
|
|
PATTERN ".qsb*" EXCLUDE
|
|
PATTERN ".lupdate*" EXCLUDE
|
|
)
|
|
|
|
# fixup_bundle further down copies only the DLLs it can find in Cockatrice.exe's
|
|
# import table, and the glob above only sees DLLs that were already copied next
|
|
# to the executable. Qt6::Concurrent is linked but never imported - QtConcurrent::run
|
|
# and QFutureWatcher are header-only in Qt 6 - so neither step ships
|
|
# Qt6Concurrent.dll, even though required-runtime.txt lists it and the
|
|
# Windows package check then fails on a package that is fine to run.
|
|
# Qt6::ShaderTools is skipped for the same reason.
|
|
#
|
|
# Install the runtime of every linked module explicitly. An unused DLL costs a
|
|
# few hundred kilobytes; a missing one is what stops the client starting after
|
|
# an update, and it stays invisible until then.
|
|
foreach(_qt_module IN LISTS COCKATRICE_QT_MODULES)
|
|
get_target_property(_qt_module_type ${_qt_module} TYPE)
|
|
if(_qt_module_type STREQUAL "SHARED_LIBRARY")
|
|
install(FILES "$<TARGET_FILE:${_qt_module}>" DESTINATION ./)
|
|
endif()
|
|
endforeach()
|
|
|
|
install(
|
|
DIRECTORY "${CMAKE_BINARY_DIR}/cockatrice/"
|
|
DESTINATION ./
|
|
FILES_MATCHING
|
|
PATTERN "*.ini"
|
|
PATTERN "CMakeFiles*" EXCLUDE
|
|
PATTERN "*.dir*" EXCLUDE
|
|
PATTERN "*_autogen*" EXCLUDE
|
|
PATTERN "*.tlog*" EXCLUDE
|
|
PATTERN "*.pdb" EXCLUDE
|
|
PATTERN "x64*" EXCLUDE
|
|
PATTERN ".qt*" EXCLUDE
|
|
PATTERN ".qsb*" EXCLUDE
|
|
PATTERN ".lupdate*" EXCLUDE
|
|
)
|
|
|
|
# Qt plugins: audio, iconengines, imageformats, multimedia, platforms, printsupport, styles, tls
|
|
install(
|
|
DIRECTORY "${QT_PLUGINS_DIR}/"
|
|
DESTINATION ${plugin_dest_dir}
|
|
COMPONENT Runtime
|
|
FILES_MATCHING
|
|
PATTERN "audio/qtaudio_wasapi.dll"
|
|
PATTERN "audio/qtaudio_windows.dll"
|
|
PATTERN "iconengines/qsvgicon.dll"
|
|
PATTERN "imageformats/*.dll"
|
|
PATTERN "mediaservice/dsengine.dll"
|
|
PATTERN "mediaservice/wmfengine.dll"
|
|
PATTERN "multimedia/*.dll"
|
|
PATTERN "platforms/qdirect2d.dll"
|
|
PATTERN "platforms/qminimal.dll"
|
|
PATTERN "platforms/qoffscreen.dll"
|
|
PATTERN "platforms/qwindows.dll"
|
|
PATTERN "printsupport/windowsprintersupport.dll"
|
|
PATTERN "styles/qcertonlybackend.dll"
|
|
PATTERN "styles/qopensslbackend.dll"
|
|
PATTERN "styles/qschannelbackend.dll"
|
|
PATTERN "styles/qwindowsvistastyle.dll"
|
|
PATTERN "styles/qwindows11style.dll"
|
|
PATTERN "styles/qmodernwindowsstyle.dll"
|
|
PATTERN "styles/qmodernwindowsstyled.dll"
|
|
PATTERN "tls/qcertonlybackend.dll"
|
|
PATTERN "tls/qopensslbackend.dll"
|
|
PATTERN "tls/qschannelbackend.dll"
|
|
)
|
|
|
|
# The Windows install has no Resources directory: the .qm files go to
|
|
# ${COCKATRICE_WIN32_QM_INSTALL_DIR} and main.cpp looks for them at
|
|
# applicationDirPath() + "/translations". The macOS bundle above keeps
|
|
# Resources/translations, which is correct for it.
|
|
install(
|
|
CODE "
|
|
file(WRITE \"\${CMAKE_INSTALL_PREFIX}/${qtconf_dest_dir}/qt.conf\" \"[Paths]
|
|
Plugins = Plugins
|
|
Translations = translations
|
|
Data = Resources\")
|
|
"
|
|
COMPONENT Runtime
|
|
)
|
|
|
|
install(
|
|
CODE "
|
|
file(GLOB_RECURSE QTPLUGINS
|
|
\"\${CMAKE_INSTALL_PREFIX}/${plugin_dest_dir}/*.dll\")
|
|
set(BU_CHMOD_BUNDLE_ITEMS ON)
|
|
include(BundleUtilities)
|
|
fixup_bundle(\"\${CMAKE_INSTALL_PREFIX}/Cockatrice.exe\" \"\${QTPLUGINS}\" \"${QT_LIBRARY_DIR}\")
|
|
"
|
|
COMPONENT Runtime
|
|
)
|
|
endif()
|
|
|
|
if(Qt6LinguistTools_FOUND)
|
|
#Qt6 Translations happen after the executable is built up
|
|
if(UPDATE_TRANSLATIONS)
|
|
qt6_add_translations(
|
|
cockatrice
|
|
TS_FILES
|
|
${cockatrice_TS}
|
|
SOURCES
|
|
${translate_SRCS}
|
|
QM_FILES_OUTPUT_VARIABLE
|
|
cockatrice_QM
|
|
)
|
|
else()
|
|
qt6_add_translations(cockatrice TS_FILES ${cockatrice_TS} QM_FILES_OUTPUT_VARIABLE cockatrice_QM)
|
|
endif()
|
|
|
|
if(UNIX)
|
|
if(APPLE)
|
|
install(FILES ${cockatrice_QM} DESTINATION ${COCKATRICE_MAC_QM_INSTALL_DIR})
|
|
else()
|
|
install(FILES ${cockatrice_QM} DESTINATION ${COCKATRICE_UNIX_QM_INSTALL_DIR})
|
|
endif()
|
|
elseif(WIN32)
|
|
install(FILES ${cockatrice_QM} DESTINATION ${COCKATRICE_WIN32_QM_INSTALL_DIR})
|
|
endif()
|
|
|
|
# Qt attaches the .qm files to the default build target only, so building the executable on its own
|
|
# (CLion, --target cockatrice) leaves it without any translations: nothing is translated and the
|
|
# language selector stays empty.
|
|
# Depend on Qt's own lrelease target instead of attaching the .qm custom commands to a second
|
|
# target: two independent targets owning the same outputs race on MSBuild/Makefiles and are an
|
|
# error on Xcode. Older Qt versions already add this dependency themselves.
|
|
foreach(_lrelease_target Cockatrice_lrelease cockatrice_lrelease)
|
|
if(TARGET ${_lrelease_target})
|
|
add_dependencies(cockatrice ${_lrelease_target})
|
|
endif()
|
|
endforeach()
|
|
endif()
|
|
|
|
qt6_finalize_target(cockatrice)
|