From 7e13da47af71814d612c6c060be68e8ba84271ff Mon Sep 17 00:00:00 2001 From: swurl Date: Thu, 5 Jun 2025 18:58:54 +0000 Subject: [PATCH] Fix build ID and update checker (#148) Signed-off-by: swurl Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/148 Co-authored-by: swurl Co-committed-by: swurl --- CMakeModules/GenerateSCMRev.cmake | 44 +++++++++---------------------- src/common/scm_rev.cpp.in | 2 ++ src/common/scm_rev.h | 1 + src/yuzu/about_dialog.cpp | 24 +++++++++++------ src/yuzu/main.cpp | 21 +++++++++------ 5 files changed, 45 insertions(+), 47 deletions(-) diff --git a/CMakeModules/GenerateSCMRev.cmake b/CMakeModules/GenerateSCMRev.cmake index 1d4aa979d3..55be49cb98 100644 --- a/CMakeModules/GenerateSCMRev.cmake +++ b/CMakeModules/GenerateSCMRev.cmake @@ -20,37 +20,19 @@ if (NOT GIT_BRANCH) endif() get_timestamp(BUILD_DATE) -# Generate cpp with Git revision from template -# Also if this is a CI build, add the build name (ie: Nightly, Canary) to the scm_rev file as well -set(REPO_NAME "") -set(BUILD_VERSION "0") -set(BUILD_ID ${DISPLAY_VERSION}) -if (BUILD_REPOSITORY) - # regex capture the string nightly or canary into CMAKE_MATCH_1 - string(REGEX MATCH "yuzu-emu/yuzu-?(.*)" OUTVAR ${BUILD_REPOSITORY}) - if ("${CMAKE_MATCH_COUNT}" GREATER 0) - # capitalize the first letter of each word in the repo name. - string(REPLACE "-" ";" REPO_NAME_LIST ${CMAKE_MATCH_1}) - foreach(WORD ${REPO_NAME_LIST}) - string(SUBSTRING ${WORD} 0 1 FIRST_LETTER) - string(SUBSTRING ${WORD} 1 -1 REMAINDER) - string(TOUPPER ${FIRST_LETTER} FIRST_LETTER) - set(REPO_NAME "${REPO_NAME}${FIRST_LETTER}${REMAINDER}") - endforeach() - if (BUILD_TAG) - string(REGEX MATCH "${CMAKE_MATCH_1}-([0-9]+)" OUTVAR ${BUILD_TAG}) - if (${CMAKE_MATCH_COUNT} GREATER 0) - set(BUILD_VERSION ${CMAKE_MATCH_1}) - endif() - if (BUILD_VERSION) - # This leaves a trailing space on the last word, but we actually want that - # because of how it's styled in the title bar. - set(BUILD_FULLNAME "${REPO_NAME} ${BUILD_VERSION} ") - else() - set(BUILD_FULLNAME "") - endif() - endif() - endif() +git_get_exact_tag(GIT_TAG --tags) +if (GIT_TAG MATCHES "NOTFOUND") + set(BUILD_VERSION "${GIT_DESC}") + set(IS_DEV_BUILD true) +else() + set(BUILD_VERSION ${GIT_TAG}) + set(IS_DEV_BUILD false) endif() +# Generate cpp with Git revision from template +# Also if this is a CI build, add the build name (ie: Nightly, Canary) to the scm_rev file as well +set(REPO_NAME "eden") +set(BUILD_ID ${GIT_BRANCH}) +set(BUILD_FULLNAME "${REPO_NAME} ${BUILD_VERSION} ") + configure_file(scm_rev.cpp.in scm_rev.cpp @ONLY) diff --git a/src/common/scm_rev.cpp.in b/src/common/scm_rev.cpp.in index ba741c5668..b6bff72867 100644 --- a/src/common/scm_rev.cpp.in +++ b/src/common/scm_rev.cpp.in @@ -17,6 +17,7 @@ #define BUILD_ID "@BUILD_ID@" #define TITLE_BAR_FORMAT_IDLE "@TITLE_BAR_FORMAT_IDLE@" #define TITLE_BAR_FORMAT_RUNNING "@TITLE_BAR_FORMAT_RUNNING@" +#define IS_DEV_BUILD @IS_DEV_BUILD@ namespace Common { @@ -30,6 +31,7 @@ const char g_build_version[] = BUILD_VERSION; const char g_build_id[] = BUILD_ID; const char g_title_bar_format_idle[] = TITLE_BAR_FORMAT_IDLE; const char g_title_bar_format_running[] = TITLE_BAR_FORMAT_RUNNING; +const bool g_is_dev_build = IS_DEV_BUILD; /// Anonymizes SCM data /// This is quite weak. But better than nothing. diff --git a/src/common/scm_rev.h b/src/common/scm_rev.h index 59d0cfcfb3..ee1997950a 100644 --- a/src/common/scm_rev.h +++ b/src/common/scm_rev.h @@ -16,5 +16,6 @@ extern const char g_build_id[]; extern const char g_title_bar_format_idle[]; extern const char g_title_bar_format_running[]; extern const char g_shader_cache_version[]; +extern const bool g_is_dev_build; } // namespace Common diff --git a/src/yuzu/about_dialog.cpp b/src/yuzu/about_dialog.cpp index 6ee52ae088..6ef3072894 100644 --- a/src/yuzu/about_dialog.cpp +++ b/src/yuzu/about_dialog.cpp @@ -1,21 +1,29 @@ // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later +#include "yuzu/about_dialog.h" #include -#include #include "common/scm_rev.h" #include "ui_aboutdialog.h" -#include "yuzu/about_dialog.h" +#include AboutDialog::AboutDialog(QWidget* parent) - : QDialog(parent), ui{std::make_unique()} { - const auto branch_name = std::string(Common::g_scm_branch); - const auto description = std::string(Common::g_scm_desc); + : QDialog(parent) + , ui{std::make_unique()} +{ + const auto description = std::string(Common::g_build_version); const auto build_id = std::string(Common::g_build_id); - const auto yuzu_build = fmt::format("eden Development Build | {}-{}", branch_name, description); - const auto override_build = - fmt::format(fmt::runtime(std::string(Common::g_title_bar_format_idle)), build_id); + std::string yuzu_build; + if (Common::g_is_dev_build) { + yuzu_build = fmt::format("eden Nightly | {}-{}", description, build_id); + } else { + yuzu_build = fmt::format("eden | {}", description); + } + + const auto override_build = fmt::format(fmt::runtime( + std::string(Common::g_title_bar_format_idle)), + build_id); const auto yuzu_build_version = override_build.empty() ? yuzu_build : override_build; ui->setupUi(this); diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index af6f71c3fd..7e31fdae4d 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -420,13 +420,13 @@ GMainWindow::GMainWindow(bool has_broken_vulkan) if (UISettings::values.check_for_updates) { update_future = QtConcurrent::run([]() -> QString { const bool is_prerelease = - ((strstr(Common::g_build_fullname, "pre-alpha") != NULL) || - (strstr(Common::g_build_fullname, "alpha") != NULL) || - (strstr(Common::g_build_fullname, "beta") != NULL) || - (strstr(Common::g_build_fullname, "rc") != NULL)); + ((strstr(Common::g_build_version, "pre-alpha") != NULL) || + (strstr(Common::g_build_version, "alpha") != NULL) || + (strstr(Common::g_build_version, "beta") != NULL) || + (strstr(Common::g_build_version, "rc") != NULL)); const std::optional latest_release_tag = UpdateChecker::GetLatestRelease(is_prerelease); - if (latest_release_tag && latest_release_tag.value() != Common::g_build_fullname) { + if (latest_release_tag && latest_release_tag.value() != Common::g_build_version) { return QString::fromStdString(latest_release_tag.value()); } return QString{}; @@ -4796,11 +4796,16 @@ void GMainWindow::OnEmulatorUpdateAvailable() { void GMainWindow::UpdateWindowTitle(std::string_view title_name, std::string_view title_version, std::string_view gpu_vendor) { - const auto branch_name = std::string(Common::g_scm_branch); - const auto description = std::string(Common::g_scm_desc); + const auto description = std::string(Common::g_build_version); const auto build_id = std::string(Common::g_build_id); - const auto yuzu_title = fmt::format("eden | {}-{}", branch_name, description); + std::string yuzu_title; + if (Common::g_is_dev_build) { + yuzu_title = fmt::format("eden Nightly | {}-{}", description, build_id); + } else { + yuzu_title = fmt::format("eden | {}", description); + } + const auto override_title = fmt::format(fmt::runtime(std::string(Common::g_title_bar_format_idle)), build_id); const auto window_title = override_title.empty() ? yuzu_title : override_title;