pmandin: Added Atari LDG shared object loader
authorPatrice Mandin <patmandin@gmail.com>
Wed, 16 Jul 2003 11:54:13 +0000
changeset 651 35ff0890ac4e
parent 650 fe445b59d307
child 652 a3bb929c9e2f
pmandin: Added Atari LDG shared object loader
README.MiNT
configure.in
src/SDL_loadso.c
--- a/README.MiNT	Sat Jul 12 13:30:30 2003 +0000
+++ b/README.MiNT	Wed Jul 16 11:54:13 2003 +0000
@@ -51,6 +51,7 @@
 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)
--- a/configure.in	Sat Jul 12 13:30:30 2003 +0000
+++ b/configure.in	Wed Jul 16 11:54:13 2003 +0000
@@ -380,7 +380,7 @@
             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 @@
 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 @@
 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 @@
 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 @@
 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 @@
     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 @@
         CheckAtariXbiosVideo
         CheckAtariGemVideo
         CheckAtariAudio
+        CheckAtariLdg
         CheckPTH
         # Set up files for the main() stub
         COPY_ARCH_SRC(src/main, linux, SDL_main.c)
--- a/src/SDL_loadso.c	Sat Jul 12 13:30:30 2003 +0000
+++ b/src/SDL_loadso.c	Wed Jul 16 11:54:13 2003 +0000
@@ -40,6 +40,9 @@
 # include <Strings.h>
 # include <CodeFragments.h>
 # include <Errors.h>
+#elif defined(__MINT__) && defined(ENABLE_LDG)
+# include <gem.h>
+# include <ldg.h>
 #else
 /*#error Unsupported dynamic link environment*/
 #endif /* system type */
@@ -113,6 +116,9 @@
 	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 @@
 	                (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 @@
 /* * */
 	CFragConnectionID library_id = (CFragConnectionID)handle;
 	CloseConnection(library_id);
+#elif defined(__MINT__) && defined(ENABLE_LDG)
+/* * */
+	ldg_close((LDG *)handle, ldg_global);
 #endif /* system type */
 }