From 861d798c5a8d9607911f7d1a7a08b74372845282 Mon Sep 17 00:00:00 2001 From: Patrice Mandin Date: Wed, 16 Jul 2003 11:54:13 +0000 Subject: [PATCH] pmandin: Added Atari LDG shared object loader --- README.MiNT | 1 + configure.in | 27 ++++++++++++++++++++++----- src/SDL_loadso.c | 12 ++++++++++++ 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/README.MiNT b/README.MiNT index ea389ed86..267c433e1 100644 --- a/README.MiNT +++ b/README.MiNT @@ -51,6 +51,7 @@ Timer (VBL vector, GNU pth library) Joystick and joypad support (Ikbd, Hardware) Audio support (Hardware, XBIOS, GSXB, MCSN, STFA, /dev/audio if threads enabled) Threads support (Multitasking OS only via GNU pth library) +Shared object support (using LDG library from http://ldg.atari.org/) - What is missing: CDROM support (Metados, /dev/cdrom) diff --git a/configure.in b/configure.in index 1b7b13825..966aa2a4a 100644 --- a/configure.in +++ b/configure.in @@ -380,7 +380,7 @@ CheckARTSC() AC_MSG_RESULT($audio_arts) if test x$audio_arts = xyes; then AC_ARG_ENABLE(arts-shared, -[ --enable-arts-shared dynamically load aRts audio support [default=no]], +[ --enable-arts-shared dynamically load aRts audio support [default=no]], , enable_arts_shared=no) arts_lib_spec=`echo $ARTSC_LIBS | sed 's/.*-L\([[^ ]]*\).*/\1\/libartsc.so.*/'` arts_lib=`ls $arts_lib_spec | head -1 | sed 's/.*\/\(.*\)/\1/'` @@ -408,7 +408,7 @@ dnl See if the NAS audio interface is supported CheckNAS() { AC_ARG_ENABLE(nas, -[ --enable-nas support the NAS audio API [default=yes]], +[ --enable-nas support the NAS audio API [default=yes]], , enable_nas=yes) if test x$enable_audio = xyes -a x$enable_nas = xyes; then AC_MSG_CHECKING(for NAS audio support) @@ -438,7 +438,7 @@ dnl rcg07142001 See if the user wants the disk writer audio driver... CheckDiskAudio() { AC_ARG_ENABLE(diskaudio, -[ --enable-diskaudio support the disk writer audio driver [default=yes]], +[ --enable-diskaudio support the disk writer audio driver [default=yes]], , enable_diskaudio=yes) if test x$enable_audio = xyes -a x$enable_diskaudio = xyes; then CFLAGS="$CFLAGS -DDISKAUD_SUPPORT" @@ -776,7 +776,7 @@ dnl Find DirectFB CheckDirectFB() { AC_ARG_ENABLE(video-directfb, -[ --enable-video-directfb use DirectFB video driver [default=yes]], +[ --enable-video-directfb use DirectFB video driver [default=yes]], , enable_video_directfb=yes) if test x$enable_video = xyes -a x$enable_video_directfb = xyes; then video_directfb=no @@ -899,7 +899,7 @@ dnl Find the VGL includes and libraries CheckVGL() { AC_ARG_ENABLE(video-vgl, -[ --enable-video-vgl use VGL video driver [default=no]], +[ --enable-video-vgl use VGL video driver [default=no]], , enable_video_vgl=no) if test x$enable_video = xyes -a x$enable_video_vgl = xyes; then AC_MSG_CHECKING(for libVGL support) @@ -1577,6 +1577,22 @@ CheckDLOPEN() fi } +dnl Set up the Atari LDG (shared object loader) +CheckAtariLdg() +{ + AC_ARG_ENABLE(atari-ldg, +[ --enable-atari-ldg use Atari LDG for shared object loading [default=yes]], + , enable_atari_ldg=yes) + if test x$video_gem = xyes -a x$enable_atari_ldg = xyes; then + AC_CHECK_HEADER(ldg.h, have_ldg_hdr=yes) + AC_CHECK_LIB(ldg, ldg_open, have_ldg_lib=yes, have_ldg_lib=no, -lgem) + if test x$have_ldg_hdr = xyes -a x$have_ldg_lib = xyes; then + CFLAGS="$CFLAGS -DENABLE_LDG" + SYSTEM_LIBS="$SYSTEM_LIBS -lldg" + fi + fi +} + dnl Check for the usbhid(3) library on *BSD CheckUSBHID() { @@ -2429,6 +2445,7 @@ case "$target" in CheckAtariXbiosVideo CheckAtariGemVideo CheckAtariAudio + CheckAtariLdg CheckPTH # Set up files for the main() stub COPY_ARCH_SRC(src/main, linux, SDL_main.c) diff --git a/src/SDL_loadso.c b/src/SDL_loadso.c index 542483c95..e5881d50e 100644 --- a/src/SDL_loadso.c +++ b/src/SDL_loadso.c @@ -40,6 +40,9 @@ static char rcsid = # include # include # include +#elif defined(__MINT__) && defined(ENABLE_LDG) +# include +# include #else /*#error Unsupported dynamic link environment*/ #endif /* system type */ @@ -113,6 +116,9 @@ void *SDL_LoadObject(const char *sofile) if ( loaderror == NULL ) { handle = (void *)(library_id); } +#elif defined(__MINT__) && defined(ENABLE_LDG) +/* * */ + handle = (void *)ldg_open((char *)sofile, ldg_global); #endif /* system type */ if ( handle == NULL ) { @@ -163,6 +169,9 @@ void *SDL_LoadFunction(void *handle, const char *name) (char **)&symbol, &class) != noErr ) { loaderror = "Symbol not found"; } +#elif defined(__MINT__) && defined(ENABLE_LDG) +/* * */ + symbol = (void *)ldg_find((char *)name, (LDG *)handle); #endif /* system type */ if ( symbol == NULL ) { @@ -193,5 +202,8 @@ void SDL_UnloadObject(void *handle) /* * */ CFragConnectionID library_id = (CFragConnectionID)handle; CloseConnection(library_id); +#elif defined(__MINT__) && defined(ENABLE_LDG) +/* * */ + ldg_close((LDG *)handle, ldg_global); #endif /* system type */ }