diff options
Diffstat (limited to 'meshmc/buildconfig')
| -rw-r--r-- | meshmc/buildconfig/BuildConfig.cpp.in | 126 | ||||
| -rw-r--r-- | meshmc/buildconfig/BuildConfig.h | 185 | ||||
| -rw-r--r-- | meshmc/buildconfig/CMakeLists.txt | 11 |
3 files changed, 322 insertions, 0 deletions
diff --git a/meshmc/buildconfig/BuildConfig.cpp.in b/meshmc/buildconfig/BuildConfig.cpp.in new file mode 100644 index 0000000000..9af27350df --- /dev/null +++ b/meshmc/buildconfig/BuildConfig.cpp.in @@ -0,0 +1,126 @@ +/* SPDX-FileCopyrightText: 2026 Project Tick + * SPDX-FileContributor: Project Tick + * SPDX-License-Identifier: GPL-3.0-or-later + * + * MeshMC - A Custom Launcher for Minecraft + * Copyright (C) 2026 Project Tick + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +#include "BuildConfig.h" +#include <QObject> + +const Config BuildConfig; + +Config::Config() +{ + // Name and copyright + MESHMC_NAME = "@MeshMC_Name@"; + MESHMC_DISPLAYNAME = "@MeshMC_DisplayName@"; + MESHMC_COPYRIGHT = "@MeshMC_Copyright@"; + MESHMC_DOMAIN = "@MeshMC_Domain@"; + MESHMC_CONFIGFILE = "@MeshMC_ConfigFile@"; + MESHMC_GIT = "@MeshMC_Git@"; + + USER_AGENT = "@MeshMC_UserAgent@"; + USER_AGENT_UNCACHED = USER_AGENT + " (Uncached)"; + + // Version information + VERSION_MAJOR = @MeshMC_VERSION_MAJOR@; + VERSION_MINOR = @MeshMC_VERSION_MINOR@; + VERSION_HOTFIX = @MeshMC_VERSION_HOTFIX@; + VERSION_BUILD = @MeshMC_VERSION_BUILD@; + + BUILD_PLATFORM = "@MeshMC_BUILD_PLATFORM@"; + BUILD_ARTIFACT = "@MeshMC_BUILD_ARTIFACT@"; + BUILD_DATE = "@MeshMC_BUILD_TIMESTAMP@"; + COMPILER_NAME = "@MeshMC_COMPILER_NAME@"; + COMPILER_VERSION = "@MeshMC_COMPILER_VERSION@"; + COMPILER_TARGET_SYSTEM = "@MeshMC_COMPILER_TARGET_SYSTEM@"; + COMPILER_TARGET_SYSTEM_VERSION = "@MeshMC_COMPILER_TARGET_SYSTEM_VERSION@"; + COMPILER_TARGET_SYSTEM_PROCESSOR = "@MeshMC_COMPILER_TARGET_PROCESSOR@"; + UPDATER_BASE = "@MeshMC_UPDATER_BASE@"; + UPDATER_FEED_URL = "@MeshMC_UPDATER_FEED_URL@"; + UPDATER_GITHUB_API_URL = "@MeshMC_UPDATER_GITHUB_API_URL@"; + ANALYTICS_ID = "@MeshMC_ANALYTICS_ID@"; + NOTIFICATION_URL = "@MeshMC_NOTIFICATION_URL@"; + FULL_VERSION_STR = + "@MeshMC_VERSION_MAJOR@.@MeshMC_VERSION_MINOR@.@MeshMC_VERSION_BUILD@"; + + GIT_COMMIT = "@MeshMC_GIT_COMMIT@"; + GIT_REFSPEC = "@MeshMC_GIT_REFSPEC@"; + GIT_TAG = "@MeshMC_GIT_TAG@"; + + // New updater: enabled when both feed and GitHub API URLs are configured + // and a build artifact name is provided for platform-specific asset + // matching. + if (!UPDATER_FEED_URL.isEmpty() && !UPDATER_GITHUB_API_URL.isEmpty() && + !BUILD_ARTIFACT.isEmpty()) { + UPDATER_ENABLED = true; + } + + // VERSION_CHANNEL is still populated from the git branch for informational + // use. + if (GIT_REFSPEC.startsWith("refs/heads/")) { + VERSION_CHANNEL = GIT_REFSPEC; + VERSION_CHANNEL.remove("refs/heads/"); + } else { + VERSION_CHANNEL = QObject::tr("custom"); + } + + VERSION_STR = "@MeshMC_VERSION_STRING@"; + MSAClientID = "@MeshMC_MICROSOFT_CLIENT_ID@"; + NEWS_RSS_URL = "@MeshMC_NEWS_RSS_URL@"; + PASTE_EE_KEY = "@MeshMC_PASTE_EE_API_KEY@"; + IMGUR_CLIENT_ID = "@MeshMC_IMGUR_CLIENT_ID@"; + META_URL = "@MeshMC_META_URL@"; + CURSEFORGE_API_KEY = "@MeshMC_CURSEFORGE_API_KEY@"; + + BUG_TRACKER_URL = "@MeshMC_BUG_TRACKER_URL@"; + DISCORD_URL = "@MeshMC_DISCORD_URL@"; + SUBREDDIT_URL = "@MeshMC_SUBREDDIT_URL@"; +} + +QString Config::printableVersionString() const +{ + QString vstr = + QString("%1.%2.%3") + .arg(QString::number(VERSION_MAJOR), QString::number(VERSION_MINOR), + QString::number(VERSION_HOTFIX)); + + if (!GIT_TAG.isEmpty() && !GIT_TAG.endsWith("-NOTFOUND")) { + return vstr; + } + + if (!GIT_COMMIT.isEmpty() && !GIT_COMMIT.endsWith("-NOTFOUND")) { + vstr += "-r" + GIT_COMMIT.left(6); + } + + return vstr; +} + +QString Config::compilerID() const +{ + if (COMPILER_VERSION.isEmpty()) + return COMPILER_NAME; + return QStringLiteral("%1 - %2").arg(COMPILER_NAME).arg(COMPILER_VERSION); +} + +QString Config::systemID() const +{ + return QStringLiteral("%1 %2 %3") + .arg(COMPILER_TARGET_SYSTEM, COMPILER_TARGET_SYSTEM_VERSION, + COMPILER_TARGET_SYSTEM_PROCESSOR); +} diff --git a/meshmc/buildconfig/BuildConfig.h b/meshmc/buildconfig/BuildConfig.h new file mode 100644 index 0000000000..760da4ade7 --- /dev/null +++ b/meshmc/buildconfig/BuildConfig.h @@ -0,0 +1,185 @@ +/* SPDX-FileCopyrightText: 2026 Project Tick + * SPDX-FileContributor: Project Tick + * SPDX-License-Identifier: GPL-3.0-or-later + * + * MeshMC - A Custom Launcher for Minecraft + * Copyright (C) 2026 Project Tick + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +#pragma once +#include <QString> + +/** + * \brief The Config class holds all the build-time information passed from the + * build system. + */ +class Config +{ + public: + Config(); + QString MESHMC_NAME; + QString MESHMC_DISPLAYNAME; + QString MESHMC_COPYRIGHT; + QString MESHMC_DOMAIN; + QString MESHMC_CONFIGFILE; + QString MESHMC_GIT; + + /// The major version number. + int VERSION_MAJOR; + /// The minor version number. + int VERSION_MINOR; + /// The hotfix number. + int VERSION_HOTFIX; + /// The build number. + int VERSION_BUILD; + + /** + * The version channel + * This is used by the updater to determine what channel the current version + * came from. + */ + QString VERSION_CHANNEL; + + bool UPDATER_ENABLED = false; + + /// A short string identifying this build's platform. For example, "lin64" + /// or "win32". + QString BUILD_PLATFORM; + + /// URL for the updater's channel (legacy, unused) + QString UPDATER_BASE; + + /// RSS feed URL for the new updater (projt: namespace). + QString UPDATER_FEED_URL; + + /// GitHub releases API URL for update verification. + QString UPDATER_GITHUB_API_URL; + + /// A string containing the build timestamp + QString BUILD_DATE; + + /// User-Agent to use. + QString USER_AGENT; + + /// User-Agent to use for uncached requests. + QString USER_AGENT_UNCACHED; + + /// A short string identifying this build's valid artifacts int he updater. + /// For example, "lin64" or "win32". + QString BUILD_ARTIFACT; + + /// Compiler name + QString COMPILER_NAME; + + /// Compiler version + QString COMPILER_VERSION; + + /// Target system name (e.g. "Linux", "Windows") + QString COMPILER_TARGET_SYSTEM; + + /// Target system version + QString COMPILER_TARGET_SYSTEM_VERSION; + + /// Target system processor (e.g. "x86_64") + QString COMPILER_TARGET_SYSTEM_PROCESSOR; + + /// Google analytics ID + QString ANALYTICS_ID; + + /// URL for notifications + QString NOTIFICATION_URL; + + /// Used for matching notifications + QString FULL_VERSION_STR; + + /// The git commit hash of this build + QString GIT_COMMIT; + + /// The git refspec of this build + QString GIT_REFSPEC; + + /// The exact git tag of this build, if any + QString GIT_TAG; + + /// This is printed on start to standard output + QString VERSION_STR; + + /** + * This is used to fetch the news RSS feed. + * It defaults in CMakeLists.txt to "https://projecttick.org/rss.xml" + */ + QString NEWS_RSS_URL; + + QString MSAClientID; + + /** + * API key you can get from paste.ee when you register an account + */ + QString PASTE_EE_KEY; + + /** + * Client ID you can get from Imgur when you register an application + */ + QString IMGUR_CLIENT_ID; + + /** + * Metadata repository URL prefix + */ + QString META_URL; + + /** + * API key for the CurseForge API + */ + QString CURSEFORGE_API_KEY; + + QString BUG_TRACKER_URL; + QString DISCORD_URL; + QString SUBREDDIT_URL; + + QString RESOURCE_BASE = "https://resources.download.minecraft.net/"; + QString LIBRARY_BASE = "https://libraries.minecraft.net/"; + QString IMGUR_BASE_URL = "https://api.imgur.com/3/"; + QString FMLLIBS_BASE_URL = "https://files.projecttick.org/fmllibs/"; + QString TRANSLATIONS_BASE_URL = "https://i18n.projecttick.org/"; + + QString MODPACKSCH_API_BASE_URL = "https://api.modpacks.ch/"; + + QString LEGACY_FTB_CDN_BASE_URL = "https://dist.creeper.host/FTB2/"; + + QString ATL_DOWNLOAD_SERVER_URL = + "https://download.nodecdn.net/containers/atl/"; + + /** + * \brief Converts the Version to a string. + * \return The version number in string format (major.minor.revision.build). + */ + QString printableVersionString() const; + + /** + * \brief Compiler ID String + * \return a string of the form "Name - Version" of just "Name" if the + * version is empty + */ + QString compilerID() const; + + /** + * \brief System ID String + * \return a string of the form "OS Verison Processor" + */ + QString systemID() const; +}; + +extern const Config BuildConfig; diff --git a/meshmc/buildconfig/CMakeLists.txt b/meshmc/buildconfig/CMakeLists.txt new file mode 100644 index 0000000000..ca3328fdc7 --- /dev/null +++ b/meshmc/buildconfig/CMakeLists.txt @@ -0,0 +1,11 @@ +######## Configure the file with build properties ######## + +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/BuildConfig.cpp.in" "${CMAKE_CURRENT_BINARY_DIR}/BuildConfig.cpp") + +add_library(BuildConfig STATIC + BuildConfig.h + ${CMAKE_CURRENT_BINARY_DIR}/BuildConfig.cpp +) + +target_link_libraries(BuildConfig Qt6::Core) +target_include_directories(BuildConfig PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}") |
