Index | Thread | Search

From:
"Anthony J. Bentley" <bentley@openbsd.org>
Subject:
Re: colobot fix for gcc15
To:
ports@openbsd.org
Date:
Wed, 17 Dec 2025 03:35:43 -0700

Download raw body.

Thread
  • Claudio Jeker:

    colobot fix for gcc15

    • Anthony J. Bentley:

      colobot fix for gcc15

Claudio Jeker writes:
> Backport
> https://github.com/colobot/colobot/commit/1561854b03500d39955c66971c9c98de193
> 7d7e6
>
> Check if SDL_main is in use
> 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.
>
> Fixes sparc64 compile.

Please bump REVISION.
Then it's ok bentley@

> Index: colobot/patches/patch-src_app_main_cpp
> ===================================================================
> RCS file: colobot/patches/patch-src_app_main_cpp
> diff -N colobot/patches/patch-src_app_main_cpp
> --- /dev/null	1 Jan 1970 00:00:00 -0000
> +++ colobot/patches/patch-src_app_main_cpp	16 Dec 2025 09:35:34 -0000
> @@ -0,0 +1,35 @@
> +Backport of commit 1561854b03500d39955c66971c9c98de1937d7e6
> +
> +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.
> +
> +Index: src/app/main.cpp
> +--- src/app/main.cpp.orig
> ++++ 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