Import bakefile-lang.m4 and bakefile.m4 from bakefile SVN 2006-08-10.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/BAKEFILE@40637 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Michael Wetherell
2006-08-16 19:25:57 +00:00
parent 6e0771e557
commit df5029178c
2 changed files with 268 additions and 128 deletions

View File

@@ -42,14 +42,14 @@ AC_LANG_POP(C++)
dnl Based on autoconf _AC_LANG_COMPILER_GNU dnl Based on autoconf _AC_LANG_COMPILER_GNU
AC_DEFUN([_AC_BAKEFILE_LANG_COMPILER_XLC], AC_DEFUN([_AC_BAKEFILE_LANG_COMPILER_XLC],
[AC_CACHE_CHECK([whether we are using the IBM xlC _AC_LANG compiler], [AC_CACHE_CHECK([whether we are using the IBM xlC _AC_LANG compiler],
[wx_cv_[]_AC_LANG_ABBREV[]_compiler_xlc], [bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_xlc],
[AC_TRY_COMPILE([],[#ifndef __xlC__ [AC_TRY_COMPILE([],[#ifndef __xlC__
choke me choke me
#endif #endif
], ],
[wx_compiler_xlc=yes], [bakefile_compiler_xlc=yes],
[wx_compiler_xlc=no]) [bakefile_compiler_xlc=no])
wx_cv_[]_AC_LANG_ABBREV[]_compiler_xlc=$wx_compiler_xlc bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_xlc=$bakefile_compiler_xlc
]) ])
]) ])
@@ -57,7 +57,7 @@ dnl Loosely based on autoconf AC_PROG_CC
AC_DEFUN([AC_BAKEFILE_PROG_XLCC], AC_DEFUN([AC_BAKEFILE_PROG_XLCC],
[AC_LANG_PUSH(C) [AC_LANG_PUSH(C)
_AC_BAKEFILE_LANG_COMPILER_XLC _AC_BAKEFILE_LANG_COMPILER_XLC
XLCC=`test $wx_cv_c_compiler_xlc = yes && echo yes` XLCC=`test $bakefile_cv_c_compiler_xlc = yes && echo yes`
AC_LANG_POP(C) AC_LANG_POP(C)
]) ])
@@ -65,7 +65,7 @@ dnl Loosely based on autoconf AC_PROG_CXX
AC_DEFUN([AC_BAKEFILE_PROG_XLCXX], AC_DEFUN([AC_BAKEFILE_PROG_XLCXX],
[AC_LANG_PUSH(C++) [AC_LANG_PUSH(C++)
_AC_BAKEFILE_LANG_COMPILER_XLC _AC_BAKEFILE_LANG_COMPILER_XLC
XLCXX=`test $wx_cv_cxx_compiler_xlc = yes && echo yes` XLCXX=`test $bakefile_cv_cxx_compiler_xlc = yes && echo yes`
AC_LANG_POP(C++) AC_LANG_POP(C++)
]) ])
@@ -97,6 +97,10 @@ AC_DEFUN([_AC_BAKEFILE_LANG_COMPILER],
fi fi
]) ])
dnl recent versions of SGI mipsPro compiler define _SGI_COMPILER_VERSION
dnl
dnl NB: old versions define _COMPILER_VERSION but this could probably be
dnl defined by other compilers too so don't test for it to be safe
AC_DEFUN([AC_BAKEFILE_PROG_SGICC], AC_DEFUN([AC_BAKEFILE_PROG_SGICC],
[ [
_AC_BAKEFILE_LANG_COMPILER(SGI, C, _SGI_COMPILER_VERSION, SGICC=yes) _AC_BAKEFILE_LANG_COMPILER(SGI, C, _SGI_COMPILER_VERSION, SGICC=yes)
@@ -107,18 +111,49 @@ AC_DEFUN([AC_BAKEFILE_PROG_SGICXX],
_AC_BAKEFILE_LANG_COMPILER(SGI, C++, _SGI_COMPILER_VERSION, SGICXX=yes) _AC_BAKEFILE_LANG_COMPILER(SGI, C++, _SGI_COMPILER_VERSION, SGICXX=yes)
]) ])
dnl Loosely based on autoconf AC_PROG_CC dnl Sun compiler defines __SUNPRO_C/__SUNPRO_CC
AC_DEFUN([AC_BAKEFILE_PROG_SUNCC], AC_DEFUN([AC_BAKEFILE_PROG_SUNCC],
[ [
_AC_BAKEFILE_LANG_COMPILER(Sun, C, __SUNPRO_C, SUNCC=yes) _AC_BAKEFILE_LANG_COMPILER(Sun, C, __SUNPRO_C, SUNCC=yes)
]) ])
dnl Loosely based on autoconf AC_PROG_CC
AC_DEFUN([AC_BAKEFILE_PROG_SUNCXX], AC_DEFUN([AC_BAKEFILE_PROG_SUNCXX],
[ [
_AC_BAKEFILE_LANG_COMPILER(Sun, C++, __SUNPRO_CC, SUNCXX=yes) _AC_BAKEFILE_LANG_COMPILER(Sun, C++, __SUNPRO_CC, SUNCXX=yes)
]) ])
dnl Intel icc compiler defines __INTEL_COMPILER for both C and C++
AC_DEFUN([AC_BAKEFILE_PROG_INTELCC],
[
_AC_BAKEFILE_LANG_COMPILER(Intel, C, __INTEL_COMPILER, INTELCC=yes)
])
AC_DEFUN([AC_BAKEFILE_PROG_INTELCXX],
[
_AC_BAKEFILE_LANG_COMPILER(Intel, C++, __INTEL_COMPILER, INTELCXX=yes)
])
dnl HP-UX aCC: see http://docs.hp.com/en/6162/preprocess.htm#macropredef
AC_DEFUN([AC_BAKEFILE_PROG_HPCC],
[
_AC_BAKEFILE_LANG_COMPILER(HP, C, __HP_cc, HPCC=yes)
])
AC_DEFUN([AC_BAKEFILE_PROG_HPCXX],
[
_AC_BAKEFILE_LANG_COMPILER(HP, C++, __HP_aCC, HPCXX=yes)
])
dnl Tru64 cc and cxx
AC_DEFUN([AC_BAKEFILE_PROG_COMPAQCC],
[
_AC_BAKEFILE_LANG_COMPILER(Compaq, C, __DECC, COMPAQCC=yes)
])
AC_DEFUN([AC_BAKEFILE_PROG_COMPAQCXX],
[
_AC_BAKEFILE_LANG_COMPILER(Compaq, C++, __DECCXX, COMPAQCXX=yes)
])
dnl =========================================================================== dnl ===========================================================================
dnl macros to detect specialty compiler options dnl macros to detect specialty compiler options
@@ -126,7 +161,7 @@ dnl ===========================================================================
dnl Figure out if we need to pass -ext o to compiler (MetroWerks) dnl Figure out if we need to pass -ext o to compiler (MetroWerks)
AC_DEFUN([AC_BAKEFILE_METROWERKS_EXTO], AC_DEFUN([AC_BAKEFILE_METROWERKS_EXTO],
[AC_CACHE_CHECK([if the _AC_LANG compiler requires -ext o], wx_cv_[]_AC_LANG_ABBREV[]_exto, [AC_CACHE_CHECK([if the _AC_LANG compiler requires -ext o], bakefile_cv_[]_AC_LANG_ABBREV[]_exto,
dnl First create an empty conf test dnl First create an empty conf test
[AC_LANG_CONFTEST([AC_LANG_PROGRAM()]) [AC_LANG_CONFTEST([AC_LANG_PROGRAM()])
dnl Now remove .o and .c.o or .cc.o dnl Now remove .o and .c.o or .cc.o
@@ -137,7 +172,7 @@ dnl If the test succeeded look for conftest.c.o or conftest.cc.o
[for ac_file in `(ls conftest.* 2>/dev/null)`; do [for ac_file in `(ls conftest.* 2>/dev/null)`; do
case $ac_file in case $ac_file in
conftest.$ac_ext.o) conftest.$ac_ext.o)
wx_cv_[]_AC_LANG_ABBREV[]_exto="-ext o" bakefile_cv_[]_AC_LANG_ABBREV[]_exto="-ext o"
;; ;;
*) *)
;; ;;
@@ -149,12 +184,12 @@ done],
rm -f conftest.$ac_ext.o conftest.$ac_objext conftest.$ac_ext rm -f conftest.$ac_ext.o conftest.$ac_objext conftest.$ac_ext
]) dnl AC_CACHE_CHECK ]) dnl AC_CACHE_CHECK
if test "x$wx_cv_[]_AC_LANG_ABBREV[]_exto" '!=' "x"; then if test "x$bakefile_cv_[]_AC_LANG_ABBREV[]_exto" '!=' "x"; then
if test "[]_AC_LANG_ABBREV[]" = "c"; then if test "[]_AC_LANG_ABBREV[]" = "c"; then
CFLAGS="$wx_cv_[]_AC_LANG_ABBREV[]_exto $CFLAGS" CFLAGS="$bakefile_cv_[]_AC_LANG_ABBREV[]_exto $CFLAGS"
fi fi
if test "[]_AC_LANG_ABBREV[]" = "cxx"; then if test "[]_AC_LANG_ABBREV[]" = "cxx"; then
CXXFLAGS="$wx_cv_[]_AC_LANG_ABBREV[]_exto $CXXFLAGS" CXXFLAGS="$bakefile_cv_[]_AC_LANG_ABBREV[]_exto $CXXFLAGS"
fi fi
fi fi
]) dnl AC_DEFUN ]) dnl AC_DEFUN
@@ -163,33 +198,61 @@ fi
dnl =========================================================================== dnl ===========================================================================
dnl Macros to do all of the compiler detections as one macro dnl Macros to do all of the compiler detections as one macro
dnl =========================================================================== dnl ===========================================================================
dnl check for different proprietary compilers depending on target platform
dnl _AC_BAKEFILE_PROG_COMPILER(LANG)
AC_DEFUN([_AC_BAKEFILE_PROG_COMPILER],
[
AC_PROG_$1
AC_BAKEFILE_PROG_INTEL$1
dnl if we're using gcc, we can't be using any of incompatible compilers
if test "x$G$1" != "xyes"; then
if test "x$1" = "xC"; then
AC_BAKEFILE_METROWERKS_EXTO
if test "x$bakefile_cv_c_exto" '!=' "x"; then
unset ac_cv_prog_cc_g
_AC_PROG_CC_G
fi
fi
dnl most of these compilers are only used under well-defined OS so
dnl don't waste time checking for them on other ones
case `uname -s` in
AIX*)
AC_BAKEFILE_PROG_XL$1
;;
Darwin)
AC_BAKEFILE_PROG_MW$1
AC_BAKEFILE_PROG_XL$1
;;
IRIX*)
AC_BAKEFILE_PROG_SGI$1
;;
HP-UX*)
AC_BAKEFILE_PROG_HP$1
;;
OSF1)
AC_BAKEFILE_PROG_COMPAQ$1
;;
SunOS)
AC_BAKEFILE_PROG_SUN$1
;;
esac
fi
])
AC_DEFUN([AC_BAKEFILE_PROG_CC], AC_DEFUN([AC_BAKEFILE_PROG_CC],
[ [
AC_PROG_CC _AC_BAKEFILE_PROG_COMPILER(CC)
AC_BAKEFILE_METROWERKS_EXTO
dnl By the time we find out that we need -ext o some tests have failed.
if test "x$wx_cv_c_exto" '!=' "x"; then
unset ac_cv_prog_cc_g
_AC_PROG_CC_G
fi
AC_BAKEFILE_PROG_MWCC
AC_BAKEFILE_PROG_XLCC
AC_BAKEFILE_PROG_SGICC
AC_BAKEFILE_PROG_SUNCC
]) ])
AC_DEFUN([AC_BAKEFILE_PROG_CXX], AC_DEFUN([AC_BAKEFILE_PROG_CXX],
[ [
AC_PROG_CXX _AC_BAKEFILE_PROG_COMPILER(CXX)
AC_BAKEFILE_METROWERKS_EXTO
dnl By the time we find out that we need -ext o some tests have failed.
if test "x$wx_cv_cxx_exto" '!=' "x"; then
unset ac_cv_prog_cxx_g
_AC_PROG_CXX_G
fi
AC_BAKEFILE_PROG_MWCXX
AC_BAKEFILE_PROG_XLCXX
AC_BAKEFILE_PROG_SGICXX
AC_BAKEFILE_PROG_SUNCXX
]) ])

View File

@@ -287,7 +287,7 @@ AC_DEFUN([AC_BAKEFILE_SHARED_LD],
AC_TRY_COMPILE([], AC_TRY_COMPILE([],
[ [
#ifndef __INTEL_COMPILER #ifndef __INTEL_COMPILER
#error Not icc This is not ICC
#endif #endif
], ],
bakefile_cv_prog_icc=yes, bakefile_cv_prog_icc=yes,
@@ -309,6 +309,12 @@ AC_DEFUN([AC_BAKEFILE_SHARED_LD],
;; ;;
*-*-darwin* ) *-*-darwin* )
AC_BAKEFILE_CREATE_FILE_SHARED_LD_SH
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"
dnl Most apps benefit from being fully binded (its faster and static dnl Most apps benefit from being fully binded (its faster and static
dnl variables initialized at startup work). dnl variables initialized at startup work).
dnl This can be done either with the exe linker flag -Wl,-bind_at_load dnl This can be done either with the exe linker flag -Wl,-bind_at_load
@@ -316,39 +322,32 @@ AC_DEFUN([AC_BAKEFILE_SHARED_LD],
dnl "-init _wxWindowsDylibInit" not useful with lazy linking solved dnl "-init _wxWindowsDylibInit" not useful with lazy linking solved
dnl If using newer dev tools then there is a -single_module flag that dnl If using newer dev tools then there is a -single_module flag that
dnl we can use to do this, otherwise we'll need to use a helper dnl we can use to do this for dylibs, otherwise we'll need to use a helper
dnl script. Check the version of gcc to see which way we can go: dnl script. Check the version of gcc to see which way we can go:
AC_CACHE_CHECK([for gcc 3.1 or later], wx_cv_gcc31, [ AC_CACHE_CHECK([for gcc 3.1 or later], bakefile_cv_gcc31, [
AC_TRY_COMPILE([], AC_TRY_COMPILE([],
[ [
#if (__GNUC__ < 3) || \ #if (__GNUC__ < 3) || \
((__GNUC__ == 3) && (__GNUC_MINOR__ < 1)) ((__GNUC__ == 3) && (__GNUC_MINOR__ < 1))
#error old gcc This is old gcc
#endif #endif
], ],
[ [
wx_cv_gcc31=yes bakefile_cv_gcc31=yes
], ],
[ [
wx_cv_gcc31=no bakefile_cv_gcc31=no
] ]
) )
]) ])
if test "$wx_cv_gcc31" = "no"; then if test "$bakefile_cv_gcc31" = "no"; then
AC_BAKEFILE_CREATE_FILE_SHARED_LD_SH
chmod +x shared-ld-sh
dnl Use the shared-ld-sh helper script dnl Use the shared-ld-sh helper script
SHARED_LD_CC="`pwd`/shared-ld-sh -dynamiclib -headerpad_max_install_names -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_CXX="$SHARED_LD_CC"
SHARED_LD_MODULE_CXX="$SHARED_LD_MODULE_CC"
else else
dnl Use the -single_module flag and let the linker do it for us dnl Use the -single_module flag and let the linker do it for us
SHARED_LD_CC="\${CC} -dynamiclib -single_module -headerpad_max_install_names -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_CXX="\${CXX} -dynamiclib -single_module -headerpad_max_install_names -o"
SHARED_LD_MODULE_CXX="\${CXX} -bundle -single_module -headerpad_max_install_names -o"
fi fi
if test "x$GCC" == "xyes"; then if test "x$GCC" == "xyes"; then
@@ -360,20 +359,32 @@ AC_DEFUN([AC_BAKEFILE_SHARED_LD],
;; ;;
*-*-aix* ) *-*-aix* )
dnl at least gcc 2.95 warns that -fPIC is ignored when compiling
dnl each and every file under AIX which is annoying, so don't use
dnl it there (it's useless as AIX runs on position-independent
dnl architectures only anyhow)
if test "x$GCC" = "xyes"; then if test "x$GCC" = "xyes"; then
PIC_FLAG="" dnl at least gcc 2.95 warns that -fPIC is ignored when
SHARED_LD_CC="\$(CC) -shared ${PIC_FLAG} -o" dnl compiling each and every file under AIX which is annoying,
SHARED_LD_CXX="\$(CXX) -shared ${PIC_FLAG} -o" dnl so don't use it there (it's useless as AIX runs on
else dnl position-independent architectures only anyhow)
dnl the abs path below used to be hardcoded here so I guess it must PIC_FLAG=""
dnl be some sort of standard location under AIX?
dnl -bexpfull is needed by AIX linker to export all symbols (by
dnl default it doesn't export any and even with -bexpall it
dnl doesn't export all C++ support symbols, e.g. vtable
dnl pointers) but it's only available starting from 5.1 (with
dnl maintenance pack 2, whatever this is), see
dnl http://www-128.ibm.com/developerworks/eserver/articles/gnu.html
case "${BAKEFILE_HOST}" in
*-*-aix5* )
LD_EXPFULL="-Wl,-bexpfull"
;;
esac
SHARED_LD_CC="\$(CC) -shared $LD_EXPFULL -o"
SHARED_LD_CXX="\$(CXX) -shared $LD_EXPFULL -o"
else
dnl FIXME: makeC++SharedLib is obsolete, what should we do for
dnl recent AIX versions?
AC_CHECK_PROG(AIX_CXX_LD, makeC++SharedLib, AC_CHECK_PROG(AIX_CXX_LD, makeC++SharedLib,
makeC++SharedLib, /usr/lpp/xlC/bin/makeC++SharedLib) makeC++SharedLib, /usr/lpp/xlC/bin/makeC++SharedLib)
dnl FIXME - what about makeCSharedLib?
SHARED_LD_CC="$AIX_CC_LD -p 0 -o" SHARED_LD_CC="$AIX_CC_LD -p 0 -o"
SHARED_LD_CXX="$AIX_CXX_LD -p 0 -o" SHARED_LD_CXX="$AIX_CXX_LD -p 0 -o"
fi fi
@@ -503,42 +514,61 @@ 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 if test "x$bk_use_trackdeps" = "xno" ; then
DEPSMODE=gcc DEPS_TRACKING=0
case "${BAKEFILE_HOST}" in AC_MSG_RESULT([disabled])
*-*-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])
else else
DEPS_TRACKING=0 DEPS_TRACKING=1
AC_MSG_RESULT([none])
fi
if test $DEPS_TRACKING = 1 ; then if test "x$GCC" = "xyes"; then
AC_BAKEFILE_CREATE_FILE_BK_DEPS DEPSMODE=gcc
chmod +x bk-deps 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
fi
fi fi
AC_SUBST(DEPS_TRACKING) AC_SUBST(DEPS_TRACKING)
@@ -592,26 +622,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* ) *-*-cygwin* | *-*-mingw32* )
dnl Check for win32 resources compiler: dnl Check for win32 resources compiler:
if test "$build" != "$host" ; then AC_CHECK_TOOL(WINDRES, windres)
RESCOMP=$host_alias-windres
else
AC_CHECK_PROG(RESCOMP, windres, windres, windres)
fi
;; ;;
*-*-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) AC_CHECK_PROG(SETFILE, SetFile, SetFile, /Developer/Tools/SetFile)
;; ;;
esac esac
AC_SUBST(RESCOMP) AC_SUBST(WINDRES)
AC_SUBST(REZ)
AC_SUBST(SETFILE) AC_SUBST(SETFILE)
]) ])
@@ -630,6 +654,17 @@ AC_DEFUN([AC_BAKEFILE_PRECOMP_HEADERS],
[bk_use_pch="$enableval"]) [bk_use_pch="$enableval"])
GCC_PCH=0 GCC_PCH=0
ICC_PCH=0
USE_PCH=0
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$bk_use_pch" = "x" -o "x$bk_use_pch" = "xyes" ; then
if test "x$GCC" = "xyes"; then if test "x$GCC" = "xyes"; then
@@ -638,15 +673,16 @@ AC_DEFUN([AC_BAKEFILE_PRECOMP_HEADERS],
AC_TRY_COMPILE([], AC_TRY_COMPILE([],
[ [
#if !defined(__GNUC__) || !defined(__GNUC_MINOR__) #if !defined(__GNUC__) || !defined(__GNUC_MINOR__)
#error "no pch support" There is no PCH support
#endif #endif
#if (__GNUC__ < 3) #if (__GNUC__ < 3)
#error "no pch support" There is no PCH support
#endif #endif
#if (__GNUC__ == 3) && \ #if (__GNUC__ == 3) && \
((!defined(__APPLE_CC__) && (__GNUC_MINOR__ < 4)) || \ ((!defined(__APPLE_CC__) && (__GNUC_MINOR__ < 4)) || \
( defined(__APPLE_CC__) && (__GNUC_MINOR__ < 3))) ( defined(__APPLE_CC__) && (__GNUC_MINOR__ < 3))) || \
#error "no pch support" ( defined(__INTEL_COMPILER) )
There is no PCH support
#endif #endif
], ],
[ [
@@ -654,9 +690,23 @@ AC_DEFUN([AC_BAKEFILE_PRECOMP_HEADERS],
GCC_PCH=1 GCC_PCH=1
], ],
[ [
AC_MSG_RESULT([no]) AC_TRY_COMPILE([],
[
#if !defined(__INTEL_COMPILER) || \
(__INTEL_COMPILER < 800)
There is no PCH support
#endif
],
[
AC_MSG_RESULT([yes])
ICC_PCH=1
],
[
AC_MSG_RESULT([no])
])
]) ])
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 AC_BAKEFILE_CREATE_FILE_BK_MAKE_PCH
chmod +x bk-make-pch chmod +x bk-make-pch
fi fi
@@ -664,6 +714,7 @@ AC_DEFUN([AC_BAKEFILE_PRECOMP_HEADERS],
fi fi
AC_SUBST(GCC_PCH) AC_SUBST(GCC_PCH)
AC_SUBST(ICC_PCH)
]) ])
@@ -694,6 +745,10 @@ AC_DEFUN([AC_BAKEFILE],
AC_PREREQ(2.58) AC_PREREQ(2.58)
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}" BAKEFILE_HOST="${host}"
fi fi
@@ -709,7 +764,7 @@ AC_DEFUN([AC_BAKEFILE],
AC_BAKEFILE_DEPS AC_BAKEFILE_DEPS
AC_BAKEFILE_RES_COMPILERS AC_BAKEFILE_RES_COMPILERS
BAKEFILE_BAKEFILE_M4_VERSION="0.1.9" BAKEFILE_BAKEFILE_M4_VERSION="0.2.0"
dnl includes autoconf_inc.m4: dnl includes autoconf_inc.m4:
$1 $1
@@ -1259,7 +1314,12 @@ if test ${D}DEPSMODE = gcc ; 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}{objfile}.d
rm -f ${D}depfile rm -f ${D}depfile
else else
# "g++ -MMD -o fooobj.o foosrc.cpp" produces fooobj.d
depfile=\`basename ${D}objfile | sed -e 's/\\..*${D}/.d/g'\` depfile=\`basename ${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
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}{objfile}.d
rm -f ${D}depfile rm -f ${D}depfile
@@ -1267,11 +1327,7 @@ if test ${D}DEPSMODE = gcc ; then
fi fi
exit 0 exit 0
elif test ${D}DEPSMODE = mwcc ; then elif test ${D}DEPSMODE = mwcc ; then
${D}* ${D}* || exit ${D}?
status=${D}?
if test ${D}{status} != 0 ; then
exit ${D}{status}
fi
# Run mwcc again with -MM and redirect into the dep file we want # Run mwcc again with -MM and redirect into the dep file we want
# NOTE: We can't use shift here because we need ${D}* to be valid # NOTE: We can't use shift here because we need ${D}* to be valid
prevarg= prevarg=
@@ -1292,7 +1348,7 @@ elif test ${D}DEPSMODE = mwcc ; then
${D}* ${D}DEPSFLAG >${D}{DEPSDIR}/${D}{objfile}.d ${D}* ${D}DEPSFLAG >${D}{DEPSDIR}/${D}{objfile}.d
exit 0 exit 0
elif test ${D}DEPSMODE = unixcc; then elif test ${D}DEPSMODE = unixcc; then
${D}* || exit ${D}* || exit ${D}?
# Run compiler again with deps flag and redirect into the dep file. # Run compiler again with deps flag and redirect into the dep file.
# It doesn't work if the '-o FILE' option is used, but without it the # It doesn't work if the '-o FILE' option is used, but without it the
# dependency file will contain the wrong name for the object. So it is # dependency file will contain the wrong name for the object. So it is
@@ -1441,9 +1497,11 @@ header="${D}{2}"
shift shift
shift shift
compiler= compiler=""
headerfile= headerfile=""
while test ${D}{#} -gt 0; do while test ${D}{#} -gt 0; do
add_to_cmdline=1
case "${D}{1}" in case "${D}{1}" in
-I* ) -I* )
incdir=\`echo ${D}{1} | sed -e 's/-I\\(.*\\)/\\1/g'\` incdir=\`echo ${D}{1} | sed -e 's/-I\\(.*\\)/\\1/g'\`
@@ -1451,13 +1509,19 @@ while test ${D}{#} -gt 0; do
headerfile="${D}{incdir}/${D}{header}" headerfile="${D}{incdir}/${D}{header}"
fi fi
;; ;;
-use-pch|-use_pch )
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 shift
done done
if test "x${D}{headerfile}" = "x" ; then 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 else
if test -f ${D}{outfile} ; then if test -f ${D}{outfile} ; then
rm -f ${D}{outfile} rm -f ${D}{outfile}
@@ -1466,8 +1530,21 @@ else
fi fi
depsfile=".deps/\`echo ${D}{outfile} | tr '/.' '__'\`.d" depsfile=".deps/\`echo ${D}{outfile} | tr '/.' '__'\`.d"
mkdir -p .deps mkdir -p .deps
# can do this because gcc is >= 3.4: if test "x${GCC_PCH}" = "x1" ; then
${D}{compiler} -o ${D}{outfile} -MMD -MF "${D}{depsfile}" "${D}{headerfile}" # 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 -create_pch ${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}{?} exit ${D}{?}
fi fi
EOF EOF