2 dnl This file is part of Bakefile (http://bakefile.sourceforge.net)
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
213 SO_SUFFIX_MODULE="sl"
217 dnl http://www-1.ibm.com/servers/esdd/articles/gnu.html:
218 dnl Both archive libraries and shared libraries on AIX have an
219 dnl .a extension. This will explain why you can't link with an
220 dnl .so and why it works with the name changed to .a.
226 SO_SUFFIX_MODULE="dll"
227 DLLIMP_SUFFIX="dll.a"
234 SO_SUFFIX_MODULE="dll"
235 DLLIMP_SUFFIX="dll.a"
245 *-pc-os2_emx | *-pc-os2-emx )
247 SO_SUFFIX_MODULE="dll"
248 DLLIMP_SUFFIX=$OS2_LIBEXT
252 LIBEXT=".$OS2_LIBEXT"
257 SO_SUFFIX_MODULE="bundle"
261 if test "x$DLLIMP_SUFFIX" = "x" ; then
262 DLLIMP_SUFFIX="$SO_SUFFIX"
266 AC_SUBST(SO_SUFFIX_MODULE)
267 AC_SUBST(DLLIMP_SUFFIX)
272 AC_SUBST(DLLPREFIX_MODULE)
277 dnl ---------------------------------------------------------------------------
278 dnl AC_BAKEFILE_SHARED_LD
280 dnl Detects command for making shared libraries, substitutes SHARED_LD_CC
281 dnl and SHARED_LD_CXX.
282 dnl ---------------------------------------------------------------------------
284 AC_DEFUN([AC_BAKEFILE_SHARED_LD],
286 dnl the extra compiler flags needed for compilation of shared library
288 if test "x$GCC" = "xyes"; then
289 dnl the switch for gcc is the same under all platforms
293 dnl Defaults for GCC and ELF .so shared libs:
294 SHARED_LD_CC="\$(CC) -shared ${PIC_FLAG} -o"
295 SHARED_LD_CXX="\$(CXX) -shared ${PIC_FLAG} -o"
298 case "${BAKEFILE_HOST}" in
300 dnl default settings are good for gcc but not for the native HP-UX
301 if test "x$GCC" != "xyes"; then
302 dnl no idea why it wants it, but it does
303 LDFLAGS="$LDFLAGS -L/usr/lib"
305 SHARED_LD_CC="${CC} -b -o"
306 SHARED_LD_CXX="${CXX} -b -o"
312 if test "x$GCC" != "xyes"; then
313 AC_CACHE_CHECK([for Intel compiler], bakefile_cv_prog_icc,
317 #ifndef __INTEL_COMPILER
321 bakefile_cv_prog_icc=yes,
322 bakefile_cv_prog_icc=no
325 if test "$bakefile_cv_prog_icc" = "yes"; then
332 if test "x$GCC" != xyes ; then
333 SHARED_LD_CC="${CC} -G -o"
334 SHARED_LD_CXX="${CXX} -G -o"
340 AC_BAKEFILE_CREATE_FILE_SHARED_LD_SH
341 chmod +x shared-ld-sh
343 SHARED_LD_MODULE_CC="`pwd`/shared-ld-sh -bundle -headerpad_max_install_names -o"
344 SHARED_LD_MODULE_CXX="$SHARED_LD_MODULE_CC"
346 dnl Most apps benefit from being fully binded (its faster and static
347 dnl variables initialized at startup work).
348 dnl This can be done either with the exe linker flag -Wl,-bind_at_load
349 dnl or with a double stage link in order to create a single module
350 dnl "-init _wxWindowsDylibInit" not useful with lazy linking solved
352 dnl If using newer dev tools then there is a -single_module flag that
353 dnl we can use to do this for dylibs, otherwise we'll need to use a helper
354 dnl script. Check the version of gcc to see which way we can go:
355 AC_CACHE_CHECK([for gcc 3.1 or later], bakefile_cv_gcc31, [
358 #if (__GNUC__ < 3) || \
359 ((__GNUC__ == 3) && (__GNUC_MINOR__ < 1))
364 bakefile_cv_gcc31=yes
371 if test "$bakefile_cv_gcc31" = "no"; then
372 dnl Use the shared-ld-sh helper script
373 SHARED_LD_CC="`pwd`/shared-ld-sh -dynamiclib -headerpad_max_install_names -o"
374 SHARED_LD_CXX="$SHARED_LD_CC"
376 dnl Use the -single_module flag and let the linker do it for us
377 SHARED_LD_CC="\${CC} -dynamiclib -single_module -headerpad_max_install_names -o"
378 SHARED_LD_CXX="\${CXX} -dynamiclib -single_module -headerpad_max_install_names -o"
381 if test "x$GCC" == "xyes"; then
382 PIC_FLAG="-dynamic -fPIC"
384 if test "x$XLCC" = "xyes"; then
385 PIC_FLAG="-dynamic -DPIC"
390 if test "x$GCC" = "xyes"; then
391 dnl at least gcc 2.95 warns that -fPIC is ignored when
392 dnl compiling each and every file under AIX which is annoying,
393 dnl so don't use it there (it's useless as AIX runs on
394 dnl position-independent architectures only anyhow)
397 dnl -bexpfull is needed by AIX linker to export all symbols (by
398 dnl default it doesn't export any and even with -bexpall it
399 dnl doesn't export all C++ support symbols, e.g. vtable
400 dnl pointers) but it's only available starting from 5.1 (with
401 dnl maintenance pack 2, whatever this is), see
402 dnl http://www-128.ibm.com/developerworks/eserver/articles/gnu.html
403 case "${BAKEFILE_HOST}" in
405 LD_EXPFULL="-Wl,-bexpfull"
409 SHARED_LD_CC="\$(CC) -shared $LD_EXPFULL -o"
410 SHARED_LD_CXX="\$(CXX) -shared $LD_EXPFULL -o"
412 dnl FIXME: makeC++SharedLib is obsolete, what should we do for
413 dnl recent AIX versions?
414 AC_CHECK_PROG(AIX_CXX_LD, makeC++SharedLib,
415 makeC++SharedLib, /usr/lpp/xlC/bin/makeC++SharedLib)
416 SHARED_LD_CC="$AIX_CC_LD -p 0 -o"
417 SHARED_LD_CXX="$AIX_CXX_LD -p 0 -o"
422 dnl can't use gcc under BeOS for shared library creation because it
423 dnl complains about missing 'main'
424 SHARED_LD_CC="${LD} -nostart -o"
425 SHARED_LD_CXX="${LD} -nostart -o"
429 dnl default settings are ok for gcc
430 if test "x$GCC" != "xyes"; then
435 *-*-cygwin* | *-*-mingw32* )
437 SHARED_LD_CC="\$(CC) -shared -o"
438 SHARED_LD_CXX="\$(CXX) -shared -o"
442 *-pc-os2_emx | *-pc-os2-emx )
443 SHARED_LD_CC="`pwd`/dllar.sh -libf INITINSTANCE -libf TERMINSTANCE -o"
444 SHARED_LD_CXX="`pwd`/dllar.sh -libf INITINSTANCE -libf TERMINSTANCE -o"
446 AC_BAKEFILE_CREATE_FILE_DLLAR_SH
450 powerpc-apple-macos* | \
451 *-*-freebsd* | *-*-openbsd* | *-*-netbsd* | *-*-k*bsd*-gnu | \
462 AC_MSG_ERROR(unknown system type $BAKEFILE_HOST.)
465 if test "x$PIC_FLAG" != "x" ; then
466 PIC_FLAG="$PIC_FLAG -DPIC"
469 if test "x$SHARED_LD_MODULE_CC" = "x" ; then
470 SHARED_LD_MODULE_CC="$SHARED_LD_CC"
472 if test "x$SHARED_LD_MODULE_CXX" = "x" ; then
473 SHARED_LD_MODULE_CXX="$SHARED_LD_CXX"
476 AC_SUBST(SHARED_LD_CC)
477 AC_SUBST(SHARED_LD_CXX)
478 AC_SUBST(SHARED_LD_MODULE_CC)
479 AC_SUBST(SHARED_LD_MODULE_CXX)
481 AC_SUBST(WINDOWS_IMPLIB)
485 dnl ---------------------------------------------------------------------------
486 dnl AC_BAKEFILE_SHARED_VERSIONS
488 dnl Detects linker options for attaching versions (sonames) to shared libs.
489 dnl ---------------------------------------------------------------------------
491 AC_DEFUN([AC_BAKEFILE_SHARED_VERSIONS],
501 case "${BAKEFILE_HOST}" in
502 *-*-linux* | *-*-freebsd* | *-*-k*bsd*-gnu )
503 SONAME_FLAG="-Wl,-soname,"
528 AC_SUBST(USE_SOVERSION)
529 AC_SUBST(USE_SOVERLINUX)
530 AC_SUBST(USE_SOVERSOLARIS)
531 AC_SUBST(USE_SOVERCYGWIN)
532 AC_SUBST(USE_MACVERSION)
533 AC_SUBST(USE_SOSYMLINKS)
534 AC_SUBST(SONAME_FLAG)
538 dnl ---------------------------------------------------------------------------
541 dnl Detects available C/C++ dependency tracking options
542 dnl ---------------------------------------------------------------------------
544 AC_DEFUN([AC_BAKEFILE_DEPS],
546 AC_ARG_ENABLE([dependency-tracking],
547 AS_HELP_STRING([--disable-dependency-tracking],
548 [don't use dependency tracking even if the compiler can]),
549 [bk_use_trackdeps="$enableval"])
551 AC_MSG_CHECKING([for dependency tracking method])
554 if test "x$bk_use_trackdeps" = "xno" ; then
556 AC_MSG_RESULT([disabled])
560 if test "x$GCC" = "xyes"; then
562 case "${BAKEFILE_HOST}" in
564 dnl -cpp-precomp (the default) conflicts with -MMD option
565 dnl used by bk-deps (see also http://developer.apple.com/documentation/Darwin/Conceptual/PortingUnix/compiling/chapter_4_section_3.html)
566 DEPSFLAG="-no-cpp-precomp -MMD"
573 elif test "x$MWCC" = "xyes"; then
576 AC_MSG_RESULT([mwcc])
577 elif test "x$SUNCC" = "xyes"; then
580 AC_MSG_RESULT([Sun cc])
581 elif test "x$SGICC" = "xyes"; then
584 AC_MSG_RESULT([SGI cc])
585 elif test "x$HPCC" = "xyes"; then
588 AC_MSG_RESULT([HP cc])
589 elif test "x$COMPAQCC" = "xyes"; then
592 AC_MSG_RESULT([Compaq cc])
595 AC_MSG_RESULT([none])
598 if test $DEPS_TRACKING = 1 ; then
599 AC_BAKEFILE_CREATE_FILE_BK_DEPS
601 dnl FIXME: make this $(top_builddir)/bk-deps once autoconf-2.60
602 dnl is required (and so top_builddir is never empty):
603 BK_DEPS="`pwd`/bk-deps"
607 AC_SUBST(DEPS_TRACKING)
611 dnl ---------------------------------------------------------------------------
612 dnl AC_BAKEFILE_CHECK_BASIC_STUFF
614 dnl Checks for presence of basic programs, such as C and C++ compiler, "ranlib"
616 dnl ---------------------------------------------------------------------------
618 AC_DEFUN([AC_BAKEFILE_CHECK_BASIC_STUFF],
627 if test "x$SUNCXX" = "xyes"; then
628 dnl Sun C++ compiler requires special way of creating static libs;
629 dnl see here for more details:
630 dnl https://sourceforge.net/tracker/?func=detail&atid=109863&aid=1229751&group_id=9863
634 elif test "x$SGICC" = "xyes"; then
635 dnl Almost the same as above for SGI mipsPro compiler
640 AC_CHECK_TOOL(AR, ar, ar)
645 AC_CHECK_TOOL(STRIP, strip, :)
646 AC_CHECK_TOOL(NM, nm, :)
648 case ${BAKEFILE_HOST} in
650 dnl HP-UX install doesn't handle the "-d" switch so don't
652 INSTALL_DIR="mkdir -p"
655 dnl we must refer to makefile's $(INSTALL) variable and not
656 dnl current value of shell variable, hence the single quoting:
657 INSTALL_DIR='$(INSTALL) -d'
660 AC_SUBST(INSTALL_DIR)
663 case ${BAKEFILE_HOST} in
664 *-*-cygwin* | *-*-mingw32* )
665 LDFLAGS_GUI="-mwindows"
667 AC_SUBST(LDFLAGS_GUI)
671 dnl ---------------------------------------------------------------------------
672 dnl AC_BAKEFILE_RES_COMPILERS
674 dnl Checks for presence of resource compilers for win32 or mac
675 dnl ---------------------------------------------------------------------------
677 AC_DEFUN([AC_BAKEFILE_RES_COMPILERS],
679 case ${BAKEFILE_HOST} in
680 *-*-cygwin* | *-*-mingw32* )
681 dnl Check for win32 resources compiler:
682 AC_CHECK_TOOL(WINDRES, windres)
685 *-*-darwin* | powerpc-apple-macos* )
686 AC_CHECK_PROG(REZ, Rez, Rez, /Developer/Tools/Rez)
687 AC_CHECK_PROG(SETFILE, SetFile, SetFile, /Developer/Tools/SetFile)
696 dnl ---------------------------------------------------------------------------
697 dnl AC_BAKEFILE_PRECOMP_HEADERS
699 dnl Check for precompiled headers support (GCC >= 3.4)
700 dnl ---------------------------------------------------------------------------
702 AC_DEFUN([AC_BAKEFILE_PRECOMP_HEADERS],
705 AC_ARG_ENABLE([precomp-headers],
706 AS_HELP_STRING([--disable-precomp-headers],
707 [don't use precompiled headers even if compiler can]),
708 [bk_use_pch="$enableval"])
715 case ${BAKEFILE_HOST} in
717 dnl PCH support is broken in cygwin gcc because of unportable
718 dnl assumptions about mmap() in gcc code which make PCH generation
719 dnl fail erratically; disable PCH completely until this is fixed
724 if test "x$bk_use_pch" = "x" -o "x$bk_use_pch" = "xyes" ; then
725 if test "x$GCC" = "xyes"; then
726 dnl test if we have gcc-3.4:
727 AC_MSG_CHECKING([if the compiler supports precompiled headers])
730 #if !defined(__GNUC__) || !defined(__GNUC_MINOR__)
731 There is no PCH support
734 There is no PCH support
736 #if (__GNUC__ == 3) && \
737 ((!defined(__APPLE_CC__) && (__GNUC_MINOR__ < 4)) || \
738 ( defined(__APPLE_CC__) && (__GNUC_MINOR__ < 3))) || \
739 ( defined(__INTEL_COMPILER) )
740 There is no PCH support
750 #if !defined(__INTEL_COMPILER) || \
751 (__INTEL_COMPILER < 800)
752 There is no PCH support
763 if test $GCC_PCH = 1 -o $ICC_PCH = 1 ; then
765 AC_BAKEFILE_CREATE_FILE_BK_MAKE_PCH
767 dnl FIXME: make this $(top_builddir)/bk-make-pch once
768 dnl autoconf-2.60 is required (and so top_builddir is
770 BK_MAKE_PCH="`pwd`/bk-make-pch"
777 AC_SUBST(BK_MAKE_PCH)
782 dnl ---------------------------------------------------------------------------
783 dnl AC_BAKEFILE([autoconf_inc.m4 inclusion])
785 dnl To be used in configure.in of any project using Bakefile-generated mks
787 dnl Behaviour can be modified by setting following variables:
788 dnl BAKEFILE_CHECK_BASICS set to "no" if you don't want bakefile to
789 dnl to perform check for basic tools like ranlib
790 dnl BAKEFILE_HOST set this to override host detection, defaults
792 dnl BAKEFILE_FORCE_PLATFORM set to override platform detection
796 dnl AC_BAKEFILE([FOO(autoconf_inc.m4)])
798 dnl (replace FOO with m4_include above, aclocal would die otherwise)
799 dnl (yes, it's ugly, but thanks to a bug in aclocal, it's the only thing
801 dnl ---------------------------------------------------------------------------
803 AC_DEFUN([AC_BAKEFILE],
807 if test "x$BAKEFILE_HOST" = "x"; then
808 if test "x${host}" = "x" ; then
809 AC_MSG_ERROR([You must call the autoconf "CANONICAL_HOST" macro in your configure.ac (or .in) file.])
812 BAKEFILE_HOST="${host}"
815 if test "x$BAKEFILE_CHECK_BASICS" != "xno"; then
816 AC_BAKEFILE_CHECK_BASIC_STUFF
820 AC_BAKEFILE_PLATFORM_SPECIFICS
822 AC_BAKEFILE_SHARED_LD
823 AC_BAKEFILE_SHARED_VERSIONS
825 AC_BAKEFILE_RES_COMPILERS
827 BAKEFILE_BAKEFILE_M4_VERSION="0.2.2"
829 dnl includes autoconf_inc.m4:
832 if test "$BAKEFILE_AUTOCONF_INC_M4_VERSION" = "" ; then
833 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)?])
836 if test "$BAKEFILE_BAKEFILE_M4_VERSION" != "$BAKEFILE_AUTOCONF_INC_M4_VERSION" ; then
837 AC_MSG_ERROR([Versions of Bakefile used to generate makefiles ($BAKEFILE_AUTOCONF_INC_M4_VERSION) and configure ($BAKEFILE_BAKEFILE_M4_VERSION) do not match.])
842 dnl ---------------------------------------------------------------------------
843 dnl Embedded copies of helper scripts follow:
844 dnl ---------------------------------------------------------------------------
846 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_BK_DEPS],
848 dnl ===================== bk-deps begins here =====================
849 dnl (Created by merge-scripts.py from bk-deps
850 dnl file do not edit here!)
855 # This script is part of Bakefile (http://bakefile.sourceforge.net) autoconf
856 # script. It is used to track C/C++ files dependencies in portable way.
858 # Permission is given to use this file in any way.
862 DEPSFLAG="${DEPSFLAG}"
866 if test ${D}DEPSMODE = gcc ; then
869 if test ${D}{status} != 0 ; then
872 # move created file to the location we want it in:
873 while test ${D}# -gt 0; do
887 depfile=\`basename ${D}srcfile | sed -e 's/\\..*${D}/.d/g'\`
888 depobjname=\`echo ${D}depfile |sed -e 's/\\.d/.o/g'\`
889 if test -f ${D}depfile ; then
890 sed -e "s,${D}depobjname:,${D}objfile:,g" ${D}depfile >${D}{DEPSDIR}/${D}{objfile}.d
893 # "g++ -MMD -o fooobj.o foosrc.cpp" produces fooobj.d
894 depfile=\`basename ${D}objfile | sed -e 's/\\..*${D}/.d/g'\`
895 if test ! -f ${D}depfile ; then
896 # "cxx -MD -o fooobj.o foosrc.cpp" creates fooobj.o.d (Compaq C++)
897 depfile="${D}objfile.d"
899 if test -f ${D}depfile ; then
900 sed -e "/^${D}objfile/!s,${D}depobjname:,${D}objfile:,g" ${D}depfile >${D}{DEPSDIR}/${D}{objfile}.d
905 elif test ${D}DEPSMODE = mwcc ; then
907 # Run mwcc again with -MM and redirect into the dep file we want
908 # NOTE: We can't use shift here because we need ${D}* to be valid
910 for arg in ${D}* ; do
911 if test "${D}prevarg" = "-o"; then
924 ${D}* ${D}DEPSFLAG >${D}{DEPSDIR}/${D}{objfile}.d
926 elif test ${D}DEPSMODE = unixcc; then
928 # Run compiler again with deps flag and redirect into the dep file.
929 # It doesn't work if the '-o FILE' option is used, but without it the
930 # dependency file will contain the wrong name for the object. So it is
931 # removed from the command line, and the dep file is fixed with sed.
933 while test ${D}# -gt 0; do
940 eval arg${D}#=\\${D}1
941 cmd="${D}cmd \\${D}arg${D}#"
946 eval "${D}cmd ${D}DEPSFLAG" | sed "s|.*:|${D}objfile:|" >${D}{DEPSDIR}/${D}{objfile}.d
953 dnl ===================== bk-deps ends here =====================
956 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_SHARED_LD_SH],
958 dnl ===================== shared-ld-sh begins here =====================
959 dnl (Created by merge-scripts.py from shared-ld-sh
960 dnl file do not edit here!)
962 cat <<EOF >shared-ld-sh
964 #-----------------------------------------------------------------------------
965 #-- Name: distrib/mac/shared-ld-sh
966 #-- Purpose: Link a mach-o dynamic shared library for Darwin / Mac OS X
967 #-- Author: Gilles Depeyrot
968 #-- Copyright: (c) 2002 Gilles Depeyrot
969 #-- Licence: any use permitted
970 #-----------------------------------------------------------------------------
975 linking_flag="-dynamiclib"
976 ldargs="-r -keep_private_externs -nostdlib"
978 while test ${D}# -gt 0; do
985 -o|-compatibility_version|-current_version|-framework|-undefined|-install_name)
986 # collect these options and values
987 args="${D}{args} ${D}1 ${D}2"
992 # collect these load args
993 ldargs="${D}{ldargs} ${D}1"
996 -l*|-L*|-flat_namespace|-headerpad_max_install_names)
997 # collect these options
998 args="${D}{args} ${D}1"
1001 -dynamiclib|-bundle)
1002 linking_flag="${D}1"
1006 echo "shared-ld: unhandled option '${D}1'"
1010 *.o | *.a | *.dylib)
1011 # collect object files
1012 objects="${D}{objects} ${D}1"
1016 echo "shared-ld: unhandled argument '${D}1'"
1027 # Link one module containing all the others
1029 if test ${D}{verbose} = 1; then
1030 echo "c++ ${D}{ldargs} ${D}{objects} -o master.${D}${D}.o"
1032 c++ ${D}{ldargs} ${D}{objects} -o master.${D}${D}.o
1036 # Link the shared library from the single module created, but only if the
1037 # previous command didn't fail:
1039 if test ${D}{status} = 0; then
1040 if test ${D}{verbose} = 1; then
1041 echo "c++ ${D}{linking_flag} master.${D}${D}.o ${D}{args}"
1043 c++ ${D}{linking_flag} master.${D}${D}.o ${D}{args}
1048 # Remove intermediate module
1050 rm -f master.${D}${D}.o
1054 dnl ===================== shared-ld-sh ends here =====================
1057 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_BK_MAKE_PCH],
1059 dnl ===================== bk-make-pch begins here =====================
1060 dnl (Created by merge-scripts.py from bk-make-pch
1061 dnl file do not edit here!)
1063 cat <<EOF >bk-make-pch
1066 # This script is part of Bakefile (http://bakefile.sourceforge.net) autoconf
1067 # script. It is used to generated precompiled headers.
1069 # Permission is given to use this file in any way.
1079 while test ${D}{#} -gt 0; do
1083 incdir=\`echo ${D}{1} | sed -e 's/-I\\(.*\\)/\\1/g'\`
1084 if test "x${D}{headerfile}" = "x" -a -f "${D}{incdir}/${D}{header}" ; then
1085 headerfile="${D}{incdir}/${D}{header}"
1093 if test ${D}add_to_cmdline = 1 ; then
1094 compiler="${D}{compiler} ${D}{1}"
1099 if test "x${D}{headerfile}" = "x" ; then
1100 echo "error: can't find header ${D}{header} in include paths" >&2
1102 if test -f ${D}{outfile} ; then
1105 mkdir -p \`dirname ${D}{outfile}\`
1107 depsfile=".deps/\`echo ${D}{outfile} | tr '/.' '__'\`.d"
1109 if test "x${GCC_PCH}" = "x1" ; then
1110 # can do this because gcc is >= 3.4:
1111 ${D}{compiler} -o ${D}{outfile} -MMD -MF "${D}{depsfile}" "${D}{headerfile}"
1112 elif test "x${ICC_PCH}" = "x1" ; then
1113 filename=pch_gen-${D}${D}
1114 file=${D}{filename}.c
1115 dfile=${D}{filename}.d
1116 cat > ${D}file <<EOT
1117 #include "${D}header"
1119 # using -MF icc complains about differing command lines in creation/use
1120 ${D}compiler -c -create_pch ${D}outfile -MMD ${D}file && \\
1121 sed -e "s,^.*:,${D}outfile:," -e "s, ${D}file,," < ${D}dfile > ${D}depsfile && \\
1122 rm -f ${D}file ${D}dfile ${D}{filename}.o
1127 dnl ===================== bk-make-pch ends here =====================