2 dnl This file is part of Bakefile (http://www.bakefile.org)
4 dnl Copyright (C) 2003-2007 Vaclav Slavik and others
6 dnl Permission is hereby granted, free of charge, to any person obtaining a
7 dnl copy of this software and associated documentation files (the "Software"),
8 dnl to deal in the Software without restriction, including without limitation
9 dnl the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 dnl and/or sell copies of the Software, and to permit persons to whom the
11 dnl Software is furnished to do so, subject to the following conditions:
13 dnl The above copyright notice and this permission notice shall be included in
14 dnl all copies or substantial portions of the Software.
16 dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 dnl IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 dnl FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 dnl THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 dnl LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 dnl FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 dnl DEALINGS IN THE SOFTWARE.
26 dnl Support macros for makefiles generated by BAKEFILE.
30 dnl ---------------------------------------------------------------------------
31 dnl Lots of compiler & linker detection code contained here was taken from
32 dnl wxWidgets configure.in script (see http://www.wxwidgets.org)
33 dnl ---------------------------------------------------------------------------
37 dnl ---------------------------------------------------------------------------
38 dnl AC_BAKEFILE_GNUMAKE
41 dnl ---------------------------------------------------------------------------
43 AC_DEFUN([AC_BAKEFILE_GNUMAKE],
45 dnl does make support "-include" (only GNU make does AFAIK)?
46 AC_CACHE_CHECK([if make is GNU make], bakefile_cv_prog_makeisgnu,
48 if ( ${SHELL-sh} -c "${MAKE-make} --version" 2> /dev/null |
49 egrep -s GNU > /dev/null); then
50 bakefile_cv_prog_makeisgnu="yes"
52 bakefile_cv_prog_makeisgnu="no"
56 if test "x$bakefile_cv_prog_makeisgnu" = "xyes"; then
64 dnl ---------------------------------------------------------------------------
65 dnl AC_BAKEFILE_PLATFORM
67 dnl Detects platform and sets PLATFORM_XXX variables accordingly
68 dnl ---------------------------------------------------------------------------
70 AC_DEFUN([AC_BAKEFILE_PLATFORM],
81 if test "x$BAKEFILE_FORCE_PLATFORM" = "x"; then
82 case "${BAKEFILE_HOST}" in
89 *-pc-os2_emx | *-pc-os2-emx )
99 powerpc-apple-macos* )
108 case "$BAKEFILE_FORCE_PLATFORM" in
129 AC_MSG_ERROR([Unknown platform: $BAKEFILE_FORCE_PLATFORM])
134 AC_SUBST(PLATFORM_UNIX)
135 AC_SUBST(PLATFORM_WIN32)
136 AC_SUBST(PLATFORM_MSDOS)
137 AC_SUBST(PLATFORM_MAC)
138 AC_SUBST(PLATFORM_MACOS)
139 AC_SUBST(PLATFORM_MACOSX)
140 AC_SUBST(PLATFORM_OS2)
141 AC_SUBST(PLATFORM_BEOS)
145 dnl ---------------------------------------------------------------------------
146 dnl AC_BAKEFILE_PLATFORM_SPECIFICS
148 dnl Sets misc platform-specific settings
149 dnl ---------------------------------------------------------------------------
151 AC_DEFUN([AC_BAKEFILE_PLATFORM_SPECIFICS],
153 AC_ARG_ENABLE([omf], AS_HELP_STRING([--enable-omf],
154 [use OMF object format (OS/2)]),
155 [bk_os2_use_omf="$enableval"])
157 case "${BAKEFILE_HOST}" in
159 dnl For Unix to MacOS X porting instructions, see:
160 dnl http://fink.sourceforge.net/doc/porting/porting.html
161 if test "x$GCC" = "xyes"; then
162 CFLAGS="$CFLAGS -fno-common"
163 CXXFLAGS="$CXXFLAGS -fno-common"
165 if test "x$XLCC" = "xyes"; then
166 CFLAGS="$CFLAGS -qnocommon"
167 CXXFLAGS="$CXXFLAGS -qnocommon"
171 *-pc-os2_emx | *-pc-os2-emx )
172 if test "x$bk_os2_use_omf" = "xyes" ; then
175 LDFLAGS="-Zomf $LDFLAGS"
176 CFLAGS="-Zomf $CFLAGS"
177 CXXFLAGS="-Zomf $CXXFLAGS"
185 LDFLAGS="-L/boot/develop/lib/x86 $LDFLAGS"
190 dnl ---------------------------------------------------------------------------
191 dnl AC_BAKEFILE_SUFFIXES
193 dnl Detects shared various suffixes for shared libraries, libraries, programs,
195 dnl ---------------------------------------------------------------------------
197 AC_DEFUN([AC_BAKEFILE_SUFFIXES],
200 SO_SUFFIX_MODULE="so"
209 case "${BAKEFILE_HOST}" in
210 dnl PA-RISC HP systems used .sl but IA64 use ELF-64 and so use the
211 dnl standard .so extension
216 SO_SUFFIX_MODULE="sl"
220 dnl http://www-1.ibm.com/servers/esdd/articles/gnu.html:
221 dnl Both archive libraries and shared libraries on AIX have an
222 dnl .a extension. This will explain why you can't link with an
223 dnl .so and why it works with the name changed to .a.
229 SO_SUFFIX_MODULE="dll"
230 DLLIMP_SUFFIX="dll.a"
237 SO_SUFFIX_MODULE="dll"
238 DLLIMP_SUFFIX="dll.a"
248 *-pc-os2_emx | *-pc-os2-emx )
250 SO_SUFFIX_MODULE="dll"
251 DLLIMP_SUFFIX=$OS2_LIBEXT
255 LIBEXT=".$OS2_LIBEXT"
260 SO_SUFFIX_MODULE="bundle"
264 if test "x$DLLIMP_SUFFIX" = "x" ; then
265 DLLIMP_SUFFIX="$SO_SUFFIX"
269 AC_SUBST(SO_SUFFIX_MODULE)
270 AC_SUBST(DLLIMP_SUFFIX)
275 AC_SUBST(DLLPREFIX_MODULE)
280 dnl ---------------------------------------------------------------------------
281 dnl AC_BAKEFILE_SHARED_LD
283 dnl Detects command for making shared libraries, substitutes SHARED_LD_CC
284 dnl and SHARED_LD_CXX.
285 dnl ---------------------------------------------------------------------------
287 AC_DEFUN([AC_BAKEFILE_SHARED_LD],
289 dnl the extra compiler flags needed for compilation of shared library
291 if test "x$GCC" = "xyes"; then
292 dnl the switch for gcc is the same under all platforms
296 dnl Defaults for GCC and ELF .so shared libs:
297 SHARED_LD_CC="\$(CC) -shared ${PIC_FLAG} -o"
298 SHARED_LD_CXX="\$(CXX) -shared ${PIC_FLAG} -o"
301 case "${BAKEFILE_HOST}" in
303 dnl default settings are good for gcc but not for the native HP-UX
304 if test "x$GCC" != "xyes"; then
305 dnl no idea why it wants it, but it does
306 LDFLAGS="$LDFLAGS -L/usr/lib"
308 SHARED_LD_CC="${CC} -b -o"
309 SHARED_LD_CXX="${CXX} -b -o"
315 dnl newer icc versions use -fPIC just as gcc does and, in fact, the
316 dnl newest (v10+) ones don't even understand -KPIC any longer
317 if test "$INTELCC" = "yes" -a "$INTELCC8" != "yes"; then
319 elif test "x$SUNCXX" = "xyes"; then
320 SHARED_LD_CC="${CC} -G -o"
321 SHARED_LD_CXX="${CXX} -G -o"
327 if test "x$SUNCXX" = xyes ; then
328 SHARED_LD_CC="${CC} -G -o"
329 SHARED_LD_CXX="${CXX} -G -o"
335 AC_BAKEFILE_CREATE_FILE_SHARED_LD_SH
336 chmod +x shared-ld-sh
338 SHARED_LD_MODULE_CC="`pwd`/shared-ld-sh -bundle -headerpad_max_install_names -o"
339 SHARED_LD_MODULE_CXX="CXX=\"\$(CXX)\" $SHARED_LD_MODULE_CC"
341 dnl Most apps benefit from being fully binded (its faster and static
342 dnl variables initialized at startup work).
343 dnl This can be done either with the exe linker flag -Wl,-bind_at_load
344 dnl or with a double stage link in order to create a single module
345 dnl "-init _wxWindowsDylibInit" not useful with lazy linking solved
347 dnl If using newer dev tools then there is a -single_module flag that
348 dnl we can use to do this for dylibs, otherwise we'll need to use a helper
349 dnl script. Check the version of gcc to see which way we can go:
350 AC_CACHE_CHECK([for gcc 3.1 or later], bakefile_cv_gcc31, [
353 #if (__GNUC__ < 3) || \
354 ((__GNUC__ == 3) && (__GNUC_MINOR__ < 1))
359 bakefile_cv_gcc31=yes
366 if test "$bakefile_cv_gcc31" = "no"; then
367 dnl Use the shared-ld-sh helper script
368 SHARED_LD_CC="`pwd`/shared-ld-sh -dynamiclib -headerpad_max_install_names -o"
369 SHARED_LD_CXX="$SHARED_LD_CC"
371 dnl Use the -single_module flag and let the linker do it for us
372 SHARED_LD_CC="\${CC} -dynamiclib -single_module -headerpad_max_install_names -o"
373 SHARED_LD_CXX="\${CXX} -dynamiclib -single_module -headerpad_max_install_names -o"
376 if test "x$GCC" == "xyes"; then
377 PIC_FLAG="-dynamic -fPIC"
379 if test "x$XLCC" = "xyes"; then
380 PIC_FLAG="-dynamic -DPIC"
385 if test "x$GCC" = "xyes"; then
386 dnl at least gcc 2.95 warns that -fPIC is ignored when
387 dnl compiling each and every file under AIX which is annoying,
388 dnl so don't use it there (it's useless as AIX runs on
389 dnl position-independent architectures only anyhow)
392 dnl -bexpfull is needed by AIX linker to export all symbols (by
393 dnl default it doesn't export any and even with -bexpall it
394 dnl doesn't export all C++ support symbols, e.g. vtable
395 dnl pointers) but it's only available starting from 5.1 (with
396 dnl maintenance pack 2, whatever this is), see
397 dnl http://www-128.ibm.com/developerworks/eserver/articles/gnu.html
398 case "${BAKEFILE_HOST}" in
400 LD_EXPFULL="-Wl,-bexpfull"
404 SHARED_LD_CC="\$(CC) -shared $LD_EXPFULL -o"
405 SHARED_LD_CXX="\$(CXX) -shared $LD_EXPFULL -o"
407 dnl FIXME: makeC++SharedLib is obsolete, what should we do for
408 dnl recent AIX versions?
409 AC_CHECK_PROG(AIX_CXX_LD, makeC++SharedLib,
410 makeC++SharedLib, /usr/lpp/xlC/bin/makeC++SharedLib)
411 SHARED_LD_CC="$AIX_CC_LD -p 0 -o"
412 SHARED_LD_CXX="$AIX_CXX_LD -p 0 -o"
417 dnl can't use gcc under BeOS for shared library creation because it
418 dnl complains about missing 'main'
419 SHARED_LD_CC="${LD} -nostart -o"
420 SHARED_LD_CXX="${LD} -nostart -o"
424 dnl default settings are ok for gcc
425 if test "x$GCC" != "xyes"; then
430 *-*-cygwin* | *-*-mingw32* )
432 SHARED_LD_CC="\$(CC) -shared -o"
433 SHARED_LD_CXX="\$(CXX) -shared -o"
437 *-pc-os2_emx | *-pc-os2-emx )
438 SHARED_LD_CC="`pwd`/dllar.sh -libf INITINSTANCE -libf TERMINSTANCE -o"
439 SHARED_LD_CXX="`pwd`/dllar.sh -libf INITINSTANCE -libf TERMINSTANCE -o"
441 AC_BAKEFILE_CREATE_FILE_DLLAR_SH
445 powerpc-apple-macos* | \
446 *-*-freebsd* | *-*-openbsd* | *-*-netbsd* | *-*-k*bsd*-gnu | \
457 AC_MSG_ERROR(unknown system type $BAKEFILE_HOST.)
460 if test "x$PIC_FLAG" != "x" ; then
461 PIC_FLAG="$PIC_FLAG -DPIC"
464 if test "x$SHARED_LD_MODULE_CC" = "x" ; then
465 SHARED_LD_MODULE_CC="$SHARED_LD_CC"
467 if test "x$SHARED_LD_MODULE_CXX" = "x" ; then
468 SHARED_LD_MODULE_CXX="$SHARED_LD_CXX"
471 AC_SUBST(SHARED_LD_CC)
472 AC_SUBST(SHARED_LD_CXX)
473 AC_SUBST(SHARED_LD_MODULE_CC)
474 AC_SUBST(SHARED_LD_MODULE_CXX)
476 AC_SUBST(WINDOWS_IMPLIB)
480 dnl ---------------------------------------------------------------------------
481 dnl AC_BAKEFILE_SHARED_VERSIONS
483 dnl Detects linker options for attaching versions (sonames) to shared libs.
484 dnl ---------------------------------------------------------------------------
486 AC_DEFUN([AC_BAKEFILE_SHARED_VERSIONS],
496 case "${BAKEFILE_HOST}" in
497 *-*-linux* | *-*-freebsd* | *-*-openbsd* | *-*-netbsd* | \
498 *-*-k*bsd*-gnu | *-*-mirbsd* )
499 if test "x$SUNCXX" = "xyes"; then
502 SONAME_FLAG="-Wl,-soname,"
527 AC_SUBST(USE_SOVERSION)
528 AC_SUBST(USE_SOVERLINUX)
529 AC_SUBST(USE_SOVERSOLARIS)
530 AC_SUBST(USE_SOVERCYGWIN)
531 AC_SUBST(USE_MACVERSION)
532 AC_SUBST(USE_SOTWOSYMLINKS)
533 AC_SUBST(SONAME_FLAG)
537 dnl ---------------------------------------------------------------------------
540 dnl Detects available C/C++ dependency tracking options
541 dnl ---------------------------------------------------------------------------
543 AC_DEFUN([AC_BAKEFILE_DEPS],
545 AC_ARG_ENABLE([dependency-tracking],
546 AS_HELP_STRING([--disable-dependency-tracking],
547 [don't use dependency tracking even if the compiler can]),
548 [bk_use_trackdeps="$enableval"])
550 AC_MSG_CHECKING([for dependency tracking method])
553 if test "x$bk_use_trackdeps" = "xno" ; then
555 AC_MSG_RESULT([disabled])
559 if test "x$GCC" = "xyes"; then
561 case "${BAKEFILE_HOST}" in
563 dnl -cpp-precomp (the default) conflicts with -MMD option
564 dnl used by bk-deps (see also http://developer.apple.com/documentation/Darwin/Conceptual/PortingUnix/compiling/chapter_4_section_3.html)
565 DEPSFLAG="-no-cpp-precomp -MMD"
572 elif test "x$MWCC" = "xyes"; then
575 AC_MSG_RESULT([mwcc])
576 elif test "x$SUNCC" = "xyes"; then
579 AC_MSG_RESULT([Sun cc])
580 elif test "x$SGICC" = "xyes"; then
583 AC_MSG_RESULT([SGI cc])
584 elif test "x$HPCC" = "xyes"; then
587 AC_MSG_RESULT([HP cc])
588 elif test "x$COMPAQCC" = "xyes"; then
591 AC_MSG_RESULT([Compaq cc])
594 AC_MSG_RESULT([none])
597 if test $DEPS_TRACKING = 1 ; then
598 AC_BAKEFILE_CREATE_FILE_BK_DEPS
600 dnl FIXME: make this $(top_builddir)/bk-deps once autoconf-2.60
601 dnl is required (and so top_builddir is never empty):
602 BK_DEPS="`pwd`/bk-deps"
606 AC_SUBST(DEPS_TRACKING)
610 dnl ---------------------------------------------------------------------------
611 dnl AC_BAKEFILE_CHECK_BASIC_STUFF
613 dnl Checks for presence of basic programs, such as C and C++ compiler, "ranlib"
615 dnl ---------------------------------------------------------------------------
617 AC_DEFUN([AC_BAKEFILE_CHECK_BASIC_STUFF],
626 if test "x$SUNCXX" = "xyes"; then
627 dnl Sun C++ compiler requires special way of creating static libs;
628 dnl see here for more details:
629 dnl https://sourceforge.net/tracker/?func=detail&atid=109863&aid=1229751&group_id=9863
633 elif test "x$SGICC" = "xyes"; then
634 dnl Almost the same as above for SGI mipsPro compiler
639 AC_CHECK_TOOL(AR, ar, ar)
644 AC_CHECK_TOOL(STRIP, strip, :)
645 AC_CHECK_TOOL(NM, nm, :)
647 dnl This check is necessary because "install -d" doesn't exist on
648 dnl all platforms (e.g. HP/UX), see http://www.bakefile.org/ticket/80
649 AC_MSG_CHECKING([for command to install directories])
650 INSTALL_TEST_DIR=acbftest$$
651 $INSTALL -d $INSTALL_TEST_DIR > /dev/null 2>&1
652 if test $? = 0 -a -d $INSTALL_TEST_DIR; then
653 rmdir $INSTALL_TEST_DIR
654 dnl we must refer to makefile's $(INSTALL) variable and not
655 dnl current value of shell variable, hence the single quoting:
656 INSTALL_DIR='$(INSTALL) -d'
657 AC_MSG_RESULT([$INSTALL -d])
659 INSTALL_DIR="mkdir -p"
660 AC_MSG_RESULT([mkdir -p])
662 AC_SUBST(INSTALL_DIR)
665 case ${BAKEFILE_HOST} in
666 *-*-cygwin* | *-*-mingw32* )
667 LDFLAGS_GUI="-mwindows"
669 AC_SUBST(LDFLAGS_GUI)
673 dnl ---------------------------------------------------------------------------
674 dnl AC_BAKEFILE_RES_COMPILERS
676 dnl Checks for presence of resource compilers for win32 or mac
677 dnl ---------------------------------------------------------------------------
679 AC_DEFUN([AC_BAKEFILE_RES_COMPILERS],
681 case ${BAKEFILE_HOST} in
682 *-*-cygwin* | *-*-mingw32* )
683 dnl Check for win32 resources compiler:
684 AC_CHECK_TOOL(WINDRES, windres)
687 *-*-darwin* | powerpc-apple-macos* )
688 AC_CHECK_PROG(REZ, Rez, Rez, /Developer/Tools/Rez)
689 AC_CHECK_PROG(SETFILE, SetFile, SetFile, /Developer/Tools/SetFile)
698 dnl ---------------------------------------------------------------------------
699 dnl AC_BAKEFILE_PRECOMP_HEADERS
701 dnl Check for precompiled headers support (GCC >= 3.4)
702 dnl ---------------------------------------------------------------------------
704 AC_DEFUN([AC_BAKEFILE_PRECOMP_HEADERS],
707 AC_ARG_ENABLE([precomp-headers],
708 AS_HELP_STRING([--disable-precomp-headers],
709 [don't use precompiled headers even if compiler can]),
710 [bk_use_pch="$enableval"])
717 case ${BAKEFILE_HOST} in
719 dnl PCH support is broken in cygwin gcc because of unportable
720 dnl assumptions about mmap() in gcc code which make PCH generation
721 dnl fail erratically; disable PCH completely until this is fixed
726 if test "x$bk_use_pch" = "x" -o "x$bk_use_pch" = "xyes" ; then
727 if test "x$GCC" = "xyes"; then
728 dnl test if we have gcc-3.4:
729 AC_MSG_CHECKING([if the compiler supports precompiled headers])
732 #if !defined(__GNUC__) || !defined(__GNUC_MINOR__)
733 There is no PCH support
736 There is no PCH support
738 #if (__GNUC__ == 3) && \
739 ((!defined(__APPLE_CC__) && (__GNUC_MINOR__ < 4)) || \
740 ( defined(__APPLE_CC__) && (__GNUC_MINOR__ < 3))) || \
741 ( defined(__INTEL_COMPILER) )
742 There is no PCH support
750 if test "$INTELCXX8" = "yes"; then
753 if test "$INTELCXX10" = "yes"; then
754 ICC_PCH_CREATE_SWITCH="-pch-create"
755 ICC_PCH_USE_SWITCH="-pch-use"
757 ICC_PCH_CREATE_SWITCH="-create-pch"
758 ICC_PCH_USE_SWITCH="-use-pch"
764 if test $GCC_PCH = 1 -o $ICC_PCH = 1 ; then
766 AC_BAKEFILE_CREATE_FILE_BK_MAKE_PCH
768 dnl FIXME: make this $(top_builddir)/bk-make-pch once
769 dnl autoconf-2.60 is required (and so top_builddir is
771 BK_MAKE_PCH="`pwd`/bk-make-pch"
778 AC_SUBST(ICC_PCH_CREATE_SWITCH)
779 AC_SUBST(ICC_PCH_USE_SWITCH)
780 AC_SUBST(BK_MAKE_PCH)
785 dnl ---------------------------------------------------------------------------
786 dnl AC_BAKEFILE([autoconf_inc.m4 inclusion])
788 dnl To be used in configure.in of any project using Bakefile-generated mks
790 dnl Behaviour can be modified by setting following variables:
791 dnl BAKEFILE_CHECK_BASICS set to "no" if you don't want bakefile to
792 dnl to perform check for basic tools like ranlib
793 dnl BAKEFILE_HOST set this to override host detection, defaults
795 dnl BAKEFILE_FORCE_PLATFORM set to override platform detection
799 dnl AC_BAKEFILE([FOO(autoconf_inc.m4)])
801 dnl (replace FOO with m4_include above, aclocal would die otherwise)
802 dnl (yes, it's ugly, but thanks to a bug in aclocal, it's the only thing
804 dnl ---------------------------------------------------------------------------
806 AC_DEFUN([AC_BAKEFILE],
810 dnl We need to always run C/C++ compiler tests, but it's also possible
811 dnl for the user to call these macros manually, hence this instead of
812 dnl simply calling these macros. See http://www.bakefile.org/ticket/64
813 AC_REQUIRE([AC_BAKEFILE_PROG_CC])
814 AC_REQUIRE([AC_BAKEFILE_PROG_CXX])
816 if test "x$BAKEFILE_HOST" = "x"; then
817 if test "x${host}" = "x" ; then
818 AC_MSG_ERROR([You must call the autoconf "CANONICAL_HOST" macro in your configure.ac (or .in) file.])
821 BAKEFILE_HOST="${host}"
824 if test "x$BAKEFILE_CHECK_BASICS" != "xno"; then
825 AC_BAKEFILE_CHECK_BASIC_STUFF
829 AC_BAKEFILE_PLATFORM_SPECIFICS
831 AC_BAKEFILE_SHARED_LD
832 AC_BAKEFILE_SHARED_VERSIONS
834 AC_BAKEFILE_RES_COMPILERS
836 dnl OBJCFLAGS is set by Autoconf, but OBJCXXFLAGS is not:
837 AC_SUBST(OBJCXXFLAGS)
840 BAKEFILE_BAKEFILE_M4_VERSION="0.2.8"
842 dnl includes autoconf_inc.m4:
845 if test "$BAKEFILE_AUTOCONF_INC_M4_VERSION" = "" ; then
846 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)?])
849 if test "$BAKEFILE_BAKEFILE_M4_VERSION" != "$BAKEFILE_AUTOCONF_INC_M4_VERSION" ; then
850 AC_MSG_ERROR([Versions of Bakefile used to generate makefiles ($BAKEFILE_AUTOCONF_INC_M4_VERSION) and configure ($BAKEFILE_BAKEFILE_M4_VERSION) do not match.])
855 dnl ---------------------------------------------------------------------------
856 dnl Embedded copies of helper scripts follow:
857 dnl ---------------------------------------------------------------------------
859 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_BK_DEPS],
861 dnl ===================== bk-deps begins here =====================
862 dnl (Created by merge-scripts.py from bk-deps
863 dnl file do not edit here!)
868 # This script is part of Bakefile (http://www.bakefile.org) autoconf
869 # script. It is used to track C/C++ files dependencies in portable way.
871 # Permission is given to use this file in any way.
874 DEPSFLAG="${DEPSFLAG}"
877 if test ${D}DEPSMODE = gcc ; then
881 # determine location of created files:
882 while test ${D}# -gt 0; do
896 objfilebase=\`basename ${D}objfile\`
897 builddir=\`dirname ${D}objfile\`
898 depfile=\`basename ${D}srcfile | sed -e 's/\\..*${D}/.d/g'\`
899 depobjname=\`echo ${D}depfile |sed -e 's/\\.d/.o/g'\`
900 depsdir=${D}builddir/${D}DEPSDIRBASE
903 # if the compiler failed, we're done:
904 if test ${D}{status} != 0 ; then
909 # move created file to the location we want it in:
910 if test -f ${D}depfile ; then
911 sed -e "s,${D}depobjname:,${D}objfile:,g" ${D}depfile >${D}{depsdir}/${D}{objfilebase}.d
914 # "g++ -MMD -o fooobj.o foosrc.cpp" produces fooobj.d
915 depfile=\`echo "${D}objfile" | sed -e 's/\\..*${D}/.d/g'\`
916 if test ! -f ${D}depfile ; then
917 # "cxx -MD -o fooobj.o foosrc.cpp" creates fooobj.o.d (Compaq C++)
918 depfile="${D}objfile.d"
920 if test -f ${D}depfile ; then
921 sed -e "\\,^${D}objfile,!s,${D}depobjname:,${D}objfile:,g" ${D}depfile >${D}{depsdir}/${D}{objfilebase}.d
927 elif test ${D}DEPSMODE = mwcc ; then
929 # Run mwcc again with -MM and redirect into the dep file we want
930 # NOTE: We can't use shift here because we need ${D}* to be valid
932 for arg in ${D}* ; do
933 if test "${D}prevarg" = "-o"; then
947 objfilebase=\`basename ${D}objfile\`
948 builddir=\`dirname ${D}objfile\`
949 depsdir=${D}builddir/${D}DEPSDIRBASE
952 ${D}* ${D}DEPSFLAG >${D}{depsdir}/${D}{objfilebase}.d
955 elif test ${D}DEPSMODE = unixcc; then
957 # Run compiler again with deps flag and redirect into the dep file.
958 # It doesn't work if the '-o FILE' option is used, but without it the
959 # dependency file will contain the wrong name for the object. So it is
960 # removed from the command line, and the dep file is fixed with sed.
962 while test ${D}# -gt 0; do
969 eval arg${D}#=\\${D}1
970 cmd="${D}cmd \\${D}arg${D}#"
976 objfilebase=\`basename ${D}objfile\`
977 builddir=\`dirname ${D}objfile\`
978 depsdir=${D}builddir/${D}DEPSDIRBASE
981 eval "${D}cmd ${D}DEPSFLAG" | sed "s|.*:|${D}objfile:|" >${D}{depsdir}/${D}{objfilebase}.d
989 dnl ===================== bk-deps ends here =====================
992 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_SHARED_LD_SH],
994 dnl ===================== shared-ld-sh begins here =====================
995 dnl (Created by merge-scripts.py from shared-ld-sh
996 dnl file do not edit here!)
998 cat <<EOF >shared-ld-sh
1000 #-----------------------------------------------------------------------------
1001 #-- Name: distrib/mac/shared-ld-sh
1002 #-- Purpose: Link a mach-o dynamic shared library for Darwin / Mac OS X
1003 #-- Author: Gilles Depeyrot
1004 #-- Copyright: (c) 2002 Gilles Depeyrot
1005 #-- Licence: any use permitted
1006 #-----------------------------------------------------------------------------
1011 linking_flag="-dynamiclib"
1012 ldargs="-r -keep_private_externs -nostdlib"
1014 if test "x${D}CXX" = "x"; then
1018 while test ${D}# -gt 0; do
1025 -o|-compatibility_version|-current_version|-framework|-undefined|-install_name)
1026 # collect these options and values
1027 args="${D}{args} ${D}1 ${D}2"
1032 # collect these options and values
1033 ldargs="${D}{ldargs} ${D}1 ${D}2"
1038 # collect these load args
1039 ldargs="${D}{ldargs} ${D}1"
1042 -l*|-L*|-flat_namespace|-headerpad_max_install_names)
1043 # collect these options
1044 args="${D}{args} ${D}1"
1047 -dynamiclib|-bundle)
1048 linking_flag="${D}1"
1052 echo "shared-ld: unhandled option '${D}1'"
1056 *.o | *.a | *.dylib)
1057 # collect object files
1058 objects="${D}{objects} ${D}1"
1062 echo "shared-ld: unhandled argument '${D}1'"
1073 # Link one module containing all the others
1075 if test ${D}{verbose} = 1; then
1076 echo "${D}CXX ${D}{ldargs} ${D}{objects} -o master.${D}${D}.o"
1078 ${D}CXX ${D}{ldargs} ${D}{objects} -o master.${D}${D}.o
1082 # Link the shared library from the single module created, but only if the
1083 # previous command didn't fail:
1085 if test ${D}{status} = 0; then
1086 if test ${D}{verbose} = 1; then
1087 echo "${D}CXX ${D}{linking_flag} master.${D}${D}.o ${D}{args}"
1089 ${D}CXX ${D}{linking_flag} master.${D}${D}.o ${D}{args}
1094 # Remove intermediate module
1096 rm -f master.${D}${D}.o
1100 dnl ===================== shared-ld-sh ends here =====================
1103 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_BK_MAKE_PCH],
1105 dnl ===================== bk-make-pch begins here =====================
1106 dnl (Created by merge-scripts.py from bk-make-pch
1107 dnl file do not edit here!)
1109 cat <<EOF >bk-make-pch
1112 # This script is part of Bakefile (http://www.bakefile.org) autoconf
1113 # script. It is used to generated precompiled headers.
1115 # Permission is given to use this file in any way.
1122 builddir=\`echo ${D}outfile | sed -e 's,/\\.pch/.*${D},,g'\`
1127 while test ${D}{#} -gt 0; do
1131 incdir=\`echo ${D}{1} | sed -e 's/-I\\(.*\\)/\\1/g'\`
1132 if test "x${D}{headerfile}" = "x" -a -f "${D}{incdir}/${D}{header}" ; then
1133 headerfile="${D}{incdir}/${D}{header}"
1136 -use-pch|-use_pch|-pch-use )
1141 if test ${D}add_to_cmdline = 1 ; then
1142 compiler="${D}{compiler} ${D}{1}"
1147 if test "x${D}{headerfile}" = "x" ; then
1148 echo "error: can't find header ${D}{header} in include paths" >&2
1150 if test -f ${D}{outfile} ; then
1153 mkdir -p \`dirname ${D}{outfile}\`
1155 depsfile="${D}{builddir}/.deps/\`echo ${D}{outfile} | tr '/.' '__'\`.d"
1156 mkdir -p ${D}{builddir}/.deps
1157 if test "x${GCC_PCH}" = "x1" ; then
1158 # can do this because gcc is >= 3.4:
1159 ${D}{compiler} -o ${D}{outfile} -MMD -MF "${D}{depsfile}" "${D}{headerfile}"
1160 elif test "x${ICC_PCH}" = "x1" ; then
1161 filename=pch_gen-${D}${D}
1162 file=${D}{filename}.c
1163 dfile=${D}{filename}.d
1164 cat > ${D}file <<EOT
1165 #include "${D}header"
1167 # using -MF icc complains about differing command lines in creation/use
1168 ${D}compiler -c ${ICC_PCH_CREATE_SWITCH} ${D}outfile -MMD ${D}file && \\
1169 sed -e "s,^.*:,${D}outfile:," -e "s, ${D}file,," < ${D}dfile > ${D}depsfile && \\
1170 rm -f ${D}file ${D}dfile ${D}{filename}.o
1175 dnl ===================== bk-make-pch ends here =====================