cmake_minimum_required(VERSION 3.20) project(BiLauncher VERSION 1.0.0 LANGUAGES CXX C) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(QT_NO_PRIVATE_MODULE_WARNING ON) find_package(Qt6 REQUIRED COMPONENTS Quick QuickControls2 Qml Svg Core CorePrivate Gui Network) find_package(Qt6 QUIET COMPONENTS WebEngineQuick) if(Qt6WebEngineQuick_FOUND) message(STATUS "Qt WebEngine найден: вход через аккаунт Microsoft будет доступен") set(LAUNCHER_MSA_QML_FILES MicrosoftLoginDialog.qml) else() message(WARNING "Qt WebEngine не найден — лаунчер соберётся без входа через аккаунт Microsoft. " "Чтобы его включить, доустановите в MaintenanceTool для своей версии Qt сразу три " "компонента: Qt WebEngine, Qt WebChannel и Qt Positioning.") set(LAUNCHER_MSA_QML_FILES "") endif() qt_standard_project_setup(REQUIRES 6.8) set(LAUNCHER_ICON_DIR "${CMAKE_CURRENT_SOURCE_DIR}/icons") if(WIN32) configure_file("${LAUNCHER_ICON_DIR}/icon.rc.in" "${CMAKE_CURRENT_BINARY_DIR}/icon.rc" @ONLY) set(LAUNCHER_APP_ICON "${CMAKE_CURRENT_BINARY_DIR}/icon.rc") elseif(APPLE) set(LAUNCHER_APP_ICON "${LAUNCHER_ICON_DIR}/icon.icns") set_source_files_properties(${LAUNCHER_APP_ICON} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") else() set(LAUNCHER_APP_ICON "") endif() qt_add_executable(BiLauncher main.cpp ${LAUNCHER_APP_ICON} ) qt_add_resources(BiLauncher "appicon" PREFIX "/icons" BASE "icons" FILES icons/icon_16x16.png icons/icon_16x16@2x.png icons/icon_24x24.png icons/icon_32x32.png icons/icon_32x32@2x.png icons/icon_48x48.png icons/icon_64x64.png icons/icon_128x128.png icons/icon_128x128@2x.png icons/icon_256x256.png icons/icon_256x256@2x.png icons/icon_512x512.png icons/icon_512x512@2x.png ) # Путь импорта для QML code model Qt Creator / qmlls: модуль лежит в # ${CMAKE_CURRENT_BINARY_DIR}/qml, а не в корне каталога сборки. set(QML_IMPORT_PATH "${CMAKE_CURRENT_BINARY_DIR}/qml" CACHE STRING "Пути импорта QML для Qt Creator" FORCE) qt_add_qml_module(BiLauncher URI BiLauncher OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/qml/BiLauncher" SOURCES localization.h localization.cpp launcherbackend.h launcherbackend.cpp launcherpaths.h launcherpaths.cpp minecraftversion.h minecraftversion.cpp javalocator.h javalocator.cpp zlibreference.h zlibreference.cpp javaruntime.h javaruntime.cpp javaruntimeservice.h javaruntimeservice.cpp javainstaller.h javainstaller.cpp authservice.h authservice.cpp msaauthservice.h msaauthservice.cpp gamelauncher.h gamelauncher.cpp versionmanifestservice.h versionmanifestservice.cpp versioninstaller.h versioninstaller.cpp modloader.h modloaderversionservice.h modloaderversionservice.cpp modloaderinstaller.h modloaderinstaller.cpp buildarchiveworker.h buildarchiveworker.cpp buildswitcher.h buildswitcher.cpp seasonalbuildservice.h seasonalbuildservice.cpp seasonalpackdownloader.h seasonalpackdownloader.cpp QML_FILES Main.qml DarkCombo.qml VersionPickerDialog.qml JavaPickerDialog.qml LabelledField.qml BuildsDialog.qml SeasonalBuildsDialog.qml LoaderRow.qml ProgressPanel.qml ${LAUNCHER_MSA_QML_FILES} RESOURCES images/Folder/Folder_Active.svg images/Folder/Folder_Idle.svg images/Folder/Folder_Pressed.svg images/Options/Options_active.svg images/Options/Options_Idle.svg images/Options/Options_Pressed.svg images/Play_Button/Play_Active.svg images/Play_Button/Play_Idle.svg images/Play_Button/Play_pressed.svg images/Profile_Box/Asset_23.jpg images/Profile_Box/Asset_23.svg images/Profile_Box/Asset_24.jpg images/Profile_Box/Asset_24.svg images/Profile_Box/Kishka_Profile_Active.svg images/Profile_Box/Kishka_Profile_Idle.svg images/Profile_Box/Kishka_Profile_open.svg images/Scroll/Scroll_Lever.svg images/Scroll/Scroll_palka.svg images/Version_box/Kishka_Profile_Open.svg images/Version_box/Kishka_Ver_Active.svg images/Version_box/Kishka_Ver_idle.svg images/Trash.svg images/Pencil.svg images/GovuztTW8AAHqBf.jpeg images/photo_2025-12-16_15-04-17.jpg images/photo_2025-12-21_02-30-09.jpg i18n/translations.json RESOURCES images/launcherBackground.png RESOURCES images/launcherBackground2static.jpg RESOURCES CHANGELOG.md RESOURCES LICENSE RESOURCES README.md ) # Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1. # If you are developing for iOS or macOS you should consider setting an # explicit, fixed bundle identifier manually though. set_target_properties(BiLauncher PROPERTIES MACOSX_BUNDLE_GUI_IDENTIFIER com.galeondev.BiLauncher MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION} MACOSX_BUNDLE_ICON_FILE icon.icns MACOSX_BUNDLE TRUE WIN32_EXECUTABLE TRUE ) target_link_libraries(BiLauncher PRIVATE Qt6::Quick Qt6::QuickControls2 Qt6::Svg Qt6::Core Qt6::CorePrivate Qt6::Gui Qt6::Network ) target_compile_definitions(BiLauncher PRIVATE LAUNCHER_VERSION="${PROJECT_VERSION}" ) if(Qt6WebEngineQuick_FOUND) target_link_libraries(BiLauncher PRIVATE Qt6::WebEngineQuick) target_compile_definitions(BiLauncher PRIVATE LAUNCHER_HAS_WEBENGINE) endif() include(GNUInstallDirs) if(UNIX AND NOT APPLE) set(LAUNCHER_ZLIB_DIR "${CMAKE_INSTALL_LIBDIR}/BiLauncher") set(LAUNCHER_ZLIB_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/zlib") add_library(launcher_zlib_reference SHARED ${LAUNCHER_ZLIB_SOURCES}/adler32.c ${LAUNCHER_ZLIB_SOURCES}/compress.c ${LAUNCHER_ZLIB_SOURCES}/crc32.c ${LAUNCHER_ZLIB_SOURCES}/deflate.c ${LAUNCHER_ZLIB_SOURCES}/gzclose.c ${LAUNCHER_ZLIB_SOURCES}/gzlib.c ${LAUNCHER_ZLIB_SOURCES}/gzread.c ${LAUNCHER_ZLIB_SOURCES}/gzwrite.c ${LAUNCHER_ZLIB_SOURCES}/infback.c ${LAUNCHER_ZLIB_SOURCES}/inffast.c ${LAUNCHER_ZLIB_SOURCES}/inflate.c ${LAUNCHER_ZLIB_SOURCES}/inftrees.c ${LAUNCHER_ZLIB_SOURCES}/trees.c ${LAUNCHER_ZLIB_SOURCES}/uncompr.c ${LAUNCHER_ZLIB_SOURCES}/zutil.c ) target_include_directories(launcher_zlib_reference PRIVATE ${LAUNCHER_ZLIB_SOURCES}) target_compile_definitions(launcher_zlib_reference PRIVATE HAVE_UNISTD_H=1 HAVE_STDARG_H=1 _LARGEFILE64_SOURCE=1) set_target_properties(launcher_zlib_reference PROPERTIES OUTPUT_NAME z VERSION 1.3.1 SOVERSION 1 C_VISIBILITY_PRESET default LIBRARY_OUTPUT_DIRECTORY $/zlib ) add_dependencies(BiLauncher launcher_zlib_reference) target_compile_definitions(BiLauncher PRIVATE LAUNCHER_ZLIB_INSTALL_DIR="${CMAKE_INSTALL_FULL_LIBDIR}/BiLauncher" ) install(TARGETS launcher_zlib_reference LIBRARY DESTINATION ${LAUNCHER_ZLIB_DIR}) foreach(icon_size IN ITEMS 16 24 32 48 64 128 256 512) install(FILES "${LAUNCHER_ICON_DIR}/icon_${icon_size}x${icon_size}.png" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/${icon_size}x${icon_size}/apps" RENAME bilauncher.png) endforeach() install(FILES "${LAUNCHER_ICON_DIR}/bilauncher.desktop" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/applications") endif() if(NOT APPLE) install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE" "${CMAKE_CURRENT_SOURCE_DIR}/CHANGELOG.md" "${CMAKE_CURRENT_SOURCE_DIR}/packaging/THIRD_PARTY_LICENSES.txt" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/doc/BiLauncher") endif() install(TARGETS BiLauncher BUNDLE DESTINATION . LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) set(deploy_opts "") if(APPLE) set(deploy_opts -hardened-runtime) endif() qt_generate_deploy_qml_app_script( TARGET BiLauncher OUTPUT_SCRIPT deploy_script MACOS_BUNDLE_POST_BUILD NO_UNSUPPORTED_PLATFORM_ERROR DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM DEPLOY_TOOL_OPTIONS ${deploy_opts}) install(SCRIPT ${deploy_script}) option(BILAUNCHER_BUILD_TESTS "Собрать автотесты (ctest)" OFF) if(BILAUNCHER_BUILD_TESTS) enable_testing() add_subdirectory(tests) endif()