From bcfb7b8b25003ec4731ded4b82b275b0478f5d4e Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Sat, 1 Jun 2002 18:48:13 +0000 Subject: [PATCH] Fixed shared library building on MacOS X (thanks Max!) --- configure.in | 34 ++++++++++++++++++++++--------- ltconfig | 57 +++++++++++++++++++++++++++++++++++++++------------- ltmain.sh | 29 ++++++++++++++++++++++++++ 3 files changed, 96 insertions(+), 24 deletions(-) diff --git a/configure.in b/configure.in index eda29c9fb..fbba8f2f4 100644 --- a/configure.in +++ b/configure.in @@ -1050,7 +1050,7 @@ CheckMacGL() 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 @@ CheckPTHREAD() ;; 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 @@ CheckDIRECTX() ]) 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 @@ case "$target" in 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 @@ case "$target" in 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_MACOSX, test $ARCH = macosx) 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 @@ fi 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 diff --git a/ltconfig b/ltconfig index 6b1c1a895..0d89bf14b 100755 --- a/ltconfig +++ b/ltconfig @@ -685,6 +685,11 @@ if test "$with_gcc" = yes; then 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 @@ else 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 @@ else 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 @@ freebsd*) 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 @@ osf3* | osf4* | osf5*) 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' diff --git a/ltmain.sh b/ltmain.sh index 0e7a37acf..636210779 100644 --- a/ltmain.sh +++ b/ltmain.sh @@ -951,6 +951,11 @@ compiler." prev= continue ;; + framework) + deplibs="$deplibs -framework $arg" + prev= + continue + ;; release) release="-$arg" prev= @@ -1037,6 +1042,11 @@ compiler." continue ;; + -framework) + prev=framework + continue + ;; + -L*) dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` # We need an absolute path. @@ -1768,6 +1778,16 @@ compiler." 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 @@ compiler." # 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