Fixed shared library building on MacOS X (thanks Max!)
authorSam Lantinga <slouken@libsdl.org>
Sat, 01 Jun 2002 18:48:13 +0000
changeset 387 469d5c0da01d
parent 386 2c5d4c22a2ac
child 388 4e9044b378fd
Fixed shared library building on MacOS X (thanks Max!)
configure.in
ltconfig
ltmain.sh
--- a/configure.in	Sat Jun 01 18:43:51 2002 +0000
+++ b/configure.in	Sat Jun 01 18:48:13 2002 +0000
@@ -1050,7 +1050,7 @@
         CFLAGS="$CFLAGS -DHAVE_OPENGL"
         case "$target" in
             *-*-darwin*)
-                SDL_LIBS="$SDL_LIBS -framework OpenGL -framework AGL"
+                SYSTEM_LIBS="$SYSTEM_LIBS -framework OpenGL -framework AGL"
         esac
     fi
 }
@@ -1247,7 +1247,6 @@
                 ;;
         esac
     fi
-    AM_CONDITIONAL(USE_CLONE, test x$use_clone = xyes)
 }
 
 dnl See if we can use GNU pth library for threads
@@ -1322,7 +1321,6 @@
         ])
         AC_MSG_RESULT($use_directx)
     fi
-    AM_CONDITIONAL(USE_DIRECTX, test x$use_directx = xyes)
 
     CFLAGS="$CFLAGS -I\$(top_srcdir)/src/video/wincommon"
     SYSTEM_LIBS="$SYSTEM_LIBS -luser32 -lgdi32 -lwinmm"
@@ -2344,7 +2342,7 @@
         if test x$enable_joystick = xyes; then
             JOYSTICK_SUBDIRS="$JOYSTICK_SUBDIRS darwin"
             JOYSTICK_DRIVERS="$JOYSTICK_DRIVERS darwin/libjoystick_darwin.la"
-            SDL_LIBS="$SDL_LIBS -framework IOKit"
+            SYSTEM_LIBS="$SYSTEM_LIBS -framework IOKit"
         fi
         # Set up files for the cdrom library
         if test x$enable_cdrom = xyes; then
@@ -2370,9 +2368,10 @@
         if test x$enable_timers = xyes; then
             COPY_ARCH_SRC(src/timer, linux, SDL_systimer.c)
         fi
-        # The MacOS X platform requires special setup
-        SDL_CFLAGS="$SDL_CFLAGS -F/System/Library/Frameworks/Carbon.framework -F/System/Library/Frameworks/Cocoa.framework"
-        SDL_LIBS="-lSDLmain $SDL_LIBS -framework Carbon -framework Cocoa"
+        # The MacOS X platform requires special setup.
+        SDL_LIBS="-lSDLmain $SDL_LIBS"
+        # The Cocoa backend still needs Carbon, and the YUV code QuickTime
+        SYSTEM_LIBS="$SYSTEM_LIBS -framework Cocoa -framework Carbon -framework QuickTime"
         ;;
     *-*-mint*)
         ARCH=mint
@@ -2451,6 +2450,10 @@
 AM_CONDITIONAL(TARGET_QNX, test $ARCH = qnx)
 AM_CONDITIONAL(TARGET_MINT, test $ARCH = mint)
 
+# More automake conditionals
+AM_CONDITIONAL(USE_DIRECTX, test x$use_directx = xyes)
+AM_CONDITIONAL(USE_CLONE, test x$use_clone = xyes)
+
 # Set conditional variables for shared and static library selection.
 # These are not used in any Makefile.am but in sdl-config.in.
 AM_CONDITIONAL([ENABLE_SHARED], [test "$enable_shared" = yes])
@@ -2464,11 +2467,22 @@
 if test $ARCH = solaris; then
   SDL_RLD_FLAGS="-R\${exec_prefix}/lib"
 fi
-if test $ARCH = openbsd -o $ARCH = bsdi; then
+
+case "$ARCH" in
+  openbsd | bsdi)
     SHARED_SYSTEM_LIBS="$SYSTEM_LIBS"
-else
+    ;;
+  macosx)
+    SHARED_SYSTEM_LIBS="-framework Cocoa"
+    if test x$enable_video = xyes -a x$enable_video_opengl = xyes; then
+      SHARED_SYSTEM_LIBS="$SHARED_SYSTEM_LIBS -framework OpenGL"
+    fi
+    ;;
+  *)
     SHARED_SYSTEM_LIBS=""
-fi
+    ;;
+esac
+
 STATIC_SYSTEM_LIBS="$SYSTEM_LIBS"
 
 dnl Output the video drivers we use
--- a/ltconfig	Sat Jun 01 18:43:51 2002 +0000
+++ b/ltconfig	Sat Jun 01 18:48:13 2002 +0000
@@ -685,6 +685,11 @@
   cygwin* | mingw* | os2*)
     # We can build DLLs from non-PIC.
     ;;
+  darwin* | rhapsody*)
+    # PIC is the default on this platform
+    # Common symbols not allowed in MH_DYLIB files
+    pic_flag='-fno-common'
+    ;;
   amigaos*)
     # FIXME: we need at least 68020 code to build shared libraries, but
     # adding the `-m68020' flag to GCC prevents building anything better,
@@ -1414,6 +1419,23 @@
     hardcode_shlibpath_var=no
     ;;
 
+  darwin* | rhapsody*)
+    case "$host_os" in
+    rhapsody* | darwin1.[012])
+      allow_undefined_flag='-undefined suppress'
+      ;;
+    *) # Darwin 1.3 on
+      allow_undefined_flag='-undefined error'
+      ;;
+    esac
+    archive_cmds='$nonopt $(test .$module = .yes && echo -bundle || echo -dynamiclib) $allow_undefined_flag -o $lib $libobjs $deplibs $linkopts -install_name $rpath/$soname $verstring'
+    # We need to add '_' to the symbols in $export_symbols first
+    #archive_expsym_cmds="$archive_cmds"' && strip -s $export_symbols $lib'
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    whole_archive_flag_spec='-all_load $convenience'
+    ;;
+
   hpux9* | hpux10* | hpux11*)
     case "$host_os" in
     hpux9*) archive_cmds='$rm $objdir/$soname~$LD -b +b $install_libdir -o $objdir/$soname $libobjs $deplibs $linkopts~test $objdir/$soname = $lib || mv $objdir/$soname $lib' ;;
@@ -1501,12 +1523,6 @@
     hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
     hardcode_libdir_separator=:
     ;;
-  rhapsody*)
-    archive_cmds='$CC -bundle -undefined suppress -o $lib $libobjs $deplibs $linkopts'
-    hardcode_libdir_flags_spec='-L$libdir'
-    hardcode_direct=yes
-    hardcode_shlibpath_var=no
-    ;;
                                        
   sco3.2v5*)
     archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
@@ -1984,6 +2000,27 @@
   esac
   ;;
 
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  deplibs_check_method='file_magic Mach-O dynamically linked shared library'
+  file_magic_cmd='/usr/bin/file -L'
+  case "$host_os" in
+  rhapsody* | darwin1.[012])
+    file_magic_test_file='/System/Library/Frameworks/System.framework/System'
+    ;;
+  *) # Darwin 1.3 on
+    file_magic_test_file='/usr/lib/libSystem.dylib'
+    ;;
+  esac
+  library_names_spec='${libname}${release}${versuffix}.$(test .$module = .yes && echo so || echo dylib) ${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib) ${libname}.$(test .$module = .yes && echo so || echo dylib)'
+  soname_spec='${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib)'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  ;;
+
 gnu*)
   version_type=linux
   need_lib_prefix=no
@@ -2141,14 +2178,6 @@
   sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
   ;;
 
-rhapsody*)
-  version_type=sunos
-  library_names_spec='${libname}.so'
-  soname_spec='${libname}.so'
-  shlibpath_var=DYLD_LIBRARY_PATH
-  deplibs_check_method=pass_all
-  ;;
-
 sco3.2v5*)
   version_type=osf
   soname_spec='${libname}${release}.so$major'
--- a/ltmain.sh	Sat Jun 01 18:43:51 2002 +0000
+++ b/ltmain.sh	Sat Jun 01 18:48:13 2002 +0000
@@ -951,6 +951,11 @@
 	  prev=
 	  continue
 	  ;;
+	framework)
+	  deplibs="$deplibs -framework $arg"
+	  prev=
+	  continue
+	  ;;
 	release)
 	  release="-$arg"
 	  prev=
@@ -1037,6 +1042,11 @@
 	continue
 	;;
 
+      -framework)
+	prev=framework
+	continue
+	;;
+
       -L*)
 	dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
 	# We need an absolute path.
@@ -1768,6 +1778,16 @@
 	  versuffix="-$major-$age-$revision"
 	  ;;
 
+	darwin)
+	  # Like Linux, but with the current version available in
+	  # verstring for coding it into the library header
+	  major=.`expr $current - $age`
+	  versuffix="$major.$age.$revision"
+	  # Darwin ld doesn't like 0 for these options...
+	  minor_current=`expr $current + 1`
+	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+	  ;;
+
 	*)
 	  $echo "$modename: unknown library version type \`$version_type'" 1>&2
 	  echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
@@ -1778,7 +1798,16 @@
 	# Clear the version info if we defaulted, and they specified a release.
 	if test -z "$vinfo" && test -n "$release"; then
 	  major=
+	  case "$version_type" in
+	  darwin)
+	    # we can't check for "0.0" in archive_cmds due to quoting
+	    # problems, so we reset it completely
+	    verstring=""
+	    ;;
+	  *)
 	  verstring="0.0"
+	    ;;
+	  esac
 	  if test "$need_version" = no; then
 	    versuffix=
 	  else