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 dnl wxWidgets-specific: allow unknown Unix systems
130 dnl AC_MSG_ERROR([Unknown platform: $BAKEFILE_FORCE_PLATFORM])
135 AC_SUBST(PLATFORM_UNIX)
136 AC_SUBST(PLATFORM_WIN32)
137 AC_SUBST(PLATFORM_MSDOS)
138 AC_SUBST(PLATFORM_MAC)
139 AC_SUBST(PLATFORM_MACOS)
140 AC_SUBST(PLATFORM_MACOSX)
141 AC_SUBST(PLATFORM_OS2)
142 AC_SUBST(PLATFORM_BEOS)
146 dnl ---------------------------------------------------------------------------
147 dnl AC_BAKEFILE_PLATFORM_SPECIFICS
149 dnl Sets misc platform-specific settings
150 dnl ---------------------------------------------------------------------------
152 AC_DEFUN([AC_BAKEFILE_PLATFORM_SPECIFICS],
154 AC_ARG_ENABLE([omf], AS_HELP_STRING([--enable-omf],
155 [use OMF object format (OS/2)]),
156 [bk_os2_use_omf="$enableval"])
158 case "${BAKEFILE_HOST}" in
160 dnl For Unix to MacOS X porting instructions, see:
161 dnl http://fink.sourceforge.net/doc/porting/porting.html
162 if test "x$GCC" = "xyes"; then
163 CFLAGS="$CFLAGS -fno-common"
164 CXXFLAGS="$CXXFLAGS -fno-common"
166 if test "x$XLCC" = "xyes"; then
167 CFLAGS="$CFLAGS -qnocommon"
168 CXXFLAGS="$CXXFLAGS -qnocommon"
172 *-pc-os2_emx | *-pc-os2-emx )
173 if test "x$bk_os2_use_omf" = "xyes" ; then
176 LDFLAGS="-Zomf $LDFLAGS"
177 CFLAGS="-Zomf $CFLAGS"
178 CXXFLAGS="-Zomf $CXXFLAGS"
186 LDFLAGS="-L/boot/develop/lib/x86 $LDFLAGS"
191 dnl ---------------------------------------------------------------------------
192 dnl AC_BAKEFILE_SUFFIXES
194 dnl Detects shared various suffixes for shared libraries, libraries, programs,
196 dnl ---------------------------------------------------------------------------
198 AC_DEFUN([AC_BAKEFILE_SUFFIXES],
201 SO_SUFFIX_MODULE="so"
210 case "${BAKEFILE_HOST}" in
211 dnl PA-RISC HP systems used .sl but IA64 use ELF-64 and so use the
212 dnl standard .so extension
217 SO_SUFFIX_MODULE="sl"
221 dnl http://www-1.ibm.com/servers/esdd/articles/gnu.html:
222 dnl Both archive libraries and shared libraries on AIX have an
223 dnl .a extension. This will explain why you can't link with an
224 dnl .so and why it works with the name changed to .a.
230 SO_SUFFIX_MODULE="dll"
231 DLLIMP_SUFFIX="dll.a"
238 SO_SUFFIX_MODULE="dll"
239 DLLIMP_SUFFIX="dll.a"
249 *-pc-os2_emx | *-pc-os2-emx )
251 SO_SUFFIX_MODULE="dll"
252 DLLIMP_SUFFIX=$OS2_LIBEXT
256 LIBEXT=".$OS2_LIBEXT"
261 SO_SUFFIX_MODULE="bundle"
265 if test "x$DLLIMP_SUFFIX" = "x" ; then
266 DLLIMP_SUFFIX="$SO_SUFFIX"
270 AC_SUBST(SO_SUFFIX_MODULE)
271 AC_SUBST(DLLIMP_SUFFIX)
276 AC_SUBST(DLLPREFIX_MODULE)
281 dnl ---------------------------------------------------------------------------
282 dnl AC_BAKEFILE_SHARED_LD
284 dnl Detects command for making shared libraries, substitutes SHARED_LD_CC
285 dnl and SHARED_LD_CXX.
286 dnl ---------------------------------------------------------------------------
288 AC_DEFUN([AC_BAKEFILE_SHARED_LD],
290 dnl the extra compiler flags needed for compilation of shared library
292 if test "x$GCC" = "xyes"; then
293 dnl the switch for gcc is the same under all platforms
297 dnl Defaults for GCC and ELF .so shared libs:
298 SHARED_LD_CC="\$(CC) -shared ${PIC_FLAG} -o"
299 SHARED_LD_CXX="\$(CXX) -shared ${PIC_FLAG} -o"
302 case "${BAKEFILE_HOST}" in
304 dnl default settings are good for gcc but not for the native HP-UX
305 if test "x$GCC" != "xyes"; then
306 dnl no idea why it wants it, but it does
307 LDFLAGS="$LDFLAGS -L/usr/lib"
309 SHARED_LD_CC="${CC} -b -o"
310 SHARED_LD_CXX="${CXX} -b -o"
316 if test "$INTELCC" = "yes"; then
318 elif test "x$SUNCXX" = "xyes"; then
319 SHARED_LD_CC="${CC} -G -o"
320 SHARED_LD_CXX="${CXX} -G -o"
326 if test "x$SUNCXX" = xyes ; then
327 SHARED_LD_CC="${CC} -G -o"
328 SHARED_LD_CXX="${CXX} -G -o"
334 AC_BAKEFILE_CREATE_FILE_SHARED_LD_SH
335 chmod +x shared-ld-sh
337 SHARED_LD_MODULE_CC="`pwd`/shared-ld-sh -bundle -headerpad_max_install_names -o"
338 SHARED_LD_MODULE_CXX="CXX=\$(CXX) $SHARED_LD_MODULE_CC"
340 dnl Most apps benefit from being fully binded (its faster and static
341 dnl variables initialized at startup work).
342 dnl This can be done either with the exe linker flag -Wl,-bind_at_load
343 dnl or with a double stage link in order to create a single module
344 dnl "-init _wxWindowsDylibInit" not useful with lazy linking solved
346 dnl If using newer dev tools then there is a -single_module flag that
347 dnl we can use to do this for dylibs, otherwise we'll need to use a helper
348 dnl script. Check the version of gcc to see which way we can go:
349 AC_CACHE_CHECK([for gcc 3.1 or later], bakefile_cv_gcc31, [
352 #if (__GNUC__ < 3) || \
353 ((__GNUC__ == 3) && (__GNUC_MINOR__ < 1))
358 bakefile_cv_gcc31=yes
365 if test "$bakefile_cv_gcc31" = "no"; then
366 dnl Use the shared-ld-sh helper script
367 SHARED_LD_CC="`pwd`/shared-ld-sh -dynamiclib -headerpad_max_install_names -o"
368 SHARED_LD_CXX="$SHARED_LD_CC"
370 dnl Use the -single_module flag and let the linker do it for us
371 SHARED_LD_CC="\${CC} -dynamiclib -single_module -headerpad_max_install_names -o"
372 SHARED_LD_CXX="\${CXX} -dynamiclib -single_module -headerpad_max_install_names -o"
375 if test "x$GCC" == "xyes"; then
376 PIC_FLAG="-dynamic -fPIC"
378 if test "x$XLCC" = "xyes"; then
379 PIC_FLAG="-dynamic -DPIC"
384 if test "x$GCC" = "xyes"; then
385 dnl at least gcc 2.95 warns that -fPIC is ignored when
386 dnl compiling each and every file under AIX which is annoying,
387 dnl so don't use it there (it's useless as AIX runs on
388 dnl position-independent architectures only anyhow)
391 dnl -bexpfull is needed by AIX linker to export all symbols (by
392 dnl default it doesn't export any and even with -bexpall it
393 dnl doesn't export all C++ support symbols, e.g. vtable
394 dnl pointers) but it's only available starting from 5.1 (with
395 dnl maintenance pack 2, whatever this is), see
396 dnl http://www-128.ibm.com/developerworks/eserver/articles/gnu.html
397 case "${BAKEFILE_HOST}" in
399 LD_EXPFULL="-Wl,-bexpfull"
403 SHARED_LD_CC="\$(CC) -shared $LD_EXPFULL -o"
404 SHARED_LD_CXX="\$(CXX) -shared $LD_EXPFULL -o"
406 dnl FIXME: makeC++SharedLib is obsolete, what should we do for
407 dnl recent AIX versions?
408 AC_CHECK_PROG(AIX_CXX_LD, makeC++SharedLib,
409 makeC++SharedLib, /usr/lpp/xlC/bin/makeC++SharedLib)
410 SHARED_LD_CC="$AIX_CC_LD -p 0 -o"
411 SHARED_LD_CXX="$AIX_CXX_LD -p 0 -o"
416 dnl can't use gcc under BeOS for shared library creation because it
417 dnl complains about missing 'main'
418 SHARED_LD_CC="${LD} -nostart -o"
419 SHARED_LD_CXX="${LD} -nostart -o"
423 dnl default settings are ok for gcc
424 if test "x$GCC" != "xyes"; then
429 *-*-cygwin* | *-*-mingw32* )
431 SHARED_LD_CC="\$(CC) -shared -o"
432 SHARED_LD_CXX="\$(CXX) -shared -o"
436 *-pc-os2_emx | *-pc-os2-emx )
437 SHARED_LD_CC="`pwd`/dllar.sh -libf INITINSTANCE -libf TERMINSTANCE -o"
438 SHARED_LD_CXX="`pwd`/dllar.sh -libf INITINSTANCE -libf TERMINSTANCE -o"
440 AC_BAKEFILE_CREATE_FILE_DLLAR_SH
444 powerpc-apple-macos* | \
445 *-*-freebsd* | *-*-openbsd* | *-*-netbsd* | *-*-k*bsd*-gnu | \
456 AC_MSG_ERROR(unknown system type $BAKEFILE_HOST.)
459 if test "x$PIC_FLAG" != "x" ; then
460 PIC_FLAG="$PIC_FLAG -DPIC"
463 if test "x$SHARED_LD_MODULE_CC" = "x" ; then
464 SHARED_LD_MODULE_CC="$SHARED_LD_CC"
466 if test "x$SHARED_LD_MODULE_CXX" = "x" ; then
467 SHARED_LD_MODULE_CXX="$SHARED_LD_CXX"
470 AC_SUBST(SHARED_LD_CC)
471 AC_SUBST(SHARED_LD_CXX)
472 AC_SUBST(SHARED_LD_MODULE_CC)
473 AC_SUBST(SHARED_LD_MODULE_CXX)
475 AC_SUBST(WINDOWS_IMPLIB)
479 dnl ---------------------------------------------------------------------------
480 dnl AC_BAKEFILE_SHARED_VERSIONS
482 dnl Detects linker options for attaching versions (sonames) to shared libs.
483 dnl ---------------------------------------------------------------------------
485 AC_DEFUN([AC_BAKEFILE_SHARED_VERSIONS],
495 case "${BAKEFILE_HOST}" in
496 *-*-linux* | *-*-freebsd* | *-*-openbsd* | *-*-netbsd* | \
497 *-*-k*bsd*-gnu | *-*-mirbsd* )
498 if test "x$SUNCXX" = "xyes"; then
501 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_SOSYMLINKS)
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
752 #if !defined(__INTEL_COMPILER) || \
753 (__INTEL_COMPILER < 800)
754 There is no PCH support
765 if test $GCC_PCH = 1 -o $ICC_PCH = 1 ; then
767 AC_BAKEFILE_CREATE_FILE_BK_MAKE_PCH
769 dnl FIXME: make this $(top_builddir)/bk-make-pch once
770 dnl autoconf-2.60 is required (and so top_builddir is
772 BK_MAKE_PCH="`pwd`/bk-make-pch"
779 AC_SUBST(BK_MAKE_PCH)
784 dnl ---------------------------------------------------------------------------
785 dnl AC_BAKEFILE([autoconf_inc.m4 inclusion])
787 dnl To be used in configure.in of any project using Bakefile-generated mks
789 dnl Behaviour can be modified by setting following variables:
790 dnl BAKEFILE_CHECK_BASICS set to "no" if you don't want bakefile to
791 dnl to perform check for basic tools like ranlib
792 dnl BAKEFILE_HOST set this to override host detection, defaults
794 dnl BAKEFILE_FORCE_PLATFORM set to override platform detection
798 dnl AC_BAKEFILE([FOO(autoconf_inc.m4)])
800 dnl (replace FOO with m4_include above, aclocal would die otherwise)
801 dnl (yes, it's ugly, but thanks to a bug in aclocal, it's the only thing
803 dnl ---------------------------------------------------------------------------
805 AC_DEFUN([AC_BAKEFILE],
809 dnl We need to always run C/C++ compiler tests, but it's also possible
810 dnl for the user to call these macros manually, hence this instead of
811 dnl simply calling these macros. See http://www.bakefile.org/ticket/64
812 AC_REQUIRE([AC_BAKEFILE_PROG_CC])
813 AC_REQUIRE([AC_BAKEFILE_PROG_CXX])
815 if test "x$BAKEFILE_HOST" = "x"; then
816 if test "x${host}" = "x" ; then
817 AC_MSG_ERROR([You must call the autoconf "CANONICAL_HOST" macro in your configure.ac (or .in) file.])
820 BAKEFILE_HOST="${host}"
823 if test "x$BAKEFILE_CHECK_BASICS" != "xno"; then
824 AC_BAKEFILE_CHECK_BASIC_STUFF
828 AC_BAKEFILE_PLATFORM_SPECIFICS
830 AC_BAKEFILE_SHARED_LD
831 AC_BAKEFILE_SHARED_VERSIONS
833 AC_BAKEFILE_RES_COMPILERS
835 dnl OBJCFLAGS is set by Autoconf, but OBJCXXFLAGS is not:
836 AC_SUBST(OBJCXXFLAGS)
839 BAKEFILE_BAKEFILE_M4_VERSION="0.2.5"
841 dnl includes autoconf_inc.m4:
844 if test "$BAKEFILE_AUTOCONF_INC_M4_VERSION" = "" ; then
845 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)?])
848 if test "$BAKEFILE_BAKEFILE_M4_VERSION" != "$BAKEFILE_AUTOCONF_INC_M4_VERSION" ; then
849 AC_MSG_ERROR([Versions of Bakefile used to generate makefiles ($BAKEFILE_AUTOCONF_INC_M4_VERSION) and configure ($BAKEFILE_BAKEFILE_M4_VERSION) do not match.])
854 dnl ---------------------------------------------------------------------------
855 dnl Embedded copies of helper scripts follow:
856 dnl ---------------------------------------------------------------------------
858 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_BK_DEPS],
860 dnl ===================== bk-deps begins here =====================
861 dnl (Created by merge-scripts.py from bk-deps
862 dnl file do not edit here!)
867 # This script is part of Bakefile (http://www.bakefile.org) autoconf
868 # script. It is used to track C/C++ files dependencies in portable way.
870 # Permission is given to use this file in any way.
873 DEPSFLAG="${DEPSFLAG}"
876 if test ${D}DEPSMODE = gcc ; then
880 # determine location of created files:
881 while test ${D}# -gt 0; do
895 objfilebase=\`basename ${D}objfile\`
896 builddir=\`dirname ${D}objfile\`
897 depfile=\`basename ${D}srcfile | sed -e 's/\\..*${D}/.d/g'\`
898 depobjname=\`echo ${D}depfile |sed -e 's/\\.d/.o/g'\`
899 depsdir=${D}builddir/${D}DEPSDIRBASE
902 # if the compiler failed, we're done:
903 if test ${D}{status} != 0 ; then
908 # move created file to the location we want it in:
909 if test -f ${D}depfile ; then
910 sed -e "s,${D}depobjname:,${D}objfile:,g" ${D}depfile >${D}{depsdir}/${D}{objfilebase}.d
913 # "g++ -MMD -o fooobj.o foosrc.cpp" produces fooobj.d
914 depfile=\`echo "${D}objfile" | sed -e 's/\\..*${D}/.d/g'\`
915 if test ! -f ${D}depfile ; then
916 # "cxx -MD -o fooobj.o foosrc.cpp" creates fooobj.o.d (Compaq C++)
917 depfile="${D}objfile.d"
919 if test -f ${D}depfile ; then
920 sed -e "\\,^${D}objfile,!s,${D}depobjname:,${D}objfile:,g" ${D}depfile >${D}{depsdir}/${D}{objfilebase}.d
926 elif test ${D}DEPSMODE = mwcc ; then
928 # Run mwcc again with -MM and redirect into the dep file we want
929 # NOTE: We can't use shift here because we need ${D}* to be valid
931 for arg in ${D}* ; do
932 if test "${D}prevarg" = "-o"; then
946 objfilebase=\`basename ${D}objfile\`
947 builddir=\`dirname ${D}objfile\`
948 depsdir=${D}builddir/${D}DEPSDIRBASE
951 ${D}* ${D}DEPSFLAG >${D}{depsdir}/${D}{objfilebase}.d
954 elif test ${D}DEPSMODE = unixcc; then
956 # Run compiler again with deps flag and redirect into the dep file.
957 # It doesn't work if the '-o FILE' option is used, but without it the
958 # dependency file will contain the wrong name for the object. So it is
959 # removed from the command line, and the dep file is fixed with sed.
961 while test ${D}# -gt 0; do
968 eval arg${D}#=\\${D}1
969 cmd="${D}cmd \\${D}arg${D}#"
975 objfilebase=\`basename ${D}objfile\`
976 builddir=\`dirname ${D}objfile\`
977 depsdir=${D}builddir/${D}DEPSDIRBASE
980 eval "${D}cmd ${D}DEPSFLAG" | sed "s|.*:|${D}objfile:|" >${D}{depsdir}/${D}{objfilebase}.d
988 dnl ===================== bk-deps ends here =====================
991 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_SHARED_LD_SH],
993 dnl ===================== shared-ld-sh begins here =====================
994 dnl (Created by merge-scripts.py from shared-ld-sh
995 dnl file do not edit here!)
997 cat <<EOF >shared-ld-sh
999 #-----------------------------------------------------------------------------
1000 #-- Name: distrib/mac/shared-ld-sh
1001 #-- Purpose: Link a mach-o dynamic shared library for Darwin / Mac OS X
1002 #-- Author: Gilles Depeyrot
1003 #-- Copyright: (c) 2002 Gilles Depeyrot
1004 #-- Licence: any use permitted
1005 #-----------------------------------------------------------------------------
1010 linking_flag="-dynamiclib"
1011 ldargs="-r -keep_private_externs -nostdlib"
1013 if test "x${D}CXX" = "x"; then
1017 while test ${D}# -gt 0; do
1024 -o|-compatibility_version|-current_version|-framework|-undefined|-install_name)
1025 # collect these options and values
1026 args="${D}{args} ${D}1 ${D}2"
1031 # collect these options and values
1032 ldargs="${D}{ldargs} ${D}1 ${D}2"
1037 # collect these load args
1038 ldargs="${D}{ldargs} ${D}1"
1041 -l*|-L*|-flat_namespace|-headerpad_max_install_names)
1042 # collect these options
1043 args="${D}{args} ${D}1"
1046 -dynamiclib|-bundle)
1047 linking_flag="${D}1"
1051 echo "shared-ld: unhandled option '${D}1'"
1055 *.o | *.a | *.dylib)
1056 # collect object files
1057 objects="${D}{objects} ${D}1"
1061 echo "shared-ld: unhandled argument '${D}1'"
1072 # Link one module containing all the others
1074 if test ${D}{verbose} = 1; then
1075 echo "${D}CXX ${D}{ldargs} ${D}{objects} -o master.${D}${D}.o"
1077 ${D}CXX ${D}{ldargs} ${D}{objects} -o master.${D}${D}.o
1081 # Link the shared library from the single module created, but only if the
1082 # previous command didn't fail:
1084 if test ${D}{status} = 0; then
1085 if test ${D}{verbose} = 1; then
1086 echo "${D}CXX ${D}{linking_flag} master.${D}${D}.o ${D}{args}"
1088 ${D}CXX ${D}{linking_flag} master.${D}${D}.o ${D}{args}
1093 # Remove intermediate module
1095 rm -f master.${D}${D}.o
1099 dnl ===================== shared-ld-sh ends here =====================
1102 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_BK_MAKE_PCH],
1104 dnl ===================== bk-make-pch begins here =====================
1105 dnl (Created by merge-scripts.py from bk-make-pch
1106 dnl file do not edit here!)
1108 cat <<EOF >bk-make-pch
1111 # This script is part of Bakefile (http://www.bakefile.org) autoconf
1112 # script. It is used to generated precompiled headers.
1114 # Permission is given to use this file in any way.
1121 builddir=\`echo ${D}outfile | sed -e 's,/\\.pch/.*${D},,g'\`
1126 while test ${D}{#} -gt 0; do
1130 incdir=\`echo ${D}{1} | sed -e 's/-I\\(.*\\)/\\1/g'\`
1131 if test "x${D}{headerfile}" = "x" -a -f "${D}{incdir}/${D}{header}" ; then
1132 headerfile="${D}{incdir}/${D}{header}"
1140 if test ${D}add_to_cmdline = 1 ; then
1141 compiler="${D}{compiler} ${D}{1}"
1146 if test "x${D}{headerfile}" = "x" ; then
1147 echo "error: can't find header ${D}{header} in include paths" >&2
1149 if test -f ${D}{outfile} ; then
1152 mkdir -p \`dirname ${D}{outfile}\`
1154 depsfile="${D}{builddir}/.deps/\`echo ${D}{outfile} | tr '/.' '__'\`.d"
1155 mkdir -p ${D}{builddir}/.deps
1156 if test "x${GCC_PCH}" = "x1" ; then
1157 # can do this because gcc is >= 3.4:
1158 ${D}{compiler} -o ${D}{outfile} -MMD -MF "${D}{depsfile}" "${D}{headerfile}"
1159 elif test "x${ICC_PCH}" = "x1" ; then
1160 filename=pch_gen-${D}${D}
1161 file=${D}{filename}.c
1162 dfile=${D}{filename}.d
1163 cat > ${D}file <<EOT
1164 #include "${D}header"
1166 # using -MF icc complains about differing command lines in creation/use
1167 ${D}compiler -c -create_pch ${D}outfile -MMD ${D}file && \\
1168 sed -e "s,^.*:,${D}outfile:," -e "s, ${D}file,," < ${D}dfile > ${D}depsfile && \\
1169 rm -f ${D}file ${D}dfile ${D}{filename}.o
1174 dnl ===================== bk-make-pch ends here =====================