diff -Naur crosstool-0.28-rc5-orig/all.sh crosstool-0.28-rc5/all.sh
--- crosstool-0.28-rc5-orig/all.sh	2004-03-30 22:37:37.000000000 -0800
+++ crosstool-0.28-rc5/all.sh	2004-06-19 12:17:30.000000000 -0700
@@ -17,7 +17,13 @@
 test -z "${BINUTILS_DIR}"     && abort "Please set BINUTILS_DIR to the bare filename of the binutils tarball or directory"
 test -z "${GCC_DIR}"          && abort "Please set GCC_DIR to the bare filename of the gcc tarball or directory"
 test -z "${LINUX_DIR}"        && abort "Please set LINUX_DIR to the bare filename of the kernel tarball or directory"
-test -z "${GLIBC_DIR}"        && abort "Please set GLIBC_DIR to the bare filename of the glibc tarball or directory"
+test -z "${LIBC_DIR}"         && abort "Please set LIBC_DIR to the bare filename of the C library tarball or directory"
+test -z "${C_LIBRARY}"        && abort "Please set C_LIBRARY to 'glibc' or 'uclibc'"
+case ${C_LIBRARY} in
+    glibc)  ;;
+    uclibc) ;;
+    *)      abort "Unsupported C library ${C_LIBRARY}; please set C_LIBRARY to 'glibc' or 'uclibc'"
+esac
 
 # Three environment variables are optional, namely:
 test -z "${DEJAGNU}"          && echo  "DEJAGNU not set, so not running any regression tests"
@@ -32,7 +38,7 @@
 
 set -ex
 
-TOOLCOMBO=$GCC_DIR-$GLIBC_DIR
+TOOLCOMBO=$GCC_DIR-$LIBC_DIR
 BUILD_DIR=`pwd`/build/$TARGET/$TOOLCOMBO
 TOP_DIR=`pwd`
 
@@ -43,15 +49,17 @@
 fi
 
 # Sanity checks
-case x$PREFIX in
-x/) abort "Don't set PREFIX to /, as \$PREFIX gets deleted!" ;;
-x/usr) abort "Don't set PREFIX to /usr, as \$PREFIX gets deleted!" ;;
-*) ;;
-esac
+if test "x${PREFIX_NO_REMOVE}" = "x"; then
+    case x$PREFIX in
+        x/) abort "Don't set PREFIX to /, as \$PREFIX gets deleted!" ;;
+        x/usr) abort "Don't set PREFIX to /usr, as \$PREFIX gets deleted!" ;;
+        *) ;;
+    esac
+fi
 
 case x$USER in
-xroot) abort "Don't run all.sh or crosstool.sh as root, it's dangerous" ;;
-*) ;;
+    xroot) abort "Don't run all.sh or crosstool.sh as root, it's dangerous" ;;
+    *) ;;
 esac
 
 # Arbitrary locations for the input and output of the build.
@@ -96,15 +104,19 @@
 
 if test "$opt_no_build" = ""; then
     # Build
-    rm  -rf  $PREFIX
-    mkdir -p $PREFIX
+    if test "x${PREFIX_NO_REMOVE}" = "x"; then
+        rm  -rf  $PREFIX
+        mkdir -p $PREFIX
+    else
+        rm -rf $PREFIX/$TARGET
+    fi
     mkdir -p $BUILD_DIR
     cd $BUILD_DIR
     sh $TOP_DIR/crosstool.sh
     cd $TOP_DIR
 
     # Cute little compile test
-    sh testhello.sh
+    sh testhello.sh $GCC_LANGUAGES
 fi
 
 if test "$opt_builduserland" = "1"; then
diff -Naur crosstool-0.28-rc5-orig/crosstest.sh crosstool-0.28-rc5/crosstest.sh
--- crosstool-0.28-rc5-orig/crosstest.sh	2004-03-18 10:22:32.000000000 -0800
+++ crosstool-0.28-rc5/crosstest.sh	2004-06-19 12:17:30.000000000 -0700
@@ -23,7 +23,13 @@
 test -z "${BUILD_DIR}"      && abort "Please set BUILD_DIR to the directory build-gcc etc. live in"
 test -z "${BINUTILS_DIR}"   && abort "Please set BINUTILS_DIR to the bare filename of the binutils tarball or directory"
 test -z "${GCC_DIR}"        && abort "Please set GCC_DIR to the bare filename of the gcc tarball or directory"
-test -z "${GLIBC_DIR}"      && abort "Please set GLIBC_DIR to the bare filename of the glibc tarball or directory"
+test -z "${LIBC_DIR}"       && abort "Please set LIBC_DIR to the bare filename of the C library tarball or directory"
+test -z "${C_LIBRARY}"      && abort "Please set C_LIBRARY to 'glibc' or 'uclibc'"
+case ${C_LIBRARY} in
+    glibc)  ;;
+    uclibc) ;;
+    *)      abort "Unsupported C library ${C_LIBRARY}; please set C_LIBRARY to 'glibc' or 'uclibc'"
+esac
 test -z "${TARGET}"         && abort "Please set TARGET to the Gnu target identifier (e.g. pentium-linux)"
 test -z "${TARGET_CFLAGS}"  && abort "Please set TARGET_CFLAGS to any compiler flags needed when building glibc (-O recommended)"
 test -z "${TOP_DIR}"        && abort "Please set TOP_DIR to where the crosstool scripts live"
@@ -108,7 +114,7 @@
 find . -name '*.log' | xargs rm -f
 
 #--- glibc tests ---
-if true; then
+if test "${C_LIBRARY}" = glibc ; then
 cd build-glibc
 
 make tests
@@ -184,7 +190,7 @@
    echo "Some glibc test failed.  Check logfiles on target in /jail/build-glibc/*/*.out."
 fi
 # it's not really a summary yet, but let's copy it up anyway
-cp glibctest.out $TOP_DIR/$TARGET-$GCC_DIR-$GLIBC_DIR.glibc.sum
+cp glibctest.out $TOP_DIR/$TARGET-$GCC_DIR-$LIBC_DIR.glibc.sum
 fi
 
 #--- gcc tests ---
@@ -253,7 +259,7 @@
 # Run standard test log analysis tool
 sh ../${GCC_DIR}/contrib/test_summary  | sed '1d;/EOF/,$d' > test_summary.log
 
-cp test_summary.log $TOP_DIR/$TARGET-$GCC_DIR-$GLIBC_DIR.gcc.sum
+cp test_summary.log $TOP_DIR/$TARGET-$GCC_DIR-$LIBC_DIR.gcc.sum
 
 cd ..
 
@@ -269,7 +275,7 @@
 	echo "" >> test_summary.log
 done
 
-cp test_summary.log $TOP_DIR/$TARGET-$GCC_DIR-$GLIBC_DIR.binutils.sum
+cp test_summary.log $TOP_DIR/$TARGET-$GCC_DIR-$LIBC_DIR.binutils.sum
 
 cd ..
 
diff -Naur crosstool-0.28-rc5-orig/crosstool.sh crosstool-0.28-rc5/crosstool.sh
--- crosstool-0.28-rc5-orig/crosstool.sh	2004-04-11 02:06:56.000000000 -0700
+++ crosstool-0.28-rc5/crosstool.sh	2004-06-19 12:17:30.000000000 -0700
@@ -24,7 +24,13 @@
 test -z "${SRC_DIR}"          && abort "Please set SRC_DIR to the directory where the source tarballs are to be unpacked"
 test -z "${BINUTILS_DIR}"     && abort "Please set BINUTILS_DIR to the bare filename of the binutils tarball or directory"
 test -z "${GCC_DIR}"          && abort "Please set GCC_DIR to the bare filename of the gcc tarball or directory"
-test -z "${GLIBC_DIR}"        && abort "Please set GLIBC_DIR to the bare filename of the glibc tarball or directory"
+test -z "${LIBC_DIR}"         && abort "Please set LIBC_DIR to the bare filename of the C library tarball or directory"
+test -z "${C_LIBRARY}"        && abort "Please set C_LIBRARY to 'glibc' or 'uclibc'"
+case ${C_LIBRARY} in
+    glibc)  ;;
+    uclibc) ;;
+    *)      abort "Unsupported C library ${C_LIBRARY}; please set C_LIBRARY to 'glibc' or 'uclibc'"
+esac
 test -z "${LINUX_DIR}"        && abort "Please set LINUX_DIR to the bare filename of the kernel tarball or directory"
 test -z "${TARGET}"           && abort "Please set TARGET to the Gnu target identifier (e.g. pentium-linux)"
 test -z "${TARGET_CFLAGS}"    && abort "Please set TARGET_CFLAGS to any compiler flags needed when building glibc (-O recommended)"
@@ -33,10 +39,12 @@
 test -z "${GCC_EXTRA_CONFIG}" && echo  "GCC_EXTRA_CONFIG not set, so not passing any extra options to gcc's configure script"
 test -z "${GLIBC_EXTRA_CONFIG}" && echo "GLIBC_EXTRA_CONFIG not set, so not passing any extra options to glibc's configure script"
 test -z "${GLIBC_EXTRA_ENV}"  && echo "GLIBC_EXTRA_ENV not set, so not passing any extra environment variables to glibc's configure script"
-test -z "${KERNELCONFIG}" && test -z ${LINUX_DIR}/.config  && echo  "KERNELCONFIG not set, and no .config file found, so not configuring linux kernel"
+test -z "${KERNELCONFIG}" && test '!' -f ${LINUX_DIR}/.config  && echo  "KERNELCONFIG not set, and no .config file found, so not configuring linux kernel"
+test "${C_LIBRARY}" = uclibc && test -z "${UCLIBCCONFIG}" &&  test '!' -f ${LIBC_DIR}/.config && echo "UCLIBCCONFIG not set, and no .config file found, so using a default config\n    You will probably want to change this."
 test -z "${USE_SYSROOT}"     && echo  "USE_SYSROOT not set, so not configuring with --with-sysroot"
 
 test -z "${KERNELCONFIG}" || test -r "${KERNELCONFIG}"  || abort  "Can't read file KERNELCONFIG = $KERNELCONFIG, please fix."
+test -z "${UCLIBCCONFIG}" || test -r "${UCLIBCCONFIG}"  || abort  "Can't read file UCLIBCCONFIG = $UCLIBCCONFIG, please fix."
 
 test -z "${LD_LIBRARY_PATH}" || abort  "glibc refuses to build if LD_LIBRARY_PATH is set.  Please unset it before running this script."
 
@@ -46,7 +54,9 @@
 GCC_LANGUAGES=${GCC_LANGUAGES-c,c++}
 
 # And one is derived.
-GLIBCTHREADS_FILENAME=`echo $GLIBC_DIR | sed 's/glibc-/glibc-linuxthreads-/'`
+if test "${C_LIBRARY}" = glibc ; then
+    GLIBCTHREADS_FILENAME=`echo $LIBC_DIR | sed 's/glibc-/glibc-linuxthreads-/'`
+fi
 
 # Check for a few prerequisites that have tripped people up.
 awk '/x/' < /dev/null  || abort "You need awk to build a toolchain."
@@ -83,7 +93,7 @@
 BINUTILS_DIR=`cd ${SRC_DIR}/${BINUTILS_DIR}; pwd`
 GCC_DIR=`cd ${SRC_DIR}/${GCC_DIR}; pwd`
 LINUX_DIR=`cd ${SRC_DIR}/${LINUX_DIR}; pwd`
-GLIBC_DIR=`cd ${SRC_DIR}/${GLIBC_DIR}; pwd`
+LIBC_DIR=`cd ${SRC_DIR}/${LIBC_DIR}; pwd`
 
 # make sure the build product's binaries are in the search path
 PATH="${PREFIX}/bin:${PATH}"
@@ -183,6 +193,60 @@
 test -x ${PREFIX}/bin/${TARGET}-ld || abort Build failed during binutils 
 
 #---------------------------------------------------------
+#
+# A few functions for configuring uClibc, since they're used twice
+defaultuClibcConfig() {
+    make defconfig
+    UCARCH=${ARCH}
+    if test "${UCARCH}" = "ppc"; then
+        UCARCH=powerpc
+    fi
+
+    cat > munge-defconfig.sed <<-ENDSED
+		s/^\\(TARGET_.*\\)=y$/\\# \\1 is not set/
+		s/^\\# TARGET_${UCARCH} is not set/TARGET_${UCARCH}=y/
+		s/^TARGET_ARCH=".*"/TARGET_ARCH="${UCARCH}"/
+		s/^\\(TARGET_.*_ENDIAN\\)=y/\\# \\1 is not set/
+ENDSED
+    sed -i -f munge-defconfig.sed .config
+}
+
+correctuClibcConfig() {
+    # Change paths to work with crosstool
+    QUOTED_LINUX_DIR=`echo ${LINUX_DIR} | sed -e 's/\//\\\\\//g'`
+    cat > munge-oldconfig.sed <<-ENDSED
+		s/^DEVEL_PREFIX=".*"/DEVEL_PREFIX="\\/"/
+		s/^RUNTIME_PREFIX=".*"/RUNTIME_PREFIX="\\/"/
+		s/^KERNEL_SOURCE=".*"/KERNEL_SOURCE="${QUOTED_LINUX_DIR}"/
+		s/^UCLIBC_DOWNLOAD_PREGENERATED_LOCALE=y/\\# UCLIBC_DOWNLOAD_PREGENERATED_LOCALE is not set/
+ENDSED
+    # Force on options needed for C++ if we'll be making a C++ compiler.
+    # Note that the two PREGEN_LOCALE and the XLOCALE lines may be missing
+    # entirely if LOCALE is not set.  If LOCALE was already set, we'll
+    # assume the user has already made all the appropriate generation
+    # arrangements.  Note that having the uClibc Makefile download the
+    # pregenerated locales is not compatible with crosstool; besides,
+    # crosstool downloads them as part of getandpatch.sh.
+    if echo "$TESTLANG" | egrep "(^|,)c++(,|\$)"; then
+        cat >> munge-oldconfig.sed <<-ENDSED
+		s/^\\# DO_C99_MATH is not set/DO_C99_MATH=y/
+		s/^\\# UCLIBC_CTOR_DTOR is not set/UCLIBC_CTOR_DTOR=y/
+ENDSED
+        if grep -v UCLIBC_HAS_GETTEXT_AWARENESS .config; then
+            # This one often slips through the cracks when script-adding
+            # locale support
+            cat >> munge-oldconfig.sed <<-ENDSED
+		/UCLIBC_HAS_GNU_GETOPT/ i \\
+		\\# UCLIBC_HAS_GETTEXT_AWARENESS is not set\\n
+ENDSED
+        fi
+    fi
+    sed -i -f munge-oldconfig.sed .config
+#		s/^\\# UCLIBC_HAS_WCHAR is not set/UCLIBC_HAS_WCHAR=y/
+#		s/^\\# UCLIBC_HAS_LOCALE is not set/UCLIBC_HAS_LOCALE=y\\nUCLIBC_PREGENERATED_LOCALE_DATA=y\\n\\# UCLIBC_DOWNLOAD_PREGENERATED_LOCALE_DATA is not set\\n\\# UCLIBC_HAS_XLOCALE is not set/
+}
+
+#---------------------------------------------------------
 echo "Install glibc headers needed to build bootstrap compiler -- but only if gcc-3.x"
 
 # Only need to install bootstrap glibc headers for gcc-3.0 and above?  Or maybe just gcc-3.3 and above?
@@ -190,55 +254,102 @@
 # See also http://gcc.gnu.org/PR8180, which complains about the need for this step.
 # Don't install them if they're already there (it's really slow)
 if grep -q gcc-3 ${GCC_DIR}/ChangeLog && test '!' -f $HEADERDIR/features.h; then
-    mkdir -p build-glibc-headers; cd build-glibc-headers
+    mkdir -p build-libc-headers; cd build-libc-headers
 
-    if test '!' -f Makefile; then
-        # The following three things have to be done to build glibc-2.3.x, but they don't hurt older versions.
-        # 1. override CC to keep glibc's configure from using $TARGET-gcc. 
-        # 2. disable linuxthreads, which needs a real cross-compiler to generate tcb-offsets.h properly
-        # 3. build with gcc 3.2 or later
-        # Compare these options with the ones used when building glibc for real below - they're different.
-	# As of glibc-2.3.2, to get this step to work for hppa-linux, you need --enable-hacker-mode
-	# so when configure checks to make sure gcc has access to the assembler you just built...
-	# Alternately, we could put ${PREFIX}/${TARGET}/bin on the path.
-        # Set --build so maybe we don't have to specify "cross-compiling=yes" below (haven't tried yet)
-        # Note: the warning
-        # "*** WARNING: Are you sure you do not want to use the `linuxthreads'"
-        # *** add-on?"
-        # is ok here, since all we want are the basic headers at this point.
-        # build and host are a bit odd, but --host=$TARGET picks the right target,
-        # and --build=$HOST keeps it from thinking it's a native toolchain ever
-        CC=gcc \
-            ${GLIBC_DIR}/configure --host=$TARGET --prefix=/usr \
-	    --build=$HOST \
-            --without-cvs --disable-sanity-checks --with-headers=$HEADERDIR \
-	    --enable-hacker-mode
-    fi
-
-    if grep -q GLIBC_2.3 ${GLIBC_DIR}/ChangeLog; then
-        # glibc-2.3.x passes cross options to $(CC) when generating errlist-compat.c, which fails without a real cross-compiler.
-        # Fortunately, we don't need errlist-compat.c, since we just need .h files, 
-        # so work around this by creating a fake errlist-compat.c and satisfying its dependencies.
-        # Another workaround might be to tell configure to not use any cross options to $(CC).
-        # The real fix would be to get install-headers to not generate errlist-compat.c.
-        make sysdeps/gnu/errlist.c
-	mkdir -p stdio-common
-        touch stdio-common/errlist-compat.c
-    fi
-    make cross-compiling=yes install_root=${SYSROOT} $GLIBC_SYSROOT_ARG install-headers
+    case ${C_LIBRARY} in
+        glibc)
 
-    # Two headers -- stubs.h and features.h -- aren't installed by install-headers,
-    # so do them by hand.  We can tolerate an empty stubs.h for the moment.
-    # See e.g. http://gcc.gnu.org/ml/gcc/2002-01/msg00900.html
-
-    mkdir -p $HEADERDIR/gnu
-    touch $HEADERDIR/gnu/stubs.h
-    cp ${GLIBC_DIR}/include/features.h $HEADERDIR/features.h
-    # Building the bootstrap gcc requires either setting inhibit_libc, or
-    # having a copy of stdio_lim.h... see
-    # http://sources.redhat.com/ml/libc-alpha/2003-11/msg00045.html
-    cp bits/stdio_lim.h $HEADERDIR/bits/stdio_lim.h
+            if test '!' -f Makefile; then
+                # The following three things have to be done to build
+                # glibc-2.3.x, but they don't hurt older versions.
+                # 1. override CC to keep glibc's configure from using
+                #    $TARGET-gcc. 
+                # 2. disable linuxthreads, which needs a real cross-compiler
+                #    to generate tcb-offsets.h properly
+                # 3. build with gcc 3.2 or later
+                # Compare these options with the ones used when building
+                # glibc for real below - they're different.
+                # As of glibc-2.3.2, to get this step to work for hppa-linux,
+                # you need --enable-hacker-mode so when configure checks to
+                # make sure gcc has access to the assembler you just built...
+                # Alternately, we could put ${PREFIX}/${TARGET}/bin on the
+                # path.  Set --build so maybe we don't have to specify
+                # "cross-compiling=yes" below (haven't tried yet)
+                # Note: the warning
+                # "*** WARNING: Are you sure you do not want to use the
+                # `linuxthreads' add-on? ***"
+                # is ok here, since all we want are the basic headers at
+                # this point.  build and host are a bit odd, but --host=$TARGET
+                # picks the right target, and --build=$HOST keeps it from
+                # thinking it's a native toolchain ever
+                CC=gcc \
+                    ${LIBC_DIR}/configure --host=$TARGET --prefix=/usr \
+                    --build=$BUILD \
+                    --without-cvs --disable-sanity-checks \
+                    --with-headers=${PREFIX}/${TARGET}/include \
+                    --enable-hacker-mode
+            fi
+
+            if grep -q GLIBC_2.3 ${LIBC_DIR}/ChangeLog; then
+                # glibc-2.3.x passes cross options to $(CC) when generating
+                # errlist-compat.c, which fails without a real cross-compiler.
+                # Fortunately, we don't need errlist-compat.c, since we just
+                # need .h files, so work around this by creating a fake
+                # errlist-compat.c and satisfying its dependencies.
+                # Another workaround might be to tell configure to not use any
+                # cross options to $(CC).  The real fix would be to get
+                # install-headers to not generate errlist-compat.c.
+                make sysdeps/gnu/errlist.c
+                mkdir -p stdio-common
+                touch stdio-common/errlist-compat.c
+            fi
+            make cross-compiling=yes install_root=${SYSROOT} \
+                ${GLIBC_SYSROOT_ARG} install-headers
+
+            # Two headers -- stubs.h and features.h -- aren't installed by
+            # install-headers, so do them by hand.  We can tolerate an empty
+            # stubs.h for the moment.
+            # See e.g. http://gcc.gnu.org/ml/gcc/2002-01/msg00900.html
+
+            mkdir -p $HEADERDIR/gnu
+            touch $HEADERDIR/gnu/stubs.h
+            cp ${LIBC_DIR}/include/features.h $HEADERDIR/features.h
+
+            # Building the bootstrap gcc requires either setting inhibit_libc,
+            # or having a copy of stdio_lim.h...
+            # see http://sources.redhat.com/ml/libc-alpha/2003-11/msg00045.html
+            cp bits/stdio_lim.h $HEADERDIR/bits/stdio_lim.h
+
+            ;;
+
+        uclibc)
+            if test '!' -f Makefile; then
+                perl ${LIBC_DIR}/relocate
+            fi
+
+            # Go find a .config, or make a new default one.
+            if test '!' -f .config; then
+                if test -z "${UCLIBCCONFIG}"; then
+                    if test -f ${LIBC_DIR}/.config; then
+                        cp ${LIBC_DIR}/.config .config
+                    else
+                        defaultuClibcConfig
+                    fi
+                else
+                    cp ${UCLIBCCONFIG} .config
+                fi
+            fi
+
+            correctuClibcConfig
+
+            # uClibc uses the CROSS environment variable as a prefix to the
+            # compiler tools to use.  Setting it to the empty string forces
+            # use of the native build host tools, which we need at this
+            # stage, as we don't have target tools yet.
+            CROSS= PREFIX=${SYSROOT}/ make headers install_headers
 
+            ;;
+    esac
     cd ..
 fi
 
@@ -254,14 +365,14 @@
 	--with-local-prefix=${SYSROOT} \
 	--disable-multilib \
 	--with-newlib \
-        ${GCC_EXTRA_CONFIG} \
 	${GCC_SYSROOT_ARG_CORE} \
 	--disable-nls \
 	--enable-threads=no \
 	--enable-symvers=gnu \
 	--enable-__cxa_atexit \
-        --enable-languages=c \
-	--disable-shared
+	--enable-languages=c \
+	--disable-shared \
+	${GCC_EXTRA_CONFIG}
 fi
 
 make $PARALLELMFLAGS all-gcc install-gcc
@@ -273,72 +384,119 @@
 #---------------------------------------------------------
 echo Build glibc and linuxthreads
 
-mkdir -p build-glibc; cd build-glibc
+mkdir -p build-libc; cd build-libc
 
-# sh4 really needs to set configparms as of gcc-3.4/glibc-2.3.2
-# note: this is awkward, doesn't work well if you need more than one line in configparms
-echo ${GLIBC_CONFIGPARMS} > configparms
+case ${C_LIBRARY} in
+    glibc)
+        # sh4 really needs to set configparms as of gcc-3.4/glibc-2.3.2
+        # note: this is awkward, doesn't work well if you need more than
+        # one line in configparms
+        echo ${GLIBC_CONFIGPARMS} > configparms
+
+        if test '!' -f Makefile; then
+            # Configure with --prefix the way we want it on the target...
+            # There are a whole lot of settings here.  You'll probably want
+            # to read up on what they all mean, and customize a bit.
+            # e.g. I picked --enable-kernel=2.4.3 here just because it's the
+            # kernel Bill used in his example gcc2.95.3 script.  That means
+            # some backwards compatibility stuff is turned on in glibc that
+            # you may not need if you're using a newer kernel.  Compare
+            # these options with the ones used when installing the glibc
+            # headers above - they're different.  Adding "--without-gd"
+            # option to avoid error "memusagestat.c:36:16: gd.h: No such
+            # file or directory"  See also:
+            #   http://sources.redhat.com/ml/libc-alpha/2000-07/msg00024.html
+            # Set BUILD_CC, or you won't be able to build datafiles
+            # Set --build, else glibc-2.3.2 will think you're not
+            # cross-compiling, and try to run the test programs
+
+            BUILD_CC=gcc CFLAGS="$TARGET_CFLAGS" CC=${TARGET}-gcc \
+                AR=${TARGET}-ar RANLIB=${TARGET}-ranlib \
+                ${LIBC_DIR}/configure --host=$TARGET --prefix=/usr \
+                --build=$HOST ${GLIBC_EXTRA_CONFIG} \
+                --without-tls --without-__thread --enable-kernel=2.4.3 \
+                --without-cvs --disable-profile --disable-debug --without-gd \
+                --enable-add-ons --with-headers=$HEADERDIR
+        fi
+
+        # If this fails with an error like this:
+        # ...  linux/autoconf.h: No such file or directory 
+        # then you need to set the KERNELCONFIG variable to point to a
+        # .config file for this arch.  The following architectures are
+        # known to need kernel .config: alpha, arm, ia64, s390, sh, sparc
+        # Note: LD and RANLIB needed by glibc-2.1.3's c_stub directory,
+        # at least on macosx.  No need for PARALLELMFLAGS here, Makefile
+        # already reads this environment variable
+        make LD=${TARGET}-ld RANLIB=${TARGET}-ranlib
+        make install install_root=${SYSROOT} $GLIBC_SYSROOT_ARG
+
+        # This doesn't seem to work when building a crosscompiler,
+        # as it tries to execute localedef using the just-build ld.so!?
+        #make localedata/install-locales install_root=${SYSROOT}
+
+        # Fix problems in linker scripts.
+        # 
+        # 1. Remove absolute paths
+        # Any file in a list of known suspects that isn't a symlink is
+        # assumed to be a linker script.
+        # FIXME: test -h is not portable
+        # FIXME: probably need to check more files than just these three...
+        # Need to use sed instead of just assuming we know what's in libc.so
+        # because otherwise alpha breaks.  But won't need to do this at all
+        # once we use --with-sysroot (available in gcc-3.3.3 and up)
+        #
+        # 2. Remove lines containing BUG per:
+        #    http://sources.redhat.com/ml/bug-glibc/2003-05/msg00055.html,
+        # needed to fix gcc-3.2.3/glibc-2.3.2 targeting arm
+        #
+        # To make "strip *.so.*" not fail (ptxdist does this), rename to
+        # .so_orig rather than .so.orig
+        for file in libc.so libpthread.so libgcc_s.so; do
+            for lib in lib lib64 usr/lib usr/lib64; do
+	        if test -f ${SYSROOT}/$lib/$file && test ! -h ${SYSROOT}/$lib/$file; then
+		    mv ${SYSROOT}/$lib/$file ${SYSROOT}/$lib/${file}_orig
+		    if test -z "$USE_SYSROOT"; then
+		        sed 's,/usr/lib/,,g;s,/usr/lib64/,,g;s,/lib/,,g;s,/lib64/,,g;/BUG in libc.scripts.output-format.sed/d' < ${SYSROOT}/$lib/${file}_orig > ${SYSROOT}/$lib/$file
+	            else
+		        sed '/BUG in libc.scripts.output-format.sed/d' < ${SYSROOT}/$lib/${file}_orig > ${SYSROOT}/$lib/$file
+		    fi
+	        fi
+            done
+        done
+
+        ;;
+
+    uclibc)
+        if test '!' -f Makefile; then
+            perl ${LIBC_DIR}/relocate
+        fi
+
+        # Go find a .config, or make a new default one.
+        if test '!' -f .config; then
+            if test -f ../build-libc-headers/.config; then
+                cp ../build-libc-headers/.config .config
+            elif test -z "${UCLIBCCONFIG}"; then
+                if test -f ${LIBC_DIR}/.config; then
+                    cp ${LIBC_DIR}/.config .config
+                else
+                    defaultuClibcConfig
+                fi
+            else
+                cp ${UCLIBCCONFIG} .config
+            fi
+        fi
+
+        correctuClibcConfig
+
+        # uClibc uses the CROSS environment variable as a prefix to the
+        # compiler tools to use.  The newly built tools should be in our
+        # path, so we need only give the correct name for them.
+        CROSS=${TARGET}- PREFIX=${PREFIX}/${TARGET}/ \
+            make all install
 
-if test '!' -f Makefile; then
-    # Configure with --prefix the way we want it on the target...
-    # There are a whole lot of settings here.  You'll probably want
-    # to read up on what they all mean, and customize a bit.
-    # e.g. I picked --enable-kernel=2.4.3 here just because it's the kernel Bill 
-    # used in his example gcc2.95.3 script.  That means some backwards compatibility 
-    # stuff is turned on in glibc that you may not need if you're using a newer kernel.
-    # Compare these options with the ones used when installing the glibc headers above - they're different.
-    # Adding "--without-gd" option to avoid error "memusagestat.c:36:16: gd.h: No such file or directory" 
-    # See also http://sources.redhat.com/ml/libc-alpha/2000-07/msg00024.html. 
-    # Set BUILD_CC, or you won't be able to build datafiles
-    # Set --build, else glibc-2.3.2 will think you're not cross-compiling, and try to run the test programs
-
-    BUILD_CC=gcc CFLAGS="$TARGET_CFLAGS" CC=${TARGET}-gcc AR=${TARGET}-ar RANLIB=${TARGET}-ranlib \
-        ${GLIBC_DIR}/configure --host=$TARGET --prefix=/usr \
-	--build=$HOST \
-        ${GLIBC_EXTRA_CONFIG} \
-        --without-tls --without-__thread --enable-kernel=2.4.3 \
-        --without-cvs --disable-profile --disable-debug --without-gd \
-        --enable-add-ons --with-headers=$HEADERDIR
-fi
+        ;;
 
-# If this fails with an error like this:
-# ...  linux/autoconf.h: No such file or directory 
-# then you need to set the KERNELCONFIG variable to point to a .config file for this arch.
-# The following architectures are known to need kernel .config: alpha, arm, ia64, s390, sh, sparc
-# Note: LD and RANLIB needed by glibc-2.1.3's c_stub directory, at least on macosx
-# No need for PARALLELMFLAGS here, Makefile already reads this environment variable
-make LD=${TARGET}-ld RANLIB=${TARGET}-ranlib
-make install install_root=${SYSROOT} $GLIBC_SYSROOT_ARG
-
-# This doesn't seem to work when building a crosscompiler,
-# as it tries to execute localedef using the just-build ld.so!?
-#make localedata/install-locales install_root=${SYSROOT}
-
-# Fix problems in linker scripts.
-# 
-# 1. Remove absolute paths
-# Any file in a list of known suspects that isn't a symlink is assumed to be a linker script.
-# FIXME: test -h is not portable
-# FIXME: probably need to check more files than just these three...
-# Need to use sed instead of just assuming we know what's in libc.so because otherwise alpha breaks
-# But won't need to do this at all once we use --with-sysroot (available in gcc-3.3.3 and up)
-#
-# 2. Remove lines containing BUG per http://sources.redhat.com/ml/bug-glibc/2003-05/msg00055.html,
-# needed to fix gcc-3.2.3/glibc-2.3.2 targeting arm
-#
-# To make "strip *.so.*" not fail (ptxdist does this), rename to .so_orig rather than .so.orig
-for file in libc.so libpthread.so libgcc_s.so; do
-  for lib in lib lib64 usr/lib usr/lib64; do
-	if test -f ${SYSROOT}/$lib/$file && test ! -h ${SYSROOT}/$lib/$file; then
-		mv ${SYSROOT}/$lib/$file ${SYSROOT}/$lib/${file}_orig
-		if test -z "$USE_SYSROOT"; then
-		  sed 's,/usr/lib/,,g;s,/usr/lib64/,,g;s,/lib/,,g;s,/lib64/,,g;/BUG in libc.scripts.output-format.sed/d' < ${SYSROOT}/$lib/${file}_orig > ${SYSROOT}/$lib/$file
-	        else
-		  sed '/BUG in libc.scripts.output-format.sed/d' < ${SYSROOT}/$lib/${file}_orig > ${SYSROOT}/$lib/$file
-		fi
-	fi
-    done
-done
+esac
 cd ..
 
 test -f ${SYSROOT}/lib/libc.a || test -f ${SYSROOT}/lib64/libc.a || test -f ${SYSROOT}/usr/lib/libc.a || test -f ${SYSROOT}/usr/lib64/libc.a || abort Building libc failed
@@ -349,22 +507,36 @@
 mkdir -p build-gcc; cd build-gcc
 
 if test '!' -f Makefile; then
-    # --enable-symvers=gnu really only needed for sh4 to work around a detection problem
-    # only matters for gcc-3.2.x and later, I think
-    # --disable-nls to work around crash bug on ppc405, but also because embedded
-    # systems don't really need message catalogs...
+    # --enable-symvers=gnu really only needed for sh4 to work around a
+    # detection problem; only matters for gcc-3.2.x and later, I think
+    # --disable-nls to work around crash bug on ppc405, but also because
+    # embedded systems don't really need message catalogs...
+    GCC_DEFAULT_OPTIONS="--disable-nls \
+                         --enable-threads=posix \
+                         --enable-symvers=gnu \
+                         --enable-languages="$GCC_LANGUAGES" \
+                         --enable-shared \
+                         --enable-c99 \
+                         --enable-long-long"
+    case ${C_LIBRARY} in
+        glibc)
+            GCC_DEFAULT_OPTIONS="$GCC_DEFAULT_OPTIONS --enable-__cxa_atexit"
+            ;;
+        *)
+            GCC_DEFAULT_OPTIONS="$GCC_DEFAULT_OPTIONS --disable-__cxa_atexit"
+            ;;
+    esac
+    for GCC_DEFAULT_OPTION in $GCC_DEFAULT_OPTIONS ; do
+        GCC_SEARCH_OPTION=`echo "$GCC_DEFAULT_OPTION" | sed -e 's/^--en//' \
+            -e 's/^--dis//' -e 's/=.*//'`
+        if echo "$GCC_EXTRA_CONFIG" | grep -v "$GCC_SEARCH_OPTION"; then
+            GCC_EXTRA_CONFIG="$GCC_EXTRA_CONFIG $GCC_DEFAULT_OPTION"
+        fi
+    done
     ${GCC_DIR}/configure --target=$TARGET --host=$HOST --prefix=$PREFIX \
-        ${GCC_EXTRA_CONFIG} \
-        $GCC_SYSROOT_ARG \
+	${GCC_SYSROOT_ARG} \
 	--with-local-prefix=${SYSROOT} \
-	--disable-nls \
-	--enable-threads=posix \
-	--enable-symvers=gnu \
-	--enable-__cxa_atexit \
-        --enable-languages="$GCC_LANGUAGES" \
-	--enable-shared \
-	--enable-c99 \
-        --enable-long-long
+	${GCC_EXTRA_CONFIG}
 fi
 
 make $PARALLELMFLAGS all 
diff -Naur crosstool-0.28-rc5-orig/demoptx.sh crosstool-0.28-rc5/demoptx.sh
--- crosstool-0.28-rc5-orig/demoptx.sh	2004-04-16 22:14:38.000000000 -0700
+++ crosstool-0.28-rc5/demoptx.sh	2004-06-19 12:17:30.000000000 -0700
@@ -12,9 +12,11 @@
 #GCC_DIR=gcc-3.3.1
 GCC_DIR=gcc-2.95.3
 
-#GLIBC_DIR=glibc-2.3.2
-GLIBC_DIR=glibc-2.2.2
-#GLIBC_DIR=glibc-2.2.5
+#LIBC_DIR=glibc-2.3.2
+LIBC_DIR=glibc-2.2.2
+#LIBC_DIR=glibc-2.2.5
 
-export TARGET GCC_DIR GLIBC_DIR
+C_LIBRARY=glibc
+
+export TARGET GCC_DIR GLIBC_DIR C_LIBRARY
 sh ptx.sh
diff -Naur crosstool-0.28-rc5-orig/gcc-2.95.3-glibc-2.1.3.dat crosstool-0.28-rc5/gcc-2.95.3-glibc-2.1.3.dat
--- crosstool-0.28-rc5-orig/gcc-2.95.3-glibc-2.1.3.dat	2004-03-25 10:29:04.000000000 -0800
+++ crosstool-0.28-rc5/gcc-2.95.3-glibc-2.1.3.dat	2004-06-19 12:17:30.000000000 -0700
@@ -1,7 +1,8 @@
 BINUTILS_DIR=binutils-2.13.90.0.2
 BINUTILS_URL=http://www.kernel.org/pub/linux/devel/binutils
 GCC_DIR=gcc-2.95.3
-GLIBC_DIR=glibc-2.1.3
+LIBC_DIR=glibc-2.1.3
+C_LIBRARY=glibc
 LINUX_DIR=linux-2.4.21
 GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.1.3
 GLIBCCRYPT_FILENAME=glibc-crypt-2.1
diff -Naur crosstool-0.28-rc5-orig/gcc-2.95.3-glibc-2.2.2.dat crosstool-0.28-rc5/gcc-2.95.3-glibc-2.2.2.dat
--- crosstool-0.28-rc5-orig/gcc-2.95.3-glibc-2.2.2.dat	2004-01-16 10:54:39.000000000 -0800
+++ crosstool-0.28-rc5/gcc-2.95.3-glibc-2.2.2.dat	2004-06-19 12:17:30.000000000 -0700
@@ -1,6 +1,7 @@
 BINUTILS_DIR=binutils-2.11.2
 BINUTILS_URL=ftp://ftp.gnu.org/pub/gnu/binutils
 GCC_DIR=gcc-2.95.3
-GLIBC_DIR=glibc-2.2.2
+LIBC_DIR=glibc-2.2.2
+C_LIBRARY=glibc
 LINUX_DIR=linux-2.4.3
 GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.2.2
diff -Naur crosstool-0.28-rc5-orig/gcc-2.95.3-glibc-2.2.5.dat crosstool-0.28-rc5/gcc-2.95.3-glibc-2.2.5.dat
--- crosstool-0.28-rc5-orig/gcc-2.95.3-glibc-2.2.5.dat	2004-01-16 10:54:40.000000000 -0800
+++ crosstool-0.28-rc5/gcc-2.95.3-glibc-2.2.5.dat	2004-06-19 12:17:30.000000000 -0700
@@ -1,6 +1,7 @@
 BINUTILS_DIR=binutils-2.11.2
 BINUTILS_URL=ftp://ftp.gnu.org/pub/gnu/binutils
 GCC_DIR=gcc-2.95.3
-GLIBC_DIR=glibc-2.2.5
+LIBC_DIR=glibc-2.2.5
+C_LIBRARY=glibc
 LINUX_DIR=linux-2.4.3
 GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.2.5
diff -Naur crosstool-0.28-rc5-orig/gcc-3.2.3-glibc-2.2.3.dat crosstool-0.28-rc5/gcc-3.2.3-glibc-2.2.3.dat
--- crosstool-0.28-rc5-orig/gcc-3.2.3-glibc-2.2.3.dat	2004-01-31 11:42:19.000000000 -0800
+++ crosstool-0.28-rc5/gcc-3.2.3-glibc-2.2.3.dat	2004-06-19 12:17:30.000000000 -0700
@@ -1,6 +1,7 @@
 BINUTILS_DIR=binutils-2.13
 BINUTILS_URL=ftp://ftp.gnu.org/pub/gnu/binutils
 GCC_DIR=gcc-3.2.3
-GLIBC_DIR=glibc-2.2.3
+LIBC_DIR=glibc-2.2.3
+C_LIBRARY=glibc
 LINUX_DIR=linux-2.4.21
 GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.2.3
diff -Naur crosstool-0.28-rc5-orig/gcc-3.2.3-glibc-2.2.5.dat crosstool-0.28-rc5/gcc-3.2.3-glibc-2.2.5.dat
--- crosstool-0.28-rc5-orig/gcc-3.2.3-glibc-2.2.5.dat	2004-01-31 11:42:24.000000000 -0800
+++ crosstool-0.28-rc5/gcc-3.2.3-glibc-2.2.5.dat	2004-06-19 12:17:30.000000000 -0700
@@ -1,6 +1,7 @@
 BINUTILS_DIR=binutils-2.13
 BINUTILS_URL=ftp://ftp.gnu.org/pub/gnu/binutils
 GCC_DIR=gcc-3.2.3
-GLIBC_DIR=glibc-2.2.5
+LIBC_DIR=glibc-2.2.5
+C_LIBRARY=glibc
 LINUX_DIR=linux-2.4.21
 GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.2.5
diff -Naur crosstool-0.28-rc5-orig/gcc-3.2.3-glibc-2.3.2.dat crosstool-0.28-rc5/gcc-3.2.3-glibc-2.3.2.dat
--- crosstool-0.28-rc5-orig/gcc-3.2.3-glibc-2.3.2.dat	2004-01-31 11:42:27.000000000 -0800
+++ crosstool-0.28-rc5/gcc-3.2.3-glibc-2.3.2.dat	2004-06-19 12:17:30.000000000 -0700
@@ -2,5 +2,6 @@
 BINUTILS_URL=ftp://ftp.gnu.org/pub/gnu/binutils
 GCC_DIR=gcc-3.2.3
 LINUX_DIR=linux-2.4.21
-GLIBC_DIR=glibc-2.3.2
+LIBC_DIR=glibc-2.3.2
+C_LIBRARY=glibc
 GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
diff -Naur crosstool-0.28-rc5-orig/gcc-3.3.1-glibc-2.2.5.dat crosstool-0.28-rc5/gcc-3.3.1-glibc-2.2.5.dat
--- crosstool-0.28-rc5-orig/gcc-3.3.1-glibc-2.2.5.dat	2004-02-01 07:38:58.000000000 -0800
+++ crosstool-0.28-rc5/gcc-3.3.1-glibc-2.2.5.dat	2004-06-19 12:17:30.000000000 -0700
@@ -1,6 +1,7 @@
 BINUTILS_DIR=binutils-2.14
 BINUTILS_URL=ftp://ftp.gnu.org/pub/gnu/binutils
 GCC_DIR=gcc-3.3.1
-GLIBC_DIR=glibc-2.2.5
+LIBC_DIR=glibc-2.2.5
+C_LIBRARY=glibc
 LINUX_DIR=linux-2.4.21
 GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.2.5
diff -Naur crosstool-0.28-rc5-orig/gcc-3.3.1-glibc-2.3.2.dat crosstool-0.28-rc5/gcc-3.3.1-glibc-2.3.2.dat
--- crosstool-0.28-rc5-orig/gcc-3.3.1-glibc-2.3.2.dat	2004-02-01 07:39:06.000000000 -0800
+++ crosstool-0.28-rc5/gcc-3.3.1-glibc-2.3.2.dat	2004-06-19 12:17:30.000000000 -0700
@@ -1,6 +1,7 @@
 BINUTILS_DIR=binutils-2.14
 BINUTILS_URL=ftp://ftp.gnu.org/pub/gnu/binutils
 GCC_DIR=gcc-3.3.1
-GLIBC_DIR=glibc-2.3.2
+LIBC_DIR=glibc-2.3.2
+C_LIBRARY=glibc
 LINUX_DIR=linux-2.4.24
 GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
diff -Naur crosstool-0.28-rc5-orig/gcc-3.3-20040105-glibc-2.3.2.dat crosstool-0.28-rc5/gcc-3.3-20040105-glibc-2.3.2.dat
--- crosstool-0.28-rc5-orig/gcc-3.3-20040105-glibc-2.3.2.dat	2004-02-01 07:39:14.000000000 -0800
+++ crosstool-0.28-rc5/gcc-3.3-20040105-glibc-2.3.2.dat	2004-06-19 12:17:30.000000000 -0700
@@ -1,6 +1,7 @@
 BINUTILS_DIR=binutils-2.14
 BINUTILS_URL=ftp://ftp.gnu.org/pub/gnu/binutils
 GCC_DIR=gcc-3.3-20040105
-GLIBC_DIR=glibc-2.3.2
+LIBC_DIR=glibc-2.3.2
+C_LIBRARY=glibc
 LINUX_DIR=linux-2.4.21
 GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
diff -Naur crosstool-0.28-rc5-orig/gcc-3.3-20040112-glibc-2.3.2.dat crosstool-0.28-rc5/gcc-3.3-20040112-glibc-2.3.2.dat
--- crosstool-0.28-rc5-orig/gcc-3.3-20040112-glibc-2.3.2.dat	2004-02-01 07:39:25.000000000 -0800
+++ crosstool-0.28-rc5/gcc-3.3-20040112-glibc-2.3.2.dat	2004-06-19 12:17:30.000000000 -0700
@@ -1,6 +1,7 @@
 BINUTILS_DIR=binutils-2.14
 BINUTILS_URL=ftp://ftp.gnu.org/pub/gnu/binutils
 GCC_DIR=gcc-3.3-20040112
-GLIBC_DIR=glibc-2.3.2
+LIBC_DIR=glibc-2.3.2
+C_LIBRARY=glibc
 LINUX_DIR=linux-2.4.24
 GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
diff -Naur crosstool-0.28-rc5-orig/gcc-3.3-20040119-glibc-2.3.2.dat crosstool-0.28-rc5/gcc-3.3-20040119-glibc-2.3.2.dat
--- crosstool-0.28-rc5-orig/gcc-3.3-20040119-glibc-2.3.2.dat	2004-01-25 17:53:29.000000000 -0800
+++ crosstool-0.28-rc5/gcc-3.3-20040119-glibc-2.3.2.dat	2004-06-19 12:17:30.000000000 -0700
@@ -1,6 +1,7 @@
 BINUTILS_DIR=binutils-2.14.90.0.5
 BINUTILS_URL=http://www.kernel.org/pub/linux/devel/binutils
 GCC_DIR=gcc-3.3-20040119
-GLIBC_DIR=glibc-2.3.2
+LIBC_DIR=glibc-2.3.2
+C_LIBRARY=glibc
 LINUX_DIR=linux-2.4.24
 GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
diff -Naur crosstool-0.28-rc5-orig/gcc-3.3-20040126-glibc-2.3.2.dat crosstool-0.28-rc5/gcc-3.3-20040126-glibc-2.3.2.dat
--- crosstool-0.28-rc5-orig/gcc-3.3-20040126-glibc-2.3.2.dat	2004-01-27 10:16:54.000000000 -0800
+++ crosstool-0.28-rc5/gcc-3.3-20040126-glibc-2.3.2.dat	2004-06-19 12:17:30.000000000 -0700
@@ -1,6 +1,7 @@
 BINUTILS_DIR=binutils-2.14.90.0.5
 BINUTILS_URL=http://www.kernel.org/pub/linux/devel/binutils
 GCC_DIR=gcc-3.3-20040126
-GLIBC_DIR=glibc-2.3.2
+LIBC_DIR=glibc-2.3.2
+C_LIBRARY=glibc
 LINUX_DIR=linux-2.4.24
 GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
diff -Naur crosstool-0.28-rc5-orig/gcc-3.3.2-glibc-2.3.2.dat crosstool-0.28-rc5/gcc-3.3.2-glibc-2.3.2.dat
--- crosstool-0.28-rc5-orig/gcc-3.3.2-glibc-2.3.2.dat	2004-02-27 18:20:53.000000000 -0800
+++ crosstool-0.28-rc5/gcc-3.3.2-glibc-2.3.2.dat	2004-06-19 12:17:30.000000000 -0700
@@ -1,6 +1,7 @@
 BINUTILS_DIR=binutils-2.14.90.0.5
 BINUTILS_URL=http://www.kernel.org/pub/linux/devel/binutils
 GCC_DIR=gcc-3.3.2
-GLIBC_DIR=glibc-2.3.2
+LIBC_DIR=glibc-2.3.2
+C_LIBRARY=glibc
 LINUX_DIR=linux-2.4.24
 GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
diff -Naur crosstool-0.28-rc5-orig/gcc-3.3.3-20040131-glibc-2.3.2.dat crosstool-0.28-rc5/gcc-3.3.3-20040131-glibc-2.3.2.dat
--- crosstool-0.28-rc5-orig/gcc-3.3.3-20040131-glibc-2.3.2.dat	2004-02-27 18:20:53.000000000 -0800
+++ crosstool-0.28-rc5/gcc-3.3.3-20040131-glibc-2.3.2.dat	2004-06-19 12:17:30.000000000 -0700
@@ -1,6 +1,7 @@
 BINUTILS_DIR=binutils-2.14
 BINUTILS_URL=ftp://ftp.gnu.org/pub/gnu/binutils
 GCC_DIR=gcc-3.3.3-20040131
-GLIBC_DIR=glibc-2.3.2
+LIBC_DIR=glibc-2.3.2
+C_LIBRARY=glibc
 LINUX_DIR=linux-2.4.24
 GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
diff -Naur crosstool-0.28-rc5-orig/gcc-3.3.3-20040210-glibc-2.3.2.dat crosstool-0.28-rc5/gcc-3.3.3-20040210-glibc-2.3.2.dat
--- crosstool-0.28-rc5-orig/gcc-3.3.3-20040210-glibc-2.3.2.dat	2004-02-13 15:50:26.000000000 -0800
+++ crosstool-0.28-rc5/gcc-3.3.3-20040210-glibc-2.3.2.dat	2004-06-19 12:17:30.000000000 -0700
@@ -1,6 +1,7 @@
 BINUTILS_DIR=binutils-2.14
 BINUTILS_URL=ftp://ftp.gnu.org/pub/gnu/binutils
 GCC_DIR=gcc-3.3.3-20040210
-GLIBC_DIR=glibc-2.3.2
+LIBC_DIR=glibc-2.3.2
+C_LIBRARY=glibc
 LINUX_DIR=linux-2.4.24
 GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
diff -Naur crosstool-0.28-rc5-orig/gcc-3.3.3-glibc-2.1.3.dat crosstool-0.28-rc5/gcc-3.3.3-glibc-2.1.3.dat
--- crosstool-0.28-rc5-orig/gcc-3.3.3-glibc-2.1.3.dat	2004-03-04 11:27:33.000000000 -0800
+++ crosstool-0.28-rc5/gcc-3.3.3-glibc-2.1.3.dat	2004-06-19 12:17:30.000000000 -0700
@@ -1,7 +1,8 @@
 BINUTILS_DIR=binutils-2.14.90.0.5
 BINUTILS_URL=http://www.kernel.org/pub/linux/devel/binutils
 GCC_DIR=gcc-3.3.3
-GLIBC_DIR=glibc-2.1.3
+LIBC_DIR=glibc-2.1.3
+C_LIBRARY=glibc
 LINUX_DIR=linux-2.4.24
 GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.1.3
 GLIBCCRYPT_FILENAME=glibc-crypt-2.1
diff -Naur crosstool-0.28-rc5-orig/gcc-3.3.3-glibc-2.3.2.dat crosstool-0.28-rc5/gcc-3.3.3-glibc-2.3.2.dat
--- crosstool-0.28-rc5-orig/gcc-3.3.3-glibc-2.3.2.dat	2004-02-27 18:20:53.000000000 -0800
+++ crosstool-0.28-rc5/gcc-3.3.3-glibc-2.3.2.dat	2004-06-19 12:17:30.000000000 -0700
@@ -1,6 +1,7 @@
 BINUTILS_DIR=binutils-2.14.90.0.5
 BINUTILS_URL=http://www.kernel.org/pub/linux/devel/binutils
 GCC_DIR=gcc-3.3.3
-GLIBC_DIR=glibc-2.3.2
+LIBC_DIR=glibc-2.3.2
+C_LIBRARY=glibc
 LINUX_DIR=linux-2.4.24
 GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
diff -Naur crosstool-0.28-rc5-orig/gcc-3.3.3-uclibc-0.9.23.dat crosstool-0.28-rc5/gcc-3.3.3-uclibc-0.9.23.dat
--- crosstool-0.28-rc5-orig/gcc-3.3.3-uclibc-0.9.23.dat	1969-12-31 16:00:00.000000000 -0800
+++ crosstool-0.28-rc5/gcc-3.3.3-uclibc-0.9.23.dat	2004-06-19 12:17:30.000000000 -0700
@@ -0,0 +1,6 @@
+BINUTILS_DIR=binutils-2.14.90.0.5
+BINUTILS_URL=http://www.kernel.org/pub/linux/devel/binutils
+GCC_DIR=gcc-3.3.3
+LIBC_DIR=uClibc-0.9.23
+C_LIBRARY=uclibc
+LINUX_DIR=linux-2.4.21
diff -Naur crosstool-0.28-rc5-orig/gcc-3.3-glibc-2.2.5.dat crosstool-0.28-rc5/gcc-3.3-glibc-2.2.5.dat
--- crosstool-0.28-rc5-orig/gcc-3.3-glibc-2.2.5.dat	2004-02-01 07:40:32.000000000 -0800
+++ crosstool-0.28-rc5/gcc-3.3-glibc-2.2.5.dat	2004-06-19 12:17:30.000000000 -0700
@@ -1,6 +1,7 @@
 BINUTILS_DIR=binutils-2.14
 BINUTILS_URL=ftp://ftp.gnu.org/pub/gnu/binutils
 GCC_DIR=gcc-3.3
-GLIBC_DIR=glibc-2.2.5
+LIBC_DIR=glibc-2.2.5
+C_LIBRARY=glibc
 LINUX_DIR=linux-2.4.21
 GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.2.5
diff -Naur crosstool-0.28-rc5-orig/gcc-3.3-glibc-2.3.2.dat crosstool-0.28-rc5/gcc-3.3-glibc-2.3.2.dat
--- crosstool-0.28-rc5-orig/gcc-3.3-glibc-2.3.2.dat	2004-02-01 06:40:26.000000000 -0800
+++ crosstool-0.28-rc5/gcc-3.3-glibc-2.3.2.dat	2004-06-19 12:17:30.000000000 -0700
@@ -2,5 +2,6 @@
 BINUTILS_URL=ftp://ftp.gnu.org/pub/gnu/binutils
 GCC_DIR=gcc-3.3
 LINUX_DIR=linux-2.4.21
-GLIBC_DIR=glibc-2.3.2
+LIBC_DIR=glibc-2.3.2
+C_LIBRARY=glibc
 GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
diff -Naur crosstool-0.28-rc5-orig/gcc-3.4.0-20040416-glibc-2.1.3.dat crosstool-0.28-rc5/gcc-3.4.0-20040416-glibc-2.1.3.dat
--- crosstool-0.28-rc5-orig/gcc-3.4.0-20040416-glibc-2.1.3.dat	2004-04-16 22:18:36.000000000 -0700
+++ crosstool-0.28-rc5/gcc-3.4.0-20040416-glibc-2.1.3.dat	2004-06-19 12:17:30.000000000 -0700
@@ -1,7 +1,8 @@
 BINUTILS_DIR=binutils-2.15.90.0.3
 BINUTILS_URL=http://www.kernel.org/pub/linux/devel/binutils
 GCC_DIR=gcc-3.4.0-20040416
-GLIBC_DIR=glibc-2.1.3
+LIBC_DIR=glibc-2.1.3
+C_LIBRARY=glibc
 LINUX_DIR=linux-2.4.21
 GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.1.3
 GLIBCCRYPT_FILENAME=glibc-crypt-2.1
diff -Naur crosstool-0.28-rc5-orig/gcc-3.4.0-20040416-glibc-2.2.5.dat crosstool-0.28-rc5/gcc-3.4.0-20040416-glibc-2.2.5.dat
--- crosstool-0.28-rc5-orig/gcc-3.4.0-20040416-glibc-2.2.5.dat	2004-04-16 22:18:43.000000000 -0700
+++ crosstool-0.28-rc5/gcc-3.4.0-20040416-glibc-2.2.5.dat	2004-06-19 12:17:30.000000000 -0700
@@ -1,6 +1,7 @@
 BINUTILS_DIR=binutils-2.15.90.0.3
 BINUTILS_URL=http://www.kernel.org/pub/linux/devel/binutils
 GCC_DIR=gcc-3.4.0-20040416
-GLIBC_DIR=glibc-2.2.5
+LIBC_DIR=glibc-2.2.5
+C_LIBRARY=glibc
 LINUX_DIR=linux-2.4.21
 GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.2.5
diff -Naur crosstool-0.28-rc5-orig/gcc-3.4.0-20040416-glibc-2.3.2.dat crosstool-0.28-rc5/gcc-3.4.0-20040416-glibc-2.3.2.dat
--- crosstool-0.28-rc5-orig/gcc-3.4.0-20040416-glibc-2.3.2.dat	2004-04-16 22:18:50.000000000 -0700
+++ crosstool-0.28-rc5/gcc-3.4.0-20040416-glibc-2.3.2.dat	2004-06-19 12:17:30.000000000 -0700
@@ -1,6 +1,7 @@
 BINUTILS_DIR=binutils-2.15.90.0.3
 BINUTILS_URL=http://www.kernel.org/pub/linux/devel/binutils
 GCC_DIR=gcc-3.4.0-20040416
-GLIBC_DIR=glibc-2.3.2
+LIBC_DIR=glibc-2.3.2
+C_LIBRARY=glibc
 LINUX_DIR=linux-2.4.21
 GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
diff -Naur crosstool-0.28-rc5-orig/gcc-3.4-20030813-glibc-2.3.2.dat crosstool-0.28-rc5/gcc-3.4-20030813-glibc-2.3.2.dat
--- crosstool-0.28-rc5-orig/gcc-3.4-20030813-glibc-2.3.2.dat	2004-01-16 10:54:40.000000000 -0800
+++ crosstool-0.28-rc5/gcc-3.4-20030813-glibc-2.3.2.dat	2004-06-19 12:17:30.000000000 -0700
@@ -1,6 +1,7 @@
 BINUTILS_DIR=binutils-2.14.90.0.5
 BINUTILS_URL=http://www.kernel.org/pub/linux/devel/binutils
 GCC_DIR=gcc-3.4-20030813
-GLIBC_DIR=glibc-2.3.2
+LIBC_DIR=glibc-2.3.2
+C_LIBRARY=glibc
 LINUX_DIR=linux-2.4.21
 GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
diff -Naur crosstool-0.28-rc5-orig/gcc-3.4-20030827-glibc-2.3.2.dat crosstool-0.28-rc5/gcc-3.4-20030827-glibc-2.3.2.dat
--- crosstool-0.28-rc5-orig/gcc-3.4-20030827-glibc-2.3.2.dat	2004-01-16 10:54:39.000000000 -0800
+++ crosstool-0.28-rc5/gcc-3.4-20030827-glibc-2.3.2.dat	2004-06-19 12:17:30.000000000 -0700
@@ -1,6 +1,7 @@
 BINUTILS_DIR=binutils-2.14.90.0.5
 BINUTILS_URL=http://www.kernel.org/pub/linux/devel/binutils
 GCC_DIR=gcc-3.4-20030813
-GLIBC_DIR=glibc-2.3.2
+LIBC_DIR=glibc-2.3.2
+C_LIBRARY=glibc
 LINUX_DIR=linux-2.4.21
 GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
diff -Naur crosstool-0.28-rc5-orig/gcc-3.4-20030903-glibc-2.3.2.dat crosstool-0.28-rc5/gcc-3.4-20030903-glibc-2.3.2.dat
--- crosstool-0.28-rc5-orig/gcc-3.4-20030903-glibc-2.3.2.dat	2004-01-16 10:54:39.000000000 -0800
+++ crosstool-0.28-rc5/gcc-3.4-20030903-glibc-2.3.2.dat	2004-06-19 12:17:30.000000000 -0700
@@ -1,6 +1,7 @@
 BINUTILS_DIR=binutils-2.14.90.0.5
 BINUTILS_URL=http://www.kernel.org/pub/linux/devel/binutils
 GCC_DIR=gcc-3.4-20030903
-GLIBC_DIR=glibc-2.3.2
+LIBC_DIR=glibc-2.3.2
+C_LIBRARY=glibc
 LINUX_DIR=linux-2.4.21
 GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
diff -Naur crosstool-0.28-rc5-orig/gcc-3.4-20030910-glibc-2.3.2.dat crosstool-0.28-rc5/gcc-3.4-20030910-glibc-2.3.2.dat
--- crosstool-0.28-rc5-orig/gcc-3.4-20030910-glibc-2.3.2.dat	2004-01-16 10:54:39.000000000 -0800
+++ crosstool-0.28-rc5/gcc-3.4-20030910-glibc-2.3.2.dat	2004-06-19 12:17:30.000000000 -0700
@@ -1,6 +1,7 @@
 BINUTILS_DIR=binutils-2.14.90.0.5
 BINUTILS_URL=http://www.kernel.org/pub/linux/devel/binutils
 GCC_DIR=gcc-3.4-20030910
-GLIBC_DIR=glibc-2.3.2
+LIBC_DIR=glibc-2.3.2
+C_LIBRARY=glibc
 LINUX_DIR=linux-2.4.21
 GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
diff -Naur crosstool-0.28-rc5-orig/gcc-3.4-20031112-glibc-2.3.2.dat crosstool-0.28-rc5/gcc-3.4-20031112-glibc-2.3.2.dat
--- crosstool-0.28-rc5-orig/gcc-3.4-20031112-glibc-2.3.2.dat	2004-01-16 10:54:40.000000000 -0800
+++ crosstool-0.28-rc5/gcc-3.4-20031112-glibc-2.3.2.dat	2004-06-19 12:17:30.000000000 -0700
@@ -1,6 +1,7 @@
 BINUTILS_DIR=binutils-2.14.90.0.5
 BINUTILS_URL=http://www.kernel.org/pub/linux/devel/binutils
 GCC_DIR=gcc-3.4-20031112
-GLIBC_DIR=glibc-2.3.2
+LIBC_DIR=glibc-2.3.2
+C_LIBRARY=glibc
 LINUX_DIR=linux-2.4.21
 GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
diff -Naur crosstool-0.28-rc5-orig/gcc-3.4-20040225-glibc-2.3.2.dat crosstool-0.28-rc5/gcc-3.4-20040225-glibc-2.3.2.dat
--- crosstool-0.28-rc5-orig/gcc-3.4-20040225-glibc-2.3.2.dat	2004-02-27 18:20:53.000000000 -0800
+++ crosstool-0.28-rc5/gcc-3.4-20040225-glibc-2.3.2.dat	2004-06-19 12:17:30.000000000 -0700
@@ -1,6 +1,7 @@
 BINUTILS_DIR=binutils-2.14.90.0.5
 BINUTILS_URL=http://www.kernel.org/pub/linux/devel/binutils
 GCC_DIR=gcc-3.4-20040225
-GLIBC_DIR=glibc-2.3.2
+LIBC_DIR=glibc-2.3.2
+C_LIBRARY=glibc
 LINUX_DIR=linux-2.4.21
 GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
diff -Naur crosstool-0.28-rc5-orig/gcc-3.4-20040414-glibc-2.3.2.dat crosstool-0.28-rc5/gcc-3.4-20040414-glibc-2.3.2.dat
--- crosstool-0.28-rc5-orig/gcc-3.4-20040414-glibc-2.3.2.dat	2004-04-14 22:14:22.000000000 -0700
+++ crosstool-0.28-rc5/gcc-3.4-20040414-glibc-2.3.2.dat	2004-06-19 12:17:30.000000000 -0700
@@ -1,6 +1,7 @@
 BINUTILS_DIR=binutils-2.15.90.0.2
 BINUTILS_URL=http://www.kernel.org/pub/linux/devel/binutils
 GCC_DIR=gcc-3.4-20040414
-GLIBC_DIR=glibc-2.3.2
+LIBC_DIR=glibc-2.3.2
+C_LIBRARY=glibc
 LINUX_DIR=linux-2.4.21
 GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
diff -Naur crosstool-0.28-rc5-orig/getandpatch.sh crosstool-0.28-rc5/getandpatch.sh
--- crosstool-0.28-rc5-orig/getandpatch.sh	2004-04-16 22:22:23.000000000 -0700
+++ crosstool-0.28-rc5/getandpatch.sh	2004-06-19 12:17:30.000000000 -0700
@@ -15,7 +15,13 @@
 test -z "${BINUTILS_DIR}"     && abort "Please set BINUTILS_DIR to the bare filename of the binutils tarball or directory"
 test -z "${SRC_DIR}"          && abort "Please set SRC_DIR to the directory where the source tarballs are to be unpacked"
 test -z "${GCC_DIR}"          && abort "Please set GCC_DIR to the bare filename of the gcc tarball or directory"
-test -z "${GLIBC_DIR}"        && abort "Please set GLIBC_DIR to the bare filename of the glibc tarball or directory"
+test -z "${LIBC_DIR}"         && abort "Please set LIBC_DIR to the bare filename of the C library tarball or directory"
+test -z "${C_LIBRARY}"        && abort "Please set C_LIBRARY to 'glibc' or 'uclibc'"
+case ${C_LIBRARY} in
+    glibc)  ;;
+    uclibc) ;;
+    *)      abort "Unsupported C library ${C_LIBRARY}; please set C_LIBRARY to 'glibc' or 'uclibc'"
+esac
 test -z "${LINUX_DIR}"        && abort "Please set LINUX_DIR to the bare filename of the kernel tarball or directory"
 test -z "${TARBALLS_DIR}"     && abort "Please set TARBALLS_DIR to the directory to download tarballs to."
 test -z "${PTXDIST_DIR}"      && abort "Please set PTXDIST_DIR to the bare filename of the ptxdist tarball or directory."
@@ -28,7 +34,9 @@
 if test -z "$QUIET_EXTRACTIONS"; then VERBOSE=-v;else VERBOSE=; fi
 
 # And one is derived.
-GLIBCTHREADS_FILENAME=`echo $GLIBC_DIR | sed 's/glibc-/glibc-linuxthreads-/'`
+if test "${C_LIBRARY}" = glibc ; then
+    GLIBCTHREADS_FILENAME=`echo $LIBC_DIR | sed 's/glibc-/glibc-linuxthreads-/'`
+fi
 
 # Pattern in a patch log to indicate failure
 PATCHFAILMSGS="^No file to patch.  Skipping patch.|^Hunk .* FAILED at"
@@ -86,7 +94,7 @@
     cd $SRC_DIR
 
     case $ARCHIVE_NAME in
-    glibc-*-2.*) echo "It's a glibc addon, so cd into glibc"; cd $GLIBC_DIR ;;
+    glibc-*-2.*) echo "It's a glibc addon, so cd into glibc"; cd $LIBC_DIR ;;
     *) ;;
     esac
 
@@ -133,6 +141,14 @@
     fi
 }
 
+# Special version for uClibc pregenerated locale data
+getuClibcLocale() {
+    ARCHIVE_NAME=`echo $1 | sed 's,.*/,,;'`
+    cd ${SRC_DIR}/${LIBC_DIR}/extra/locale
+    test -f ${ARCHIVE_NAME} || wget $1
+    cd ${TOP_DIR}
+}
+
 # Remember where source is.
 TOP_DIR=${TOP_DIR-`pwd`}
 
@@ -158,15 +174,26 @@
    *)
       getUnpackAndPatch ftp://ftp.gnu.org/pub/gnu/gcc/$GCC_DIR.tar.gz ;;
 esac
-getUnpackAndPatch ftp://ftp.gnu.org/pub/gnu/glibc/$GLIBC_DIR.tar.bz2 ftp://ftp.gnu.org/pub/gnu/glibc/$GLIBC_DIR.tar.gz
+case $C_LIBRARY in
+   glibc)
+      getUnpackAndPatch ftp://ftp.gnu.org/pub/gnu/glibc/$LIBC_DIR.tar.bz2 ftp://ftp.gnu.org/pub/gnu/glibc/$LIBC_DIR.tar.gz
+      # Glibc addons must come after glibc
+      test x$GLIBCTREADS_FILENAME = x || getUnpackAndPatch     ftp://ftp.gnu.org/pub/gnu/glibc/$GLIBCTHREADS_FILENAME.tar.bz2 ftp://ftp.gnu.org/pub/gnu/glibc/$GLIBCTHREADS_FILENAME.tar.gz
+      test x$GLIBCCRYPT_FILENAME = x || getUnpackAndPatch     ftp://ftp.gnu.org/pub/gnu/glibc/$GLIBCCRYPT_FILENAME.tar.gz ftp://ftp.gnu.org/pub/gnu/glibc/$GLIBCCRYPT_FILENAME.tar.bz2
+      ;;
+   uclibc)
+      getUnpackAndPatch http://www.uclibc.org/downloads/old-releases/$LIBC_DIR.tar.bz2 || \
+          getUnpackAndPatch http://www.uclibc.org/downloads/old-releases/$LIBC_DIR.tar.gz || \
+          getUnpackAndPatch http://www.uclibc.org/downloads/$LIBC_DIR.tar.bz2 || \
+          getUnpackAndPatch http://www.uclibc.org/downloads/$LIBC_DIR.tar.gz
+      getuClibcLocale http://www.uclibc.org/downloads/uClibc-locale-030818.tgz
+      ;;
+esac
 case $LINUX_DIR in
   *2.4*) getUnpackAndPatch http://www.kernel.org/pub/linux/kernel/v2.4/$LINUX_DIR.tar.bz2 http://www.kernel.org/pub/linux/kernel/v2.4/$LINUX_DIR.tar.gz ;;
   *2.6*) getUnpackAndPatch http://www.kernel.org/pub/linux/kernel/v2.6/$LINUX_DIR.tar.bz2 http://www.kernel.org/pub/linux/kernel/v2.6/$LINUX_DIR.tar.gz ;;
   *) abort "unknown version $LINUX_DIR of linux, expected 2.4 or 2.6 in name?" ;;
 esac
-# Glibc addons must come after glibc
-getUnpackAndPatch     ftp://ftp.gnu.org/pub/gnu/glibc/$GLIBCTHREADS_FILENAME.tar.bz2 ftp://ftp.gnu.org/pub/gnu/glibc/$GLIBCTHREADS_FILENAME.tar.gz
-test x$GLIBCCRYPT_FILENAME = x || getUnpackAndPatch     ftp://ftp.gnu.org/pub/gnu/glibc/$GLIBCCRYPT_FILENAME.tar.gz ftp://ftp.gnu.org/pub/gnu/glibc/$GLIBCCRYPT_FILENAME.tar.bz2
 
 # gcc's contrib/test_summary expects version stamp, normally created by contrib/update_gcc
 test -f $SRC_DIR/$GCC_DIR/LAST_UPDATED || echo $GCC_DIR > $SRC_DIR/$GCC_DIR/LAST_UPDATED
diff -Naur crosstool-0.28-rc5-orig/patches/binutils-2.14/bfddoc-cflags-for-build.patch crosstool-0.28-rc5/patches/binutils-2.14/bfddoc-cflags-for-build.patch
--- crosstool-0.28-rc5-orig/patches/binutils-2.14/bfddoc-cflags-for-build.patch	1969-12-31 16:00:00.000000000 -0800
+++ crosstool-0.28-rc5/patches/binutils-2.14/bfddoc-cflags-for-build.patch	2004-06-19 12:17:30.000000000 -0700
@@ -0,0 +1,37 @@
+From the uClibc project.
+
+When building for the build host (rather than the target), use the CFLAGS
+definition for the build host, not the target.
+
+diff -urN binutils-2.14.90.0.6/bfd/doc/Makefile.am binutils-2.14.90.0.6.new/bfd/doc/Makefile.am
+--- binutils-2.14.90.0.6/bfd/doc/Makefile.am	2003-07-23 10:08:09.000000000 -0500
++++ binutils-2.14.90.0.6.new/bfd/doc/Makefile.am	2004-03-01 16:05:16.000000000 -0600
+@@ -55,10 +55,10 @@
+ MKDOC = chew$(EXEEXT_FOR_BUILD)
+ 
+ $(MKDOC): chew.o
+-	$(CC_FOR_BUILD) -o $(MKDOC) chew.o $(CFLAGS) $(LOADLIBES) $(LDFLAGS)
++	$(CC_FOR_BUILD) -o $(MKDOC) chew.o $(CFLAGS_FOR_BUILD) $(LOADLIBES) $(LDFLAGS)
+ 
+ chew.o: chew.c
+-	$(CC_FOR_BUILD) -c -I.. -I$(srcdir)/.. -I$(srcdir)/../../include -I$(srcdir)/../../intl -I../../intl $(H_CFLAGS) $(CFLAGS) $(srcdir)/chew.c
++	$(CC_FOR_BUILD) -c -I.. -I$(srcdir)/.. -I$(srcdir)/../../include -I$(srcdir)/../../intl -I../../intl $(H_CFLAGS) $(CFLAGS_FOR_BUILD) $(srcdir)/chew.c
+ 
+ protos: libbfd.h libcoff.h bfd.h
+ 
+diff -urN binutils-2.14.90.0.6/bfd/doc/Makefile.in binutils-2.14.90.0.6.new/bfd/doc/Makefile.in
+--- binutils-2.14.90.0.6/bfd/doc/Makefile.in	2003-07-23 10:08:09.000000000 -0500
++++ binutils-2.14.90.0.6.new/bfd/doc/Makefile.in	2004-03-01 16:05:03.000000000 -0600
+@@ -469,10 +469,10 @@
+ 
+ 
+ $(MKDOC): chew.o
+-	$(CC_FOR_BUILD) -o $(MKDOC) chew.o $(CFLAGS) $(LOADLIBES) $(LDFLAGS)
++	$(CC_FOR_BUILD) -o $(MKDOC) chew.o $(CFLAGS_FOR_BUILD) $(LOADLIBES) $(LDFLAGS)
+ 
+ chew.o: chew.c
+-	$(CC_FOR_BUILD) -c -I.. -I$(srcdir)/.. -I$(srcdir)/../../include -I$(srcdir)/../../intl -I../../intl $(H_CFLAGS) $(CFLAGS) $(srcdir)/chew.c
++	$(CC_FOR_BUILD) -c -I.. -I$(srcdir)/.. -I$(srcdir)/../../include -I$(srcdir)/../../intl -I../../intl $(H_CFLAGS) $(CFLAGS_FOR_BUILD) $(srcdir)/chew.c
+ 
+ protos: libbfd.h libcoff.h bfd.h
+ 
diff -Naur crosstool-0.28-rc5-orig/patches/binutils-2.14/uclibc-target.patch crosstool-0.28-rc5/patches/binutils-2.14/uclibc-target.patch
--- crosstool-0.28-rc5-orig/patches/binutils-2.14/uclibc-target.patch	1969-12-31 16:00:00.000000000 -0800
+++ crosstool-0.28-rc5/patches/binutils-2.14/uclibc-target.patch	2004-06-19 12:17:30.000000000 -0700
@@ -0,0 +1,652 @@
+Provided by the uClibc project.
+
+Patch to recognize and properly handle target tuples of the form
+*-*-linux-uclibc*, required for building a proper uClibc toolchain.
+
+
+diff -urN binutils-2.14.90.0.6/bfd/config.bfd binutils-2.14.90.0.6-uClibc/bfd/config.bfd
+--- binutils-2.14.90.0.6/bfd/config.bfd	2003-08-21 10:28:47.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/bfd/config.bfd	2004-01-06 23:20:32.000000000 -0600
+@@ -121,7 +121,7 @@
+     targ_defvec=ecoffalpha_little_vec
+     targ_selvecs=bfd_elf64_alpha_vec
+     ;;
+-  alpha*-*-linux-gnu* | alpha*-*-elf*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc* | alpha*-*-elf*)
+     targ_defvec=bfd_elf64_alpha_vec
+     targ_selvecs=ecoffalpha_little_vec
+     ;;
+@@ -131,7 +131,8 @@
+   alpha*-*-*)
+     targ_defvec=ecoffalpha_little_vec
+     ;;
+-  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-elf*)
++  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | \
++  ia64*-*-linux-uclibc* | ia64*-*-elf*)
+     targ_defvec=bfd_elf64_ia64_little_vec
+     targ_selvecs="bfd_elf64_ia64_big_vec bfd_efi_app_ia64_vec"
+     ;;
+@@ -214,7 +215,7 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  armeb-*-elf | arm*b-*-linux-gnu*)
++  armeb-*-elf | arm*b-*-linux-gnu* | arm*b-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_bigarm_vec
+     targ_selvecs=bfd_elf32_littlearm_vec
+     ;;
+@@ -222,7 +223,8 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-conix* | arm*-*-uclinux*)
++  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-linux-uclibc* | \
++  arm*-*-conix* | arm*-*-uclinux*)
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+@@ -355,7 +357,7 @@
+     ;;
+ 
+ #ifdef BFD64
+-  hppa*64*-*-linux-gnu*)
++  hppa*64*-*-linux-gnu* | hppa*64*-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_hppa_linux_vec
+     targ_selvecs=bfd_elf64_hppa_vec
+     ;;
+@@ -366,7 +368,7 @@
+     ;;
+ #endif
+ 
+-  hppa*-*-linux-gnu*)
++  hppa*-*-linux-gnu* | hppa*-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_hppa_linux_vec
+     targ_selvecs=bfd_elf32_hppa_vec
+     ;;
+@@ -488,7 +490,7 @@
+     targ_selvecs=bfd_elf32_i386_vec
+     targ_underscore=yes
+     ;;
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_i386_vec
+     targ_selvecs="i386linux_vec bfd_efi_app_ia32_vec"
+     targ64_selvecs=bfd_elf64_x86_64_vec
+@@ -502,7 +504,7 @@
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386netbsd_vec i386coff_vec bfd_efi_app_ia32_vec"
+     ;;
+-  x86_64-*-linux-gnu*)
++  x86_64-*-linux-gnu* | x86_64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386linux_vec bfd_efi_app_ia32_vec"
+     ;;
+@@ -662,7 +664,7 @@
+     targ_selvecs=bfd_elf32_m68k_vec
+     targ_underscore=yes
+     ;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_m68k_vec
+     targ_selvecs=m68klinux_vec
+     ;;
+@@ -929,7 +931,8 @@
+     ;;
+ #endif
+   powerpc-*-*bsd* | powerpc-*-elf* | powerpc-*-sysv4* | powerpc-*-eabi* | \
+-  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-rtems* | \
++  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-linux-uclibc* | \
++  powerpc-*-rtems* | \
+   powerpc-*-chorus* | powerpc-*-vxworks* | powerpc-*-windiss*)
+     targ_defvec=bfd_elf32_powerpc_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpcle_vec ppcboot_vec"
+@@ -961,8 +964,8 @@
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     ;;
+   powerpcle-*-elf* | powerpcle-*-sysv4* | powerpcle-*-eabi* | \
+-  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-vxworks* |\
+-  powerpcle-*-rtems*)
++  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-linux-uclibc* |\
++  powerpcle-*-vxworks* | powerpcle-*-rtems*)
+     targ_defvec=bfd_elf32_powerpcle_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     targ64_selvecs="bfd_elf64_powerpc_vec bfd_elf64_powerpcle_vec"
+@@ -1110,7 +1113,7 @@
+     targ_selvecs="bfd_elf32_sparc_vec sunos_big_vec"
+     targ_underscore=yes
+     ;;
+-  sparc-*-linux-gnu*)
++  sparc-*-linux-gnu* | sparc-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_sparc_vec
+     targ_selvecs="sparclinux_vec bfd_elf64_sparc_vec sunos_big_vec"
+     ;;
+@@ -1157,7 +1160,7 @@
+     targ_defvec=sunos_big_vec
+     targ_underscore=yes
+     ;;
+-  sparc64-*-linux-gnu*)
++  sparc64-*-linux-gnu* | sparc64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_sparc_vec
+     targ_selvecs="bfd_elf32_sparc_vec sparclinux_vec sunos_big_vec"
+     ;;
+diff -urN binutils-2.14.90.0.6/bfd/configure binutils-2.14.90.0.6-uClibc/bfd/configure
+--- binutils-2.14.90.0.6/bfd/configure	2003-08-21 10:28:47.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/bfd/configure	2004-01-06 20:26:51.000000000 -0600
+@@ -1698,6 +1698,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -5102,7 +5107,7 @@
+   alpha*-*-freebsd*)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -5161,7 +5166,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+ 	;;
+@@ -5211,7 +5216,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/hp300bsd.h"'
+ 	;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/m68klinux.h"'
+ 	;;
+diff -urN binutils-2.14.90.0.6/bfd/configure.in binutils-2.14.90.0.6-uClibc/bfd/configure.in
+--- binutils-2.14.90.0.6/bfd/configure.in	2003-08-21 10:28:47.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/bfd/configure.in	2004-01-06 20:33:02.000000000 -0600
+@@ -153,7 +153,7 @@
+   alpha*-*-freebsd*)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -233,7 +233,7 @@
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+ changequote(,)dnl
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ changequote([,])dnl
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+@@ -286,7 +286,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/hp300bsd.h"'
+ 	;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/m68klinux.h"'
+ 	;;
+diff -urN binutils-2.14.90.0.6/config.sub binutils-2.14.90.0.6-uClibc/config.sub
+--- binutils-2.14.90.0.6/config.sub	2003-08-21 10:28:47.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/config.sub	2004-01-06 22:56:56.000000000 -0600
+@@ -118,7 +118,7 @@
+ # Here we must recognize all the valid KERNEL-OS combinations.
+ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+ case $maybe_os in
+-  nto-qnx* | linux-gnu* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
++  nto-qnx* | linux-gnu* | linux-uclibc* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
+     os=-$maybe_os
+     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+     ;;
+@@ -1131,7 +1131,8 @@
+ 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ 	      | -chorusos* | -chorusrdb* \
+ 	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+-	      | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
++	      | -mingw32* | -linux-gnu* | -linux-uclibc* \
++	      | -uxpv* | -beos* | -mpeix* | -udk* \
+ 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ 	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ 	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+diff -urN binutils-2.14.90.0.6/configure binutils-2.14.90.0.6-uClibc/configure
+--- binutils-2.14.90.0.6/configure	2003-08-21 10:29:32.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/configure	2004-01-07 05:43:40.000000000 -0600
+@@ -1257,6 +1262,18 @@
+   i[3456789]86-*-freebsd*)
+     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
+     ;;
++  i[3456789]86-*-linux-uclibc)
++    # This section makes it possible to build newlib natively on linux.
++    # If we are using a cross compiler then don't configure newlib.
++    if test x${is_cross_compiler} != xno ; then
++      noconfigdirs="$noconfigdirs target-newlib"
++    fi
++    noconfigdirs="$noconfigdirs target-libgloss"
++    # If we are not using a cross compiler, do configure newlib.
++    # Note however, that newlib will only be configured in this situation
++    # if the --with-newlib option has been given, because otherwise
++    # 'target-newlib' will appear in skipdirs.
++    ;;
+   i[3456789]86-*-linux*)
+     # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
+     # not build java stuff by default.
+diff -urN binutils-2.14.90.0.6/configure.in binutils-2.14.90.0.6-uClibc/configure.in
+--- binutils-2.14.90.0.6/configure.in	2003-08-21 10:29:30.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/configure.in	2004-01-07 05:44:02.000000000 -0600
+@@ -508,6 +513,19 @@
+   i[[3456789]]86-*-freebsd*)
+     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
+     ;;
++  i[3456789]86-*-linux-uclibc)
++    # This section makes it possible to build newlib natively on linux.
++    # If we are using a cross compiler then don't configure newlib.
++    if test x${is_cross_compiler} != xno ; then
++      noconfigdirs="$noconfigdirs target-newlib"
++    fi
++    noconfigdirs="$noconfigdirs target-libgloss"
++    build_modules=
++    # If we are not using a cross compiler, do configure newlib.
++    # Note however, that newlib will only be configured in this situation
++    # if the --with-newlib option has been given, because otherwise
++    # 'target-newlib' will appear in skipdirs.
++    ;;
+   i[[3456789]]86-*-linux*)
+     # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
+     # not build java stuff by default.
+diff -urN binutils-2.14.90.0.6/demangler/configure binutils-2.14.90.0.6-uClibc/demangler/configure
+--- binutils-2.14.90.0.6/demangler/configure	2003-08-21 10:29:31.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/demangler/configure	2004-01-06 21:45:51.000000000 -0600
+@@ -1363,6 +1363,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN binutils-2.14.90.0.6/gas/configure binutils-2.14.90.0.6-uClibc/gas/configure
+--- binutils-2.14.90.0.6/gas/configure	2003-07-23 10:08:10.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/gas/configure	2004-01-06 21:57:25.000000000 -0600
+@@ -1576,6 +1576,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -2370,6 +2375,7 @@
+       alpha*-*-osf*)			fmt=ecoff ;;
+       alpha*-*-linuxecoff*)		fmt=ecoff ;;
+       alpha*-*-linux-gnu*)		fmt=elf em=linux ;;
++      alpha*-*-linux-uclibc*)		fmt=elf em=linux ;;
+       alpha*-*-netbsd*)			fmt=elf em=nbsd ;;
+       alpha*-*-openbsd*)		fmt=elf em=obsd ;;
+ 
+@@ -2386,6 +2392,7 @@
+       arm*-*-conix*)			fmt=elf ;;
+       arm-*-linux*aout*)		fmt=aout em=linux ;;
+       arm*-*-linux-gnu*)		fmt=elf  em=linux ;;
++      arm*-*-linux-uclibc*)		fmt=elf  em=linux ;;
+       arm*-*-uclinux*)			fmt=elf  em=linux ;;
+       arm-*-netbsdelf*)                 fmt=elf  em=nbsd ;;
+       arm-*-*n*bsd*)			fmt=aout em=nbsd ;;
+@@ -2400,6 +2407,7 @@
+       avr-*-*)				fmt=elf ;;
+ 
+       cris-*-linux-gnu*)		fmt=multi bfd_gas=yes em=linux ;;
++      cris-*-linux-uclibc*)		fmt=multi bfd_gas=yes em=linux ;;
+       cris-*-*)				fmt=multi bfd_gas=yes ;;
+ 
+       d10v-*-*)				fmt=elf ;;
+@@ -2455,7 +2463,9 @@
+       i386-*-linux*oldld)		fmt=aout em=linux ;;
+       i386-*-linux*coff*)		fmt=coff em=linux ;;
+       i386-*-linux-gnu*)		fmt=elf em=linux ;;
++      i386-*-linux-uclibc*)		fmt=elf em=linux ;;
+       x86_64-*-linux-gnu*)		fmt=elf em=linux ;;
++      x86_64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       i386-*-lynxos*)			fmt=coff em=lynx ;;
+       i386-*-sysv[45]*)			fmt=elf ;;
+       i386-*-solaris*)			fmt=elf ;;
+@@ -2512,6 +2522,7 @@
+       ia64-*-elf*)			fmt=elf ;;
+       ia64-*-aix*)			fmt=elf em=ia64aix ;;
+       ia64-*-linux-gnu*)		fmt=elf em=linux ;;
++      ia64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       ia64-*-hpux*)			fmt=elf em=hpux ;;
+       ia64-*-netbsd*)			fmt=elf em=nbsd ;;
+ 
+@@ -2538,6 +2549,7 @@
+       m68k-*-hpux*)			fmt=hp300 em=hp300 ;;
+       m68k-*-linux*aout*)		fmt=aout em=linux ;;
+       m68k-*-linux-gnu*)		fmt=elf em=linux ;;
++      m68k-*-linux-uclibc*)		fmt=elf em=linux ;;
+       m68k-*-gnu*)			fmt=elf ;;
+       m68k-*-lynxos*)			fmt=coff em=lynx ;;
+       m68k-*-netbsdelf*)		fmt=elf em=nbsd ;;
+@@ -2592,6 +2604,7 @@
+       ppc-*-beos*)			fmt=coff ;;
+       ppc-*-*n*bsd* | ppc-*-elf*)	fmt=elf ;;
+       ppc-*-eabi* | ppc-*-sysv4*)	fmt=elf ;;
++      ppc-*-linux-uclibc* | \
+       ppc-*-linux-gnu*)			fmt=elf
+ 	    case "$endian" in
+ 		big)  ;;
+@@ -2616,7 +2629,9 @@
+       ppc-*-kaos*)			fmt=elf ;;
+ 
+       s390x-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390x-*-linux-uclibc*)		fmt=elf em=linux ;;
+       s390-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390-*-linux-uclibc*)		fmt=elf em=linux ;;
+ 
+       sh*-*-linux*)			fmt=elf em=linux
+ 	    case ${cpu} in
+@@ -2649,6 +2664,7 @@
+       sparc-*-coff)			fmt=coff ;;
+       sparc-*-linux*aout*)		fmt=aout em=linux ;;
+       sparc-*-linux-gnu*)		fmt=elf em=linux ;;
++      sparc-*-linux-uclibc*)		fmt=elf em=linux ;;
+       sparc-*-lynxos*)			fmt=coff em=lynx ;;
+       sparc-fujitsu-none)		fmt=aout ;;
+       sparc-*-elf)			fmt=elf ;;
+diff -urN binutils-2.14.90.0.6/gas/configure.in binutils-2.14.90.0.6-uClibc/gas/configure.in
+--- binutils-2.14.90.0.6/gas/configure.in	2003-07-23 10:08:10.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/gas/configure.in	2004-01-06 21:57:26.000000000 -0600
+@@ -184,6 +184,7 @@
+       alpha*-*-osf*)			fmt=ecoff ;;
+       alpha*-*-linuxecoff*)		fmt=ecoff ;;
+       alpha*-*-linux-gnu*)		fmt=elf em=linux ;;
++      alpha*-*-linux-uclibc*)		fmt=elf em=linux ;;
+       alpha*-*-netbsd*)			fmt=elf em=nbsd ;;
+       alpha*-*-openbsd*)		fmt=elf em=obsd ;;
+ 
+@@ -200,6 +201,7 @@
+       arm*-*-conix*)			fmt=elf ;;
+       arm-*-linux*aout*)		fmt=aout em=linux ;;
+       arm*-*-linux-gnu*)		fmt=elf  em=linux ;;
++      arm*-*-linux-uclibc*)		fmt=elf  em=linux ;;
+       arm*-*-uclinux*)			fmt=elf  em=linux ;;
+       arm-*-netbsdelf*)                 fmt=elf  em=nbsd ;;
+       arm-*-*n*bsd*)			fmt=aout em=nbsd ;;
+@@ -214,6 +216,7 @@
+       avr-*-*)				fmt=elf ;;
+ 
+       cris-*-linux-gnu*)		fmt=multi bfd_gas=yes em=linux ;;
++      cris-*-linux-uclibc*)		fmt=multi bfd_gas=yes em=linux ;;
+       cris-*-*)				fmt=multi bfd_gas=yes ;;
+ 
+       d10v-*-*)				fmt=elf ;;
+@@ -269,7 +272,9 @@
+       i386-*-linux*oldld)		fmt=aout em=linux ;;
+       i386-*-linux*coff*)		fmt=coff em=linux ;;
+       i386-*-linux-gnu*)		fmt=elf em=linux ;;
++      i386-*-linux-uclibc*)		fmt=elf em=linux ;;
+       x86_64-*-linux-gnu*)		fmt=elf em=linux ;;
++      x86_64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       i386-*-lynxos*)			fmt=coff em=lynx ;;
+ changequote(,)dnl
+       i386-*-sysv[45]*)			fmt=elf ;;
+@@ -322,6 +327,7 @@
+       ia64-*-elf*)			fmt=elf ;;
+       ia64-*-aix*)			fmt=elf em=ia64aix ;;
+       ia64-*-linux-gnu*)		fmt=elf em=linux ;;
++      ia64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       ia64-*-hpux*)			fmt=elf em=hpux ;;
+       ia64-*-netbsd*)			fmt=elf em=nbsd ;;
+ 
+@@ -348,6 +354,7 @@
+       m68k-*-hpux*)			fmt=hp300 em=hp300 ;;
+       m68k-*-linux*aout*)		fmt=aout em=linux ;;
+       m68k-*-linux-gnu*)		fmt=elf em=linux ;;
++      m68k-*-linux-uclibc*)		fmt=elf em=linux ;;
+       m68k-*-gnu*)			fmt=elf ;;
+       m68k-*-lynxos*)			fmt=coff em=lynx ;;
+       m68k-*-netbsdelf*)		fmt=elf em=nbsd ;;
+@@ -402,6 +409,7 @@
+       ppc-*-beos*)			fmt=coff ;;
+       ppc-*-*n*bsd* | ppc-*-elf*)	fmt=elf ;;
+       ppc-*-eabi* | ppc-*-sysv4*)	fmt=elf ;;
++      ppc-*-linux-uclibc* | \
+       ppc-*-linux-gnu*)			fmt=elf
+ 	    case "$endian" in
+ 		big)  ;;
+@@ -424,7 +432,9 @@
+       ppc-*-kaos*)			fmt=elf ;;
+ 
+       s390x-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390x-*-linux-uclibc*)		fmt=elf em=linux ;;
+       s390-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390-*-linux-uclibc*)		fmt=elf em=linux ;;
+ 
+       sh*-*-linux*)			fmt=elf em=linux
+ 	    case ${cpu} in
+@@ -457,6 +467,7 @@
+       sparc-*-coff)			fmt=coff ;;
+       sparc-*-linux*aout*)		fmt=aout em=linux ;;
+       sparc-*-linux-gnu*)		fmt=elf em=linux ;;
++      sparc-*-linux-uclibc*)		fmt=elf em=linux ;;
+       sparc-*-lynxos*)			fmt=coff em=lynx ;;
+       sparc-fujitsu-none)		fmt=aout ;;
+       sparc-*-elf)			fmt=elf ;;
+diff -urN binutils-2.14.90.0.6/ld/configure binutils-2.14.90.0.6-uClibc/ld/configure
+--- binutils-2.14.90.0.6/ld/configure	2003-05-05 16:46:49.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/ld/configure	2004-01-06 21:59:31.000000000 -0600
+@@ -1578,6 +1578,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN binutils-2.14.90.0.6/ld/configure.tgt binutils-2.14.90.0.6-uClibc/ld/configure.tgt
+--- binutils-2.14.90.0.6/ld/configure.tgt	2003-08-21 10:28:48.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/ld/configure.tgt	2004-01-06 22:09:40.000000000 -0600
+@@ -30,6 +30,7 @@
+ 			targ_extra_emuls="criself crislinux"
+ 			targ_extra_libpath=$targ_extra_emuls ;;
+ cris-*-linux-gnu*)	targ_emul=crislinux ;;
++cris-*-linux-uclibc*)	targ_emul=crislinux ;;
+ cris-*-*)		targ_emul=criself
+ 			targ_extra_emuls="crisaout crislinux"
+ 			targ_extra_libpath=$targ_extra_emuls ;;
+@@ -59,14 +60,16 @@
+ 			tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			tdir_sun4=sparc-sun-sunos4
+ 			;;
+-sparc64-*-linux-gnu*)	targ_emul=elf64_sparc
++sparc64-*-linux-gnu* | sparc64-*-linux-uclibc*)	 \
++			targ_emul=elf64_sparc
+ 			targ_extra_emuls="elf32_sparc sparclinux sun4"
+ 			targ_extra_libpath=elf32_sparc
+ 			tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/64//'`
+ 			tdir_sparclinux=${tdir_elf32_sparc}aout
+ 			tdir_sun4=sparc-sun-sunos4
+ 			;;
+-sparc*-*-linux-gnu*)	targ_emul=elf32_sparc
++sparc*-*-linux-gnu* | sparc*-*-linux-uclibc*) \
++			targ_emul=elf32_sparc
+ 			targ_extra_emuls="sparclinux elf64_sparc sun4"
+ 			targ_extra_libpath=elf64_sparc
+ 			tdir_sparclinux=${targ_alias}aout
+@@ -124,7 +127,7 @@
+ m68*-ericsson-ose)	targ_emul=sun3 ;;
+ m68*-apple-aux*)	targ_emul=m68kaux ;;
+ *-tandem-none)		targ_emul=st2000 ;;
+-i370-*-elf* | i370-*-linux-gnu*) targ_emul=elf32i370 ;;
++i370-*-elf* | i370-*-linux-gnu* | i370-*-linux-uclibc*) targ_emul=elf32i370 ;;
+ i[3-7]86-*-nto-qnx*)	targ_emul=i386nto ;;
+ i[3-7]86-*-vsta)	targ_emul=vsta ;;
+ i[3-7]86-go32-rtems*)	targ_emul=i386go32 ;;
+@@ -148,14 +151,16 @@
+ 			tdir_elf_i386=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			;;
+ i[3-7]86-*-linux*oldld)	targ_emul=i386linux; targ_extra_emuls=elf_i386 ;;
+-i[3-7]86-*-linux-gnu*)	targ_emul=elf_i386
++i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*) \
++			targ_emul=elf_i386
+ 			targ_extra_emuls=i386linux
+ 			if test x${want64} = xtrue; then
+ 			  targ_extra_emuls="$targ_extra_emuls elf_x86_64"
+ 			fi
+ 			tdir_i386linux=${targ_alias}aout
+ 			;;
+-x86_64-*-linux-gnu*)	targ_emul=elf_x86_64
++x86_64-*-linux-gnu* | x86_64-*-linux-uclibc*) \
++			targ_emul=elf_x86_64
+ 			targ_extra_emuls="elf_i386 i386linux"
+ 			targ_extra_libpath=elf_i386
+ 			tdir_i386linux=`echo ${targ_alias}aout | sed -e 's/x86_64/i386/'`
+@@ -250,10 +255,13 @@
+ arm9e-*-elf)		targ_emul=armelf ;;
+ arm-*-oabi)		targ_emul=armelf_oabi ;;
+ arm*b-*-linux-gnu*)	targ_emul=armelfb_linux; targ_extra_emuls=armelfb ;;
++arm*b-*-linux-uclibc*)	targ_emul=armelfb_linux; targ_extra_emuls=armelfb ;;
+ arm*-*-linux-gnu*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
++arm*-*-linux-uclibc*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ arm*-*-uclinux*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ arm*-*-conix*)		targ_emul=armelf ;;
+-thumb-*-linux-gnu* | thumb-*-uclinux*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
++thumb-*-linux-gnu* | thumb-*-linux-uclibc* | thumb-*-uclinux*) \
++			targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ strongarm-*-coff)	targ_emul=armcoff ;;
+ strongarm-*-elf)	targ_emul=armelf ;;
+ strongarm-*-kaos*)	targ_emul=armelf ;;
+@@ -354,7 +362,8 @@
+ 			targ_extra_emuls=m68kelf
+ 			tdir_m68kelf=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			;;
+-m68k-*-linux-gnu*)	targ_emul=m68kelf
++m68k-*-linux-gnu* | m68k-*-linux-uclibc*) \
++			targ_emul=m68kelf
+ 			targ_extra_emuls=m68klinux
+ 			tdir_m68klinux=`echo ${targ_alias} | sed -e 's/linux/linuxaout/'`
+ 			;;
+@@ -370,9 +379,9 @@
+ m68*-*-psos*)		targ_emul=m68kpsos ;;
+ m68*-*-rtemscoff*)	targ_emul=m68kcoff ;;
+ m68*-*-rtems*)		targ_emul=m68kelf ;;
+-hppa*64*-*-linux-gnu*)	targ_emul=hppa64linux ;;
++hppa*64*-*-linux-gnu* | hppa*64*-*-linux-uclibc*)  targ_emul=hppa64linux ;;
+ hppa*64*-*)		targ_emul=elf64hppa ;;
+-hppa*-*-linux-gnu*)	targ_emul=hppalinux ;;
++hppa*-*-linux-gnu* | hppa*-*-linux-uclibc*)	targ_emul=hppalinux ;;
+ hppa*-*-*elf*)		targ_emul=hppaelf ;;
+ hppa*-*-lites*)		targ_emul=hppaelf ;;
+ hppa*-*-netbsd*)	targ_emul=hppanbsd ;;
+@@ -416,16 +425,20 @@
+ mips*-*-rtems*)		targ_emul=elf32ebmip ;;
+ mips*el-*-vxworks*)	targ_emul=elf32elmip ;;
+ mips*-*-vxworks*)	targ_emul=elf32ebmip ;;
+-mips64*el-*-linux-gnu*)	targ_emul=elf32ltsmipn32
++mips64*el-*-linux-gnu* | mips64*el-*-linux-uclibc*) \
++			targ_emul=elf32ltsmipn32
+ 			targ_extra_emuls="elf32btsmipn32 elf32ltsmip elf32btsmip elf64ltsmip elf64btsmip"
+ 			;;
+-mips64*-*-linux-gnu*)	targ_emul=elf32btsmipn32
++mips64*-*-linux-gnu* | mips64*-*-linux-uclibc*) \
++			targ_emul=elf32btsmipn32
+ 			targ_extra_emuls="elf32ltsmipn32 elf32btsmip elf32ltsmip elf64btsmip elf64ltsmip"
+ 			;;
+-mips*el-*-linux-gnu*)	targ_emul=elf32ltsmip
++mips*el-*-linux-gnu* | mips*el-*-linux-uclibc*) \
++			targ_emul=elf32ltsmip
+ 			targ_extra_emuls="elf32btsmip elf32ltsmipn32 elf64ltsmip elf32btsmipn32 elf64btsmip"
+ 			;;
+-mips*-*-linux-gnu*)	targ_emul=elf32btsmip
++mips*-*-linux-gnu* | mips*-*-linux-uclibc*) \
++			targ_emul=elf32btsmip
+ 			targ_extra_emuls="elf32ltsmip elf32btsmipn32 elf64btsmip elf32ltsmipn32 elf64ltsmip"
+ 			;;
+ mips*-*-lnews*)		targ_emul=mipslnews ;;
+@@ -447,6 +460,10 @@
+ alpha*-*-linux-gnu*)	targ_emul=elf64alpha targ_extra_emuls=alpha
+ 			tdir_alpha=`echo ${targ_alias} | sed -e 's/linux/linuxecoff/'`
+ 			;;
++alpha*-*-linux-uclibc*)	targ_emul=elf64alpha targ_extra_emuls=alpha
++			# The following needs to be checked...
++			tdir_alpha=`echo ${targ_alias} | sed -e 's/linux/linuxecoff/'`
++			;;
+ alpha*-*-osf*)		targ_emul=alpha ;;
+ alpha*-*-gnu*)		targ_emul=elf64alpha ;;
+ alpha*-*-netware*)	targ_emul=alpha ;;
+diff -urN binutils-2.14.90.0.6/libtool.m4 binutils-2.14.90.0.6-uClibc/libtool.m4
+--- binutils-2.14.90.0.6/libtool.m4	2003-05-05 16:46:46.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/libtool.m4	2004-01-06 20:30:39.000000000 -0600
+@@ -645,6 +645,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
+diff -urN binutils-2.14.90.0.6/ltconfig binutils-2.14.90.0.6-uClibc/ltconfig
+--- binutils-2.14.90.0.6/ltconfig	2003-07-23 10:08:08.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/ltconfig	2004-01-06 21:05:11.000000000 -0600
+@@ -603,6 +603,7 @@
+ # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+ case $host_os in
+ linux-gnu*) ;;
++linux-uclibc*) ;;
+ linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+ esac
+ 
+@@ -1259,6 +1260,24 @@
+   dynamic_linker='GNU/Linux ld.so'
+   ;;
+ 
++linux-uclibc*)
++  version_type=linux
++  need_lib_prefix=no
++  need_version=no
++  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
++  soname_spec='${libname}${release}.so$major'
++  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
++  shlibpath_var=LD_LIBRARY_PATH
++  shlibpath_overrides_runpath=no
++  # This implies no fast_install, which is unacceptable.
++  # Some rework will be needed to allow for fast_install
++  # before this can be enabled.
++  # Note: copied from linux-gnu, and may not be appropriate.
++  hardcode_into_libs=yes
++  # Assume using the uClibc dynamic linker.
++  dynamic_linker="uClibc ld.so"
++  ;;
++
+ netbsd*)
+   need_lib_prefix=no
+   need_version=no
diff -Naur crosstool-0.28-rc5-orig/patches/binutils-2.14.90.0.5/bfddoc-cflags-for-build.patch crosstool-0.28-rc5/patches/binutils-2.14.90.0.5/bfddoc-cflags-for-build.patch
--- crosstool-0.28-rc5-orig/patches/binutils-2.14.90.0.5/bfddoc-cflags-for-build.patch	1969-12-31 16:00:00.000000000 -0800
+++ crosstool-0.28-rc5/patches/binutils-2.14.90.0.5/bfddoc-cflags-for-build.patch	2004-06-19 12:17:30.000000000 -0700
@@ -0,0 +1,37 @@
+From the uClibc project.
+
+When building for the build host (rather than the target), use the CFLAGS
+definition for the build host, not the target.
+
+diff -urN binutils-2.14.90.0.6/bfd/doc/Makefile.am binutils-2.14.90.0.6.new/bfd/doc/Makefile.am
+--- binutils-2.14.90.0.6/bfd/doc/Makefile.am	2003-07-23 10:08:09.000000000 -0500
++++ binutils-2.14.90.0.6.new/bfd/doc/Makefile.am	2004-03-01 16:05:16.000000000 -0600
+@@ -55,10 +55,10 @@
+ MKDOC = chew$(EXEEXT_FOR_BUILD)
+ 
+ $(MKDOC): chew.o
+-	$(CC_FOR_BUILD) -o $(MKDOC) chew.o $(CFLAGS) $(LOADLIBES) $(LDFLAGS)
++	$(CC_FOR_BUILD) -o $(MKDOC) chew.o $(CFLAGS_FOR_BUILD) $(LOADLIBES) $(LDFLAGS)
+ 
+ chew.o: chew.c
+-	$(CC_FOR_BUILD) -c -I.. -I$(srcdir)/.. -I$(srcdir)/../../include -I$(srcdir)/../../intl -I../../intl $(H_CFLAGS) $(CFLAGS) $(srcdir)/chew.c
++	$(CC_FOR_BUILD) -c -I.. -I$(srcdir)/.. -I$(srcdir)/../../include -I$(srcdir)/../../intl -I../../intl $(H_CFLAGS) $(CFLAGS_FOR_BUILD) $(srcdir)/chew.c
+ 
+ protos: libbfd.h libcoff.h bfd.h
+ 
+diff -urN binutils-2.14.90.0.6/bfd/doc/Makefile.in binutils-2.14.90.0.6.new/bfd/doc/Makefile.in
+--- binutils-2.14.90.0.6/bfd/doc/Makefile.in	2003-07-23 10:08:09.000000000 -0500
++++ binutils-2.14.90.0.6.new/bfd/doc/Makefile.in	2004-03-01 16:05:03.000000000 -0600
+@@ -469,10 +469,10 @@
+ 
+ 
+ $(MKDOC): chew.o
+-	$(CC_FOR_BUILD) -o $(MKDOC) chew.o $(CFLAGS) $(LOADLIBES) $(LDFLAGS)
++	$(CC_FOR_BUILD) -o $(MKDOC) chew.o $(CFLAGS_FOR_BUILD) $(LOADLIBES) $(LDFLAGS)
+ 
+ chew.o: chew.c
+-	$(CC_FOR_BUILD) -c -I.. -I$(srcdir)/.. -I$(srcdir)/../../include -I$(srcdir)/../../intl -I../../intl $(H_CFLAGS) $(CFLAGS) $(srcdir)/chew.c
++	$(CC_FOR_BUILD) -c -I.. -I$(srcdir)/.. -I$(srcdir)/../../include -I$(srcdir)/../../intl -I../../intl $(H_CFLAGS) $(CFLAGS_FOR_BUILD) $(srcdir)/chew.c
+ 
+ protos: libbfd.h libcoff.h bfd.h
+ 
diff -Naur crosstool-0.28-rc5-orig/patches/binutils-2.14.90.0.5/uclibc-target.patch crosstool-0.28-rc5/patches/binutils-2.14.90.0.5/uclibc-target.patch
--- crosstool-0.28-rc5-orig/patches/binutils-2.14.90.0.5/uclibc-target.patch	1969-12-31 16:00:00.000000000 -0800
+++ crosstool-0.28-rc5/patches/binutils-2.14.90.0.5/uclibc-target.patch	2004-06-19 12:17:30.000000000 -0700
@@ -0,0 +1,652 @@
+Provided by the uClibc project.
+
+Patch to recognize and properly handle target tuples of the form
+*-*-linux-uclibc*, required for building a proper uClibc toolchain.
+
+
+diff -urN binutils-2.14.90.0.6/bfd/config.bfd binutils-2.14.90.0.6-uClibc/bfd/config.bfd
+--- binutils-2.14.90.0.6/bfd/config.bfd	2003-08-21 10:28:47.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/bfd/config.bfd	2004-01-06 23:20:32.000000000 -0600
+@@ -121,7 +121,7 @@
+     targ_defvec=ecoffalpha_little_vec
+     targ_selvecs=bfd_elf64_alpha_vec
+     ;;
+-  alpha*-*-linux-gnu* | alpha*-*-elf*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc* | alpha*-*-elf*)
+     targ_defvec=bfd_elf64_alpha_vec
+     targ_selvecs=ecoffalpha_little_vec
+     ;;
+@@ -131,7 +131,8 @@
+   alpha*-*-*)
+     targ_defvec=ecoffalpha_little_vec
+     ;;
+-  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-elf*)
++  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | \
++  ia64*-*-linux-uclibc* | ia64*-*-elf*)
+     targ_defvec=bfd_elf64_ia64_little_vec
+     targ_selvecs="bfd_elf64_ia64_big_vec bfd_efi_app_ia64_vec"
+     ;;
+@@ -214,7 +215,7 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  armeb-*-elf | arm*b-*-linux-gnu*)
++  armeb-*-elf | arm*b-*-linux-gnu* | arm*b-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_bigarm_vec
+     targ_selvecs=bfd_elf32_littlearm_vec
+     ;;
+@@ -222,7 +223,8 @@
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+-  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-conix* | arm*-*-uclinux*)
++  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-linux-uclibc* | \
++  arm*-*-conix* | arm*-*-uclinux*)
+     targ_defvec=bfd_elf32_littlearm_vec
+     targ_selvecs=bfd_elf32_bigarm_vec
+     ;;
+@@ -355,7 +357,7 @@
+     ;;
+ 
+ #ifdef BFD64
+-  hppa*64*-*-linux-gnu*)
++  hppa*64*-*-linux-gnu* | hppa*64*-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_hppa_linux_vec
+     targ_selvecs=bfd_elf64_hppa_vec
+     ;;
+@@ -366,7 +368,7 @@
+     ;;
+ #endif
+ 
+-  hppa*-*-linux-gnu*)
++  hppa*-*-linux-gnu* | hppa*-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_hppa_linux_vec
+     targ_selvecs=bfd_elf32_hppa_vec
+     ;;
+@@ -488,7 +490,7 @@
+     targ_selvecs=bfd_elf32_i386_vec
+     targ_underscore=yes
+     ;;
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_i386_vec
+     targ_selvecs="i386linux_vec bfd_efi_app_ia32_vec"
+     targ64_selvecs=bfd_elf64_x86_64_vec
+@@ -502,7 +504,7 @@
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386netbsd_vec i386coff_vec bfd_efi_app_ia32_vec"
+     ;;
+-  x86_64-*-linux-gnu*)
++  x86_64-*-linux-gnu* | x86_64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_x86_64_vec
+     targ_selvecs="bfd_elf32_i386_vec i386linux_vec bfd_efi_app_ia32_vec"
+     ;;
+@@ -662,7 +664,7 @@
+     targ_selvecs=bfd_elf32_m68k_vec
+     targ_underscore=yes
+     ;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_m68k_vec
+     targ_selvecs=m68klinux_vec
+     ;;
+@@ -929,7 +931,8 @@
+     ;;
+ #endif
+   powerpc-*-*bsd* | powerpc-*-elf* | powerpc-*-sysv4* | powerpc-*-eabi* | \
+-  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-rtems* | \
++  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-linux-uclibc* | \
++  powerpc-*-rtems* | \
+   powerpc-*-chorus* | powerpc-*-vxworks* | powerpc-*-windiss*)
+     targ_defvec=bfd_elf32_powerpc_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpcle_vec ppcboot_vec"
+@@ -961,8 +964,8 @@
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     ;;
+   powerpcle-*-elf* | powerpcle-*-sysv4* | powerpcle-*-eabi* | \
+-  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-vxworks* |\
+-  powerpcle-*-rtems*)
++  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-linux-uclibc* |\
++  powerpcle-*-vxworks* | powerpcle-*-rtems*)
+     targ_defvec=bfd_elf32_powerpcle_vec
+     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
+     targ64_selvecs="bfd_elf64_powerpc_vec bfd_elf64_powerpcle_vec"
+@@ -1110,7 +1113,7 @@
+     targ_selvecs="bfd_elf32_sparc_vec sunos_big_vec"
+     targ_underscore=yes
+     ;;
+-  sparc-*-linux-gnu*)
++  sparc-*-linux-gnu* | sparc-*-linux-uclibc*)
+     targ_defvec=bfd_elf32_sparc_vec
+     targ_selvecs="sparclinux_vec bfd_elf64_sparc_vec sunos_big_vec"
+     ;;
+@@ -1157,7 +1160,7 @@
+     targ_defvec=sunos_big_vec
+     targ_underscore=yes
+     ;;
+-  sparc64-*-linux-gnu*)
++  sparc64-*-linux-gnu* | sparc64-*-linux-uclibc*)
+     targ_defvec=bfd_elf64_sparc_vec
+     targ_selvecs="bfd_elf32_sparc_vec sparclinux_vec sunos_big_vec"
+     ;;
+diff -urN binutils-2.14.90.0.6/bfd/configure binutils-2.14.90.0.6-uClibc/bfd/configure
+--- binutils-2.14.90.0.6/bfd/configure	2003-08-21 10:28:47.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/bfd/configure	2004-01-06 20:26:51.000000000 -0600
+@@ -1698,6 +1698,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -5102,7 +5107,7 @@
+   alpha*-*-freebsd*)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -5161,7 +5166,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+ 	;;
+@@ -5211,7 +5216,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/hp300bsd.h"'
+ 	;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/m68klinux.h"'
+ 	;;
+diff -urN binutils-2.14.90.0.6/bfd/configure.in binutils-2.14.90.0.6-uClibc/bfd/configure.in
+--- binutils-2.14.90.0.6/bfd/configure.in	2003-08-21 10:28:47.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/bfd/configure.in	2004-01-06 20:33:02.000000000 -0600
+@@ -153,7 +153,7 @@
+   alpha*-*-freebsd*)
+ 	COREFILE=''
+ 	;;
+-  alpha*-*-linux-gnu*)
++  alpha*-*-linux-gnu* | alpha*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/alphalinux.h"'
+ 	;;
+@@ -233,7 +233,7 @@
+ 	TRAD_HEADER='"hosts/i386mach3.h"'
+ 	;;
+ changequote(,)dnl
+-  i[3-7]86-*-linux-gnu*)
++  i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*)
+ changequote([,])dnl
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/i386linux.h"'
+@@ -286,7 +286,7 @@
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/hp300bsd.h"'
+ 	;;
+-  m68*-*-linux-gnu*)
++  m68*-*-linux-gnu* | m68*-*-linux-uclibc*)
+ 	COREFILE=trad-core.lo
+ 	TRAD_HEADER='"hosts/m68klinux.h"'
+ 	;;
+diff -urN binutils-2.14.90.0.6/config.sub binutils-2.14.90.0.6-uClibc/config.sub
+--- binutils-2.14.90.0.6/config.sub	2003-08-21 10:28:47.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/config.sub	2004-01-06 22:56:56.000000000 -0600
+@@ -118,7 +118,7 @@
+ # Here we must recognize all the valid KERNEL-OS combinations.
+ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+ case $maybe_os in
+-  nto-qnx* | linux-gnu* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
++  nto-qnx* | linux-gnu* | linux-uclibc* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
+     os=-$maybe_os
+     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+     ;;
+@@ -1131,7 +1131,8 @@
+ 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ 	      | -chorusos* | -chorusrdb* \
+ 	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+-	      | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
++	      | -mingw32* | -linux-gnu* | -linux-uclibc* \
++	      | -uxpv* | -beos* | -mpeix* | -udk* \
+ 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ 	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ 	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+diff -urN binutils-2.14.90.0.6/configure binutils-2.14.90.0.6-uClibc/configure
+--- binutils-2.14.90.0.6/configure	2003-08-21 10:29:32.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/configure	2004-01-07 05:43:40.000000000 -0600
+@@ -1257,6 +1262,18 @@
+   i[3456789]86-*-freebsd*)
+     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
+     ;;
++  i[3456789]86-*-linux-uclibc)
++    # This section makes it possible to build newlib natively on linux.
++    # If we are using a cross compiler then don't configure newlib.
++    if test x${is_cross_compiler} != xno ; then
++      noconfigdirs="$noconfigdirs target-newlib"
++    fi
++    noconfigdirs="$noconfigdirs target-libgloss"
++    # If we are not using a cross compiler, do configure newlib.
++    # Note however, that newlib will only be configured in this situation
++    # if the --with-newlib option has been given, because otherwise
++    # 'target-newlib' will appear in skipdirs.
++    ;;
+   i[3456789]86-*-linux*)
+     # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
+     # not build java stuff by default.
+diff -urN binutils-2.14.90.0.6/configure.in binutils-2.14.90.0.6-uClibc/configure.in
+--- binutils-2.14.90.0.6/configure.in	2003-08-21 10:29:30.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/configure.in	2004-01-07 05:44:02.000000000 -0600
+@@ -508,6 +513,19 @@
+   i[[3456789]]86-*-freebsd*)
+     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
+     ;;
++  i[3456789]86-*-linux-uclibc)
++    # This section makes it possible to build newlib natively on linux.
++    # If we are using a cross compiler then don't configure newlib.
++    if test x${is_cross_compiler} != xno ; then
++      noconfigdirs="$noconfigdirs target-newlib"
++    fi
++    noconfigdirs="$noconfigdirs target-libgloss"
++    build_modules=
++    # If we are not using a cross compiler, do configure newlib.
++    # Note however, that newlib will only be configured in this situation
++    # if the --with-newlib option has been given, because otherwise
++    # 'target-newlib' will appear in skipdirs.
++    ;;
+   i[[3456789]]86-*-linux*)
+     # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's
+     # not build java stuff by default.
+diff -urN binutils-2.14.90.0.6/demangler/configure binutils-2.14.90.0.6-uClibc/demangler/configure
+--- binutils-2.14.90.0.6/demangler/configure	2003-08-21 10:29:31.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/demangler/configure	2004-01-06 21:45:51.000000000 -0600
+@@ -1363,6 +1363,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN binutils-2.14.90.0.6/gas/configure binutils-2.14.90.0.6-uClibc/gas/configure
+--- binutils-2.14.90.0.6/gas/configure	2003-07-23 10:08:10.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/gas/configure	2004-01-06 21:57:25.000000000 -0600
+@@ -1576,6 +1576,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+@@ -2370,6 +2375,7 @@
+       alpha*-*-osf*)			fmt=ecoff ;;
+       alpha*-*-linuxecoff*)		fmt=ecoff ;;
+       alpha*-*-linux-gnu*)		fmt=elf em=linux ;;
++      alpha*-*-linux-uclibc*)		fmt=elf em=linux ;;
+       alpha*-*-netbsd*)			fmt=elf em=nbsd ;;
+       alpha*-*-openbsd*)		fmt=elf em=obsd ;;
+ 
+@@ -2386,6 +2392,7 @@
+       arm*-*-conix*)			fmt=elf ;;
+       arm-*-linux*aout*)		fmt=aout em=linux ;;
+       arm*-*-linux-gnu*)		fmt=elf  em=linux ;;
++      arm*-*-linux-uclibc*)		fmt=elf  em=linux ;;
+       arm*-*-uclinux*)			fmt=elf  em=linux ;;
+       arm-*-netbsdelf*)                 fmt=elf  em=nbsd ;;
+       arm-*-*n*bsd*)			fmt=aout em=nbsd ;;
+@@ -2400,6 +2407,7 @@
+       avr-*-*)				fmt=elf ;;
+ 
+       cris-*-linux-gnu*)		fmt=multi bfd_gas=yes em=linux ;;
++      cris-*-linux-uclibc*)		fmt=multi bfd_gas=yes em=linux ;;
+       cris-*-*)				fmt=multi bfd_gas=yes ;;
+ 
+       d10v-*-*)				fmt=elf ;;
+@@ -2455,7 +2463,9 @@
+       i386-*-linux*oldld)		fmt=aout em=linux ;;
+       i386-*-linux*coff*)		fmt=coff em=linux ;;
+       i386-*-linux-gnu*)		fmt=elf em=linux ;;
++      i386-*-linux-uclibc*)		fmt=elf em=linux ;;
+       x86_64-*-linux-gnu*)		fmt=elf em=linux ;;
++      x86_64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       i386-*-lynxos*)			fmt=coff em=lynx ;;
+       i386-*-sysv[45]*)			fmt=elf ;;
+       i386-*-solaris*)			fmt=elf ;;
+@@ -2512,6 +2522,7 @@
+       ia64-*-elf*)			fmt=elf ;;
+       ia64-*-aix*)			fmt=elf em=ia64aix ;;
+       ia64-*-linux-gnu*)		fmt=elf em=linux ;;
++      ia64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       ia64-*-hpux*)			fmt=elf em=hpux ;;
+       ia64-*-netbsd*)			fmt=elf em=nbsd ;;
+ 
+@@ -2538,6 +2549,7 @@
+       m68k-*-hpux*)			fmt=hp300 em=hp300 ;;
+       m68k-*-linux*aout*)		fmt=aout em=linux ;;
+       m68k-*-linux-gnu*)		fmt=elf em=linux ;;
++      m68k-*-linux-uclibc*)		fmt=elf em=linux ;;
+       m68k-*-gnu*)			fmt=elf ;;
+       m68k-*-lynxos*)			fmt=coff em=lynx ;;
+       m68k-*-netbsdelf*)		fmt=elf em=nbsd ;;
+@@ -2592,6 +2604,7 @@
+       ppc-*-beos*)			fmt=coff ;;
+       ppc-*-*n*bsd* | ppc-*-elf*)	fmt=elf ;;
+       ppc-*-eabi* | ppc-*-sysv4*)	fmt=elf ;;
++      ppc-*-linux-uclibc* | \
+       ppc-*-linux-gnu*)			fmt=elf
+ 	    case "$endian" in
+ 		big)  ;;
+@@ -2616,7 +2629,9 @@
+       ppc-*-kaos*)			fmt=elf ;;
+ 
+       s390x-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390x-*-linux-uclibc*)		fmt=elf em=linux ;;
+       s390-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390-*-linux-uclibc*)		fmt=elf em=linux ;;
+ 
+       sh*-*-linux*)			fmt=elf em=linux
+ 	    case ${cpu} in
+@@ -2649,6 +2664,7 @@
+       sparc-*-coff)			fmt=coff ;;
+       sparc-*-linux*aout*)		fmt=aout em=linux ;;
+       sparc-*-linux-gnu*)		fmt=elf em=linux ;;
++      sparc-*-linux-uclibc*)		fmt=elf em=linux ;;
+       sparc-*-lynxos*)			fmt=coff em=lynx ;;
+       sparc-fujitsu-none)		fmt=aout ;;
+       sparc-*-elf)			fmt=elf ;;
+diff -urN binutils-2.14.90.0.6/gas/configure.in binutils-2.14.90.0.6-uClibc/gas/configure.in
+--- binutils-2.14.90.0.6/gas/configure.in	2003-07-23 10:08:10.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/gas/configure.in	2004-01-06 21:57:26.000000000 -0600
+@@ -184,6 +184,7 @@
+       alpha*-*-osf*)			fmt=ecoff ;;
+       alpha*-*-linuxecoff*)		fmt=ecoff ;;
+       alpha*-*-linux-gnu*)		fmt=elf em=linux ;;
++      alpha*-*-linux-uclibc*)		fmt=elf em=linux ;;
+       alpha*-*-netbsd*)			fmt=elf em=nbsd ;;
+       alpha*-*-openbsd*)		fmt=elf em=obsd ;;
+ 
+@@ -200,6 +201,7 @@
+       arm*-*-conix*)			fmt=elf ;;
+       arm-*-linux*aout*)		fmt=aout em=linux ;;
+       arm*-*-linux-gnu*)		fmt=elf  em=linux ;;
++      arm*-*-linux-uclibc*)		fmt=elf  em=linux ;;
+       arm*-*-uclinux*)			fmt=elf  em=linux ;;
+       arm-*-netbsdelf*)                 fmt=elf  em=nbsd ;;
+       arm-*-*n*bsd*)			fmt=aout em=nbsd ;;
+@@ -214,6 +216,7 @@
+       avr-*-*)				fmt=elf ;;
+ 
+       cris-*-linux-gnu*)		fmt=multi bfd_gas=yes em=linux ;;
++      cris-*-linux-uclibc*)		fmt=multi bfd_gas=yes em=linux ;;
+       cris-*-*)				fmt=multi bfd_gas=yes ;;
+ 
+       d10v-*-*)				fmt=elf ;;
+@@ -269,7 +272,9 @@
+       i386-*-linux*oldld)		fmt=aout em=linux ;;
+       i386-*-linux*coff*)		fmt=coff em=linux ;;
+       i386-*-linux-gnu*)		fmt=elf em=linux ;;
++      i386-*-linux-uclibc*)		fmt=elf em=linux ;;
+       x86_64-*-linux-gnu*)		fmt=elf em=linux ;;
++      x86_64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       i386-*-lynxos*)			fmt=coff em=lynx ;;
+ changequote(,)dnl
+       i386-*-sysv[45]*)			fmt=elf ;;
+@@ -322,6 +327,7 @@
+       ia64-*-elf*)			fmt=elf ;;
+       ia64-*-aix*)			fmt=elf em=ia64aix ;;
+       ia64-*-linux-gnu*)		fmt=elf em=linux ;;
++      ia64-*-linux-uclibc*)		fmt=elf em=linux ;;
+       ia64-*-hpux*)			fmt=elf em=hpux ;;
+       ia64-*-netbsd*)			fmt=elf em=nbsd ;;
+ 
+@@ -348,6 +354,7 @@
+       m68k-*-hpux*)			fmt=hp300 em=hp300 ;;
+       m68k-*-linux*aout*)		fmt=aout em=linux ;;
+       m68k-*-linux-gnu*)		fmt=elf em=linux ;;
++      m68k-*-linux-uclibc*)		fmt=elf em=linux ;;
+       m68k-*-gnu*)			fmt=elf ;;
+       m68k-*-lynxos*)			fmt=coff em=lynx ;;
+       m68k-*-netbsdelf*)		fmt=elf em=nbsd ;;
+@@ -402,6 +409,7 @@
+       ppc-*-beos*)			fmt=coff ;;
+       ppc-*-*n*bsd* | ppc-*-elf*)	fmt=elf ;;
+       ppc-*-eabi* | ppc-*-sysv4*)	fmt=elf ;;
++      ppc-*-linux-uclibc* | \
+       ppc-*-linux-gnu*)			fmt=elf
+ 	    case "$endian" in
+ 		big)  ;;
+@@ -424,7 +432,9 @@
+       ppc-*-kaos*)			fmt=elf ;;
+ 
+       s390x-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390x-*-linux-uclibc*)		fmt=elf em=linux ;;
+       s390-*-linux-gnu*)		fmt=elf em=linux ;;
++      s390-*-linux-uclibc*)		fmt=elf em=linux ;;
+ 
+       sh*-*-linux*)			fmt=elf em=linux
+ 	    case ${cpu} in
+@@ -457,6 +467,7 @@
+       sparc-*-coff)			fmt=coff ;;
+       sparc-*-linux*aout*)		fmt=aout em=linux ;;
+       sparc-*-linux-gnu*)		fmt=elf em=linux ;;
++      sparc-*-linux-uclibc*)		fmt=elf em=linux ;;
+       sparc-*-lynxos*)			fmt=coff em=lynx ;;
+       sparc-fujitsu-none)		fmt=aout ;;
+       sparc-*-elf)			fmt=elf ;;
+diff -urN binutils-2.14.90.0.6/ld/configure binutils-2.14.90.0.6-uClibc/ld/configure
+--- binutils-2.14.90.0.6/ld/configure	2003-05-05 16:46:49.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/ld/configure	2004-01-06 21:59:31.000000000 -0600
+@@ -1578,6 +1578,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+diff -urN binutils-2.14.90.0.6/ld/configure.tgt binutils-2.14.90.0.6-uClibc/ld/configure.tgt
+--- binutils-2.14.90.0.6/ld/configure.tgt	2003-08-21 10:28:48.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/ld/configure.tgt	2004-01-06 22:09:40.000000000 -0600
+@@ -30,6 +30,7 @@
+ 			targ_extra_emuls="criself crislinux"
+ 			targ_extra_libpath=$targ_extra_emuls ;;
+ cris-*-linux-gnu*)	targ_emul=crislinux ;;
++cris-*-linux-uclibc*)	targ_emul=crislinux ;;
+ cris-*-*)		targ_emul=criself
+ 			targ_extra_emuls="crisaout crislinux"
+ 			targ_extra_libpath=$targ_extra_emuls ;;
+@@ -59,14 +60,16 @@
+ 			tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			tdir_sun4=sparc-sun-sunos4
+ 			;;
+-sparc64-*-linux-gnu*)	targ_emul=elf64_sparc
++sparc64-*-linux-gnu* | sparc64-*-linux-uclibc*)	 \
++			targ_emul=elf64_sparc
+ 			targ_extra_emuls="elf32_sparc sparclinux sun4"
+ 			targ_extra_libpath=elf32_sparc
+ 			tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/64//'`
+ 			tdir_sparclinux=${tdir_elf32_sparc}aout
+ 			tdir_sun4=sparc-sun-sunos4
+ 			;;
+-sparc*-*-linux-gnu*)	targ_emul=elf32_sparc
++sparc*-*-linux-gnu* | sparc*-*-linux-uclibc*) \
++			targ_emul=elf32_sparc
+ 			targ_extra_emuls="sparclinux elf64_sparc sun4"
+ 			targ_extra_libpath=elf64_sparc
+ 			tdir_sparclinux=${targ_alias}aout
+@@ -124,7 +127,7 @@
+ m68*-ericsson-ose)	targ_emul=sun3 ;;
+ m68*-apple-aux*)	targ_emul=m68kaux ;;
+ *-tandem-none)		targ_emul=st2000 ;;
+-i370-*-elf* | i370-*-linux-gnu*) targ_emul=elf32i370 ;;
++i370-*-elf* | i370-*-linux-gnu* | i370-*-linux-uclibc*) targ_emul=elf32i370 ;;
+ i[3-7]86-*-nto-qnx*)	targ_emul=i386nto ;;
+ i[3-7]86-*-vsta)	targ_emul=vsta ;;
+ i[3-7]86-go32-rtems*)	targ_emul=i386go32 ;;
+@@ -148,14 +151,16 @@
+ 			tdir_elf_i386=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			;;
+ i[3-7]86-*-linux*oldld)	targ_emul=i386linux; targ_extra_emuls=elf_i386 ;;
+-i[3-7]86-*-linux-gnu*)	targ_emul=elf_i386
++i[3-7]86-*-linux-gnu* | i[3-7]86-*-linux-uclibc*) \
++			targ_emul=elf_i386
+ 			targ_extra_emuls=i386linux
+ 			if test x${want64} = xtrue; then
+ 			  targ_extra_emuls="$targ_extra_emuls elf_x86_64"
+ 			fi
+ 			tdir_i386linux=${targ_alias}aout
+ 			;;
+-x86_64-*-linux-gnu*)	targ_emul=elf_x86_64
++x86_64-*-linux-gnu* | x86_64-*-linux-uclibc*) \
++			targ_emul=elf_x86_64
+ 			targ_extra_emuls="elf_i386 i386linux"
+ 			targ_extra_libpath=elf_i386
+ 			tdir_i386linux=`echo ${targ_alias}aout | sed -e 's/x86_64/i386/'`
+@@ -250,10 +255,13 @@
+ arm9e-*-elf)		targ_emul=armelf ;;
+ arm-*-oabi)		targ_emul=armelf_oabi ;;
+ arm*b-*-linux-gnu*)	targ_emul=armelfb_linux; targ_extra_emuls=armelfb ;;
++arm*b-*-linux-uclibc*)	targ_emul=armelfb_linux; targ_extra_emuls=armelfb ;;
+ arm*-*-linux-gnu*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
++arm*-*-linux-uclibc*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ arm*-*-uclinux*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ arm*-*-conix*)		targ_emul=armelf ;;
+-thumb-*-linux-gnu* | thumb-*-uclinux*)	targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
++thumb-*-linux-gnu* | thumb-*-linux-uclibc* | thumb-*-uclinux*) \
++			targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+ strongarm-*-coff)	targ_emul=armcoff ;;
+ strongarm-*-elf)	targ_emul=armelf ;;
+ strongarm-*-kaos*)	targ_emul=armelf ;;
+@@ -354,7 +362,8 @@
+ 			targ_extra_emuls=m68kelf
+ 			tdir_m68kelf=`echo ${targ_alias} | sed -e 's/aout//'`
+ 			;;
+-m68k-*-linux-gnu*)	targ_emul=m68kelf
++m68k-*-linux-gnu* | m68k-*-linux-uclibc*) \
++			targ_emul=m68kelf
+ 			targ_extra_emuls=m68klinux
+ 			tdir_m68klinux=`echo ${targ_alias} | sed -e 's/linux/linuxaout/'`
+ 			;;
+@@ -370,9 +379,9 @@
+ m68*-*-psos*)		targ_emul=m68kpsos ;;
+ m68*-*-rtemscoff*)	targ_emul=m68kcoff ;;
+ m68*-*-rtems*)		targ_emul=m68kelf ;;
+-hppa*64*-*-linux-gnu*)	targ_emul=hppa64linux ;;
++hppa*64*-*-linux-gnu* | hppa*64*-*-linux-uclibc*)  targ_emul=hppa64linux ;;
+ hppa*64*-*)		targ_emul=elf64hppa ;;
+-hppa*-*-linux-gnu*)	targ_emul=hppalinux ;;
++hppa*-*-linux-gnu* | hppa*-*-linux-uclibc*)	targ_emul=hppalinux ;;
+ hppa*-*-*elf*)		targ_emul=hppaelf ;;
+ hppa*-*-lites*)		targ_emul=hppaelf ;;
+ hppa*-*-netbsd*)	targ_emul=hppanbsd ;;
+@@ -416,16 +425,20 @@
+ mips*-*-rtems*)		targ_emul=elf32ebmip ;;
+ mips*el-*-vxworks*)	targ_emul=elf32elmip ;;
+ mips*-*-vxworks*)	targ_emul=elf32ebmip ;;
+-mips64*el-*-linux-gnu*)	targ_emul=elf32ltsmipn32
++mips64*el-*-linux-gnu* | mips64*el-*-linux-uclibc*) \
++			targ_emul=elf32ltsmipn32
+ 			targ_extra_emuls="elf32btsmipn32 elf32ltsmip elf32btsmip elf64ltsmip elf64btsmip"
+ 			;;
+-mips64*-*-linux-gnu*)	targ_emul=elf32btsmipn32
++mips64*-*-linux-gnu* | mips64*-*-linux-uclibc*) \
++			targ_emul=elf32btsmipn32
+ 			targ_extra_emuls="elf32ltsmipn32 elf32btsmip elf32ltsmip elf64btsmip elf64ltsmip"
+ 			;;
+-mips*el-*-linux-gnu*)	targ_emul=elf32ltsmip
++mips*el-*-linux-gnu* | mips*el-*-linux-uclibc*) \
++			targ_emul=elf32ltsmip
+ 			targ_extra_emuls="elf32btsmip elf32ltsmipn32 elf64ltsmip elf32btsmipn32 elf64btsmip"
+ 			;;
+-mips*-*-linux-gnu*)	targ_emul=elf32btsmip
++mips*-*-linux-gnu* | mips*-*-linux-uclibc*) \
++			targ_emul=elf32btsmip
+ 			targ_extra_emuls="elf32ltsmip elf32btsmipn32 elf64btsmip elf32ltsmipn32 elf64ltsmip"
+ 			;;
+ mips*-*-lnews*)		targ_emul=mipslnews ;;
+@@ -447,6 +460,10 @@
+ alpha*-*-linux-gnu*)	targ_emul=elf64alpha targ_extra_emuls=alpha
+ 			tdir_alpha=`echo ${targ_alias} | sed -e 's/linux/linuxecoff/'`
+ 			;;
++alpha*-*-linux-uclibc*)	targ_emul=elf64alpha targ_extra_emuls=alpha
++			# The following needs to be checked...
++			tdir_alpha=`echo ${targ_alias} | sed -e 's/linux/linuxecoff/'`
++			;;
+ alpha*-*-osf*)		targ_emul=alpha ;;
+ alpha*-*-gnu*)		targ_emul=elf64alpha ;;
+ alpha*-*-netware*)	targ_emul=alpha ;;
+diff -urN binutils-2.14.90.0.6/libtool.m4 binutils-2.14.90.0.6-uClibc/libtool.m4
+--- binutils-2.14.90.0.6/libtool.m4	2003-05-05 16:46:46.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/libtool.m4	2004-01-06 20:30:39.000000000 -0600
+@@ -645,6 +645,11 @@
+   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+   ;;
+ 
++linux-uclibc*)
++  lt_cv_deplibs_check_method=pass_all
++  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++  ;;
++
+ netbsd*)
+   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+     [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
+diff -urN binutils-2.14.90.0.6/ltconfig binutils-2.14.90.0.6-uClibc/ltconfig
+--- binutils-2.14.90.0.6/ltconfig	2003-07-23 10:08:08.000000000 -0500
++++ binutils-2.14.90.0.6-uClibc/ltconfig	2004-01-06 21:05:11.000000000 -0600
+@@ -603,6 +603,7 @@
+ # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+ case $host_os in
+ linux-gnu*) ;;
++linux-uclibc*) ;;
+ linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+ esac
+ 
+@@ -1259,6 +1260,24 @@
+   dynamic_linker='GNU/Linux ld.so'
+   ;;
+ 
++linux-uclibc*)
++  version_type=linux
++  need_lib_prefix=no
++  need_version=no
++  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
++  soname_spec='${libname}${release}.so$major'
++  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
++  shlibpath_var=LD_LIBRARY_PATH
++  shlibpath_overrides_runpath=no
++  # This implies no fast_install, which is unacceptable.
++  # Some rework will be needed to allow for fast_install
++  # before this can be enabled.
++  # Note: copied from linux-gnu, and may not be appropriate.
++  hardcode_into_libs=yes
++  # Assume using the uClibc dynamic linker.
++  dynamic_linker="uClibc ld.so"
++  ;;
++
+ netbsd*)
+   need_lib_prefix=no
+   need_version=no
diff -Naur crosstool-0.28-rc5-orig/patches/gcc-3.3.3/uclibc-target-01.patch crosstool-0.28-rc5/patches/gcc-3.3.3/uclibc-target-01.patch
--- crosstool-0.28-rc5-orig/patches/gcc-3.3.3/uclibc-target-01.patch	1969-12-31 16:00:00.000000000 -0800
+++ crosstool-0.28-rc5/patches/gcc-3.3.3/uclibc-target-01.patch	2004-06-19 12:17:30.000000000 -0700
@@ -0,0 +1,1605 @@
+Provided by the uClibc project.
+
+This is the base patch for uClibc target support, enabling gcc to compile
+directly for *-*-linux-uclibc targets, using the ARM, CRIS, MIPS, x86, sh,
+and sh64 CPU architectures.  Also included is everything necessary to get
+libstdc++-v3 to compile against uClibc, except the config/locale/uclibc
+and os/uclibc directrories.  Further patches add support for other CPU
+architectures, and add the missing directories for C++ support.  The
+patches are separated out to keep authorship straight, and respect how they
+are distributed by the uClibc project.  This one was written by
+Manuel Novoa III, of the uClibc project.
+
+diff -urN gcc-3.3.3/boehm-gc/config.sub gcc-3.3.3-new/boehm-gc/config.sub
+--- gcc-3.3.3/boehm-gc/config.sub	2002-02-11 22:37:53.000000000 -0600
++++ gcc-3.3.3-new/boehm-gc/config.sub	2004-02-16 21:12:16.000000000 -0600
+@@ -118,7 +118,7 @@
+ # Here we must recognize all the valid KERNEL-OS combinations.
+ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+ case $maybe_os in
+-  nto-qnx* | linux-gnu* | storm-chaos* | os2-emx* | windows32-*)
++  nto-qnx* | linux-gnu* | linux-uclibc* | storm-chaos* | os2-emx* | windows32-*)
+     os=-$maybe_os
+     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+     ;;
+@@ -1089,7 +1089,8 @@
+ 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ 	      | -chorusos* | -chorusrdb* \
+ 	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+-	      | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
++	      | -mingw32* | -linux-gnu* | -linux-uclibc* \
++	      | -uxpv* | -beos* | -mpeix* | -udk* \
+ 	      | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
+ 	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ 	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+diff -urN gcc-3.3.3/config.sub gcc-3.3.3-new/config.sub
+--- gcc-3.3.3/config.sub	2003-01-30 17:25:36.000000000 -0600
++++ gcc-3.3.3-new/config.sub	2004-02-16 21:12:16.000000000 -0600
+@@ -118,7 +118,7 @@
+ # Here we must recognize all the valid KERNEL-OS combinations.
+ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+ case $maybe_os in
+-  nto-qnx* | linux-gnu* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
++  nto-qnx* | linux-gnu* | linux-uclibc* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
+     os=-$maybe_os
+     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+     ;;
+@@ -1112,7 +1112,8 @@
+ 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ 	      | -chorusos* | -chorusrdb* \
+ 	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+-	      | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
++	      | -mingw32* | -linux-gnu* | -linux-uclibc* \
++	      | -uxpv* | -beos* | -mpeix* | -udk* \
+ 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ 	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ 	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+diff -urN gcc-3.3.3/gcc/config/arm/linux-elf.h gcc-3.3.3-new/gcc/config/arm/linux-elf.h
+--- gcc-3.3.3/gcc/config/arm/linux-elf.h	2003-09-16 10:39:23.000000000 -0500
++++ gcc-3.3.3-new/gcc/config/arm/linux-elf.h	2004-02-16 21:12:16.000000000 -0600
+@@ -78,6 +78,18 @@
+   "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s"
+ 
+ #undef  LINK_SPEC
++#ifdef USE_UCLIBC
++#define LINK_SPEC "%{h*} %{version:-v} \
++   %{b} %{Wl,*:%*} \
++   %{static:-Bstatic} \
++   %{shared:-shared} \
++   %{symbolic:-Bsymbolic} \
++   %{rdynamic:-export-dynamic} \
++   %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0} \
++   -X \
++   %{mbig-endian:-EB}" \
++   SUBTARGET_EXTRA_LINK_SPEC
++#else
+ #define LINK_SPEC "%{h*} %{version:-v} \
+    %{b} %{Wl,*:%*} \
+    %{static:-Bstatic} \
+@@ -88,6 +100,7 @@
+    -X \
+    %{mbig-endian:-EB}" \
+    SUBTARGET_EXTRA_LINK_SPEC
++#endif
+ 
+ #define TARGET_OS_CPP_BUILTINS()		\
+     do {					\
+diff -urN gcc-3.3.3/gcc/config/cris/linux.h gcc-3.3.3-new/gcc/config/cris/linux.h
+--- gcc-3.3.3/gcc/config/cris/linux.h	2003-03-10 21:01:35.000000000 -0600
++++ gcc-3.3.3-new/gcc/config/cris/linux.h	2004-02-16 21:12:16.000000000 -0600
+@@ -81,6 +81,25 @@
+ #undef CRIS_DEFAULT_CPU_VERSION
+ #define CRIS_DEFAULT_CPU_VERSION CRIS_CPU_NG
+ 
++#ifdef USE_UCLIBC
++
++#undef CRIS_SUBTARGET_VERSION
++#define CRIS_SUBTARGET_VERSION " - cris-axis-linux-uclibc"
++
++#undef CRIS_LINK_SUBTARGET_SPEC
++#define CRIS_LINK_SUBTARGET_SPEC \
++ "-mcrislinux\
++  -rpath-link include/asm/../..%s\
++  %{shared} %{static}\
++  %{symbolic:-Bdynamic} %{shlib:-Bdynamic} %{static:-Bstatic}\
++  %{!shared: \
++    %{!static: \
++      %{rdynamic:-export-dynamic} \
++      %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}} \
++  %{!r:%{O2|O3: --gc-sections}}"
++
++#else  /* USE_UCLIBC */
++
+ #undef CRIS_SUBTARGET_VERSION
+ #define CRIS_SUBTARGET_VERSION " - cris-axis-linux-gnu"
+ 
+@@ -95,6 +114,8 @@
+   %{!shared:%{!static:%{rdynamic:-export-dynamic}}}\
+   %{!r:%{O2|O3: --gc-sections}}"
+ 
++#endif  /* USE_UCLIBC */
++
+ 
+ /* Node: Run-time Target */
+ 
+diff -urN gcc-3.3.3/gcc/config/cris/t-linux-uclibc gcc-3.3.3-new/gcc/config/cris/t-linux-uclibc
+--- gcc-3.3.3/gcc/config/cris/t-linux-uclibc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.3-new/gcc/config/cris/t-linux-uclibc	2004-02-16 21:12:16.000000000 -0600
+@@ -0,0 +1,3 @@
++T_CFLAGS = -DUSE_UCLIBC
++TARGET_LIBGCC2_CFLAGS += -fPIC
++CRTSTUFF_T_CFLAGS_S = $(TARGET_LIBGCC2_CFLAGS)
+diff -urN gcc-3.3.3/gcc/config/i386/linux.h gcc-3.3.3-new/gcc/config/i386/linux.h
+--- gcc-3.3.3/gcc/config/i386/linux.h	2003-11-14 00:46:12.000000000 -0600
++++ gcc-3.3.3-new/gcc/config/i386/linux.h	2004-02-16 21:12:16.000000000 -0600
+@@ -136,6 +136,15 @@
+ 	%{static:-static}}}"
+ #endif
+ #else
++#if defined USE_UCLIBC
++#define LINK_SPEC "-m elf_i386 %{shared:-shared} \
++  %{!shared: \
++    %{!ibcs: \
++      %{!static: \
++	%{rdynamic:-export-dynamic} \
++	%{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++	%{static:-static}}}"
++#else
+ #define LINK_SPEC "-m elf_i386 %{shared:-shared} \
+   %{!shared: \
+     %{!ibcs: \
+@@ -144,6 +153,7 @@
+ 	%{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+ 	%{static:-static}}}"
+ #endif
++#endif
+ 
+ /* A C statement (sans semicolon) to output to the stdio stream
+    FILE the assembler definition of uninitialized global DECL named
+diff -urN gcc-3.3.3/gcc/config/mips/linux.h gcc-3.3.3-new/gcc/config/mips/linux.h
+--- gcc-3.3.3/gcc/config/mips/linux.h	2003-12-23 02:58:00.000000000 -0600
++++ gcc-3.3.3-new/gcc/config/mips/linux.h	2004-02-16 21:12:16.000000000 -0600
+@@ -175,6 +175,17 @@
+ 
+ /* Borrowed from sparc/linux.h */
+ #undef LINK_SPEC
++#ifdef USE_UCLIBC
++#define LINK_SPEC \
++ "%(endian_spec) \
++  %{shared:-shared} \
++  %{!shared: \
++    %{!ibcs: \
++      %{!static: \
++        %{rdynamic:-export-dynamic} \
++        %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++        %{static:-static}}}"
++#else
+ #define LINK_SPEC \
+  "%(endian_spec) \
+   %{shared:-shared} \
+@@ -184,6 +195,7 @@
+         %{rdynamic:-export-dynamic} \
+         %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \
+         %{static:-static}}}"
++#endif
+ 
+ #undef SUBTARGET_ASM_SPEC
+ #define SUBTARGET_ASM_SPEC "\
+diff -urN gcc-3.3.3/gcc/config/sh/linux.h gcc-3.3.3-new/gcc/config/sh/linux.h
+--- gcc-3.3.3/gcc/config/sh/linux.h	2003-11-06 17:13:33.000000000 -0600
++++ gcc-3.3.3-new/gcc/config/sh/linux.h	2004-02-16 21:12:16.000000000 -0600
+@@ -44,12 +44,21 @@
+ #undef SUBTARGET_LINK_EMUL_SUFFIX
+ #define SUBTARGET_LINK_EMUL_SUFFIX "_linux"
+ #undef SUBTARGET_LINK_SPEC
++#ifdef USE_UCLIBC
++#define SUBTARGET_LINK_SPEC \
++  "%{shared:-shared} \
++   %{!static: \
++     %{rdynamic:-export-dynamic} \
++     %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++   %{static:-static}"
++#else
+ #define SUBTARGET_LINK_SPEC \
+   "%{shared:-shared} \
+    %{!static: \
+      %{rdynamic:-export-dynamic} \
+      %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+    %{static:-static}"
++#endif
+ 
+ /* The GNU C++ standard library requires that these macros be defined.  */
+ #undef CPLUSPLUS_CPP_SPEC
+diff -urN gcc-3.3.3/gcc/config/sh/t-linux-uclibc gcc-3.3.3-new/gcc/config/sh/t-linux-uclibc
+--- gcc-3.3.3/gcc/config/sh/t-linux-uclibc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.3-new/gcc/config/sh/t-linux-uclibc	2004-02-16 21:12:16.000000000 -0600
+@@ -0,0 +1,16 @@
++T_CFLAGS = -DUSE_UCLIBC
++
++# Don't run fixproto
++STMP_FIXPROTO =
++
++TARGET_LIBGCC2_CFLAGS = -fpic
++LIB1ASMFUNCS_CACHE = _ic_invalidate
++
++LIB2FUNCS_EXTRA=
++
++MULTILIB_OPTIONS= $(MULTILIB_ENDIAN) m3e/m4
++MULTILIB_DIRNAMES= 
++MULTILIB_MATCHES = 
++MULTILIB_EXCEPTIONS=
++
++EXTRA_MULTILIB_PARTS= crtbegin.o crtend.o crtbeginS.o crtendS.o
+diff -urN gcc-3.3.3/gcc/config/sh/t-sh64-uclibc gcc-3.3.3-new/gcc/config/sh/t-sh64-uclibc
+--- gcc-3.3.3/gcc/config/sh/t-sh64-uclibc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.3-new/gcc/config/sh/t-sh64-uclibc	2004-02-16 21:12:16.000000000 -0600
+@@ -0,0 +1,13 @@
++EXTRA_MULTILIB_PARTS= crtbegin.o crtend.o
++
++LIB1ASMFUNCS = \
++  _sdivsi3 _sdivsi3_i4 _udivsi3 _udivsi3_i4 _set_fpscr \
++  _shcompact_call_trampoline _shcompact_return_trampoline \
++  _shcompact_incoming_args _ic_invalidate _nested_trampoline \
++  _push_pop_shmedia_regs \
++  _udivdi3 _divdi3 _umoddi3 _moddi3
++
++MULTILIB_OPTIONS = $(MULTILIB_ENDIAN) m5-32media-nofpu/m5-compact/m5-compact-nofpu/m5-64media/m5-64media-nofpu
++MULTILIB_DIRNAMES= $(MULTILIB_ENDIAN) nofpu compact nofpu/compact media64 nofpu/media64
++MULTILIB_MATCHES=
++MULTILIB_EXCEPTIONS=
+diff -urN gcc-3.3.3/gcc/config/t-linux-uclibc gcc-3.3.3-new/gcc/config/t-linux-uclibc
+--- gcc-3.3.3/gcc/config/t-linux-uclibc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.3-new/gcc/config/t-linux-uclibc	2004-02-16 21:12:16.000000000 -0600
+@@ -0,0 +1,23 @@
++T_CFLAGS = -DUSE_UCLIBC
++
++# Don't run fixproto
++STMP_FIXPROTO =
++
++# Compile crtbeginS.o and crtendS.o with pic.
++CRTSTUFF_T_CFLAGS_S = $(CRTSTUFF_T_CFLAGS) -fPIC
++# Compile libgcc2.a with pic.
++TARGET_LIBGCC2_CFLAGS = -fPIC
++
++# Override t-slibgcc-elf-ver to export some libgcc symbols with
++# the symbol versions that glibc used.
++SHLIB_MAPFILES += $(srcdir)/config/libgcc-glibc.ver
++
++# Use unwind-dw2-fde-glibc
++#LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde-glibc.c \
++#  $(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c
++#LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h unwind-dw2-fde.c
++
++# Use unwind-dw2-fde
++LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde.c \
++  $(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c
++LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h
+diff -urN gcc-3.3.3/gcc/config.gcc gcc-3.3.3-new/gcc/config.gcc
+--- gcc-3.3.3/gcc/config.gcc	2004-01-21 00:06:00.000000000 -0600
++++ gcc-3.3.3-new/gcc/config.gcc	2004-02-16 21:12:16.000000000 -0600
+@@ -697,6 +697,17 @@
+ 	extra_parts=""
+ 	use_collect2=yes
+ 	;;
++arm*-*-linux-uclibc*)		# ARM GNU/Linux with ELF - uClibc
++	tm_file="dbxelf.h elfos.h arm/unknown-elf.h arm/elf.h arm/aout.h arm/arm.h arm/linux-gas.h arm/linux-elf.h"
++	tmake_file="t-slibgcc-elf-ver t-linux-uclibc arm/t-linux"
++	extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
++	gnu_ld=yes
++	case x${enable_threads} in
++	x | xyes | xpthreads | xposix)
++		thread_file='posix'
++		;;
++	esac
++	;;
+ arm*-*-linux*)			# ARM GNU/Linux with ELF
+ 	tm_file="dbxelf.h elfos.h arm/unknown-elf.h arm/elf.h arm/aout.h arm/arm.h arm/linux-gas.h arm/linux-elf.h"
+ 	tmake_file="t-slibgcc-elf-ver t-linux arm/t-linux"
+@@ -772,6 +783,10 @@
+ 	tmake_file="cris/t-cris cris/t-elfmulti"
+ 	gas=yes
+ 	;;
++cris-*-linux-uclibc*)
++	tm_file="dbxelf.h elfos.h svr4.h ${tm_file} linux.h cris/linux.h"
++	tmake_file="cris/t-cris t-slibgcc-elf-ver cris/t-linux-uclibc"
++	;;
+ cris-*-linux*)
+ 	tm_file="dbxelf.h elfos.h svr4.h ${tm_file} linux.h cris/linux.h"
+ 	tmake_file="cris/t-cris t-slibgcc-elf-ver cris/t-linux"
+@@ -1173,6 +1188,11 @@
+ 		thread_file='single'
+ 	fi
+ 	;;
++i[34567]86-*-linux*uclibc*)	# Intel 80386's running GNU/Linux
++				# with ELF format using uClibc
++	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h svr4.h linux.h i386/linux.h"
++	tmake_file="t-slibgcc-elf-ver t-linux-uclibc i386/t-crtstuff"
++	;;
+ i[34567]86-*-linux*)	# Intel 80386's running GNU/Linux
+ 			# with ELF format using glibc 2
+ 			# aka GNU/Linux C library 6
+@@ -1883,6 +1903,16 @@
+ 	tm_file="elfos.h ${tm_file} mips/netbsd.h"
+ 	tmake_file="${tmake_file} mips/t-netbsd"
+ 	;;
++mips*-*-linux-uclibc*)			# Linux MIPS, either endian. uClibc
++        tm_file="dbxelf.h elfos.h svr4.h linux.h ${tm_file} mips/linux.h"
++	case $machine in
++        mipsisa32*-*)
++                target_cpu_default="MASK_SOFT_FLOAT"
++		tm_defines="MIPS_ISA_DEFAULT=32"
++                ;;
++        esac
++	tmake_file="t-slibgcc-elf-ver t-linux-uclibc mips/t-linux"
++	;;
+ mips*-*-linux*)				# Linux MIPS, either endian.
+         tm_file="dbxelf.h elfos.h svr4.h linux.h ${tm_file} mips/linux.h"
+ 	case $machine in
+@@ -2129,6 +2159,11 @@
+ 	out_file=rs6000/rs6000.c
+ 	tmake_file="rs6000/t-ppcos t-slibgcc-elf-ver t-linux rs6000/t-ppccomm"
+ 	;;
++powerpc-*-linux-uclibc*)
++	tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h"
++	out_file=rs6000/rs6000.c
++	tmake_file="rs6000/t-ppcos t-slibgcc-elf-ver t-linux-uclibc rs6000/t-ppccomm"
++	;;
+ powerpc-*-linux*)
+ 	tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h"
+ 	out_file=rs6000/rs6000.c
+@@ -2313,10 +2348,18 @@
+ 		tmake_file="${tmake_file} sh/t-le"
+ 		;;
+ 	esac
+-	tmake_file="${tmake_file} sh/t-linux"
++	case $machine in
++	*-*-linux-uclibc*) tmake_file="${tmake_file} sh/t-linux-uclibc" ;;
++	*) tmake_file="${tmake_file} sh/t-linux" ;;
++	esac
+ 	tm_file="${tm_file} dbxelf.h elfos.h svr4.h sh/elf.h sh/linux.h"
+ 	gas=yes gnu_ld=yes
+ 	case $machine in
++	sh64*-*-linux-uclibc*)
++		tmake_file="${tmake_file} sh/t-sh64-uclibc"
++		tm_file="${tm_file} sh/sh64.h"
++		extra_headers="shmedia.h ushmedia.h sshmedia.h"
++		;;
+ 	sh64*)
+ 		tmake_file="${tmake_file} sh/t-sh64"
+ 		tm_file="${tm_file} sh/sh64.h"
+diff -urN gcc-3.3.3/libstdc++-v3/aclocal.m4 gcc-3.3.3-new/libstdc++-v3/aclocal.m4
+--- gcc-3.3.3/libstdc++-v3/aclocal.m4	2004-01-12 10:18:44.000000000 -0600
++++ gcc-3.3.3-new/libstdc++-v3/aclocal.m4	2004-02-16 21:12:16.000000000 -0600
+@@ -1216,6 +1216,9 @@
+   dnl Default to "generic"
+   if test x$enable_clocale_flag = xno; then
+     case x${target_os} in
++      xlinux-uclibc*)
++	enable_clocale_flag=uclibc
++	;;
+       xlinux* | xgnu*)
+ 	AC_EGREP_CPP([_GLIBCPP_ok], [
+         #include <features.h>
+@@ -1339,6 +1342,41 @@
+       CTIME_CC=config/locale/generic/time_members.cc
+       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+       ;;
++    xuclibc)
++      AC_MSG_RESULT(uclibc)
++
++      # Declare intention to use gettext, and add support for specific
++      # languages.
++      # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++      ALL_LINGUAS="de fr"
++
++      # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++      AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
++      if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++	USE_NLS=yes
++      fi
++      # Export the build objects.
++      for ling in $ALL_LINGUAS; do \
++        glibcpp_MOFILES="$glibcpp_MOFILES $ling.mo"; \
++        glibcpp_POFILES="$glibcpp_POFILES $ling.po"; \
++      done
++      AC_SUBST(glibcpp_MOFILES)
++      AC_SUBST(glibcpp_POFILES)
++
++      CLOCALE_H=config/locale/uclibc/c_locale.h
++      CLOCALE_CC=config/locale/uclibc/c_locale.cc
++      CCODECVT_H=config/locale/uclibc/codecvt_specializations.h
++      CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++      CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++      CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++      CMESSAGES_H=config/locale/uclibc/messages_members.h
++      CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++      CMONEY_CC=config/locale/uclibc/monetary_members.cc
++      CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++      CTIME_H=config/locale/uclibc/time_members.h
++      CTIME_CC=config/locale/uclibc/time_members.cc
++      CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++      ;;
+     *)
+       echo "$enable_clocale is an unknown locale package" 1>&2
+       exit 1
+diff -urN gcc-3.3.3/libstdc++-v3/configure gcc-3.3.3-new/libstdc++-v3/configure
+--- gcc-3.3.3/libstdc++-v3/configure	2004-01-12 10:18:45.000000000 -0600
++++ gcc-3.3.3-new/libstdc++-v3/configure	2004-02-17 00:21:12.000000000 -0600
+@@ -2996,6 +2996,9 @@
+ 
+       if test x$enable_clocale_flag = xno; then
+     case x${target_os} in
++      xlinux-uclibc*)
++	enable_clocale_flag=uclibc
++	;;
+       xlinux* | xgnu*)
+ 	cat > conftest.$ac_ext <<EOF
+ #line 3002 "configure"
+@@ -3182,6 +3185,70 @@
+       CTIME_CC=config/locale/generic/time_members.cc
+       CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+       ;;
++    xuclibc)
++      echo "$ac_t""uclibc" 1>&6
++
++      # Declare intention to use gettext, and add support for specific
++      # languages.
++      # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++      ALL_LINGUAS="de fr"
++
++      # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++      # Extract the first word of "msgfmt", so it can be a program name with args.
++set dummy msgfmt; ac_word=$2
++echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
++echo "configure:3117: checking for $ac_word" >&5
++if eval "test \"`echo '$''{'ac_cv_prog_check_msgfmt'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  if test -n "$check_msgfmt"; then
++  ac_cv_prog_check_msgfmt="$check_msgfmt" # Let the user override the test.
++else
++  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
++  ac_dummy="$PATH"
++  for ac_dir in $ac_dummy; do
++    test -z "$ac_dir" && ac_dir=.
++    if test -f $ac_dir/$ac_word; then
++      ac_cv_prog_check_msgfmt="yes"
++      break
++    fi
++  done
++  IFS="$ac_save_ifs"
++  test -z "$ac_cv_prog_check_msgfmt" && ac_cv_prog_check_msgfmt="no"
++fi
++fi
++check_msgfmt="$ac_cv_prog_check_msgfmt"
++if test -n "$check_msgfmt"; then
++  echo "$ac_t""$check_msgfmt" 1>&6
++else
++  echo "$ac_t""no" 1>&6
++fi
++
++      if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++	USE_NLS=yes
++      fi
++      # Export the build objects.
++      for ling in $ALL_LINGUAS; do \
++        glibcpp_MOFILES="$glibcpp_MOFILES $ling.mo"; \
++        glibcpp_POFILES="$glibcpp_POFILES $ling.po"; \
++      done
++      
++      
++
++      CLOCALE_H=config/locale/uclibc/c_locale.h
++      CLOCALE_CC=config/locale/uclibc/c_locale.cc
++      CCODECVT_H=config/locale/uclibc/codecvt_specializations.h
++      CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++      CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++      CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++      CMESSAGES_H=config/locale/uclibc/messages_members.h
++      CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++      CMONEY_CC=config/locale/uclibc/monetary_members.cc
++      CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++      CTIME_H=config/locale/uclibc/time_members.h
++      CTIME_CC=config/locale/uclibc/time_members.cc
++      CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++      ;;
+     *)
+       echo "$enable_clocale is an unknown locale package" 1>&2
+       exit 1
+@@ -4212,6 +4279,968 @@
+   # GLIBCPP_CHECK_MATH_SUPPORT
+ 
+   case "$target" in
++    *-uclibc*)
++      os_include_dir="os/uclibc"
++      for ac_hdr in nan.h ieeefp.h endian.h sys/isa_defs.h \
++        machine/endian.h machine/param.h sys/machine.h sys/types.h \
++        fp.h locale.h float.h inttypes.h
++do
++ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
++echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
++echo "configure:4224: checking for $ac_hdr" >&5
++if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4229 "configure"
++#include "confdefs.h"
++#include <$ac_hdr>
++EOF
++ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
++{ (eval echo configure:4234: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
++ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
++if test -z "$ac_err"; then
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=yes"
++else
++  echo "$ac_err" >&5
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=no"
++fi
++rm -f conftest*
++fi
++if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_hdr 1
++EOF
++ 
++else
++  echo "$ac_t""no" 1>&6
++fi
++done
++
++      SECTION_FLAGS='-ffunction-sections -fdata-sections'
++      
++      
++  # If we're not using GNU ld, then there's no point in even trying these
++  # tests.  Check for that first.  We should have already tested for gld
++  # by now (in libtool), but require it now just to be safe...
++  test -z "$SECTION_LDFLAGS" && SECTION_LDFLAGS=''
++  test -z "$OPT_LDFLAGS" && OPT_LDFLAGS=''
++  
++
++  # The name set by libtool depends on the version of libtool.  Shame on us
++  # for depending on an impl detail, but c'est la vie.  Older versions used
++  # ac_cv_prog_gnu_ld, but now it's lt_cv_prog_gnu_ld, and is copied back on
++  # top of with_gnu_ld (which is also set by --with-gnu-ld, so that actually
++  # makes sense).  We'll test with_gnu_ld everywhere else, so if that isn't
++  # set (hence we're using an older libtool), then set it.
++  if test x${with_gnu_ld+set} != xset; then
++    if test x${ac_cv_prog_gnu_ld+set} != xset; then
++      # We got through "ac_require(ac_prog_ld)" and still not set?  Huh?
++      with_gnu_ld=no
++    else
++      with_gnu_ld=$ac_cv_prog_gnu_ld
++    fi
++  fi
++
++  # Start by getting the version number.  I think the libtool test already
++  # does some of this, but throws away the result.
++  
++  ldver=`$LD --version 2>/dev/null | head -1 | \
++         sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'`
++  
++  glibcpp_gnu_ld_version=`echo $ldver | \
++         $AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'`
++
++  # Set --gc-sections.
++  if test "$with_gnu_ld" = "notbroken"; then
++    # GNU ld it is!  Joy and bunny rabbits!
++
++    # All these tests are for C++; save the language and the compiler flags.
++    # Need to do this so that g++ won't try to link in libstdc++
++    ac_test_CFLAGS="${CFLAGS+set}"
++    ac_save_CFLAGS="$CFLAGS"
++    CFLAGS='-x c++  -Wl,--gc-sections'
++
++    # Check for -Wl,--gc-sections
++    # XXX This test is broken at the moment, as symbols required for
++    # linking are now in libsupc++ (not built yet.....). In addition, 
++    # this test has cored on solaris in the past. In addition,
++    # --gc-sections doesn't really work at the moment (keeps on discarding
++    # used sections, first .eh_frame and now some of the glibc sections for
++    # iconv). Bzzzzt. Thanks for playing, maybe next time.
++    echo $ac_n "checking for ld that supports -Wl,--gc-sections""... $ac_c" 1>&6
++echo "configure:4312: checking for ld that supports -Wl,--gc-sections" >&5
++    if test "$cross_compiling" = yes; then
++  ac_sectionLDflags=yes
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4317 "configure"
++#include "confdefs.h"
++
++     int main(void) 
++     {
++       try { throw 1; }
++       catch (...) { };
++       return 0;
++     }
++    
++EOF
++if { (eval echo configure:4328: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
++then
++  ac_sectionLDflags=yes
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -fr conftest*
++  ac_sectionLDflags=no
++fi
++rm -fr conftest*
++fi
++
++    if test "$ac_test_CFLAGS" = set; then
++      CFLAGS="$ac_save_CFLAGS"
++    else
++      # this is the suspicious part
++      CFLAGS=''
++    fi
++    if test "$ac_sectionLDflags" = "yes"; then
++      SECTION_LDFLAGS="-Wl,--gc-sections $SECTION_LDFLAGS"
++    fi
++    echo "$ac_t""$ac_sectionLDflags" 1>&6
++  fi
++
++  # Set linker optimization flags.
++  if test x"$with_gnu_ld" = x"yes"; then
++    OPT_LDFLAGS="-Wl,-O1 $OPT_LDFLAGS"
++  fi
++
++  
++  
++
++      
++    echo $ac_n "checking for main in -lm""... $ac_c" 1>&6
++echo "configure:4362: checking for main in -lm" >&5
++ac_lib_var=`echo m'_'main | sed 'y%./+-%__p_%'`
++if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  ac_save_LIBS="$LIBS"
++LIBS="-lm  $LIBS"
++cat > conftest.$ac_ext <<EOF
++#line 4370 "configure"
++#include "confdefs.h"
++
++int main() {
++main()
++; return 0; }
++EOF
++if { (eval echo configure:4377: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++  rm -rf conftest*
++  eval "ac_cv_lib_$ac_lib_var=yes"
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_lib_$ac_lib_var=no"
++fi
++rm -f conftest*
++LIBS="$ac_save_LIBS"
++
++fi
++if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_lib=HAVE_LIB`echo m | sed -e 's/[^a-zA-Z0-9_]/_/g' \
++    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_lib 1
++EOF
++
++  LIBS="-lm $LIBS"
++
++else
++  echo "$ac_t""no" 1>&6
++fi
++
++  for ac_func in nan copysignf
++do
++echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
++echo "configure:4407: checking for $ac_func" >&5
++if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4412 "configure"
++#include "confdefs.h"
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char $ac_func(); below.  */
++#include <assert.h>
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char $ac_func();
++
++int main() {
++
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
++choke me
++#else
++$ac_func();
++#endif
++
++; return 0; }
++EOF
++if { (eval echo configure:4435: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=yes"
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=no"
++fi
++rm -f conftest*
++fi
++
++if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_func 1
++EOF
++ 
++else
++  echo "$ac_t""no" 1>&6
++LIBMATHOBJS="$LIBMATHOBJS ${ac_func}.lo"
++fi
++done
++
++
++    for ac_func in __signbit
++do
++echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
++echo "configure:4464: checking for $ac_func" >&5
++if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4469 "configure"
++#include "confdefs.h"
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char $ac_func(); below.  */
++#include <assert.h>
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char $ac_func();
++
++int main() {
++
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
++choke me
++#else
++$ac_func();
++#endif
++
++; return 0; }
++EOF
++if { (eval echo configure:4492: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=yes"
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=no"
++fi
++rm -f conftest*
++fi
++
++if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_func 1
++EOF
++ 
++else
++  echo "$ac_t""no" 1>&6
++LIBMATHOBJS="$LIBMATHOBJS signbit.lo"
++fi
++done
++
++  for ac_func in __signbitf
++do
++echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
++echo "configure:4520: checking for $ac_func" >&5
++if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4525 "configure"
++#include "confdefs.h"
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char $ac_func(); below.  */
++#include <assert.h>
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char $ac_func();
++
++int main() {
++
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
++choke me
++#else
++$ac_func();
++#endif
++
++; return 0; }
++EOF
++if { (eval echo configure:4548: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=yes"
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=no"
++fi
++rm -f conftest*
++fi
++
++if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_func 1
++EOF
++ 
++else
++  echo "$ac_t""no" 1>&6
++LIBMATHOBJS="$LIBMATHOBJS signbitf.lo"
++fi
++done
++
++
++          if test x$ac_cv_func_copysignl = x"yes"; then
++    for ac_func in __signbitl
++do
++echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
++echo "configure:4578: checking for $ac_func" >&5
++if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4583 "configure"
++#include "confdefs.h"
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char $ac_func(); below.  */
++#include <assert.h>
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char $ac_func();
++
++int main() {
++
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
++choke me
++#else
++$ac_func();
++#endif
++
++; return 0; }
++EOF
++if { (eval echo configure:4606: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=yes"
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=no"
++fi
++rm -f conftest*
++fi
++
++if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_func 1
++EOF
++ 
++else
++  echo "$ac_t""no" 1>&6
++LIBMATHOBJS="$LIBMATHOBJS signbitl.lo"
++fi
++done
++
++  fi
++
++  if test -n "$LIBMATHOBJS"; then
++    need_libmath=yes
++  fi
++  
++  
++
++if test "$need_libmath" = yes; then
++  GLIBCPP_BUILD_LIBMATH_TRUE=
++  GLIBCPP_BUILD_LIBMATH_FALSE='#'
++else
++  GLIBCPP_BUILD_LIBMATH_TRUE='#'
++  GLIBCPP_BUILD_LIBMATH_FALSE=
++fi
++
++      
++    enable_wchar_t=no
++
++      echo $ac_n "checking for mbstate_t""... $ac_c" 1>&6
++echo "configure:4651: checking for mbstate_t" >&5
++  cat > conftest.$ac_ext <<EOF
++#line 4653 "configure"
++#include "confdefs.h"
++#include <wchar.h>
++int main() {
++mbstate_t teststate;
++; return 0; }
++EOF
++if { (eval echo configure:4660: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++  rm -rf conftest*
++  have_mbstate_t=yes
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  have_mbstate_t=no
++fi
++rm -f conftest*
++  echo "$ac_t""$have_mbstate_t" 1>&6
++  if test x"$have_mbstate_t" = xyes; then
++    cat >> confdefs.h <<\EOF
++#define HAVE_MBSTATE_T 1
++EOF
++
++  fi
++
++    for ac_hdr in wchar.h
++do
++ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
++echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
++echo "configure:4682: checking for $ac_hdr" >&5
++if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4687 "configure"
++#include "confdefs.h"
++#include <$ac_hdr>
++EOF
++ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
++{ (eval echo configure:4692: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
++ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
++if test -z "$ac_err"; then
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=yes"
++else
++  echo "$ac_err" >&5
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=no"
++fi
++rm -f conftest*
++fi
++if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_hdr 1
++EOF
++ ac_has_wchar_h=yes
++else
++  echo "$ac_t""no" 1>&6
++ac_has_wchar_h=no
++fi
++done
++
++  for ac_hdr in wctype.h
++do
++ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
++echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
++echo "configure:4723: checking for $ac_hdr" >&5
++if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4728 "configure"
++#include "confdefs.h"
++#include <$ac_hdr>
++EOF
++ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
++{ (eval echo configure:4733: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
++ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
++if test -z "$ac_err"; then
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=yes"
++else
++  echo "$ac_err" >&5
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=no"
++fi
++rm -f conftest*
++fi
++if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_hdr 1
++EOF
++ ac_has_wctype_h=yes
++else
++  echo "$ac_t""no" 1>&6
++ac_has_wctype_h=no
++fi
++done
++
++  
++    if test x"$ac_has_wchar_h" = xyes &&
++     test x"$ac_has_wctype_h" = xyes &&
++     test x"$enable_c_mbchar" != xno; then
++      
++            echo $ac_n "checking for WCHAR_MIN and WCHAR_MAX""... $ac_c" 1>&6
++echo "configure:4766: checking for WCHAR_MIN and WCHAR_MAX" >&5
++    cat > conftest.$ac_ext <<EOF
++#line 4768 "configure"
++#include "confdefs.h"
++#include <wchar.h>
++int main() {
++int i = WCHAR_MIN; int j = WCHAR_MAX;
++; return 0; }
++EOF
++if { (eval echo configure:4775: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++  rm -rf conftest*
++  has_wchar_minmax=yes
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  has_wchar_minmax=no
++fi
++rm -f conftest*
++    echo "$ac_t""$has_wchar_minmax" 1>&6
++    
++            echo $ac_n "checking for WEOF""... $ac_c" 1>&6
++echo "configure:4788: checking for WEOF" >&5
++    cat > conftest.$ac_ext <<EOF
++#line 4790 "configure"
++#include "confdefs.h"
++
++      #include <wchar.h>
++      #include <stddef.h>
++int main() {
++wint_t i = WEOF;
++; return 0; }
++EOF
++if { (eval echo configure:4799: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++  rm -rf conftest*
++  has_weof=yes
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  has_weof=no
++fi
++rm -f conftest*
++    echo "$ac_t""$has_weof" 1>&6
++  
++        ac_wfuncs=yes
++    for ac_func in wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset
++do
++echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
++echo "configure:4815: checking for $ac_func" >&5
++if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4820 "configure"
++#include "confdefs.h"
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char $ac_func(); below.  */
++#include <assert.h>
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char $ac_func();
++
++int main() {
++
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
++choke me
++#else
++$ac_func();
++#endif
++
++; return 0; }
++EOF
++if { (eval echo configure:4843: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=yes"
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=no"
++fi
++rm -f conftest*
++fi
++
++if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_func 1
++EOF
++ 
++else
++  echo "$ac_t""no" 1>&6
++\
++    ac_wfuncs=no
++fi
++done
++
++  
++        for ac_func in btowc wctob fgetwc fgetws fputwc fputws fwide \
++    fwprintf fwscanf swprintf swscanf vfwprintf vfwscanf vswprintf vswscanf \
++    vwprintf vwscanf wprintf wscanf getwc getwchar mbsinit mbrlen mbrtowc \
++    mbsrtowcs wcsrtombs putwc putwchar ungetwc wcrtomb wcstod wcstof wcstol \
++    wcstoul wcscpy wcsncpy wcscat wcsncat wcscmp wcscoll wcsncmp wcsxfrm \
++    wcscspn wcsspn wcstok wcsftime wcschr wcspbrk wcsrchr wcsstr
++do
++echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
++echo "configure:4878: checking for $ac_func" >&5
++if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4883 "configure"
++#include "confdefs.h"
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char $ac_func(); below.  */
++#include <assert.h>
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char $ac_func();
++
++int main() {
++
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
++choke me
++#else
++$ac_func();
++#endif
++
++; return 0; }
++EOF
++if { (eval echo configure:4906: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=yes"
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=no"
++fi
++rm -f conftest*
++fi
++
++if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_func 1
++EOF
++ 
++else
++  echo "$ac_t""no" 1>&6
++\
++    ac_wfuncs=no
++fi
++done
++
++
++    echo $ac_n "checking for ISO C99 wchar_t support""... $ac_c" 1>&6
++echo "configure:4934: checking for ISO C99 wchar_t support" >&5
++    if test x"$has_weof" = xyes &&
++       test x"$has_wchar_minmax" = xyes &&
++       test x"$ac_wfuncs" = xyes; then
++      ac_isoC99_wchar_t=yes
++    else
++      ac_isoC99_wchar_t=no
++    fi
++    echo "$ac_t""$ac_isoC99_wchar_t" 1>&6
++  
++            ac_safe=`echo "iconv.h" | sed 'y%./+-%__p_%'`
++echo $ac_n "checking for iconv.h""... $ac_c" 1>&6
++echo "configure:4946: checking for iconv.h" >&5
++if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4951 "configure"
++#include "confdefs.h"
++#include <iconv.h>
++EOF
++ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
++{ (eval echo configure:4956: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
++ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
++if test -z "$ac_err"; then
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=yes"
++else
++  echo "$ac_err" >&5
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=no"
++fi
++rm -f conftest*
++fi
++if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++  ac_has_iconv_h=yes
++else
++  echo "$ac_t""no" 1>&6
++ac_has_iconv_h=no
++fi
++
++    ac_safe=`echo "langinfo.h" | sed 'y%./+-%__p_%'`
++echo $ac_n "checking for langinfo.h""... $ac_c" 1>&6
++echo "configure:4980: checking for langinfo.h" >&5
++if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 4985 "configure"
++#include "confdefs.h"
++#include <langinfo.h>
++EOF
++ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
++{ (eval echo configure:4990: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
++ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
++if test -z "$ac_err"; then
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=yes"
++else
++  echo "$ac_err" >&5
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_header_$ac_safe=no"
++fi
++rm -f conftest*
++fi
++if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++  ac_has_langinfo_h=yes
++else
++  echo "$ac_t""no" 1>&6
++ac_has_langinfo_h=no
++fi
++
++
++        echo $ac_n "checking for iconv in -liconv""... $ac_c" 1>&6
++echo "configure:5014: checking for iconv in -liconv" >&5
++ac_lib_var=`echo iconv'_'iconv | sed 'y%./+-%__p_%'`
++if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  ac_save_LIBS="$LIBS"
++LIBS="-liconv  $LIBS"
++cat > conftest.$ac_ext <<EOF
++#line 5022 "configure"
++#include "confdefs.h"
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char iconv();
++
++int main() {
++iconv()
++; return 0; }
++EOF
++if { (eval echo configure:5033: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++  rm -rf conftest*
++  eval "ac_cv_lib_$ac_lib_var=yes"
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_lib_$ac_lib_var=no"
++fi
++rm -f conftest*
++LIBS="$ac_save_LIBS"
++
++fi
++if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++  libiconv="-liconv"
++else
++  echo "$ac_t""no" 1>&6
++fi
++
++    ac_save_LIBS="$LIBS"
++    LIBS="$LIBS $libiconv"
++
++    for ac_func in iconv_open iconv_close iconv nl_langinfo
++do
++echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
++echo "configure:5059: checking for $ac_func" >&5
++if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
++  echo $ac_n "(cached) $ac_c" 1>&6
++else
++  cat > conftest.$ac_ext <<EOF
++#line 5064 "configure"
++#include "confdefs.h"
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char $ac_func(); below.  */
++#include <assert.h>
++/* Override any gcc2 internal prototype to avoid an error.  */
++/* We use char because int might match the return type of a gcc2
++    builtin and then its argument prototype would still apply.  */
++char $ac_func();
++
++int main() {
++
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
++choke me
++#else
++$ac_func();
++#endif
++
++; return 0; }
++EOF
++if { (eval echo configure:5087: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=yes"
++else
++  echo "configure: failed program was:" >&5
++  cat conftest.$ac_ext >&5
++  rm -rf conftest*
++  eval "ac_cv_func_$ac_func=no"
++fi
++rm -f conftest*
++fi
++
++if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
++  echo "$ac_t""yes" 1>&6
++    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
++  cat >> confdefs.h <<EOF
++#define $ac_tr_func 1
++EOF
++ \
++    ac_XPG2funcs=yes
++else
++  echo "$ac_t""no" 1>&6
++ac_XPG2funcs=no
++fi
++done
++
++  
++    LIBS="$ac_save_LIBS"
++
++    echo $ac_n "checking for XPG2 wchar_t support""... $ac_c" 1>&6
++echo "configure:5117: checking for XPG2 wchar_t support" >&5
++    if test x"$ac_has_iconv_h" = xyes &&
++       test x"$ac_has_langinfo_h" = xyes &&
++       test x"$ac_XPG2funcs" = xyes; then
++      ac_XPG2_wchar_t=yes
++    else
++      ac_XPG2_wchar_t=no
++    fi
++    echo "$ac_t""$ac_XPG2_wchar_t" 1>&6
++  
++            if test x"$ac_isoC99_wchar_t" = xyes &&
++       test x"$ac_XPG2_wchar_t" = xyes; then
++       cat >> confdefs.h <<\EOF
++#define _GLIBCPP_USE_WCHAR_T 1
++EOF
++
++       enable_wchar_t=yes 
++    fi
++  fi
++  echo $ac_n "checking for enabled wchar_t specializations""... $ac_c" 1>&6
++echo "configure:5137: checking for enabled wchar_t specializations" >&5
++  echo "$ac_t""$enable_wchar_t" 1>&6	
++  
++
++if test "$enable_wchar_t" = yes; then
++  GLIBCPP_TEST_WCHAR_T_TRUE=
++  GLIBCPP_TEST_WCHAR_T_FALSE='#'
++else
++  GLIBCPP_TEST_WCHAR_T_TRUE='#'
++  GLIBCPP_TEST_WCHAR_T_FALSE=
++fi	
++
++
++      cat >> confdefs.h <<\EOF
++#define HAVE_COPYSIGN 1
++EOF
++
++      cat >> confdefs.h <<\EOF
++#define HAVE_FINITE 1
++EOF
++
++      cat >> confdefs.h <<\EOF
++#define HAVE_FINITEF 1
++EOF
++
++      cat >> confdefs.h <<\EOF
++#define HAVE_ISINF 1
++EOF
++
++      cat >> confdefs.h <<\EOF
++#define HAVE_ISINFF 1
++EOF
++
++      cat >> confdefs.h <<\EOF
++#define HAVE_ISNAN 1
++EOF
++
++      cat >> confdefs.h <<\EOF
++#define HAVE_ISNANF 1
++EOF
++      ;;
+     *-linux*)
+       os_include_dir="os/gnu-linux"
+       for ac_hdr in nan.h ieeefp.h endian.h sys/isa_defs.h \
+diff -urN gcc-3.3.3/libstdc++-v3/configure.in gcc-3.3.3-new/libstdc++-v3/configure.in
+--- gcc-3.3.3/libstdc++-v3/configure.in	2004-01-12 10:19:22.000000000 -0600
++++ gcc-3.3.3-new/libstdc++-v3/configure.in	2004-02-16 23:13:45.000000000 -0600
+@@ -117,6 +117,36 @@
+   # GLIBCPP_CHECK_MATH_SUPPORT
+ 
+   case "$target" in
++    *-uclibc*)
++      os_include_dir="os/uclibc"
++      AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
++        machine/endian.h machine/param.h sys/machine.h sys/types.h \
++        fp.h locale.h float.h inttypes.h])
++      SECTION_FLAGS='-ffunction-sections -fdata-sections'
++      AC_SUBST(SECTION_FLAGS)
++      GLIBCPP_CHECK_LINKER_FEATURES
++      GLIBCPP_CHECK_COMPLEX_MATH_SUPPORT
++      GLIBCPP_CHECK_WCHAR_T_SUPPORT
++
++      AC_DEFINE(HAVE_COPYSIGN)
++      #AC_DEFINE(HAVE_COPYSIGNF)
++      AC_DEFINE(HAVE_FINITE)
++      AC_DEFINE(HAVE_FINITEF)
++      #AC_DEFINE(HAVE_FREXPF)
++      #AC_DEFINE(HAVE_HYPOTF)
++      AC_DEFINE(HAVE_ISINF)
++      AC_DEFINE(HAVE_ISINFF)
++      AC_DEFINE(HAVE_ISNAN)
++      AC_DEFINE(HAVE_ISNANF)
++      #AC_DEFINE(HAVE_SINCOS)
++      #AC_DEFINE(HAVE_SINCOSF)
++      #if test x"long_double_math_on_this_cpu" = x"yes"; then
++        #AC_DEFINE(HAVE_FINITEL)
++        #AC_DEFINE(HAVE_HYPOTL)
++        #AC_DEFINE(HAVE_ISINFL)
++        #AC_DEFINE(HAVE_ISNANL)
++      #fi
++      ;;
+     *-linux*)
+       os_include_dir="os/gnu-linux"
+       AC_CHECK_HEADERS([nan.h ieeefp.h endian.h sys/isa_defs.h \
+diff -urN gcc-3.3.3/libstdc++-v3/configure.target gcc-3.3.3-new/libstdc++-v3/configure.target
+--- gcc-3.3.3/libstdc++-v3/configure.target	2003-10-01 14:07:07.000000000 -0500
++++ gcc-3.3.3-new/libstdc++-v3/configure.target	2004-02-16 21:12:16.000000000 -0600
+@@ -133,6 +133,9 @@
+   freebsd*)
+     os_include_dir="os/bsd/freebsd"
+     ;;
++  linux-uclibc*)
++    os_include_dir="os/uclibc"
++    ;;
+   gnu* | linux*)
+     os_include_dir="os/gnu-linux"
+     ;;
+diff -urN gcc-3.3.3/libstdc++-v3/include/c_std/std_cstdlib.h gcc-3.3.3-new/libstdc++-v3/include/c_std/std_cstdlib.h
+--- gcc-3.3.3/libstdc++-v3/include/c_std/std_cstdlib.h	2003-04-18 05:08:05.000000000 -0500
++++ gcc-3.3.3-new/libstdc++-v3/include/c_std/std_cstdlib.h	2004-02-16 21:12:16.000000000 -0600
+@@ -101,9 +101,11 @@
+   using ::labs;
+   using ::ldiv;
+   using ::malloc;
++#if _GLIBCPP_USE_WCHAR_T
+   using ::mblen;
+   using ::mbstowcs;
+   using ::mbtowc;
++#endif
+   using ::qsort;
+   using ::rand;
+   using ::realloc;
+@@ -112,8 +114,10 @@
+   using ::strtol;
+   using ::strtoul;
+   using ::system;
++#if _GLIBCPP_USE_WCHAR_T
+   using ::wcstombs;
+   using ::wctomb;
++#endif
+ 
+   inline long 
+   abs(long __i) { return labs(__i); }
+diff -urN gcc-3.3.3/libstdc++-v3/include/c_std/std_cwchar.h gcc-3.3.3-new/libstdc++-v3/include/c_std/std_cwchar.h
+--- gcc-3.3.3/libstdc++-v3/include/c_std/std_cwchar.h	2003-04-18 05:08:05.000000000 -0500
++++ gcc-3.3.3-new/libstdc++-v3/include/c_std/std_cwchar.h	2004-02-16 21:12:16.000000000 -0600
+@@ -165,7 +165,9 @@
+   using ::wcscoll;
+   using ::wcscpy;
+   using ::wcscspn;
++#ifdef HAVE_WCSFTIME
+   using ::wcsftime;
++#endif
+   using ::wcslen;
+   using ::wcsncat;
+   using ::wcsncmp;
+diff -urN gcc-3.3.3/ltconfig gcc-3.3.3-new/ltconfig
+--- gcc-3.3.3/ltconfig	2003-02-19 20:10:02.000000000 -0600
++++ gcc-3.3.3-new/ltconfig	2004-02-16 21:12:16.000000000 -0600
+@@ -603,6 +603,7 @@
+ # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+ case $host_os in
+ linux-gnu*) ;;
++linux-uclibc*) ;;
+ linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+ esac
+ 
+@@ -1247,6 +1248,24 @@
+   dynamic_linker='GNU/Linux ld.so'
+   ;;
+ 
++linux-uclibc*)
++  version_type=linux
++  need_lib_prefix=no
++  need_version=no
++  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
++  soname_spec='${libname}${release}.so$major'
++  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
++  shlibpath_var=LD_LIBRARY_PATH
++  shlibpath_overrides_runpath=no
++  # This implies no fast_install, which is unacceptable.
++  # Some rework will be needed to allow for fast_install
++  # before this can be enabled.
++  # Note: copied from linux-gnu, and may not be appropriate.
++  hardcode_into_libs=yes
++  # Assume using the uClibc dynamic linker.
++  dynamic_linker="uClibc ld.so"
++  ;;
++
+ netbsd*)
+   need_lib_prefix=no
+   need_version=no
diff -Naur crosstool-0.28-rc5-orig/patches/gcc-3.3.3/uclibc-target-02.patch crosstool-0.28-rc5/patches/gcc-3.3.3/uclibc-target-02.patch
--- crosstool-0.28-rc5-orig/patches/gcc-3.3.3/uclibc-target-02.patch	1969-12-31 16:00:00.000000000 -0800
+++ crosstool-0.28-rc5/patches/gcc-3.3.3/uclibc-target-02.patch	2004-06-19 12:17:30.000000000 -0700
@@ -0,0 +1,60 @@
+Provided by the uClibc project.
+
+Adjunct patch for powerpc-*-linux-uclibc* targets.  Adds stuff necessary to
+support compiling for uClibc on PowerPC CPU architectures.  Written by
+Carl Miller <chaz@energoncube.net>, with updates made by the uClibc project
+(I'm guessing also Manuel Novoa III, but not sure) as it was integrated into
+their patch set.
+
+diff -urN gcc-3.3.3/gcc/config/rs6000/linux.h gcc-3.3.3-new/gcc/config/rs6000/linux.h
+--- gcc-3.3.3/gcc/config/rs6000/linux.h	2003-11-14 00:46:10.000000000 -0600
++++ gcc-3.3.3-new/gcc/config/rs6000/linux.h	2004-02-16 21:13:40.000000000 -0600
+@@ -64,7 +64,11 @@
+ #define LINK_START_DEFAULT_SPEC "%(link_start_linux)"
+ 
+ #undef	LINK_OS_DEFAULT_SPEC
++#ifdef USE_UCLIBC
++#define LINK_OS_DEFAULT_SPEC "%(link_os_linux_uclibc)"
++#else
+ #define LINK_OS_DEFAULT_SPEC "%(link_os_linux)"
++#endif
+ 
+ #undef TARGET_VERSION
+ #define TARGET_VERSION fprintf (stderr, " (PowerPC GNU/Linux)");
+diff -urN gcc-3.3.3/gcc/config/rs6000/sysv4.h gcc-3.3.3-new/gcc/config/rs6000/sysv4.h
+--- gcc-3.3.3/gcc/config/rs6000/sysv4.h	2003-10-28 13:55:41.000000000 -0600
++++ gcc-3.3.3-new/gcc/config/rs6000/sysv4.h	2004-02-16 21:13:40.000000000 -0600
+@@ -968,9 +968,11 @@
+ %{mcall-linux: %(link_os_linux) } \
+ %{mcall-gnu: %(link_os_gnu) } \
+ %{mcall-netbsd: %(link_os_netbsd) } \
++%{mcall-uclibc: %(link_os_linux_uclibc) } \
+ %{!mads: %{!myellowknife: %{!mmvme: %{!msim: %{!mwindiss: \
+          %{!mcall-freebsd: %{!mcall-linux: %{!mcall-gnu: \
+-         %{!mcall-netbsd: %(link_os_default) }}}}}}}}}"
++         %{!mcall-netbsd: %{!mcall-uclibc: \
++         %(link_os_default) }}}}}}}}}}"
+ 
+ #define LINK_OS_DEFAULT_SPEC ""
+ 
+@@ -1307,6 +1309,12 @@
+ 
+ #define LINK_OS_WINDISS_SPEC ""
+ 
++/* uClibc support for Linux. */
++
++#define LINK_OS_LINUX_UCLIBC_SPEC "-m elf32ppclinux %{!shared: %{!static: \
++  %{rdynamic:-export-dynamic} \
++  %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}}}"
++
+ /* Define any extra SPECS that the compiler needs to generate.  */
+ /* Override rs6000.h definition.  */
+ #undef	SUBTARGET_EXTRA_SPECS
+@@ -1372,6 +1380,7 @@
+   { "link_os_netbsd",		LINK_OS_NETBSD_SPEC },			\
+   { "link_os_vxworks",		LINK_OS_VXWORKS_SPEC },			\
+   { "link_os_windiss",		LINK_OS_WINDISS_SPEC },			\
++  { "link_os_linux_uclibc",	LINK_OS_LINUX_UCLIBC_SPEC },		\
+   { "link_os_default",		LINK_OS_DEFAULT_SPEC },			\
+   { "cc1_endian_big",		CC1_ENDIAN_BIG_SPEC },			\
+   { "cc1_endian_little",	CC1_ENDIAN_LITTLE_SPEC },		\
diff -Naur crosstool-0.28-rc5-orig/patches/gcc-3.3.3/uclibc-target-03.patch crosstool-0.28-rc5/patches/gcc-3.3.3/uclibc-target-03.patch
--- crosstool-0.28-rc5-orig/patches/gcc-3.3.3/uclibc-target-03.patch	1969-12-31 16:00:00.000000000 -0800
+++ crosstool-0.28-rc5/patches/gcc-3.3.3/uclibc-target-03.patch	2004-06-19 12:17:30.000000000 -0700
@@ -0,0 +1,3030 @@
+Provided by the uClibc project.
+
+This is an adjunct patch providing all the new files necessary for C++
+support (compiling gcc's libstdc++-v3 against uClibc), that weren't in
+the main uClibc target patch.  This was written by Manuel Novoa III, of
+the uClibc project.  Manuel has issued the following warning with the
+official uClibc project's distribution of this patch:
+
+Warning!  This patch is not finished.  The wide char time-related stuff
+is broken or non-functional.  But it serves as a starting point to get
+things building while I continue to work on the uClibc locale internals.
+
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/c++locale_internal.h gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/c++locale_internal.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/c++locale_internal.h	2004-01-09 07:55:02.000000000 -0600
+@@ -0,0 +1,63 @@
++// Prototypes for GLIBC thread locale __-prefixed functions -*- C++ -*-
++
++// Copyright (C) 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++// Written by Jakub Jelinek <jakub@redhat.com>
++
++#include <clocale>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning clean this up
++#endif
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++                                                  
++extern "C" __typeof(iswctype_l) __iswctype_l;
++extern "C" __typeof(nl_langinfo_l) __nl_langinfo_l;
++extern "C" __typeof(strcoll_l) __strcoll_l;
++extern "C" __typeof(strftime_l) __strftime_l;
++extern "C" __typeof(strtod_l) __strtod_l;
++extern "C" __typeof(strtof_l) __strtof_l;
++extern "C" __typeof(strtold_l) __strtold_l;
++extern "C" __typeof(strtol_l) __strtol_l;
++extern "C" __typeof(strtoll_l) __strtoll_l;
++extern "C" __typeof(strtoul_l) __strtoul_l;
++extern "C" __typeof(strtoull_l) __strtoull_l;
++extern "C" __typeof(strxfrm_l) __strxfrm_l;
++extern "C" __typeof(towlower_l) __towlower_l;
++extern "C" __typeof(towupper_l) __towupper_l;
++extern "C" __typeof(wcscoll_l) __wcscoll_l;
++extern "C" __typeof(wcsftime_l) __wcsftime_l;
++extern "C" __typeof(wcsxfrm_l) __wcsxfrm_l;
++extern "C" __typeof(wctype_l) __wctype_l;
++extern "C" __typeof(newlocale) __newlocale;
++extern "C" __typeof(freelocale) __freelocale;
++extern "C" __typeof(duplocale) __duplocale;
++extern "C" __typeof(uselocale) __uselocale;
++
++#endif // GLIBC 2.3 and later
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/c_locale.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/c_locale.cc
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/c_locale.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/c_locale.cc	2004-01-09 08:37:55.000000000 -0600
+@@ -0,0 +1,231 @@
++// Wrapper for underlying C-language localization -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.8  Standard locale categories.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <stdexcept>
++#include <langinfo.h>
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __strtol_l(S, E, B, L)      strtol((S), (E), (B))
++#define __strtoul_l(S, E, B, L)     strtoul((S), (E), (B))
++#define __strtoll_l(S, E, B, L)     strtoll((S), (E), (B))
++#define __strtoull_l(S, E, B, L)    strtoull((S), (E), (B))
++#define __strtof_l(S, E, L)         strtof((S), (E))
++#define __strtod_l(S, E, L)         strtod((S), (E))
++#define __strtold_l(S, E, L)        strtold((S), (E))
++#endif
++
++namespace std 
++{
++  template<>
++    void
++    __convert_to_v(const char* __s, long& __v, ios_base::iostate& __err, 
++		   const __c_locale& __cloc, int __base)
++    {
++      if (!(__err & ios_base::failbit))
++      {
++	char* __sanity;
++	errno = 0;
++	long __l = __strtol_l(__s, &__sanity, __base, __cloc);
++	if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
++	  __v = __l;
++	else
++	  __err |= ios_base::failbit;
++      }
++    }
++
++  template<>
++    void
++    __convert_to_v(const char* __s, unsigned long& __v, 
++		   ios_base::iostate& __err, const __c_locale& __cloc, 
++		   int __base)
++    {
++      if (!(__err & ios_base::failbit))
++	{
++	  char* __sanity;
++	  errno = 0;
++	  unsigned long __ul = __strtoul_l(__s, &__sanity, __base, __cloc);
++          if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
++	    __v = __ul;
++	  else
++	    __err |= ios_base::failbit;
++	}
++    }
++
++#ifdef _GLIBCPP_USE_LONG_LONG
++  template<>
++    void
++    __convert_to_v(const char* __s, long long& __v, ios_base::iostate& __err, 
++		   const __c_locale& __cloc, int __base)
++    {
++      if (!(__err & ios_base::failbit))
++	{
++	  char* __sanity;
++	  errno = 0;
++	  long long __ll = __strtoll_l(__s, &__sanity, __base, __cloc);
++          if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
++	    __v = __ll;
++	  else
++	    __err |= ios_base::failbit;
++	}
++    }
++
++  template<>
++    void
++    __convert_to_v(const char* __s, unsigned long long& __v, 
++		   ios_base::iostate& __err, const __c_locale& __cloc, 
++		   int __base)
++    {
++      if (!(__err & ios_base::failbit))
++	{      
++	  char* __sanity;
++	  errno = 0;
++	  unsigned long long __ull = __strtoull_l(__s, &__sanity, __base, 
++						  __cloc);
++          if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
++	    __v = __ull;
++	  else
++	    __err |= ios_base::failbit;
++	}  
++    }
++#endif
++
++  template<>
++    void
++    __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err, 
++		   const __c_locale& __cloc, int)
++    {
++      if (!(__err & ios_base::failbit))
++	{
++	  char* __sanity;
++	  errno = 0;
++	  float __f = __strtof_l(__s, &__sanity, __cloc);
++          if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
++	    __v = __f;
++	  else
++	    __err |= ios_base::failbit;
++	}
++    }
++
++  template<>
++    void
++    __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err, 
++		   const __c_locale& __cloc, int)
++    {
++      if (!(__err & ios_base::failbit))
++	{
++	  char* __sanity;
++	  errno = 0;
++	  double __d = __strtod_l(__s, &__sanity, __cloc);
++          if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
++	    __v = __d;
++	  else
++	    __err |= ios_base::failbit;
++	}
++    }
++
++  template<>
++    void
++    __convert_to_v(const char* __s, long double& __v, ios_base::iostate& __err,
++		   const __c_locale& __cloc, int)
++    {
++      if (!(__err & ios_base::failbit))
++	{
++	  char* __sanity;
++	  errno = 0;
++	  long double __ld = __strtold_l(__s, &__sanity, __cloc);
++          if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
++	    __v = __ld;
++	  else
++	    __err |= ios_base::failbit;
++	}
++    }
++
++  void
++  locale::facet::_S_create_c_locale(__c_locale& __cloc, const char* __s, 
++				    __c_locale __old)
++  {
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __cloc = __newlocale(1 << LC_ALL, __s, __old);
++    if (!__cloc)
++      {
++	// This named locale is not supported by the underlying OS.
++	__throw_runtime_error("attempt to create locale from unknown name");
++      }
++#else
++    __cloc = NULL;
++#endif
++  }
++  
++  void
++  locale::facet::_S_destroy_c_locale(__c_locale& __cloc)
++  {
++#ifdef __UCLIBC_HAS_XLOCALE__
++    if (_S_c_locale != __cloc)
++      __freelocale(__cloc); 
++#else
++    __cloc = NULL;
++#endif
++  }
++
++  __c_locale
++  locale::facet::_S_clone_c_locale(__c_locale& __cloc)
++#ifdef __UCLIBC_HAS_XLOCALE__
++  { return __duplocale(__cloc); }
++#else
++  { return __c_locale(); }
++#endif
++
++  const char* locale::_S_categories[_S_categories_size 
++				    + _S_extra_categories_size] =
++    {
++      "LC_CTYPE", 
++      "LC_NUMERIC",
++      "LC_TIME", 
++      "LC_COLLATE", 
++      "LC_MONETARY",
++      "LC_MESSAGES"
++#if _GLIBCPP_NUM_CATEGORIES != 0
++      , 
++      "LC_PAPER", 
++      "LC_NAME", 
++      "LC_ADDRESS",
++      "LC_TELEPHONE", 
++      "LC_MEASUREMENT", 
++      "LC_IDENTIFICATION" 
++#endif
++    };
++}  // namespace std
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/c_locale.h gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/c_locale.h
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/c_locale.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/c_locale.h	2004-01-09 07:51:06.000000000 -0600
+@@ -0,0 +1,118 @@
++// Wrapper for underlying C-language localization -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.8  Standard locale categories.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#ifndef _CPP_BITS_C_LOCALE_H
++#define _CPP_BITS_C_LOCALE_H 1
++
++#pragma GCC system_header
++
++#include <clocale>
++#include <langinfo.h>		// For codecvt
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC_HAS_LOCALE__
++#include <iconv.h>		// For codecvt using iconv, iconv_t
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++#include <libintl.h> 		// For messages
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning what is _GLIBCPP_C_LOCALE_GNU for
++#endif
++#define _GLIBCPP_C_LOCALE_GNU 1
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix categories
++#endif
++// #define _GLIBCPP_NUM_CATEGORIES 6
++#define _GLIBCPP_NUM_CATEGORIES 0
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++namespace __gnu_cxx
++{
++  extern "C" __typeof(uselocale) __uselocale;
++}
++#endif
++
++namespace std
++{
++#ifdef __UCLIBC_HAS_XLOCALE__
++  typedef __locale_t		__c_locale;
++#else
++  typedef int*			__c_locale;
++#endif
++
++  // Convert numeric value of type _Tv to string and return length of
++  // string.  If snprintf is available use it, otherwise fall back to
++  // the unsafe sprintf which, in general, can be dangerous and should
++  // be avoided.
++  template<typename _Tv>
++    int
++    __convert_from_v(char* __out, const int __size, const char* __fmt,
++#ifdef __UCLIBC_HAS_XLOCALE__
++		     _Tv __v, const __c_locale& __cloc, int __prec = -1)
++    {
++      __c_locale __old = __gnu_cxx::__uselocale(__cloc);
++#else
++		     _Tv __v, const __c_locale&, int __prec = -1)
++    {
++# ifdef __UCLIBC_HAS_LOCALE__
++      char* __old = setlocale(LC_ALL, NULL);
++      char* __sav = static_cast<char*>(malloc(strlen(__old) + 1));
++      if (__sav)
++        strcpy(__sav, __old);
++      setlocale(LC_ALL, "C");
++# endif
++#endif
++
++      int __ret;
++      if (__prec >= 0)
++        __ret = snprintf(__out, __size, __fmt, __prec, __v);
++      else
++        __ret = snprintf(__out, __size, __fmt, __v);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++      __gnu_cxx::__uselocale(__old);
++#elif defined __UCLIBC_HAS_LOCALE__
++      setlocale(LC_ALL, __sav);
++      free(__sav);
++#endif
++      return __ret;
++    }
++}
++
++#endif
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/codecvt_members.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/codecvt_members.cc
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/codecvt_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/codecvt_members.cc	2004-01-09 04:04:34.000000000 -0600
+@@ -0,0 +1,113 @@
++// std::codecvt implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.5 - Template class codecvt
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++namespace std
++{
++  // Specializations.
++#ifdef _GLIBCPP_USE_WCHAR_T
++  codecvt_base::result
++  codecvt<wchar_t, char, mbstate_t>::
++  do_out(state_type& __state, const intern_type* __from, 
++	 const intern_type* __from_end, const intern_type*& __from_next,
++	 extern_type* __to, extern_type* __to_end,
++	 extern_type*& __to_next) const
++  {
++    result __ret = error;
++    size_t __len = min(__from_end - __from, __to_end - __to);
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_S_c_locale);
++#endif
++    size_t __conv = wcsrtombs(__to, &__from, __len, &__state);
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++
++    if (__conv == __len)
++      {
++	__from_next = __from;
++	__to_next = __to + __conv;
++	__ret = ok;
++      }
++    else if (__conv > 0 && __conv < __len)
++      {
++	__from_next = __from;
++	__to_next = __to + __conv;
++	__ret = partial;
++      }
++    else
++      __ret = error;
++	
++    return __ret; 
++  }
++  
++  codecvt_base::result
++  codecvt<wchar_t, char, mbstate_t>::
++  do_in(state_type& __state, const extern_type* __from, 
++	const extern_type* __from_end, const extern_type*& __from_next,
++	intern_type* __to, intern_type* __to_end,
++	intern_type*& __to_next) const
++  {
++    result __ret = error;
++    size_t __len = min(__from_end - __from, __to_end - __to);
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_S_c_locale);
++#endif
++    size_t __conv = mbsrtowcs(__to, &__from, __len, &__state);
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++
++    if (__conv == __len)
++      {
++	__from_next = __from;
++	__to_next = __to + __conv;
++	__ret = ok;
++      }
++    else if (__conv > 0 && __conv < __len)
++      {
++	__from_next = __from;
++	__to_next = __to + __conv;
++	__ret = partial;
++      }
++    else
++      __ret = error;
++	
++    return __ret; 
++  }
++#endif
++}
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/codecvt_specializations.h gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/codecvt_specializations.h
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/codecvt_specializations.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/codecvt_specializations.h	2004-01-09 01:53:51.000000000 -0600
+@@ -0,0 +1,461 @@
++// Locale support (codecvt) -*- C++ -*-
++
++// Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.5 Template class codecvt
++//
++
++// Warning: this file is not meant for user inclusion.  Use <locale>.
++
++// Written by Benjamin Kosnik <bkoz@cygnus.com>
++
++  // XXX
++  // Define this here to codecvt.cc can have _S_max_size definition.
++#define _GLIBCPP_USE___ENC_TRAITS 1
++
++  // Extension to use icov for dealing with character encodings,
++  // including conversions and comparisons between various character
++  // sets.  This object encapsulates data that may need to be shared between
++  // char_traits, codecvt and ctype.
++  class __enc_traits
++  {
++  public:
++    // Types: 
++    // NB: A conversion descriptor subsumes and enhances the
++    // functionality of a simple state type such as mbstate_t.
++    typedef iconv_t	__desc_type;
++    
++  protected:
++    // Data Members:
++    // Max size of charset encoding name
++    static const int 	_S_max_size = 32;
++    // Name of internal character set encoding.
++    char	       	_M_int_enc[_S_max_size];
++    // Name of external character set encoding.
++    char  	       	_M_ext_enc[_S_max_size];
++
++    // Conversion descriptor between external encoding to internal encoding.
++    __desc_type		_M_in_desc;
++    // Conversion descriptor between internal encoding to external encoding.
++    __desc_type		_M_out_desc;
++
++    // Details the byte-order marker for the external encoding, if necessary.
++    int			_M_ext_bom;
++
++    // Details the byte-order marker for the internal encoding, if necessary.
++    int			_M_int_bom;
++
++  public:
++    explicit __enc_traits() 
++    : _M_in_desc(0), _M_out_desc(0), _M_ext_bom(0), _M_int_bom(0) 
++    {
++      memset(_M_int_enc, 0, _S_max_size);
++      memset(_M_ext_enc, 0, _S_max_size);
++    }
++
++    explicit __enc_traits(const char* __int, const char* __ext, 
++			  int __ibom = 0, int __ebom = 0)
++    : _M_in_desc(0), _M_out_desc(0), _M_ext_bom(0), _M_int_bom(0)
++    {
++      strncpy(_M_int_enc, __int, _S_max_size);
++      strncpy(_M_ext_enc, __ext, _S_max_size);
++    }
++
++    // 21.1.2 traits typedefs
++    // p4
++    // typedef STATE_T state_type
++    // requires: state_type shall meet the requirements of
++    // CopyConstructible types (20.1.3)
++    __enc_traits(const __enc_traits& __obj): _M_in_desc(0), _M_out_desc(0)
++    {
++      strncpy(_M_int_enc, __obj._M_int_enc, _S_max_size);
++      strncpy(_M_ext_enc, __obj._M_ext_enc, _S_max_size);
++      _M_ext_bom = __obj._M_ext_bom;
++      _M_int_bom = __obj._M_int_bom;
++    }
++
++    // Need assignment operator as well.
++    __enc_traits&
++    operator=(const __enc_traits& __obj)
++    {
++      strncpy(_M_int_enc, __obj._M_int_enc, _S_max_size);
++      strncpy(_M_ext_enc, __obj._M_ext_enc, _S_max_size);
++      _M_in_desc = 0;
++      _M_out_desc = 0;
++      _M_ext_bom = __obj._M_ext_bom;
++      _M_int_bom = __obj._M_int_bom;
++      return *this;
++    }
++
++    ~__enc_traits()
++    {
++      __desc_type __err = reinterpret_cast<iconv_t>(-1);
++      if (_M_in_desc && _M_in_desc != __err) 
++	iconv_close(_M_in_desc);
++      if (_M_out_desc && _M_out_desc != __err) 
++	iconv_close(_M_out_desc);
++    } 
++
++    void
++    _M_init()
++    {
++      const __desc_type __err = reinterpret_cast<iconv_t>(-1);
++      if (!_M_in_desc)
++	{
++	  _M_in_desc = iconv_open(_M_int_enc, _M_ext_enc);
++	  if (_M_in_desc == __err)
++	    __throw_runtime_error("creating iconv input descriptor failed.");
++	}
++      if (!_M_out_desc)
++	{
++	  _M_out_desc = iconv_open(_M_ext_enc, _M_int_enc);
++	  if (_M_out_desc == __err)
++	    __throw_runtime_error("creating iconv output descriptor failed.");
++	}
++    }
++
++    bool
++    _M_good()
++    { 
++      const __desc_type __err = reinterpret_cast<iconv_t>(-1);
++      bool __test = _M_in_desc && _M_in_desc != __err; 
++      __test &=  _M_out_desc && _M_out_desc != __err;
++      return __test;
++    }
++
++    const __desc_type* 
++    _M_get_in_descriptor()
++    { return &_M_in_desc; }
++
++    const __desc_type* 
++    _M_get_out_descriptor()
++    { return &_M_out_desc; }
++
++    int 
++    _M_get_external_bom()
++    { return _M_ext_bom; }
++
++    int 
++    _M_get_internal_bom()
++    { return _M_int_bom; }
++
++    const char* 
++    _M_get_internal_enc()
++    { return _M_int_enc; }
++
++    const char* 
++    _M_get_external_enc()
++    { return _M_ext_enc; }
++  };
++
++  // Partial specialization
++  // This specialization takes advantage of iconv to provide code
++  // conversions between a large number of character encodings.
++  template<typename _InternT, typename _ExternT>
++    class codecvt<_InternT, _ExternT, __enc_traits>
++    : public __codecvt_abstract_base<_InternT, _ExternT, __enc_traits>
++    {
++    public:      
++      // Types:
++      typedef codecvt_base::result			result;
++      typedef _InternT 					intern_type;
++      typedef _ExternT 					extern_type;
++      typedef __enc_traits 				state_type;
++      typedef __enc_traits::__desc_type 		__desc_type;
++      typedef __enc_traits				__enc_type;
++
++      // Data Members:
++      static locale::id 		id;
++
++      explicit 
++      codecvt(size_t __refs = 0)
++      : __codecvt_abstract_base<intern_type, extern_type, state_type>(__refs)
++      { }
++
++      explicit 
++      codecvt(__enc_type* __enc, size_t __refs = 0)
++      : __codecvt_abstract_base<intern_type, extern_type, state_type>(__refs)
++      { }
++
++    protected:
++      virtual 
++      ~codecvt() { }
++
++      virtual result
++      do_out(state_type& __state, const intern_type* __from, 
++	     const intern_type* __from_end, const intern_type*& __from_next,
++	     extern_type* __to, extern_type* __to_end,
++	     extern_type*& __to_next) const;
++
++      virtual result
++      do_unshift(state_type& __state, extern_type* __to, 
++		 extern_type* __to_end, extern_type*& __to_next) const;
++
++      virtual result
++      do_in(state_type& __state, const extern_type* __from, 
++	    const extern_type* __from_end, const extern_type*& __from_next,
++	    intern_type* __to, intern_type* __to_end, 
++	    intern_type*& __to_next) const;
++
++      virtual int 
++      do_encoding() const throw();
++
++      virtual bool 
++      do_always_noconv() const throw();
++
++      virtual int 
++      do_length(const state_type&, const extern_type* __from, 
++		const extern_type* __end, size_t __max) const;
++
++      virtual int 
++      do_max_length() const throw();
++    };
++
++  template<typename _InternT, typename _ExternT>
++    locale::id 
++    codecvt<_InternT, _ExternT, __enc_traits>::id;
++
++  // This adaptor works around the signature problems of the second
++  // argument to iconv():  SUSv2 and others use 'const char**', but glibc 2.2
++  // uses 'char**', which matches the POSIX 1003.1-2001 standard.
++  // Using this adaptor, g++ will do the work for us.
++  template<typename _T>
++    inline size_t
++    __iconv_adaptor(size_t(*__func)(iconv_t, _T, size_t*, char**, size_t*),
++                    iconv_t __cd, char** __inbuf, size_t* __inbytes,
++                    char** __outbuf, size_t* __outbytes)
++    { return __func(__cd, (_T)__inbuf, __inbytes, __outbuf, __outbytes); }
++
++  template<typename _InternT, typename _ExternT>
++    codecvt_base::result
++    codecvt<_InternT, _ExternT, __enc_traits>::
++    do_out(state_type& __state, const intern_type* __from, 
++	   const intern_type* __from_end, const intern_type*& __from_next,
++	   extern_type* __to, extern_type* __to_end,
++	   extern_type*& __to_next) const
++    {
++      result __ret = codecvt_base::error;
++      if (__state._M_good())
++	{
++	  typedef state_type::__desc_type	__desc_type;
++	  const __desc_type* __desc = __state._M_get_out_descriptor();
++	  const size_t __fmultiple = sizeof(intern_type);
++	  size_t __fbytes = __fmultiple * (__from_end - __from);
++	  const size_t __tmultiple = sizeof(extern_type);
++	  size_t __tbytes = __tmultiple * (__to_end - __to); 
++	  
++	  // Argument list for iconv specifies a byte sequence. Thus,
++	  // all to/from arrays must be brutally casted to char*.
++	  char* __cto = reinterpret_cast<char*>(__to);
++	  char* __cfrom;
++	  size_t __conv;
++
++	  // Some encodings need a byte order marker as the first item
++	  // in the byte stream, to designate endian-ness. The default
++	  // value for the byte order marker is NULL, so if this is
++	  // the case, it's not necessary and we can just go on our
++	  // merry way.
++	  int __int_bom = __state._M_get_internal_bom();
++	  if (__int_bom)
++	    {	  
++	      size_t __size = __from_end - __from;
++	      intern_type* __cfixed = static_cast<intern_type*>(__builtin_alloca(sizeof(intern_type) * (__size + 1)));
++	      __cfixed[0] = static_cast<intern_type>(__int_bom);
++	      char_traits<intern_type>::copy(__cfixed + 1, __from, __size);
++	      __cfrom = reinterpret_cast<char*>(__cfixed);
++	      __conv = __iconv_adaptor(iconv, *__desc, &__cfrom,
++                                        &__fbytes, &__cto, &__tbytes); 
++	    }
++	  else
++	    {
++	      intern_type* __cfixed = const_cast<intern_type*>(__from);
++	      __cfrom = reinterpret_cast<char*>(__cfixed);
++	      __conv = __iconv_adaptor(iconv, *__desc, &__cfrom, &__fbytes, 
++				       &__cto, &__tbytes); 
++	    }
++
++	  if (__conv != size_t(-1))
++	    {
++	      __from_next = reinterpret_cast<const intern_type*>(__cfrom);
++	      __to_next = reinterpret_cast<extern_type*>(__cto);
++	      __ret = codecvt_base::ok;
++	    }
++	  else 
++	    {
++	      if (__fbytes < __fmultiple * (__from_end - __from))
++		{
++		  __from_next = reinterpret_cast<const intern_type*>(__cfrom);
++		  __to_next = reinterpret_cast<extern_type*>(__cto);
++		  __ret = codecvt_base::partial;
++		}
++	      else
++		__ret = codecvt_base::error;
++	    }
++	}
++      return __ret; 
++    }
++
++  template<typename _InternT, typename _ExternT>
++    codecvt_base::result
++    codecvt<_InternT, _ExternT, __enc_traits>::
++    do_unshift(state_type& __state, extern_type* __to, 
++	       extern_type* __to_end, extern_type*& __to_next) const
++    {
++      result __ret = codecvt_base::error;
++      if (__state._M_good())
++	{
++	  typedef state_type::__desc_type	__desc_type;
++	  const __desc_type* __desc = __state._M_get_in_descriptor();
++	  const size_t __tmultiple = sizeof(intern_type);
++	  size_t __tlen = __tmultiple * (__to_end - __to); 
++	  
++	  // Argument list for iconv specifies a byte sequence. Thus,
++	  // all to/from arrays must be brutally casted to char*.
++	  char* __cto = reinterpret_cast<char*>(__to);
++	  size_t __conv = __iconv_adaptor(iconv,*__desc, NULL, NULL,
++                                          &__cto, &__tlen); 
++	  
++	  if (__conv != size_t(-1))
++	    {
++	      __to_next = reinterpret_cast<extern_type*>(__cto);
++	      if (__tlen == __tmultiple * (__to_end - __to))
++		__ret = codecvt_base::noconv;
++	      else if (__tlen == 0)
++		__ret = codecvt_base::ok;
++	      else
++		__ret = codecvt_base::partial;
++	    }
++	  else 
++	    __ret = codecvt_base::error;
++	}
++      return __ret; 
++    }
++   
++  template<typename _InternT, typename _ExternT>
++    codecvt_base::result
++    codecvt<_InternT, _ExternT, __enc_traits>::
++    do_in(state_type& __state, const extern_type* __from, 
++	  const extern_type* __from_end, const extern_type*& __from_next,
++	  intern_type* __to, intern_type* __to_end, 
++	  intern_type*& __to_next) const
++    { 
++      result __ret = codecvt_base::error;
++      if (__state._M_good())
++	{
++	  typedef state_type::__desc_type	__desc_type;
++	  const __desc_type* __desc = __state._M_get_in_descriptor();
++	  const size_t __fmultiple = sizeof(extern_type);
++	  size_t __flen = __fmultiple * (__from_end - __from);
++	  const size_t __tmultiple = sizeof(intern_type);
++	  size_t __tlen = __tmultiple * (__to_end - __to); 
++	  
++	  // Argument list for iconv specifies a byte sequence. Thus,
++	  // all to/from arrays must be brutally casted to char*.
++	  char* __cto = reinterpret_cast<char*>(__to);
++	  char* __cfrom;
++	  size_t __conv;
++
++	  // Some encodings need a byte order marker as the first item
++	  // in the byte stream, to designate endian-ness. The default
++	  // value for the byte order marker is NULL, so if this is
++	  // the case, it's not necessary and we can just go on our
++	  // merry way.
++	  int __ext_bom = __state._M_get_external_bom();
++	  if (__ext_bom)
++	    {	  
++	      size_t __size = __from_end - __from;
++	      extern_type* __cfixed =  static_cast<extern_type*>(__builtin_alloca(sizeof(extern_type) * (__size + 1)));
++	      __cfixed[0] = static_cast<extern_type>(__ext_bom);
++	      char_traits<extern_type>::copy(__cfixed + 1, __from, __size);
++	      __cfrom = reinterpret_cast<char*>(__cfixed);
++	      __conv = __iconv_adaptor(iconv, *__desc, &__cfrom,
++                                       &__flen, &__cto, &__tlen); 
++	    }
++	  else
++	    {
++	      extern_type* __cfixed = const_cast<extern_type*>(__from);
++	      __cfrom = reinterpret_cast<char*>(__cfixed);
++	      __conv = __iconv_adaptor(iconv, *__desc, &__cfrom,
++                                       &__flen, &__cto, &__tlen); 
++	    }
++
++	  
++	  if (__conv != size_t(-1))
++	    {
++	      __from_next = reinterpret_cast<const extern_type*>(__cfrom);
++	      __to_next = reinterpret_cast<intern_type*>(__cto);
++	      __ret = codecvt_base::ok;
++	    }
++	  else 
++	    {
++	      if (__flen < static_cast<size_t>(__from_end - __from))
++		{
++		  __from_next = reinterpret_cast<const extern_type*>(__cfrom);
++		  __to_next = reinterpret_cast<intern_type*>(__cto);
++		  __ret = codecvt_base::partial;
++		}
++	      else
++		__ret = codecvt_base::error;
++	    }
++	}
++      return __ret; 
++    }
++  
++  template<typename _InternT, typename _ExternT>
++    int 
++    codecvt<_InternT, _ExternT, __enc_traits>::
++    do_encoding() const throw()
++    {
++      int __ret = 0;
++      if (sizeof(_ExternT) <= sizeof(_InternT))
++	__ret = sizeof(_InternT)/sizeof(_ExternT);
++      return __ret; 
++    }
++  
++  template<typename _InternT, typename _ExternT>
++    bool 
++    codecvt<_InternT, _ExternT, __enc_traits>::
++    do_always_noconv() const throw()
++    { return false; }
++  
++  template<typename _InternT, typename _ExternT>
++    int 
++    codecvt<_InternT, _ExternT, __enc_traits>::
++    do_length(const state_type&, const extern_type* __from, 
++	      const extern_type* __end, size_t __max) const
++    { return min(__max, static_cast<size_t>(__end - __from)); }
++
++#ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS
++// 74.  Garbled text for codecvt::do_max_length
++  template<typename _InternT, typename _ExternT>
++    int 
++    codecvt<_InternT, _ExternT, __enc_traits>::
++    do_max_length() const throw()
++    { return 1; }
++#endif
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/collate_members.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/collate_members.cc
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/collate_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/collate_members.cc	2004-01-09 08:06:24.000000000 -0600
+@@ -0,0 +1,80 @@
++// std::collate implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.4.1.2  collate virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __strcoll_l(S1, S2, L)      strcoll((S1), (S2))
++#define __strxfrm_l(S1, S2, N, L)   strxfrm((S1), (S2), (N))
++#define __wcscoll_l(S1, S2, L)      wcscoll((S1), (S2))
++#define __wcsxfrm_l(S1, S2, N, L)   wcsxfrm((S1), (S2), (N))
++#endif
++
++namespace std
++{
++  // These are basically extensions to char_traits, and perhaps should
++  // be put there instead of here.
++  template<>
++    int 
++    collate<char>::_M_compare(const char* __one, const char* __two) const
++    { 
++      int __cmp = __strcoll_l(__one, __two, _M_c_locale_collate);
++      return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
++    }
++  
++  template<>
++    size_t
++    collate<char>::_M_transform(char* __to, const char* __from, 
++				size_t __n) const 
++    { return __strxfrm_l(__to, __from, __n, _M_c_locale_collate); }
++
++#ifdef _GLIBCPP_USE_WCHAR_T
++  template<>
++    int 
++    collate<wchar_t>::_M_compare(const wchar_t* __one, 
++				 const wchar_t* __two) const
++    {
++      int __cmp = __wcscoll_l(__one, __two, _M_c_locale_collate);
++      return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
++    }
++  
++  template<>
++    size_t
++    collate<wchar_t>::_M_transform(wchar_t* __to, const wchar_t* __from,
++				   size_t __n) const
++    { return __wcsxfrm_l(__to, __from, __n, _M_c_locale_collate); }
++#endif
++}
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/ctype_members.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/ctype_members.cc
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/ctype_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/ctype_members.cc	2004-01-09 08:15:41.000000000 -0600
+@@ -0,0 +1,274 @@
++// std::ctype implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.1.2  ctype virtual functions.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __wctype_l(S, L)           wctype((S))
++#define __towupper_l(C, L)         towupper((C))
++#define __towlower_l(C, L)         towlower((C))
++#define __iswctype_l(C, M, L)      iswctype((C), (M))
++#endif
++
++namespace std
++{
++  // NB: The other ctype<char> specializations are in src/locale.cc and
++  // various /config/os/* files.
++  template<>
++    ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
++    : ctype<char>(0, false, __refs) 
++    { 	
++      _S_destroy_c_locale(_M_c_locale_ctype);
++      _S_create_c_locale(_M_c_locale_ctype, __s); 
++#ifdef __UCLIBC_HAS_XLOCALE__
++      _M_toupper = _M_c_locale_ctype->__ctype_toupper;
++      _M_tolower = _M_c_locale_ctype->__ctype_tolower;
++      _M_table = _M_c_locale_ctype->__ctype_b;
++#endif
++    }
++
++#ifdef _GLIBCPP_USE_WCHAR_T  
++  ctype<wchar_t>::__wmask_type
++  ctype<wchar_t>::_M_convert_to_wmask(const mask __m) const
++  {
++    __wmask_type __ret;
++    switch (__m)
++      {
++      case space:
++	__ret = __wctype_l("space", _M_c_locale_ctype);
++	break;
++      case print:
++	__ret = __wctype_l("print", _M_c_locale_ctype);
++	break;
++      case cntrl:
++	__ret = __wctype_l("cntrl", _M_c_locale_ctype);
++	break;
++      case upper:
++	__ret = __wctype_l("upper", _M_c_locale_ctype);
++	break;
++      case lower:
++	__ret = __wctype_l("lower", _M_c_locale_ctype);
++	break;
++      case alpha:
++	__ret = __wctype_l("alpha", _M_c_locale_ctype);
++	break;
++      case digit:
++	__ret = __wctype_l("digit", _M_c_locale_ctype);
++	break;
++      case punct:
++	__ret = __wctype_l("punct", _M_c_locale_ctype);
++	break;
++      case xdigit:
++	__ret = __wctype_l("xdigit", _M_c_locale_ctype);
++	break;
++      case alnum:
++	__ret = __wctype_l("alnum", _M_c_locale_ctype);
++	break;
++      case graph:
++	__ret = __wctype_l("graph", _M_c_locale_ctype);
++	break;
++      default:
++	__ret = 0;
++      }
++    return __ret;
++  };
++  
++  wchar_t
++  ctype<wchar_t>::do_toupper(wchar_t __c) const
++  { return __towupper_l(__c, _M_c_locale_ctype); }
++
++  const wchar_t*
++  ctype<wchar_t>::do_toupper(wchar_t* __lo, const wchar_t* __hi) const
++  {
++    while (__lo < __hi)
++      {
++        *__lo = __towupper_l(*__lo, _M_c_locale_ctype);
++        ++__lo;
++      }
++    return __hi;
++  }
++  
++  wchar_t
++  ctype<wchar_t>::do_tolower(wchar_t __c) const
++  { return __towlower_l(__c, _M_c_locale_ctype); }
++  
++  const wchar_t*
++  ctype<wchar_t>::do_tolower(wchar_t* __lo, const wchar_t* __hi) const
++  {
++    while (__lo < __hi)
++      {
++        *__lo = __towlower_l(*__lo, _M_c_locale_ctype);
++        ++__lo;
++      }
++    return __hi;
++  }
++
++  bool
++  ctype<wchar_t>::
++  do_is(mask __m, wchar_t __c) const
++  { 
++    // Highest bitmask in ctype_base == 10, but extra in "C"
++    // library for blank.
++    bool __ret = false;
++    const size_t __bitmasksize = 11; 
++    for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
++      {
++	const mask __bit = static_cast<mask>(_ISbit(__bitcur));
++	if (__m & __bit)
++	  __ret |= __iswctype_l(__c, _M_convert_to_wmask(__bit), 
++				_M_c_locale_ctype); 
++      }
++    return __ret;    
++  }
++  
++  const wchar_t* 
++  ctype<wchar_t>::
++  do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __vec) const
++  {
++    for (;__lo < __hi; ++__vec, ++__lo)
++      {
++	// Highest bitmask in ctype_base == 10, but extra in "C"
++	// library for blank.
++	const size_t __bitmasksize = 11; 
++	mask __m = 0;
++	for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
++	  { 
++	    const mask __bit = static_cast<mask>(_ISbit(__bitcur));
++	    if (__iswctype_l(*__lo, _M_convert_to_wmask(__bit), 
++			     _M_c_locale_ctype))
++	      __m |= __bit;
++	  }
++	*__vec = __m;
++      }
++    return __hi;
++  }
++  
++  const wchar_t* 
++  ctype<wchar_t>::
++  do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const
++  {
++    while (__lo < __hi && !this->do_is(__m, *__lo))
++      ++__lo;
++    return __lo;
++  }
++
++  const wchar_t*
++  ctype<wchar_t>::
++  do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
++  {
++    while (__lo < __hi && this->do_is(__m, *__lo) != 0)
++      ++__lo;
++    return __lo;
++  }
++
++  wchar_t
++  ctype<wchar_t>::
++  do_widen(char __c) const
++  {
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++    wchar_t __ret = btowc(__c);
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++    return __ret;
++  }
++
++  const char* 
++  ctype<wchar_t>::
++  do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const
++  {
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++    mbstate_t __state;
++    memset(static_cast<void*>(&__state), 0, sizeof(mbstate_t));
++    mbsrtowcs(__dest, &__lo, __hi - __lo, &__state);
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++    return __hi;
++  }
++
++  char
++  ctype<wchar_t>::
++  do_narrow(wchar_t __wc, char __dfault) const
++  { 
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++    int __c = wctob(__wc);
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++    return (__c == EOF ? __dfault : static_cast<char>(__c)); 
++  }
++
++  const wchar_t*
++  ctype<wchar_t>::
++  do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault, 
++	    char* __dest) const
++  {
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++    size_t __offset = 0;
++    while (true)
++      {
++	const wchar_t* __start = __lo + __offset;        
++	size_t __len = __hi - __start;
++	
++	mbstate_t __state;
++	memset(static_cast<void*>(&__state), 0, sizeof(mbstate_t));
++	size_t __con = wcsrtombs(__dest + __offset, &__start, __len, &__state);
++	if (__con != __len && __start != 0)
++	  {
++	    __offset = __start - __lo;          
++	    __dest[__offset++] = __dfault;
++	  }
++	else
++	  break;
++      }
++#ifdef __UCLIBC_HAS_XLOCALE__
++    __uselocale(__old);
++#endif
++    return __hi;
++  }
++#endif //  _GLIBCPP_USE_WCHAR_T
++}
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/messages_members.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/messages_members.cc
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/messages_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/messages_members.cc	2004-01-09 08:46:16.000000000 -0600
+@@ -0,0 +1,100 @@
++// std::messages implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.7.1.2  messages virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix gettext stuff
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++extern "C" char *__dcgettext(const char *domainname,
++			     const char *msgid, int category);
++#undef gettext
++#define gettext(msgid) __dcgettext(NULL, msgid, LC_MESSAGES)
++#else
++#undef gettext
++#define gettext(msgid) (msgid)
++#endif
++
++namespace std
++{
++  // Specializations.
++  template<>
++    string
++    messages<char>::do_get(catalog, int, int, const string& __dfault) const
++    {
++#ifdef __UCLIBC_HAS_XLOCALE__
++      __c_locale __old = __uselocale(_M_c_locale_messages);
++      const char* __msg = const_cast<const char*>(gettext(__dfault.c_str()));
++      __uselocale(__old);
++      return string(__msg);
++#elif defined __UCLIBC_HAS_LOCALE__
++      char* __old = strdup(setlocale(LC_ALL, NULL));
++      setlocale(LC_ALL, _M_name_messages);
++      const char* __msg = gettext(__dfault.c_str());
++      setlocale(LC_ALL, __old);
++      free(__old);
++      return string(__msg);
++#else
++      const char* __msg = gettext(__dfault.c_str());
++      return string(__msg);
++#endif
++    }
++
++#ifdef _GLIBCPP_USE_WCHAR_T
++  template<>
++    wstring
++    messages<wchar_t>::do_get(catalog, int, int, const wstring& __dfault) const
++    {
++#ifdef __UCLIBC_HAS_XLOCALE__
++      __c_locale __old = __uselocale(_M_c_locale_messages);
++      char* __msg = gettext(_M_convert_to_char(__dfault));
++      __uselocale(__old);
++      return _M_convert_from_char(__msg);
++#elif defined __UCLIBC_HAS_LOCALE__
++      char* __old = strdup(setlocale(LC_ALL, NULL));
++      setlocale(LC_ALL, _M_name_messages);
++      char* __msg = gettext(_M_convert_to_char(__dfault));
++      setlocale(LC_ALL, __old);
++      free(__old);
++      return _M_convert_from_char(__msg);
++# else
++      char* __msg = gettext(_M_convert_to_char(__dfault));
++      return _M_convert_from_char(__msg);
++# endif
++    }
++#endif
++}
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/messages_members.h gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/messages_members.h
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/messages_members.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/messages_members.h	2004-01-09 08:52:48.000000000 -0600
+@@ -0,0 +1,122 @@
++// std::messages implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.7.1.2  messages functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix prototypes for *textdomain funcs
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++extern "C" char *__textdomain(const char *domainname);
++extern "C" char *__bindtextdomain(const char *domainname,
++				  const char *dirname);
++#else
++#undef __textdomain
++#undef __bindtextdomain
++#define __textdomain(D)           ((void)0)
++#define __bindtextdomain(D,P)     ((void)0)
++#endif
++
++  // Non-virtual member functions.
++  template<typename _CharT>
++     messages<_CharT>::messages(size_t __refs)
++     : locale::facet(__refs)
++     {  
++#ifndef __UCLIBC_HAS_XLOCALE__
++       _M_name_messages = _S_c_name;
++#endif
++       _M_c_locale_messages = _S_c_locale; 
++     }
++
++  template<typename _CharT>
++     messages<_CharT>::messages(__c_locale __cloc, 
++				const char* __s, size_t __refs) 
++     : locale::facet(__refs)
++     {
++#ifndef __UCLIBC_HAS_XLOCALE__
++       _M_name_messages = new char[strlen(__s) + 1];
++       strcpy(_M_name_messages, __s);
++#endif
++       _M_c_locale_messages = _S_clone_c_locale(__cloc); 
++     }
++
++  template<typename _CharT>
++    typename messages<_CharT>::catalog 
++    messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc, 
++			   const char* __dir) const
++    { 
++      __bindtextdomain(__s.c_str(), __dir);
++      return this->do_open(__s, __loc); 
++    }
++
++  // Virtual member functions.
++  template<typename _CharT>
++    messages<_CharT>::~messages()
++    { 
++#ifndef __UCLIBC_HAS_XLOCALE__
++      if (_S_c_name != _M_name_messages)
++	delete [] _M_name_messages;
++#endif
++      _S_destroy_c_locale(_M_c_locale_messages); 
++    }
++
++  template<typename _CharT>
++    typename messages<_CharT>::catalog 
++    messages<_CharT>::do_open(const basic_string<char>& __s, 
++			      const locale&) const
++    { 
++      // No error checking is done, assume the catalog exists and can
++      // be used.
++      __textdomain(__s.c_str());
++      return 0;
++    }
++
++  template<typename _CharT>
++    void    
++    messages<_CharT>::do_close(catalog) const 
++    { }
++
++   // messages_byname
++   template<typename _CharT>
++     messages_byname<_CharT>::messages_byname(const char* __s, size_t __refs)
++     : messages<_CharT>(__refs) 
++     { 
++#ifndef __UCLIBC_HAS_XLOCALE__
++       if (_S_c_name != _M_name_messages)
++	 delete [] _M_name_messages;
++       _M_name_messages = new char[strlen(__s) + 1];
++       strcpy(_M_name_messages, __s);
++#endif
++       _S_destroy_c_locale(_M_c_locale_messages);
++       _S_create_c_locale(_M_c_locale_messages, __s); 
++     }
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/monetary_members.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/monetary_members.cc
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/monetary_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/monetary_members.cc	2004-01-09 18:20:23.000000000 -0600
+@@ -0,0 +1,578 @@
++// std::moneypunct implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.6.3.2  moneypunct virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning optimize this for uclibc
++#warning tailor for stub locale support
++#endif
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L)         nl_langinfo((N))
++#endif
++
++namespace std
++{
++  // Construct and return valid pattern consisting of some combination of:
++  // space none symbol sign value
++  money_base::pattern
++  money_base::_S_construct_pattern(char __precedes, char __space, char __posn)
++  { 
++    pattern __ret;
++
++    // This insanely complicated routine attempts to construct a valid
++    // pattern for use with monyepunct. A couple of invariants:
++
++    // if (__precedes) symbol -> value
++    // else value -> symbol
++    
++    // if (__space) space
++    // else none
++
++    // none == never first
++    // space never first or last
++
++    // Any elegant implementations of this are welcome.
++    switch (__posn)
++      {
++      case 0:
++      case 1:
++	// 1 The sign precedes the value and symbol.
++	if (__space)
++	  {
++	    // Pattern starts with sign.
++	    if (__precedes)
++	      {
++		__ret.field[1] = symbol;
++		__ret.field[2] = space;
++		__ret.field[3] = value;
++	      }
++	    else
++	      {
++		__ret.field[1] = value;
++		__ret.field[2] = space;
++		__ret.field[3] = symbol;
++	      }
++	    __ret.field[0] = sign;
++	  }
++	else
++	  {
++	    // Pattern starts with sign and ends with none.
++	    if (__precedes)
++	      {
++		__ret.field[1] = symbol;
++		__ret.field[2] = value;
++	      }
++	    else
++	      {
++		__ret.field[1] = value;
++		__ret.field[2] = symbol;
++	      }
++	    __ret.field[0] = sign;
++	    __ret.field[3] = none;
++	  }
++	break;
++      case 2:
++	// 2 The sign follows the value and symbol.
++	if (__space)
++	  {
++	    // Pattern either ends with sign.
++	    if (__precedes)
++	      {
++		__ret.field[0] = symbol;
++		__ret.field[1] = space;
++		__ret.field[2] = value;
++	      }
++	    else
++	      {
++		__ret.field[0] = value;
++		__ret.field[1] = space;
++		__ret.field[2] = symbol;
++	      }
++	    __ret.field[3] = sign;
++	  }
++	else
++	  {
++	    // Pattern ends with sign then none.
++	    if (__precedes)
++	      {
++		__ret.field[0] = symbol;
++		__ret.field[1] = value;
++	      }
++	    else
++	      {
++		__ret.field[0] = value;
++		__ret.field[1] = symbol;
++	      }
++	    __ret.field[2] = sign;
++	    __ret.field[3] = none;
++	  }
++	break;
++      case 3:
++	// 3 The sign immediately precedes the symbol.
++	if (__space)
++	  {
++	    // Have space.
++	    if (__precedes)
++	      {
++		__ret.field[0] = sign;
++		__ret.field[1] = symbol;
++		__ret.field[2] = space;
++		__ret.field[3] = value;
++	      }
++	    else
++	      {
++		__ret.field[0] = value;
++		__ret.field[1] = space;
++		__ret.field[2] = sign;
++		__ret.field[3] = symbol;
++	      }
++	  }
++	else
++	  {
++	    // Have none.
++	    if (__precedes)
++	      {
++		__ret.field[0] = sign;
++		__ret.field[1] = symbol;
++		__ret.field[2] = value;
++	      }
++	    else
++	      {
++		__ret.field[0] = value;
++		__ret.field[1] = sign;
++		__ret.field[2] = symbol;
++	      }
++	    __ret.field[3] = none;
++	  }
++	break;
++      case 4:
++	// 4 The sign immediately follows the symbol. 
++	if (__space)
++	  {
++	    // Have space.
++	    if (__precedes)
++	      {
++		__ret.field[0] = symbol;
++		__ret.field[1] = sign;
++		__ret.field[2] = space;
++		__ret.field[3] = value;
++	      }
++	    else
++	      {
++		__ret.field[0] = value;
++		__ret.field[1] = space;
++		__ret.field[2] = symbol;
++		__ret.field[3] = sign;
++	      }
++	  }
++	else
++	  {
++	    // Have none.
++	    if (__precedes)
++	      {
++		__ret.field[0] = symbol;
++		__ret.field[1] = sign;
++		__ret.field[2] = value;
++	      }
++	    else
++	      {
++		__ret.field[0] = value;
++		__ret.field[1] = symbol;
++		__ret.field[2] = sign;
++	      }
++	    __ret.field[3] = none;
++	  }
++	break;
++      default:
++	;
++      }
++    return __ret;
++  }
++
++  template<> 
++    void
++    moneypunct<char, true>::_M_initialize_moneypunct(__c_locale __cloc, 
++						     const char*)
++    {
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_decimal_point = '.';
++	  _M_thousands_sep = ',';
++	  _M_grouping = "";
++	  _M_curr_symbol = "";
++	  _M_positive_sign = "";
++	  _M_negative_sign = "";
++	  _M_frac_digits = 0;
++	  _M_pos_format = money_base::_S_default_pattern;
++	  _M_neg_format = money_base::_S_default_pattern;
++	}
++      else
++	{
++	  // Named locale.
++	  _M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT, __cloc));
++	  _M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP, __cloc));
++	  _M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++	  _M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++
++	  char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
++	  if (!__nposn)
++	    _M_negative_sign = "()";
++	  else
++	    _M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++
++	  // _Intl == true
++	  _M_curr_symbol = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
++	  _M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS, __cloc));
++	  char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
++	  char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
++	  char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
++	  _M_pos_format = _S_construct_pattern(__pprecedes, __pspace, __pposn);
++	  char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
++	  char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
++	  _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn);
++	}
++    }
++
++  template<> 
++    void
++    moneypunct<char, false>::_M_initialize_moneypunct(__c_locale __cloc, 
++						      const char*)
++    {
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_decimal_point = '.';
++	  _M_thousands_sep = ',';
++	  _M_grouping = "";
++	  _M_curr_symbol = "";
++	  _M_positive_sign = "";
++	  _M_negative_sign = "";
++	  _M_frac_digits = 0;
++	  _M_pos_format = money_base::_S_default_pattern;
++	  _M_neg_format = money_base::_S_default_pattern;
++	}
++      else
++	{
++	  // Named locale.
++	  _M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT, __cloc));
++	  _M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP, __cloc));
++	  _M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++	  _M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++
++	  char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
++	  if (!__nposn)
++	    _M_negative_sign = "()";
++	  else
++	    _M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++
++	  // _Intl == false
++	  _M_curr_symbol = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
++	  _M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
++	  char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
++	  char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
++	  char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
++	  _M_pos_format = _S_construct_pattern(__pprecedes, __pspace, __pposn);
++	  char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
++	  char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
++	  _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn);
++	}
++    }
++
++  template<> 
++    moneypunct<char, true>::~moneypunct()
++    { }
++
++  template<> 
++    moneypunct<char, false>::~moneypunct()
++    { }
++
++#ifdef _GLIBCPP_USE_WCHAR_T
++  template<> 
++    void
++    moneypunct<wchar_t, true>::_M_initialize_moneypunct(__c_locale __cloc, 
++#ifdef __UCLIBC_HAS_XLOCALE__
++							const char*)
++#else
++							const char* __name)
++#endif
++    {
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_decimal_point = L'.';
++	  _M_thousands_sep = L',';
++	  _M_grouping = "";
++	  _M_curr_symbol = L"";
++	  _M_positive_sign = L"";
++	  _M_negative_sign = L"";
++	  _M_frac_digits = 0;
++	  _M_pos_format = money_base::_S_default_pattern;
++	  _M_neg_format = money_base::_S_default_pattern;
++	}
++      else
++	{
++	  // Named locale.
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __c_locale __old = __uselocale(__cloc);
++#else
++	  // Switch to named locale so that mbsrtowcs will work.
++	  char* __old = strdup(setlocale(LC_ALL, NULL));
++	  setlocale(LC_ALL, __name);
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++	  _M_decimal_point = __cloc->decimal_point_wc;
++	  _M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++	  _M_decimal_point = __global_locale->decimal_point_wc;
++	  _M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++	  _M_decimal_point = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc)}).__w);
++
++	  _M_thousands_sep = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc)}).__w);
++#endif
++	  _M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++
++	  const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++	  const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++	  const char* __ccurr = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
++
++	  mbstate_t __state;
++	  size_t __len = strlen(__cpossign);
++	  if (__len)
++	    {
++	      ++__len;
++	      memset(&__state, 0, sizeof(mbstate_t));
++	      wchar_t* __wcs = new wchar_t[__len];
++	      mbsrtowcs(__wcs, &__cpossign, __len, &__state);
++	      _M_positive_sign = __wcs;
++	    }
++	  else
++	    _M_positive_sign = L"";
++
++	  char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
++	  __len = strlen(__cnegsign);
++	  if (!__nposn)
++	    _M_negative_sign = L"()";
++	  else if (__len)
++	    { 
++	      ++__len;
++	      memset(&__state, 0, sizeof(mbstate_t));
++	      wchar_t* __wcs = new wchar_t[__len];
++	      mbsrtowcs(__wcs, &__cnegsign, __len, &__state);
++	      _M_negative_sign = __wcs;
++	    }
++	  else
++	    _M_negative_sign = L"";
++
++	  // _Intl == true.
++	  __len = strlen(__ccurr);
++	  if (__len)
++	    {
++	      ++__len;
++	      memset(&__state, 0, sizeof(mbstate_t));
++	      wchar_t* __wcs = new wchar_t[__len];
++	      mbsrtowcs(__wcs, &__ccurr, __len, &__state);
++	      _M_curr_symbol = __wcs;
++	    }
++	  else
++	    _M_curr_symbol = L"";
++
++	  _M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS, __cloc));
++	  char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
++	  char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
++	  char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
++	  _M_pos_format = _S_construct_pattern(__pprecedes, __pspace, __pposn);
++	  char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
++	  char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
++	  _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __uselocale(__old);
++#else
++	  setlocale(LC_ALL, __old);
++	  free(__old);
++#endif
++	}
++    }
++
++  template<> 
++    void
++    moneypunct<wchar_t, false>::_M_initialize_moneypunct(__c_locale __cloc,
++#ifdef __UCLIBC_HAS_XLOCALE__
++							 const char*)
++#else
++							 const char* __name)
++#endif
++    {
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_decimal_point = L'.';
++	  _M_thousands_sep = L',';
++	  _M_grouping = "";
++	  _M_curr_symbol = L"";
++	  _M_positive_sign = L"";
++	  _M_negative_sign = L"";
++	  _M_frac_digits = 0;
++	  _M_pos_format = money_base::_S_default_pattern;
++	  _M_neg_format = money_base::_S_default_pattern;
++	}
++      else
++	{
++	  // Named locale.
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __c_locale __old = __uselocale(__cloc);
++#else
++	  // Switch to named locale so that mbsrtowcs will work.
++	  char* __old = strdup(setlocale(LC_ALL, NULL));
++	  setlocale(LC_ALL, __name);
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++	  _M_decimal_point = __cloc->decimal_point_wc;
++	  _M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++	  _M_decimal_point = __global_locale->decimal_point_wc;
++	  _M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++	  _M_decimal_point = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc)}).__w);
++	  _M_thousands_sep = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc)}).__w);
++#endif
++	  _M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++
++	  const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++	  const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++	  const char* __ccurr = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
++
++	  mbstate_t __state;
++	  size_t __len;
++	  __len = strlen(__cpossign);
++	  if (__len)
++	    {
++	      ++__len;
++	      memset(&__state, 0, sizeof(mbstate_t));
++	      wchar_t* __wcs = new wchar_t[__len];
++	      mbsrtowcs(__wcs, &__cpossign, __len, &__state);
++	      _M_positive_sign = __wcs;
++	    }
++	  else
++	    _M_positive_sign = L"";
++
++	  char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
++	  __len = strlen(__cnegsign);
++	  if (!__nposn)
++	    _M_negative_sign = L"()";
++	  else if (__len)
++	    { 
++	      ++__len;
++	      memset(&__state, 0, sizeof(mbstate_t));
++	      wchar_t* __wcs = new wchar_t[__len];
++	      mbsrtowcs(__wcs, &__cnegsign, __len, &__state);
++	      _M_negative_sign = __wcs;
++	    }
++	  else
++	    _M_negative_sign = L"";
++
++	  // _Intl == true.
++	  __len = strlen(__ccurr);
++	  if (__len)
++	    {
++	      ++__len;
++	      memset(&__state, 0, sizeof(mbstate_t));
++	      wchar_t* __wcs = new wchar_t[__len];
++	      mbsrtowcs(__wcs, &__ccurr, __len, &__state);
++	      _M_curr_symbol = __wcs;
++	    }
++	  else
++	    _M_curr_symbol = L"";
++
++	  _M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
++	  char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
++	  char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
++	  char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
++	  _M_pos_format = _S_construct_pattern(__pprecedes, __pspace, __pposn);
++	  char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
++	  char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
++	  _M_neg_format = _S_construct_pattern(__nprecedes, __nspace, __nposn);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++	  __uselocale(__old);
++#else
++	  setlocale(LC_ALL, __old);
++	  free(__old);
++#endif
++	}
++    }
++
++  template<> 
++    moneypunct<wchar_t, true>::~moneypunct()
++    {
++      if (wcslen(_M_positive_sign))
++	delete [] _M_positive_sign;
++      if (wcslen(_M_negative_sign) && (wcscmp(_M_negative_sign, L"()") != 0))
++	delete [] _M_negative_sign;
++      if (wcslen(_M_curr_symbol))
++	delete [] _M_curr_symbol;
++    }
++
++  template<> 
++    moneypunct<wchar_t, false>::~moneypunct()
++    {
++      if (wcslen(_M_positive_sign))
++	delete [] _M_positive_sign;
++      if (wcslen(_M_negative_sign) && (wcscmp(_M_negative_sign, L"()") != 0))
++	delete [] _M_negative_sign;
++      if (wcslen(_M_curr_symbol))
++	delete [] _M_curr_symbol;
++    }
++#endif
++}
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/numeric_members.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/numeric_members.cc
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/numeric_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/numeric_members.cc	2004-01-09 18:20:59.000000000 -0600
+@@ -0,0 +1,129 @@
++// std::numpunct implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.3.1.2  numpunct virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning tailor for stub locale support
++#endif
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L)         nl_langinfo((N))
++#endif
++
++namespace std
++{
++  template<> 
++    void
++    numpunct<char>::_M_initialize_numpunct(__c_locale __cloc)
++    {
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_decimal_point = '.';
++	  _M_thousands_sep = ',';
++	  _M_grouping = "";
++	}
++      else
++	{
++	  // Named locale.
++	  _M_decimal_point = *(__nl_langinfo_l(RADIXCHAR, __cloc));
++	  _M_thousands_sep = *(__nl_langinfo_l(THOUSEP, __cloc));
++	  // Check for NUL, which implies no grouping.
++	  if (_M_thousands_sep == '\0')
++	    _M_grouping = "";
++	  else
++	    _M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++	}
++      // NB: There is no way to extact this info from posix locales.
++      // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
++      _M_truename = "true";
++      // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
++      _M_falsename = "false";
++    }
++ 
++  template<> 
++    numpunct<char>::~numpunct()
++    { }
++   
++#ifdef _GLIBCPP_USE_WCHAR_T
++  template<> 
++    void
++    numpunct<wchar_t>::_M_initialize_numpunct(__c_locale __cloc)
++    {
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_decimal_point = L'.';
++	  _M_thousands_sep = L',';
++	  _M_grouping = "";
++	}
++      else
++	{
++	  // Named locale.
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++	  _M_decimal_point = __cloc->decimal_point_wc;
++	  _M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++	  _M_decimal_point = __global_locale->decimal_point_wc;
++	  _M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++	  _M_decimal_point = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc)}).__w);
++	  _M_thousands_sep = static_cast<wchar_t>(((union { const char *__s; unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc)}).__w);
++#endif
++	  if (_M_thousands_sep == L'\0')
++	    _M_grouping = "";
++	  else
++	    _M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++	}
++      // NB: There is no way to extact this info from posix locales.
++      // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
++      _M_truename = L"true";
++      // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
++      _M_falsename = L"false";
++    }
++
++  template<> 
++    numpunct<wchar_t>::~numpunct()
++    { }
++ #endif
++}
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/time_members.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/time_members.cc
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/time_members.cc	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/time_members.cc	2004-01-09 08:25:03.000000000 -0600
+@@ -0,0 +1,341 @@
++// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.5.1.2 - time_get virtual functions
++// ISO C++ 14882: 22.2.5.3.2 - time_put virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning tailor for stub locale support
++#endif
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L)         nl_langinfo((N))
++#endif
++
++namespace std
++{
++  template<>
++    void
++    __timepunct<char>::
++    _M_put(char* __s, size_t __maxlen, const char* __format, 
++	   const tm* __tm) const
++    {
++#ifdef __UCLIBC_HAS_XLOCALE__
++      __strftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct);
++#else
++      char* __old = strdup(setlocale(LC_ALL, NULL));
++      setlocale(LC_ALL, _M_name_timepunct);
++      strftime(__s, __maxlen, __format, __tm);
++      setlocale(LC_ALL, __old);
++      free(__old);
++#endif
++    }
++
++  template<> 
++    void
++    __timepunct<char>::_M_initialize_timepunct(__c_locale __cloc)
++    {
++      if (!__cloc)
++	{
++	  // "C" locale
++	  _M_c_locale_timepunct = _S_c_locale;
++
++	  _M_date_format = "%m/%d/%y";
++	  _M_date_era_format = "%m/%d/%y";
++	  _M_time_format = "%H:%M:%S";
++	  _M_time_era_format = "%H:%M:%S";
++	  _M_date_time_format = "";
++	  _M_date_time_era_format = "";
++	  _M_am = "AM";
++	  _M_pm = "PM";
++	  _M_am_pm_format = "";
++
++	  // Day names, starting with "C"'s Sunday.
++	  _M_day1 = "Sunday";
++	  _M_day2 = "Monday";
++	  _M_day3 = "Tuesday";
++	  _M_day4 = "Wednesday";
++	  _M_day5 = "Thursday";
++	  _M_day6 = "Friday";
++	  _M_day7 = "Saturday";
++
++	  // Abbreviated day names, starting with "C"'s Sun.
++	  _M_day_a1 = "Sun";
++	  _M_day_a2 = "Mon";
++	  _M_day_a3 = "Tue";
++	  _M_day_a4 = "Wed";
++	  _M_day_a5 = "Thu";
++	  _M_day_a6 = "Fri";
++	  _M_day_a7 = "Sat";
++
++	  // Month names, starting with "C"'s January.
++	  _M_month01 = "January";
++	  _M_month02 = "February";
++	  _M_month03 = "March";
++	  _M_month04 = "April";
++	  _M_month05 = "May";
++	  _M_month06 = "June";
++	  _M_month07 = "July";
++	  _M_month08 = "August";
++	  _M_month09 = "September";
++	  _M_month10 = "October";
++	  _M_month11 = "November";
++	  _M_month12 = "December";
++
++	  // Abbreviated month names, starting with "C"'s Jan.
++	  _M_month_a01 = "Jan";
++	  _M_month_a02 = "Feb";
++	  _M_month_a03 = "Mar";
++	  _M_month_a04 = "Apr";
++	  _M_month_a05 = "May";
++	  _M_month_a06 = "Jun";
++	  _M_month_a07 = "July";
++	  _M_month_a08 = "Aug";
++	  _M_month_a09 = "Sep";
++	  _M_month_a10 = "Oct";
++	  _M_month_a11 = "Nov";
++	  _M_month_a12 = "Dec";
++	}
++      else
++	{
++	  _M_c_locale_timepunct = _S_clone_c_locale(__cloc); 
++
++	  _M_date_format = __nl_langinfo_l(D_FMT, __cloc);
++	  _M_date_era_format = __nl_langinfo_l(ERA_D_FMT, __cloc);
++	  _M_time_format = __nl_langinfo_l(T_FMT, __cloc);
++	  _M_time_era_format = __nl_langinfo_l(ERA_T_FMT, __cloc);
++	  _M_date_time_format = __nl_langinfo_l(D_T_FMT, __cloc);
++	  _M_date_time_era_format = __nl_langinfo_l(ERA_D_T_FMT, __cloc);
++	  _M_am = __nl_langinfo_l(AM_STR, __cloc);
++	  _M_pm = __nl_langinfo_l(PM_STR, __cloc);
++	  _M_am_pm_format = __nl_langinfo_l(T_FMT_AMPM, __cloc);
++
++	  // Day names, starting with "C"'s Sunday.
++	  _M_day1 = __nl_langinfo_l(DAY_1, __cloc);
++	  _M_day2 = __nl_langinfo_l(DAY_2, __cloc);
++	  _M_day3 = __nl_langinfo_l(DAY_3, __cloc);
++	  _M_day4 = __nl_langinfo_l(DAY_4, __cloc);
++	  _M_day5 = __nl_langinfo_l(DAY_5, __cloc);
++	  _M_day6 = __nl_langinfo_l(DAY_6, __cloc);
++	  _M_day7 = __nl_langinfo_l(DAY_7, __cloc);
++
++	  // Abbreviated day names, starting with "C"'s Sun.
++	  _M_day_a1 = __nl_langinfo_l(ABDAY_1, __cloc);
++	  _M_day_a2 = __nl_langinfo_l(ABDAY_2, __cloc);
++	  _M_day_a3 = __nl_langinfo_l(ABDAY_3, __cloc);
++	  _M_day_a4 = __nl_langinfo_l(ABDAY_4, __cloc);
++	  _M_day_a5 = __nl_langinfo_l(ABDAY_5, __cloc);
++	  _M_day_a6 = __nl_langinfo_l(ABDAY_6, __cloc);
++	  _M_day_a7 = __nl_langinfo_l(ABDAY_7, __cloc);
++
++	  // Month names, starting with "C"'s January.
++	  _M_month01 = __nl_langinfo_l(MON_1, __cloc);
++	  _M_month02 = __nl_langinfo_l(MON_2, __cloc);
++	  _M_month03 = __nl_langinfo_l(MON_3, __cloc);
++	  _M_month04 = __nl_langinfo_l(MON_4, __cloc);
++	  _M_month05 = __nl_langinfo_l(MON_5, __cloc);
++	  _M_month06 = __nl_langinfo_l(MON_6, __cloc);
++	  _M_month07 = __nl_langinfo_l(MON_7, __cloc);
++	  _M_month08 = __nl_langinfo_l(MON_8, __cloc);
++	  _M_month09 = __nl_langinfo_l(MON_9, __cloc);
++	  _M_month10 = __nl_langinfo_l(MON_10, __cloc);
++	  _M_month11 = __nl_langinfo_l(MON_11, __cloc);
++	  _M_month12 = __nl_langinfo_l(MON_12, __cloc);
++
++	  // Abbreviated month names, starting with "C"'s Jan.
++	  _M_month_a01 = __nl_langinfo_l(ABMON_1, __cloc);
++	  _M_month_a02 = __nl_langinfo_l(ABMON_2, __cloc);
++	  _M_month_a03 = __nl_langinfo_l(ABMON_3, __cloc);
++	  _M_month_a04 = __nl_langinfo_l(ABMON_4, __cloc);
++	  _M_month_a05 = __nl_langinfo_l(ABMON_5, __cloc);
++	  _M_month_a06 = __nl_langinfo_l(ABMON_6, __cloc);
++	  _M_month_a07 = __nl_langinfo_l(ABMON_7, __cloc);
++	  _M_month_a08 = __nl_langinfo_l(ABMON_8, __cloc);
++	  _M_month_a09 = __nl_langinfo_l(ABMON_9, __cloc);
++	  _M_month_a10 = __nl_langinfo_l(ABMON_10, __cloc);
++	  _M_month_a11 = __nl_langinfo_l(ABMON_11, __cloc);
++	  _M_month_a12 = __nl_langinfo_l(ABMON_12, __cloc);
++	}
++    }
++
++#ifdef _GLIBCPP_USE_WCHAR_T
++  template<>
++    void
++    __timepunct<wchar_t>::
++    _M_put(wchar_t* __s, size_t __maxlen, const wchar_t* __format, 
++	   const tm* __tm) const
++    {
++#ifdef __UCLIBC_HAS_XLOCALE__
++      __wcsftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct);
++#else
++      char* __old = strdup(setlocale(LC_ALL, NULL));
++      setlocale(LC_ALL, _M_name_timepunct);
++      wcsftime(__s, __maxlen, __format, __tm);
++      setlocale(LC_ALL, __old);
++      free(__old);
++#endif
++    }
++
++  template<> 
++    void
++    __timepunct<wchar_t>::_M_initialize_timepunct(__c_locale __cloc)
++    {
++#warning wide time stuff
++//       if (!__cloc)
++	{
++	  // "C" locale
++	  _M_c_locale_timepunct = _S_c_locale;
++
++	  _M_date_format = L"%m/%d/%y";
++	  _M_date_era_format = L"%m/%d/%y";
++	  _M_time_format = L"%H:%M:%S";
++	  _M_time_era_format = L"%H:%M:%S";
++	  _M_date_time_format = L"";
++	  _M_date_time_era_format = L"";
++	  _M_am = L"AM";
++	  _M_pm = L"PM";
++	  _M_am_pm_format = L"";
++
++	  // Day names, starting with "C"'s Sunday.
++	  _M_day1 = L"Sunday";
++	  _M_day2 = L"Monday";
++	  _M_day3 = L"Tuesday";
++	  _M_day4 = L"Wednesday";
++	  _M_day5 = L"Thursday";
++	  _M_day6 = L"Friday";
++	  _M_day7 = L"Saturday";
++
++	  // Abbreviated day names, starting with "C"'s Sun.
++	  _M_day_a1 = L"Sun";
++	  _M_day_a2 = L"Mon";
++	  _M_day_a3 = L"Tue";
++	  _M_day_a4 = L"Wed";
++	  _M_day_a5 = L"Thu";
++	  _M_day_a6 = L"Fri";
++	  _M_day_a7 = L"Sat";
++
++	  // Month names, starting with "C"'s January.
++	  _M_month01 = L"January";
++	  _M_month02 = L"February";
++	  _M_month03 = L"March";
++	  _M_month04 = L"April";
++	  _M_month05 = L"May";
++	  _M_month06 = L"June";
++	  _M_month07 = L"July";
++	  _M_month08 = L"August";
++	  _M_month09 = L"September";
++	  _M_month10 = L"October";
++	  _M_month11 = L"November";
++	  _M_month12 = L"December";
++
++	  // Abbreviated month names, starting with "C"'s Jan.
++	  _M_month_a01 = L"Jan";
++	  _M_month_a02 = L"Feb";
++	  _M_month_a03 = L"Mar";
++	  _M_month_a04 = L"Apr";
++	  _M_month_a05 = L"May";
++	  _M_month_a06 = L"Jun";
++	  _M_month_a07 = L"July";
++	  _M_month_a08 = L"Aug";
++	  _M_month_a09 = L"Sep";
++	  _M_month_a10 = L"Oct";
++	  _M_month_a11 = L"Nov";
++	  _M_month_a12 = L"Dec";
++	}
++#if 0
++      else
++	{
++	  _M_c_locale_timepunct = _S_clone_c_locale(__cloc); 
++
++	  _M_date_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WD_FMT, __cloc));
++	  _M_date_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_D_FMT, __cloc));
++	  _M_time_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WT_FMT, __cloc));
++	  _M_time_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_T_FMT, __cloc));
++	  _M_date_time_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WD_T_FMT, __cloc));
++	  _M_date_time_era_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WERA_D_T_FMT, __cloc));
++	  _M_am = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WAM_STR, __cloc));
++	  _M_pm = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WPM_STR, __cloc));
++	  _M_am_pm_format = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WT_FMT_AMPM, __cloc));
++
++	  // Day names, starting with "C"'s Sunday.
++	  _M_day1 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_1, __cloc));
++	  _M_day2 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_2, __cloc));
++	  _M_day3 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_3, __cloc));
++	  _M_day4 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_4, __cloc));
++	  _M_day5 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_5, __cloc));
++	  _M_day6 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_6, __cloc));
++	  _M_day7 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WDAY_7, __cloc));
++
++	  // Abbreviated day names, starting with "C"'s Sun.
++	  _M_day_a1 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_1, __cloc));
++	  _M_day_a2 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_2, __cloc));
++	  _M_day_a3 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_3, __cloc));
++	  _M_day_a4 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_4, __cloc));
++	  _M_day_a5 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_5, __cloc));
++	  _M_day_a6 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_6, __cloc));
++	  _M_day_a7 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABDAY_7, __cloc));
++
++	  // Month names, starting with "C"'s January.
++	  _M_month01 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_1, __cloc));
++	  _M_month02 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_2, __cloc));
++	  _M_month03 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_3, __cloc));
++	  _M_month04 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_4, __cloc));
++	  _M_month05 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_5, __cloc));
++	  _M_month06 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_6, __cloc));
++	  _M_month07 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_7, __cloc));
++	  _M_month08 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_8, __cloc));
++	  _M_month09 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_9, __cloc));
++	  _M_month10 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_10, __cloc));
++	  _M_month11 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_11, __cloc));
++	  _M_month12 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WMON_12, __cloc));
++
++	  // Abbreviated month names, starting with "C"'s Jan.
++	  _M_month_a01 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_1, __cloc));
++	  _M_month_a02 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_2, __cloc));
++	  _M_month_a03 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_3, __cloc));
++	  _M_month_a04 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_4, __cloc));
++	  _M_month_a05 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_5, __cloc));
++	  _M_month_a06 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_6, __cloc));
++	  _M_month_a07 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_7, __cloc));
++	  _M_month_a08 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_8, __cloc));
++	  _M_month_a09 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_9, __cloc));
++	  _M_month_a10 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_10, __cloc));
++	  _M_month_a11 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_11, __cloc));
++	  _M_month_a12 = reinterpret_cast<wchar_t*>(__nl_langinfo_l(_NL_WABMON_12, __cloc));
++	}
++#endif // 0
++    }
++#endif
++}
+diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/time_members.h gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/time_members.h
+--- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/time_members.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/time_members.h	2004-01-09 04:26:21.000000000 -0600
+@@ -0,0 +1,68 @@
++// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.5.1.2 - time_get functions
++// ISO C++ 14882: 22.2.5.3.2 - time_put functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++  template<typename _CharT>
++    __timepunct<_CharT>::__timepunct(size_t __refs) 
++    : locale::facet(__refs)
++    { 
++#ifndef __UCLIBC_HAS_XLOCALE__
++      _M_name_timepunct = _S_c_name;
++#endif
++      _M_initialize_timepunct(); 
++    }
++
++  template<typename _CharT>
++    __timepunct<_CharT>::__timepunct(__c_locale __cloc, 
++				     const char* __s,
++				     size_t __refs) 
++    : locale::facet(__refs)
++    { 
++#ifndef __UCLIBC_HAS_XLOCALE__
++      _M_name_timepunct = new char[strlen(__s) + 1];
++      strcpy(_M_name_timepunct, __s);
++#endif
++      _M_initialize_timepunct(__cloc); 
++    }
++
++  template<typename _CharT>
++    __timepunct<_CharT>::~__timepunct()
++    { 
++#ifndef __UCLIBC_HAS_XLOCALE__
++      if (_S_c_name != _M_name_timepunct)
++	delete [] _M_name_timepunct;
++#endif
++      _S_destroy_c_locale(_M_c_locale_timepunct); 
++    }
+diff -urN gcc-3.3.2/libstdc++-v3/config/os/uclibc/ctype_base.h gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/ctype_base.h
+--- gcc-3.3.2/libstdc++-v3/config/os/uclibc/ctype_base.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/ctype_base.h	2004-01-09 02:54:54.000000000 -0600
+@@ -0,0 +1,57 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 1997, 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1  Locales
++//
++  
++// Information as gleaned from /usr/include/ctype.h
++  
++  struct ctype_base
++  {
++    // Note: In uClibc, the following two types depend on configuration.
++
++    // Non-standard typedefs.
++    typedef const __ctype_touplow_t* __to_type;
++    // NB: Offsets into ctype<char>::_M_table force a particular size
++    // on the mask type. Because of this, we don't use an enum.
++    typedef __ctype_mask_t	mask;   
++
++    static const mask upper    	= _ISupper;
++    static const mask lower 	= _ISlower;
++    static const mask alpha 	= _ISalpha;
++    static const mask digit 	= _ISdigit;
++    static const mask xdigit 	= _ISxdigit;
++    static const mask space 	= _ISspace;
++    static const mask print 	= _ISprint;
++    static const mask graph 	= _ISgraph;
++    static const mask cntrl 	= _IScntrl;
++    static const mask punct 	= _ISpunct;
++    static const mask alnum 	= _ISalnum;
++  };
+diff -urN gcc-3.3.2/libstdc++-v3/config/os/uclibc/ctype_inline.h gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/ctype_inline.h
+--- gcc-3.3.2/libstdc++-v3/config/os/uclibc/ctype_inline.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/ctype_inline.h	2002-06-24 00:49:19.000000000 -0500
+@@ -0,0 +1,69 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 2000, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1  Locales
++//
++  
++// ctype bits to be inlined go here. Non-inlinable (ie virtual do_*)
++// functions go in ctype.cc
++  
++  bool
++  ctype<char>::
++  is(mask __m, char __c) const
++  { return _M_table[static_cast<unsigned char>(__c)] & __m; }
++
++  const char*
++  ctype<char>::
++  is(const char* __low, const char* __high, mask* __vec) const
++  {
++    while (__low < __high)
++      *__vec++ = _M_table[static_cast<unsigned char>(*__low++)];
++    return __high;
++  }
++
++  const char*
++  ctype<char>::
++  scan_is(mask __m, const char* __low, const char* __high) const
++  {
++    while (__low < __high 
++	   && !(_M_table[static_cast<unsigned char>(*__low)] & __m))
++      ++__low;
++    return __low;
++  }
++
++  const char*
++  ctype<char>::
++  scan_not(mask __m, const char* __low, const char* __high) const
++  {
++    while (__low < __high 
++	   && (_M_table[static_cast<unsigned char>(*__low)] & __m) != 0)
++      ++__low;
++    return __low;
++  }
+diff -urN gcc-3.3.2/libstdc++-v3/config/os/uclibc/ctype_noninline.h gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/ctype_noninline.h
+--- gcc-3.3.2/libstdc++-v3/config/os/uclibc/ctype_noninline.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/ctype_noninline.h	2004-01-09 03:34:53.000000000 -0600
+@@ -0,0 +1,90 @@
++// Locale support -*- C++ -*-
++
++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002
++// Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.1  Locales
++//
++  
++// Information as gleaned from /usr/include/ctype.h
++
++  const ctype_base::mask*
++  ctype<char>::classic_table() throw()
++  { 
++    return __C_ctype_b;
++  }
++
++  ctype<char>::ctype(__c_locale, const mask* __table, bool __del, 
++		     size_t __refs) 
++  : __ctype_abstract_base<char>(__refs), _M_del(__table != 0 && __del)
++  {
++    _M_toupper = __C_ctype_toupper;
++    _M_tolower = __C_ctype_tolower;
++    _M_table = __table ? __table : __C_ctype_b;
++    _M_c_locale_ctype = _S_c_locale;
++  }
++
++  ctype<char>::ctype(const mask* __table, bool __del, size_t __refs) : 
++  __ctype_abstract_base<char>(__refs), _M_del(__table != 0 && __del)
++  {
++    _M_toupper = __C_ctype_toupper;
++    _M_tolower = __C_ctype_tolower;
++    _M_table = __table ? __table : __C_ctype_b;
++    _M_c_locale_ctype = _S_c_locale; 
++  }
++
++  char
++  ctype<char>::do_toupper(char __c) const
++  { return _M_toupper[static_cast<unsigned char>(__c)]; }
++
++  const char*
++  ctype<char>::do_toupper(char* __low, const char* __high) const
++  {
++    while (__low < __high)
++      {
++	*__low = _M_toupper[static_cast<unsigned char>(*__low)];
++	++__low;
++      }
++    return __high;
++  }
++
++  char
++  ctype<char>::do_tolower(char __c) const
++  { return _M_tolower[static_cast<unsigned char>(__c)]; }
++
++  const char* 
++  ctype<char>::do_tolower(char* __low, const char* __high) const
++  {
++    while (__low < __high)
++      {
++	*__low = _M_tolower[static_cast<unsigned char>(*__low)];
++	++__low;
++      }
++    return __high;
++  }
+diff -urN gcc-3.3.2/libstdc++-v3/config/os/uclibc/os_defines.h gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/os_defines.h
+--- gcc-3.3.2/libstdc++-v3/config/os/uclibc/os_defines.h	1969-12-31 18:00:00.000000000 -0600
++++ gcc-3.3.2-uClibc/libstdc++-v3/config/os/uclibc/os_defines.h	2004-01-09 04:56:13.000000000 -0600
+@@ -0,0 +1,56 @@
++// Specific definitions for GNU/Linux  -*- C++ -*-
++
++// Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++#ifndef _GLIBCPP_OS_DEFINES
++#define _GLIBCPP_OS_DEFINES 1
++
++// System-specific #define, typedefs, corrections, etc, go here.  This
++// file will come before all others.
++
++// This keeps isanum, et al from being propagated as macros.
++#define __NO_CTYPE 1
++
++#include <features.h>
++
++// These systems have declarations mismatching those in libio.h by
++// omitting throw qualifiers.  Cleanest way out is to not provide
++// throw-qualifiers at all.  Defining it as empty here will make libio.h
++// not define it.
++#undef __THROW
++#define __THROW
++
++// Tell Glibc not to try to provide its own inline versions of
++// some math functions.  Those cause assembly-time clashes with
++// our definitions.
++#define __NO_MATH_INLINES
++
++// We must not see the optimized string functions GNU libc defines.
++#define __NO_STRING_INLINES
++
++#endif
diff -Naur crosstool-0.28-rc5-orig/patches/gcc-3.3.3/uclibc-target-04.patch crosstool-0.28-rc5/patches/gcc-3.3.3/uclibc-target-04.patch
--- crosstool-0.28-rc5-orig/patches/gcc-3.3.3/uclibc-target-04.patch	1969-12-31 16:00:00.000000000 -0800
+++ crosstool-0.28-rc5/patches/gcc-3.3.3/uclibc-target-04.patch	2004-06-19 12:17:30.000000000 -0700
@@ -0,0 +1,130 @@
+Adjunct patch for {alpha,m68k,sparc}-*-linux-uclibc* targets.  Adds stuff
+nexessary to support compiling for uClibc on Alpha, Motorola68k, and Sparc
+architectures.  Written by Carl Miller <chaz@energoncube.net>.
+
+Index: gcc/config.gcc
+===================================================================
+RCS file: /home/cvs/tools/gcc-3.3.3/gcc/config.gcc,v
+retrieving revision 1.2
+diff -d -u -r1.2 config.gcc
+--- gcc-3.3.3-orig/gcc/config.gcc	20 Apr 2004 03:48:03 -0000	1.2
++++ gcc-3.3.3/gcc/config.gcc	20 Apr 2004 04:33:57 -0000
+@@ -556,6 +556,11 @@
+ 		thread_file='posix'
+ 	fi
+ 	;;
++alpha*-*-linux-uclibc*)
++	tm_file="${tm_file} alpha/elf.h alpha/linux.h alpha/linux-elf.h"
++	target_cpu_default="MASK_GAS"
++	tmake_file="t-slibgcc-elf-ver t-linux-uclibc alpha/t-crtfm alpha/t-alpha alpha/t-ieee"
++	;;
+ alpha*-*-linux*)
+ 	tm_file="${tm_file} alpha/elf.h alpha/linux.h alpha/linux-elf.h"
+ 	target_cpu_default="MASK_GAS"
+@@ -1752,7 +1757,12 @@
+ 	extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
+ 	gnu_ld=yes
+ 	;;
+-m68k-*-linux*)		# Motorola m68k's running GNU/Linux
++m68k-*-linux-uclibc*)		# Motorola m68k's running GNU/Linux
++				# with ELF format using uClibc
++	tm_file=m68k/linux.h
++	tmake_file="t-slibgcc-elf-ver t-linux-uclibc m68k/t-linux"
++	;;
++m68k-*-linux*)			# Motorola m68k's running GNU/Linux
+ 				# with ELF format using glibc 2
+ 				# aka the GNU/Linux C library 6.
+ 	tm_file=m68k/linux.h
+@@ -2480,6 +2490,10 @@
+ 	extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
+ 	gnu_ld=yes
+ 	;;
++sparc-*-linux-uclibc*)	# SPARC's running GNU/Linux and uClibc
++	tm_file="${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sparc/linux.h"
++	tmake_file="t-slibgcc-elf-ver t-linux-uclibc sparc/t-crtfm"
++	;;
+ sparc-*-linux*)		# SPARC's running GNU/Linux, libc6
+ 	tm_file="${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sparc/linux.h"
+ 	tmake_file="t-slibgcc-elf-ver t-linux sparc/t-crtfm"
+Index: gcc/config/alpha/linux-elf.h
+===================================================================
+RCS file: /home/cvs/tools/gcc-3.3.3/gcc/config/alpha/linux-elf.h,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 linux-elf.h
+--- gcc-3.3.3-orig/gcc/config/alpha/linux-elf.h	20 Apr 2004 02:21:46 -0000	1.1.1.1
++++ gcc-3.3.3/gcc/config/alpha/linux-elf.h	20 Apr 2004 04:11:17 -0000
+@@ -30,8 +30,12 @@
+ #ifdef USE_GNULIBC_1
+ #define ELF_DYNAMIC_LINKER	"/lib/ld.so.1"
+ #else
++#ifdef USE_UCLIBC
++#define ELF_DYNAMIC_LINKER	"/lib/ld-uClibc.so.0"
++#else
+ #define ELF_DYNAMIC_LINKER	"/lib/ld-linux.so.2"
+ #endif
++#endif
+ 
+ #define LINK_SPEC "-m elf64alpha %{G*} %{relax:-relax}		\
+   %{O*:-O3} %{!O*:-O1}						\
+Index: gcc/config/m68k/linux.h
+===================================================================
+RCS file: /home/cvs/tools/gcc-3.3.3/gcc/config/m68k/linux.h,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 linux.h
+--- gcc-3.3.3-orig/gcc/config/m68k/linux.h	20 Apr 2004 02:21:44 -0000	1.1.1.1
++++ gcc-3.3.3/gcc/config/m68k/linux.h	20 Apr 2004 04:16:16 -0000
+@@ -175,6 +175,14 @@
+     %{static}}}"
+ #endif
+ #else
++#ifdef USE_UCLIBC
++#define LINK_SPEC "-m m68kelf %{shared} \
++  %{!shared: \
++    %{!static: \
++      %{rdynamic:-export-dynamic} \
++      %{!dynamic-linker*:-dynamic-linker /lib/ld-uClibc.so.0}} \
++    %{static}}"
++#else
+ #define LINK_SPEC "-m m68kelf %{shared} \
+   %{!shared: \
+     %{!static: \
+@@ -182,6 +190,7 @@
+       %{!dynamic-linker*:-dynamic-linker /lib/ld.so.1}} \
+     %{static}}"
+ #endif
++#endif
+ 
+ /* For compatibility with linux/a.out */
+ 
+Index: gcc/config/sparc/linux.h
+===================================================================
+RCS file: /home/cvs/tools/gcc-3.3.3/gcc/config/sparc/linux.h,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 linux.h
+--- gcc-3.3.3-orig/gcc/config/sparc/linux.h	20 Apr 2004 02:21:46 -0000	1.1.1.1
++++ gcc-3.3.3/gcc/config/sparc/linux.h	20 Apr 2004 04:18:04 -0000
+@@ -170,6 +170,16 @@
+         %{static:-static}}}"
+ #endif
+ #else
++#ifdef USE_UCLIBC
++#define LINK_SPEC "-m elf32_sparc -Y P,/usr/lib %{shared:-shared} \
++  %{!mno-relax:%{!r:-relax}} \
++  %{!shared: \
++    %{!ibcs: \
++      %{!static: \
++        %{rdynamic:-export-dynamic} \
++        %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
++        %{static:-static}}}"
++#else
+ #define LINK_SPEC "-m elf32_sparc -Y P,/usr/lib %{shared:-shared} \
+   %{!mno-relax:%{!r:-relax}} \
+   %{!shared: \
+@@ -179,6 +189,7 @@
+         %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+         %{static:-static}}}"
+ #endif
++#endif
+ 
+ /* The sun bundled assembler doesn't accept -Yd, (and neither does gas).
+    It's safe to pass -s always, even if -g is not used.  */
diff -Naur crosstool-0.28-rc5-orig/patches/uClibc-0.9.23/Makefiles-relocate.patch crosstool-0.28-rc5/patches/uClibc-0.9.23/Makefiles-relocate.patch
--- crosstool-0.28-rc5-orig/patches/uClibc-0.9.23/Makefiles-relocate.patch	1969-12-31 16:00:00.000000000 -0800
+++ crosstool-0.28-rc5/patches/uClibc-0.9.23/Makefiles-relocate.patch	2004-06-19 12:18:08.000000000 -0700
@@ -0,0 +1,4916 @@
+Give uClibc an autoconf-like ability to be compiled from a directory other
+than the source directory.
+
+Index: Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/Makefile	15 Dec 2003 23:55:56 -0000
+@@ -25,8 +25,10 @@
+ noconfig_targets := menuconfig config oldconfig randconfig \
+ 	defconfig allyesconfig allnoconfig clean distclean \
+ 	release tags TAGS
++SRCDIR=./
+ TOPDIR=./
+-include Rules.mak
++SRCTOPDIR=./
++include $(SRCTOPDIR)Rules.mak
+ 
+ DIRS = ldso libc libcrypt libresolv libnsl libutil libm libpthread
+ ifeq ($(strip $(UCLIBC_HAS_GETTEXT_AWARENESS)),y)
+@@ -64,11 +66,11 @@
+ 
+ ifneq ($(SHARED_TARGET),)
+ 
+-lib/main.o: $(ROOTDIR)/lib/libc/main.c
+-	$(CC) $(CFLAGS) $(ARCH_CFLAGS) -c -o $@ $(ROOTDIR)/lib/libc/main.c
++lib/main.o: $(SRCTOPDIR)/lib/libc/main.c
++	$(CC) $(CFLAGS) $(ARCH_CFLAGS) -c -o $@ $(SRCTOPDIR)/lib/libc/main.c
+ 
+ bogus $(SHARED_TARGET): lib/libc.a lib/main.o Makefile
+-	make -C $(ROOTDIR) relink
++	make -C $(TOPDIR) relink
+ 	$(CC) -nostartfiles -o $(SHARED_TARGET) $(ARCH_CFLAGS) -Wl,-elf2flt -nostdlib		\
+ 		-Wl,-shared-lib-id,${LIBID}				\
+ 		lib/main.o \
+@@ -113,42 +115,44 @@
+ endif
+ 
+ include/bits/uClibc_config.h: .config
+-	@if [ ! -x ./extra/config/conf ] ; then \
+-	    make -C extra/config conf; \
++	@if [ ! -x $(TOPDIR)extra/config/conf ] ; then \
++	    make -C $(TOPDIR)extra/config conf; \
+ 	fi;
+ 	$(RM) -r include/bits
+ 	$(INSTALL) -d include/bits
+-	@./extra/config/conf -o extra/Configs/Config.in
++	@srctree=$(SRCTOPDIR) $(TOPDIR)extra/config/conf -o $(SRCTOPDIR)extra/Configs/Config.in
++
++TWOUPSRCTOPDIR:=$(if $(filter /% \\% c:\\% C:\\% c:/% C:/% d:\\% D:\\% d:/% D:/%,$(SRCTOPDIR)),$(SRCTOPDIR),../../$(SRCTOPDIR))
+ 
+ headers: include/bits/uClibc_config.h
+ ifeq ($(strip $(UCLIBC_HAS_MMU)),y)
+-	@set -x; ./extra/scripts/fix_includes.sh -k $(KERNEL_SOURCE) -t $(TARGET_ARCH)
++	@set -x; $(SRCTOPDIR)extra/scripts/fix_includes.sh -k $(KERNEL_SOURCE) -t $(TARGET_ARCH)
+ else
+-	@set -x; ./extra/scripts/fix_includes.sh -k $(KERNEL_SOURCE) -t $(TARGET_ARCH) -n
++	@set -x; $(SRCTOPDIR)extra/scripts/fix_includes.sh -k $(KERNEL_SOURCE) -t $(TARGET_ARCH) -n
+ endif
+ 	@cd include/bits; \
+ 	set -e; \
+-	for i in `ls ../../libc/sysdeps/linux/common/bits/*.h` ; do \
+-		$(LN) -fs $$i .; \
++	for i in `ls $(TWOUPSRCTOPDIR)libc/sysdeps/linux/common/bits/*.h` ; do \
++		$(CP) -f $$i .; \
+ 	done; \
+-	if [ -d ../../libc/sysdeps/linux/$(TARGET_ARCH)/bits ] ; then \
+-		for i in `ls ../../libc/sysdeps/linux/$(TARGET_ARCH)/bits/*.h` ; do \
+-			$(LN) -fs $$i .; \
++	if [ -d $(TWOUPSRCTOPDIR)libc/sysdeps/linux/$(TARGET_ARCH)/bits ] ; then \
++		for i in `ls $(TWOUPSRCTOPDIR)libc/sysdeps/linux/$(TARGET_ARCH)/bits/*.h` ; do \
++			$(CP) -f $$i .; \
+ 		done; \
+ 	fi
+ 	@cd include/sys; \
+ 	set -e; \
+-	for i in `ls ../../libc/sysdeps/linux/common/sys/*.h` ; do \
+-		$(LN) -fs $$i .; \
++	for i in `ls $(TWOUPSRCTOPDIR)libc/sysdeps/linux/common/sys/*.h` ; do \
++		$(CP) -f $$i .; \
+ 	done; \
+-	if [ -d ../../libc/sysdeps/linux/$(TARGET_ARCH)/sys ] ; then \
+-		for i in `ls ../../libc/sysdeps/linux/$(TARGET_ARCH)/sys/*.h` ; do \
+-			$(LN) -fs $$i .; \
++	if [ -d $(TWOUPSRCTOPDIR)libc/sysdeps/linux/$(TARGET_ARCH)/sys ] ; then \
++		for i in `ls $(TWOUPSRCTOPDIR)libc/sysdeps/linux/$(TARGET_ARCH)/sys/*.h` ; do \
++			$(CP) -f $$i .; \
+ 		done; \
+ 	fi
+ 	@cd $(TOPDIR); \
+ 	set -x -e; \
+-	TOPDIR=. CC="$(CC)" /bin/sh extra/scripts/gen_bits_syscall_h.sh > include/bits/sysnum.h.new; \
++	TOPDIR=. CC="$(CC)" /bin/sh $(SRCTOPDIR)extra/scripts/gen_bits_syscall_h.sh > include/bits/sysnum.h.new; \
+ 	if cmp include/bits/sysnum.h include/bits/sysnum.h.new >/dev/null 2>&1; then \
+ 		$(RM) include/bits/sysnum.h.new; \
+ 	else \
+@@ -166,7 +170,9 @@
+ 	$(WGET) http://www.uclibc.org/downloads/uClibc-locale-030818.tgz);
+ endif
+ ifeq ($(strip $(UCLIBC_PREGENERATED_LOCALE_DATA)),y)
+-	(cd extra/locale; zcat uClibc-locale-030818.tgz | tar -xvf -)
++	(cd extra/locale; \
++	 zcat $(TWOUPSRCTOPDIR)extra/locale/uClibc-locale-030818.tgz | \
++	 tar -xvf -)
+ 	make -C extra/locale pregen
+ endif
+ 
+@@ -179,14 +185,12 @@
+ tags:
+ 	ctags -R
+ 
+-install: install_runtime install_dev finished2
++install: install_runtime install_headers install_dev finished2
+ 
+ 
+-# Installs header files and development library links.
+-install_dev:
+-	$(INSTALL) -d $(PREFIX)$(DEVEL_PREFIX)lib
++# Installs just header files
++install_headers:
+ 	$(INSTALL) -d $(PREFIX)$(DEVEL_PREFIX)include
+-	-$(INSTALL) -m 644 lib/*.[ao] $(PREFIX)$(DEVEL_PREFIX)lib/
+ 	tar -chf - include | tar -xf - -C $(PREFIX)$(DEVEL_PREFIX);
+ ifneq ($(strip $(UCLIBC_HAS_FLOATS)),y)
+ 	# Remove floating point related headers since float support is disabled.
+@@ -238,21 +242,33 @@
+ 	# Remove getopt header since gnu getopt support is disabled.
+ 	$(RM) $(PREFIX)$(DEVEL_PREFIX)include/getopt.h
+ endif
+-	-@for i in `find  $(PREFIX)$(DEVEL_PREFIX) -type d` ; do \
++	-@for i in `find $(PREFIX)$(DEVEL_PREFIX)include -type d` ; do \
+ 	    chmod 755 $$i; chmod 644 $$i/*.h > /dev/null 2>&1; \
+ 	done;
+-	-find $(PREFIX)$(DEVEL_PREFIX) -name CVS | xargs $(RM) -r;
+-	-chown -R `id | sed 's/^uid=\([0-9]*\).*gid=\([0-9]*\).*$$/\1.\2/'` $(PREFIX)$(DEVEL_PREFIX)
++	-find $(PREFIX)$(DEVEL_PREFIX)include -name CVS | xargs $(RM) -r;
++	-chown -R `id | sed 's/^uid=\([0-9]*\).*gid=\([0-9]*\).*$$/\1.\2/'` $(PREFIX)$(DEVEL_PREFIX)include
++
++# Installs header files and development library links.
++install_dev:
++	$(INSTALL) -d $(PREFIX)$(DEVEL_PREFIX)lib
++	-$(INSTALL) -m 644 lib/*.[ao] $(PREFIX)$(DEVEL_PREFIX)lib/
++	-@for i in `find $(PREFIX)$(DEVEL_PREFIX)lib -type d` ; do \
++	    chmod 755 $$i; chmod 644 $$i/*.h > /dev/null 2>&1; \
++	done;
++	-find $(PREFIX)$(DEVEL_PREFIX)lib -name CVS | xargs $(RM) -r;
++	-chown -R `id | sed 's/^uid=\([0-9]*\).*gid=\([0-9]*\).*$$/\1.\2/'` $(PREFIX)$(DEVEL_PREFIX)lib
+ ifeq ($(strip $(HAVE_SHARED)),y)
++ifneq ($(RUNTIME_PREFIX),$(DEVEL_PREFIX))
+ 	for i in `find lib/ -type l -name 'lib[a-zA-Z]*.so' | \
+ 	sed -e 's/lib\///'` ; do \
+ 		$(LN) -sf $(RUNTIME_PREFIX)lib/$$i.$(MAJOR_VERSION) \
+ 		$(PREFIX)$(DEVEL_PREFIX)lib/$$i; \
+ 	done;
+ ifeq ($(strip $(PTHREADS_DEBUG_SUPPORT)),y)
+-	ln -sf $(RUNTIME_PREFIX)lib/libthread_db.so.1 \
++	$(LN) -sf $(RUNTIME_PREFIX)lib/libthread_db.so.1 \
+ 		$(PREFIX)$(DEVEL_PREFIX)lib/libthread_db.so
+ endif
++endif
+ #	# If we build shared libraries then the static libs are PIC...
+ #	# Make _pic.a symlinks to make mklibs.py and similar tools happy.
+ 	for i in `find lib/  -type f -name '*.a' | sed -e 's/lib\///'` ; do \
+@@ -261,7 +277,6 @@
+ 	done;
+ endif
+ 
+-
+ # Installs run-time libraries and helper apps onto the host system
+ # allowing cross development.  If you want to deploy to a target 
+ # system, use the "install_target" target instead... 
+@@ -305,46 +320,46 @@
+ 
+ # configuration
+ # ---------------------------------------------------------------------------
+-extra/config/conf:
+-	make -C extra/config conf
++$(TOPDIR)extra/config/conf:
++	make -C $(TOPDIR)extra/config conf
+ 
+-extra/config/mconf:
+-	make -C extra/config ncurses mconf
++$(TOPDIR)extra/config/mconf:
++	make -C $(TOPDIR)extra/config ncurses mconf
+ 
+-menuconfig: extra/config/mconf
++menuconfig: $(TOPDIR)extra/config/mconf
+ 	$(RM) -r include/bits
+ 	$(INSTALL) -d include/bits
+-	@./extra/config/mconf extra/Configs/Config.in
++	@srctree=$(SRCTOPDIR) $(TOPDIR)extra/config/mconf $(SRCTOPDIR)extra/Configs/Config.in
+ 
+-config: extra/config/conf
++config: $(TOPDIR)extra/config/conf
+ 	$(RM) -r include/bits
+ 	$(INSTALL) -d include/bits
+-	@./extra/config/conf extra/Configs/Config.in
++	@srctree=$(SRCTOPDIR) $(TOPDIR)extra/config/conf $(SRCTOPDIR)extra/Configs/Config.in
+ 
+-oldconfig: extra/config/conf
++oldconfig: $(TOPDIR)extra/config/conf
+ 	$(RM) -r include/bits
+ 	$(INSTALL) -d include/bits
+-	@./extra/config/conf -o extra/Configs/Config.in
++	@srctree=$(SRCTOPDIR) $(TOPDIR)extra/config/conf -o $(SRCTOPDIR)extra/Configs/Config.in
+ 
+-randconfig: extra/config/conf
++randconfig: $(TOPDIR)extra/config/conf
+ 	$(RM) -r include/bits
+ 	$(INSTALL) -d include/bits
+-	@./extra/config/conf -r extra/Configs/Config.in
++	@srctree=$(SRCTOPDIR) $(TOPDIR)extra/config/conf -r $(SRCTOPDIR)extra/Configs/Config.in
+ 
+-allyesconfig: extra/config/conf
++allyesconfig: $(TOPDIR)extra/config/conf
+ 	$(RM) -r include/bits
+ 	$(INSTALL) -d include/bits
+-	@./extra/config/conf -y extra/Configs/Config.in
++	@srctree=$(SRCTOPDIR) $(TOPDIR)extra/config/conf -y $(SRCTOPDIR)extra/Configs/Config.in
+ 
+-allnoconfig: extra/config/conf
++allnoconfig: $(TOPDIR)extra/config/conf
+ 	$(RM) -r include/bits
+ 	$(INSTALL) -d include/bits
+-	@./extra/config/conf -n extra/Configs/Config.in
++	@srctree=$(SRCTOPDIR) $(TOPDIR)extra/config/conf -n $(SRCTOPDIR)extra/Configs/Config.in
+ 
+-defconfig: extra/config/conf
++defconfig: $(TOPDIR)extra/config/conf
+ 	$(RM) -r include/bits
+ 	$(INSTALL) -d include/bits
+-	@./extra/config/conf -d extra/Configs/Config.in
++	@srctree=$(SRCTOPDIR) $(TOPDIR)extra/config/conf -d $(SRCTOPDIR)extra/Configs/Config.in
+ 
+ 
+ clean:
+@@ -358,11 +373,11 @@
+ 	$(MAKE) -C libc/sysdeps/linux/common clean
+ 	$(MAKE) -C extra/locale clean
+ 	@set -e; \
+-	for i in `(cd $(TOPDIR)/libc/sysdeps/linux/common/sys; ls *.h)` ; do \
++	for i in `(cd $(SRCTOPDIR)/libc/sysdeps/linux/common/sys; ls *.h)` ; do \
+ 		$(RM) include/sys/$$i; \
+ 	done; \
+ 	if [ -d libc/sysdeps/linux/$(TARGET_ARCH)/sys ] ; then \
+-		for i in `(cd libc/sysdeps/linux/$(TARGET_ARCH)/sys; ls *.h)` ; do \
++		for i in `(cd $(SRCTOPDIR)libc/sysdeps/linux/$(TARGET_ARCH)/sys; ls *.h)` ; do \
+ 			$(RM) include/sys/$$i; \
+ 		done; \
+ 	fi;
+Index: Rules.mak
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/Rules.mak,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Rules.mak
+--- uClibc-0.9.23/Rules.mak	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/Rules.mak	8 Dec 2003 21:58:41 -0000
+@@ -45,6 +45,7 @@
+ 
+ INSTALL= install
+ LN= ln
++CP= cp
+ RM= rm -f
+ 
+ # Select the compiler needed to build binaries for your development system
+@@ -171,11 +172,11 @@
+ CPU_CFLAGS=$(subst ",, $(strip $(CPU_CFLAGS-y)))
+ # Some nice CFLAGS to work with
+ CFLAGS=$(XWARNINGS) $(OPTIMIZATION) $(XARCH_CFLAGS) $(CPU_CFLAGS) \
+-	-fno-builtin -nostdinc -D_LIBC -I$(TOPDIR)include -I.
++	-fno-builtin -nostdinc -D_LIBC -I$(TOPDIR)include -I. -I$(SRCDIR)
+ 
+ ifeq ($(DODEBUG),y)
+     #CFLAGS += -g3
+-    CFLAGS = $(XWARNINGS) -O0 -g3 $(CPU_CFLAGS) -fno-builtin -nostdinc -D_LIBC -I$(TOPDIR)include -I.
++    CFLAGS = $(XWARNINGS) -O0 -g3 $(CPU_CFLAGS) -fno-builtin -nostdinc -D_LIBC -I$(TOPDIR)include -I. -I$(SRCDIR)
+     LDFLAGS:= $(CPU_LDFLAGS-y) -shared --warn-common --warn-once -z combreloc
+     STRIPTOOL:= true -Since_we_are_debugging
+ else
+Index: relocate
+===================================================================
+RCS file: relocate
+diff -N relocate
+--- /dev/null	1 Jan 1970 00:00:00 -0000
++++ uClibc-0.9.23/relocate	10 Dec 2003 00:39:08 -0000
+@@ -0,0 +1,115 @@
++#!/usr/bin/perl
++#
++# relocate : relocate the uClibc build to a different directory than the
++#            source is contained in.
++#    command-line-arguments: none
++#    calling requirements: execute when the CWD (current working directory)
++#                          is the directory you want to relocate the build to.
++#                          e.g.  suppose you untarred the uClibc source into
++#                          source/uClibc-0.9.23 and you wanted to build in
++#                          build/uclibc-mytarget.  Then you should execute:
++#                             cd build
++#                             mkdir uclibc-mytarget
++#                             cd uclibc-mytarget
++#                             ../../source/uClibc-0.9.23/relocate
++#                          Yes, relocate is intended to work analagously to
++#                          GNU autoconf's configure script in that respect,
++#                          except that it doesn't have any configure options.
++#                          You may call the relocate script through either a
++#                          relative or a fully qualified pathname.  Whichever
++#                          way you do will be reflected in the altered
++#                          directory definitions in your build Makefiles.
++#    results: after running relocate, you may run make in your new build
++#             directory, and expect it to work just like if you had been
++#             using it directly in the source tree, and you may expect the
++#             following assumptions to hold true:
++#               1) Nothing in the source directory will be modified or created
++#                  by making any target in the build directory.
++#               2) All installable targets (things that get copied "somewhere
++#                  more permanent" during a make install* will exist in the
++#                  build directory.
++#               3) There will be no symlinks from the build directory to the
++#                  original source directory.
++
++
++# The following files will be copied to the new build directory literally.
++# If directory names are given, the entire contents of those directories
++# will be copied recursively.
++@literalcopies = ("include", "test/Config");
++
++use Errno;
++
++# First, extract the path back to the source.
++$0 =~ /relocate$/ || die("Program is not called relocate.\n");
++$path_to_source = $0;
++$path_to_source =~ s/relocate$//;
++
++# Next, create a parallel set of directories to the source tree.
++open(DIRNAMES, "find $path_to_source -type d -print |") ||
++    die("Couldn't run find: $!\n");
++while (<DIRNAMES>) {
++    chomp();
++    s/^${path_to_source}//;
++    next if /\/CVS$/ || /^CVS$/ || /^$/;
++    mkdir($_) || $!{EEXIST} || die("Couldn't create directory $_ : $!\n");
++}
++close(DIRNAMES);
++
++# Copy any files from the source tree that were tagged at the top for
++# literal copy-over.
++foreach $lcfile (@literalcopies) {
++    $destfile = "./" . $lcfile;
++    $destfile =~ s/^((.*\/)*)([^\/]+)$/$1/ if -d "${path_to_source}${lcfile}";
++#    printf("/bin/cp -fLr ${path_to_source}${lcfile} $destfile\n");
++    system("/bin/cp", "-fLr", "${path_to_source}${lcfile}", "$destfile") == 0 ||
++        die("Failed to run /bin/cp : $!\n");
++    if ($?) {
++        $signum = $? & 127;
++        $exitval = $? >> 8;
++        if ($signum) {
++            die("/bin/cp was killed by signal $signum\n");
++        } else {
++            die("/bin/cp exited with error code $exitval\n");
++        }
++    }
++}
++
++# Now the real magic: copy over the Makefiles, substituting the appropriate
++# values for the SRC*DIR= definitions as we go.
++$absolute_path = 0;
++$absolute_path = 1 if $path_to_source =~ /^[\/\\]/;
++$absolute_path = 1 if $path_to_source =~ /^[cCdD]:[\/\\]/;
++$tree_reverse = "";   # Reassigned once per Makefile if !$absolute_path,
++                      # Never reassigned if $absolute_path
++open(MFNAMES, "find $path_to_source -type f -name Makefile -print |") ||
++    die("Couldn't run find: $!\n");
++while (<MFNAMES>) {
++    chomp();
++    open(MFIN, "$_") || die("Failed to open $_ for reading : $!\n");
++    s/^${path_to_source}//;
++    unlink($_) || $!{ENOENT} || die("Couldn't delete $_ : $!\n");
++    open(MFOUT, "> $_") || die("Failed to open $_ for writing : $!\n");
++    s/Makefile$//;
++    $tree_relative = $_;
++    if (!$absolute_path) {
++        if ($tree_relative eq "") {
++            $tree_reverse = "";
++        } else {
++            @_ = split(/\//, $tree_relative);
++            $tree_reverse = "../" x ($#_ + 1 - $[);
++        }
++    }
++    $srctopdir = $tree_reverse . $path_to_source;
++    $srcdir = $srctopdir . $tree_relative;
++    $srctestdir = $srctopdir . "test/";
++    while (<MFIN>) {
++        s/^(SRCDIR\s*=\s*)[^#\n]*/$1$srcdir/;
++        s/^(SRCTOPDIR\s*=\s*)[^#\n]*/$1$srctopdir/;
++        s/^(SRCTESTDIR\s*=\s*)[^#\n]*/$1$srctestdir/;
++        print(MFOUT $_);
++    }
++    close(MFOUT);
++    close(MFIN);
++}
++close(MFNAMES);
++
+Index: extra/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/extra/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/extra/Makefile	4 Dec 2003 01:27:58 -0000	1.1.1.1
++++ uClibc-0.9.23/extra/Makefile	9 Dec 2003 01:43:34 -0000
+@@ -21,8 +21,10 @@
+ # other sundry sources.  Files within this library are copyright by their
+ # respective copyright holders.
+ 
++SRCDIR=./
+ TOPDIR=../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../
++include $(SRCTOPDIR)Rules.mak
+ LIBC=$(TOPDIR)libc.a
+ 
+ 
+Index: extra/config/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/extra/config/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/extra/config/Makefile	4 Dec 2003 01:27:58 -0000	1.1.1.1
++++ uClibc-0.9.23/extra/config/Makefile	10 Dec 2003 05:09:16 -0000
+@@ -16,8 +16,10 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TOPDIR=../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ all: ncurses conf mconf
+ 
+@@ -47,7 +49,7 @@
+ CONF_SRC  =conf.c
+ MCONF_SRC =mconf.c checklist.c menubox.c textbox.c yesno.c inputbox.c util.c msgbox.c
+ SHARED_SRC=zconf.tab.c
+-SHARED_DEPS:=lkc.h lkc_proto.h lkc_defs.h expr.h zconf.tab.h
++SHARED_DEPS:=$(SRCDIR)lkc.h $(SRCDIR)lkc_proto.h lkc_defs.h $(SRCDIR)expr.h zconf.tab.h
+ CONF_OBJS =$(patsubst %.c,%.o, $(CONF_SRC))
+ MCONF_OBJS=$(patsubst %.c,%.o, $(MCONF_SRC))
+ SHARED_OBJS=$(patsubst %.c,%.o, $(SHARED_SRC))
+@@ -58,13 +60,13 @@
+ mconf: $(MCONF_OBJS) $(SHARED_OBJS)
+ 	$(HOSTCC) $(NATIVE_LDFLAGS) $^ -o $@ $(LIBS)
+ 
+-$(CONF_OBJS): %.o : %.c $(SHARED_DEPS)
+-	$(HOSTCC) $(HOSTCFLAGS) -I. -c $< -o $@
++$(CONF_OBJS): %.o : $(SRCDIR)%.c $(SHARED_DEPS)
++	$(HOSTCC) $(HOSTCFLAGS) -I. -I$(SRCDIR) -c $< -o $@
+ 
+-$(MCONF_OBJS): %.o : %.c $(SHARED_DEPS)
+-	$(HOSTCC) $(HOSTCFLAGS) $(HOSTNCURSES) -I. -c $< -o $@
++$(MCONF_OBJS): %.o : $(SRCDIR)%.c $(SHARED_DEPS)
++	$(HOSTCC) $(HOSTCFLAGS) $(HOSTNCURSES) -I. -I$(SRCDIR) -c $< -o $@
+ 
+-lkc_defs.h: lkc_proto.h
++lkc_defs.h: $(SRCDIR)lkc_proto.h
+ 	@sed < $< > $@ 's/P(\([^,]*\),.*/#define \1 (\*\1_p)/'
+ 
+ ###
+@@ -75,27 +77,27 @@
+ 
+ ifdef LKC_GENPARSER
+ 
+-%.tab.c %.tab.h: %.y
++%.tab.c %.tab.h: $(SRCDIR)%.y
+ 	bison -t -d -v -b $* -p $(notdir $*) $<
+ 
+-lex.%.c: %.l
++lex.%.c: $(SRCDIR)%.l
+ 	flex -P$(notdir $*) -o$@ $<
+ else
+ 
+ lex.zconf.o: lex.zconf.c $(SHARED_DEPS)
+-	$(HOSTCC) $(HOSTCFLAGS) -I. -c $< -o $@
++	$(HOSTCC) $(HOSTCFLAGS) -I. -I$(SRCDIR) -c $< -o $@
+ 
+-lex.zconf.c: lex.zconf.c_shipped
+-	cp lex.zconf.c_shipped lex.zconf.c
++lex.zconf.c: $(SRCDIR)lex.zconf.c_shipped
++	$(CP) -f $< $@
+ 
+-zconf.tab.o: zconf.tab.c lex.zconf.c confdata.c expr.c symbol.c menu.c $(SHARED_DEPS)
+-	$(HOSTCC) $(HOSTCFLAGS) -I. -c $< -o $@
++zconf.tab.o: zconf.tab.c lex.zconf.c $(SRCDIR)confdata.c $(SRCDIR)expr.c $(SRCDIR)symbol.c $(SRCDIR)menu.c $(SHARED_DEPS)
++	$(HOSTCC) $(HOSTCFLAGS) -I. -I$(SRCDIR) -c $< -o $@
+ 
+-zconf.tab.c: zconf.tab.c_shipped
+-	cp zconf.tab.c_shipped zconf.tab.c
++zconf.tab.c: $(SRCDIR)zconf.tab.c_shipped
++	$(CP) -f $< $@
+ 
+-zconf.tab.h: zconf.tab.h_shipped
+-	cp zconf.tab.h_shipped zconf.tab.h
++zconf.tab.h: $(SRCDIR)zconf.tab.h_shipped
++	$(CP) -f $< $@
+ endif
+ 
+ .PHONY: ncurses
+Index: extra/locale/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/extra/locale/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/extra/locale/Makefile	4 Dec 2003 01:27:58 -0000	1.1.1.1
++++ uClibc-0.9.23/extra/locale/Makefile	9 Dec 2003 19:23:54 -0000
+@@ -1,7 +1,10 @@
+ 
+-TOPDIR = ../../
++SRCDIR=./
++TOPDIR=../../
++SRCTOPDIR=../../
+ EXTRA_LOCALE_DIR:=${shell cd $(TOPDIR)/extra/locale && pwd}
+-include $(TOPDIR)Rules.mak
++SRCEXTRA_LOCALE_DIR:=${shell cd $(SRCTOPDIR)/extra/locale && pwd}
++include $(SRCTOPDIR)Rules.mak
+ 
+ CFLAGS_wc8bit=-DCTYPE_PACKED=1
+ CFLAGS_mmap=
+@@ -18,28 +21,28 @@
+ 	    echo " "; \
+ 	    echo "You do not have a codesets.txt file.  Please create this "; \
+ 	    echo "file in the extra/locale directory by running something like: "; \
+-	    echo -e "  find $(EXTRA_LOCALE_DIR)/charmaps -name \"*.pairs\" > \\"; \
++	    echo -e "  find $(SRCEXTRA_LOCALE_DIR)/charmaps -name \"*.pairs\" > \\"; \
+ 	    echo -e "        $(EXTRA_LOCALE_DIR)/codesets.txt"; \
+ 	    echo "and then edit that file to disable/enable the codesets you wish to support. "; \
+ 	    echo " "; \
+ 	    false; \
+ 	fi;
+ 
+-gen_wc8bit: gen_wc8bit.c
++gen_wc8bit: $(SRCDIR)gen_wc8bit.c
+ 	$(HOSTCC) $(HOSTCFLAGS) $(NATIVE_LDFLAGS) $(CFLAGS_wc8bit) -D__UCLIBC_GEN_LOCALE $^ -o $@
+ 
+ c8tables.h: gen_wc8bit codesets.txt
+ 	./gen_wc8bit `cat codesets.txt`
+ 
+-gen_wctype: gen_wctype.c
++gen_wctype: $(SRCDIR)gen_wctype.c
+ 	$(HOSTCC) $(HOSTCFLAGS) $(NATIVE_LDFLAGS) -D__UCLIBC_GEN_LOCALE $^ -o $@
+ 
+ # Warning! Beware tr_TR toupper/tolower exceptions!
+ wctables.h: gen_wctype
+ 	./gen_wctype en_US
+ 
+-gen_locale: gen_locale.c c8tables.h
+-	$(HOSTCC) $(HOSTCFLAGS) $(NATIVE_LDFLAGS) gen_locale.c -o $@
++gen_locale: $(SRCDIR)gen_locale.c c8tables.h
++	$(HOSTCC) $(HOSTCFLAGS) $(NATIVE_LDFLAGS) $< -o $@
+ 
+ locale_tables.h: gen_locale locales.txt
+ 	./gen_locale locales.txt
+@@ -48,8 +51,8 @@
+ 	grep "^#define" locale_tables.h > lt_defines.h
+ 	grep "^#define __lc" locale_collate.h >> lt_defines.h
+ 
+-gen_collate: gen_collate.c
+-	$(HOSTCC) $(HOSTCFLAGS) $(NATIVE_LDFLAGS) gen_collate.c -o $@
++gen_collate: $(SRCDIR)gen_collate.c
++	$(HOSTCC) $(HOSTCFLAGS) $(NATIVE_LDFLAGS) $< -o $@
+ 
+ locale_collate.h: gen_collate locale_tables.h
+ 	grep COL_IDX_ locale_tables.h | sed -e "s/^.*COL_IDX_\([^, ]*\).*$$/\1/" | sort | uniq | xargs ./gen_collate
+@@ -61,7 +64,7 @@
+ 	    echo "You do not have a locales.txt file in the extra/locale "; \
+ 	    echo "directory, Please copy the LOCALES file to locales.txt by "; \
+ 	    echo "running something like: "; \
+-	    echo "  cp $(EXTRA_LOCALE_DIR)/LOCALES \\ "; \
++	    echo "  cp $(SRCEXTRA_LOCALE_DIR)/LOCALES \\ "; \
+ 	    echo "      $(EXTRA_LOCALE_DIR)/locales.txt "; \
+ 	    echo "then edit locales.txt to disable/enable the locales you wish "; \
+ 	    echo "to support. "; \
+@@ -69,21 +72,21 @@
+ 	    false; \
+ 	fi;
+ 
+-gen_ldc: gen_ldc.c c8tables.h wctables.h locale_tables.h locale_collate.h
+-	$(HOSTCC) $(HOSTCFLAGS) $(NATIVE_LDFLAGS) $(CFLAGS_mmap) gen_ldc.c -o $@
++gen_ldc: $(SRCDIR)gen_ldc.c c8tables.h wctables.h locale_tables.h locale_collate.h
++	$(HOSTCC) $(HOSTCFLAGS) $(NATIVE_LDFLAGS) $(CFLAGS_mmap) $< -o $@
+ 
+ locale_data.c: gen_ldc
+ 	./gen_ldc
+ 
+-uClibc_locale_data.h: c8tables.h wctables.h lt_defines.h locale_mmap.h
++uClibc_locale_data.h: c8tables.h wctables.h lt_defines.h $(SRCDIR)locale_mmap.h
+ 	grep -v "define __LC" lt_defines.h > uClibc_locale_data.h
+-	cat c8tables.h wctables.h locale_mmap.h >> uClibc_locale_data.h
++	cat c8tables.h wctables.h $(SRCDIR)locale_mmap.h >> uClibc_locale_data.h
+ 
+ links-target: locale_data.c uClibc_locale_data.h
+-	cat uClibc_locale_data.h | awk 'BEGIN{i=1}{ if ( /WANT_/ ) i = /endif/ ; else if (i) print $0 }' > ../../include/bits/uClibc_locale_data.h
++	cat uClibc_locale_data.h | awk 'BEGIN{i=1}{ if ( /WANT_/ ) i = /endif/ ; else if (i) print $0 }' > $(TOPDIR)include/bits/uClibc_locale_data.h
+ 
+ pregen:
+-	cat uClibc_locale_data.h | awk 'BEGIN{i=1}{ if ( /WANT_/ ) i = /endif/ ; else if (i) print $0 }' > ../../include/bits/uClibc_locale_data.h
++	cat uClibc_locale_data.h | awk 'BEGIN{i=1}{ if ( /WANT_/ ) i = /endif/ ; else if (i) print $0 }' > $(TOPDIR)include/bits/uClibc_locale_data.h
+ 
+ clean:
+ 	$(RM) *.[oa] *~ core
+Index: ldso/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/ldso/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/ldso/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/ldso/Makefile	10 Dec 2003 05:06:07 -0000
+@@ -20,8 +20,10 @@
+ # other sundry sources.  Files within this library are copyright by their
+ # respective copyright holders.
+ 
++SRCDIR=./
+ TOPDIR=../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../
++include $(SRCTOPDIR)Rules.mak
+ 
+ ALL_SUBDIRS = ldso libdl
+ 
+@@ -41,10 +43,10 @@
+ endif
+ 
+ headers:
+-	$(LN) -fs $(TOPDIR)../include/elf.h include/
+-	$(LN) -fs ../ldso/$(TARGET_ARCH)/boot1_arch.h include/
+-	$(LN) -fs ../ldso/$(TARGET_ARCH)/ld_syscalls.h include/
+-	$(LN) -fs ../ldso/$(TARGET_ARCH)/ld_sysdep.h include/
++	$(LN) -fs ../../include/elf.h include/
++	$(CP) -f $(SRCDIR)ldso/$(TARGET_ARCH)/boot1_arch.h include/
++	$(CP) -f $(SRCDIR)ldso/$(TARGET_ARCH)/ld_syscalls.h include/
++	$(CP) -f $(SRCDIR)ldso/$(TARGET_ARCH)/ld_sysdep.h include/
+ 
+ clean:
+ 	set -e ; for d in $(ALL_SUBDIRS) ; do $(MAKE) -C $$d $@ ; done
+Index: ldso/ldso/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/ldso/ldso/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/ldso/ldso/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/ldso/ldso/Makefile	10 Dec 2003 05:37:58 -0000
+@@ -22,19 +22,23 @@
+ # respective copyright holders.
+ 
+ 
++SRCDIR=./
+ TOPDIR=../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../
++include $(SRCTOPDIR)Rules.mak
+ LDSO_FULLNAME=ld-uClibc-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so
+ 
+ 
+ XXFLAGS=$(XWARNINGS) $(OPTIMIZATION) $(XARCH_CFLAGS) $(CPU_CFLAGS) $(PICFLAG) \
+ 	-DUCLIBC_RUNTIME_PREFIX=\"$(RUNTIME_PREFIX)\" \
+-	-fno-builtin -nostdinc -I$(TOPDIR)ldso/include -I. -I$(TOPDIR)include
++	-fno-builtin -nostdinc -I$(TOPDIR)ldso/include \
++	-I$(SRCTOPDIR)ldso/include -I. -I$(SRCDIR) -I$(TOPDIR)include
+ 
+ ifeq ($(DODEBUG),y)
+ XXFLAGS=$(XWARNINGS) $(XARCH_CFLAGS) $(CPU_CFLAGS) $(PICFLAG) \
+ 	-DUCLIBC_RUNTIME_PREFIX=\"$(RUNTIME_PREFIX)\" \
+-	-fno-builtin -nostdinc -I$(TOPDIR)ldso/include -I. -I$(TOPDIR)include
++	-fno-builtin -nostdinc -I$(TOPDIR)ldso/include \
++	-I$(SRCTOPDIR)ldso/include -I. -I$(SRCDIR) -I$(TOPDIR)include
+ endif
+ 
+ ifeq ($(TARGET_ARCH),powerpc)
+@@ -49,8 +53,8 @@
+ 
+ CSRC= ldso.c #hash.c readelflib1.c $(TARGET_ARCH)/elfinterp.c
+ COBJS=$(patsubst %.c,%.o, $(CSRC))
+-ASRC=$(shell ls $(TARGET_ARCH)/*.S)
+-AOBJS=$(patsubst %.S,%.o, $(ASRC))
++ASRC=$(shell ls $(SRCDIR)$(TARGET_ARCH)/*.S)
++AOBJS=$(patsubst %.S,%.o, $(TARGET_ARCH)/$(notdir $(ASRC)))
+ OBJS=$(AOBJS) $(COBJS)
+ 
+ ifneq ($(strip $(DODEBUG)),y)
+@@ -80,18 +84,18 @@
+ 
+ _dl_progname.h: Makefile
+ 	echo "const char *_dl_progname=\""$(UCLIBC_LDSO)"\";" > _dl_progname.h
+-	echo "#include \"$(TARGET_ARCH)/elfinterp.c\"" >> _dl_progname.h
++	echo "#include \"$(SRCDIR)$(TARGET_ARCH)/elfinterp.c\"" >> _dl_progname.h
+ 
+ 
+-$(COBJS): %.o : %.c
+-	$(CC) $(XXFLAGS) -I../libdl -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(COBJS): %.o : $(SRCDIR)%.c
++	$(CC) $(XXFLAGS) -I$(SRCDIR)../libdl -c $< -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(AOBJS): %.o : %.S
+-	$(CC) $(XXFLAGS) -I../libdl -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(AOBJS): %.o : $(SRCDIR)%.S
++	$(CC) $(XXFLAGS) -I$(SRCDIR)../libdl -c $< -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-ldso.o: ldso.c hash.c readelflib1.c $(TARGET_ARCH)/elfinterp.c _dl_progname.h
++ldso.o: $(SRCDIR)ldso.c $(SRCDIR)hash.c $(SRCDIR)readelflib1.c $(SRCDIR)$(TARGET_ARCH)/elfinterp.c _dl_progname.h
+ 
+ clean:
+ 	$(RM) $(UCLIBC_LDSO)* $(OBJS) $(LDSO_FULLNAME)* core *.o *.a *.s *.i _dl_progname.h ldso.h *~
+Index: ldso/libdl/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/ldso/libdl/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/ldso/libdl/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/ldso/libdl/Makefile	10 Dec 2003 05:12:24 -0000
+@@ -18,17 +18,21 @@
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
+ 
++SRCDIR=./
+ TOPDIR=../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ XXFLAGS=$(XWARNINGS) $(OPTIMIZATION) $(XARCH_CFLAGS) $(CPU_CFLAGS) \
+ 	-DUCLIBC_RUNTIME_PREFIX=\"$(RUNTIME_PREFIX)\" \
+-	-fno-builtin -nostdinc -D_LIBC -I$(TOPDIR)ldso/include -I. -I$(TOPDIR)include
++	-fno-builtin -nostdinc -D_LIBC -I$(TOPDIR)ldso/include \
++	-I$(SRCTOPDIR)ldso/include -I. -I$(SRCDIR) -I$(TOPDIR)include
+ 
+ ifeq ($(DODEBUG),y)
+ XXFLAGS=$(XWARNINGS) -O0 -g3 $(XARCH_CFLAGS) $(CPU_CFLAGS) \
+ 	-DUCLIBC_RUNTIME_PREFIX=\"$(RUNTIME_PREFIX)\" \
+-	-fno-builtin -nostdinc -D_LIBC -I$(TOPDIR)ldso/include -I. -I$(TOPDIR)include
++	-fno-builtin -nostdinc -D_LIBC -I$(TOPDIR)ldso/include \
++	-I$(SRCTOPDIR)ldso/include -I. -I$(SRCDIR) -I$(TOPDIR)include
+ endif
+ 
+ XXFLAGS+=$(shell $(CC) -print-search-dirs | sed -ne "s/install: *\(.*\)/-I\1include/gp")
+@@ -61,13 +65,13 @@
+ 	$(INSTALL) -m 644 $(LIBDL) $(TOPDIR)lib
+ 
+ 
+-dlib.o: dlib.c
+-	$(CC) $(XXFLAGS_NOPIC) -c dlib.c -o dlib.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++dlib.o: $(SRCDIR)dlib.c
++	$(CC) $(XXFLAGS_NOPIC) -c $< -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-dlib_pic.o: dlib.c
+-	$(CC) $(XXFLAGS) -c dlib.c -o dlib_pic.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++dlib_pic.o: $(SRCDIR)dlib.c
++	$(CC) $(XXFLAGS) -c $< -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ $(OBJ): Makefile
+ 
+Index: libc/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/Makefile	8 Dec 2003 21:12:37 -0000
+@@ -27,8 +27,10 @@
+ #
+ #--------------------------------------------------------
+ 
++SRCDIR=./
+ TOPDIR=../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../
++include $(SRCTOPDIR)Rules.mak
+ 
+ ifeq ($(strip $(UCLIBC_CTOR_DTOR)),y)
+ CRTOBJS=../../lib/crti.o ../../lib/crt0.o ../../lib/crtn.o
+Index: libc/inet/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/inet/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/inet/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/inet/Makefile	6 Dec 2003 02:21:06 -0000
+@@ -21,8 +21,10 @@
+ # other sundry sources.  Files within this library are copyright by their
+ # respective copyright holders.
+ 
++SRCDIR=./
+ TOPDIR=../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ ifeq ($(strip $(UCLIBC_HAS_RPC)),y)
+ 	DIRS=rpc
+@@ -66,21 +68,21 @@
+ ar-target: $(OBJS)
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 
+-$(MOBJ): $(MSRC)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(MOBJ): $(SRCDIR)$(MSRC)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(MOBJ2): $(MSRC2)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(MOBJ2): $(SRCDIR)$(MSRC2)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(MOBJ3): $(MSRC3)
++$(MOBJ3): $(SRCDIR)$(MSRC3)
+ 	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ clean: subdirs_clean
+ 	$(RM) *.[oa] *~ core
+Index: libc/inet/rpc/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/inet/rpc/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/inet/rpc/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/inet/rpc/Makefile	6 Dec 2003 02:21:03 -0000
+@@ -21,9 +21,11 @@
+ # other sundry sources.  Files within this library are copyright by their
+ # respective copyright holders.
+ 
++SRCDIR=./
+ TOPDIR=../../../
+-include $(TOPDIR)Rules.mak
+-CFLAGS+=-I$(TOPDIR)libpthread/linuxthreads/sysdeps/pthread
++SRCTOPDIR=../../../
++include $(SRCTOPDIR)Rules.mak
++CFLAGS+=-I$(SRCTOPDIR)libpthread/linuxthreads/sysdeps/pthread
+ 
+ ifeq ($(strip $(UCLIBC_HAS_FULL_RPC)),y)
+ CSRC :=auth_none.c auth_unix.c authunix_prot.c bindresvport.c \
+@@ -57,7 +59,7 @@
+ ar-target: $(LIBC)
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+ 	$(STRIPTOOL) -x -R .note -R .comment $*.o
+ 
+Index: libc/misc/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/misc/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/misc/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/misc/Makefile	6 Dec 2003 02:28:46 -0000
+@@ -21,8 +21,10 @@
+ # other sundry sources.  Files within this library are copyright by their
+ # respective copyright holders.
+ 
++SRCDIR=./
+ TOPDIR=../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ 
+ DIRS = assert ctype dirent file fnmatch internals \
+Index: libc/misc/assert/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/misc/assert/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/misc/assert/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/misc/assert/Makefile	6 Dec 2003 02:32:51 -0000
+@@ -21,8 +21,10 @@
+ # other sundry sources.  Files within this library are copyright by their
+ # respective copyright holders.
+ 
++SRCDIR=./
+ TOPDIR=../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ CSRC=__assert.c
+ COBJS=$(patsubst %.c,%.o, $(CSRC))
+@@ -35,9 +37,9 @@
+ ar-target: $(OBJS)
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ clean:
+ 	$(RM) *.[oa] *~ core
+Index: libc/misc/ctype/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/misc/ctype/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/misc/ctype/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/misc/ctype/Makefile	6 Dec 2003 02:29:51 -0000
+@@ -21,8 +21,10 @@
+ # other sundry sources.  Files within this library are copyright by their
+ # respective copyright holders.
+ 
++SRCDIR=./
+ TOPDIR=../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ MSRC=ctype.c
+ MOBJ=	isalnum.o isalpha.o isascii.o iscntrl.o isdigit.o \
+@@ -54,13 +56,13 @@
+ ar-target: $(OBJS)
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 
+-$(MOBJ): $(MSRC)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(MOBJ): $(SRCDIR)$(MSRC)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(MOBJx): $(MSRC)
+-	$(CC) $(CFLAGS) -DL_$* -D__UCLIBC_DO_XLOCALE $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(MOBJx): $(SRCDIR)$(MSRC)
++	$(CC) $(CFLAGS) -DL_$* -D__UCLIBC_DO_XLOCALE $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ $(OBJS): Makefile
+ 
+Index: libc/misc/dirent/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/misc/dirent/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/misc/dirent/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/misc/dirent/Makefile	6 Dec 2003 02:33:53 -0000
+@@ -21,8 +21,10 @@
+ # other sundry sources.  Files within this library are copyright by their
+ # respective copyright holders.
+ 
++SRCDIR=./
+ TOPDIR=../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ CSRC=alphasort.c closedir.c dirfd.c opendir.c readdir.c rewinddir.c scandir.c \
+      	seekdir.c telldir.c readdir64.c alphasort64.c scandir64.c readdir_r.c \
+@@ -37,9 +39,9 @@
+ ar-target: $(OBJS)
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ clean:
+ 	$(RM) *.[oa] *~ core
+Index: libc/misc/error/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/misc/error/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/misc/error/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/misc/error/Makefile	6 Dec 2003 02:30:19 -0000
+@@ -16,8 +16,10 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TOPDIR=../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ CSRC=error.c
+ COBJS=$(patsubst %.c,%.o, $(CSRC))
+@@ -30,9 +32,9 @@
+ ar-target: $(OBJS)
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ clean:
+ 	$(RM) *.[oa] *~ core
+Index: libc/misc/file/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/misc/file/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/misc/file/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/misc/file/Makefile	6 Dec 2003 02:24:43 -0000
+@@ -21,8 +21,10 @@
+ # other sundry sources.  Files within this library are copyright by their
+ # respective copyright holders.
+ 
++SRCDIR=./
+ TOPDIR=../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ ifeq ($(strip $(UCLIBC_HAS_LFS)),y)
+ CSRC = lockf.c lockf64.c
+@@ -39,9 +41,9 @@
+ ar-target: $(OBJS)
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ clean:
+ 	$(RM) *.[oa] *~ core
+Index: libc/misc/fnmatch/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/misc/fnmatch/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/misc/fnmatch/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/misc/fnmatch/Makefile	6 Dec 2003 02:33:19 -0000
+@@ -21,8 +21,10 @@
+ # other sundry sources.  Files within this library are copyright by their
+ # respective copyright holders.
+ 
++SRCDIR=./
+ TOPDIR=../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ CSRC=fnmatch.c
+ COBJS=$(patsubst %.c,%.o, $(CSRC))
+@@ -35,9 +37,9 @@
+ ar-target: $(OBJS)
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ clean:
+ 	$(RM) *.[oa] *~ core
+Index: libc/misc/ftw/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/misc/ftw/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/misc/ftw/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/misc/ftw/Makefile	6 Dec 2003 02:23:39 -0000
+@@ -16,12 +16,10 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TOPDIR=../../../
+-include $(TOPDIR)Rules.mak
+-
+-CSRC=ftw.c
+-COBJS=$(patsubst %.c,%.o, $(CSRC))
+-OBJS=$(COBJS)
++SRCTOPDIR=../../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ MSRC=ftw.c
+ MOBJ=ftw.o ftw64.o
+@@ -34,9 +32,9 @@
+ ar-target: $(OBJS)
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 
+-$(MOBJ): $(MSRC)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(MOBJ): $(SRCDIR)$(MSRC)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ clean:
+ 	$(RM) *.[oa] *~ core
+Index: libc/misc/glob/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/misc/glob/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/misc/glob/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/misc/glob/Makefile	10 Dec 2003 04:59:27 -0000
+@@ -21,8 +21,10 @@
+ # other sundry sources.  Files within this library are copyright by their
+ # respective copyright holders.
+ 
++SRCDIR=./
+ TOPDIR=../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ CSRC=glob.c glob64.c glob-hooks.c
+ COBJS=$(patsubst %.c,%.o, $(CSRC))
+@@ -35,11 +37,11 @@
+ ar-target: $(OBJS)
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-glob64.o: glob64.c glob.c
++glob64.o: $(SRCDIR)glob64.c $(SRCDIR)glob.c
+ 
+ clean:
+ 	$(RM) *.[oa] *~ core
+Index: libc/misc/gnu/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/misc/gnu/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/misc/gnu/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/misc/gnu/Makefile	6 Dec 2003 02:24:09 -0000
+@@ -21,8 +21,10 @@
+ # other sundry sources.  Files within this library are copyright by their
+ # respective copyright holders.
+ 
++SRCDIR=./
+ TOPDIR=../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ CSRC=obstack.c
+ COBJS=$(patsubst %.c,%.o, $(CSRC))
+@@ -35,9 +37,9 @@
+ ar-target: $(OBJS)
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ clean:
+ 	$(RM) *.[oa] *~ core
+Index: libc/misc/internals/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/misc/internals/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/misc/internals/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/misc/internals/Makefile	6 Dec 2003 02:44:30 -0000
+@@ -21,8 +21,10 @@
+ # other sundry sources.  Files within this library are copyright by their
+ # respective copyright holders.
+ 
++SRCDIR=./
+ TOPDIR=../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ CSRC=__uClibc_main.c tempname.c errno.c __errno_location.c __h_errno_location.c
+ COBJS=$(patsubst %.c,%.o, $(CSRC))
+@@ -46,11 +48,11 @@
+ 
+ interp.o: interp.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ clean:
+ 	$(RM) *.[oa] interp.c *~ core
+Index: libc/misc/intl/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/misc/intl/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/misc/intl/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/misc/intl/Makefile	6 Dec 2003 02:26:13 -0000
+@@ -21,8 +21,10 @@
+ # other sundry sources.  Files within this library are copyright by their
+ # respective copyright holders.
+ 
++SRCDIR=./
+ TOPDIR=../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ MSRC= intl.c
+ MOBJ= __uClibc_dgettext.o __uClibc_dcgettext.o \
+@@ -37,13 +39,13 @@
+ ar-target: $(OBJS)
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 
+-$(MOBJ): $(MSRC)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(MOBJ): $(SRCDIR)$(MSRC)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ clean:
+ 	$(RM) *.[oa] *~ core
+Index: libc/misc/locale/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/misc/locale/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/misc/locale/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/misc/locale/Makefile	16 Dec 2003 00:27:20 -0000
+@@ -21,8 +21,10 @@
+ # other sundry sources.  Files within this library are copyright by their
+ # respective copyright holders.
+ 
++SRCDIR=./
+ TOPDIR=../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ MSRC= locale.c
+ MOBJ= setlocale.o localeconv.o _locale_init.o nl_langinfo.o
+@@ -38,7 +40,7 @@
+ 
+ DATA=
+ ifeq ($(UCLIBC_HAS_LOCALE),y)
+-	DATA = locale_data.o
++	DATA += locale_data.o
+ endif
+ 
+ OBJS= $(MOBJ) $(MOBJx) $(DATA)
+@@ -51,22 +53,22 @@
+ ar-target: $(OBJS)
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 
+-$(MOBJ): $(MSRC)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(MOBJ): $(SRCDIR)$(MSRC)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(MOBJx): $(MSRC)
+-	$(CC) $(CFLAGS) -DL_$* -D__UCLIBC_DO_XLOCALE $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(MOBJx): $(SRCDIR)$(MSRC)
++	$(CC) $(CFLAGS) -DL_$* -D__UCLIBC_DO_XLOCALE $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-locale_data.o:
+-	$(LN) -sf ../../../extra/locale/locale_data.c
+-	$(CC) $(CFLAGS) -c -D__WCHAR_ENABLED -I../../../extra/locale locale_data.c -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++locale_data.o: $(TOPDIR)extra/locale/locale_data.c
++	$(CC) $(CFLAGS) -c -D__WCHAR_ENABLED -I$(TOPDIR)extra/locale \
++		-I$(SRCTOPDIR)extra/locale $< -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ $(OBJS): Makefile
+ 
+ clean:
+-	$(RM) *.[oa] *~ core locale_data.c
++	$(RM) *.[oa] *~ core
+ 
+ .PHONY: data
+Index: libc/misc/mntent/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/misc/mntent/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/misc/mntent/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/misc/mntent/Makefile	6 Dec 2003 02:39:14 -0000
+@@ -21,8 +21,10 @@
+ # other sundry sources.  Files within this library are copyright by their
+ # respective copyright holders.
+ 
++SRCDIR=./
+ TOPDIR=../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ CSRC=mntent.c
+ COBJS=$(patsubst %.c,%.o, $(CSRC))
+@@ -35,9 +37,9 @@
+ ar-target: $(OBJS)
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ clean:
+ 	$(RM) *.[oa] *~ core
+Index: libc/misc/pthread/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/misc/pthread/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/misc/pthread/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/misc/pthread/Makefile	6 Dec 2003 02:22:06 -0000
+@@ -16,17 +16,19 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TOPDIR=../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../
++include $(SRCTOPDIR)Rules.mak
+ 
+-PTDIR = $(TOPDIR)libpthread/linuxthreads/
++PTDIR = $(SRCTOPDIR)libpthread/linuxthreads/
+ SYSDEPINC = -I$(PTDIR)sysdeps/unix/sysv/linux \
+             -I$(PTDIR)sysdeps/pthread \
+             -I$(PTDIR)sysdeps/unix/sysv \
+             -I$(PTDIR)sysdeps/unix/unix \
+             -I$(PTDIR)sysdeps/$(TARGET_ARCH) \
+             -I$(PTDIR)sysdeps \
+-            -I$(TOPDIR)libc/sysdeps/linux/$(TARGET_ARCH)
++            -I$(SRCTOPDIR)libc/sysdeps/linux/$(TARGET_ARCH)
+ CFLAGS += $(SYSDEPINC) -D_GNU_SOURCE
+ 
+ CSRC=no-tsd.c weaks.c
+@@ -40,9 +42,9 @@
+ ar-target: $(OBJS)
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ clean:
+ 	$(RM) *.[oa] *~ core
+Index: libc/misc/regex/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/misc/regex/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/misc/regex/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/misc/regex/Makefile	6 Dec 2003 02:31:07 -0000
+@@ -21,8 +21,10 @@
+ # other sundry sources.  Files within this library are copyright by their
+ # respective copyright holders.
+ 
++SRCDIR=./
+ TOPDIR=../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ CSRC=regex.c
+ COBJS=$(patsubst %.c,%.o, $(CSRC))
+@@ -35,9 +37,9 @@
+ ar-target: $(OBJS)
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ clean:
+ 	$(RM) *.[oa] *~ core
+Index: libc/misc/search/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/misc/search/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/misc/search/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/misc/search/Makefile	6 Dec 2003 02:40:42 -0000
+@@ -21,8 +21,10 @@
+ # other sundry sources.  Files within this library are copyright by their
+ # respective copyright holders.
+ 
++SRCDIR=./
+ TOPDIR=../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ MSRC1=tsearch.c
+ MOBJ1=tsearch.o tfind.o tdelete.o twalk.o tdestroy.o
+@@ -48,25 +50,25 @@
+ ar-target:  $(OBJS)
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 
+-$(MOBJ1): $(MSRC1)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(MOBJ1): $(SRCDIR)$(MSRC1)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(MOBJ2): $(MSRC2)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(MOBJ2): $(SRCDIR)$(MSRC2)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(MOBJ3): $(MSRC3)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(MOBJ3): $(SRCDIR)$(MSRC3)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(MOBJ4): $(MSRC4)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(MOBJ4): $(SRCDIR)$(MSRC4)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ clean:
+ 	$(RM) *.[oa] *~ core
+Index: libc/misc/statfs/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/misc/statfs/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/misc/statfs/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/misc/statfs/Makefile	6 Dec 2003 02:41:15 -0000
+@@ -19,8 +19,10 @@
+ # other sundry sources.  Files within this library are copyright by their
+ # respective copyright holders.
+ 
++SRCDIR=./
+ TOPDIR=../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ ifeq ($(strip $(UCLIBC_HAS_LFS)),y)
+ CSRC = fstatfs64.c statfs64.c statvfs.c statvfs64.c fstatvfs.c fstatvfs64.c
+@@ -38,9 +40,9 @@
+ ar-target: $(OBJS)
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ clean:
+ 	$(RM) *.[oa] *~ core
+Index: libc/misc/syslog/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/misc/syslog/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/misc/syslog/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/misc/syslog/Makefile	6 Dec 2003 02:41:44 -0000
+@@ -21,8 +21,10 @@
+ # other sundry sources.  Files within this library are copyright by their
+ # respective copyright holders.
+ 
++SRCDIR=./
+ TOPDIR=../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ CSRC=syslog.c
+ COBJS=$(patsubst %.c,%.o, $(CSRC))
+@@ -35,9 +37,9 @@
+ ar-target: $(OBJS)
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ clean:
+ 	$(RM) *.[oa] *~ core
+Index: libc/misc/sysvipc/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/misc/sysvipc/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/misc/sysvipc/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/misc/sysvipc/Makefile	6 Dec 2003 02:35:26 -0000
+@@ -21,8 +21,10 @@
+ # other sundry sources.  Files within this library are copyright by their
+ # respective copyright holders.
+ 
++SRCDIR=./
+ TOPDIR=../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ DIRS=
+ 
+@@ -48,21 +50,21 @@
+ ar-target: $(OBJS)
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 
+-$(MOBJ): $(MSRC)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(MOBJ): $(SRCDIR)$(MSRC)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(MOBJ2): $(MSRC2)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(MOBJ2): $(SRCDIR)$(MSRC2)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(MOBJ3): $(MSRC3)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(MOBJ3): $(SRCDIR)$(MSRC3)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ clean: subdirs_clean
+ 	$(RM) *.[oa] *~ core
+Index: libc/misc/time/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/misc/time/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/misc/time/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/misc/time/Makefile	6 Dec 2003 02:27:26 -0000
+@@ -21,8 +21,10 @@
+ # other sundry sources.  Files within this library are copyright by their
+ # respective copyright holders.
+ 
++SRCDIR=./
+ TOPDIR=../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ MSRC= time.c
+ MOBJ= asctime.o asctime_r.o clock.o ctime.o ctime_r.o gmtime.o gmtime_r.o \
+@@ -52,17 +54,17 @@
+ ar-target: $(OBJS)
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 
+-$(MOBJ): $(MSRC)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(MOBJ): $(SRCDIR)$(MSRC)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(MOBJx): $(MSRC)
+-	$(CC) $(CFLAGS) -DL_$* -D__UCLIBC_DO_XLOCALE $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(MOBJx): $(SRCDIR)$(MSRC)
++	$(CC) $(CFLAGS) -DL_$* -D__UCLIBC_DO_XLOCALE $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ clean:
+ 	$(RM) *.[oa] *~ core
+Index: libc/misc/ttyent/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/misc/ttyent/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/misc/ttyent/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/misc/ttyent/Makefile	6 Dec 2003 02:42:25 -0000
+@@ -16,8 +16,10 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TOPDIR=../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ CSRC=getttyent.c
+ COBJS=$(patsubst %.c,%.o, $(CSRC))
+@@ -30,9 +32,9 @@
+ ar-target: $(OBJS)
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ clean:
+ 	$(RM) *.[oa] *~ core
+Index: libc/misc/utmp/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/misc/utmp/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/misc/utmp/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/misc/utmp/Makefile	6 Dec 2003 02:27:57 -0000
+@@ -21,8 +21,10 @@
+ # other sundry sources.  Files within this library are copyright by their
+ # respective copyright holders.
+ 
++SRCDIR=./
+ TOPDIR=../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ CSRC=utent.c wtent.c
+ COBJS=$(patsubst %.c,%.o, $(CSRC))
+@@ -35,9 +37,9 @@
+ ar-target: $(OBJS)
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ clean:
+ 	$(RM) *.[oa] *~ core
+Index: libc/misc/wchar/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/misc/wchar/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/misc/wchar/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/misc/wchar/Makefile	6 Dec 2003 02:32:22 -0000
+@@ -21,8 +21,10 @@
+ # other sundry sources.  Files within this library are copyright by their
+ # respective copyright holders.
+ 
++SRCDIR=./
+ TOPDIR=../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ MSRC1=  wchar.c
+ MOBJ1=  btowc.o wctob.o mbsinit.o mbrlen.o mbrtowc.o wcrtomb.o mbsrtowcs.o \
+@@ -52,16 +54,16 @@
+ ar-target: $(OBJS)
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 
+-$(MOBJ1): $(MSRC1)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(MOBJ1): $(SRCDIR)$(MSRC1)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(MOBJ2): $(MSRC2)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(MOBJ2): $(SRCDIR)$(MSRC2)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-#iconv.target: wchar.c
+-#	$(TARGET_CC) $(CFLAGS) -DL_iconv_main wchar.c -o $@ $(LDADD_LIBFLOAT)
++#iconv.target: $(SRCDIR)wchar.c
++#	$(TARGET_CC) $(CFLAGS) -DL_iconv_main $< -o $@ $(LDADD_LIBFLOAT)
+ #	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ clean:
+Index: libc/misc/wctype/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/misc/wctype/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/misc/wctype/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/misc/wctype/Makefile	6 Dec 2003 02:43:24 -0000
+@@ -21,8 +21,10 @@
+ # other sundry sources.  Files within this library are copyright by their
+ # respective copyright holders.
+ 
++SRCDIR=./
+ TOPDIR=../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ MSRC= wctype.c
+ MOBJ=	iswalnum.o iswalpha.o iswcntrl.o iswdigit.o iswgraph.o \
+@@ -48,13 +50,13 @@
+ ar-target: $(OBJS)
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 
+-$(MOBJ): $(MSRC)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(MOBJ): $(SRCDIR)$(MSRC)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(MOBJx): $(MSRC)
+-	$(CC) $(CFLAGS) -DL_$* -D__UCLIBC_DO_XLOCALE $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(MOBJx): $(SRCDIR)$(MSRC)
++	$(CC) $(CFLAGS) -DL_$* -D__UCLIBC_DO_XLOCALE $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ clean:
+ 	$(RM) *.[oa] *~ core
+Index: libc/misc/wordexp/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/misc/wordexp/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/misc/wordexp/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/misc/wordexp/Makefile	6 Dec 2003 02:45:02 -0000
+@@ -16,8 +16,10 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TOPDIR=../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ CSRC=wordexp.c
+ COBJS=$(patsubst %.c,%.o, $(CSRC))
+@@ -30,9 +32,9 @@
+ ar-target: $(OBJS)
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ clean:
+ 	$(RM) *.[oa] *~ core
+Index: libc/pwd_grp/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/pwd_grp/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/pwd_grp/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/pwd_grp/Makefile	6 Dec 2003 02:48:18 -0000
+@@ -21,8 +21,10 @@
+ # other sundry sources.  Files within this library are copyright by their
+ # respective copyright holders.
+ 
++SRCDIR=./
+ TOPDIR=../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ MSRC=pwd_grp.c
+ MOBJ=	fgetpwent_r.o fgetgrent_r.o fgetpwent.o fgetgrent.o \
+@@ -53,18 +55,15 @@
+ ar-target: $(OBJS)
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 
+-$(MOBJ): $(MSRC)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(MOBJ): $(SRCDIR)$(MSRC)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(COBJ): %.o : %.c
++$(COBJ): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ $(OBJ): Makefile
+ 
+-__getgrent_r.c: config.h
+-initgroups.c: config.h
+-
+ clean:
+ 	$(RM) *.[oa] *~ core
+Index: libc/signal/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/signal/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/signal/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/signal/Makefile	9 Dec 2003 00:52:17 -0000
+@@ -16,8 +16,10 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TOPDIR=../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ CSRC= allocrtsig.c killpg.c raise.c sigaction.c sigaddset.c sigandset.c \
+ 	sigblock.c sigdelset.c sigempty.c sigfillset.c siggetmask.c sighold.c \
+@@ -35,9 +37,9 @@
+ ar-target: $(OBJS)
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ clean:
+ 	$(RM) *.[oa] *~ core
+Index: libc/stdio/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/stdio/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/stdio/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/stdio/Makefile	8 Dec 2003 21:14:59 -0000
+@@ -21,8 +21,10 @@
+ # other sundry sources.  Files within this library are copyright by their
+ # respective copyright holders.
+ 
++SRCDIR=./
+ TOPDIR=../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ # Note: The *64.o objects are empty when compiled without large file support.
+ #
+@@ -88,21 +90,21 @@
+ ar-target: $(OBJS)
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 
+-$(MOBJ): $(MSRC)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(MOBJ): $(SRCDIR)$(MSRC)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(MOBJ2): $(MSRC2)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(MOBJ2): $(SRCDIR)$(MSRC2)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(MOBJ3): $(MSRC3)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(MOBJ3): $(SRCDIR)$(MSRC3)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ $(OBJ): Makefile
+ 
+Index: libc/stdlib/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/stdlib/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/stdlib/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/stdlib/Makefile	9 Dec 2003 00:55:31 -0000
+@@ -21,8 +21,10 @@
+ # other sundry sources.  Files within this library are copyright by their
+ # respective copyright holders.
+ 
++SRCDIR=./
+ TOPDIR=../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ DIRS:=
+ ifeq ($(MALLOC),y)
+@@ -38,9 +40,9 @@
+        qsort.o bsearch.o \
+        llabs.o atoll.o strtoll.o strtoull.o _stdlib_strto_ll.o
+ # (aliases) strtoq.o strtouq.o
+-ifeq ($(UCLIBC_HAS_XLOCALE),y)
+ 
+ MOBJx =
++ifeq ($(UCLIBC_HAS_XLOCALE),y)
+ MOBJx += strtol_l.o strtoul_l.o _stdlib_strto_l_l.o \
+ 	 strtoll_l.o strtoull_l.o _stdlib_strto_ll_l.o
+ endif
+@@ -98,29 +100,29 @@
+ ar-target: $(OBJS)
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 
+-$(MOBJ): $(MSRC)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(MOBJ): $(SRCDIR)$(MSRC)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(MOBJx): $(MSRC)
+-	$(CC) $(CFLAGS) -DL_$* -D__UCLIBC_DO_XLOCALE $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(MOBJx): $(SRCDIR)$(MSRC)
++	$(CC) $(CFLAGS) -DL_$* -D__UCLIBC_DO_XLOCALE $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(MOBJ1): $(MSRC1)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(MOBJ1): $(SRCDIR)$(MSRC1)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(MOBJ1x): $(MSRC1)
+-	$(CC) $(CFLAGS) -DL_$* -D__UCLIBC_DO_XLOCALE $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(MOBJ1x): $(SRCDIR)$(MSRC1)
++	$(CC) $(CFLAGS) -DL_$* -D__UCLIBC_DO_XLOCALE $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(MOBJ2): $(MSRC2)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(MOBJ2): $(SRCDIR)$(MSRC2)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ $(OBJ): Makefile
+ 
+Index: libc/stdlib/malloc/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/stdlib/malloc/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/stdlib/malloc/Makefile	4 Dec 2003 01:27:57 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/stdlib/malloc/Makefile	9 Dec 2003 01:01:54 -0000
+@@ -21,8 +21,10 @@
+ # other sundry sources.  Files within this library are copyright by their
+ # respective copyright holders.
+ 
++SRCDIR=./
+ TOPDIR=../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ # calloc.c can be found at uClibc/libc/stdlib/calloc.c 
+ CSRC = malloc.c free.c realloc.c memalign.c \
+@@ -51,9 +53,9 @@
+ $(COBJS): heap.h
+ 
+ # Depend on uClinux_config.h to cache changes in __UCLIBC_MALLOC_DEBUGGING__
+-$(COBJS): %.o : %.c ../../../include/bits/uClibc_config.h
++$(COBJS): %.o : $(SRCDIR)%.c $(TOPDIR)include/bits/uClibc_config.h
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ clean:
+ 	$(RM) *.[oa] *~ core
+Index: libc/stdlib/malloc-930716/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/stdlib/malloc-930716/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/stdlib/malloc-930716/Makefile	4 Dec 2003 01:27:57 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/stdlib/malloc-930716/Makefile	9 Dec 2003 00:56:05 -0000
+@@ -21,8 +21,10 @@
+ # other sundry sources.  Files within this library are copyright by their
+ # respective copyright holders.
+ 
++SRCDIR=./
+ TOPDIR=../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ # calloc.c can be found at uClibc/libc/stdlib/calloc.c 
+ # valloc.c can be found at uClibc/libc/stdlib/valloc.c 
+@@ -37,9 +39,9 @@
+ ar-target: $(OBJS)
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ clean:
+ 	$(RM) *.[oa] *~ core
+Index: libc/string/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/string/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/string/Makefile	4 Dec 2003 01:27:57 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/string/Makefile	9 Dec 2003 01:03:58 -0000
+@@ -16,8 +16,10 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TOPDIR=../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ DIRS = 
+ ifeq ($(TARGET_ARCH),$(wildcard $(TARGET_ARCH)))
+@@ -66,25 +68,25 @@
+ ar-target: $(OBJS)
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 
+-$(MOBJ): $(MSRC)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(MOBJ): $(SRCDIR)$(MSRC)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(MOBJx): $(MSRC)
+-	$(CC) $(CFLAGS) -DL_$* -D__UCLIBC_DO_XLOCALE $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(MOBJx): $(SRCDIR)$(MSRC)
++	$(CC) $(CFLAGS) -DL_$* -D__UCLIBC_DO_XLOCALE $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(MOBJW): $(MSRC)
+-	$(CC) $(CFLAGS) -DWANT_WIDE -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(MOBJW): $(SRCDIR)$(MSRC)
++	$(CC) $(CFLAGS) -DWANT_WIDE -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(MOBJWx): $(MSRC)
+-	$(CC) $(CFLAGS) -DWANT_WIDE -DL_$* -D__UCLIBC_DO_XLOCALE $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(MOBJWx): $(SRCDIR)$(MSRC)
++	$(CC) $(CFLAGS) -DWANT_WIDE -DL_$* -D__UCLIBC_DO_XLOCALE $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ clean: subdirs_clean
+ 	$(RM) *.[oa] *~ core
+Index: libc/string/i386/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/string/i386/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/string/i386/Makefile	4 Dec 2003 01:27:57 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/string/i386/Makefile	9 Dec 2003 01:02:28 -0000
+@@ -16,8 +16,10 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TOPDIR=../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ MSRC= string.c
+ MOBJ= strcpy.o strncpy.o strcat.o strncat.o strcmp.o \
+@@ -32,13 +34,13 @@
+ ar-target: $(OBJS)
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 
+-$(MOBJ): $(MSRC)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(MOBJ): $(SRCDIR)$(MSRC)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ clean:
+ 	$(RM) *.[oa] *~ core
+Index: libc/sysdeps/linux/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/sysdeps/linux/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/sysdeps/linux/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/sysdeps/linux/Makefile	8 Dec 2003 21:56:06 -0000
+@@ -16,8 +16,10 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TOPDIR=../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ DIRS = common $(TARGET_ARCH)
+ ALL_SUBDIRS = arm common cris h8300 i386 m68k mips powerpc sh sh64 sparc v850
+Index: libc/sysdeps/linux/alpha/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/sysdeps/linux/alpha/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/sysdeps/linux/alpha/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/sysdeps/linux/alpha/Makefile	10 Dec 2003 05:07:29 -0000
+@@ -16,8 +16,10 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TOPDIR=../../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../../
++include $(SRCTOPDIR)Rules.mak
+ ASFLAGS=$(CFLAGS)
+ 
+ CRT0_SRC = crt0.S
+@@ -46,28 +48,28 @@
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 	cp $(CRT0_OBJ) $(TOPDIR)lib/
+ 
+-$(CRT0_OBJ): $(CRT0_SRC)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(CRT0_OBJ): $(SRCDIR)$(CRT0_SRC)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(SOBJS): %.o : %.S
++$(SOBJS): %.o : $(SRCDIR)%.S
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ ifeq ($(strip $(UCLIBC_CTOR_DTOR)),y)
+-crti.o: crti.S
+-	$(CC) $(SAFECFLAGS) -c crti.S -o crti.o
++crti.o: $(SRCDIR)crti.S
++	$(CC) $(SAFECFLAGS) -c $< -o $@
+ 
+ $(TOPDIR)lib/crti.o: crti.o
+ 	$(INSTALL) -d $(TOPDIR)lib/
+ 	cp crti.o $(TOPDIR)lib/
+ 
+-crtn.o: crtn.S
+-	$(CC) $(SAFECFLAGS) -c crtn.S -o crtn.o
++crtn.o: $(SRCDIR)crtn.S
++	$(CC) $(SAFECFLAGS) -c $< -o $@
+ 
+ $(TOPDIR)lib/crtn.o: crtn.o
+ 	$(INSTALL) -d $(TOPDIR)lib/
+@@ -83,8 +85,9 @@
+ 
+ 
+ headers:
+-	$(LN) -fs ../libc/sysdeps/linux/alpha/fpu_control.h $(TOPDIR)/include/
++	$(CP) -f $(SRCTOPDIR)libc/sysdeps/linux/alpha/fpu_control.h $(TOPDIR)include/
+ 
+ clean:
+ 	$(RM) *.[oa] *~ core
+ 	$(RM) bits/sysnum.h
++	$(RM) $(TOPDIR)include/fpu_control.h
+Index: libc/sysdeps/linux/arm/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/sysdeps/linux/arm/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/sysdeps/linux/arm/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/sysdeps/linux/arm/Makefile	10 Dec 2003 05:06:40 -0000
+@@ -16,8 +16,10 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TOPDIR=../../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../../
++include $(SRCTOPDIR)Rules.mak
+ ASFLAGS=$(CFLAGS)
+ 
+ CRT0_SRC = crt0.S
+@@ -47,28 +49,28 @@
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 	cp $(CRT0_OBJ) $(TOPDIR)lib/
+ 
+-$(CRT0_OBJ): $(CRT0_SRC)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(CRT0_OBJ): $(SRCDIR)$(CRT0_SRC)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(SOBJS): %.o : %.S
++$(SOBJS): %.o : $(SRCDIR)%.S
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ ifeq ($(strip $(UCLIBC_CTOR_DTOR)),y)
+-crti.o: crti.S
+-	$(CC) $(SAFECFLAGS) -c crti.S -o crti.o
++crti.o: $(SRCDIR)crti.S
++	$(CC) $(SAFECFLAGS) -c $< -o $@
+ 
+ $(TOPDIR)lib/crti.o: crti.o
+ 	$(INSTALL) -d $(TOPDIR)lib/
+ 	cp crti.o $(TOPDIR)lib/
+ 
+-crtn.o: crtn.S
+-	$(CC) $(SAFECFLAGS) -c crtn.S -o crtn.o
++crtn.o: $(SRCDIR)crtn.S
++	$(CC) $(SAFECFLAGS) -c $< -o $@
+ 
+ $(TOPDIR)lib/crtn.o: crtn.o
+ 	$(INSTALL) -d $(TOPDIR)lib/
+@@ -84,7 +86,7 @@
+ 
+ 
+ headers:
+-	$(LN) -fs ../libc/sysdeps/linux/arm/fpu_control.h $(TOPDIR)/include/
++	$(CP) -f $(SRCTOPDIR)libc/sysdeps/linux/arm/fpu_control.h $(TOPDIR)include/
+ 
+ clean:
+ 	$(RM) *.[oa] *~ core
+Index: libc/sysdeps/linux/common/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/sysdeps/linux/common/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/sysdeps/linux/common/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/sysdeps/linux/common/Makefile	10 Dec 2003 05:07:48 -0000
+@@ -16,8 +16,10 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TOPDIR=../../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ CSRC=	waitpid.c getdnnm.c gethstnm.c getcwd.c ptrace.c \
+ 	mkfifo.c setegid.c wait.c getpagesize.c seteuid.c \
+@@ -36,7 +38,7 @@
+ COBJS=$(patsubst %.c,%.o, $(CSRC))
+ 
+ MSRC=syscalls.c
+-MOBJ=$(shell ./list_syscalls.sh)
++MOBJ=$(shell $(SRCDIR)list_syscalls.sh $(SRCDIR)syscalls.c)
+ 
+ OBJ=$(COBJS) $(MOBJ)
+ 
+@@ -47,16 +49,17 @@
+ ar-target: $(OBJ)
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJ)
+ 
+-$(MOBJ): $(MSRC)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(MOBJ): $(SRCDIR)$(MSRC)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ headers:
+-	$(LN) -fs ../libc/sysdeps/linux/common/fpu_control.h $(TOPDIR)/include/
++	$(CP) -f $(SRCTOPDIR)libc/sysdeps/linux/common/fpu_control.h $(TOPDIR)include/
+ 
+ clean:
+ 	$(RM) *.[oa] *~ core crt[in].* *.S
++	$(RM) $(TOPDIR)include/fpu_control.h
+Index: libc/sysdeps/linux/common/list_syscalls.sh
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/sysdeps/linux/common/list_syscalls.sh,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 list_syscalls.sh
+--- uClibc-0.9.23/libc/sysdeps/linux/common/list_syscalls.sh	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/sysdeps/linux/common/list_syscalls.sh	10 Dec 2003 04:13:04 -0000
+@@ -1,4 +1,4 @@
+ #!/bin/sh
+-sed -ne 's/^.*_syscall[0-9].*([^,]*,\([^,)]*\).*/\1.o/gp' syscalls.c
++sed -ne 's/^.*_syscall[0-9].*([^,]*,\([^,)]*\).*/\1.o/gp' $1
+ 
+ 
+Index: libc/sysdeps/linux/common/str_syscalls.sh
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/sysdeps/linux/common/str_syscalls.sh,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 str_syscalls.sh
+--- uClibc-0.9.23/libc/sysdeps/linux/common/str_syscalls.sh	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/sysdeps/linux/common/str_syscalls.sh	10 Dec 2003 04:13:35 -0000
+@@ -20,7 +20,7 @@
+ echo "#define __NR__getdents __NR_getdents"
+ echo "#define __NR___ptrace __NR_ptrace"
+ echo
+-sed -ne 's/^[^\/]*_syscall[0-9].*([^,]*, *\([^,)]*\).*/printf("#define __STR_NR_\1 \\\"%d\\\"\\n", __NR_\1);/gp' syscalls.c
++sed -ne 's/^[^\/]*_syscall[0-9].*([^,]*, *\([^,)]*\).*/printf("#define __STR_NR_\1 \\\"%d\\\"\\n", __NR_\1);/gp' $1
+ echo
+ echo "printf(\"#define __STR_NR_exit     __STR_NR__exit\n\");"
+ echo "printf(\"#define __STR_NR_open    __STR_NR___open\n\");"
+Index: libc/sysdeps/linux/cris/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/sysdeps/linux/cris/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/sysdeps/linux/cris/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/sysdeps/linux/cris/Makefile	8 Dec 2003 21:42:45 -0000
+@@ -16,8 +16,10 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TOPDIR=../../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../../
++include $(SRCTOPDIR)Rules.mak
+ ASFLAGS=$(CFLAGS)
+ 
+ CRT0_SRC = crt0.c
+@@ -48,28 +50,28 @@
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 	cp $(CRT0_OBJ) $(TOPDIR)lib/
+ 
+-$(CRT0_OBJ): $(CRT0_SRC)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(CRT0_OBJ): $(SRCDIR)$(CRT0_SRC)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(SOBJS): %.o : %.S
++$(SOBJS): %.o : $(SRCDIR)%.S
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ ifeq ($(strip $(UCLIBC_CTOR_DTOR)),y)
+-crti.o: crti.S
+-	$(CC) $(SAFECFLAGS) -c crti.S -o crti.o
++crti.o: $(SRCDIR)crti.S
++	$(CC) $(SAFECFLAGS) -c $< -o $@
+ 
+ $(TOPDIR)lib/crti.o: crti.o
+ 	$(INSTALL) -d $(TOPDIR)lib/
+ 	cp crti.o $(TOPDIR)lib/
+ 
+-crtn.o: crtn.S
+-	$(CC) $(SAFECFLAGS) -c crtn.S -o crtn.o
++crtn.o: $(SRCDIR)crtn.S
++	$(CC) $(SAFECFLAGS) -c $< -o $@
+ 
+ $(TOPDIR)lib/crtn.o: crtn.o
+ 	$(INSTALL) -d $(TOPDIR)lib/
+Index: libc/sysdeps/linux/e1/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/sysdeps/linux/e1/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/sysdeps/linux/e1/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/sysdeps/linux/e1/Makefile	8 Dec 2003 21:20:19 -0000
+@@ -16,8 +16,10 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TOPDIR=../../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../../
++include $(SRCTOPDIR)Rules.mak
+ ASFLAGS=$(CFLAGS)
+ 
+ #FIXME -- this arch should include its own crti.S and crtn.S
+@@ -50,28 +52,28 @@
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 	cp $(CRT0_OBJ) $(TOPDIR)lib/$(CRT0_OBJ)
+ 
+-$(CRT0_OBJ): %.o : %.S
++$(CRT0_OBJ): %.o : $(SRCDIR)%.S
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(SOBJS): %.o : %.S
++$(SOBJS): %.o : $(SRCDIR)%.S
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ ifeq ($(strip $(UCLIBC_CTOR_DTOR)),y)
+-crti.o: crti.S
+-	$(CC) $(SAFECFLAGS) -c crti.S -o crti.o
++crti.o: $(SRCDIR)crti.S
++	$(CC) $(SAFECFLAGS) -c $< -o $@
+ 
+ $(TOPDIR)lib/crti.o: crti.o
+ 	$(INSTALL) -d $(TOPDIR)lib/
+ 	cp crti.o $(TOPDIR)lib/
+ 
+-crtn.o: crtn.S
+-	$(CC) $(SAFECFLAGS) -c crtn.S -o crtn.o
++crtn.o: $(SRCDIR)crtn.S
++	$(CC) $(SAFECFLAGS) -c $< -o $@
+ 
+ $(TOPDIR)lib/crtn.o: crtn.o
+ 	$(INSTALL) -d $(TOPDIR)lib/
+@@ -93,6 +95,6 @@
+ 	$(RM) *.[oa] *~ core
+ 	$(RM) bits/sysnum.h
+ ifneq ($(strip $(HAVE_ELF)),y)
+-	$(RM) $(TOPDIR)/include/float.h
++	$(RM) $(TOPDIR)include/float.h
+ endif
+ 
+Index: libc/sysdeps/linux/h8300/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/sysdeps/linux/h8300/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/sysdeps/linux/h8300/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/sysdeps/linux/h8300/Makefile	8 Dec 2003 22:00:05 -0000
+@@ -16,8 +16,10 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TOPDIR=../../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../../
++include $(SRCTOPDIR)Rules.mak
+ ASFLAGS=$(CFLAGS)
+ 
+ #FIXME -- this arch should include its own crti.S and crtn.S
+@@ -47,28 +49,28 @@
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 	cp $(CRT0_OBJ) $(TOPDIR)lib/
+ 
+-$(CRT0_OBJ): $(CRT0_SRC)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(CRT0_OBJ): $(SRCDIR)$(CRT0_SRC)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(SOBJS): %.o : %.S
++$(SOBJS): %.o : $(SRCDIR)%.S
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ ifeq ($(strip $(UCLIBC_CTOR_DTOR)),y)
+-crti.o: crti.S
+-	$(CC) $(SAFECFLAGS) -c crti.S -o crti.o
++crti.o: $(SRCDIR)crti.S
++	$(CC) $(SAFECFLAGS) -c $< -o $@
+ 
+ $(TOPDIR)lib/crti.o: crti.o
+ 	$(INSTALL) -d $(TOPDIR)lib/
+ 	cp crti.o $(TOPDIR)lib/
+ 
+-crtn.o: crtn.S
+-	$(CC) $(SAFECFLAGS) -c crtn.S -o crtn.o
++crtn.o: $(SRCDIR)crtn.S
++	$(CC) $(SAFECFLAGS) -c $< -o $@
+ 
+ $(TOPDIR)lib/crtn.o: crtn.o
+ 	$(INSTALL) -d $(TOPDIR)lib/
+@@ -88,6 +90,6 @@
+ clean:
+ 	$(RM) *.[oa] *~ core
+ ifneq ($(strip $(HAVE_ELF)),y)
+-	$(RM) $(TOPDIR)/include/float.h
++	$(RM) $(TOPDIR)include/float.h
+ endif
+ 
+Index: libc/sysdeps/linux/i386/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/sysdeps/linux/i386/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/sysdeps/linux/i386/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/sysdeps/linux/i386/Makefile	10 Dec 2003 05:06:47 -0000
+@@ -16,8 +16,10 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TOPDIR=../../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../../
++include $(SRCTOPDIR)Rules.mak
+ ASFLAGS=$(CFLAGS)
+ 
+ CRT0_SRC = crt0.S
+@@ -53,34 +55,34 @@
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 	cp $(CRT0_OBJ) $(TOPDIR)lib/
+ 
+-$(CRT0_OBJ): $(CRT0_SRC)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(CRT0_OBJ): $(SRCDIR)$(CRT0_SRC)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(SOBJS): %.o : %.S
++$(SOBJS): %.o : $(SRCDIR)%.S
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ ifeq ($(strip $(UCLIBC_PROFILING)),y)
+-gmon-start.S: ../common/gmon-start.c
+-	$(CC) $(SAFECFLAGS) -c $< -S -o $*.S
++gmon-start.S: $(SRCDIR)../common/gmon-start.c
++	$(CC) $(SAFECFLAGS) -c $< -S -o $@
+ gcrt1.o: $(CRT0_DEPS)
+ endif
+ 
+ ifeq ($(strip $(UCLIBC_CTOR_DTOR)),y)
+-crti.o: crti.S
+-	$(CC) $(SAFECFLAGS) -c crti.S -o crti.o
++crti.o: $(SRCDIR)crti.S
++	$(CC) $(SAFECFLAGS) -c $< -o $@
+ 
+ $(TOPDIR)lib/crti.o: crti.o
+ 	$(INSTALL) -d $(TOPDIR)lib/
+ 	cp crti.o $(TOPDIR)lib/
+ 
+-crtn.o: crtn.S
+-	$(CC) $(SAFECFLAGS) -c crtn.S -o crtn.o
++crtn.o: $(SRCDIR)crtn.S
++	$(CC) $(SAFECFLAGS) -c $< -o $@
+ 
+ $(TOPDIR)lib/crtn.o: crtn.o
+ 	$(INSTALL) -d $(TOPDIR)lib/
+@@ -96,7 +98,7 @@
+ 
+ 
+ headers:
+-	$(LN) -fs ../libc/sysdeps/linux/i386/fpu_control.h $(TOPDIR)/include/
++	$(CP) -f $(SRCTOPDIR)libc/sysdeps/linux/i386/fpu_control.h $(TOPDIR)include/
+ 
+ clean:
+ 	$(RM) *.[oa] *~ core
+Index: libc/sysdeps/linux/i960/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/sysdeps/linux/i960/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/sysdeps/linux/i960/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/sysdeps/linux/i960/Makefile	8 Dec 2003 21:44:22 -0000
+@@ -16,8 +16,10 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TOPDIR=../../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../../
++include $(SRCTOPDIR)Rules.mak
+ ASFLAGS=$(CFLAGS)
+ 
+ #FIXME -- this arch should include its own crti.S and crtn.S
+@@ -48,28 +50,28 @@
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 	cp $(CRT0_OBJ) $(TOPDIR)lib/
+ 
+-$(CRT0_OBJ): $(CRT0_SRC)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(CRT0_OBJ): $(SRCDIR)$(CRT0_SRC)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(SOBJS): %.o : %.S
++$(SOBJS): %.o : $(SRCDIR)%.S
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ ifeq ($(strip $(UCLIBC_CTOR_DTOR)),y)
+-crti.o: crti.S
+-	$(CC) $(SAFECFLAGS) -c crti.S -o crti.o
++crti.o: $(SRCDIR)crti.S
++	$(CC) $(SAFECFLAGS) -c $< -o $@
+ 
+ $(TOPDIR)lib/crti.o: crti.o
+ 	$(INSTALL) -d $(TOPDIR)lib/
+ 	cp crti.o $(TOPDIR)lib/
+ 
+-crtn.o: crtn.S
+-	$(CC) $(SAFECFLAGS) -c crtn.S -o crtn.o
++crtn.o: $(SRCDIR)crtn.S
++	$(CC) $(SAFECFLAGS) -c $< -o $@
+ 
+ $(TOPDIR)lib/crtn.o: crtn.o
+ 	$(INSTALL) -d $(TOPDIR)lib/
+Index: libc/sysdeps/linux/m68k/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/sysdeps/linux/m68k/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/sysdeps/linux/m68k/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/sysdeps/linux/m68k/Makefile	10 Dec 2003 05:07:07 -0000
+@@ -16,8 +16,10 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TOPDIR=../../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../../
++include $(SRCTOPDIR)Rules.mak
+ ASFLAGS=$(CFLAGS)
+ 
+ # If you're looking for vfork(), it is defined in include/unistd.h
+@@ -53,28 +55,28 @@
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 	cp $(CRT0_OBJ) $(TOPDIR)lib/
+ 
+-$(CRT0_OBJ): $(CRT0_SRC)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(CRT0_OBJ): $(SRCDIR)$(CRT0_SRC)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(SOBJS): %.o : %.S
++$(SOBJS): %.o : $(SRCDIR)%.S
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ ifeq ($(strip $(UCLIBC_CTOR_DTOR)),y)
+-crti.o: crti.S
+-	$(CC) $(SAFECFLAGS) -c crti.S -o crti.o
++crti.o: $(SRCDIR)crti.S
++	$(CC) $(SAFECFLAGS) -c $< -o $@
+ 
+ $(TOPDIR)lib/crti.o: crti.o
+ 	$(INSTALL) -d $(TOPDIR)lib/
+ 	cp crti.o $(TOPDIR)lib/
+ 
+-crtn.o: crtn.S
+-	$(CC) $(SAFECFLAGS) -c crtn.S -o crtn.o
++crtn.o: $(SRCDIR)crtn.S
++	$(CC) $(SAFECFLAGS) -c $< -o $@
+ 
+ $(TOPDIR)lib/crtn.o: crtn.o
+ 	$(INSTALL) -d $(TOPDIR)lib/
+@@ -92,9 +94,9 @@
+ headers:
+ ifneq ($(strip $(HAVE_ELF)),y)
+ 	echo "Working around compiler bug in the m68k-pic-coff toolchain"
+-	$(LN) -fs ../libc/sysdeps/linux/m68k/float.h $(TOPDIR)/include/
++	$(CP) -f $(SRCTOPDIR)libc/sysdeps/linux/m68k/float.h $(TOPDIR)include/
+ endif
+-	$(LN) -fs ../libc/sysdeps/linux/m68k/fpu_control.h $(TOPDIR)/include/
++	$(CP) -f $(SRCTOPDIR)libc/sysdeps/linux/m68k/fpu_control.h $(TOPDIR)include/
+ 
+ clean:
+ 	$(RM) *.[oa] *~ core
+Index: libc/sysdeps/linux/microblaze/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/sysdeps/linux/microblaze/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/sysdeps/linux/microblaze/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/sysdeps/linux/microblaze/Makefile	9 Dec 2003 00:48:58 -0000
+@@ -17,8 +17,10 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TOPDIR=../../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ #FIXME -- this arch should include its own crti.S and crtn.S
+ UCLIBC_CTOR_DTOR=n
+@@ -53,28 +55,28 @@
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 	cp $(CRT0_OBJ) $(TOPDIR)lib/
+ 
+-$(CRT0_OBJ): $(CRT0_SRC)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(CRT0_OBJ): $(SRCDIR)$(CRT0_SRC)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(SOBJS): %.o : %.S
++$(SOBJS): %.o : $(SRCDIR)%.S
+ 	$(CC) $(SFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ ifeq ($(strip $(UCLIBC_CTOR_DTOR)),y)
+-crti.o: crti.S
+-	$(CC) $(SAFECFLAGS) -c crti.S -o crti.o
++crti.o: $(SRCDIR)crti.S
++	$(CC) $(SAFECFLAGS) -c $< -o $@
+ 
+ $(TOPDIR)lib/crti.o: crti.o
+ 	$(INSTALL) -d $(TOPDIR)lib/
+ 	cp crti.o $(TOPDIR)lib/
+ 
+-crtn.o: crtn.S
+-	$(CC) $(SAFECFLAGS) -c crtn.S -o crtn.o
++crtn.o: $(SRCDIR)crtn.S
++	$(CC) $(SAFECFLAGS) -c $< -o $@
+ 
+ $(TOPDIR)lib/crtn.o: crtn.o
+ 	$(INSTALL) -d $(TOPDIR)lib/
+Index: libc/sysdeps/linux/mips/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/sysdeps/linux/mips/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/sysdeps/linux/mips/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/sysdeps/linux/mips/Makefile	10 Dec 2003 05:07:22 -0000
+@@ -16,8 +16,10 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TOPDIR=../../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../../
++include $(SRCTOPDIR)Rules.mak
+ ASFLAGS=$(CFLAGS)
+ 
+ CRT0_SRC = crt0.S
+@@ -45,29 +47,29 @@
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 	cp $(CRT0_OBJ) $(TOPDIR)lib/
+ 
+-$(CRT0_OBJ): $(CRT0_SRC)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(CRT0_OBJ): $(SRCDIR)$(CRT0_SRC)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(SOBJS): %.o : %.S
++$(SOBJS): %.o : $(SRCDIR)%.S
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ 
+ ifeq ($(strip $(UCLIBC_CTOR_DTOR)),y)
+-crti.o: crti.S
+-	$(CC) $(SAFECFLAGS) -c crti.S -o crti.o
++crti.o: $(SRCDIR)crti.S
++	$(CC) $(SAFECFLAGS) -c $< -o $@
+ 
+ $(TOPDIR)lib/crti.o: crti.o
+ 	$(INSTALL) -d $(TOPDIR)lib/
+ 	cp crti.o $(TOPDIR)lib/
+ 
+-crtn.o: crtn.S
+-	$(CC) $(SAFECFLAGS) -c crtn.S -o crtn.o
++crtn.o: $(SRCDIR)crtn.S
++	$(CC) $(SAFECFLAGS) -c $< -o $@
+ 
+ $(TOPDIR)lib/crtn.o: crtn.o
+ 	$(INSTALL) -d $(TOPDIR)lib/
+@@ -83,11 +85,12 @@
+ 
+ 
+ headers:
+-	$(LN) -fs ../libc/sysdeps/linux/mips/sgidefs.h $(TOPDIR)/include/
+-#	$(LN) -fs ../libc/sysdeps/linux/mips/regdef.h $(TOPDIR)/include/
+-	$(LN) -fs ../libc/sysdeps/linux/mips/fpu_control.h $(TOPDIR)/include/
++	$(CP) -f $(SRCTOPDIR)libc/sysdeps/linux/mips/sgidefs.h $(TOPDIR)include/
++#	$(CP) -f $(SRCTOPDIR)libc/sysdeps/linux/mips/regdef.h $(TOPDIR)include/
++	$(CP) -f $(SRCTOPDIR)libc/sysdeps/linux/mips/fpu_control.h $(TOPDIR)include/
+ 
+ clean:
+ 	$(RM) *.[oa] *~ core
+ 	$(RM) bits/sysnum.h
+-	$(RM) $(TOPDIR)/include/sgidefs.h
++	$(RM) $(TOPDIR)include/sgidefs.h $(TOPDIR)include/fpu_control.h \
++	    # $(TOPDIR)include/regdef.h
+Index: libc/sysdeps/linux/powerpc/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/sysdeps/linux/powerpc/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/sysdeps/linux/powerpc/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/sysdeps/linux/powerpc/Makefile	10 Dec 2003 05:07:56 -0000
+@@ -16,8 +16,10 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TOPDIR=../../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../../
++include $(SRCTOPDIR)Rules.mak
+ ASFLAGS=$(CFLAGS)
+ 
+ CRT0_SRC = crt0.S
+@@ -53,35 +55,35 @@
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 	cp $(CRT0_OBJ) $(TOPDIR)lib/
+ 
+-$(CRT0_OBJ): $(CRT0_SRC)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(CRT0_OBJ): $(SRCDIR)$(CRT0_SRC)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(SOBJS): %.o : %.S
++$(SOBJS): %.o : $(SRCDIR)%.S
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ ifeq ($(strip $(UCLIBC_PROFILING)),y)
+-gmon-start.S: ../common/gmon-start.c
+-	$(CC) $(SAFECFLAGS) -c $< -S -o $*.S
++gmon-start.S: $(SRCDIR)../common/gmon-start.c
++	$(CC) $(SAFECFLAGS) -c $< -S -o $@
+ gcrt1.o: $(CRT0_DEPS)
+ endif
+ 
+ 
+ ifeq ($(strip $(UCLIBC_CTOR_DTOR)),y)
+-crti.o: crti.S
+-	$(CC) $(SAFECFLAGS) -c crti.S -o crti.o
++crti.o: $(SRCDIR)crti.S
++	$(CC) $(SAFECFLAGS) -c $< -o $@
+ 
+ $(TOPDIR)lib/crti.o: crti.o
+ 	$(INSTALL) -d $(TOPDIR)lib/
+ 	cp crti.o $(TOPDIR)lib/
+ 
+-crtn.o: crtn.S
+-	$(CC) $(SAFECFLAGS) -c crtn.S -o crtn.o
++crtn.o: $(SRCDIR)crtn.S
++	$(CC) $(SAFECFLAGS) -c $< -o $@
+ 
+ $(TOPDIR)lib/crtn.o: crtn.o
+ 	$(INSTALL) -d $(TOPDIR)lib/
+@@ -97,8 +99,9 @@
+ 
+ 
+ headers:
+-	$(LN) -fs ../libc/sysdeps/linux/powerpc/fpu_control.h $(TOPDIR)/include/
++	$(CP) -f $(SRCTOPDIR)libc/sysdeps/linux/powerpc/fpu_control.h $(TOPDIR)include/
+ 
+ clean:
+ 	$(RM) *.[oa] *~ core
+ 	$(RM) bits/sysnum.h
++	$(RM) $(TOPDIR)include/fpu_control.h
+Index: libc/sysdeps/linux/sh/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/sysdeps/linux/sh/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/sysdeps/linux/sh/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/sysdeps/linux/sh/Makefile	10 Dec 2003 05:06:26 -0000
+@@ -17,8 +17,10 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TOPDIR=../../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ CFLAGS+= -I../
+ SFLAGS= $(CFLAGS) -D__ASSEMBLER__
+@@ -52,34 +54,34 @@
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 	cp $(CRT0_OBJ) $(TOPDIR)lib/
+ 
+-$(CRT0_OBJ): $(CRT0_SRC)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(CRT0_OBJ): $(SRCDIR)$(CRT0_SRC)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(SOBJS): %.o : %.S
++$(SOBJS): %.o : $(SRCDIR)%.S
+ 	$(CC) $(SFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ ifeq ($(strip $(UCLIBC_PROFILING)),y)
+-gmon-start.S: ../common/gmon-start.c
+-	$(CC) $(SAFECFLAGS) -c $< -S -o $*.S
++gmon-start.S: $(SRCDIR)../common/gmon-start.c
++	$(CC) $(SAFECFLAGS) -c $< -S -o $@
+ gcrt1.o: $(CRT0_DEPS)
+ endif
+ 
+ ifeq ($(strip $(UCLIBC_CTOR_DTOR)),y)
+-crti.o: crti.S
+-	$(CC) $(SAFECFLAGS) -c crti.S -o crti.o
++crti.o: $(SRCDIR)crti.S
++	$(CC) $(SAFECFLAGS) -c $< -o $@
+ 
+ $(TOPDIR)lib/crti.o: crti.o
+ 	$(INSTALL) -d $(TOPDIR)lib/
+ 	cp crti.o $(TOPDIR)lib/
+ 
+-crtn.o: crtn.S
+-	$(CC) $(SAFECFLAGS) -c crtn.S -o crtn.o
++crtn.o: $(SRCDIR)crtn.S
++	$(CC) $(SAFECFLAGS) -c $< -o $@
+ 
+ $(TOPDIR)lib/crtn.o: crtn.o
+ 	$(INSTALL) -d $(TOPDIR)lib/
+@@ -95,7 +97,7 @@
+ 
+ 
+ headers:
+-	$(LN) -fs ../libc/sysdeps/linux/sh/fpu_control.h $(TOPDIR)/include/
++	$(CP) -f $(SRCTOPDIR)libc/sysdeps/linux/sh/fpu_control.h $(TOPDIR)include/
+ 
+ clean:
+ 	$(RM) *.[oa] *~ core
+Index: libc/sysdeps/linux/sh64/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/sysdeps/linux/sh64/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/sysdeps/linux/sh64/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/sysdeps/linux/sh64/Makefile	8 Dec 2003 21:55:35 -0000
+@@ -17,8 +17,10 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TOPDIR=../../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ CFLAGS += -I..
+ SFLAGS = $(CFLAGS) -D__ASSEMBLER__ -DASM_GLOBAL_DIRECTIVE=.globl
+@@ -50,28 +52,28 @@
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 	cp $(CRT0_OBJ) $(TOPDIR)lib/
+ 
+-$(CRT0_OBJ): $(CRT0_SRC)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(CRT0_OBJ): $(SRCDIR)$(CRT0_SRC)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(SOBJS): %.o : %.S
++$(SOBJS): %.o : $(SRCDIR)%.S
+ 	$(CC) $(SFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ ifeq ($(strip $(UCLIBC_CTOR_DTOR)),y)
+-crti.o: crti.S
+-	$(CC) $(SAFECFLAGS) -c crti.S -o crti.o
++crti.o: $(SRCDIR)crti.S
++	$(CC) $(SAFECFLAGS) -c $< -o $@
+ 
+ $(TOPDIR)lib/crti.o: crti.o
+ 	$(INSTALL) -d $(TOPDIR)lib/
+ 	cp crti.o $(TOPDIR)lib/
+ 
+-crtn.o: crtn.S
+-	$(CC) $(SAFECFLAGS) -c crtn.S -o crtn.o
++crtn.o: $(SRCDIR)crtn.S
++	$(CC) $(SAFECFLAGS) -c $< -o $@
+ 
+ $(TOPDIR)lib/crtn.o: crtn.o
+ 	$(INSTALL) -d $(TOPDIR)lib/
+Index: libc/sysdeps/linux/sparc/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/sysdeps/linux/sparc/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/sysdeps/linux/sparc/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/sysdeps/linux/sparc/Makefile	10 Dec 2003 05:07:39 -0000
+@@ -16,8 +16,10 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TOPDIR=../../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../../
++include $(SRCTOPDIR)Rules.mak
+ ASFLAGS=$(CFLAGS)
+ 
+ CRT0_SRC = crt0.c
+@@ -46,28 +48,28 @@
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 	cp $(CRT0_OBJ) $(TOPDIR)lib/
+ 
+-$(CRT0_OBJ): $(CRT0_SRC)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(CRT0_OBJ): $(SRCDIR)$(CRT0_SRC)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(SOBJS): %.o : %.S
++$(SOBJS): %.o : $(SRCDIR)%.S
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ ifeq ($(strip $(UCLIBC_CTOR_DTOR)),y)
+-crti.o: crti.S
+-	$(CC) $(SAFECFLAGS) -c crti.S -o crti.o
++crti.o: $(SRCDIR)crti.S
++	$(CC) $(SAFECFLAGS) -c $< -o $@
+ 
+ $(TOPDIR)lib/crti.o: crti.o
+ 	$(INSTALL) -d $(TOPDIR)lib/
+ 	cp crti.o $(TOPDIR)lib/
+ 
+-crtn.o: crtn.S
+-	$(CC) $(SAFECFLAGS) -c crtn.S -o crtn.o
++crtn.o: $(SRCDIR)crtn.S
++	$(CC) $(SAFECFLAGS) -c $< -o $@
+ 
+ $(TOPDIR)lib/crtn.o: crtn.o
+ 	$(INSTALL) -d $(TOPDIR)lib/
+@@ -83,8 +85,9 @@
+ 
+ 
+ headers:
+-	$(LN) -fs ../libc/sysdeps/linux/sparc/fpu_control.h $(TOPDIR)/include/
++	$(CP) -f $(SRCTOPDIR)libc/sysdeps/linux/sparc/fpu_control.h $(TOPDIR)include/
+ 
+ clean:
+ 	$(RM) *.[oa] *~ core
+ 	$(RM) bits/sysnum.h
++	$(RM) $(TOPDIR)include/fpu_control.h
+Index: libc/sysdeps/linux/v850/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/sysdeps/linux/v850/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/sysdeps/linux/v850/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/sysdeps/linux/v850/Makefile	8 Dec 2003 21:53:31 -0000
+@@ -17,8 +17,10 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TOPDIR=../../../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ CFLAGS += -I..
+ SFLAGS = $(CFLAGS) -D__ASSEMBLER -DASM_GLOBAL_DIRECTIVE=.globl
+@@ -50,28 +52,28 @@
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 	cp $(CRT0_OBJ) $(TOPDIR)lib/
+ 
+-$(CRT0_OBJ): $(CRT0_SRC)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(CRT0_OBJ): $(SRCDIR)$(CRT0_SRC)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(SOBJS): %.o : %.S
++$(SOBJS): %.o : $(SRCDIR)%.S
+ 	$(CC) $(SFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ ifeq ($(strip $(UCLIBC_CTOR_DTOR)),y)
+-crti.o: crti.S
+-	$(CC) $(SAFECFLAGS) -c crti.S -o crti.o
++crti.o: $(SRCDIR)crti.S
++	$(CC) $(SAFECFLAGS) -c $< -o $@
+ 
+ $(TOPDIR)lib/crti.o: crti.o
+ 	$(INSTALL) -d $(TOPDIR)lib/
+ 	cp crti.o $(TOPDIR)lib/
+ 
+-crtn.o: crtn.S
+-	$(CC) $(SAFECFLAGS) -c crtn.S -o crtn.o
++crtn.o: $(SRCDIR)crtn.S
++	$(CC) $(SAFECFLAGS) -c $< -o $@
+ 
+ $(TOPDIR)lib/crtn.o: crtn.o
+ 	$(INSTALL) -d $(TOPDIR)lib/
+Index: libc/termios/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/termios/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/termios/Makefile	4 Dec 2003 01:27:56 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/termios/Makefile	8 Dec 2003 21:15:43 -0000
+@@ -21,8 +21,10 @@
+ # other sundry sources.  Files within this library are copyright by their
+ # respective copyright holders.
+ 
++SRCDIR=./
+ TOPDIR=../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ MSRC=termios.c
+ MOBJ= tcdrain.o tcflow.o tcflush.o tcsendbreak.o tcsetpgrp.o tcgetpgrp.o \
+@@ -42,13 +44,13 @@
+ ar-target: $(OBJS)
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 
+-$(MOBJ): $(MSRC)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(MOBJ): $(SRCDIR)$(MSRC)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ clean:
+ 	$(RM) *.[oa] *~ core
+Index: libc/unistd/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libc/unistd/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libc/unistd/Makefile	4 Dec 2003 01:27:57 -0000	1.1.1.1
++++ uClibc-0.9.23/libc/unistd/Makefile	9 Dec 2003 01:04:49 -0000
+@@ -16,8 +16,10 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TOPDIR=../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../
++include $(SRCTOPDIR)Rules.mak
+ DIRS:=
+ 
+ CSRC=execl.c execlp.c execv.c execvep.c execvp.c execle.c \
+@@ -43,9 +45,9 @@
+ ar-target: $(OBJS)
+ 	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ $(OBJ): Makefile
+ 
+Index: libcrypt/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libcrypt/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libcrypt/Makefile	4 Dec 2003 01:27:58 -0000	1.1.1.1
++++ uClibc-0.9.23/libcrypt/Makefile	9 Dec 2003 21:39:19 -0000
+@@ -21,8 +21,10 @@
+ # other sundry sources.  Files within this library are copyright by their
+ # respective copyright holders.
+ 
++SRCDIR=./
+ TOPDIR=../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../
++include $(SRCTOPDIR)Rules.mak
+ 
+ LIBCRYPT=libcrypt.a
+ LIBCRYPT_SHARED=libcrypt.so
+@@ -41,9 +43,9 @@
+ 	$(RM) $(TOPDIR)lib/$(LIBCRYPT)
+ 	$(INSTALL) -m 644 $(LIBCRYPT) $(TOPDIR)lib
+ 
+-$(OBJS): %.o : %.c
++$(OBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ $(OBJ): Makefile
+ 
+Index: libintl/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libintl/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libintl/Makefile	4 Dec 2003 01:27:58 -0000	1.1.1.1
++++ uClibc-0.9.23/libintl/Makefile	9 Dec 2003 21:31:16 -0000
+@@ -21,8 +21,10 @@
+ # other sundry sources.  Files within this library are copyright by their
+ # respective copyright holders.
+ 
++SRCDIR=./
+ TOPDIR=../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../
++include $(SRCTOPDIR)Rules.mak
+ LIBC=$(TOPDIR)libc.a
+ 
+ LIBINTL=libintl.a
+@@ -46,9 +48,9 @@
+ 	$(RM) $(TOPDIR)lib/$(LIBINTL)
+ 	$(INSTALL) -m 644 $(LIBINTL) $(TOPDIR)lib/
+ 
+-$(MOBJ): $(MSRC)
+-	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++$(MOBJ): $(SRCDIR)$(MSRC)
++	$(CC) $(CFLAGS) -DL_$* $< -c -o $@
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ shared: all
+ 	$(LD) $(LDFLAGS) -soname=$(LIBINTL_SHARED).$(MAJOR_VERSION) \
+Index: libm/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libm/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libm/Makefile	4 Dec 2003 01:27:57 -0000	1.1.1.1
++++ uClibc-0.9.23/libm/Makefile	9 Dec 2003 01:07:04 -0000
+@@ -31,8 +31,10 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TOPDIR=../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../
++include $(SRCTOPDIR)Rules.mak
+ 
+ DIRS = 
+ ifeq ($(strip $(HAS_FPU)),y)
+@@ -110,9 +112,9 @@
+ ar-target: $(OBJS)
+ 	$(AR) $(ARFLAGS) $(LIBM) $(OBJS)
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ $(OBJ): Makefile
+ 
+Index: libm/powerpc/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libm/powerpc/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libm/powerpc/Makefile	4 Dec 2003 01:27:58 -0000	1.1.1.1
++++ uClibc-0.9.23/libm/powerpc/Makefile	9 Dec 2003 01:07:38 -0000
+@@ -31,8 +31,10 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TOPDIR=../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ LIBM=../libm.a
+ CFLAGS+=-D_IEEE_LIBM -D_ISOC99_SOURCE -D_SVID_SOURCE
+@@ -57,9 +59,9 @@
+ ar-target: $(OBJS)
+ 	$(AR) $(ARFLAGS) $(LIBM) $(OBJS)
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ $(OBJ): Makefile
+ 
+Index: libnsl/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libnsl/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libnsl/Makefile	4 Dec 2003 01:27:58 -0000	1.1.1.1
++++ uClibc-0.9.23/libnsl/Makefile	9 Dec 2003 21:32:33 -0000
+@@ -16,8 +16,10 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TOPDIR=../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../
++include $(SRCTOPDIR)Rules.mak
+ 
+ LIBNSL=libnsl.a
+ LIBNSL_SHARED=libnsl.so
+@@ -36,9 +38,9 @@
+ 	$(RM) $(TOPDIR)lib/$(LIBNSL)
+ 	$(INSTALL) -m 644 $(LIBNSL) $(TOPDIR)lib
+ 
+-$(OBJS): %.o : %.c
++$(OBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ $(OBJ): Makefile
+ 
+Index: libpthread/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libpthread/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libpthread/Makefile	4 Dec 2003 01:27:58 -0000	1.1.1.1
++++ uClibc-0.9.23/libpthread/Makefile	9 Dec 2003 21:34:34 -0000
+@@ -16,8 +16,10 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TOPDIR=../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../
++include $(SRCTOPDIR)Rules.mak
+ 
+ #Adjust the soname version to avoid namespace collisions with glibc's libpthread
+ LIBPTHREAD=libpthread.a
+@@ -69,9 +71,9 @@
+ 	fi;
+ 
+ 
+-$(OBJS): %.o : %.c
++$(OBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ $(OBJ): Makefile
+ 
+Index: libpthread/linuxthreads/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libpthread/linuxthreads/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libpthread/linuxthreads/Makefile	4 Dec 2003 01:27:58 -0000	1.1.1.1
++++ uClibc-0.9.23/libpthread/linuxthreads/Makefile	9 Dec 2003 21:38:44 -0000
+@@ -17,8 +17,10 @@
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ # Makefile for uClibc
+ 
++SRCDIR=./
+ TOPDIR=../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ #Adjust the soname version to avoid namespace collisions with glibc's libpthread
+ LIBPTHREAD:=../libpthread.a
+@@ -32,14 +34,15 @@
+ 
+ 
+ # set up system dependencies include dirs (NOTE: order matters!)
+-PTDIR = $(TOPDIR)libpthread/linuxthreads/
++PTDIR = $(SRCTOPDIR)libpthread/linuxthreads/
+ SYSDEPINC = -I$(PTDIR)sysdeps/unix/sysv/linux \
+             -I$(PTDIR)sysdeps/pthread \
+             -I$(PTDIR)sysdeps/unix/sysv \
+             -I$(PTDIR)sysdeps/unix/unix \
+             -I$(PTDIR)sysdeps/$(TARGET_ARCH) \
+             -I$(PTDIR)sysdeps \
+-            -I$(TOPDIR)libc/sysdeps/linux/$(TARGET_ARCH)
++            -I$(TOPDIR)libc/sysdeps/linux/$(TARGET_ARCH) \
++            -I$(SRCTOPDIR)libc/sysdeps/linux/$(TARGET_ARCH)
+ CFLAGS += $(SYSDEPINC)
+ 
+ CSRC=attr.c cancel.c condvar.c errno.c events.c join.c lockfile.c manager.c \
+@@ -61,12 +64,12 @@
+ ar-target: $(OBJS)
+ 	$(AR) $(ARFLAGS) $(LIBPTHREAD) $(OBJS)
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+ ifeq ($(strip $(PTHREADS_DEBUG_SUPPORT)),y)
+-	$(STRIPTOOL) -X --strip-debug -R .note -R .comment $*.o
++	$(STRIPTOOL) -X --strip-debug -R .note -R .comment $@
+ else
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ endif
+ 
+ clean:
+Index: libpthread/linuxthreads_db/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libpthread/linuxthreads_db/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libpthread/linuxthreads_db/Makefile	4 Dec 2003 01:27:58 -0000	1.1.1.1
++++ uClibc-0.9.23/libpthread/linuxthreads_db/Makefile	9 Dec 2003 21:37:57 -0000
+@@ -17,8 +17,10 @@
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ # Makefile for uClibc
+ 
++SRCDIR=./
+ TOPDIR=../../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../../
++include $(SRCTOPDIR)Rules.mak
+ 
+ #Adjust the soname version to avoid namespace collisions with glibc's libpthread
+ LIBTHREAD_DB:=../libthread_db.a
+@@ -29,14 +31,15 @@
+ endif
+ 
+ # set up system dependencies include dirs (NOTE: order matters!)
+-PTDIR = $(TOPDIR)libpthread/linuxthreads/
++PTDIR = $(SRCTOPDIR)libpthread/linuxthreads/
+ SYSDEPINC = -I$(PTDIR)sysdeps/unix/sysv/linux \
+             -I$(PTDIR)sysdeps/pthread \
+             -I$(PTDIR)sysdeps/unix/sysv \
+             -I$(PTDIR)sysdeps/unix/unix \
+             -I$(PTDIR)sysdeps/$(TARGET_ARCH) \
+             -I$(PTDIR)sysdeps \
+-            -I$(TOPDIR)libc/sysdeps/linux/$(TARGET_ARCH)
++            -I$(TOPDIR)libc/sysdeps/linux/$(TARGET_ARCH) \
++            -I$(SRCTOPDIR)libc/sysdeps/linux/$(TARGET_ARCH)
+ CFLAGS += $(SYSDEPINC) -DLIBPTHREAD_SO="\"libpthread.so.$(MAJOR_VERSION)\""
+ 
+ CSRC=	td_init.c td_log.c td_ta_delete.c td_ta_get_nthreads.c		\
+@@ -64,9 +67,9 @@
+ ar-target: $(OBJS)
+ 	$(AR) $(ARFLAGS) $(LIBTHREAD_DB) $(OBJS)
+ 
+-$(COBJS): %.o : %.c
++$(COBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ clean:
+ 	$(RM) *.[oa] *~ core
+Index: libresolv/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libresolv/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libresolv/Makefile	4 Dec 2003 01:27:58 -0000	1.1.1.1
++++ uClibc-0.9.23/libresolv/Makefile	9 Dec 2003 21:30:29 -0000
+@@ -22,8 +22,10 @@
+ # respective copyright holders.
+ # Makefile for uClibc
+ 
++SRCDIR=./
+ TOPDIR=../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../
++include $(SRCTOPDIR)Rules.mak
+ 
+ LIBRESOLV=libresolv.a
+ LIBRESOLV_SHARED=libresolv.so
+@@ -42,9 +44,9 @@
+ 	$(RM) $(TOPDIR)lib/$(LIBRESOLV)
+ 	$(INSTALL) -m 644 $(LIBRESOLV) $(TOPDIR)lib
+ 
+-$(OBJS): %.o : %.c
++$(OBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ $(OBJ): Makefile
+ 
+Index: libutil/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/libutil/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/libutil/Makefile	4 Dec 2003 01:27:58 -0000	1.1.1.1
++++ uClibc-0.9.23/libutil/Makefile	9 Dec 2003 21:31:53 -0000
+@@ -21,8 +21,10 @@
+ # other sundry sources.  Files within this library are copyright by their
+ # respective copyright holders.
+ 
++SRCDIR=./
+ TOPDIR=../
+-include $(TOPDIR)Rules.mak
++SRCTOPDIR=../
++include $(SRCTOPDIR)Rules.mak
+ LIBC=$(TOPDIR)libc.a
+ 
+ LIBUTIL=libutil.a
+@@ -45,9 +47,9 @@
+ 	$(RM) $(TOPDIR)lib/$(LIBUTIL)
+ 	$(INSTALL) -m 644 $(LIBUTIL) $(TOPDIR)lib/
+ 
+-$(OBJS): %.o : %.c
++$(OBJS): %.o : $(SRCDIR)%.c
+ 	$(CC) $(CFLAGS) -c $< -o $@
+-	$(STRIPTOOL) -x -R .note -R .comment $*.o
++	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+ shared: all
+ 	$(LD) $(LDFLAGS) -soname=$(LIBUTIL_SHARED).$(MAJOR_VERSION) \
+Index: test/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/test/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/test/Makefile	4 Dec 2003 01:27:58 -0000	1.1.1.1
++++ uClibc-0.9.23/test/Makefile	9 Dec 2003 01:25:18 -0000
+@@ -16,7 +16,9 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TOPDIR=../
++SRCTOPDIR=../
+ -include $(TOPDIR).config
+ 
+ .EXPORT_ALL_VARIABLES:
+Index: test/Rules.mak
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/test/Rules.mak,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Rules.mak
+--- uClibc-0.9.23/test/Rules.mak	4 Dec 2003 01:27:58 -0000	1.1.1.1
++++ uClibc-0.9.23/test/Rules.mak	9 Dec 2003 21:42:43 -0000
+@@ -41,10 +41,10 @@
+ #        make CROSS=mipsel-linux-
+ # will build uClibc for 'mipsel'.
+ 
+-CROSS=../$(TESTDIR)extra/gcc-uClibc/$(TARGET_ARCH)-uclibc-
++CROSS=$(TESTDIR)../extra/gcc-uClibc/$(TARGET_ARCH)-uclibc-
+ CC= $(CROSS)gcc
+ STRIPTOOL=strip
+-LDD=../$(TESTDIR)ldso/util/ldd
++LDD=$(TESTDIR)../ldso/util/ldd
+ 
+ RM= rm -f
+ 
+Index: test/args/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/test/args/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/test/args/Makefile	4 Dec 2003 01:27:58 -0000	1.1.1.1
++++ uClibc-0.9.23/test/args/Makefile	9 Dec 2003 01:11:26 -0000
+@@ -16,14 +16,16 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TESTDIR=../
+-include $(TESTDIR)/Rules.mak
++SRCTESTDIR=../
++include $(SRCTESTDIR)/Rules.mak
+ 
+ 
+ TARGETS=arg_test
+ all: $(TARGETS)
+ 
+-arg_test: arg_test.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++arg_test: $(SRCDIR)arg_test.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+Index: test/assert/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/test/assert/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/test/assert/Makefile	4 Dec 2003 01:27:58 -0000	1.1.1.1
++++ uClibc-0.9.23/test/assert/Makefile	9 Dec 2003 01:31:49 -0000
+@@ -16,14 +16,16 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TESTDIR=../
+-include $(TESTDIR)/Rules.mak
++SRCTESTDIR=../
++include $(SRCTESTDIR)/Rules.mak
+ 
+ 
+ TARGETS=assert
+ all: $(TARGETS)
+ 
+-assert: assert.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++assert: $(SRCDIR)assert.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+Index: test/crypt/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/test/crypt/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/test/crypt/Makefile	4 Dec 2003 01:27:58 -0000	1.1.1.1
++++ uClibc-0.9.23/test/crypt/Makefile	9 Dec 2003 01:26:04 -0000
+@@ -17,16 +17,17 @@
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
+ 
+-
++SRCDIR=./
+ TESTDIR=../
+-include $(TESTDIR)/Rules.mak
++SRCTESTDIR=../
++include $(SRCTESTDIR)/Rules.mak
+ 
+ TARGETS=crypt md5c-test
+ EXTRA_LIBS=-lcrypt
+ 
+ all: $(TARGETS)
+ 
+-crypt: crypt.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++crypt: $(SRCDIR)crypt.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+@@ -37,7 +38,7 @@
+ 	-./$@ < crypt.input #> $@.out 2>&1
+ 	-@ echo " "
+ 
+-crypt_glibc: crypt.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++crypt_glibc: $(SRCDIR)crypt.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs glibc: "
+@@ -56,7 +57,7 @@
+ 	-diff -u crypt_glibc.out crypt.out
+ 	-@ echo " "
+ 
+-md5c-test: md5c-test.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++md5c-test: $(SRCDIR)md5c-test.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+Index: test/ctype/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/test/ctype/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/test/ctype/Makefile	4 Dec 2003 01:27:58 -0000	1.1.1.1
++++ uClibc-0.9.23/test/ctype/Makefile	9 Dec 2003 01:26:45 -0000
+@@ -16,13 +16,15 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TESTDIR=../
+-include $(TESTDIR)/Rules.mak
++SRCTESTDIR=../
++include $(SRCTESTDIR)/Rules.mak
+ 
+ TARGETS=ctype ctype_run
+ all: $(TARGETS)
+ 
+-ctype: ctype.c ../testsuite.h Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++ctype: $(SRCDIR)ctype.c $(SRCTESTDIR)testsuite.h Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+Index: test/dlopen/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/test/dlopen/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/test/dlopen/Makefile	4 Dec 2003 01:27:58 -0000	1.1.1.1
++++ uClibc-0.9.23/test/dlopen/Makefile	9 Dec 2003 01:35:31 -0000
+@@ -17,27 +17,29 @@
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ # Makefile for uClibc
+ 
++SRCDIR=./
+ TESTDIR=../
+-include $(TESTDIR)/Rules.mak
++SRCTESTDIR=../
++include $(SRCTESTDIR)/Rules.mak
+ DEBUG_LIBS=X
+ #DEBUG_LIBS=LD_DEBUG
+ 
+ all: run
+ 
+-test1: test1.c
+-	$(CC) $(CFLAGS) -o test1 test1.c -ldl
++test1: $(SRCDIR)test1.c
++	$(CC) $(CFLAGS) -o $@ $< -ldl
+ 
+-test2: test2.c
+-	$(CC) $(CFLAGS) -o test2 test2.c -ldl
++test2: $(SRCDIR)test2.c
++	$(CC) $(CFLAGS) -o $@ $< -ldl
+ 
+-test3: test3.c
+-	$(CC) $(CFLAGS) -o test3 test3.c -ldl ./libtest1.so ./libtest2.so
++test3: $(SRCDIR)test3.c
++	$(CC) $(CFLAGS) -o $@ $< -ldl ./libtest1.so ./libtest2.so
+ 
+-libtest1.o: libtest1.c
+-	$(CC) $(CFLAGS) -fPIC -c libtest1.c -o libtest1.o
++libtest1.o: $(SRCDIR)libtest1.c
++	$(CC) $(CFLAGS) -fPIC -c $< -o $@
+ 
+-libtest2.o: libtest2.c
+-	$(CC) $(CFLAGS) -fPIC -c libtest2.c -o libtest2.o
++libtest2.o: $(SRCDIR)libtest2.c
++	$(CC) $(CFLAGS) -fPIC -c $< -o $@
+ 
+ libtest1.so: libtest1.o
+ 	$(CC) $(CFLAGS) -fPIC -shared -o libtest1.so -Wl,-soname,libtest1.so libtest1.o ./libtest2.so
+@@ -45,18 +47,18 @@
+ libtest2.so: libtest2.o
+ 	$(CC) $(CFLAGS) -fPIC -shared -o libtest2.so -Wl,-soname,libtest2.so libtest2.o
+ 
+-dltest: dltest.c
+-	$(CC) $(CFLAGS) -DLIBNAME="\"./libtest.so\"" dltest.c -ldl -lpthread -o dltest
++dltest: $(SRCDIR)dltest.c
++	$(CC) $(CFLAGS) -DLIBNAME="\"./libtest.so\"" $< -ldl -lpthread -o $@
+ 
+-libtest.so: libtest.c
+-	$(CC) $(CFLAGS) -fPIC -shared -Wl,-soname,libtest.so libtest.c -o libtest.so
++libtest.so: $(SRCDIR)libtest.c
++	$(CC) $(CFLAGS) -fPIC -shared -Wl,-soname,libtest.so $< -o $@
+ 
+ # Second time, directly link libtest3.so with libpthread
+-dltest2: dltest.c
+-	$(CC) $(CFLAGS) -DLIBNAME="\"./libtest3.so\"" dltest.c -ldl -lpthread -o dltest2
++dltest2: $(SRCDIR)dltest.c
++	$(CC) $(CFLAGS) -DLIBNAME="\"./libtest3.so\"" $< -ldl -lpthread -o $@
+ 
+-libtest3.so: libtest.c
+-	$(CC) $(CFLAGS) -fPIC -shared -Wl,-soname,libtest3.so libtest.c -o libtest3.so -lpthread
++libtest3.so: $(SRCDIR)libtest.c
++	$(CC) $(CFLAGS) -fPIC -shared -Wl,-soname,libtest3.so $< -o $@ -lpthread
+ 
+ run: libtest2.so libtest1.so test1 test2 test3 dltest libtest.so dltest2 libtest3.so
+ 	@echo "----------running test 1--------------"
+Index: test/malloc/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/test/malloc/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/test/malloc/Makefile	4 Dec 2003 01:27:58 -0000	1.1.1.1
++++ uClibc-0.9.23/test/malloc/Makefile	9 Dec 2003 01:37:00 -0000
+@@ -16,8 +16,10 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TESTDIR=../
+-include $(TESTDIR)/Rules.mak
++SRCTESTDIR=../
++include $(SRCTESTDIR)/Rules.mak
+ 
+ 
+ TARGETS=malloc
+@@ -26,7 +28,7 @@
+ TARGETS+=realloc0 realloc0_glibc
+ all: $(TARGETS)
+ 
+-malloc: malloc.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++malloc: $(SRCDIR)malloc.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+@@ -41,10 +43,10 @@
+ 	-@ echo "-------"
+ 	-@ echo "testmalloc.c source: "
+ 	-@ echo " "
+-	-@ cat testmalloc.c
++	-@ cat $(SRCDIR)testmalloc.c
+ 	-@ echo " "
+ 
+-testmalloc: testmalloc.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++testmalloc: $(SRCDIR)testmalloc.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+@@ -57,7 +59,7 @@
+ 	-./$@
+ 	-@ echo " "
+ 
+-testmalloc_glibc: testmalloc.c Makefile
++testmalloc_glibc: $(SRCDIR)testmalloc.c Makefile
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs GNU libc: "
+@@ -70,7 +72,7 @@
+ 	-./$@
+ 	-@ echo " "
+ 
+-mallocbug: mallocbug.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++mallocbug: $(SRCDIR)mallocbug.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+@@ -83,7 +85,7 @@
+ 	-./$@
+ 	-@ echo " "
+ 
+-mallocbug_glibc: mallocbug.c Makefile
++mallocbug_glibc: $(SRCDIR)mallocbug.c Makefile
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs GNU libc: "
+@@ -96,7 +98,7 @@
+ 	-./$@
+ 	-@ echo " "
+ 
+-realloc0: realloc0.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++realloc0: $(SRCDIR)realloc0.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+@@ -109,7 +111,7 @@
+ 	-./$@
+ 	-@ echo " "
+ 
+-realloc0_glibc: realloc0.c Makefile
++realloc0_glibc: $(SRCDIR)realloc0.c Makefile
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs GNU libc: "
+Index: test/math/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/test/math/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/test/math/Makefile	4 Dec 2003 01:27:58 -0000	1.1.1.1
++++ uClibc-0.9.23/test/math/Makefile	9 Dec 2003 01:17:29 -0000
+@@ -18,8 +18,10 @@
+ 
+ 
+ 
++SRCDIR=./
+ TESTDIR=../
+-include $(TESTDIR)/Rules.mak
++SRCTESTDIR=../
++include $(SRCTESTDIR)/Rules.mak
+ CFLAGS+=-D_GNU_SOURCE -DNO_LONG_DOUBLE
+ EXTRA_LIBS=-lm
+ PERL=/usr/bin/perl
+@@ -57,7 +59,7 @@
+ 	$(CC) $(LDFLAGS) $@.o -o $@ $(EXTRA_LIBS)
+ 	-./$@
+ 
+-rint: rint.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++rint: $(SRCDIR)rint.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+@@ -68,7 +70,7 @@
+ 	-./$@ > $@.out 2>&1
+ 	-@ echo " "
+ 
+-rint_glibc: rint.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++rint_glibc: $(SRCDIR)rint.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs glibc: "
+@@ -96,8 +98,8 @@
+ 
+ ulps-file = $(firstword $(wildcard $(config-sysdirs:%=$(..)%/libm-test-ulps)))
+ 
+-libm-test.c: $(ulps-file) libm-test.inc gen-libm-test.pl
+-	$(PERL) ./gen-libm-test.pl -u $< ./libm-test.inc -o "." 2>&1 > /dev/null
++libm-test.c: $(ulps-file) $(SRCDIR)libm-test.inc $(SRCDIR)gen-libm-test.pl
++	$(PERL) $(SRCDIR)gen-libm-test.pl -u $< $(SRCDIR)libm-test.inc -o "." 2>&1 > /dev/null
+ 
+ clean:
+ 	$(RM) *.[oa] *~ core $(TARGETS) $(generated) rint_glibc.out rint.out
+Index: test/misc/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/test/misc/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/test/misc/Makefile	4 Dec 2003 01:27:58 -0000	1.1.1.1
++++ uClibc-0.9.23/test/misc/Makefile	9 Dec 2003 01:29:12 -0000
+@@ -16,15 +16,17 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TESTDIR=../
+-include $(TESTDIR)/Rules.mak
++SRCTESTDIR=../
++include $(SRCTESTDIR)/Rules.mak
+ 
+ CFLAGS64=-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
+ 
+ TARGETS=sem fdopen dirent_diff dirent64_diff #outb
+ all: $(TARGETS)
+ 
+-outb: outb.c ../testsuite.h Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++outb: $(SRCDIR)outb.c $(SRCTESTDIR)testsuite.h Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+@@ -35,7 +37,7 @@
+ 	./$@
+ 	-@ echo " "
+ 
+-sem: sem.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++sem: $(SRCDIR)sem.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+@@ -46,7 +48,7 @@
+ 	-./$@
+ 	-@ echo " "
+ 
+-fdopen: fdopen.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++fdopen: $(SRCDIR)fdopen.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+@@ -62,10 +64,10 @@
+ 	-@ echo "-------"
+ 	-@ echo "dirent.c source: "
+ 	-@ echo " "
+-	-@ cat dirent.c
++	-@ cat $(SRCDIR)dirent.c
+ 	-@ echo " "
+ 
+-dirent: dirent.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++dirent: $(SRCDIR)dirent.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+@@ -76,7 +78,7 @@
+ 	-./$@ dirent.c > $@.out
+ 	-@ echo " "
+ 
+-dirent_glibc: dirent.c Makefile
++dirent_glibc: $(SRCDIR)dirent.c Makefile
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs GNU libc: "
+@@ -95,7 +97,7 @@
+ 	-diff -u dirent_glibc.out dirent.out
+ 	-@ echo " "
+ 
+-dirent64: dirent.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++dirent64: $(SRCDIR)dirent.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+@@ -106,7 +108,7 @@
+ 	-./$@ dirent.c > $@.out
+ 	-@ echo " "
+ 
+-dirent64_glibc: dirent.c Makefile
++dirent64_glibc: $(SRCDIR)dirent.c Makefile
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs GNU libc: "
+Index: test/mmap/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/test/mmap/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/test/mmap/Makefile	4 Dec 2003 01:27:58 -0000	1.1.1.1
++++ uClibc-0.9.23/test/mmap/Makefile	9 Dec 2003 01:21:40 -0000
+@@ -16,14 +16,16 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TESTDIR=../
+-include $(TESTDIR)/Rules.mak
++SRCTESTDIR=../
++include $(SRCTESTDIR)/Rules.mak
+ 
+ 
+ TARGETS=mmap
+ all: $(TARGETS)
+ 
+-mmap: mmap.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++mmap: $(SRCDIR)mmap.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+Index: test/pthread/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/test/pthread/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/test/pthread/Makefile	4 Dec 2003 01:27:58 -0000	1.1.1.1
++++ uClibc-0.9.23/test/pthread/Makefile	9 Dec 2003 01:10:48 -0000
+@@ -1,5 +1,7 @@
++SRCDIR=./
+ TESTDIR=../
+-include $(TESTDIR)/Rules.mak
++SRCTESTDIR=../
++include $(SRCTESTDIR)/Rules.mak
+ 
+ LDFLAGS += 
+ #EXTRA_LIBS += -lc -lgcc -lpthread
+@@ -8,7 +10,7 @@
+ TARGETS=ex1 ex2 ex3 ex4 ex5 ex6 ex7
+ all: $(TARGETS)
+ 
+-ex1: ex1.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(TESTCC)
++ex1: $(SRCDIR)ex1.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(TESTCC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+@@ -19,7 +21,7 @@
+ 	-./$@
+ 	-@ echo " "
+ 
+-ex2: ex2.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(TESTCC)
++ex2: $(SRCDIR)ex2.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(TESTCC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+@@ -30,7 +32,7 @@
+ 	-./$@
+ 	-@ echo " "
+ 
+-ex3: ex3.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(TESTCC)
++ex3: $(SRCDIR)ex3.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(TESTCC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+@@ -41,7 +43,7 @@
+ 	-./$@
+ 	-@ echo " "
+ 
+-ex4: ex4.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(TESTCC)
++ex4: $(SRCDIR)ex4.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(TESTCC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+@@ -52,7 +54,7 @@
+ 	-./$@
+ 	-@ echo " "
+ 
+-ex5: ex5.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(TESTCC)
++ex5: $(SRCDIR)ex5.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(TESTCC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+@@ -63,7 +65,7 @@
+ 	-./$@
+ 	-@ echo " "
+ 
+-ex6: ex6.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(TESTCC)
++ex6: $(SRCDIR)ex6.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(TESTCC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+@@ -74,7 +76,7 @@
+ 	-./$@
+ 	-@ echo " "
+ 
+-ex7: ex7.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(TESTCC)
++ex7: $(SRCDIR)ex7.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(TESTCC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+Index: test/pwd_grp/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/test/pwd_grp/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/test/pwd_grp/Makefile	4 Dec 2003 01:27:58 -0000	1.1.1.1
++++ uClibc-0.9.23/test/pwd_grp/Makefile	9 Dec 2003 01:24:34 -0000
+@@ -16,8 +16,10 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TESTDIR=../
+-include $(TESTDIR)/Rules.mak
++SRCTESTDIR=../
++include $(SRCTESTDIR)/Rules.mak
+ 
+ 
+ TARGETS=test_pwd test_pwd_glibc
+@@ -29,7 +31,7 @@
+ 
+ all: $(TARGETS)
+ 
+-test_pwd: test_pwd.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++test_pwd: $(SRCDIR)test_pwd.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+@@ -40,7 +42,7 @@
+ 	-./$@ 2>&1 >test_pwd.out
+ 	-@ echo " "
+ 
+-test_pwd_glibc: test_pwd.c Makefile
++test_pwd_glibc: $(SRCDIR)test_pwd.c Makefile
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs GNU libc: "
+@@ -51,7 +53,7 @@
+ 	-./$@ 2>&1 >test_pwd_glibc.out
+ 	-@ echo " "
+ 
+-test_grp: test_grp.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++test_grp: $(SRCDIR)test_grp.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+@@ -62,7 +64,7 @@
+ 	-./$@ 2>&1 >test_grp.out
+ 	-@ echo " "
+ 
+-test_grp_glibc: test_grp.c Makefile
++test_grp_glibc: $(SRCDIR)test_grp.c Makefile
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs GNU libc: "
+@@ -73,7 +75,7 @@
+ 	-./$@ 2>&1 >test_grp_glibc.out
+ 	-@ echo " "
+ 
+-pwcat: pwcat.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++pwcat: $(SRCDIR)pwcat.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+@@ -84,7 +86,7 @@
+ 	-./$@ 2>&1 >pwcat.out
+ 	-@ echo " "
+ 
+-pwcat_glibc: pwcat.c Makefile
++pwcat_glibc: $(SRCDIR)pwcat.c Makefile
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs GNU libc: "
+@@ -95,7 +97,7 @@
+ 	-./$@ 2>&1 >pwcat_glibc.out
+ 	-@ echo " "
+ 
+-grcat: grcat.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++grcat: $(SRCDIR)grcat.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+@@ -106,7 +108,7 @@
+ 	-./$@ 2>&1 >grcat.out
+ 	-@ echo " "
+ 
+-grcat_glibc: grcat.c Makefile
++grcat_glibc: $(SRCDIR)grcat.c Makefile
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs GNU libc: "
+@@ -117,7 +119,7 @@
+ 	-./$@ 2>&1 >grcat_glibc.out
+ 	-@ echo " "
+ 
+-getgroups: getgroups.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++getgroups: $(SRCDIR)getgroups.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+@@ -128,7 +130,7 @@
+ 	-./$@ 2>&1 >getgroups.out
+ 	-@ echo " "
+ 
+-getgroups_glibc: getgroups.c Makefile
++getgroups_glibc: $(SRCDIR)getgroups.c Makefile
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs GNU libc: "
+Index: test/setjmp/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/test/setjmp/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/test/setjmp/Makefile	4 Dec 2003 01:27:58 -0000	1.1.1.1
++++ uClibc-0.9.23/test/setjmp/Makefile	9 Dec 2003 01:37:26 -0000
+@@ -16,14 +16,16 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TESTDIR=../
+-include $(TESTDIR)/Rules.mak
++SRCTESTDIR=../
++include $(SRCTESTDIR)/Rules.mak
+ 
+ 
+ TARGETS=setjmp_test
+ all: $(TARGETS)
+ 
+-setjmp_test: setjmp_test.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++setjmp_test: $(SRCDIR)setjmp_test.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+Index: test/signal/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/test/signal/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/test/signal/Makefile	4 Dec 2003 01:27:58 -0000	1.1.1.1
++++ uClibc-0.9.23/test/signal/Makefile	9 Dec 2003 01:38:07 -0000
+@@ -16,15 +16,17 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TESTDIR=../
+-include $(TESTDIR)/Rules.mak
++SRCTESTDIR=../
++include $(SRCTESTDIR)/Rules.mak
+ 
+ CFLAGS += -D_GNU_SOURCE
+ 
+ TARGETS=signal signal_glibc sigchld sigchld_glibc 
+ all: $(TARGETS)
+ 
+-signal: signal.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++signal: $(SRCDIR)signal.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+@@ -35,7 +37,7 @@
+ 	-./$@
+ 	-@ echo " "
+ 
+-signal_glibc: signal.c Makefile
++signal_glibc: $(SRCDIR)signal.c Makefile
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs GNU libc: "
+@@ -46,7 +48,7 @@
+ 	-./$@
+ 	-@ echo " "
+ 
+-sigchld: sigchld.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++sigchld: $(SRCDIR)sigchld.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+@@ -57,7 +59,7 @@
+ 	-./$@
+ 	-@ echo " "
+ 
+-sigchld_glibc: sigchld.c Makefile
++sigchld_glibc: $(SRCDIR)sigchld.c Makefile
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs GNU libc: "
+Index: test/silly/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/test/silly/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/test/silly/Makefile	4 Dec 2003 01:27:58 -0000	1.1.1.1
++++ uClibc-0.9.23/test/silly/Makefile	9 Dec 2003 01:30:53 -0000
+@@ -16,8 +16,10 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TESTDIR=../
+-include $(TESTDIR)/Rules.mak
++SRCTESTDIR=../
++include $(SRCTESTDIR)/Rules.mak
+ 
+ 
+ 
+@@ -30,10 +32,10 @@
+ 	-@ echo "-------"
+ 	-@ echo "hello.c source: "
+ 	-@ echo " "
+-	-@ cat hello.c
++	-@ cat $(SRCDIR)hello.c
+ 	-@ echo " "
+ 
+-hello: hello.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++hello: $(SRCDIR)hello.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+@@ -46,7 +48,7 @@
+ 	-./$@
+ 	-@ echo " "
+ 
+-hello_glibc: hello.c Makefile
++hello_glibc: $(SRCDIR)hello.c Makefile
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs GNU libc: "
+@@ -60,7 +62,7 @@
+ 	-@ echo " "
+ 
+ 
+-tiny: tiny.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++tiny: $(SRCDIR)tiny.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+Index: test/stat/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/test/stat/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/test/stat/Makefile	4 Dec 2003 01:27:58 -0000	1.1.1.1
++++ uClibc-0.9.23/test/stat/Makefile	9 Dec 2003 01:22:44 -0000
+@@ -16,8 +16,10 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TESTDIR=../
+-include $(TESTDIR)/Rules.mak
++SRCTESTDIR=../
++include $(SRCTESTDIR)/Rules.mak
+ 
+ CFLAGS64=-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
+ 
+@@ -31,10 +33,10 @@
+ 	-@ echo "-------"
+ 	-@ echo "stat.c source: "
+ 	-@ echo " "
+-	-@ cat stat.c
++	-@ cat $(SRCDIR)stat.c
+ 	-@ echo " "
+ 
+-stat: stat.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++stat: $(SRCDIR)stat.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+@@ -45,7 +47,7 @@
+ 	-./$@ stat.c > $@.out
+ 	-@ echo " "
+ 
+-stat_glibc: stat.c Makefile
++stat_glibc: $(SRCDIR)stat.c Makefile
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs GNU libc: "
+@@ -64,7 +66,7 @@
+ 	-diff -u stat_glibc.out stat.out
+ 	-@ echo " "
+ 
+-stat64: stat.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++stat64: $(SRCDIR)stat.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+@@ -75,7 +77,7 @@
+ 	-./$@ stat.c > $@.out
+ 	-@ echo " "
+ 
+-stat64_glibc: stat.c Makefile
++stat64_glibc: $(SRCDIR)stat.c Makefile
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs GNU libc: "
+Index: test/stdlib/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/test/stdlib/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/test/stdlib/Makefile	4 Dec 2003 01:27:58 -0000	1.1.1.1
++++ uClibc-0.9.23/test/stdlib/Makefile	9 Dec 2003 01:50:19 -0000
+@@ -16,8 +16,10 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TESTDIR=../
+-include $(TESTDIR)/Rules.mak
++SRCTESTDIR=../
++include $(SRCTESTDIR)/Rules.mak
+ 
+ 
+ 
+@@ -33,10 +35,10 @@
+ 	-@ echo "-------"
+ 	-@ echo "teststrtol.c source: "
+ 	-@ echo " "
+-	-@ cat teststrtol.c
++	-@ cat $(SRCDIR)teststrtol.c
+ 	-@ echo " "
+ 
+-teststrtol: teststrtol.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++teststrtol: $(SRCDIR)teststrtol.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+@@ -49,7 +51,7 @@
+ 	-./$@ > $@.out
+ 	-@ echo " "
+ 
+-teststrtol_glibc: teststrtol.c Makefile
++teststrtol_glibc: $(SRCDIR)teststrtol.c Makefile
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs GNU libc: "
+@@ -70,7 +72,7 @@
+ 	-diff -u teststrtol_glibc.out teststrtol.out
+ 	-@ echo " "
+ 
+-qsort: qsort.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++qsort: $(SRCDIR)qsort.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+@@ -83,7 +85,7 @@
+ 	-./$@ > $@.out
+ 	-@ echo " "
+ 
+-qsort_glibc: qsort.c Makefile
++qsort_glibc: $(SRCDIR)qsort.c Makefile
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs GNU libc: "
+@@ -104,7 +106,7 @@
+ 	-diff -u qsort_glibc.out qsort.out
+ 	-@ echo " "
+ 
+-teston_exit: teston_exit.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++teston_exit: $(SRCDIR)teston_exit.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+@@ -117,7 +119,7 @@
+ 	-./$@ > $@.out
+ 	-@ echo " "
+ 
+-teston_exit_glibc: teston_exit.c Makefile
++teston_exit_glibc: $(SRCDIR)teston_exit.c Makefile
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs GNU libc: "
+@@ -138,7 +140,7 @@
+ 	-diff -u teston_exit_glibc.out teston_exit.out
+ 	-@ echo " "
+ 
+-testatexit: testatexit.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++testatexit: $(SRCDIR)testatexit.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+@@ -151,7 +153,7 @@
+ 	-./$@ > $@.out
+ 	-@ echo " "
+ 
+-testatexit_glibc: testatexit.c Makefile
++testatexit_glibc: $(SRCDIR)testatexit.c Makefile
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs GNU libc: "
+@@ -172,7 +174,7 @@
+ 	-diff -u testatexit_glibc.out testatexit.out
+ 	-@ echo " "
+ 
+-ptytest: ptytest.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++ptytest: $(SRCDIR)ptytest.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+Index: test/string/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/test/string/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/test/string/Makefile	4 Dec 2003 01:27:58 -0000	1.1.1.1
++++ uClibc-0.9.23/test/string/Makefile	9 Dec 2003 01:41:35 -0000
+@@ -16,8 +16,11 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TESTDIR=../
+-include $(TESTDIR)/Rules.mak
++SRCTESTDIR=../
++SRCTOPDIR=../../
++include $(SRCTESTDIR)/Rules.mak
+ 
+ 
+ TARGETS=string string_glibc
+@@ -26,7 +29,7 @@
+ 
+ all: $(TARGETS)
+ 
+-string: string.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++string: $(SRCDIR)string.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+@@ -37,7 +40,7 @@
+ 	-./$@
+ 	-@ echo " "
+ 
+-string_glibc: string.c Makefile
++string_glibc: $(SRCDIR)string.c Makefile
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs GNU libc: "
+@@ -48,7 +51,7 @@
+ 	-./$@
+ 	-@ echo " "
+ 
+-testcopy: testcopy.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++testcopy: $(SRCDIR)testcopy.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+@@ -59,7 +62,7 @@
+ 	-./$@ > testcopy.out
+ 	-@ echo " "
+ 
+-testcopy_glibc: testcopy.c Makefile
++testcopy_glibc: $(SRCDIR)testcopy.c Makefile
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs GNU libc: "
+@@ -79,7 +82,7 @@
+ 	-@ echo " "
+ 
+ 
+-strerror: ../../libc/string/strerror.c $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++strerror: $(SRCTOPDIR)libc/string/strerror.c $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+@@ -90,7 +93,7 @@
+ 	-./$@
+ 	-@ echo " "
+ 
+-strsignal: ../../libc/string/strsignal.c
++strsignal: $(SRCTOPDIR)libc/string/strsignal.c
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+Index: test/termios/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/test/termios/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/test/termios/Makefile	4 Dec 2003 01:27:58 -0000	1.1.1.1
++++ uClibc-0.9.23/test/termios/Makefile	9 Dec 2003 01:31:27 -0000
+@@ -16,8 +16,10 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TESTDIR=../
+-include $(TESTDIR)/Rules.mak
++SRCTESTDIR=../
++include $(SRCTESTDIR)/Rules.mak
+ 
+ 
+ 
+@@ -25,7 +27,7 @@
+ 
+ all: $(TARGETS)
+ 
+-termios: termios.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++termios: $(SRCDIR)termios.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+@@ -38,7 +40,7 @@
+ 	-./$@
+ 	-@ echo " "
+ 
+-termios_glibc: termios.c Makefile
++termios_glibc: $(SRCDIR)termios.c Makefile
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs GNU libc: "
+Index: test/unistd/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/test/unistd/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/test/unistd/Makefile	4 Dec 2003 01:27:58 -0000	1.1.1.1
++++ uClibc-0.9.23/test/unistd/Makefile	9 Dec 2003 01:43:11 -0000
+@@ -16,15 +16,17 @@
+ # along with this program; if not, write to the Free Software Foundation, Inc.,
+ # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 
++SRCDIR=./
+ TESTDIR=../
+-include $(TESTDIR)/Rules.mak
++SRCTESTDIR=../
++include $(SRCTESTDIR)/Rules.mak
+ 
+ 
+ 
+ TARGETS=fork fork_glibc vfork vfork_glibc getcwd getopt getopt_long preadwrite 
+ all: $(TARGETS)
+ 
+-getcwd: getcwd.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++getcwd: $(SRCDIR)getcwd.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+@@ -35,7 +37,7 @@
+ 	./$@
+ 	-@ echo " "
+ 
+-fork: fork.c ../testsuite.h Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++fork: $(SRCDIR)fork.c $(SRCTESTDIR)testsuite.h Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+@@ -46,7 +48,7 @@
+ 	./$@
+ 	-@ echo " "
+ 
+-fork_glibc: fork.c ../testsuite.h Makefile
++fork_glibc: $(SRCDIR)fork.c $(SRCTESTDIR)testsuite.h Makefile
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs GNU libc: "
+@@ -57,7 +59,7 @@
+ 	-./$@
+ 	-@ echo " "
+ 
+-vfork: vfork.c ../testsuite.h Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++vfork: $(SRCDIR)vfork.c $(SRCTESTDIR)testsuite.h Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs uClibc: "
+@@ -68,7 +70,7 @@
+ 	./$@
+ 	-@ echo " "
+ 
+-vfork_glibc: vfork.c ../testsuite.h Makefile
++vfork_glibc: $(SRCDIR)vfork.c $(SRCTESTDIR)testsuite.h Makefile
+ 	-@ echo "-------"
+ 	-@ echo " "
+ 	-@ echo "Compiling vs GNU libc: "
+@@ -79,21 +81,21 @@
+ 	-./$@
+ 	-@ echo " "
+ 
+-getopt: getopt.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++getopt: $(SRCDIR)getopt.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	$(CC) $(CFLAGS) -c $< -o $@.o
+ 	$(CC) $(LDFLAGS) $@.o -o $@ $(EXTRA_LIBS)
+ 	$(STRIPTOOL) -x -R .note -R .comment $@
+ 	./$@ -abcXXX -9
+ 	-@ echo " "
+ 
+-getopt_long: getopt_long.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++getopt_long: $(SRCDIR)getopt_long.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	$(CC) $(CFLAGS) -c $< -o $@.o
+ 	$(CC) $(LDFLAGS) $@.o -o $@ $(EXTRA_LIBS)
+ 	$(STRIPTOOL) -x -R .note -R .comment $@
+ 	./$@ --add XXX --delete YYY --verbose
+ 	-@ echo " "
+ 
+-preadwrite: preadwrite.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
++preadwrite: $(SRCDIR)preadwrite.c Makefile $(TESTDIR)/Config $(SRCTESTDIR)/Rules.mak $(CC)
+ 	$(CC) $(CFLAGS) -c $< -o $@.o
+ 	$(CC) $(LDFLAGS) $@.o -o $@ $(EXTRA_LIBS)
+ 	$(STRIPTOOL) -x -R .note -R .comment $@
+Index: utils/Makefile
+===================================================================
+RCS file: /home/cvs/tools/uClibc-0.9.23/utils/Makefile,v
+retrieving revision 1.1.1.1
+diff -d -u -r1.1.1.1 Makefile
+--- uClibc-0.9.23/utils/Makefile	4 Dec 2003 01:27:58 -0000	1.1.1.1
++++ uClibc-0.9.23/utils/Makefile	10 Dec 2003 06:03:28 -0000
+@@ -18,7 +18,9 @@
+ 
+ # Pull in the user's uClibc configuration, but do not
+ # pull in Rules.mak.....
++SRCDIR=./
+ TOPDIR=../
++SRCTOPDIR=../
+ include $(TOPDIR).config
+ 
+ MAJOR_VERSION=0
+@@ -96,19 +98,21 @@
+ headers:
+ 	$(LN) -fs $(TOPDIR)include/elf.h
+ 
+-readelf: readelf.c
+-	$(CC) $(CFLAGS) -Wl,-s $^ -o $@ $(LDADD_LIBFLOAT)
++readelf: $(SRCDIR)readelf.c
++	$(CC) $(CFLAGS) -I. -I$(SRCDIR) -I$(TOPDIR)include -Wl,-s \
++		$^ -o $@ $(LDADD_LIBFLOAT)
+ 	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-ldconfig:	ldconfig.c readsoname.c
++ldconfig:	$(SRCDIR)ldconfig.c $(SRCDIR)readsoname.c
+ 	$(CC) $(CFLAGS) $(XXFLAGS) -Wl,-s \
+ 		-DUCLIBC_RUNTIME_PREFIX=$(R_PREFIX) \
+-		-DUCLIBC_LDSO=$(UCLIBC_LDSO) -I. -I../ldso/include \
++		-DUCLIBC_LDSO=$(UCLIBC_LDSO) -I. -I$(SRCDIR) \
++		-I$(TOPDIR)ldso/include -I$(SRCTOPDIR)ldso/include \
+ 		$^ -o $@ $(LDADD_LIBFLOAT)
+ 	$(STRIPTOOL) -x -R .note -R .comment $@
+ 
+-ldd:	ldd.c
+-	$(CC) $(CFLAGS) $(XXFLAGS) -Wl,-s \
++ldd:	$(SRCDIR)ldd.c
++	$(CC) $(CFLAGS) $(XXFLAGS) -Wl,-s -I. -I$(SRCDIR) -I$(TOPDIR)include \
+ 		-DUCLIBC_RUNTIME_PREFIX=$(R_PREFIX) \
+ 		-DUCLIBC_LDSO=$(UCLIBC_LDSO) \
+ 		$^ -o $@ $(LDADD_LIBFLOAT)
diff -Naur crosstool-0.28-rc5-orig/ptx.sh crosstool-0.28-rc5/ptx.sh
--- crosstool-0.28-rc5-orig/ptx.sh	2004-03-18 10:23:02.000000000 -0800
+++ crosstool-0.28-rc5/ptx.sh	2004-06-19 12:17:30.000000000 -0700
@@ -6,10 +6,16 @@
 
 test -z "${TARGET}"           && abort "Please set TARGET to the Gnu target identifier (e.g. pentium-linux)"
 test -z "${GCC_DIR}"          && abort "Please set GCC_DIR to the bare filename of the gcc tarball or directory"
-test -z "${GLIBC_DIR}"        && abort "Please set GLIBC_DIR to the bare filename of the glibc tarball or directory"
+test -z "${LIBC_DIR}"         && abort "Please set LIBC_DIR to the bare filename of the C library tarball or directory"
+test -z "${C_LIBRARY}"        && abort "Please set C_LIBRARY to 'glibc' or 'uclibc'"
+case ${C_LIBRARY} in
+    glibc)  ;;
+    uclibc) ;;
+    *)      abort "Unsupported C library ${C_LIBRARY}; please set C_LIBRARY to 'glibc' or 'uclibc'"
+esac
 test -z "${PTXDIST_DIR}"      && abort "Please set PTXDIST_DIR to the bare filename of the ptxdist tarball or directory"
 
-TOOLCOMBO=$GCC_DIR-$GLIBC_DIR
+TOOLCOMBO=$GCC_DIR-$LIBC_DIR
 TOP_DIR=${TOP_DIR-`pwd`}
 BUILD_DIR=$TOP_DIR/build/$TARGET/$TOOLCOMBO
 
diff -Naur crosstool-0.28-rc5-orig/testhello.sh crosstool-0.28-rc5/testhello.sh
--- crosstool-0.28-rc5-orig/testhello.sh	2004-01-16 10:54:39.000000000 -0800
+++ crosstool-0.28-rc5/testhello.sh	2004-06-19 12:17:30.000000000 -0700
@@ -1,8 +1,14 @@
 #!/bin/sh
 set -ex
 
+if test x"$1" = x ; then
+    TESTLANG=c,c++
+else
+    TESTLANG="$1"
+fi
+
 cd $PREFIX
-mkdir tmp
+test -d tmp || mkdir tmp
 cd tmp
 
 # Test the C compiler
@@ -15,14 +21,17 @@
 $PREFIX/bin/$TARGET-gcc -static hello.c -o $TARGET-hello-static
 $PREFIX/bin/$TARGET-gcc hello.c -o $TARGET-hello
 
-# Test the C++ compiler.
-# Link statically, to maximize chances the program will run on any random target.
+if echo "$TESTLANG" | egrep "(^|,)c++(,|\$)"; then
+    # Test the C++ compiler.
+    # Link statically, to maximize chances the program will run on any
+    # random target.
 
-cat > hello2.cc <<_eof_
+    cat > hello2.cc <<_eof_
 #include <iostream>
 int main() { std::cout << "Hello, c++!\n"; return 0; }
 _eof_
 
-$PREFIX/bin/$TARGET-g++ -static hello2.cc -o $TARGET-hello2-static
-$PREFIX/bin/$TARGET-g++ hello2.cc -o $TARGET-hello2
+    $PREFIX/bin/$TARGET-g++ -static hello2.cc -o $TARGET-hello2-static
+    $PREFIX/bin/$TARGET-g++ hello2.cc -o $TARGET-hello2
+fi
 
