diff --git a/ChangeLog b/ChangeLog
index 18317a14055176fa9bdaef80ebf12147353a7f9a..00763602372620ad413e487a945d6c5d0fb2b186 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2003-11-19  Andreas Tobler  <a.tobler@schweiz.ch>
+
+	* libtool.m4: Sync darwin bits from libtool cvs to build a gcc with
+	shared/dylibed libraries.
+	* ltmain.sh: Likewise.
+	* ltcf-c.sh: Likewise, disable shared library build for OS-X < 10.3.
+	* ltcf-cxx.sh: Likewise.
+	* ltcf-gcj.sh: Likewise.
+	* ltconfig: Likewise.
+
 2003-11-17  Stan Cox  <scox@redhat.com>
 
 	* MAINTAINERS: Add myself as iq2000 port maintainer.
diff --git a/libtool.m4 b/libtool.m4
index 3a6ec825645fde9f212b8e897abfeadc9f3a88e9..0312861d47f3f236ede696d2715c78b2751e045d 100644
--- a/libtool.m4
+++ b/libtool.m4
@@ -607,6 +607,7 @@ cygwin* | mingw* |pw32*)
   ;;
 
 darwin* | rhapsody*)
+  # this will be overwritten by pass_all, but leave it in just in case
   lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library'
   lt_cv_file_magic_cmd='/usr/bin/file -L'
   case "$host_os" in
@@ -617,6 +618,7 @@ darwin* | rhapsody*)
     lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib'
     ;;
   esac
+  lt_cv_deplibs_check_method=pass_all
   ;;
 
 freebsd* )
@@ -780,8 +782,9 @@ AC_DEFUN([AC_CHECK_LIBM],
 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
 LIBM=
 case $host in
-*-*-beos* | *-*-cygwin* | *-*-pw32*)
+*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
   # These system don't have libm
+  # on darwin the libm is a symbolic link to libSystem.dylib
   ;;
 *-ncr-sysv4.3*)
   AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
diff --git a/ltcf-c.sh b/ltcf-c.sh
index d60a3baa19bc13295706d4471e0d6fcad7b8aac5..2c51fd3d55c655bdd9e8cac827df79230d965658 100644
--- a/ltcf-c.sh
+++ b/ltcf-c.sh
@@ -175,16 +175,6 @@ EOF
       $CC $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags'
     ;;
 
-  darwin* | rhapsody*)
-    allow_undefined_flag='-undefined suppress'
-    archive_cmds='$CC `test .$module = .yes && echo -bundle || echo -dynamiclib` $allow_undefined_flag -o $lib $libobjs $deplibs $linkopts -install_name $rpath/$soname `test -n "$verstring" -a x$verstring != x0.0 && echo $verstring`'
-    # We need to add '_' to the symbols in $export_symbols first
-    #archive_expsym_cmds="$archive_cmds"' && strip -s $export_symbols'
-    hardcode_direct=yes
-    hardcode_shlibpath_var=no
-    whole_archive_flag_spec='-all_load $convenience'
-    ;;
-
   netbsd*)
     if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
       archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
@@ -385,10 +375,53 @@ else
     fix_srcfile_path='`cygpath -w "$srcfile"`'
     ;;
 
-  freebsd1*)
-    ld_shlibs=no
+  darwin* | rhapsody*)
+    case "$host_os" in
+    rhapsody* | darwin1.[[012]])
+	allow_undefined_flag='-undefined suppress'
+	;;
+    *) # Darwin 1.3 on
+    if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+       allow_undefined_flag='-flat_namespace -undefined suppress'
+    else
+	case ${MACOSX_DEPLOYMENT_TARGET} in
+	    10.[[012]])
+		allow_undefined_flag='-flat_namespace -undefined suppress'
+		;;
+	    10.*)
+		allow_undefined_flag='-undefined dynamic_lookup'
+		;;
+	esac
+    fi
+    ;;
+    esac
+    # Disable shared library build on OS-X older than 10.3.
+    case $host_os in
+	darwin[1-6]*)
+	    can_build_shared=no
+	    ;;
+	darwin7*)
+	    can_build_shared=yes
+	    ;;
+    esac
+    output_verbose_link_cmd='echo'
+    archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring'
+    module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+    # Don't fix this by using the ld -exported_symbols_list flag,
+    # it doesn't exist in older darwin ld's
+    archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag  -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    module_expsym_cmds='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    hardcode_direct=no
+    hardcode_automatic=yes
+    hardcode_shlibpath_var=unsupported
+    whole_archive_flag_spec='-all_load $convenience'
+    link_all_deplibs=yes
     ;;
 
+  freebsd1*)
+  ld_shlibs=no
+  ;;
+
   # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
   # support.  Future versions do this automatically, but an explicit c++rt0.o
   # does not break anything, and helps significantly (at the cost of a little
@@ -670,7 +703,7 @@ else
     darwin* | rhapsody*)
       # PIC is the default on this platform
       # Common symbols not allowed in MH_DYLIB files
-      lt_cv_prog_cc_pic='-fno-common'
+      ac_cv_prog_cc_pic='-fno-common'
       ;;
     *djgpp*)
       # DJGPP does not support shared libraries at all
diff --git a/ltcf-cxx.sh b/ltcf-cxx.sh
index 3044fc39bd270f940489a072c28355cf4b9a3e37..2ecd53e5758b9325ecfbb5c86c26e9b5dbb8eb93 100644
--- a/ltcf-cxx.sh
+++ b/ltcf-cxx.sh
@@ -223,6 +223,51 @@ case $host_os in
         ;;
     esac
     ;;
+
+  darwin* | rhapsody*)
+    case "$host_os" in
+	rhapsody* | darwin1.[[012]])
+	    allow_undefined_flag='-undefined suppress'
+	;;
+	*) # Darwin 1.3 on
+	    if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+		allow_undefined_flag='-flat_namespace -undefined suppress'
+      else
+	case ${MACOSX_DEPLOYMENT_TARGET} in
+	    10.[[012]])
+		allow_undefined_flag='-flat_namespace -undefined suppress'
+	    ;;
+	    10.*)
+		allow_undefined_flag='-undefined dynamic_lookup'
+	    ;;
+	esac
+    fi
+    ;;
+    esac
+    # Disable shared library build on OS-X older than 10.3.
+    case $host_os in
+	darwin[1-6]*)
+	    can_build_shared=no
+	    ;;
+	darwin7*)
+	    can_build_shared=yes
+	    ;;
+    esac
+    output_verbose_link_cmd='echo'
+    archive_cmds='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+    module_cmds='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+
+    # Don't fix this by using the ld -exported_symbols_list flag,
+    # it doesn't exist in older darwin ld's
+    archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    module_expsym_cmds='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    hardcode_direct=no
+    hardcode_automatic=yes
+    hardcode_shlibpath_var=unsupported
+    whole_archive_flag_spec='-all_load $convenience'
+    link_all_deplibs=yes
+    ;;
+
   dgux*)
     case $cc_basename in
       ec++)
@@ -712,7 +757,7 @@ if test "$with_gcc" = yes; then
   darwin* | rhapsody*)
     # PIC is the default on this platform
     # Common symbols not allowed in MH_DYLIB files
-    lt_cv_prog_cc_pic='-fno-common'
+    ac_cv_prog_cc_pic='-fno-common'
     ;;
   *djgpp*)
     # DJGPP does not support shared libraries at all
diff --git a/ltcf-gcj.sh b/ltcf-gcj.sh
index 2d704975c86fc8bf33abb88adf9585f4155e2730..ac4fbbca3d44dada8af575d2b5ef1410dd51e525 100644
--- a/ltcf-gcj.sh
+++ b/ltcf-gcj.sh
@@ -378,6 +378,49 @@ else
     fix_srcfile_path='`cygpath -w "$srcfile"`'
     ;;
 
+  darwin* | rhapsody*)
+    case "$host_os" in
+    rhapsody* | darwin1.[[012]])
+	allow_undefined_flag='-undefined suppress'
+	;;
+    *) # Darwin 1.3 on
+      if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+	  allow_undefined_flag='-flat_namespace -undefined suppress'
+      else
+	  case ${MACOSX_DEPLOYMENT_TARGET} in
+	      10.[[012]])
+		  allow_undefined_flag='-flat_namespace -undefined suppress'
+		  ;;
+	      10.*)
+		  allow_undefined_flag='-undefined dynamic_lookup'
+		  ;;
+	  esac
+      fi
+      ;;
+    esac
+    # Disable shared library build on OS-X older than 10.3.
+    case $host_os in
+	darwin[1-6]*)
+	    can_build_shared=no
+	    ;;
+	darwin7*)
+	    can_build_shared=yes
+	    ;;
+    esac
+    output_verbose_link_cmd='echo'
+    archive_cmds='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+    module_cmds='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+      # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+    archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    module_expsym_cmds='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    hardcode_direct=no
+    hardcode_automatic=yes
+    hardcode_shlibpath_var=unsupported
+    whole_archive_flag_spec='-all_load $convenience'
+    link_all_deplibs=yes
+    ;;
+
+
   freebsd1*)
     ld_shlibs=no
     ;;
@@ -628,6 +671,12 @@ fi
       # built for inclusion in a dll (and should export symbols for example).
       ac_cv_prog_cc_pic='-DDLL_EXPORT'
       ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      ac_cv_prog_cc_pic='-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,
diff --git a/ltconfig b/ltconfig
index 7ed24bc0a6df456b4c78ddd79464c5ae3e20fe5a..9c420ace72625ef3fc4f80a18b73b2b5b8eccb8c 100755
--- a/ltconfig
+++ b/ltconfig
@@ -965,6 +965,7 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
 library_names_spec=
 libname_spec='lib$name'
 soname_spec=
+shrext=".so"
 postinstall_cmds=
 postuninstall_cmds=
 finish_cmds=
@@ -1102,13 +1103,28 @@ cygwin* | mingw* | pw32*)
 
 darwin* | rhapsody*)
   dynamic_linker="$host_os dyld"
+  lt_cv_dlopen="dyld"
+  lt_cv_dlopen_libs=
+  lt_cv_dlopen_self=yes
   version_type=darwin
   need_lib_prefix=no
   need_version=no
-  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`'
+  # Disable shared library build on OS-X older than 10.3.
+  case $host_os in
+      darwin[1-6]*)
+	  can_build_shared=no
+	  ;;
+      darwin7*)
+	  can_build_shared=yes
+	  ;;
+  esac
+  library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
   shlibpath_overrides_runpath=yes
   shlibpath_var=DYLD_LIBRARY_PATH
+  shrext='$(test .$module = .yes && echo .so || echo .dylib)'
+  sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
   ;;
 
 freebsd1*)
@@ -2325,6 +2341,9 @@ objext="$objext"
 # Old archive suffix (normally "a").
 libext="$libext"
 
+# Shared library suffix (normally ".so").
+shrext='$shrext'
+
 # Executable file suffix (normally "").
 exeext="$exeext"
 
diff --git a/ltmain.sh b/ltmain.sh
index 5d4281c54d2d08ee93d210fe00f27ad339929f8f..5ccf95c7d1d6bd7d4673e2dd8fd183c2aa0ba1dd 100644
--- a/ltmain.sh
+++ b/ltmain.sh
@@ -1111,6 +1111,19 @@ EOF
 	  finalize_command="$finalize_command $wl$qarg"
 	  continue
 	  ;;
+	framework)
+	  case $host in
+	   *-*-darwin*)
+	     case "$deplibs " in
+	       *" $qarg.framework "*) ;;
+	       *) deplibs="$deplibs $qarg.framework" # this is fixed later
+		  ;;
+	     esac
+	     ;;
+	  esac
+	  prev=
+	  continue
+	  ;;
 	*)
 	  eval "$prev=\"\$arg\""
 	  prev=
@@ -1363,6 +1376,10 @@ EOF
 	prev=xlinker
 	continue
 	;;
+      -framework)
+	prev=framework
+	continue
+	;;
 
       # Some other compiler flag.
       -* | +*)
@@ -1841,6 +1858,13 @@ EOF
 	*) . ./$lib ;;
 	esac
 
+	case $host in
+	    *-*-darwin*)
+	  # Convert "-framework foo" to "foo.framework" in dependency_libs
+		test -n "$dependency_libs" && dependency_libs=`$echo "X$dependency_libs" | $Xsed -e 's/-framework \([^ $]*\)/\1.framework/g'`
+		;;
+	esac
+
 	if test "$linkmode,$pass" = "lib,link" ||
 	   test "$linkmode,$pass" = "prog,scan" ||
 	   { test $linkmode = oldlib && test $linkmode = obj; }; then
@@ -2446,6 +2470,7 @@ EOF
       case $outputname in
       lib*)
 	name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
+	eval shared_ext=\"$shrext\"
 	eval libname=\"$libname_spec\"
 	;;
       *)
@@ -2457,6 +2482,7 @@ EOF
 	if test "$need_lib_prefix" != no; then
 	  # Add the "lib" prefix for modules if required
 	  name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
+	  eval shared_ext=\"$shrext\"
 	  eval libname=\"$libname_spec\"
 	else
 	  libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
@@ -2644,7 +2670,16 @@ EOF
 	# Clear the version info if we defaulted, and they specified a release.
 	if test -z "$vinfo" && test -n "$release"; then
 	  major=
-	  verstring="0.0"
+	  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
@@ -3020,6 +3055,14 @@ EOF
 	    fi
 	  fi
 	fi
+	# Time to change all our "foo.framework" stuff back to "-framework foo"
+	case $host in
+	    *-*-darwin*)
+		newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).framework% -framework \1%g'`
+		dependency_libs=`$echo "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).framework% -framework \1%g'`
+		;;
+	esac
+	# Done checking deplibs!
 	# Done checking deplibs!
 	deplibs=$newdeplibs
       fi
@@ -3088,6 +3131,7 @@ EOF
 
 	# Get the real and link names of the library.
 	eval library_names=\"$library_names_spec\"
+	eval shared_ext=\"$shrext\"
 	set dummy $library_names
 	realname="$2"
 	shift; shift
@@ -3533,6 +3577,19 @@ EOF
 	;;
       esac
 
+      case $host in
+      *-*-darwin*)
+      # Don't allow lazy linking, it breaks C++ global constructors
+	if test "$tagname" = CXX ; then
+	   compile_command="$compile_command ${wl}-bind_at_load"
+	   finalize_command="$finalize_command ${wl}-bind_at_load"
+	fi
+      # Time to change all our "foo.framework" stuff back to "-framework foo"
+	compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).framework% -framework \1%g'`
+	finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).framework% -framework \1%g'`
+	;;
+      esac
+
       compile_command="$compile_command $compile_deplibs"
       finalize_command="$finalize_command $finalize_deplibs"