]> git.saurik.com Git - wxWidgets.git/blobdiff - aclocal.m4
fix hiding the other (mac) one
[wxWidgets.git] / aclocal.m4
index e1b5d4f8bf841743843729a16f36a4abe89b7d7d..927e9d992c65763a505807f4ce588f3c5648124a 100644 (file)
@@ -101,14 +101,11 @@ dnl WX_CPP_NEW_HEADERS checks whether the compiler has "new" <iostream> header
 dnl or only the old <iostream.h> one - it may be generally assumed that if
 dnl <iostream> exists, the other "new" headers (without .h) exist too.
 dnl
-dnl call WX_CPP_NEW_HEADERS(actiof-if-true, action-if-false-or-cross-compiling)
+dnl call WX_CPP_NEW_HEADERS(actiof-if-true, action-if-false)
 dnl ---------------------------------------------------------------------------
 
 AC_DEFUN([WX_CPP_NEW_HEADERS],
 [
-  if test "$cross_compiling" = "yes"; then
-    ifelse([$2], , :, [$2])
-  else
     AC_LANG_SAVE
     AC_LANG_CPLUSPLUS
 
@@ -121,7 +118,6 @@ AC_DEFUN([WX_CPP_NEW_HEADERS],
     fi
 
     AC_LANG_RESTORE
-  fi
 ])
 
 dnl ---------------------------------------------------------------------------
@@ -612,6 +608,46 @@ if test "$ac_cv_cxx_const_cast" = yes; then
 fi
 ])
 
+dnl http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_reinterpret_cast.html
+AC_DEFUN([AC_CXX_REINTERPRET_CAST],
+[AC_CACHE_CHECK(whether the compiler supports reinterpret_cast<>,
+ac_cv_cxx_reinterpret_cast,
+[AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ AC_TRY_COMPILE([#include <typeinfo>
+class Base { public : Base () {} virtual void f () = 0;};
+class Derived : public Base { public : Derived () {} virtual void f () {} };
+class Unrelated { public : Unrelated () {} };
+int g (Unrelated&) { return 0; }],[
+Derived d;Base& b=d;Unrelated& e=reinterpret_cast<Unrelated&>(b);return g(e);],
+ ac_cv_cxx_reinterpret_cast=yes, ac_cv_cxx_reinterpret_cast=no)
+ AC_LANG_RESTORE
+])
+if test "$ac_cv_cxx_reinterpret_cast" = yes; then
+  AC_DEFINE(HAVE_REINTERPRET_CAST,,
+            [define if the compiler supports reinterpret_cast<>])
+fi
+])
+
+dnl and http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_static_cast.html
+AC_DEFUN([AC_CXX_STATIC_CAST],
+[AC_CACHE_CHECK(whether the compiler supports static_cast<>,
+ac_cv_cxx_static_cast,
+[AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ AC_TRY_COMPILE([#include <typeinfo>
+class Base { public : Base () {} virtual void f () = 0; };
+class Derived : public Base { public : Derived () {} virtual void f () {} };
+int g (Derived&) { return 0; }],[
+Derived d; Base& b = d; Derived& s = static_cast<Derived&> (b); return g (s);],
+ ac_cv_cxx_static_cast=yes, ac_cv_cxx_static_cast=no)
+ AC_LANG_RESTORE
+])
+if test "$ac_cv_cxx_static_cast" = yes; then
+  AC_DEFINE(HAVE_STATIC_CAST,, [define if the compiler supports static_cast<>])
+fi
+])
+
 # Configure paths for GTK+
 # Owen Taylor     1997-2001
 
@@ -619,7 +655,7 @@ dnl AM_PATH_GTK_2_0([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [,
 dnl Test for GTK+, and define GTK_CFLAGS and GTK_LIBS, if gthread is specified in MODULES, 
 dnl pass to pkg-config
 dnl
-AC_DEFUN(AM_PATH_GTK_2_0,
+AC_DEFUN([AM_PATH_GTK_2_0],
 [dnl 
 dnl Get the cflags and libraries from pkg-config
 dnl
@@ -644,7 +680,7 @@ AC_ARG_ENABLE(gtktest, [  --disable-gtktest       do not try to compile and run
     if pkg-config --atleast-pkgconfig-version 0.7 ; then
       :
     else
-      echo *** pkg-config too old; version 0.7 or better required.
+      echo "*** pkg-config too old; version 0.7 or better required."
       no_gtk=yes
       PKG_CONFIG=no
     fi
@@ -1062,6 +1098,182 @@ AC_DEFUN(PKG_CHECK_MODULES, [
 
 
 
+# Configure paths for SDL
+# Sam Lantinga 9/21/99
+# stolen from Manish Singh
+# stolen back from Frank Belew
+# stolen from Manish Singh
+# Shamelessly stolen from Owen Taylor
+
+dnl AM_PATH_SDL([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
+dnl Test for SDL, and define SDL_CFLAGS and SDL_LIBS
+dnl
+AC_DEFUN([AM_PATH_SDL],
+[dnl 
+dnl Get the cflags and libraries from the sdl-config script
+dnl
+AC_ARG_WITH(sdl-prefix,[  --with-sdl-prefix=PFX   Prefix where SDL is installed (optional)],
+            sdl_prefix="$withval", sdl_prefix="")
+AC_ARG_WITH(sdl-exec-prefix,[  --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional)],
+            sdl_exec_prefix="$withval", sdl_exec_prefix="")
+AC_ARG_ENABLE(sdltest, [  --disable-sdltest       Do not try to compile and run a test SDL program],
+                   , enable_sdltest=yes)
+
+  if test x$sdl_exec_prefix != x ; then
+     sdl_args="$sdl_args --exec-prefix=$sdl_exec_prefix"
+     if test x${SDL_CONFIG+set} != xset ; then
+        SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config
+     fi
+  fi
+  if test x$sdl_prefix != x ; then
+     sdl_args="$sdl_args --prefix=$sdl_prefix"
+     if test x${SDL_CONFIG+set} != xset ; then
+        SDL_CONFIG=$sdl_prefix/bin/sdl-config
+     fi
+  fi
+
+  AC_REQUIRE([AC_CANONICAL_TARGET])
+  PATH="$prefix/bin:$prefix/usr/bin:$PATH"
+  AC_PATH_PROG(SDL_CONFIG, sdl-config, no, [$PATH])
+  min_sdl_version=ifelse([$1], ,0.11.0,$1)
+  AC_MSG_CHECKING(for SDL - version >= $min_sdl_version)
+  no_sdl=""
+  if test "$SDL_CONFIG" = "no" ; then
+    no_sdl=yes
+  else
+    SDL_CFLAGS=`$SDL_CONFIG $sdlconf_args --cflags`
+    SDL_LIBS=`$SDL_CONFIG $sdlconf_args --libs`
+
+    sdl_major_version=`$SDL_CONFIG $sdl_args --version | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
+    sdl_minor_version=`$SDL_CONFIG $sdl_args --version | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
+    sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+    if test "x$enable_sdltest" = "xyes" ; then
+      ac_save_CFLAGS="$CFLAGS"
+      ac_save_LIBS="$LIBS"
+      CFLAGS="$CFLAGS $SDL_CFLAGS"
+      LIBS="$LIBS $SDL_LIBS"
+dnl
+dnl Now check if the installed SDL is sufficiently new. (Also sanity
+dnl checks the results of sdl-config to some extent
+dnl
+      rm -f conf.sdltest
+      AC_TRY_RUN([
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "SDL.h"
+
+char*
+my_strdup (char *str)
+{
+  char *new_str;
+  
+  if (str)
+    {
+      new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char));
+      strcpy (new_str, str);
+    }
+  else
+    new_str = NULL;
+  
+  return new_str;
+}
+
+int main (int argc, char *argv[])
+{
+  int major, minor, micro;
+  char *tmp_version;
+
+  /* This hangs on some systems (?)
+  system ("touch conf.sdltest");
+  */
+  { FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); }
+
+  /* HP/UX 9 (%@#!) writes to sscanf strings */
+  tmp_version = my_strdup("$min_sdl_version");
+  if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
+     printf("%s, bad version string\n", "$min_sdl_version");
+     exit(1);
+   }
+
+   if (($sdl_major_version > major) ||
+      (($sdl_major_version == major) && ($sdl_minor_version > minor)) ||
+      (($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro)))
+    {
+      return 0;
+    }
+  else
+    {
+      printf("\n*** 'sdl-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version);
+      printf("*** of SDL required is %d.%d.%d. If sdl-config is correct, then it is\n", major, minor, micro);
+      printf("*** best to upgrade to the required version.\n");
+      printf("*** If sdl-config was wrong, set the environment variable SDL_CONFIG\n");
+      printf("*** to point to the correct copy of sdl-config, and remove the file\n");
+      printf("*** config.cache before re-running configure\n");
+      return 1;
+    }
+}
+
+],, no_sdl=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
+       CFLAGS="$ac_save_CFLAGS"
+       LIBS="$ac_save_LIBS"
+     fi
+  fi
+  if test "x$no_sdl" = x ; then
+     AC_MSG_RESULT(yes)
+     ifelse([$2], , :, [$2])     
+  else
+     AC_MSG_RESULT(no)
+     if test "$SDL_CONFIG" = "no" ; then
+       echo "*** The sdl-config script installed by SDL could not be found"
+       echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in"
+       echo "*** your path, or set the SDL_CONFIG environment variable to the"
+       echo "*** full path to sdl-config."
+     else
+       if test -f conf.sdltest ; then
+        :
+       else
+          echo "*** Could not run SDL test program, checking why..."
+          CFLAGS="$CFLAGS $SDL_CFLAGS"
+          LIBS="$LIBS $SDL_LIBS"
+          AC_TRY_LINK([
+#include <stdio.h>
+#include "SDL.h"
+
+int main(int argc, char *argv[])
+{ return 0; }
+#undef  main
+#define main K_and_R_C_main
+],      [ return 0; ],
+        [ echo "*** The test program compiled, but did not run. This usually means"
+          echo "*** that the run-time linker is not finding SDL or finding the wrong"
+          echo "*** version of SDL. If it is not finding SDL, you'll need to set your"
+          echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+          echo "*** to the installed location  Also, make sure you have run ldconfig if that"
+          echo "*** is required on your system"
+         echo "***"
+          echo "*** If you have an old version installed, it is best to remove it, although"
+          echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"],
+        [ echo "*** The test program failed to compile or link. See the file config.log for the"
+          echo "*** exact error that occured. This usually means SDL was incorrectly installed"
+          echo "*** or that you have moved SDL since it was installed. In the latter case, you"
+          echo "*** may want to edit the sdl-config script: $SDL_CONFIG" ])
+          CFLAGS="$ac_save_CFLAGS"
+          LIBS="$ac_save_LIBS"
+       fi
+     fi
+     SDL_CFLAGS=""
+     SDL_LIBS=""
+     ifelse([$3], , :, [$3])
+  fi
+  AC_SUBST(SDL_CFLAGS)
+  AC_SUBST(SDL_LIBS)
+  rm -f conf.sdltest
+])
+
 dnl ---------------------------------------------------------------------------
 dnl Support macros for makefiles generated by BAKEFILE.
 dnl ---------------------------------------------------------------------------
@@ -1077,7 +1289,7 @@ dnl
 dnl Detects GNU make
 dnl ---------------------------------------------------------------------------
 
-AC_DEFUN(AC_BAKEFILE_GNUMAKE,
+AC_DEFUN([AC_BAKEFILE_GNUMAKE],
 [
     dnl does make support "-include" (only GNU make does AFAIK)?
     AC_CACHE_CHECK([if make is GNU make], bakefile_cv_prog_makeisgnu,
@@ -1104,7 +1316,7 @@ dnl
 dnl Detects platform and sets PLATFORM_XXX variables accordingly
 dnl ---------------------------------------------------------------------------
 
-AC_DEFUN(AC_BAKEFILE_PLATFORM,
+AC_DEFUN([AC_BAKEFILE_PLATFORM],
 [
     PLATFORM_UNIX=0
     PLATFORM_WIN32=0
@@ -1112,25 +1324,49 @@ AC_DEFUN(AC_BAKEFILE_PLATFORM,
     PLATFORM_MAC=0
     PLATFORM_MACOSX=0
     PLATFORM_OS2=0
-    
-    case "${host}" in
-        *-*-cygwin* | *-*-mingw32* )
-            PLATFORM_WIN32=1
-        ;;
-        *-pc-msdosdjgpp )
-            PLATFORM_MSDOS=1
-        ;;
-        *-pc-os2_emx | *-pc-os2-emx )
-            PLATFORM_OS2=1
-        ;;
-        powerpc-*-darwin* )
-            PLATFORM_MAC=1
-            PLATFORM_MACOSX=1
-        ;;
-        * )
-            PLATFORM_UNIX=1
-        ;;
-    esac
+
+    if test "x$BAKEFILE_FORCE_PLATFORM" = "x"; then 
+        case "${BAKEFILE_HOST}" in
+            *-*-cygwin* | *-*-mingw32* )
+                PLATFORM_WIN32=1
+            ;;
+            *-pc-msdosdjgpp )
+                PLATFORM_MSDOS=1
+            ;;
+            *-pc-os2_emx | *-pc-os2-emx )
+                PLATFORM_OS2=1
+            ;;
+            powerpc-*-darwin* )
+                PLATFORM_MAC=1
+                PLATFORM_MACOSX=1
+            ;;
+            * )
+                PLATFORM_UNIX=1
+            ;;
+        esac
+    else
+        case "$BAKEFILE_FORCE_PLATFORM" in
+            win32 )
+                PLATFORM_WIN32=1
+            ;;
+            msdos )
+                PLATFORM_MSDOS=1
+            ;;
+            os2 )
+                PLATFORM_OS2=1
+            ;;
+            darwin )
+                PLATFORM_MAC=1
+                PLATFORM_MACOSX=1
+            ;;
+            unix )
+                PLATFORM_UNIX=1
+            ;;
+            * )
+                AC_MSG_ERROR([Unknown platform: $BAKEFILE_FORCE_PLATFORM])
+            ;;
+        esac
+    fi
 
     AC_SUBST(PLATFORM_UNIX)
     AC_SUBST(PLATFORM_WIN32)
@@ -1141,6 +1377,40 @@ AC_DEFUN(AC_BAKEFILE_PLATFORM,
 ])
 
 
+dnl ---------------------------------------------------------------------------
+dnl AC_BAKEFILE_PLATFORM_SPECIFICS
+dnl
+dnl Sets misc platform-specific settings
+dnl ---------------------------------------------------------------------------
+
+AC_DEFUN([AC_BAKEFILE_PLATFORM_SPECIFICS],
+[
+    AC_ARG_ENABLE([omf], AS_HELP_STRING([--enable-omf],
+                                        [use OMF object format (OS/2)]),
+                  [bk_os2_use_omf="$enableval"])
+    
+    case "${BAKEFILE_HOST}" in
+      *-*-darwin* )
+        dnl For Unix to MacOS X porting instructions, see:
+        dnl http://fink.sourceforge.net/doc/porting/porting.html
+        CFLAGS="$CFLAGS -fno-common"
+        CXXFLAGS="$CXXFLAGS -fno-common"
+        ;;
+
+      *-pc-os2_emx | *-pc-os2-emx )
+        if test "x$bk_os2_use_omf" = "xyes" ; then
+            AR=emxomfar
+            RANLIB=:
+            LDFLAGS="-Zomf $LDFLAGS"
+            CFLAGS="-Zomf $CFLAGS"
+            CXXFLAGS="-Zomf $CXXFLAGS"
+            OS2_LIBEXT="lib"
+        else
+            OS2_LIBEXT="a"
+        fi
+        ;;
+    esac
+])
 
 dnl ---------------------------------------------------------------------------
 dnl AC_BAKEFILE_SUFFIXES
@@ -1149,16 +1419,18 @@ dnl Detects shared various suffixes for shared libraries, libraries, programs,
 dnl plugins etc.
 dnl ---------------------------------------------------------------------------
 
-AC_DEFUN(AC_BAKEFILE_SUFFIXES,
+AC_DEFUN([AC_BAKEFILE_SUFFIXES],
 [
     SO_SUFFIX="so"
     SO_SUFFIX_MODULE="so"
     EXEEXT=""
-    LIBPREFIX=lib
-    DLLPREFIX=lib
-    DLLPREFIX_MODULE=
+    LIBPREFIX="lib"
+    LIBEXT=".a"
+    DLLPREFIX="lib"
+    DLLPREFIX_MODULE=""
+    DLLIMP_SUFFIX=""
     
-    case "${host}" in
+    case "${BAKEFILE_HOST}" in
         *-hp-hpux* )
             SO_SUFFIX="sl"
             SO_SUFFIX_MODULE="sl"
@@ -1175,6 +1447,7 @@ AC_DEFUN(AC_BAKEFILE_SUFFIXES,
         *-*-cygwin* | *-*-mingw32* )
             SO_SUFFIX="dll"
             SO_SUFFIX_MODULE="dll"
+            DLLIMP_SUFFIX="dll.a"
             EXEEXT=".exe"
             DLLPREFIX=""
         ;;
@@ -1183,9 +1456,13 @@ AC_DEFUN(AC_BAKEFILE_SUFFIXES,
             DLLPREFIX=""
         ;;
         *-pc-os2_emx | *-pc-os2-emx )
+            SO_SUFFIX="dll"
+            SO_SUFFIX_MODULE="dll"
+            DLLIMP_SUFFIX=$OS2_LIBEXT
             EXEEXT=".exe"
             DLLPREFIX=""
             LIBPREFIX=""
+            LIBEXT=".$OS2_LIBEXT"
         ;;
         powerpc-*-darwin* )
             SO_SUFFIX="dylib"
@@ -1193,10 +1470,16 @@ AC_DEFUN(AC_BAKEFILE_SUFFIXES,
         ;;
     esac
 
+    if test "x$DLLIMP_SUFFIX" = "x" ; then
+        DLLIMP_SUFFIX="$SO_SUFFIX"
+    fi
+
     AC_SUBST(SO_SUFFIX)
     AC_SUBST(SO_SUFFIX_MODULE)
+    AC_SUBST(DLLIMP_SUFFIX)
     AC_SUBST(EXEEXT)
     AC_SUBST(LIBPREFIX)
+    AC_SUBST(LIBEXT)
     AC_SUBST(DLLPREFIX)
     AC_SUBST(DLLPREFIX_MODULE)
 ])
@@ -1209,7 +1492,7 @@ dnl Detects command for making shared libraries, substitutes SHARED_LD_CC
 dnl and SHARED_LD_CXX.
 dnl ---------------------------------------------------------------------------
 
-AC_DEFUN(AC_BAKEFILE_SHARED_LD,
+AC_DEFUN([AC_BAKEFILE_SHARED_LD],
 [
     dnl Defaults for GCC and ELF .so shared libs:
     SHARED_LD_CC="\$(CC) -shared -o"
@@ -1221,7 +1504,7 @@ AC_DEFUN(AC_BAKEFILE_SHARED_LD,
         PIC_FLAG="-fPIC"
     fi
 
-    case "${host}" in
+    case "${BAKEFILE_HOST}" in
       *-hp-hpux* )
         dnl default settings are good for gcc but not for the native HP-UX
         if test "x$GCC" = "xyes"; then
@@ -1267,11 +1550,6 @@ AC_DEFUN(AC_BAKEFILE_SHARED_LD,
       ;;
 
       *-*-darwin* )
-        dnl For Unix to MacOS X porting instructions, see:
-        dnl http://fink.sourceforge.net/doc/porting/porting.html
-        CFLAGS="$CFLAGS -fno-common"
-        CXXFLAGS="$CXXFLAGS -fno-common"
-        
         dnl Most apps benefit from being fully binded (its faster and static
         dnl variables initialized at startup work).
         dnl This can be done either with the exe linker flag -Wl,-bind_at_load
@@ -1298,106 +1576,20 @@ AC_DEFUN(AC_BAKEFILE_SHARED_LD,
            )
         ])
         if test "$wx_cv_gcc31" = "no"; then
-            cat <<EOF >shared-ld-sh
-#!/bin/sh
-#-----------------------------------------------------------------------------
-#-- Name:        distrib/mac/shared-ld-sh
-#-- Purpose:     Link a mach-o dynamic shared library for Darwin / Mac OS X
-#-- Author:      Gilles Depeyrot
-#-- Copyright:   (c) 2002 Gilles Depeyrot
-#-- Licence:     any use permitted
-#-----------------------------------------------------------------------------
-
-verbose=0
-args=""
-objects=""
-linking_flag="-dynamiclib"
-
-while test \${#} -gt 0; do
-    case \${1} in
-
-       -v)
-        verbose=1
-        ;;
-
-       -o|-compatibility_version|-current_version|-framework|-undefined|-install_name)
-        # collect these options and values
-        args="\${args} \${1} \${2}"
-        shift
-        ;;
-
-       -l*|-L*|-flat_namespace)
-        # collect these options
-        args="\${args} \${1}"
-        ;;
-
-       -dynamiclib|-bundle)
-        linking_flag="\${1}"
-        ;;
-
-       -*)
-        echo "shared-ld: unhandled option '\${1}'"
-        exit 1
-        ;;
-
-        *.o | *.a | *.dylib)
-        # collect object files
-        objects="\${objects} \${1}"
-        ;;
-
-        *)
-        echo "shared-ld: unhandled argument '\${1}'"
-        exit 1
-        ;;
-
-    esac
-    shift
-done
-
-#
-# Link one module containing all the others
-#
-if test \${verbose} = 1; then
-    echo "c++ -r -keep_private_externs -nostdlib \${objects} -o master.\$\$.o"
-fi
-c++ -r -keep_private_externs -nostdlib \${objects} -o master.\$\$.o
-status=\$?
-if test \${status} != 0; then
-    exit \${status}
-fi
-
-#
-# Link the shared library from the single module created
-#
-if test \${verbose} = 1; then
-    echo "cc \${linking_flag} master.\$\$.o \${args}"
-fi
-c++ \${linking_flag} master.\$\$.o \${args}
-status=\$?
-if test \${status} != 0; then
-    exit \${status}
-fi
-
-#
-# Remove intermediate module
-#
-rm -f master.\$\$.o
-
-exit 0
-EOF
+            AC_BAKEFILE_CREATE_FILE_SHARED_LD_SH
             chmod +x shared-ld-sh
 
             dnl Use the shared-ld-sh helper script
-            SHARED_LD_CC="`pwd`/shared-ld-sh -dynamiclib -o"
-            SHARED_LD_MODULE_CC="`pwd`/shared-ld-sh -bundle -o"
+            SHARED_LD_CC="`pwd`/shared-ld-sh -dynamiclib -headerpad_max_install_names -o"
+            SHARED_LD_MODULE_CC="`pwd`/shared-ld-sh -bundle -headerpad_max_install_names -o"
             SHARED_LD_CXX="$SHARED_LD_CC"
             SHARED_LD_MODULE_CXX="$SHARED_LD_MODULE_CC"
         else
             dnl Use the -single_module flag and let the linker do it for us
-            SHARED_LD_CC="\${CC} -dynamiclib -single_module -o"
-            SHARED_LD_MODULE_CC="\${CC} -bundle -single_module -o"
-            SHARED_LD_CXX="\${CXX} -dynamiclib -single_module -o"
-            SHARED_LD_MODULE_CXX="\${CXX} -bundle -single_module -o"
+            SHARED_LD_CC="\${CC} -dynamiclib -single_module -headerpad_max_install_names -o"
+            SHARED_LD_MODULE_CC="\${CC} -bundle -single_module -headerpad_max_install_names -o"
+            SHARED_LD_CXX="\${CXX} -dynamiclib -single_module -headerpad_max_install_names -o"
+            SHARED_LD_MODULE_CXX="\${CXX} -bundle -single_module -headerpad_max_install_names -o"
         fi
 
         PIC_FLAG="-dynamic -fPIC"
@@ -1433,20 +1625,31 @@ EOF
       *-*-cygwin* | *-*-mingw32* )
         PIC_FLAG=""
       ;;
+
+      *-pc-os2_emx | *-pc-os2-emx )
+        SHARED_LD_CC="`pwd`/dllar.sh -o"
+        SHARED_LD_CXX="`pwd`/dllar.sh -o"
+        PIC_FLAG=""
+        AC_BAKEFILE_CREATE_FILE_DLLAR_SH
+        chmod +x dllar.sh
+      ;;
       
       *-*-freebsd* | *-*-openbsd* | *-*-netbsd* | \
       *-*-sunos4* | \
       *-*-osf* | \
       *-*-dgux5* | \
-      *-pc-os2_emx | *-pc-os2-emx | \
       *-*-sysv5* )
         dnl defaults are ok
       ;;
 
       *)
-        AC_MSG_ERROR(unknown system type $host.)
+        AC_MSG_ERROR(unknown system type $BAKEFILE_HOST.)
     esac
 
+    if test "x$PIC_FLAG" != "x" ; then
+        PIC_FLAG="$PIC_FLAG -DPIC"
+    fi
+
     if test "x$SHARED_LD_MODULE_CC" = "x" ; then
         SHARED_LD_MODULE_CC="$SHARED_LD_CC"
     fi
@@ -1468,7 +1671,7 @@ dnl
 dnl Detects linker options for attaching versions (sonames) to shared  libs.
 dnl ---------------------------------------------------------------------------
 
-AC_DEFUN(AC_BAKEFILE_SHARED_VERSIONS,
+AC_DEFUN([AC_BAKEFILE_SHARED_VERSIONS],
 [
     USE_SOVERSION=0
     USE_SOVERLINUX=0
@@ -1477,7 +1680,7 @@ AC_DEFUN(AC_BAKEFILE_SHARED_VERSIONS,
     USE_MACVERSION=0
     SONAME_FLAG=
 
-    case "${host}" in
+    case "${BAKEFILE_HOST}" in
       *-*-linux* )
         SONAME_FLAG="-Wl,-soname,"
         USE_SOVERSION=1
@@ -1514,7 +1717,7 @@ dnl
 dnl Detects available C/C++ dependency tracking options
 dnl ---------------------------------------------------------------------------
 
-AC_DEFUN(AC_BAKEFILE_DEPS,
+AC_DEFUN([AC_BAKEFILE_DEPS],
 [
     AC_MSG_CHECKING([for dependency tracking method])
     DEPS_TRACKING=0
@@ -1522,7 +1725,7 @@ AC_DEFUN(AC_BAKEFILE_DEPS,
     if test "x$GCC" = "xyes"; then
         DEPSMODE=gcc
         DEPS_TRACKING=1
-        case "${host}" in
+        case "${BAKEFILE_HOST}" in
             powerpc-*-darwin* )
                 dnl -cpp-precomp (the default) conflicts with -MMD option
                 dnl used by bk-deps (see also http://developer.apple.com/documentation/Darwin/Conceptual/PortingUnix/compiling/chapter_4_section_3.html)
@@ -1538,59 +1741,7 @@ AC_DEFUN(AC_BAKEFILE_DEPS,
     fi
 
     if test $DEPS_TRACKING = 1 ; then
-        cat <<EOF >bk-deps
-#!/bin/sh
-
-# This script is part of Bakefile (http://bakefile.sourceforge.net) autoconf
-# script. It is used to track C/C++ files dependencies in portable way.
-#
-# Permission is given to use this file in any way.
-
-DEPSMODE=$DEPSMODE
-DEPSDIR=.deps
-DEPSFLAG_GCC="$DEPSFLAG_GCC"
-
-mkdir -p \$DEPSDIR
-
-if test \$DEPSMODE = gcc ; then
-    \${*} \${DEPSFLAG_GCC}
-    status=\${?}
-    if test \${status} != 0 ; then
-        exit \${status}
-    fi
-    # move created file to the location we want it in:
-    while test \${#} -gt 0; do
-        case "\${1}" in
-            -o )
-                shift
-                objfile=\${1}
-            ;;
-            -* )
-            ;;
-            * )
-                srcfile=\${1}
-            ;;
-        esac
-        shift
-    done
-    depfile=\`basename \$srcfile | sed -e 's/\..*$/.d/g'\`
-    depobjname=\`echo \$depfile |sed -e 's/\.d/.o/g'\`
-    if test -f \$depfile ; then
-        sed -e "s,\$depobjname:,\$objfile:,g" \$depfile >\${DEPSDIR}/\${objfile}.d
-        rm -f \$depfile
-    else
-        depfile=\`basename \$objfile | sed -e 's/\..*$/.d/g'\`
-        if test -f \$depfile ; then
-            sed -e "/^\$objfile/!s,\$depobjname:,\$objfile:,g" \$depfile >\${DEPSDIR}/\${objfile}.d
-            rm -f \$depfile
-        fi
-    fi
-    exit 0
-else
-    \${*}
-    exit \${?}
-fi
-EOF
+        AC_BAKEFILE_CREATE_FILE_BK_DEPS
         chmod +x bk-deps
     fi
     
@@ -1604,7 +1755,7 @@ dnl Checks for presence of basic programs, such as C and C++ compiler, "ranlib"
 dnl or "install"
 dnl ---------------------------------------------------------------------------
 
-AC_DEFUN(AC_BAKEFILE_CHECK_BASIC_STUFF,
+AC_DEFUN([AC_BAKEFILE_CHECK_BASIC_STUFF],
 [
     AC_PROG_RANLIB
     AC_PROG_INSTALL
@@ -1617,9 +1768,9 @@ AC_DEFUN(AC_BAKEFILE_CHECK_BASIC_STUFF,
     AC_CHECK_TOOL(STRIP, strip, :)
     AC_CHECK_TOOL(NM, nm, :)
 
-    case ${host} in
+    case ${BAKEFILE_HOST} in
         *-hp-hpux* )
-            INSTALL_DIR="mkdir"
+            INSTALL_DIR="mkdir -p"
             ;;
         *)  INSTALL_DIR="$INSTALL -d"
             ;;
@@ -1627,9 +1778,9 @@ AC_DEFUN(AC_BAKEFILE_CHECK_BASIC_STUFF,
     AC_SUBST(INSTALL_DIR)
 
     LDFLAGS_GUI=
-    case ${host} in
+    case ${BAKEFILE_HOST} in
         *-*-cygwin* | *-*-mingw32* )
-        LDFLAGS_GUI="-Wl,--subsystem,windows -mwindows"
+        LDFLAGS_GUI="-mwindows"
     esac
     AC_SUBST(LDFLAGS_GUI)
 ])
@@ -1641,12 +1792,12 @@ dnl
 dnl Checks for presence of resource compilers for win32 or mac
 dnl ---------------------------------------------------------------------------
 
-AC_DEFUN(AC_BAKEFILE_RES_COMPILERS,
+AC_DEFUN([AC_BAKEFILE_RES_COMPILERS],
 [
     RESCOMP=
     SETFILE=
 
-    case ${host} in 
+    case ${BAKEFILE_HOST} in 
         *-*-cygwin* | *-*-mingw32* )
             dnl Check for win32 resources compiler:
             if test "$build" != "$host" ; then
@@ -1672,11 +1823,12 @@ dnl
 dnl Check for precompiled headers support (GCC >= 3.4)
 dnl ---------------------------------------------------------------------------
 
-AC_DEFUN(AC_BAKEFILE_PRECOMP_HEADERS,
+AC_DEFUN([AC_BAKEFILE_PRECOMP_HEADERS],
 [
 
     AC_ARG_ENABLE([precomp-headers],
-                  [  --disable-precomp-headers  don't use precompiled headers even if compiler can],
+                  AS_HELP_STRING([--disable-precomp-headers],
+                                 [don't use precompiled headers even if compiler can]),
                   [bk_use_pch="$enableval"])
 
     GCC_PCH=0
@@ -1701,9 +1853,6 @@ AC_DEFUN(AC_BAKEFILE_PRECOMP_HEADERS,
                 ],
                 [
                     AC_MSG_RESULT([yes])
-                    dnl FIXME - this is temporary, till .gch dependencies 
-                    dnl         are fixed in generated Makefiles
-                    CPPFLAGS="-fpch-deps $CPPFLAGS"
                     GCC_PCH=1
                 ],
                 [
@@ -1767,21 +1916,732 @@ dnl ---------------------------------------------------------------------------
 dnl AC_BAKEFILE
 dnl
 dnl To be used in configure.in of any project using Bakefile-generated mks
+dnl
+dnl Behaviour can be modified by setting following variables:
+dnl    BAKEFILE_CHECK_BASICS    set to "no" if you don't want bakefile to
+dnl                             to perform check for basic tools like ranlib
+dnl    BAKEFILE_HOST            set this to override host detection, defaults
+dnl                             to ${host}
+dnl    BAKEFILE_FORCE_PLATFORM  set to override platform detection
 dnl ---------------------------------------------------------------------------
 
-AC_DEFUN(AC_BAKEFILE,
+AC_DEFUN([AC_BAKEFILE],
 [
+    if test "x$BAKEFILE_HOST" = "x"; then
+        BAKEFILE_HOST="${host}"
+    fi
+
     if test "x$BAKEFILE_CHECK_BASICS" != "xno"; then
         AC_BAKEFILE_CHECK_BASIC_STUFF
     fi
     AC_BAKEFILE_GNUMAKE
     AC_BAKEFILE_PLATFORM
+    AC_BAKEFILE_PLATFORM_SPECIFICS
     AC_BAKEFILE_SUFFIXES
     AC_BAKEFILE_SHARED_LD
     AC_BAKEFILE_SHARED_VERSIONS
     AC_BAKEFILE_DEPS
     AC_BAKEFILE_RES_COMPILERS
 
+    BAKEFILE_BAKEFILE_M4_VERSION="0.1.4"
+    
     builtin(include, autoconf_inc.m4)
+    
+    if test "$BAKEFILE_BAKEFILE_M4_VERSION" != "$BAKEFILE_AUTOCONF_INC_M4_VERSION" ; then
+        AC_MSG_ERROR([Versions of Bakefile used to generate makefiles ($BAKEFILE_AUTOCONF_INC_M4_VERSION) and configure ($BAKEFILE_BAKEFILE_M4_VERSION) do not match.])
+    fi
+])
+        
+
+dnl ---------------------------------------------------------------------------
+dnl              Embedded copies of helper scripts follow:
+dnl ---------------------------------------------------------------------------
+
+AC_DEFUN([AC_BAKEFILE_CREATE_FILE_DLLAR_SH],
+[
+dnl ===================== dllar.sh begins here =====================
+D='$'
+cat <<EOF >dllar.sh
+#!/bin/sh
+#
+# dllar - a tool to build both a .dll and an .a file
+# from a set of object (.o) files for EMX/OS2.
+#
+#  Written by Andrew Zabolotny, bit@freya.etu.ru
+#  Ported to Unix like shell by Stefan Neis, Stefan.Neis@t-online.de
+#
+#  This script will accept a set of files on the command line.
+#  All the public symbols from the .o files will be exported into
+#  a .DEF file, then linker will be run (through gcc) against them to
+#  build a shared library consisting of all given .o files. All libraries
+#  (.a) will be first decompressed into component .o files then act as
+#  described above. You can optionally give a description (-d "description")
+#  which will be put into .DLL. To see the list of accepted options (as well
+#  as command-line format) simply run this program without options. The .DLL
+#  is built to be imported by name (there is no guarantee that new versions
+#  of the library you build will have same ordinals for same symbols).
+#
+#  dllar 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.
+#
+#  dllar 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 dllar; see the file COPYING.  If not, write to the Free
+#  Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+#  02111-1307, USA.
+
+# To successfuly run this program you will need:
+#  - Current drive should have LFN support (HPFS, ext2, network, etc)
+#    (Sometimes dllar generates filenames which won't fit 8.3 scheme)
+#  - gcc
+#    (used to build the .dll)
+#  - emxexp
+#    (used to create .def file from .o files)
+#  - emximp
+#    (used to create .a file from .def file)
+#  - GNU text utilites (cat, sort, uniq)
+#    used to process emxexp output
+#  - GNU file utilities (mv, rm)
+#  - GNU sed
+#  - lxlite (optional, see flag below)
+#    (used for general .dll cleanup)
+#
+
+flag_USE_LXLITE=1;
+
+#
+# helper functions
+# basnam, variant of basename, which does _not_ remove the path, _iff_
+#                              second argument (suffix to remove) is given
+basnam(){
+    case ${D}# in
+    1)
+        echo ${D}1 | sed 's/.*\///' | sed 's/.*\\//'
+        ;;
+    2)
+        echo ${D}1 | sed 's/'${D}2'${D}//'
+        ;;
+    *)
+        echo "error in basnam ${D}*"
+        exit 8
+        ;;
+    esac
+}
+
+# Cleanup temporary files and output
+CleanUp() {
+    cd ${D}curDir
+    for i in ${D}inputFiles ; do
+        case ${D}i in
+        *!)
+            rm -rf \`basnam ${D}i !\`
+            ;;
+        *)
+            ;;
+        esac
+    done
+
+    # Kill result in case of failure as there is just to many stupid make/nmake
+    # things out there which doesn't do this.
+    if [[] ${D}# -eq 0 []]; then
+        rm -f ${D}arcFile ${D}arcFile2 ${D}defFile ${D}dllFile
+    fi
+}
+
+# Print usage and exit script with rc=1.
+PrintHelp() {
+ echo 'Usage: dllar [[]-o[[]utput[]] output_file[]] [[]-i[[]mport[]] importlib_name[]]'
+ echo '       [[]-d[[]escription[]] "dll descrption"[]] [[]-cc "CC"[]] [[]-f[[]lags[]] "CFLAGS"[]]'
+ echo '       [[]-ord[[]inals[]][]] -ex[[]clude[]] "symbol(s)"'
+ echo '       [[]-libf[[]lags[]] "{INIT|TERM}{GLOBAL|INSTANCE}"[]] [[]-nocrt[[]dll[]][]] [[]-nolxl[[]ite[]][]]'
+ echo '       [[]*.o[]] [[]*.a[]]'
+ echo '*> "output_file" should have no extension.'
+ echo '   If it has the .o, .a or .dll extension, it is automatically removed.'
+ echo '   The import library name is derived from this and is set to "name".a,'
+ echo '   unless overridden by -import'
+ echo '*> "importlib_name" should have no extension.'
+ echo '   If it has the .o, or .a extension, it is automatically removed.'
+ echo '   This name is used as the import library name and may be longer and'
+ echo '   more descriptive than the DLL name which has to follow the old '
+ echo '   8.3 convention of FAT.'
+ echo '*> "cc" is used to use another GCC executable.   (default: gcc.exe)'
+ echo '*> "flags" should be any set of valid GCC flags. (default: -s -Zcrtdll)'
+ echo '   These flags will be put at the start of GCC command line.'
+ echo '*> -ord[[]inals[]] tells dllar to export entries by ordinals. Be careful.'
+ echo '*> -ex[[]clude[]] defines symbols which will not be exported. You can define'
+ echo '   multiple symbols, for example -ex "myfunc yourfunc _GLOBAL*".'
+ echo '   If the last character of a symbol is "*", all symbols beginning'
+ echo '   with the prefix before "*" will be exclude, (see _GLOBAL* above).'
+ echo '*> -libf[[]lags[]] can be used to add INITGLOBAL/INITINSTANCE and/or'
+ echo '   TERMGLOBAL/TERMINSTANCE flags to the dynamically-linked library.'
+ echo '*> -nocrt[[]dll[]] switch will disable linking the library against emx''s'
+ echo '   C runtime DLLs.'
+ echo '*> -nolxl[[]ite[]] switch will disable running lxlite on the resulting DLL.'
+ echo '*> All other switches (for example -L./ or -lmylib) will be passed'
+ echo '   unchanged to GCC at the end of command line.'
+ echo '*> If you create a DLL from a library and you do not specify -o,'
+ echo '   the basename for DLL and import library will be set to library name,'
+ echo '   the initial library will be renamed to 'name'_s.a (_s for static)'
+ echo '   i.e. "dllar gcc.a" will create gcc.dll and gcc.a, and the initial'
+ echo '   library will be renamed into gcc_s.a.'
+ echo '--------'
+ echo 'Example:'
+ echo '   dllar -o gcc290.dll libgcc.a -d "GNU C runtime library" -ord'
+ echo '    -ex "__main __ctordtor*" -libf "INITINSTANCE TERMINSTANCE"'
+ CleanUp
+ exit 1
+}
+
+# Execute a command.
+# If exit code of the commnad <> 0 CleanUp() is called and we'll exit the script.
+# @Uses    Whatever CleanUp() uses.
+doCommand() {
+    echo "${D}*"
+    eval ${D}*
+    rcCmd=${D}?
+
+    if [[] ${D}rcCmd -ne 0 []]; then
+        echo "command failed, exit code="${D}rcCmd
+        CleanUp
+        exit ${D}rcCmd
+    fi
+}
+
+# main routine
+# setup globals
+cmdLine=${D}*
+outFile=""
+outimpFile=""
+inputFiles=""
+description=""
+CC=gcc.exe
+CFLAGS="-s -Zcrtdll"
+EXTRA_CFLAGS=""
+EXPORT_BY_ORDINALS=0
+exclude_symbols=""
+library_flags=""
+curDir=\`pwd\`
+curDirS=curDir
+case ${D}curDirS in
+*/)
+  ;;
+*)
+  curDirS=${D}{curDirS}"/"
+  ;;
+esac
+# Parse commandline
+libsToLink=0
+while [[] ${D}1 []]; do
+    case ${D}1 in
+    -ord*)
+        EXPORT_BY_ORDINALS=1;
+        ;;
+    -o*)
+       shift
+        outFile=${D}1
+       ;;
+    -i*)
+        shift
+        outimpFile=${D}1
+        ;;
+    -d*)
+        shift
+        description=${D}1
+        ;;
+    -f*)
+        shift
+        CFLAGS=${D}1
+        ;;
+    -c*)
+        shift
+        CC=${D}1
+        ;;
+    -h*)
+        PrintHelp
+        ;;
+    -ex*)
+        shift
+        exclude_symbols=${D}{exclude_symbols}${D}1" "
+        ;;
+    -libf*)
+        shift
+        library_flags=${D}{library_flags}${D}1" "
+        ;;
+    -nocrt*)
+        CFLAGS="-s"
+        ;;
+    -nolxl*)
+        flag_USE_LXLITE=0
+        ;;
+    -* | /*)
+        case ${D}1 in
+        -L* | -l*)
+            libsToLink=1
+            ;;
+        *)
+            ;;
+        esac
+        EXTRA_CFLAGS=${D}{EXTRA_CFLAGS}" "${D}1
+        ;;
+    *)
+        found=0;
+        if [[] ${D}libsToLink -ne 0 []]; then
+            EXTRA_CFLAGS=${D}{EXTRA_CFLAGS}" "${D}1
+        else
+            for file in ${D}1 ; do
+                if [[] -f ${D}file []]; then
+                    inputFiles="${D}{inputFiles} ${D}file"
+                    found=1
+                fi
+            done
+            if [[] ${D}found -eq 0 []]; then
+                echo "ERROR: No file(s) found: "${D}1
+                exit 8
+            fi
+        fi
+      ;;
+    esac
+    shift
+done # iterate cmdline words
+
+#
+if [[] -z "${D}inputFiles" []]; then
+    echo "dllar: no input files"
+    PrintHelp
+fi
+
+# Now extract all .o files from .a files
+newInputFiles=""
+for file in ${D}inputFiles ; do
+    case ${D}file in
+    *.a | *.lib)
+        case ${D}file in
+        *.a)
+            suffix=".a"
+            AR="ar"
+            ;;
+        *.lib)
+            suffix=".lib"
+            AR="emxomfar"
+            EXTRA_CFLAGS="${D}EXTRA_CFLAGS -Zomf"
+            ;;
+        *)
+            ;;
+        esac
+        dirname=\`basnam ${D}file ${D}suffix\`"_%"
+        mkdir ${D}dirname
+        if [[] ${D}? -ne 0 []]; then
+            echo "Failed to create subdirectory ./${D}dirname"
+            CleanUp
+            exit 8;
+        fi
+        # Append '!' to indicate archive
+        newInputFiles="${D}newInputFiles ${D}{dirname}!"
+        doCommand "cd ${D}dirname; ${D}AR x ../${D}file"
+        cd ${D}curDir
+        found=0;
+        for subfile in ${D}dirname/*.o* ; do
+            if [[] -f ${D}subfile []]; then
+                found=1
+                if [[] -s ${D}subfile []]; then
+                   # FIXME: This should be: is file size > 32 byte, _not_ > 0!
+                    newInputFiles="${D}newInputFiles ${D}subfile"
+                fi
+            fi
+        done
+        if [[] ${D}found -eq 0 []]; then
+            echo "WARNING: there are no files in archive \'${D}file\'"
+        fi
+        ;;
+    *)
+        newInputFiles="${D}{newInputFiles} ${D}file"
+        ;;
+    esac
+done
+inputFiles="${D}newInputFiles"
+
+# Output filename(s).
+do_backup=0;
+if [[] -z ${D}outFile []]; then
+    do_backup=1;
+    set outFile ${D}inputFiles; outFile=${D}2
+fi
+
+# If it is an archive, remove the '!' and the '_%' suffixes
+case ${D}outFile in
+*_%!)
+    outFile=\`basnam ${D}outFile _%!\`
+    ;;
+*)
+    ;;
+esac
+case ${D}outFile in
+*.dll)
+    outFile=\`basnam ${D}outFile .dll\`
+    ;;
+*.DLL)
+    outFile=\`basnam ${D}outFile .DLL\`
+    ;;
+*.o)
+    outFile=\`basnam ${D}outFile .o\`
+    ;;
+*.obj)
+    outFile=\`basnam ${D}outFile .obj\`
+    ;;
+*.a)
+    outFile=\`basnam ${D}outFile .a\`
+    ;;
+*.lib)
+    outFile=\`basnam ${D}outFile .lib\`
+    ;;
+*)
+    ;;
+esac
+case ${D}outimpFile in
+*.a)
+    outimpFile=\`basnam ${D}outimpFile .a\`
+    ;;
+*.lib)
+    outimpFile=\`basnam ${D}outimpFile .lib\`
+    ;;
+*)
+    ;;
+esac
+if [[] -z ${D}outimpFile []]; then
+    outimpFile=${D}outFile
+fi
+defFile="${D}{outFile}.def"
+arcFile="${D}{outimpFile}.a"
+arcFile2="${D}{outimpFile}.lib"
+dllFile="${D}outFile"
+# Add suffix to dllFile later, first we need a version to use as
+# name in .def file.
+
+if [[] ${D}do_backup -ne 0 []] ; then
+    if [[] -f ${D}arcFile []] ; then
+        doCommand "mv ${D}arcFile ${D}{outFile}_s.a"
+    fi
+    if [[] -f ${D}arcFile2 []] ; then
+        doCommand "mv ${D}arcFile2 ${D}{outFile}_s.lib"
+    fi
+fi
+
+# Extract public symbols from all the object files.
+tmpdefFile=${D}{defFile}_%
+rm -f ${D}tmpdefFile
+for file in ${D}inputFiles ; do
+    case ${D}file in
+    *!)
+        ;;
+    *)
+        doCommand "emxexp -u ${D}file >> ${D}tmpdefFile"
+        ;;
+    esac
+done
+
+# Create the def file.
+rm -f ${D}defFile
+echo "LIBRARY \`basnam ${D}dllFile\` ${D}library_flags" >> ${D}defFile
+dllFile="${D}dllFile.dll"
+if [[] -n ${D}description []]; then
+    echo "DESCRIPTION  \"${D}{description}\"" >> ${D}defFile
+fi
+echo "EXPORTS" >> ${D}defFile
+
+doCommand "cat ${D}tmpdefFile | sort.exe | uniq.exe > ${D}{tmpdefFile}%"
+grep -v "^ *;" < ${D}{tmpdefFile}% | grep -v "^ *${D}" >${D}tmpdefFile
+
+# Checks if the export is ok or not.
+for word in ${D}exclude_symbols; do
+    grep -v ${D}word < ${D}tmpdefFile >${D}{tmpdefFile}%
+    mv ${D}{tmpdefFile}% ${D}tmpdefFile
+done
+
+
+if [[] ${D}EXPORT_BY_ORDINALS -ne 0 []]; then
+    sed "=" < ${D}tmpdefFile | \
+    sed '
+      N
+      : loop
+      s/^\([[]0-9[]]\+\)\([[]^;[]]*\)\(;.*\)\?/\2 @\1 NONAME/
+      t loop
+    ' > ${D}{tmpdefFile}%
+    grep -v "^ *${D}" < ${D}{tmpdefFile}% > ${D}tmpdefFile
+else
+    rm -f ${D}{tmpdefFile}%
+fi
+cat ${D}tmpdefFile >> ${D}defFile
+rm -f ${D}tmpdefFile
+
+# Do linking, create implib, and apply lxlite.
+gccCmdl="";
+for file in ${D}inputFiles ; do
+    case ${D}file in
+    *!)
+        ;;
+    *)
+        gccCmdl="${D}gccCmdl ${D}file"
+        ;;
+    esac
+done
+doCommand "${D}CC ${D}CFLAGS -Zdll -o ${D}dllFile ${D}defFile ${D}gccCmdl ${D}EXTRA_CFLAGS"
+touch "${D}{outFile}.dll"
+
+doCommand "emximp -o ${D}arcFile ${D}defFile"
+if [[] ${D}flag_USE_LXLITE -ne 0 []]; then
+    add_flags="";
+    if [[] ${D}EXPORT_BY_ORDINALS -ne 0 []]; then
+        add_flags="-ynd"
+    fi
+    doCommand "lxlite -cs -t: -mrn -mln ${D}add_flags ${D}dllFile"
+fi
+doCommand "emxomf -s -l ${D}arcFile"
+
+# Successful exit.
+CleanUp 1
+exit 0
+EOF
+dnl ===================== dllar.sh ends here =====================
+])
+
+AC_DEFUN([AC_BAKEFILE_CREATE_FILE_BK_DEPS],
+[
+dnl ===================== bk-deps begins here =====================
+D='$'
+cat <<EOF >bk-deps
+#!/bin/sh
+
+# This script is part of Bakefile (http://bakefile.sourceforge.net) autoconf
+# script. It is used to track C/C++ files dependencies in portable way.
+#
+# Permission is given to use this file in any way.
+
+DEPSMODE=${DEPSMODE}
+DEPSDIR=.deps
+DEPSFLAG_GCC="${DEPSFLAG_GCC}"
+
+mkdir -p ${D}DEPSDIR
+
+if test ${D}DEPSMODE = gcc ; then
+    ${D}* ${D}{DEPSFLAG_GCC}
+    status=${D}?
+    if test ${D}{status} != 0 ; then
+        exit ${D}{status}
+    fi
+    # move created file to the location we want it in:
+    while test ${D}# -gt 0; do
+        case "${D}1" in
+            -o )
+                shift
+                objfile=${D}1
+            ;;
+            -* )
+            ;;
+            * )
+                srcfile=${D}1
+            ;;
+        esac
+        shift
+    done
+    depfile=\`basename ${D}srcfile | sed -e 's/\..*${D}/.d/g'\`
+    depobjname=\`echo ${D}depfile |sed -e 's/\.d/.o/g'\`
+    if test -f ${D}depfile ; then
+        sed -e "s,${D}depobjname:,${D}objfile:,g" ${D}depfile >${D}{DEPSDIR}/${D}{objfile}.d
+        rm -f ${D}depfile
+    else
+        depfile=\`basename ${D}objfile | sed -e 's/\..*${D}/.d/g'\`
+        if test -f ${D}depfile ; then
+            sed -e "/^${D}objfile/!s,${D}depobjname:,${D}objfile:,g" ${D}depfile >${D}{DEPSDIR}/${D}{objfile}.d
+            rm -f ${D}depfile
+        fi
+    fi
+    exit 0
+else
+    ${D}*
+    exit ${D}?
+fi
+EOF
+dnl ===================== bk-deps ends here =====================
 ])
 
+AC_DEFUN([AC_BAKEFILE_CREATE_FILE_SHARED_LD_SH],
+[
+dnl ===================== shared-ld-sh begins here =====================
+D='$'
+cat <<EOF >shared-ld-sh
+#!/bin/sh
+#-----------------------------------------------------------------------------
+#-- Name:        distrib/mac/shared-ld-sh
+#-- Purpose:     Link a mach-o dynamic shared library for Darwin / Mac OS X
+#-- Author:      Gilles Depeyrot
+#-- Copyright:   (c) 2002 Gilles Depeyrot
+#-- Licence:     any use permitted
+#-----------------------------------------------------------------------------
+
+verbose=0
+args=""
+objects=""
+linking_flag="-dynamiclib"
+
+while test ${D}# -gt 0; do
+    case ${D}1 in
+
+       -v)
+        verbose=1
+        ;;
+
+       -o|-compatibility_version|-current_version|-framework|-undefined|-install_name)
+        # collect these options and values
+        args="${D}{args} ${D}1 ${D}2"
+        shift
+        ;;
+
+       -l*|-L*|-flat_namespace|-headerpad_max_install_names)
+        # collect these options
+        args="${D}{args} ${D}1"
+        ;;
+
+       -dynamiclib|-bundle)
+        linking_flag="${D}1"
+        ;;
+
+       -*)
+        echo "shared-ld: unhandled option '${D}1'"
+        exit 1
+        ;;
+
+        *.o | *.a | *.dylib)
+        # collect object files
+        objects="${D}{objects} ${D}1"
+        ;;
+
+        *)
+        echo "shared-ld: unhandled argument '${D}1'"
+        exit 1
+        ;;
+
+    esac
+    shift
+done
+
+#
+# Link one module containing all the others
+#
+if test ${D}{verbose} = 1; then
+    echo "c++ -r -keep_private_externs -nostdlib ${D}{objects} -o master.${D}${D}.o"
+fi
+c++ -r -keep_private_externs -nostdlib ${D}{objects} -o master.${D}${D}.o
+status=${D}?
+if test ${D}{status} != 0; then
+    exit ${D}{status}
+fi
+
+#
+# Link the shared library from the single module created
+#
+if test ${D}{verbose} = 1; then
+    echo "cc ${D}{linking_flag} master.${D}${D}.o ${D}{args}"
+fi
+c++ ${D}{linking_flag} master.${D}${D}.o ${D}{args}
+status=${D}?
+if test ${D}{status} != 0; then
+    exit ${D}{status}
+fi
+
+#
+# Remove intermediate module
+#
+rm -f master.${D}${D}.o
+
+exit 0
+EOF
+dnl ===================== shared-ld-sh ends here =====================
+])
+
+dnl
+dnl AM_PATH_CPPUNIT(MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
+dnl
+AC_DEFUN(AM_PATH_CPPUNIT,
+[
+
+AC_ARG_WITH(cppunit-prefix,[  --with-cppunit-prefix=PFX   Prefix where CppUnit is installed (optional)],
+            cppunit_config_prefix="$withval", cppunit_config_prefix="")
+AC_ARG_WITH(cppunit-exec-prefix,[  --with-cppunit-exec-prefix=PFX  Exec prefix where CppUnit is installed (optional)],
+            cppunit_config_exec_prefix="$withval", cppunit_config_exec_prefix="")
+
+  if test x$cppunit_config_exec_prefix != x ; then
+     cppunit_config_args="$cppunit_config_args --exec-prefix=$cppunit_config_exec_prefix"
+     if test x${CPPUNIT_CONFIG+set} != xset ; then
+        CPPUNIT_CONFIG=$cppunit_config_exec_prefix/bin/cppunit-config
+     fi
+  fi
+  if test x$cppunit_config_prefix != x ; then
+     cppunit_config_args="$cppunit_config_args --prefix=$cppunit_config_prefix"
+     if test x${CPPUNIT_CONFIG+set} != xset ; then
+        CPPUNIT_CONFIG=$cppunit_config_prefix/bin/cppunit-config
+     fi
+  fi
+
+  AC_PATH_PROG(CPPUNIT_CONFIG, cppunit-config, no)
+  cppunit_version_min=$1
+
+  AC_MSG_CHECKING(for Cppunit - version >= $cppunit_version_min)
+  no_cppunit=""
+  if test "$CPPUNIT_CONFIG" = "no" ; then
+    no_cppunit=yes
+  else
+    CPPUNIT_CFLAGS=`$CPPUNIT_CONFIG --cflags`
+    CPPUNIT_LIBS=`$CPPUNIT_CONFIG --libs`
+    cppunit_version=`$CPPUNIT_CONFIG --version`
+
+    cppunit_major_version=`echo $cppunit_version | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
+    cppunit_minor_version=`echo $cppunit_version | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
+    cppunit_micro_version=`echo $cppunit_version | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+
+    cppunit_major_min=`echo $cppunit_version_min | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
+    cppunit_minor_min=`echo $cppunit_version_min | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
+    cppunit_micro_min=`echo $cppunit_version_min | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+
+    cppunit_version_proper=`expr \
+        $cppunit_major_version \> $cppunit_major_min \| \
+        $cppunit_major_version \= $cppunit_major_min \& \
+        $cppunit_minor_version \> $cppunit_minor_min \| \
+        $cppunit_major_version \= $cppunit_major_min \& \
+        $cppunit_minor_version \= $cppunit_minor_min \& \
+        $cppunit_micro_version \>= $cppunit_micro_min `
+
+    if test "$cppunit_version_proper" = "1" ; then
+      AC_MSG_RESULT([$cppunit_major_version.$cppunit_minor_version.$cppunit_micro_version])
+    else
+      AC_MSG_RESULT(no)
+      no_cppunit=yes
+    fi
+  fi
+
+  if test "x$no_cppunit" = x ; then
+     ifelse([$2], , :, [$2])     
+  else
+     CPPUNIT_CFLAGS=""
+     CPPUNIT_LIBS=""
+     ifelse([$3], , :, [$3])
+  fi
+
+  AC_SUBST(CPPUNIT_CFLAGS)
+  AC_SUBST(CPPUNIT_LIBS)
+])
+
+
+
+