diff --git a/CMakeLists.txt b/CMakeLists.txt index 58ef283..97fe3e4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,6 +2,27 @@ cmake_minimum_required(VERSION 3.20) project(BiLauncher VERSION 1.0.1 LANGUAGES CXX C) +# Канал сборки (dev / rc / релиз) не хранится в репозитории, а вычисляется +# при сборке — см. cmake/LauncherVersion.cmake. CI передаёт полную версию: +# -DLAUNCHER_BUILD_VERSION=1.0.1-rc2. +set(LAUNCHER_BUILD_VERSION "" CACHE STRING "Полная версия от CI (X.Y.Z[-rcN]); пусто — по тегу и ветке git") +set(LAUNCHER_VERSION_NUMERIC "${PROJECT_VERSION}") +set(LAUNCHER_SOURCE_DIR "${PROJECT_SOURCE_DIR}") +set(LAUNCHER_GENERATED_DIR "${PROJECT_BINARY_DIR}/generated") +set(LAUNCHER_VERSION_HEADER "${LAUNCHER_GENERATED_DIR}/launcherversion.h") +include(cmake/LauncherVersion.cmake) +message(STATUS "Версия лаунчера: ${LAUNCHER_VERSION} (канал ${LAUNCHER_CHANNEL})") +add_custom_target(launcher_version + COMMAND "${CMAKE_COMMAND}" + "-DLAUNCHER_VERSION_NUMERIC=${LAUNCHER_VERSION_NUMERIC}" + "-DLAUNCHER_SOURCE_DIR=${LAUNCHER_SOURCE_DIR}" + "-DLAUNCHER_VERSION_HEADER=${LAUNCHER_VERSION_HEADER}" + "-DLAUNCHER_BUILD_VERSION=${LAUNCHER_BUILD_VERSION}" + -P "${PROJECT_SOURCE_DIR}/cmake/LauncherVersion.cmake" + BYPRODUCTS "${LAUNCHER_VERSION_HEADER}" + COMMENT "Версия лаунчера из git" + VERBATIM) + 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) @@ -144,9 +165,8 @@ 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="${LAUNCHER_VERSION}" -) +target_include_directories(BiLauncher PRIVATE "${LAUNCHER_GENERATED_DIR}") +add_dependencies(BiLauncher launcher_version) if(Qt6WebEngineQuick_FOUND) target_link_libraries(BiLauncher PRIVATE Qt6::WebEngineQuick) @@ -234,4 +254,4 @@ option(BILAUNCHER_BUILD_TESTS "Собрать автотесты (ctest)" OFF) if(BILAUNCHER_BUILD_TESTS) enable_testing() add_subdirectory(tests) -endif() +endif() \ No newline at end of file diff --git a/packaging/windows/BiLauncher.iss b/packaging/windows/BiLauncher.iss index 88a45c0..7e85901 100644 --- a/packaging/windows/BiLauncher.iss +++ b/packaging/windows/BiLauncher.iss @@ -1,74 +1,74 @@ ; Установщик BiLauncher для Windows (Inno Setup 6). -; + ; ; Собирается в CI после `cmake --install`: -; iscc /DAppVersion=1.0.0 /DSourceDir=C:\...\stage /DOutputDir=C:\...\dist packaging\windows\BiLauncher.iss -; SourceDir — префикс установки: bin\ с BiLauncher.exe и развёрнутым windeployqt Qt, -; share\doc\BiLauncher\ с лицензиями. + ; iscc /DAppVersion=1.0.0 /DSourceDir=C:\...\stage /DOutputDir=C:\...\dist packaging\windows\BiLauncher.iss + ; SourceDir — префикс установки: bin\ с BiLauncher.exe и развёрнутым windeployqt Qt, + ; share\doc\BiLauncher\ с лицензиями. #ifndef AppVersion - #error Передайте версию: /DAppVersion=X.Y.Z +#error Передайте версию: /DAppVersion=X.Y.Z #endif #ifndef SourceDir - #error Передайте префикс установки: /DSourceDir=... +#error Передайте префикс установки: /DSourceDir=... #endif #ifndef OutputDir - #define OutputDir "." +#define OutputDir "." #endif -; VersionInfoVersion принимает только числа (X.Y.Z[.W]), поэтому у предрелиза -; (1.0.1-rc1) суффикс отрезаем; полная версия идёт в текстовые поля. + ; VersionInfoVersion принимает только числа (X.Y.Z[.W]), поэтому у предрелиза + ; (1.0.1-rc1) суффикс отрезаем; полная версия идёт в текстовые поля. #if Pos("-", AppVersion) > 0 - #define NumericVersion Copy(AppVersion, 1, Pos("-", AppVersion) - 1) +#define NumericVersion Copy(AppVersion, 1, Pos("-", AppVersion) - 1) #else - #define NumericVersion AppVersion +#define NumericVersion AppVersion #endif -[Setup] -; AppId не менять между версиями — по нему обновление находит прежнюю установку. -AppId={{6E0B5C1D-8F2A-4C7E-9B3D-2A1F4E5C7B90} -AppName=BiLauncher -AppVersion={#AppVersion} -AppVerName=BiLauncher {#AppVersion} -AppPublisher=GaleonDev -AppPublisherURL=https://projects-live.galeonworx.com/galeon/BiLauncher -AppSupportURL=https://projects-live.galeonworx.com/galeon/BiLauncher/issues -VersionInfoVersion={#NumericVersion} -VersionInfoTextVersion={#AppVersion} -VersionInfoProductTextVersion={#AppVersion} -DefaultDirName={autopf}\BiLauncher -DefaultGroupName=BiLauncher -DisableProgramGroupPage=yes -LicenseFile={#SourceDir}\share\doc\BiLauncher\LICENSE -OutputDir={#OutputDir} -OutputBaseFilename=BiLauncher-{#AppVersion}-win64-setup -SetupIconFile=..\..\icons\icon.ico -UninstallDisplayIcon={app}\bin\BiLauncher.exe -Compression=lzma2/ultra64 -SolidCompression=yes -LZMANumBlockThreads=4 -ArchitecturesAllowed=x64compatible -ArchitecturesInstallIn64BitMode=x64compatible -PrivilegesRequiredOverridesAllowed=dialog -WizardStyle=modern + [Setup] + ; AppId не менять между версиями — по нему обновление находит прежнюю установку. + AppId={{6E0B5C1D-8F2A-4C7E-9B3D-2A1F4E5C7B90} + AppName=BiLauncher + AppVersion={#AppVersion} + AppVerName=BiLauncher {#AppVersion} + AppPublisher=GaleonDev + AppPublisherURL=https://projects-live.galeonworx.com/galeon/BiLauncher + AppSupportURL=https://projects-live.galeonworx.com/galeon/BiLauncher/issues + VersionInfoVersion={#NumericVersion} + VersionInfoTextVersion={#AppVersion} + VersionInfoProductTextVersion={#AppVersion} + DefaultDirName={autopf}\BiLauncher + DefaultGroupName=BiLauncher + DisableProgramGroupPage=yes + LicenseFile={#SourceDir}\share\doc\BiLauncher\LICENSE + OutputDir={#OutputDir} + OutputBaseFilename=BiLauncher-{#AppVersion}-win64-setup + SetupIconFile=..\..\icons\icon.ico + UninstallDisplayIcon={app}\bin\BiLauncher.exe + Compression=lzma2/ultra64 + SolidCompression=yes + LZMANumBlockThreads=4 + ArchitecturesAllowed=x64compatible + ArchitecturesInstallIn64BitMode=x64compatible + PrivilegesRequiredOverridesAllowed=dialog + WizardStyle=modern -[Languages] -Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl" -Name: "english"; MessagesFile: "compiler:Default.isl" + [Languages] + Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl" + Name: "english"; MessagesFile: "compiler:Default.isl" -[Tasks] -Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}" + [Tasks] + Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}" -[Files] -Source: "{#SourceDir}\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Excludes: "vc_redist.x64.exe" + [Files] + Source: "{#SourceDir}\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Excludes: "vc_redist.x64.exe" #ifexist SourceDir + "\bin\vc_redist.x64.exe" -Source: "{#SourceDir}\bin\vc_redist.x64.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall + Source: "{#SourceDir}\bin\vc_redist.x64.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall #endif -[Icons] -Name: "{autoprograms}\BiLauncher"; Filename: "{app}\bin\BiLauncher.exe" -Name: "{autodesktop}\BiLauncher"; Filename: "{app}\bin\BiLauncher.exe"; Tasks: desktopicon + [Icons] + Name: "{autoprograms}\BiLauncher"; Filename: "{app}\bin\BiLauncher.exe" + Name: "{autodesktop}\BiLauncher"; Filename: "{app}\bin\BiLauncher.exe"; Tasks: desktopicon -[Run] + [Run] #ifexist SourceDir + "\bin\vc_redist.x64.exe" -Filename: "{tmp}\vc_redist.x64.exe"; Parameters: "/install /quiet /norestart"; StatusMsg: "Установка Microsoft Visual C++ Runtime..."; Flags: waituntilterminated + Filename: "{tmp}\vc_redist.x64.exe"; Parameters: "/install /quiet /norestart"; StatusMsg: "Установка Microsoft Visual C++ Runtime..."; Flags: waituntilterminated #endif -Filename: "{app}\bin\BiLauncher.exe"; Description: "{cm:LaunchProgram,BiLauncher}"; Flags: nowait postinstall skipifsilent + Filename: "{app}\bin\BiLauncher.exe"; Description: "{cm:LaunchProgram,BiLauncher}"; Flags: nowait postinstall skipifsilent \ No newline at end of file