Skip to content

Commit

Permalink
Fix building in ISO C23
Browse files Browse the repository at this point in the history
Building with GCC 15, which defaults to ISO C23, failed like this:

    In file included from lib/SDL_perl.xs:32:
    lib/SDL_perl.c:654:13: error: conflicting types for ‘boot_SDL’; have ‘void(PerlInterpreter *, CV *)’ {aka ‘void(struct interpreter *, struct cv *)’}
      654 | XS_EXTERNAL(boot_SDL); /* prototype to pass -Wmissing-prototypes */
	  |             ^~~~~~~~
    /usr/lib64/perl5/CORE/XSUB.h:149:34: note: in definition of macro ‘XS_EXTERNAL’
      149 | #  define XS_EXTERNAL(name) void name(pTHX_ CV* cv __attribute__unused__)
	  |                                  ^~~~
    lib/SDL_perl.xs:147:6: note: previous declaration of ‘boot_SDL’ with type ‘void(void)’
      147 | void boot_SDL();
	  |      ^~~~~~~~
    lib/SDL_perl.c:655:13: error: conflicting types for ‘boot_SDL’; have ‘void(PerlInterpreter *, CV *)’ {aka ‘void(struct interpreter *, struct cv *)’}
      655 | XS_EXTERNAL(boot_SDL)
	  |             ^~~~~~~~
    /usr/lib64/perl5/CORE/XSUB.h:149:34: note: in definition of macro ‘XS_EXTERNAL’
      149 | #  define XS_EXTERNAL(name) void name(pTHX_ CV* cv __attribute__unused__)
	  |                                  ^~~~
    lib/SDL_perl.xs:147:6: note: previous declaration of ‘boot_SDL’ with type ‘void(void)’
      147 | void boot_SDL();
	  |      ^~~~~~~~

The cause is a mismatch between how boot_SDL() was declared and used
in src/SDL.xs and how Perl generates a boot function for XS packages.
This patch fixes it by passing current Perl interpreter and, probably
ignored, cv argument.

Resolves: #294
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2341036
  • Loading branch information
ppisar committed Feb 11, 2025
1 parent 3a84fb7 commit 2a1eb99
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/SDL.xs
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ sdl_perl_atexit (void)
SDL_Quit();
}

void boot_SDL();
XS(boot_SDL);
void boot_SDL__OpenGL();

XS(boot_SDL_perl)
Expand All @@ -155,7 +155,7 @@ XS(boot_SDL_perl)
#endif
PL_perl_destruct_level = 2;
GET_TLS_CONTEXT
boot_SDL();
boot_SDL(aTHX_ cv);

#if defined WINDOWS || defined WIN32
SDL_RegisterApp ("SDLPerl App", 0, GetModuleHandle (NULL));
Expand Down

0 comments on commit 2a1eb99

Please sign in to comment.