]> git.saurik.com Git - wxWidgets.git/blobdiff - build/aclocal/bakefile.m4
Delete the menu on close in the wxWebView sample. Fixes most of the memory leaks.
[wxWidgets.git] / build / aclocal / bakefile.m4
index 0516430743cf10df9e4482a36d85766835264d36..8608b64e59abeced7d140b5f2bcaf1affb812177 100644 (file)
@@ -1,9 +1,36 @@
-dnl ---------------------------------------------------------------------------
-dnl Support macros for makefiles generated by BAKEFILE.
-dnl ---------------------------------------------------------------------------
+dnl
+dnl  This file is part of Bakefile (http://www.bakefile.org)
+dnl
+dnl  Copyright (C) 2003-2007 Vaclav Slavik and others
+dnl
+dnl  Permission is hereby granted, free of charge, to any person obtaining a
+dnl  copy of this software and associated documentation files (the "Software"),
+dnl  to deal in the Software without restriction, including without limitation
+dnl  the rights to use, copy, modify, merge, publish, distribute, sublicense,
+dnl  and/or sell copies of the Software, and to permit persons to whom the
+dnl  Software is furnished to do so, subject to the following conditions:
+dnl
+dnl  The above copyright notice and this permission notice shall be included in
+dnl  all copies or substantial portions of the Software.
+dnl
+dnl  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+dnl  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+dnl  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+dnl  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+dnl  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+dnl  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+dnl  DEALINGS IN THE SOFTWARE.
+dnl
+dnl  $Id$
+dnl
+dnl  Support macros for makefiles generated by BAKEFILE.
+dnl
+
 
 
+dnl ---------------------------------------------------------------------------
 dnl Lots of compiler & linker detection code contained here was taken from
 dnl Lots of compiler & linker detection code contained here was taken from
-dnl wxWindows configure.in script (see http://www.wxwindows.org)
+dnl wxWidgets configure.in script (see http://www.wxwidgets.org)
+dnl ---------------------------------------------------------------------------
 
 
 
 
 
 
@@ -51,7 +78,7 @@ AC_DEFUN([AC_BAKEFILE_PLATFORM],
     PLATFORM_OS2=0
     PLATFORM_BEOS=0
 
     PLATFORM_OS2=0
     PLATFORM_BEOS=0
 
-    if test "x$BAKEFILE_FORCE_PLATFORM" = "x"; then 
+    if test "x$BAKEFILE_FORCE_PLATFORM" = "x"; then
         case "${BAKEFILE_HOST}" in
             *-*-mingw32* )
                 PLATFORM_WIN32=1
         case "${BAKEFILE_HOST}" in
             *-*-mingw32* )
                 PLATFORM_WIN32=1
@@ -65,7 +92,7 @@ AC_DEFUN([AC_BAKEFILE_PLATFORM],
             *-*-darwin* )
                 PLATFORM_MAC=1
                 PLATFORM_MACOSX=1
             *-*-darwin* )
                 PLATFORM_MAC=1
                 PLATFORM_MACOSX=1
-            ;; 
+            ;;
             *-*-beos* )
                 PLATFORM_BEOS=1
             ;;
             *-*-beos* )
                 PLATFORM_BEOS=1
             ;;
@@ -126,7 +153,7 @@ 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"])
     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:
     case "${BAKEFILE_HOST}" in
       *-*-darwin* )
         dnl For Unix to MacOS X porting instructions, see:
@@ -153,7 +180,7 @@ AC_DEFUN([AC_BAKEFILE_PLATFORM_SPECIFICS],
             OS2_LIBEXT="a"
         fi
         ;;
             OS2_LIBEXT="a"
         fi
         ;;
-      
+
       i*86-*-beos* )
         LDFLAGS="-L/boot/develop/lib/x86 $LDFLAGS"
         ;;
       i*86-*-beos* )
         LDFLAGS="-L/boot/develop/lib/x86 $LDFLAGS"
         ;;
@@ -178,8 +205,12 @@ AC_DEFUN([AC_BAKEFILE_SUFFIXES],
     DLLPREFIX_MODULE=""
     DLLIMP_SUFFIX=""
     dlldir="$libdir"
     DLLPREFIX_MODULE=""
     DLLIMP_SUFFIX=""
     dlldir="$libdir"
-    
+
     case "${BAKEFILE_HOST}" in
     case "${BAKEFILE_HOST}" in
+        dnl PA-RISC HP systems used .sl but IA64 use ELF-64 and so use the
+        dnl standard .so extension
+        ia64-hp-hpux* )
+        ;;
         *-hp-hpux* )
             SO_SUFFIX="sl"
             SO_SUFFIX_MODULE="sl"
         *-hp-hpux* )
             SO_SUFFIX="sl"
             SO_SUFFIX_MODULE="sl"
@@ -261,7 +292,7 @@ AC_DEFUN([AC_BAKEFILE_SHARED_LD],
         dnl the switch for gcc is the same under all platforms
         PIC_FLAG="-fPIC"
     fi
         dnl the switch for gcc is the same under all platforms
         PIC_FLAG="-fPIC"
     fi
-    
+
     dnl Defaults for GCC and ELF .so shared libs:
     SHARED_LD_CC="\$(CC) -shared ${PIC_FLAG} -o"
     SHARED_LD_CXX="\$(CXX) -shared ${PIC_FLAG} -o"
     dnl Defaults for GCC and ELF .so shared libs:
     SHARED_LD_CC="\$(CC) -shared ${PIC_FLAG} -o"
     SHARED_LD_CXX="\$(CXX) -shared ${PIC_FLAG} -o"
@@ -281,27 +312,19 @@ AC_DEFUN([AC_BAKEFILE_SHARED_LD],
       ;;
 
       *-*-linux* )
       ;;
 
       *-*-linux* )
-        if test "x$GCC" != "xyes"; then
-            AC_CACHE_CHECK([for Intel compiler], bakefile_cv_prog_icc,
-            [
-                AC_TRY_COMPILE([],
-                    [
-                        #ifndef __INTEL_COMPILER
-                        #error Not icc
-                        #endif
-                    ],
-                    bakefile_cv_prog_icc=yes,
-                    bakefile_cv_prog_icc=no
-                )
-            ])
-            if test "$bakefile_cv_prog_icc" = "yes"; then
-                PIC_FLAG="-KPIC"
-            fi
+        dnl newer icc versions use -fPIC just as gcc does and, in fact, the
+        dnl newest (v10+) ones don't even understand -KPIC any longer
+        if test "$INTELCC" = "yes" -a "$INTELCC8" != "yes"; then
+            PIC_FLAG="-KPIC"
+        elif test "x$SUNCXX" = "xyes"; then
+            SHARED_LD_CC="${CC} -G -o"
+            SHARED_LD_CXX="${CXX} -G -o"
+            PIC_FLAG="-KPIC"
         fi
       ;;
 
       *-*-solaris2* )
         fi
       ;;
 
       *-*-solaris2* )
-        if test "x$GCC" != xyes ; then
+        if test "x$SUNCXX" = xyes ; then
             SHARED_LD_CC="${CC} -G -o"
             SHARED_LD_CXX="${CXX} -G -o"
             PIC_FLAG="-KPIC"
             SHARED_LD_CC="${CC} -G -o"
             SHARED_LD_CXX="${CXX} -G -o"
             PIC_FLAG="-KPIC"
@@ -313,7 +336,7 @@ AC_DEFUN([AC_BAKEFILE_SHARED_LD],
         chmod +x shared-ld-sh
 
         SHARED_LD_MODULE_CC="`pwd`/shared-ld-sh -bundle -headerpad_max_install_names -o"
         chmod +x shared-ld-sh
 
         SHARED_LD_MODULE_CC="`pwd`/shared-ld-sh -bundle -headerpad_max_install_names -o"
-        SHARED_LD_MODULE_CXX="$SHARED_LD_MODULE_CC"
+        SHARED_LD_MODULE_CXX="CXX=\"\$(CXX)\" $SHARED_LD_MODULE_CC"
 
         dnl Most apps benefit from being fully binded (its faster and static
         dnl variables initialized at startup work).
 
         dnl Most apps benefit from being fully binded (its faster and static
         dnl variables initialized at startup work).
@@ -329,7 +352,7 @@ AC_DEFUN([AC_BAKEFILE_SHARED_LD],
                [
                    #if (__GNUC__ < 3) || \
                        ((__GNUC__ == 3) && (__GNUC_MINOR__ < 1))
                [
                    #if (__GNUC__ < 3) || \
                        ((__GNUC__ == 3) && (__GNUC_MINOR__ < 1))
-                       #error old gcc
+                       This is old gcc
                    #endif
                ],
                [
                    #endif
                ],
                [
@@ -421,6 +444,7 @@ AC_DEFUN([AC_BAKEFILE_SHARED_LD],
 
       powerpc-apple-macos* | \
       *-*-freebsd* | *-*-openbsd* | *-*-netbsd* | *-*-k*bsd*-gnu | \
 
       powerpc-apple-macos* | \
       *-*-freebsd* | *-*-openbsd* | *-*-netbsd* | *-*-k*bsd*-gnu | \
+      *-*-mirbsd* | \
       *-*-sunos4* | \
       *-*-osf* | \
       *-*-dgux5* | \
       *-*-sunos4* | \
       *-*-osf* | \
       *-*-dgux5* | \
@@ -465,29 +489,33 @@ AC_DEFUN([AC_BAKEFILE_SHARED_VERSIONS],
     USE_SOVERLINUX=0
     USE_SOVERSOLARIS=0
     USE_SOVERCYGWIN=0
     USE_SOVERLINUX=0
     USE_SOVERSOLARIS=0
     USE_SOVERCYGWIN=0
-    USE_SOSYMLINKS=0
+    USE_SOTWOSYMLINKS=0
     USE_MACVERSION=0
     SONAME_FLAG=
 
     case "${BAKEFILE_HOST}" in
     USE_MACVERSION=0
     SONAME_FLAG=
 
     case "${BAKEFILE_HOST}" in
-      *-*-linux* | *-*-freebsd* | *-*-k*bsd*-gnu )
-        SONAME_FLAG="-Wl,-soname,"
+      *-*-linux* | *-*-freebsd* | *-*-openbsd* | *-*-netbsd* | \
+      *-*-k*bsd*-gnu | *-*-mirbsd* )
+        if test "x$SUNCXX" = "xyes"; then
+            SONAME_FLAG="-h "
+        else
+            SONAME_FLAG="-Wl,-soname,"
+        fi
         USE_SOVERSION=1
         USE_SOVERLINUX=1
         USE_SOVERSION=1
         USE_SOVERLINUX=1
-        USE_SOSYMLINKS=1
+        USE_SOTWOSYMLINKS=1
       ;;
 
       *-*-solaris2* )
         SONAME_FLAG="-h "
         USE_SOVERSION=1
         USE_SOVERSOLARIS=1
       ;;
 
       *-*-solaris2* )
         SONAME_FLAG="-h "
         USE_SOVERSION=1
         USE_SOVERSOLARIS=1
-        USE_SOSYMLINKS=1
       ;;
 
       *-*-darwin* )
         USE_MACVERSION=1
         USE_SOVERSION=1
       ;;
 
       *-*-darwin* )
         USE_MACVERSION=1
         USE_SOVERSION=1
-        USE_SOSYMLINKS=1
+        USE_SOTWOSYMLINKS=1
       ;;
 
       *-*-cygwin* )
       ;;
 
       *-*-cygwin* )
@@ -501,7 +529,7 @@ AC_DEFUN([AC_BAKEFILE_SHARED_VERSIONS],
     AC_SUBST(USE_SOVERSOLARIS)
     AC_SUBST(USE_SOVERCYGWIN)
     AC_SUBST(USE_MACVERSION)
     AC_SUBST(USE_SOVERSOLARIS)
     AC_SUBST(USE_SOVERCYGWIN)
     AC_SUBST(USE_MACVERSION)
-    AC_SUBST(USE_SOSYMLINKS)
+    AC_SUBST(USE_SOTWOSYMLINKS)
     AC_SUBST(SONAME_FLAG)
 ])
 
     AC_SUBST(SONAME_FLAG)
 ])
 
@@ -514,53 +542,69 @@ dnl ---------------------------------------------------------------------------
 
 AC_DEFUN([AC_BAKEFILE_DEPS],
 [
 
 AC_DEFUN([AC_BAKEFILE_DEPS],
 [
+    AC_ARG_ENABLE([dependency-tracking],
+                  AS_HELP_STRING([--disable-dependency-tracking],
+                                 [don't use dependency tracking even if the compiler can]),
+                  [bk_use_trackdeps="$enableval"])
+
     AC_MSG_CHECKING([for dependency tracking method])
     AC_MSG_CHECKING([for dependency tracking method])
-    DEPS_TRACKING=1
 
 
-    if test "x$GCC" = "xyes"; then
-        DEPSMODE=gcc
-        case "${BAKEFILE_HOST}" in
-            *-*-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)
-                DEPSFLAG="-no-cpp-precomp -MMD"
-            ;;
-            * )
-                DEPSFLAG="-MMD"
-            ;;
-        esac
-        AC_MSG_RESULT([gcc])
-    elif test "x$MWCC" = "xyes"; then
-        DEPSMODE=mwcc
-        DEPSFLAG="-MM"
-        AC_MSG_RESULT([mwcc])
-    elif test "x$SUNCC" = "xyes"; then
-        DEPSMODE=unixcc
-        DEPSFLAG="-xM1"
-        AC_MSG_RESULT([Sun cc])
-    elif test "x$SGICC" = "xyes"; then
-        DEPSMODE=unixcc
-        DEPSFLAG="-M"
-        AC_MSG_RESULT([SGI cc])
-    elif test "x$HPCC" = "xyes"; then
-        DEPSMODE=unixcc
-        DEPSFLAG="+make"
-        AC_MSG_RESULT([HP cc])
-    elif test "x$COMPAQCC" = "xyes"; then
-        DEPSMODE=gcc
-        DEPSFLAG="-MD"
-        AC_MSG_RESULT([Compaq cc])
-    else
+    BK_DEPS=""
+    if test "x$bk_use_trackdeps" = "xno" ; then
         DEPS_TRACKING=0
         DEPS_TRACKING=0
-        AC_MSG_RESULT([none])
-    fi
+        AC_MSG_RESULT([disabled])
+    else
+        DEPS_TRACKING=1
 
 
-    if test $DEPS_TRACKING = 1 ; then
-        AC_BAKEFILE_CREATE_FILE_BK_DEPS
-        chmod +x bk-deps
+        if test "x$GCC" = "xyes"; then
+            DEPSMODE=gcc
+            case "${BAKEFILE_HOST}" in
+                *-*-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)
+                    DEPSFLAG="-no-cpp-precomp -MMD"
+                ;;
+                * )
+                    DEPSFLAG="-MMD"
+                ;;
+            esac
+            AC_MSG_RESULT([gcc])
+        elif test "x$MWCC" = "xyes"; then
+            DEPSMODE=mwcc
+            DEPSFLAG="-MM"
+            AC_MSG_RESULT([mwcc])
+        elif test "x$SUNCC" = "xyes"; then
+            DEPSMODE=unixcc
+            DEPSFLAG="-xM1"
+            AC_MSG_RESULT([Sun cc])
+        elif test "x$SGICC" = "xyes"; then
+            DEPSMODE=unixcc
+            DEPSFLAG="-M"
+            AC_MSG_RESULT([SGI cc])
+        elif test "x$HPCC" = "xyes"; then
+            DEPSMODE=unixcc
+            DEPSFLAG="+make"
+            AC_MSG_RESULT([HP cc])
+        elif test "x$COMPAQCC" = "xyes"; then
+            DEPSMODE=gcc
+            DEPSFLAG="-MD"
+            AC_MSG_RESULT([Compaq cc])
+        else
+            DEPS_TRACKING=0
+            AC_MSG_RESULT([none])
+        fi
+
+        if test $DEPS_TRACKING = 1 ; then
+            AC_BAKEFILE_CREATE_FILE_BK_DEPS
+            chmod +x bk-deps
+            dnl FIXME: make this $(top_builddir)/bk-deps once autoconf-2.60
+            dnl        is required (and so top_builddir is never empty):
+            BK_DEPS="`pwd`/bk-deps"
+        fi
     fi
 
     AC_SUBST(DEPS_TRACKING)
     fi
 
     AC_SUBST(DEPS_TRACKING)
+    AC_SUBST(BK_DEPS)
 ])
 
 dnl ---------------------------------------------------------------------------
 ])
 
 dnl ---------------------------------------------------------------------------
@@ -578,20 +622,30 @@ AC_DEFUN([AC_BAKEFILE_CHECK_BASIC_STUFF],
 
     AC_PROG_MAKE_SET
     AC_SUBST(MAKE_SET)
 
     AC_PROG_MAKE_SET
     AC_SUBST(MAKE_SET)
-    
-    AC_CHECK_TOOL(AR, ar, ar)
+
+    if test "x$SUNCXX" = "xyes"; then
+        dnl Sun C++ compiler requires special way of creating static libs;
+        dnl see here for more details:
+        dnl https://sourceforge.net/tracker/?func=detail&atid=109863&aid=1229751&group_id=9863
+        AR=$CXX
+        AROPTIONS="-xar -o"
+        AC_SUBST(AR)
+    elif test "x$SGICC" = "xyes"; then
+        dnl Almost the same as above for SGI mipsPro compiler
+        AR=$CXX
+        AROPTIONS="-ar -o"
+        AC_SUBST(AR)
+    else
+        AC_CHECK_TOOL(AR, ar, ar)
+        AROPTIONS=rcu
+    fi
+    AC_SUBST(AROPTIONS)
+
     AC_CHECK_TOOL(STRIP, strip, :)
     AC_CHECK_TOOL(NM, nm, :)
 
     AC_CHECK_TOOL(STRIP, strip, :)
     AC_CHECK_TOOL(NM, nm, :)
 
-    case ${BAKEFILE_HOST} in
-        *-hp-hpux* )
-            dnl HP-UX install doesn't handle the "-d" switch so don't
-            dnl use it there
-            INSTALL_DIR="mkdir -p"
-            ;;
-        *)  INSTALL_DIR="$INSTALL -d"
-            ;;
-    esac
+    dnl Don't use `install -d`, see http://trac.wxwidgets.org/ticket/13452
+    INSTALL_DIR="mkdir -p"
     AC_SUBST(INSTALL_DIR)
 
     LDFLAGS_GUI=
     AC_SUBST(INSTALL_DIR)
 
     LDFLAGS_GUI=
@@ -611,26 +665,20 @@ dnl ---------------------------------------------------------------------------
 
 AC_DEFUN([AC_BAKEFILE_RES_COMPILERS],
 [
 
 AC_DEFUN([AC_BAKEFILE_RES_COMPILERS],
 [
-    RESCOMP=
-    SETFILE=
-
-    case ${BAKEFILE_HOST} in 
+    case ${BAKEFILE_HOST} in
         *-*-cygwin* | *-*-mingw32* )
             dnl Check for win32 resources compiler:
         *-*-cygwin* | *-*-mingw32* )
             dnl Check for win32 resources compiler:
-            if test "$build" != "$host" ; then
-                RESCOMP=$host_alias-windres
-            else
-                AC_CHECK_PROG(RESCOMP, windres, windres, windres)
-            fi
+            AC_CHECK_TOOL(WINDRES, windres)
          ;;
          ;;
+
       *-*-darwin* | powerpc-apple-macos* )
       *-*-darwin* | powerpc-apple-macos* )
-            AC_CHECK_PROG(RESCOMP, Rez, Rez, /Developer/Tools/Rez)
+            AC_CHECK_PROG(REZ, Rez, Rez, /Developer/Tools/Rez)
             AC_CHECK_PROG(SETFILE, SetFile, SetFile, /Developer/Tools/SetFile)
         ;;
     esac
 
             AC_CHECK_PROG(SETFILE, SetFile, SetFile, /Developer/Tools/SetFile)
         ;;
     esac
 
-    AC_SUBST(RESCOMP)
+    AC_SUBST(WINDRES)
+    AC_SUBST(REZ)
     AC_SUBST(SETFILE)
 ])
 
     AC_SUBST(SETFILE)
 ])
 
@@ -649,6 +697,18 @@ AC_DEFUN([AC_BAKEFILE_PRECOMP_HEADERS],
                   [bk_use_pch="$enableval"])
 
     GCC_PCH=0
                   [bk_use_pch="$enableval"])
 
     GCC_PCH=0
+    ICC_PCH=0
+    USE_PCH=0
+    BK_MAKE_PCH=""
+
+    case ${BAKEFILE_HOST} in
+        *-*-cygwin* )
+            dnl PCH support is broken in cygwin gcc because of unportable
+            dnl assumptions about mmap() in gcc code which make PCH generation
+            dnl fail erratically; disable PCH completely until this is fixed
+            bk_use_pch="no"
+            ;;
+    esac
 
     if test "x$bk_use_pch" = "x" -o "x$bk_use_pch" = "xyes" ; then
         if test "x$GCC" = "xyes"; then
 
     if test "x$bk_use_pch" = "x" -o "x$bk_use_pch" = "xyes" ; then
         if test "x$GCC" = "xyes"; then
@@ -657,15 +717,16 @@ AC_DEFUN([AC_BAKEFILE_PRECOMP_HEADERS],
             AC_TRY_COMPILE([],
                 [
                     #if !defined(__GNUC__) || !defined(__GNUC_MINOR__)
             AC_TRY_COMPILE([],
                 [
                     #if !defined(__GNUC__) || !defined(__GNUC_MINOR__)
-                        #error "no pch support"
+                        There is no PCH support
                     #endif
                     #if (__GNUC__ < 3)
                     #endif
                     #if (__GNUC__ < 3)
-                        #error "no pch support"
+                        There is no PCH support
                     #endif
                     #if (__GNUC__ == 3) && \
                        ((!defined(__APPLE_CC__) && (__GNUC_MINOR__ < 4)) || \
                     #endif
                     #if (__GNUC__ == 3) && \
                        ((!defined(__APPLE_CC__) && (__GNUC_MINOR__ < 4)) || \
-                       ( defined(__APPLE_CC__) && (__GNUC_MINOR__ < 3)))
-                        #error "no pch support"
+                       ( defined(__APPLE_CC__) && (__GNUC_MINOR__ < 3))) || \
+                       ( defined(__INTEL_COMPILER) )
+                        There is no PCH support
                     #endif
                 ],
                 [
                     #endif
                 ],
                 [
@@ -673,16 +734,37 @@ AC_DEFUN([AC_BAKEFILE_PRECOMP_HEADERS],
                     GCC_PCH=1
                 ],
                 [
                     GCC_PCH=1
                 ],
                 [
-                    AC_MSG_RESULT([no])
+                    if test "$INTELCXX8" = "yes"; then
+                        AC_MSG_RESULT([yes])
+                        ICC_PCH=1
+                        if test "$INTELCXX10" = "yes"; then
+                            ICC_PCH_CREATE_SWITCH="-pch-create"
+                            ICC_PCH_USE_SWITCH="-pch-use"
+                        else
+                            ICC_PCH_CREATE_SWITCH="-create-pch"
+                            ICC_PCH_USE_SWITCH="-use-pch"
+                        fi
+                    else
+                        AC_MSG_RESULT([no])
+                    fi
                 ])
                 ])
-            if test $GCC_PCH = 1 ; then
+            if test $GCC_PCH = 1 -o $ICC_PCH = 1 ; then
+                USE_PCH=1
                 AC_BAKEFILE_CREATE_FILE_BK_MAKE_PCH
                 chmod +x bk-make-pch
                 AC_BAKEFILE_CREATE_FILE_BK_MAKE_PCH
                 chmod +x bk-make-pch
+                dnl FIXME: make this $(top_builddir)/bk-make-pch once
+                dnl        autoconf-2.60 is required (and so top_builddir is
+                dnl        never empty):
+                BK_MAKE_PCH="`pwd`/bk-make-pch"
             fi
         fi
     fi
 
     AC_SUBST(GCC_PCH)
             fi
         fi
     fi
 
     AC_SUBST(GCC_PCH)
+    AC_SUBST(ICC_PCH)
+    AC_SUBST(ICC_PCH_CREATE_SWITCH)
+    AC_SUBST(ICC_PCH_USE_SWITCH)
+    AC_SUBST(BK_MAKE_PCH)
 ])
 
 
 ])
 
 
@@ -710,9 +792,19 @@ dnl ---------------------------------------------------------------------------
 
 AC_DEFUN([AC_BAKEFILE],
 [
 
 AC_DEFUN([AC_BAKEFILE],
 [
-    AC_PREREQ(2.58)
+    AC_PREREQ([2.58])
+
+    dnl We need to always run C/C++ compiler tests, but it's also possible
+    dnl for the user to call these macros manually, hence this instead of
+    dnl simply calling these macros. See http://www.bakefile.org/ticket/64
+    AC_REQUIRE([AC_BAKEFILE_PROG_CC])
+    AC_REQUIRE([AC_BAKEFILE_PROG_CXX])
 
     if test "x$BAKEFILE_HOST" = "x"; then
 
     if test "x$BAKEFILE_HOST" = "x"; then
+               if test "x${host}" = "x" ; then
+                       AC_MSG_ERROR([You must call the autoconf "CANONICAL_HOST" macro in your configure.ac (or .in) file.])
+               fi
+
         BAKEFILE_HOST="${host}"
     fi
 
         BAKEFILE_HOST="${host}"
     fi
 
@@ -728,509 +820,29 @@ AC_DEFUN([AC_BAKEFILE],
     AC_BAKEFILE_DEPS
     AC_BAKEFILE_RES_COMPILERS
 
     AC_BAKEFILE_DEPS
     AC_BAKEFILE_RES_COMPILERS
 
-    BAKEFILE_BAKEFILE_M4_VERSION="0.1.9"
-   
+    dnl OBJCFLAGS is set by Autoconf, but OBJCXXFLAGS is not:
+    AC_SUBST(OBJCXXFLAGS)
+
+
+    BAKEFILE_BAKEFILE_M4_VERSION="0.2.9"
+
     dnl includes autoconf_inc.m4:
     $1
     dnl includes autoconf_inc.m4:
     $1
-    
+
     if test "$BAKEFILE_AUTOCONF_INC_M4_VERSION" = "" ; then
         AC_MSG_ERROR([No version found in autoconf_inc.m4 - bakefile macro was changed to take additional argument, perhaps configure.in wasn't updated (see the documentation)?])
     fi
     if test "$BAKEFILE_AUTOCONF_INC_M4_VERSION" = "" ; then
         AC_MSG_ERROR([No version found in autoconf_inc.m4 - bakefile macro was changed to take additional argument, perhaps configure.in wasn't updated (see the documentation)?])
     fi
-    
+
     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
 ])
     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 ---------------------------------------------------------------------------
 
 
 dnl ---------------------------------------------------------------------------
 dnl              Embedded copies of helper scripts follow:
 dnl ---------------------------------------------------------------------------
 
-AC_DEFUN([AC_BAKEFILE_CREATE_FILE_DLLAR_SH],
-[
-dnl ===================== dllar.sh begins here =====================
-dnl    (Created by merge-scripts.py from dllar.sh
-dnl     file do not edit 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.sh @<:@-o@<:@utput@:>@ output_file@:>@ @<:@-i@<:@mport@:>@ importlib_name@:>@'
- echo '       @<:@-name-mangler-script script.sh@:>@'
- 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 '*> "script.sh may be given to override the output_file name by a'
- echo '   different name. It is mainly useful if the regular make process'
- echo '   of some package does not take into account OS/2 restriction of'
- echo '   DLL name lengths. It takes the importlib name as input and is'
- echo '   supposed to procude a shorter name as output. The script should'
- echo '   expect to get importlib_name without extension and should produce'
- echo '   a (max.) 8 letter name without extension.'
- 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=""
-renameScript=""
-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
-omfLinking=0
-while @<:@ ${D}1 @:>@; do
-    case ${D}1 in
-    -ord*)
-        EXPORT_BY_ORDINALS=1;
-        ;;
-    -o*)
-       shift
-        outFile=${D}1
-       ;;
-    -i*)
-        shift
-        outimpFile=${D}1
-        ;;
-    -name-mangler-script)
-        shift
-        renameScript=${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
-            ;;
-        -Zomf)
-            omfLinking=1
-            ;;
-        *)
-            ;;
-        esac
-        EXTRA_CFLAGS=${D}{EXTRA_CFLAGS}" "${D}1
-        ;;
-    *.dll)
-        EXTRA_CFLAGS="${D}{EXTRA_CFLAGS} \`basnam ${D}1 .dll\`"
-        if @<:@ ${D}omfLinking -eq 1 @:>@; then
-            EXTRA_CFLAGS="${D}{EXTRA_CFLAGS}.lib"
-       else
-            EXTRA_CFLAGS="${D}{EXTRA_CFLAGS}.a"
-        fi
-        ;;
-    *)
-        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"
-
-#create ${D}dllFile as something matching 8.3 restrictions,
-if @<:@ -z ${D}renameScript @:>@ ; then
-    dllFile="${D}outFile"
-else
-    dllFile=\`${D}renameScript ${D}outimpFile\`
-fi
-
-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 @<:@ ! -z ${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 =====================
 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_BK_DEPS],
 [
 dnl ===================== bk-deps begins here =====================
@@ -1240,24 +852,20 @@ D='$'
 cat <<EOF >bk-deps
 #!/bin/sh
 
 cat <<EOF >bk-deps
 #!/bin/sh
 
-# This script is part of Bakefile (http://bakefile.sourceforge.net) autoconf
+# This script is part of Bakefile (http://www.bakefile.org) 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}
 # 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="${DEPSFLAG}"
 DEPSFLAG="${DEPSFLAG}"
-
-mkdir -p ${D}DEPSDIR
+DEPSDIRBASE=.deps
 
 if test ${D}DEPSMODE = gcc ; then
     ${D}* ${D}{DEPSFLAG}
     status=${D}?
 
 if test ${D}DEPSMODE = gcc ; then
     ${D}* ${D}{DEPSFLAG}
     status=${D}?
-    if test ${D}{status} != 0 ; then
-        exit ${D}{status}
-    fi
-    # move created file to the location we want it in:
+
+    # determine location of created files:
     while test ${D}# -gt 0; do
         case "${D}1" in
             -o )
     while test ${D}# -gt 0; do
         case "${D}1" in
             -o )
@@ -1272,24 +880,37 @@ if test ${D}DEPSMODE = gcc ; then
         esac
         shift
     done
         esac
         shift
     done
+    objfilebase=\`basename ${D}objfile\`
+    builddir=\`dirname ${D}objfile\`
     depfile=\`basename ${D}srcfile | sed -e 's/\\..*${D}/.d/g'\`
     depobjname=\`echo ${D}depfile |sed -e 's/\\.d/.o/g'\`
     depfile=\`basename ${D}srcfile | sed -e 's/\\..*${D}/.d/g'\`
     depobjname=\`echo ${D}depfile |sed -e 's/\\.d/.o/g'\`
+    depsdir=${D}builddir/${D}DEPSDIRBASE
+    mkdir -p ${D}depsdir
+
+    # if the compiler failed, we're done:
+    if test ${D}{status} != 0 ; then
+        rm -f ${D}depfile
+        exit ${D}{status}
+    fi
+
+    # move created file to the location we want it in:
     if test -f ${D}depfile ; then
     if test -f ${D}depfile ; then
-        sed -e "s,${D}depobjname:,${D}objfile:,g" ${D}depfile >${D}{DEPSDIR}/${D}{objfile}.d
+        sed -e "s,${D}depobjname:,${D}objfile:,g" ${D}depfile >${D}{depsdir}/${D}{objfilebase}.d
         rm -f ${D}depfile
     else
         # "g++ -MMD -o fooobj.o foosrc.cpp" produces fooobj.d
         rm -f ${D}depfile
     else
         # "g++ -MMD -o fooobj.o foosrc.cpp" produces fooobj.d
-        depfile=\`basename ${D}objfile | sed -e 's/\\..*${D}/.d/g'\`
+        depfile=\`echo "${D}objfile" | sed -e 's/\\..*${D}/.d/g'\`
         if test ! -f ${D}depfile ; then
             # "cxx -MD -o fooobj.o foosrc.cpp" creates fooobj.o.d (Compaq C++)
             depfile="${D}objfile.d"
         fi
         if test -f ${D}depfile ; then
         if test ! -f ${D}depfile ; then
             # "cxx -MD -o fooobj.o foosrc.cpp" creates fooobj.o.d (Compaq C++)
             depfile="${D}objfile.d"
         fi
         if test -f ${D}depfile ; then
-            sed -e "/^${D}objfile/!s,${D}depobjname:,${D}objfile:,g" ${D}depfile >${D}{DEPSDIR}/${D}{objfile}.d
+            sed -e "\\,^${D}objfile,!s,${D}depobjname:,${D}objfile:,g" ${D}depfile >${D}{depsdir}/${D}{objfilebase}.d
             rm -f ${D}depfile
         fi
     fi
     exit 0
             rm -f ${D}depfile
         fi
     fi
     exit 0
+
 elif test ${D}DEPSMODE = mwcc ; then
     ${D}* || exit ${D}?
     # Run mwcc again with -MM and redirect into the dep file we want
 elif test ${D}DEPSMODE = mwcc ; then
     ${D}* || exit ${D}?
     # Run mwcc again with -MM and redirect into the dep file we want
@@ -1309,8 +930,15 @@ elif test ${D}DEPSMODE = mwcc ; then
         fi
         prevarg="${D}arg"
     done
         fi
         prevarg="${D}arg"
     done
-    ${D}* ${D}DEPSFLAG >${D}{DEPSDIR}/${D}{objfile}.d
+
+    objfilebase=\`basename ${D}objfile\`
+    builddir=\`dirname ${D}objfile\`
+    depsdir=${D}builddir/${D}DEPSDIRBASE
+    mkdir -p ${D}depsdir
+
+    ${D}* ${D}DEPSFLAG >${D}{depsdir}/${D}{objfilebase}.d
     exit 0
     exit 0
+
 elif test ${D}DEPSMODE = unixcc; then
     ${D}* || exit ${D}?
     # Run compiler again with deps flag and redirect into the dep file.
 elif test ${D}DEPSMODE = unixcc; then
     ${D}* || exit ${D}?
     # Run compiler again with deps flag and redirect into the dep file.
@@ -1331,8 +959,15 @@ elif test ${D}DEPSMODE = unixcc; then
         esac
         shift
     done
         esac
         shift
     done
-    eval "${D}cmd ${D}DEPSFLAG" | sed "s|.*:|${D}objfile:|" >${D}{DEPSDIR}/${D}{objfile}.d
+
+    objfilebase=\`basename ${D}objfile\`
+    builddir=\`dirname ${D}objfile\`
+    depsdir=${D}builddir/${D}DEPSDIRBASE
+    mkdir -p ${D}depsdir
+
+    eval "${D}cmd ${D}DEPSFLAG" | sed "s|.*:|${D}objfile:|" >${D}{depsdir}/${D}{objfilebase}.d
     exit 0
     exit 0
+
 else
     ${D}*
     exit ${D}?
 else
     ${D}*
     exit ${D}?
@@ -1363,6 +998,10 @@ objects=""
 linking_flag="-dynamiclib"
 ldargs="-r -keep_private_externs -nostdlib"
 
 linking_flag="-dynamiclib"
 ldargs="-r -keep_private_externs -nostdlib"
 
+if test "x${D}CXX" = "x"; then
+    CXX="c++"
+fi
+
 while test ${D}# -gt 0; do
     case ${D}1 in
 
 while test ${D}# -gt 0; do
     case ${D}1 in
 
@@ -1376,6 +1015,12 @@ while test ${D}# -gt 0; do
         shift
         ;;
        
         shift
         ;;
        
+       -arch|-isysroot)
+        # collect these options and values
+        ldargs="${D}{ldargs} ${D}1 ${D}2"
+        shift
+        ;;
+
        -s|-Wl,*)
         # collect these load args
         ldargs="${D}{ldargs} ${D}1"
        -s|-Wl,*)
         # collect these load args
         ldargs="${D}{ldargs} ${D}1"
@@ -1415,9 +1060,9 @@ status=0
 # Link one module containing all the others
 #
 if test ${D}{verbose} = 1; then
 # Link one module containing all the others
 #
 if test ${D}{verbose} = 1; then
-    echo "c++ ${D}{ldargs} ${D}{objects} -o master.${D}${D}.o"
+    echo "${D}CXX ${D}{ldargs} ${D}{objects} -o master.${D}${D}.o"
 fi
 fi
-c++ ${D}{ldargs} ${D}{objects} -o master.${D}${D}.o
+${D}CXX ${D}{ldargs} ${D}{objects} -o master.${D}${D}.o
 status=${D}?
 
 #
 status=${D}?
 
 #
@@ -1426,9 +1071,9 @@ status=${D}?
 #
 if test ${D}{status} = 0; then
     if test ${D}{verbose} = 1; then
 #
 if test ${D}{status} = 0; then
     if test ${D}{verbose} = 1; then
-        echo "c++ ${D}{linking_flag} master.${D}${D}.o ${D}{args}"
+        echo "${D}CXX ${D}{linking_flag} master.${D}${D}.o ${D}{args}"
     fi
     fi
-    c++ ${D}{linking_flag} master.${D}${D}.o ${D}{args}
+    ${D}CXX ${D}{linking_flag} master.${D}${D}.o ${D}{args}
     status=${D}?
 fi
 
     status=${D}?
 fi
 
@@ -1451,7 +1096,7 @@ D='$'
 cat <<EOF >bk-make-pch
 #!/bin/sh
 
 cat <<EOF >bk-make-pch
 #!/bin/sh
 
-# This script is part of Bakefile (http://bakefile.sourceforge.net) autoconf
+# This script is part of Bakefile (http://www.bakefile.org) autoconf
 # script. It is used to generated precompiled headers.
 #
 # Permission is given to use this file in any way.
 # script. It is used to generated precompiled headers.
 #
 # Permission is given to use this file in any way.
@@ -1461,9 +1106,13 @@ header="${D}{2}"
 shift
 shift
 
 shift
 shift
 
-compiler=
-headerfile=
+builddir=\`echo ${D}outfile | sed -e 's,/\\.pch/.*${D},,g'\`
+
+compiler=""
+headerfile=""
+
 while test ${D}{#} -gt 0; do
 while test ${D}{#} -gt 0; do
+    add_to_cmdline=1
     case "${D}{1}" in
         -I* )
             incdir=\`echo ${D}{1} | sed -e 's/-I\\(.*\\)/\\1/g'\`
     case "${D}{1}" in
         -I* )
             incdir=\`echo ${D}{1} | sed -e 's/-I\\(.*\\)/\\1/g'\`
@@ -1471,23 +1120,42 @@ while test ${D}{#} -gt 0; do
                 headerfile="${D}{incdir}/${D}{header}"
             fi
         ;;
                 headerfile="${D}{incdir}/${D}{header}"
             fi
         ;;
+        -use-pch|-use_pch|-pch-use )
+            shift
+            add_to_cmdline=0
+        ;;
     esac
     esac
-    compiler="${D}{compiler} ${D}{1}"
+    if test ${D}add_to_cmdline = 1 ; then
+        compiler="${D}{compiler} ${D}{1}"
+    fi
     shift
 done
 
 if test "x${D}{headerfile}" = "x" ; then
     shift
 done
 
 if test "x${D}{headerfile}" = "x" ; then
-    echo "error: can't find header ${D}{header} in include paths" >2
+    echo "error: can't find header ${D}{header} in include paths" >&2
 else
     if test -f ${D}{outfile} ; then
         rm -f ${D}{outfile}
     else
         mkdir -p \`dirname ${D}{outfile}\`
     fi
 else
     if test -f ${D}{outfile} ; then
         rm -f ${D}{outfile}
     else
         mkdir -p \`dirname ${D}{outfile}\`
     fi
-    depsfile=".deps/\`echo ${D}{outfile} | tr '/.' '__'\`.d"
-    mkdir -p .deps
-    # can do this because gcc is >= 3.4:
-    ${D}{compiler} -o ${D}{outfile} -MMD -MF "${D}{depsfile}" "${D}{headerfile}"
+    depsfile="${D}{builddir}/.deps/\`echo ${D}{outfile} | tr '/.' '__'\`.d"
+    mkdir -p ${D}{builddir}/.deps
+    if test "x${GCC_PCH}" = "x1" ; then
+        # can do this because gcc is >= 3.4:
+        ${D}{compiler} -o ${D}{outfile} -MMD -MF "${D}{depsfile}" "${D}{headerfile}"
+    elif test "x${ICC_PCH}" = "x1" ; then
+        filename=pch_gen-${D}${D}
+        file=${D}{filename}.c
+        dfile=${D}{filename}.d
+        cat > ${D}file <<EOT
+#include "${D}header"
+EOT
+        # using -MF icc complains about differing command lines in creation/use
+        ${D}compiler -c ${ICC_PCH_CREATE_SWITCH} ${D}outfile -MMD ${D}file && \\
+          sed -e "s,^.*:,${D}outfile:," -e "s, ${D}file,," < ${D}dfile > ${D}depsfile && \\
+          rm -f ${D}file ${D}dfile ${D}{filename}.o
+    fi
     exit ${D}{?}
 fi
 EOF
     exit ${D}{?}
 fi
 EOF