1dnl 2dnl This file is part of Bakefile (http://www.bakefile.org) 3dnl 4dnl Copyright (C) 2003-2007 Vaclav Slavik and others 5dnl 6dnl Permission is hereby granted, free of charge, to any person obtaining a 7dnl copy of this software and associated documentation files (the "Software"), 8dnl to deal in the Software without restriction, including without limitation 9dnl the rights to use, copy, modify, merge, publish, distribute, sublicense, 10dnl and/or sell copies of the Software, and to permit persons to whom the 11dnl Software is furnished to do so, subject to the following conditions: 12dnl 13dnl The above copyright notice and this permission notice shall be included in 14dnl all copies or substantial portions of the Software. 15dnl 16dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17dnl IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18dnl FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 19dnl THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20dnl LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21dnl FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 22dnl DEALINGS IN THE SOFTWARE. 23dnl 24dnl $Id: bakefile.m4 63338 2010-01-31 18:31:21Z VZ $ 25dnl 26dnl Support macros for makefiles generated by BAKEFILE. 27dnl 28 29 30dnl --------------------------------------------------------------------------- 31dnl Lots of compiler & linker detection code contained here was taken from 32dnl wxWidgets configure.in script (see http://www.wxwidgets.org) 33dnl --------------------------------------------------------------------------- 34 35 36 37dnl --------------------------------------------------------------------------- 38dnl AC_BAKEFILE_GNUMAKE 39dnl 40dnl Detects GNU make 41dnl --------------------------------------------------------------------------- 42 43AC_DEFUN([AC_BAKEFILE_GNUMAKE], 44[ 45 dnl does make support "-include" (only GNU make does AFAIK)? 46 AC_CACHE_CHECK([if make is GNU make], bakefile_cv_prog_makeisgnu, 47 [ 48 if ( ${SHELL-sh} -c "${MAKE-make} --version" 2> /dev/null | 49 egrep -s GNU > /dev/null); then 50 bakefile_cv_prog_makeisgnu="yes" 51 else 52 bakefile_cv_prog_makeisgnu="no" 53 fi 54 ]) 55 56 if test "x$bakefile_cv_prog_makeisgnu" = "xyes"; then 57 IF_GNU_MAKE="" 58 else 59 IF_GNU_MAKE="#" 60 fi 61 AC_SUBST(IF_GNU_MAKE) 62]) 63 64dnl --------------------------------------------------------------------------- 65dnl AC_BAKEFILE_PLATFORM 66dnl 67dnl Detects platform and sets PLATFORM_XXX variables accordingly 68dnl --------------------------------------------------------------------------- 69 70AC_DEFUN([AC_BAKEFILE_PLATFORM], 71[ 72 PLATFORM_UNIX=0 73 PLATFORM_WIN32=0 74 PLATFORM_MSDOS=0 75 PLATFORM_MAC=0 76 PLATFORM_MACOS=0 77 PLATFORM_MACOSX=0 78 PLATFORM_OS2=0 79 PLATFORM_BEOS=0 80 81 if test "x$BAKEFILE_FORCE_PLATFORM" = "x"; then 82 case "${BAKEFILE_HOST}" in 83 *-*-mingw32* ) 84 PLATFORM_WIN32=1 85 ;; 86 *-pc-msdosdjgpp ) 87 PLATFORM_MSDOS=1 88 ;; 89 *-pc-os2_emx | *-pc-os2-emx ) 90 PLATFORM_OS2=1 91 ;; 92 *-*-darwin* ) 93 PLATFORM_MAC=1 94 PLATFORM_MACOSX=1 95 ;; 96 *-*-beos* ) 97 PLATFORM_BEOS=1 98 ;; 99 powerpc-apple-macos* ) 100 PLATFORM_MAC=1 101 PLATFORM_MACOS=1 102 ;; 103 * ) 104 PLATFORM_UNIX=1 105 ;; 106 esac 107 else 108 case "$BAKEFILE_FORCE_PLATFORM" in 109 win32 ) 110 PLATFORM_WIN32=1 111 ;; 112 msdos ) 113 PLATFORM_MSDOS=1 114 ;; 115 os2 ) 116 PLATFORM_OS2=1 117 ;; 118 darwin ) 119 PLATFORM_MAC=1 120 PLATFORM_MACOSX=1 121 ;; 122 unix ) 123 PLATFORM_UNIX=1 124 ;; 125 beos ) 126 PLATFORM_BEOS=1 127 ;; 128 * ) 129 AC_MSG_ERROR([Unknown platform: $BAKEFILE_FORCE_PLATFORM]) 130 ;; 131 esac 132 fi 133 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) 142]) 143 144 145dnl --------------------------------------------------------------------------- 146dnl AC_BAKEFILE_PLATFORM_SPECIFICS 147dnl 148dnl Sets misc platform-specific settings 149dnl --------------------------------------------------------------------------- 150 151AC_DEFUN([AC_BAKEFILE_PLATFORM_SPECIFICS], 152[ 153 AC_ARG_ENABLE([omf], AS_HELP_STRING([--enable-omf], 154 [use OMF object format (OS/2)]), 155 [bk_os2_use_omf="$enableval"]) 156 157 case "${BAKEFILE_HOST}" in 158 *-*-darwin* ) 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" 164 fi 165 if test "x$XLCC" = "xyes"; then 166 CFLAGS="$CFLAGS -qnocommon" 167 CXXFLAGS="$CXXFLAGS -qnocommon" 168 fi 169 ;; 170 171 *-pc-os2_emx | *-pc-os2-emx ) 172 if test "x$bk_os2_use_omf" = "xyes" ; then 173 AR=emxomfar 174 RANLIB=: 175 LDFLAGS="-Zomf $LDFLAGS" 176 CFLAGS="-Zomf $CFLAGS" 177 CXXFLAGS="-Zomf $CXXFLAGS" 178 OS2_LIBEXT="lib" 179 else 180 OS2_LIBEXT="a" 181 fi 182 ;; 183 184 i*86-*-beos* ) 185 LDFLAGS="-L/boot/develop/lib/x86 $LDFLAGS" 186 ;; 187 esac 188]) 189 190dnl --------------------------------------------------------------------------- 191dnl AC_BAKEFILE_SUFFIXES 192dnl 193dnl Detects shared various suffixes for shared libraries, libraries, programs, 194dnl plugins etc. 195dnl --------------------------------------------------------------------------- 196 197AC_DEFUN([AC_BAKEFILE_SUFFIXES], 198[ 199 SO_SUFFIX="so" 200 SO_SUFFIX_MODULE="so" 201 EXEEXT="" 202 LIBPREFIX="lib" 203 LIBEXT=".a" 204 DLLPREFIX="lib" 205 DLLPREFIX_MODULE="" 206 DLLIMP_SUFFIX="" 207 dlldir="$libdir" 208 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 212 ia64-hp-hpux* ) 213 ;; 214 *-hp-hpux* ) 215 SO_SUFFIX="sl" 216 SO_SUFFIX_MODULE="sl" 217 ;; 218 *-*-aix* ) 219 dnl quoting from 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. 224 SO_SUFFIX="a" 225 SO_SUFFIX_MODULE="a" 226 ;; 227 *-*-cygwin* ) 228 SO_SUFFIX="dll" 229 SO_SUFFIX_MODULE="dll" 230 DLLIMP_SUFFIX="dll.a" 231 EXEEXT=".exe" 232 DLLPREFIX="cyg" 233 dlldir="$bindir" 234 ;; 235 *-*-mingw32* ) 236 SO_SUFFIX="dll" 237 SO_SUFFIX_MODULE="dll" 238 DLLIMP_SUFFIX="dll.a" 239 EXEEXT=".exe" 240 DLLPREFIX="" 241 dlldir="$bindir" 242 ;; 243 *-pc-msdosdjgpp ) 244 EXEEXT=".exe" 245 DLLPREFIX="" 246 dlldir="$bindir" 247 ;; 248 *-pc-os2_emx | *-pc-os2-emx ) 249 SO_SUFFIX="dll" 250 SO_SUFFIX_MODULE="dll" 251 DLLIMP_SUFFIX=$OS2_LIBEXT 252 EXEEXT=".exe" 253 DLLPREFIX="" 254 LIBPREFIX="" 255 LIBEXT=".$OS2_LIBEXT" 256 dlldir="$bindir" 257 ;; 258 *-*-darwin* ) 259 SO_SUFFIX="dylib" 260 SO_SUFFIX_MODULE="bundle" 261 ;; 262 esac 263 264 if test "x$DLLIMP_SUFFIX" = "x" ; then 265 DLLIMP_SUFFIX="$SO_SUFFIX" 266 fi 267 268 AC_SUBST(SO_SUFFIX) 269 AC_SUBST(SO_SUFFIX_MODULE) 270 AC_SUBST(DLLIMP_SUFFIX) 271 AC_SUBST(EXEEXT) 272 AC_SUBST(LIBPREFIX) 273 AC_SUBST(LIBEXT) 274 AC_SUBST(DLLPREFIX) 275 AC_SUBST(DLLPREFIX_MODULE) 276 AC_SUBST(dlldir) 277]) 278 279 280dnl --------------------------------------------------------------------------- 281dnl AC_BAKEFILE_SHARED_LD 282dnl 283dnl Detects command for making shared libraries, substitutes SHARED_LD_CC 284dnl and SHARED_LD_CXX. 285dnl --------------------------------------------------------------------------- 286 287AC_DEFUN([AC_BAKEFILE_SHARED_LD], 288[ 289 dnl the extra compiler flags needed for compilation of shared library 290 PIC_FLAG="" 291 if test "x$GCC" = "xyes"; then 292 dnl the switch for gcc is the same under all platforms 293 PIC_FLAG="-fPIC" 294 fi 295 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" 299 WINDOWS_IMPLIB=0 300 301 case "${BAKEFILE_HOST}" in 302 *-hp-hpux* ) 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" 307 308 SHARED_LD_CC="${CC} -b -o" 309 SHARED_LD_CXX="${CXX} -b -o" 310 PIC_FLAG="+Z" 311 fi 312 ;; 313 314 *-*-linux* ) 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 318 PIC_FLAG="-KPIC" 319 elif test "x$SUNCXX" = "xyes"; then 320 SHARED_LD_CC="${CC} -G -o" 321 SHARED_LD_CXX="${CXX} -G -o" 322 PIC_FLAG="-KPIC" 323 fi 324 ;; 325 326 *-*-solaris2* ) 327 if test "x$SUNCXX" = xyes ; then 328 SHARED_LD_CC="${CC} -G -o" 329 SHARED_LD_CXX="${CXX} -G -o" 330 PIC_FLAG="-KPIC" 331 fi 332 ;; 333 334 *-*-darwin* ) 335 AC_BAKEFILE_CREATE_FILE_SHARED_LD_SH 336 chmod +x shared-ld-sh 337 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" 340 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 346 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, [ 351 AC_TRY_COMPILE([], 352 [ 353 #if (__GNUC__ < 3) || \ 354 ((__GNUC__ == 3) && (__GNUC_MINOR__ < 1)) 355 This is old gcc 356 #endif 357 ], 358 [ 359 bakefile_cv_gcc31=yes 360 ], 361 [ 362 bakefile_cv_gcc31=no 363 ] 364 ) 365 ]) 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" 370 else 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" 374 fi 375 376 if test "x$GCC" == "xyes"; then 377 PIC_FLAG="-dynamic -fPIC" 378 fi 379 if test "x$XLCC" = "xyes"; then 380 PIC_FLAG="-dynamic -DPIC" 381 fi 382 ;; 383 384 *-*-aix* ) 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) 390 PIC_FLAG="" 391 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 399 *-*-aix5* ) 400 LD_EXPFULL="-Wl,-bexpfull" 401 ;; 402 esac 403 404 SHARED_LD_CC="\$(CC) -shared $LD_EXPFULL -o" 405 SHARED_LD_CXX="\$(CXX) -shared $LD_EXPFULL -o" 406 else 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" 413 fi 414 ;; 415 416 *-*-beos* ) 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" 421 ;; 422 423 *-*-irix* ) 424 dnl default settings are ok for gcc 425 if test "x$GCC" != "xyes"; then 426 PIC_FLAG="-KPIC" 427 fi 428 ;; 429 430 *-*-cygwin* | *-*-mingw32* ) 431 PIC_FLAG="" 432 SHARED_LD_CC="\$(CC) -shared -o" 433 SHARED_LD_CXX="\$(CXX) -shared -o" 434 WINDOWS_IMPLIB=1 435 ;; 436 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" 440 PIC_FLAG="" 441 AC_BAKEFILE_CREATE_FILE_DLLAR_SH 442 chmod +x dllar.sh 443 ;; 444 445 powerpc-apple-macos* | \ 446 *-*-freebsd* | *-*-openbsd* | *-*-netbsd* | *-*-k*bsd*-gnu | \ 447 *-*-mirbsd* | \ 448 *-*-sunos4* | \ 449 *-*-osf* | \ 450 *-*-dgux5* | \ 451 *-*-sysv5* | \ 452 *-pc-msdosdjgpp ) 453 dnl defaults are ok 454 ;; 455 456 *) 457 AC_MSG_ERROR(unknown system type $BAKEFILE_HOST.) 458 esac 459 460 if test "x$PIC_FLAG" != "x" ; then 461 PIC_FLAG="$PIC_FLAG -DPIC" 462 fi 463 464 if test "x$SHARED_LD_MODULE_CC" = "x" ; then 465 SHARED_LD_MODULE_CC="$SHARED_LD_CC" 466 fi 467 if test "x$SHARED_LD_MODULE_CXX" = "x" ; then 468 SHARED_LD_MODULE_CXX="$SHARED_LD_CXX" 469 fi 470 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) 475 AC_SUBST(PIC_FLAG) 476 AC_SUBST(WINDOWS_IMPLIB) 477]) 478 479 480dnl --------------------------------------------------------------------------- 481dnl AC_BAKEFILE_SHARED_VERSIONS 482dnl 483dnl Detects linker options for attaching versions (sonames) to shared libs. 484dnl --------------------------------------------------------------------------- 485 486AC_DEFUN([AC_BAKEFILE_SHARED_VERSIONS], 487[ 488 USE_SOVERSION=0 489 USE_SOVERLINUX=0 490 USE_SOVERSOLARIS=0 491 USE_SOVERCYGWIN=0 492 USE_SOTWOSYMLINKS=0 493 USE_MACVERSION=0 494 SONAME_FLAG= 495 496 case "${BAKEFILE_HOST}" in 497 *-*-linux* | *-*-freebsd* | *-*-openbsd* | *-*-netbsd* | \ 498 *-*-k*bsd*-gnu | *-*-mirbsd* ) 499 if test "x$SUNCXX" = "xyes"; then 500 SONAME_FLAG="-h " 501 else 502 SONAME_FLAG="-Wl,-soname," 503 fi 504 USE_SOVERSION=1 505 USE_SOVERLINUX=1 506 USE_SOTWOSYMLINKS=1 507 ;; 508 509 *-*-solaris2* ) 510 SONAME_FLAG="-h " 511 USE_SOVERSION=1 512 USE_SOVERSOLARIS=1 513 ;; 514 515 *-*-darwin* ) 516 USE_MACVERSION=1 517 USE_SOVERSION=1 518 USE_SOTWOSYMLINKS=1 519 ;; 520 521 *-*-cygwin* ) 522 USE_SOVERSION=1 523 USE_SOVERCYGWIN=1 524 ;; 525 esac 526 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) 534]) 535 536 537dnl --------------------------------------------------------------------------- 538dnl AC_BAKEFILE_DEPS 539dnl 540dnl Detects available C/C++ dependency tracking options 541dnl --------------------------------------------------------------------------- 542 543AC_DEFUN([AC_BAKEFILE_DEPS], 544[ 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"]) 549 550 AC_MSG_CHECKING([for dependency tracking method]) 551 552 BK_DEPS="" 553 if test "x$bk_use_trackdeps" = "xno" ; then 554 DEPS_TRACKING=0 555 AC_MSG_RESULT([disabled]) 556 else 557 DEPS_TRACKING=1 558 559 if test "x$GCC" = "xyes"; then 560 DEPSMODE=gcc 561 case "${BAKEFILE_HOST}" in 562 *-*-darwin* ) 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" 566 ;; 567 * ) 568 DEPSFLAG="-MMD" 569 ;; 570 esac 571 AC_MSG_RESULT([gcc]) 572 elif test "x$MWCC" = "xyes"; then 573 DEPSMODE=mwcc 574 DEPSFLAG="-MM" 575 AC_MSG_RESULT([mwcc]) 576 elif test "x$SUNCC" = "xyes"; then 577 DEPSMODE=unixcc 578 DEPSFLAG="-xM1" 579 AC_MSG_RESULT([Sun cc]) 580 elif test "x$SGICC" = "xyes"; then 581 DEPSMODE=unixcc 582 DEPSFLAG="-M" 583 AC_MSG_RESULT([SGI cc]) 584 elif test "x$HPCC" = "xyes"; then 585 DEPSMODE=unixcc 586 DEPSFLAG="+make" 587 AC_MSG_RESULT([HP cc]) 588 elif test "x$COMPAQCC" = "xyes"; then 589 DEPSMODE=gcc 590 DEPSFLAG="-MD" 591 AC_MSG_RESULT([Compaq cc]) 592 else 593 DEPS_TRACKING=0 594 AC_MSG_RESULT([none]) 595 fi 596 597 if test $DEPS_TRACKING = 1 ; then 598 AC_BAKEFILE_CREATE_FILE_BK_DEPS 599 chmod +x 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" 603 fi 604 fi 605 606 AC_SUBST(DEPS_TRACKING) 607 AC_SUBST(BK_DEPS) 608]) 609 610dnl --------------------------------------------------------------------------- 611dnl AC_BAKEFILE_CHECK_BASIC_STUFF 612dnl 613dnl Checks for presence of basic programs, such as C and C++ compiler, "ranlib" 614dnl or "install" 615dnl --------------------------------------------------------------------------- 616 617AC_DEFUN([AC_BAKEFILE_CHECK_BASIC_STUFF], 618[ 619 AC_PROG_RANLIB 620 AC_PROG_INSTALL 621 AC_PROG_LN_S 622 623 AC_PROG_MAKE_SET 624 AC_SUBST(MAKE_SET) 625 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 630 AR=$CXX 631 AROPTIONS="-xar -o" 632 AC_SUBST(AR) 633 elif test "x$SGICC" = "xyes"; then 634 dnl Almost the same as above for SGI mipsPro compiler 635 AR=$CXX 636 AROPTIONS="-ar -o" 637 AC_SUBST(AR) 638 else 639 AC_CHECK_TOOL(AR, ar, ar) 640 AROPTIONS=rcu 641 fi 642 AC_SUBST(AROPTIONS) 643 644 AC_CHECK_TOOL(STRIP, strip, :) 645 AC_CHECK_TOOL(NM, nm, :) 646 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]) 658 else 659 INSTALL_DIR="mkdir -p" 660 AC_MSG_RESULT([mkdir -p]) 661 fi 662 AC_SUBST(INSTALL_DIR) 663 664 LDFLAGS_GUI= 665 case ${BAKEFILE_HOST} in 666 *-*-cygwin* | *-*-mingw32* ) 667 LDFLAGS_GUI="-mwindows" 668 esac 669 AC_SUBST(LDFLAGS_GUI) 670]) 671 672 673dnl --------------------------------------------------------------------------- 674dnl AC_BAKEFILE_RES_COMPILERS 675dnl 676dnl Checks for presence of resource compilers for win32 or mac 677dnl --------------------------------------------------------------------------- 678 679AC_DEFUN([AC_BAKEFILE_RES_COMPILERS], 680[ 681 case ${BAKEFILE_HOST} in 682 *-*-cygwin* | *-*-mingw32* ) 683 dnl Check for win32 resources compiler: 684 AC_CHECK_TOOL(WINDRES, windres) 685 ;; 686 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) 690 ;; 691 esac 692 693 AC_SUBST(WINDRES) 694 AC_SUBST(REZ) 695 AC_SUBST(SETFILE) 696]) 697 698dnl --------------------------------------------------------------------------- 699dnl AC_BAKEFILE_PRECOMP_HEADERS 700dnl 701dnl Check for precompiled headers support (GCC >= 3.4) 702dnl --------------------------------------------------------------------------- 703 704AC_DEFUN([AC_BAKEFILE_PRECOMP_HEADERS], 705[ 706 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"]) 711 712 GCC_PCH=0 713 ICC_PCH=0 714 USE_PCH=0 715 BK_MAKE_PCH="" 716 717 case ${BAKEFILE_HOST} in 718 *-*-cygwin* ) 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 722 bk_use_pch="no" 723 ;; 724 esac 725 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]) 730 AC_TRY_COMPILE([], 731 [ 732 #if !defined(__GNUC__) || !defined(__GNUC_MINOR__) 733 There is no PCH support 734 #endif 735 #if (__GNUC__ < 3) 736 There is no PCH support 737 #endif 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 743 #endif 744 ], 745 [ 746 AC_MSG_RESULT([yes]) 747 GCC_PCH=1 748 ], 749 [ 750 if test "$INTELCXX8" = "yes"; then 751 AC_MSG_RESULT([yes]) 752 ICC_PCH=1 753 if test "$INTELCXX10" = "yes"; then 754 ICC_PCH_CREATE_SWITCH="-pch-create" 755 ICC_PCH_USE_SWITCH="-pch-use" 756 else 757 ICC_PCH_CREATE_SWITCH="-create-pch" 758 ICC_PCH_USE_SWITCH="-use-pch" 759 fi 760 else 761 AC_MSG_RESULT([no]) 762 fi 763 ]) 764 if test $GCC_PCH = 1 -o $ICC_PCH = 1 ; then 765 USE_PCH=1 766 AC_BAKEFILE_CREATE_FILE_BK_MAKE_PCH 767 chmod +x 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 770 dnl never empty): 771 BK_MAKE_PCH="`pwd`/bk-make-pch" 772 fi 773 fi 774 fi 775 776 AC_SUBST(GCC_PCH) 777 AC_SUBST(ICC_PCH) 778 AC_SUBST(ICC_PCH_CREATE_SWITCH) 779 AC_SUBST(ICC_PCH_USE_SWITCH) 780 AC_SUBST(BK_MAKE_PCH) 781]) 782 783 784 785dnl --------------------------------------------------------------------------- 786dnl AC_BAKEFILE([autoconf_inc.m4 inclusion]) 787dnl 788dnl To be used in configure.in of any project using Bakefile-generated mks 789dnl 790dnl Behaviour can be modified by setting following variables: 791dnl BAKEFILE_CHECK_BASICS set to "no" if you don't want bakefile to 792dnl to perform check for basic tools like ranlib 793dnl BAKEFILE_HOST set this to override host detection, defaults 794dnl to ${host} 795dnl BAKEFILE_FORCE_PLATFORM set to override platform detection 796dnl 797dnl Example usage: 798dnl 799dnl AC_BAKEFILE([FOO(autoconf_inc.m4)]) 800dnl 801dnl (replace FOO with m4_include above, aclocal would die otherwise) 802dnl (yes, it's ugly, but thanks to a bug in aclocal, it's the only thing 803dnl we can do...) 804dnl --------------------------------------------------------------------------- 805 806AC_DEFUN([AC_BAKEFILE], 807[ 808 AC_PREREQ([2.58]) 809 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]) 815 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.]) 819 fi 820 821 BAKEFILE_HOST="${host}" 822 fi 823 824 if test "x$BAKEFILE_CHECK_BASICS" != "xno"; then 825 AC_BAKEFILE_CHECK_BASIC_STUFF 826 fi 827 AC_BAKEFILE_GNUMAKE 828 AC_BAKEFILE_PLATFORM 829 AC_BAKEFILE_PLATFORM_SPECIFICS 830 AC_BAKEFILE_SUFFIXES 831 AC_BAKEFILE_SHARED_LD 832 AC_BAKEFILE_SHARED_VERSIONS 833 AC_BAKEFILE_DEPS 834 AC_BAKEFILE_RES_COMPILERS 835 836 dnl OBJCFLAGS is set by Autoconf, but OBJCXXFLAGS is not: 837 AC_SUBST(OBJCXXFLAGS) 838 839 840 BAKEFILE_BAKEFILE_M4_VERSION="0.2.8" 841 842 dnl includes autoconf_inc.m4: 843 $1 844 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)?]) 847 fi 848 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.]) 851 fi 852]) 853 854 855dnl --------------------------------------------------------------------------- 856dnl Embedded copies of helper scripts follow: 857dnl --------------------------------------------------------------------------- 858 859AC_DEFUN([AC_BAKEFILE_CREATE_FILE_BK_DEPS], 860[ 861dnl ===================== bk-deps begins here ===================== 862dnl (Created by merge-scripts.py from bk-deps 863dnl file do not edit here!) 864D='$' 865cat <<EOF >bk-deps 866#!/bin/sh 867 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. 870# 871# Permission is given to use this file in any way. 872 873DEPSMODE=${DEPSMODE} 874DEPSFLAG="${DEPSFLAG}" 875DEPSDIRBASE=.deps 876 877if test ${D}DEPSMODE = gcc ; then 878 ${D}* ${D}{DEPSFLAG} 879 status=${D}? 880 881 # determine location of created files: 882 while test ${D}# -gt 0; do 883 case "${D}1" in 884 -o ) 885 shift 886 objfile=${D}1 887 ;; 888 -* ) 889 ;; 890 * ) 891 srcfile=${D}1 892 ;; 893 esac 894 shift 895 done 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 901 mkdir -p ${D}depsdir 902 903 # if the compiler failed, we're done: 904 if test ${D}{status} != 0 ; then 905 rm -f ${D}depfile 906 exit ${D}{status} 907 fi 908 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 912 rm -f ${D}depfile 913 else 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" 919 fi 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 922 rm -f ${D}depfile 923 fi 924 fi 925 exit 0 926 927elif test ${D}DEPSMODE = mwcc ; then 928 ${D}* || exit ${D}? 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 931 prevarg= 932 for arg in ${D}* ; do 933 if test "${D}prevarg" = "-o"; then 934 objfile=${D}arg 935 else 936 case "${D}arg" in 937 -* ) 938 ;; 939 * ) 940 srcfile=${D}arg 941 ;; 942 esac 943 fi 944 prevarg="${D}arg" 945 done 946 947 objfilebase=\`basename ${D}objfile\` 948 builddir=\`dirname ${D}objfile\` 949 depsdir=${D}builddir/${D}DEPSDIRBASE 950 mkdir -p ${D}depsdir 951 952 ${D}* ${D}DEPSFLAG >${D}{depsdir}/${D}{objfilebase}.d 953 exit 0 954 955elif test ${D}DEPSMODE = unixcc; then 956 ${D}* || exit ${D}? 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. 961 cmd="" 962 while test ${D}# -gt 0; do 963 case "${D}1" in 964 -o ) 965 shift 966 objfile=${D}1 967 ;; 968 * ) 969 eval arg${D}#=\\${D}1 970 cmd="${D}cmd \\${D}arg${D}#" 971 ;; 972 esac 973 shift 974 done 975 976 objfilebase=\`basename ${D}objfile\` 977 builddir=\`dirname ${D}objfile\` 978 depsdir=${D}builddir/${D}DEPSDIRBASE 979 mkdir -p ${D}depsdir 980 981 eval "${D}cmd ${D}DEPSFLAG" | sed "s|.*:|${D}objfile:|" >${D}{depsdir}/${D}{objfilebase}.d 982 exit 0 983 984else 985 ${D}* 986 exit ${D}? 987fi 988EOF 989dnl ===================== bk-deps ends here ===================== 990]) 991 992AC_DEFUN([AC_BAKEFILE_CREATE_FILE_SHARED_LD_SH], 993[ 994dnl ===================== shared-ld-sh begins here ===================== 995dnl (Created by merge-scripts.py from shared-ld-sh 996dnl file do not edit here!) 997D='$' 998cat <<EOF >shared-ld-sh 999#!/bin/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#----------------------------------------------------------------------------- 1007 1008verbose=0 1009args="" 1010objects="" 1011linking_flag="-dynamiclib" 1012ldargs="-r -keep_private_externs -nostdlib" 1013 1014if test "x${D}CXX" = "x"; then 1015 CXX="c++" 1016fi 1017 1018while test ${D}# -gt 0; do 1019 case ${D}1 in 1020 1021 -v) 1022 verbose=1 1023 ;; 1024 1025 -o|-compatibility_version|-current_version|-framework|-undefined|-install_name) 1026 # collect these options and values 1027 args="${D}{args} ${D}1 ${D}2" 1028 shift 1029 ;; 1030 1031 -arch|-isysroot) 1032 # collect these options and values 1033 ldargs="${D}{ldargs} ${D}1 ${D}2" 1034 shift 1035 ;; 1036 1037 -s|-Wl,*) 1038 # collect these load args 1039 ldargs="${D}{ldargs} ${D}1" 1040 ;; 1041 1042 -l*|-L*|-flat_namespace|-headerpad_max_install_names) 1043 # collect these options 1044 args="${D}{args} ${D}1" 1045 ;; 1046 1047 -dynamiclib|-bundle) 1048 linking_flag="${D}1" 1049 ;; 1050 1051 -*) 1052 echo "shared-ld: unhandled option '${D}1'" 1053 exit 1 1054 ;; 1055 1056 *.o | *.a | *.dylib) 1057 # collect object files 1058 objects="${D}{objects} ${D}1" 1059 ;; 1060 1061 *) 1062 echo "shared-ld: unhandled argument '${D}1'" 1063 exit 1 1064 ;; 1065 1066 esac 1067 shift 1068done 1069 1070status=0 1071 1072# 1073# Link one module containing all the others 1074# 1075if test ${D}{verbose} = 1; then 1076 echo "${D}CXX ${D}{ldargs} ${D}{objects} -o master.${D}${D}.o" 1077fi 1078${D}CXX ${D}{ldargs} ${D}{objects} -o master.${D}${D}.o 1079status=${D}? 1080 1081# 1082# Link the shared library from the single module created, but only if the 1083# previous command didn't fail: 1084# 1085if 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}" 1088 fi 1089 ${D}CXX ${D}{linking_flag} master.${D}${D}.o ${D}{args} 1090 status=${D}? 1091fi 1092 1093# 1094# Remove intermediate module 1095# 1096rm -f master.${D}${D}.o 1097 1098exit ${D}status 1099EOF 1100dnl ===================== shared-ld-sh ends here ===================== 1101]) 1102 1103AC_DEFUN([AC_BAKEFILE_CREATE_FILE_BK_MAKE_PCH], 1104[ 1105dnl ===================== bk-make-pch begins here ===================== 1106dnl (Created by merge-scripts.py from bk-make-pch 1107dnl file do not edit here!) 1108D='$' 1109cat <<EOF >bk-make-pch 1110#!/bin/sh 1111 1112# This script is part of Bakefile (http://www.bakefile.org) autoconf 1113# script. It is used to generated precompiled headers. 1114# 1115# Permission is given to use this file in any way. 1116 1117outfile="${D}{1}" 1118header="${D}{2}" 1119shift 1120shift 1121 1122builddir=\`echo ${D}outfile | sed -e 's,/\\.pch/.*${D},,g'\` 1123 1124compiler="" 1125headerfile="" 1126 1127while test ${D}{#} -gt 0; do 1128 add_to_cmdline=1 1129 case "${D}{1}" in 1130 -I* ) 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}" 1134 fi 1135 ;; 1136 -use-pch|-use_pch|-pch-use ) 1137 shift 1138 add_to_cmdline=0 1139 ;; 1140 esac 1141 if test ${D}add_to_cmdline = 1 ; then 1142 compiler="${D}{compiler} ${D}{1}" 1143 fi 1144 shift 1145done 1146 1147if test "x${D}{headerfile}" = "x" ; then 1148 echo "error: can't find header ${D}{header} in include paths" >&2 1149else 1150 if test -f ${D}{outfile} ; then 1151 rm -f ${D}{outfile} 1152 else 1153 mkdir -p \`dirname ${D}{outfile}\` 1154 fi 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" 1166EOT 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 1171 fi 1172 exit ${D}{?} 1173fi 1174EOF 1175dnl ===================== bk-make-pch ends here ===================== 1176]) 1177