On Wed, 28 Mar 2012, Måns Rullgård wrote:
Martin Storsjö <[email protected]> writes:
On Wed, 28 Mar 2012, Måns Rullgård wrote:
Martin Storsjö <[email protected]> writes:
SDL 1.3 (which is the current version available e.g. in
macports) doesn't contain SDL_Linked_Version.
The current check for SDL_Linked_Version (available since SDL
1.2.13) was added 8f1b06c8, because including the headers for
SDL_Init redirects the main function, requiring linking the
SDLmain library for linking to work. When using the normal
function checks in configure, we don't link to any extra
libraries.
---
configure | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/configure b/configure
index 7418bca..3e24f00 100755
--- a/configure
+++ b/configure
@@ -2983,7 +2983,8 @@ if enabled libdc1394; then
die "ERROR: No version of libdc1394 found "
fi
-if check_pkg_config sdl SDL_version.h SDL_Linked_Version; then
+if check_pkg_config sdl SDL_version.h SDL_Linked_Version ||
+ check_pkg_config sdl SDL.h SDL_Init; then
If checking for SDL_Init works at all, then there should be no need to
check for SDL_Linked_Version.
It doesn't, on the platforms where SDL redirects the main
function. Thankfully, the new ones that lack SDL_Linked_Version don't
do any such redirection afaik.
That is - the headers that define SDL_Init also redefine main, to
redirect initialization via their main wrapper. If this header is
included, one has to link with the SDLmain library, otherwise one ends
up with undefined references to main.
Why does so much as thinking about SDL make me angry?
We could either link to this library while checking for SDL_Init -
Wouldn't that break on systems that don't have the wrapper?
I think all systems (with SDL 1.2) have the wrapper, but on the ones where
it doesn't redirect main, it might be an empty library. But on SDL 1.3, it
might of course not exist...
After rechecking closer, the issue isn't so much about linking to the
wrapper, check_pkg_config actually does that correctly already, since the
pc file incidates the library to add.
The problem is that the main redirection is defined like this:
#define main SDL_main
extern C_LINKAGE int SDL_main(int argc, char *argv[]);
And the function check tests compiling this:
1 #include <SDL.h>
2 long check_SDL_Init(void) { return (long) SDL_Init; }
3 int main(void) { return 0; }
ending up with this error:
ffconf.UGdDwiYR.c:3: error: conflicting types for 'SDL_main'
SDL_main.h:57: error: previous declaration of 'SDL_main' was here
So sorry, I misremembered the details.
So the way I see it, either we avoid SDL.h (which includes SDL_main.h) in
the function checks - which we've done so far (and maybe only use SDL.h as
fallback check if SDL_Linked_Version failed) - or we add argc/argv to the
main declaration in the function check (which of course could break again
if there was another library doing similar nasty things with a different
declaration).
// Martin
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel