games-strategy/colobot: Fix building with gcc-15

Closes: https://bugs.gentoo.org/938227
Signed-off-by: Michał Górny <mgorny@gentoo.org>
This commit is contained in:
Michał Górny
2025-12-10 18:42:01 +01:00
parent c9827e884c
commit 4c4b0e35bf
2 changed files with 51 additions and 0 deletions

View File

@@ -50,6 +50,12 @@ DEPEND+="
"
src_prepare() {
local PATCHES=(
# https://bugs.gentoo.org/938227
# https://github.com/colobot/colobot/commit/1561854b03500d39955c66971c9c98de1937d7e6
"${FILESDIR}/${P}-gcc15.patch"
)
cmake_src_prepare
# https://bugs.gentoo.org/963468

View File

@@ -0,0 +1,45 @@
From 1561854b03500d39955c66971c9c98de1937d7e6 Mon Sep 17 00:00:00 2001
From: suve <veg@svgames.pl>
Date: Thu, 16 Jan 2025 16:33:33 +0100
Subject: [PATCH] Check if SDL_main is in use
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The main() function of colobot-app is declared as extern "C" to prevent
name mangling. This is required because on some platforms, SDL2 declares
its own main() function and defines a macro that renames the user's main
to SDL_main; in which case, name mangling may cause linking failures.
However, when building for platforms where this is not the case,
gcc15 complains that specifying linkage for main is not allowed.
> error: cannot declare ::main with a linkage
> specification [-Wpedantic]
This commit wraps the extern block in #ifdefs that check
if the main -> SDL_main macro is in use.
--- a/src/app/main.cpp
+++ b/src/app/main.cpp
@@ -94,10 +94,14 @@ The current layout is the following:
- src/script - link with the CBot library
*/
-//! Entry point to the program
+// On *some* platforms, SDL declares a macro which renames main to SDL_main.
+// If that's the case, use "extern C" to prevent name mangling.
+#ifdef main
extern "C"
{
+#endif
+//! Entry point to the program
int main(int argc, char *argv[])
{
CLogger logger; // single instance of logger
@@ -176,4 +180,6 @@ int main(int argc, char *argv[])
return code;
}
+#ifdef main
} // extern "C"
+#endif