]> git.saurik.com Git - wxWidgets.git/blob - build/aclocal/bakefile.m4
ReadBig() should be defined in ANSI build too
[wxWidgets.git] / build / aclocal / bakefile.m4
1 dnl
2 dnl This file is part of Bakefile (http://www.bakefile.org)
3 dnl
4 dnl Copyright (C) 2003-2007 Vaclav Slavik and others
5 dnl
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:
12 dnl
13 dnl The above copyright notice and this permission notice shall be included in
14 dnl all copies or substantial portions of the Software.
15 dnl
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.
23 dnl
24 dnl $Id$
25 dnl
26 dnl Support macros for makefiles generated by BAKEFILE.
27 dnl
28
29
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 ---------------------------------------------------------------------------
34
35
36
37 dnl ---------------------------------------------------------------------------
38 dnl AC_BAKEFILE_GNUMAKE
39 dnl
40 dnl Detects GNU make
41 dnl ---------------------------------------------------------------------------
42
43 AC_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
64 dnl ---------------------------------------------------------------------------
65 dnl AC_BAKEFILE_PLATFORM
66 dnl
67 dnl Detects platform and sets PLATFORM_XXX variables accordingly
68 dnl ---------------------------------------------------------------------------
69
70 AC_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 dnl wxWidgets-specific: allow unknown Unix systems
130 dnl AC_MSG_ERROR([Unknown platform: $BAKEFILE_FORCE_PLATFORM])
131 ;;
132 esac
133 fi
134
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)
143 ])
144
145
146 dnl ---------------------------------------------------------------------------
147 dnl AC_BAKEFILE_PLATFORM_SPECIFICS
148 dnl
149 dnl Sets misc platform-specific settings
150 dnl ---------------------------------------------------------------------------
151
152 AC_DEFUN([AC_BAKEFILE_PLATFORM_SPECIFICS],
153 [
154 AC_ARG_ENABLE([omf], AS_HELP_STRING([--enable-omf],
155 [use OMF object format (OS/2)]),
156 [bk_os2_use_omf="$enableval"])
157
158 case "${BAKEFILE_HOST}" in
159 *-*-darwin* )
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"
165 fi
166 if test "x$XLCC" = "xyes"; then
167 CFLAGS="$CFLAGS -qnocommon"
168 CXXFLAGS="$CXXFLAGS -qnocommon"
169 fi
170 ;;
171
172 *-pc-os2_emx | *-pc-os2-emx )
173 if test "x$bk_os2_use_omf" = "xyes" ; then
174 AR=emxomfar
175 RANLIB=:
176 LDFLAGS="-Zomf $LDFLAGS"
177 CFLAGS="-Zomf $CFLAGS"
178 CXXFLAGS="-Zomf $CXXFLAGS"
179 OS2_LIBEXT="lib"
180 else
181 OS2_LIBEXT="a"
182 fi
183 ;;
184
185 i*86-*-beos* )
186 LDFLAGS="-L/boot/develop/lib/x86 $LDFLAGS"
187 ;;
188 esac
189 ])
190
191 dnl ---------------------------------------------------------------------------
192 dnl AC_BAKEFILE_SUFFIXES
193 dnl
194 dnl Detects shared various suffixes for shared libraries, libraries, programs,
195 dnl plugins etc.
196 dnl ---------------------------------------------------------------------------
197
198 AC_DEFUN([AC_BAKEFILE_SUFFIXES],
199 [
200 SO_SUFFIX="so"
201 SO_SUFFIX_MODULE="so"
202 EXEEXT=""
203 LIBPREFIX="lib"
204 LIBEXT=".a"
205 DLLPREFIX="lib"
206 DLLPREFIX_MODULE=""
207 DLLIMP_SUFFIX=""
208 dlldir="$libdir"
209
210 case "${BAKEFILE_HOST}" in
211 *-hp-hpux* )
212 SO_SUFFIX="sl"
213 SO_SUFFIX_MODULE="sl"
214 ;;
215 *-*-aix* )
216 dnl quoting from
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.
221 SO_SUFFIX="a"
222 SO_SUFFIX_MODULE="a"
223 ;;
224 *-*-cygwin* )
225 SO_SUFFIX="dll"
226 SO_SUFFIX_MODULE="dll"
227 DLLIMP_SUFFIX="dll.a"
228 EXEEXT=".exe"
229 DLLPREFIX="cyg"
230 dlldir="$bindir"
231 ;;
232 *-*-mingw32* )
233 SO_SUFFIX="dll"
234 SO_SUFFIX_MODULE="dll"
235 DLLIMP_SUFFIX="dll.a"
236 EXEEXT=".exe"
237 DLLPREFIX=""
238 dlldir="$bindir"
239 ;;
240 *-pc-msdosdjgpp )
241 EXEEXT=".exe"
242 DLLPREFIX=""
243 dlldir="$bindir"
244 ;;
245 *-pc-os2_emx | *-pc-os2-emx )
246 SO_SUFFIX="dll"
247 SO_SUFFIX_MODULE="dll"
248 DLLIMP_SUFFIX=$OS2_LIBEXT
249 EXEEXT=".exe"
250 DLLPREFIX=""
251 LIBPREFIX=""
252 LIBEXT=".$OS2_LIBEXT"
253 dlldir="$bindir"
254 ;;
255 *-*-darwin* )
256 SO_SUFFIX="dylib"
257 SO_SUFFIX_MODULE="bundle"
258 ;;
259 esac
260
261 if test "x$DLLIMP_SUFFIX" = "x" ; then
262 DLLIMP_SUFFIX="$SO_SUFFIX"
263 fi
264
265 AC_SUBST(SO_SUFFIX)
266 AC_SUBST(SO_SUFFIX_MODULE)
267 AC_SUBST(DLLIMP_SUFFIX)
268 AC_SUBST(EXEEXT)
269 AC_SUBST(LIBPREFIX)
270 AC_SUBST(LIBEXT)
271 AC_SUBST(DLLPREFIX)
272 AC_SUBST(DLLPREFIX_MODULE)
273 AC_SUBST(dlldir)
274 ])
275
276
277 dnl ---------------------------------------------------------------------------
278 dnl AC_BAKEFILE_SHARED_LD
279 dnl
280 dnl Detects command for making shared libraries, substitutes SHARED_LD_CC
281 dnl and SHARED_LD_CXX.
282 dnl ---------------------------------------------------------------------------
283
284 AC_DEFUN([AC_BAKEFILE_SHARED_LD],
285 [
286 dnl the extra compiler flags needed for compilation of shared library
287 PIC_FLAG=""
288 if test "x$GCC" = "xyes"; then
289 dnl the switch for gcc is the same under all platforms
290 PIC_FLAG="-fPIC"
291 fi
292
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"
296 WINDOWS_IMPLIB=0
297
298 case "${BAKEFILE_HOST}" in
299 *-hp-hpux* )
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"
304
305 SHARED_LD_CC="${CC} -b -o"
306 SHARED_LD_CXX="${CXX} -b -o"
307 PIC_FLAG="+Z"
308 fi
309 ;;
310
311 *-*-linux* )
312 if test "$INTELCC" = "yes"; then
313 PIC_FLAG="-KPIC"
314 elif test "x$SUNCXX" = "xyes"; then
315 SHARED_LD_CC="${CC} -G -o"
316 SHARED_LD_CXX="${CXX} -G -o"
317 PIC_FLAG="-KPIC"
318 fi
319 ;;
320
321 *-*-solaris2* )
322 if test "x$SUNCXX" = xyes ; then
323 SHARED_LD_CC="${CC} -G -o"
324 SHARED_LD_CXX="${CXX} -G -o"
325 PIC_FLAG="-KPIC"
326 fi
327 ;;
328
329 *-*-darwin* )
330 AC_BAKEFILE_CREATE_FILE_SHARED_LD_SH
331 chmod +x shared-ld-sh
332
333 SHARED_LD_MODULE_CC="`pwd`/shared-ld-sh -bundle -headerpad_max_install_names -o"
334 SHARED_LD_MODULE_CXX="CXX=\$(CXX) $SHARED_LD_MODULE_CC"
335
336 dnl Most apps benefit from being fully binded (its faster and static
337 dnl variables initialized at startup work).
338 dnl This can be done either with the exe linker flag -Wl,-bind_at_load
339 dnl or with a double stage link in order to create a single module
340 dnl "-init _wxWindowsDylibInit" not useful with lazy linking solved
341
342 dnl If using newer dev tools then there is a -single_module flag that
343 dnl we can use to do this for dylibs, otherwise we'll need to use a helper
344 dnl script. Check the version of gcc to see which way we can go:
345 AC_CACHE_CHECK([for gcc 3.1 or later], bakefile_cv_gcc31, [
346 AC_TRY_COMPILE([],
347 [
348 #if (__GNUC__ < 3) || \
349 ((__GNUC__ == 3) && (__GNUC_MINOR__ < 1))
350 This is old gcc
351 #endif
352 ],
353 [
354 bakefile_cv_gcc31=yes
355 ],
356 [
357 bakefile_cv_gcc31=no
358 ]
359 )
360 ])
361 if test "$bakefile_cv_gcc31" = "no"; then
362 dnl Use the shared-ld-sh helper script
363 SHARED_LD_CC="`pwd`/shared-ld-sh -dynamiclib -headerpad_max_install_names -o"
364 SHARED_LD_CXX="$SHARED_LD_CC"
365 else
366 dnl Use the -single_module flag and let the linker do it for us
367 SHARED_LD_CC="\${CC} -dynamiclib -single_module -headerpad_max_install_names -o"
368 SHARED_LD_CXX="\${CXX} -dynamiclib -single_module -headerpad_max_install_names -o"
369 fi
370
371 if test "x$GCC" == "xyes"; then
372 PIC_FLAG="-dynamic -fPIC"
373 fi
374 if test "x$XLCC" = "xyes"; then
375 PIC_FLAG="-dynamic -DPIC"
376 fi
377 ;;
378
379 *-*-aix* )
380 if test "x$GCC" = "xyes"; then
381 dnl at least gcc 2.95 warns that -fPIC is ignored when
382 dnl compiling each and every file under AIX which is annoying,
383 dnl so don't use it there (it's useless as AIX runs on
384 dnl position-independent architectures only anyhow)
385 PIC_FLAG=""
386
387 dnl -bexpfull is needed by AIX linker to export all symbols (by
388 dnl default it doesn't export any and even with -bexpall it
389 dnl doesn't export all C++ support symbols, e.g. vtable
390 dnl pointers) but it's only available starting from 5.1 (with
391 dnl maintenance pack 2, whatever this is), see
392 dnl http://www-128.ibm.com/developerworks/eserver/articles/gnu.html
393 case "${BAKEFILE_HOST}" in
394 *-*-aix5* )
395 LD_EXPFULL="-Wl,-bexpfull"
396 ;;
397 esac
398
399 SHARED_LD_CC="\$(CC) -shared $LD_EXPFULL -o"
400 SHARED_LD_CXX="\$(CXX) -shared $LD_EXPFULL -o"
401 else
402 dnl FIXME: makeC++SharedLib is obsolete, what should we do for
403 dnl recent AIX versions?
404 AC_CHECK_PROG(AIX_CXX_LD, makeC++SharedLib,
405 makeC++SharedLib, /usr/lpp/xlC/bin/makeC++SharedLib)
406 SHARED_LD_CC="$AIX_CC_LD -p 0 -o"
407 SHARED_LD_CXX="$AIX_CXX_LD -p 0 -o"
408 fi
409 ;;
410
411 *-*-beos* )
412 dnl can't use gcc under BeOS for shared library creation because it
413 dnl complains about missing 'main'
414 SHARED_LD_CC="${LD} -nostart -o"
415 SHARED_LD_CXX="${LD} -nostart -o"
416 ;;
417
418 *-*-irix* )
419 dnl default settings are ok for gcc
420 if test "x$GCC" != "xyes"; then
421 PIC_FLAG="-KPIC"
422 fi
423 ;;
424
425 *-*-cygwin* | *-*-mingw32* )
426 PIC_FLAG=""
427 SHARED_LD_CC="\$(CC) -shared -o"
428 SHARED_LD_CXX="\$(CXX) -shared -o"
429 WINDOWS_IMPLIB=1
430 ;;
431
432 *-pc-os2_emx | *-pc-os2-emx )
433 SHARED_LD_CC="`pwd`/dllar.sh -libf INITINSTANCE -libf TERMINSTANCE -o"
434 SHARED_LD_CXX="`pwd`/dllar.sh -libf INITINSTANCE -libf TERMINSTANCE -o"
435 PIC_FLAG=""
436 AC_BAKEFILE_CREATE_FILE_DLLAR_SH
437 chmod +x dllar.sh
438 ;;
439
440 powerpc-apple-macos* | \
441 *-*-freebsd* | *-*-openbsd* | *-*-netbsd* | *-*-k*bsd*-gnu | \
442 *-*-mirbsd* | \
443 *-*-sunos4* | \
444 *-*-osf* | \
445 *-*-dgux5* | \
446 *-*-sysv5* | \
447 *-pc-msdosdjgpp )
448 dnl defaults are ok
449 ;;
450
451 *)
452 AC_MSG_ERROR(unknown system type $BAKEFILE_HOST.)
453 esac
454
455 if test "x$PIC_FLAG" != "x" ; then
456 PIC_FLAG="$PIC_FLAG -DPIC"
457 fi
458
459 if test "x$SHARED_LD_MODULE_CC" = "x" ; then
460 SHARED_LD_MODULE_CC="$SHARED_LD_CC"
461 fi
462 if test "x$SHARED_LD_MODULE_CXX" = "x" ; then
463 SHARED_LD_MODULE_CXX="$SHARED_LD_CXX"
464 fi
465
466 AC_SUBST(SHARED_LD_CC)
467 AC_SUBST(SHARED_LD_CXX)
468 AC_SUBST(SHARED_LD_MODULE_CC)
469 AC_SUBST(SHARED_LD_MODULE_CXX)
470 AC_SUBST(PIC_FLAG)
471 AC_SUBST(WINDOWS_IMPLIB)
472 ])
473
474
475 dnl ---------------------------------------------------------------------------
476 dnl AC_BAKEFILE_SHARED_VERSIONS
477 dnl
478 dnl Detects linker options for attaching versions (sonames) to shared libs.
479 dnl ---------------------------------------------------------------------------
480
481 AC_DEFUN([AC_BAKEFILE_SHARED_VERSIONS],
482 [
483 USE_SOVERSION=0
484 USE_SOVERLINUX=0
485 USE_SOVERSOLARIS=0
486 USE_SOVERCYGWIN=0
487 USE_SOSYMLINKS=0
488 USE_MACVERSION=0
489 SONAME_FLAG=
490
491 case "${BAKEFILE_HOST}" in
492 *-*-linux* | *-*-freebsd* | *-*-openbsd* | *-*-netbsd* | \
493 *-*-k*bsd*-gnu | *-*-mirbsd* )
494 if test "x$SUNCXX" = "xyes"; then
495 SONAME_FLAG="-h "
496 else
497 SONAME_FLAG="-Wl,-soname,"
498 fi
499 USE_SOVERSION=1
500 USE_SOVERLINUX=1
501 USE_SOSYMLINKS=1
502 ;;
503
504 *-*-solaris2* )
505 SONAME_FLAG="-h "
506 USE_SOVERSION=1
507 USE_SOVERSOLARIS=1
508 USE_SOSYMLINKS=1
509 ;;
510
511 *-*-darwin* )
512 USE_MACVERSION=1
513 USE_SOVERSION=1
514 USE_SOSYMLINKS=1
515 ;;
516
517 *-*-cygwin* )
518 USE_SOVERSION=1
519 USE_SOVERCYGWIN=1
520 ;;
521 esac
522
523 AC_SUBST(USE_SOVERSION)
524 AC_SUBST(USE_SOVERLINUX)
525 AC_SUBST(USE_SOVERSOLARIS)
526 AC_SUBST(USE_SOVERCYGWIN)
527 AC_SUBST(USE_MACVERSION)
528 AC_SUBST(USE_SOSYMLINKS)
529 AC_SUBST(SONAME_FLAG)
530 ])
531
532
533 dnl ---------------------------------------------------------------------------
534 dnl AC_BAKEFILE_DEPS
535 dnl
536 dnl Detects available C/C++ dependency tracking options
537 dnl ---------------------------------------------------------------------------
538
539 AC_DEFUN([AC_BAKEFILE_DEPS],
540 [
541 AC_ARG_ENABLE([dependency-tracking],
542 AS_HELP_STRING([--disable-dependency-tracking],
543 [don't use dependency tracking even if the compiler can]),
544 [bk_use_trackdeps="$enableval"])
545
546 AC_MSG_CHECKING([for dependency tracking method])
547
548 BK_DEPS=""
549 if test "x$bk_use_trackdeps" = "xno" ; then
550 DEPS_TRACKING=0
551 AC_MSG_RESULT([disabled])
552 else
553 DEPS_TRACKING=1
554
555 if test "x$GCC" = "xyes"; then
556 DEPSMODE=gcc
557 case "${BAKEFILE_HOST}" in
558 *-*-darwin* )
559 dnl -cpp-precomp (the default) conflicts with -MMD option
560 dnl used by bk-deps (see also http://developer.apple.com/documentation/Darwin/Conceptual/PortingUnix/compiling/chapter_4_section_3.html)
561 DEPSFLAG="-no-cpp-precomp -MMD"
562 ;;
563 * )
564 DEPSFLAG="-MMD"
565 ;;
566 esac
567 AC_MSG_RESULT([gcc])
568 elif test "x$MWCC" = "xyes"; then
569 DEPSMODE=mwcc
570 DEPSFLAG="-MM"
571 AC_MSG_RESULT([mwcc])
572 elif test "x$SUNCC" = "xyes"; then
573 DEPSMODE=unixcc
574 DEPSFLAG="-xM1"
575 AC_MSG_RESULT([Sun cc])
576 elif test "x$SGICC" = "xyes"; then
577 DEPSMODE=unixcc
578 DEPSFLAG="-M"
579 AC_MSG_RESULT([SGI cc])
580 elif test "x$HPCC" = "xyes"; then
581 DEPSMODE=unixcc
582 DEPSFLAG="+make"
583 AC_MSG_RESULT([HP cc])
584 elif test "x$COMPAQCC" = "xyes"; then
585 DEPSMODE=gcc
586 DEPSFLAG="-MD"
587 AC_MSG_RESULT([Compaq cc])
588 else
589 DEPS_TRACKING=0
590 AC_MSG_RESULT([none])
591 fi
592
593 if test $DEPS_TRACKING = 1 ; then
594 AC_BAKEFILE_CREATE_FILE_BK_DEPS
595 chmod +x bk-deps
596 dnl FIXME: make this $(top_builddir)/bk-deps once autoconf-2.60
597 dnl is required (and so top_builddir is never empty):
598 BK_DEPS="`pwd`/bk-deps"
599 fi
600 fi
601
602 AC_SUBST(DEPS_TRACKING)
603 AC_SUBST(BK_DEPS)
604 ])
605
606 dnl ---------------------------------------------------------------------------
607 dnl AC_BAKEFILE_CHECK_BASIC_STUFF
608 dnl
609 dnl Checks for presence of basic programs, such as C and C++ compiler, "ranlib"
610 dnl or "install"
611 dnl ---------------------------------------------------------------------------
612
613 AC_DEFUN([AC_BAKEFILE_CHECK_BASIC_STUFF],
614 [
615 AC_PROG_RANLIB
616 AC_PROG_INSTALL
617 AC_PROG_LN_S
618
619 AC_PROG_MAKE_SET
620 AC_SUBST(MAKE_SET)
621
622 if test "x$SUNCXX" = "xyes"; then
623 dnl Sun C++ compiler requires special way of creating static libs;
624 dnl see here for more details:
625 dnl https://sourceforge.net/tracker/?func=detail&atid=109863&aid=1229751&group_id=9863
626 AR=$CXX
627 AROPTIONS="-xar -o"
628 AC_SUBST(AR)
629 elif test "x$SGICC" = "xyes"; then
630 dnl Almost the same as above for SGI mipsPro compiler
631 AR=$CXX
632 AROPTIONS="-ar -o"
633 AC_SUBST(AR)
634 else
635 AC_CHECK_TOOL(AR, ar, ar)
636 AROPTIONS=rcu
637 fi
638 AC_SUBST(AROPTIONS)
639
640 AC_CHECK_TOOL(STRIP, strip, :)
641 AC_CHECK_TOOL(NM, nm, :)
642
643 dnl This check is necessary because "install -d" doesn't exist on
644 dnl all platforms (e.g. HP/UX), see http://www.bakefile.org/ticket/80
645 AC_MSG_CHECKING([for command to install directories])
646 INSTALL_TEST_DIR=acbftest$$
647 $INSTALL -d $INSTALL_TEST_DIR > /dev/null 2>&1
648 if test $? = 0 -a -d $INSTALL_TEST_DIR; then
649 rmdir $INSTALL_TEST_DIR
650 dnl we must refer to makefile's $(INSTALL) variable and not
651 dnl current value of shell variable, hence the single quoting:
652 INSTALL_DIR='$(INSTALL) -d'
653 AC_MSG_RESULT([$INSTALL -d])
654 else
655 INSTALL_DIR="mkdir -p"
656 AC_MSG_RESULT([mkdir -p])
657 fi
658 AC_SUBST(INSTALL_DIR)
659
660 LDFLAGS_GUI=
661 case ${BAKEFILE_HOST} in
662 *-*-cygwin* | *-*-mingw32* )
663 LDFLAGS_GUI="-mwindows"
664 esac
665 AC_SUBST(LDFLAGS_GUI)
666 ])
667
668
669 dnl ---------------------------------------------------------------------------
670 dnl AC_BAKEFILE_RES_COMPILERS
671 dnl
672 dnl Checks for presence of resource compilers for win32 or mac
673 dnl ---------------------------------------------------------------------------
674
675 AC_DEFUN([AC_BAKEFILE_RES_COMPILERS],
676 [
677 case ${BAKEFILE_HOST} in
678 *-*-cygwin* | *-*-mingw32* )
679 dnl Check for win32 resources compiler:
680 AC_CHECK_TOOL(WINDRES, windres)
681 ;;
682
683 *-*-darwin* | powerpc-apple-macos* )
684 AC_CHECK_PROG(REZ, Rez, Rez, /Developer/Tools/Rez)
685 AC_CHECK_PROG(SETFILE, SetFile, SetFile, /Developer/Tools/SetFile)
686 ;;
687 esac
688
689 AC_SUBST(WINDRES)
690 AC_SUBST(REZ)
691 AC_SUBST(SETFILE)
692 ])
693
694 dnl ---------------------------------------------------------------------------
695 dnl AC_BAKEFILE_PRECOMP_HEADERS
696 dnl
697 dnl Check for precompiled headers support (GCC >= 3.4)
698 dnl ---------------------------------------------------------------------------
699
700 AC_DEFUN([AC_BAKEFILE_PRECOMP_HEADERS],
701 [
702
703 AC_ARG_ENABLE([precomp-headers],
704 AS_HELP_STRING([--disable-precomp-headers],
705 [don't use precompiled headers even if compiler can]),
706 [bk_use_pch="$enableval"])
707
708 GCC_PCH=0
709 ICC_PCH=0
710 USE_PCH=0
711 BK_MAKE_PCH=""
712
713 case ${BAKEFILE_HOST} in
714 *-*-cygwin* )
715 dnl PCH support is broken in cygwin gcc because of unportable
716 dnl assumptions about mmap() in gcc code which make PCH generation
717 dnl fail erratically; disable PCH completely until this is fixed
718 bk_use_pch="no"
719 ;;
720 esac
721
722 if test "x$bk_use_pch" = "x" -o "x$bk_use_pch" = "xyes" ; then
723 if test "x$GCC" = "xyes"; then
724 dnl test if we have gcc-3.4:
725 AC_MSG_CHECKING([if the compiler supports precompiled headers])
726 AC_TRY_COMPILE([],
727 [
728 #if !defined(__GNUC__) || !defined(__GNUC_MINOR__)
729 There is no PCH support
730 #endif
731 #if (__GNUC__ < 3)
732 There is no PCH support
733 #endif
734 #if (__GNUC__ == 3) && \
735 ((!defined(__APPLE_CC__) && (__GNUC_MINOR__ < 4)) || \
736 ( defined(__APPLE_CC__) && (__GNUC_MINOR__ < 3))) || \
737 ( defined(__INTEL_COMPILER) )
738 There is no PCH support
739 #endif
740 ],
741 [
742 AC_MSG_RESULT([yes])
743 GCC_PCH=1
744 ],
745 [
746 AC_TRY_COMPILE([],
747 [
748 #if !defined(__INTEL_COMPILER) || \
749 (__INTEL_COMPILER < 800)
750 There is no PCH support
751 #endif
752 ],
753 [
754 AC_MSG_RESULT([yes])
755 ICC_PCH=1
756 ],
757 [
758 AC_MSG_RESULT([no])
759 ])
760 ])
761 if test $GCC_PCH = 1 -o $ICC_PCH = 1 ; then
762 USE_PCH=1
763 AC_BAKEFILE_CREATE_FILE_BK_MAKE_PCH
764 chmod +x bk-make-pch
765 dnl FIXME: make this $(top_builddir)/bk-make-pch once
766 dnl autoconf-2.60 is required (and so top_builddir is
767 dnl never empty):
768 BK_MAKE_PCH="`pwd`/bk-make-pch"
769 fi
770 fi
771 fi
772
773 AC_SUBST(GCC_PCH)
774 AC_SUBST(ICC_PCH)
775 AC_SUBST(BK_MAKE_PCH)
776 ])
777
778
779
780 dnl ---------------------------------------------------------------------------
781 dnl AC_BAKEFILE([autoconf_inc.m4 inclusion])
782 dnl
783 dnl To be used in configure.in of any project using Bakefile-generated mks
784 dnl
785 dnl Behaviour can be modified by setting following variables:
786 dnl BAKEFILE_CHECK_BASICS set to "no" if you don't want bakefile to
787 dnl to perform check for basic tools like ranlib
788 dnl BAKEFILE_HOST set this to override host detection, defaults
789 dnl to ${host}
790 dnl BAKEFILE_FORCE_PLATFORM set to override platform detection
791 dnl
792 dnl Example usage:
793 dnl
794 dnl AC_BAKEFILE([FOO(autoconf_inc.m4)])
795 dnl
796 dnl (replace FOO with m4_include above, aclocal would die otherwise)
797 dnl (yes, it's ugly, but thanks to a bug in aclocal, it's the only thing
798 dnl we can do...)
799 dnl ---------------------------------------------------------------------------
800
801 AC_DEFUN([AC_BAKEFILE],
802 [
803 AC_PREREQ([2.58])
804
805 dnl We need to always run C/C++ compiler tests, but it's also possible
806 dnl for the user to call these macros manually, hence this instead of
807 dnl simply calling these macros. See http://www.bakefile.org/ticket/64
808 AC_REQUIRE([AC_BAKEFILE_PROG_CC])
809 AC_REQUIRE([AC_BAKEFILE_PROG_CXX])
810
811 if test "x$BAKEFILE_HOST" = "x"; then
812 if test "x${host}" = "x" ; then
813 AC_MSG_ERROR([You must call the autoconf "CANONICAL_HOST" macro in your configure.ac (or .in) file.])
814 fi
815
816 BAKEFILE_HOST="${host}"
817 fi
818
819 if test "x$BAKEFILE_CHECK_BASICS" != "xno"; then
820 AC_BAKEFILE_CHECK_BASIC_STUFF
821 fi
822 AC_BAKEFILE_GNUMAKE
823 AC_BAKEFILE_PLATFORM
824 AC_BAKEFILE_PLATFORM_SPECIFICS
825 AC_BAKEFILE_SUFFIXES
826 AC_BAKEFILE_SHARED_LD
827 AC_BAKEFILE_SHARED_VERSIONS
828 AC_BAKEFILE_DEPS
829 AC_BAKEFILE_RES_COMPILERS
830
831 BAKEFILE_BAKEFILE_M4_VERSION="0.2.3"
832
833 dnl includes autoconf_inc.m4:
834 $1
835
836 if test "$BAKEFILE_AUTOCONF_INC_M4_VERSION" = "" ; then
837 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)?])
838 fi
839
840 if test "$BAKEFILE_BAKEFILE_M4_VERSION" != "$BAKEFILE_AUTOCONF_INC_M4_VERSION" ; then
841 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 fi
843 ])
844
845
846 dnl ---------------------------------------------------------------------------
847 dnl Embedded copies of helper scripts follow:
848 dnl ---------------------------------------------------------------------------
849
850 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_BK_DEPS],
851 [
852 dnl ===================== bk-deps begins here =====================
853 dnl (Created by merge-scripts.py from bk-deps
854 dnl file do not edit here!)
855 D='$'
856 cat <<EOF >bk-deps
857 #!/bin/sh
858
859 # This script is part of Bakefile (http://www.bakefile.org) autoconf
860 # script. It is used to track C/C++ files dependencies in portable way.
861 #
862 # Permission is given to use this file in any way.
863
864 DEPSMODE=${DEPSMODE}
865 DEPSDIR=.deps
866 DEPSFLAG="${DEPSFLAG}"
867
868 mkdir -p ${D}DEPSDIR
869
870 if test ${D}DEPSMODE = gcc ; then
871 ${D}* ${D}{DEPSFLAG}
872 status=${D}?
873
874 # determine location of created files:
875 while test ${D}# -gt 0; do
876 case "${D}1" in
877 -o )
878 shift
879 objfile=${D}1
880 ;;
881 -* )
882 ;;
883 * )
884 srcfile=${D}1
885 ;;
886 esac
887 shift
888 done
889 depfile=\`basename ${D}srcfile | sed -e 's/\\..*${D}/.d/g'\`
890 depobjname=\`echo ${D}depfile |sed -e 's/\\.d/.o/g'\`
891
892 # if the compiler failed, we're done:
893 if test ${D}{status} != 0 ; then
894 rm -f ${D}depfile
895 exit ${D}{status}
896 fi
897
898 # move created file to the location we want it in:
899 if test -f ${D}depfile ; then
900 sed -e "s,${D}depobjname:,${D}objfile:,g" ${D}depfile >${D}{DEPSDIR}/${D}{objfile}.d
901 rm -f ${D}depfile
902 else
903 # "g++ -MMD -o fooobj.o foosrc.cpp" produces fooobj.d
904 depfile=\`basename ${D}objfile | sed -e 's/\\..*${D}/.d/g'\`
905 if test ! -f ${D}depfile ; then
906 # "cxx -MD -o fooobj.o foosrc.cpp" creates fooobj.o.d (Compaq C++)
907 depfile="${D}objfile.d"
908 fi
909 if test -f ${D}depfile ; then
910 sed -e "/^${D}objfile/!s,${D}depobjname:,${D}objfile:,g" ${D}depfile >${D}{DEPSDIR}/${D}{objfile}.d
911 rm -f ${D}depfile
912 fi
913 fi
914 exit 0
915 elif test ${D}DEPSMODE = mwcc ; then
916 ${D}* || exit ${D}?
917 # Run mwcc again with -MM and redirect into the dep file we want
918 # NOTE: We can't use shift here because we need ${D}* to be valid
919 prevarg=
920 for arg in ${D}* ; do
921 if test "${D}prevarg" = "-o"; then
922 objfile=${D}arg
923 else
924 case "${D}arg" in
925 -* )
926 ;;
927 * )
928 srcfile=${D}arg
929 ;;
930 esac
931 fi
932 prevarg="${D}arg"
933 done
934 ${D}* ${D}DEPSFLAG >${D}{DEPSDIR}/${D}{objfile}.d
935 exit 0
936 elif test ${D}DEPSMODE = unixcc; then
937 ${D}* || exit ${D}?
938 # Run compiler again with deps flag and redirect into the dep file.
939 # It doesn't work if the '-o FILE' option is used, but without it the
940 # dependency file will contain the wrong name for the object. So it is
941 # removed from the command line, and the dep file is fixed with sed.
942 cmd=""
943 while test ${D}# -gt 0; do
944 case "${D}1" in
945 -o )
946 shift
947 objfile=${D}1
948 ;;
949 * )
950 eval arg${D}#=\\${D}1
951 cmd="${D}cmd \\${D}arg${D}#"
952 ;;
953 esac
954 shift
955 done
956 eval "${D}cmd ${D}DEPSFLAG" | sed "s|.*:|${D}objfile:|" >${D}{DEPSDIR}/${D}{objfile}.d
957 exit 0
958 else
959 ${D}*
960 exit ${D}?
961 fi
962 EOF
963 dnl ===================== bk-deps ends here =====================
964 ])
965
966 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_SHARED_LD_SH],
967 [
968 dnl ===================== shared-ld-sh begins here =====================
969 dnl (Created by merge-scripts.py from shared-ld-sh
970 dnl file do not edit here!)
971 D='$'
972 cat <<EOF >shared-ld-sh
973 #!/bin/sh
974 #-----------------------------------------------------------------------------
975 #-- Name: distrib/mac/shared-ld-sh
976 #-- Purpose: Link a mach-o dynamic shared library for Darwin / Mac OS X
977 #-- Author: Gilles Depeyrot
978 #-- Copyright: (c) 2002 Gilles Depeyrot
979 #-- Licence: any use permitted
980 #-----------------------------------------------------------------------------
981
982 verbose=0
983 args=""
984 objects=""
985 linking_flag="-dynamiclib"
986 ldargs="-r -keep_private_externs -nostdlib"
987
988 if test "x${D}CXX" = "x"; then
989 CXX="c++"
990 fi
991
992 while test ${D}# -gt 0; do
993 case ${D}1 in
994
995 -v)
996 verbose=1
997 ;;
998
999 -o|-compatibility_version|-current_version|-framework|-undefined|-install_name)
1000 # collect these options and values
1001 args="${D}{args} ${D}1 ${D}2"
1002 shift
1003 ;;
1004
1005 -arch|-isysroot)
1006 # collect these options and values
1007 ldargs="${D}{ldargs} ${D}1 ${D}2"
1008 shift
1009 ;;
1010
1011 -s|-Wl,*)
1012 # collect these load args
1013 ldargs="${D}{ldargs} ${D}1"
1014 ;;
1015
1016 -l*|-L*|-flat_namespace|-headerpad_max_install_names)
1017 # collect these options
1018 args="${D}{args} ${D}1"
1019 ;;
1020
1021 -dynamiclib|-bundle)
1022 linking_flag="${D}1"
1023 ;;
1024
1025 -*)
1026 echo "shared-ld: unhandled option '${D}1'"
1027 exit 1
1028 ;;
1029
1030 *.o | *.a | *.dylib)
1031 # collect object files
1032 objects="${D}{objects} ${D}1"
1033 ;;
1034
1035 *)
1036 echo "shared-ld: unhandled argument '${D}1'"
1037 exit 1
1038 ;;
1039
1040 esac
1041 shift
1042 done
1043
1044 status=0
1045
1046 #
1047 # Link one module containing all the others
1048 #
1049 if test ${D}{verbose} = 1; then
1050 echo "${D}CXX ${D}{ldargs} ${D}{objects} -o master.${D}${D}.o"
1051 fi
1052 ${D}CXX ${D}{ldargs} ${D}{objects} -o master.${D}${D}.o
1053 status=${D}?
1054
1055 #
1056 # Link the shared library from the single module created, but only if the
1057 # previous command didn't fail:
1058 #
1059 if test ${D}{status} = 0; then
1060 if test ${D}{verbose} = 1; then
1061 echo "${D}CXX ${D}{linking_flag} master.${D}${D}.o ${D}{args}"
1062 fi
1063 ${D}CXX ${D}{linking_flag} master.${D}${D}.o ${D}{args}
1064 status=${D}?
1065 fi
1066
1067 #
1068 # Remove intermediate module
1069 #
1070 rm -f master.${D}${D}.o
1071
1072 exit ${D}status
1073 EOF
1074 dnl ===================== shared-ld-sh ends here =====================
1075 ])
1076
1077 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_BK_MAKE_PCH],
1078 [
1079 dnl ===================== bk-make-pch begins here =====================
1080 dnl (Created by merge-scripts.py from bk-make-pch
1081 dnl file do not edit here!)
1082 D='$'
1083 cat <<EOF >bk-make-pch
1084 #!/bin/sh
1085
1086 # This script is part of Bakefile (http://www.bakefile.org) autoconf
1087 # script. It is used to generated precompiled headers.
1088 #
1089 # Permission is given to use this file in any way.
1090
1091 outfile="${D}{1}"
1092 header="${D}{2}"
1093 shift
1094 shift
1095
1096 compiler=""
1097 headerfile=""
1098
1099 while test ${D}{#} -gt 0; do
1100 add_to_cmdline=1
1101 case "${D}{1}" in
1102 -I* )
1103 incdir=\`echo ${D}{1} | sed -e 's/-I\\(.*\\)/\\1/g'\`
1104 if test "x${D}{headerfile}" = "x" -a -f "${D}{incdir}/${D}{header}" ; then
1105 headerfile="${D}{incdir}/${D}{header}"
1106 fi
1107 ;;
1108 -use-pch|-use_pch )
1109 shift
1110 add_to_cmdline=0
1111 ;;
1112 esac
1113 if test ${D}add_to_cmdline = 1 ; then
1114 compiler="${D}{compiler} ${D}{1}"
1115 fi
1116 shift
1117 done
1118
1119 if test "x${D}{headerfile}" = "x" ; then
1120 echo "error: can't find header ${D}{header} in include paths" >&2
1121 else
1122 if test -f ${D}{outfile} ; then
1123 rm -f ${D}{outfile}
1124 else
1125 mkdir -p \`dirname ${D}{outfile}\`
1126 fi
1127 depsfile=".deps/\`echo ${D}{outfile} | tr '/.' '__'\`.d"
1128 mkdir -p .deps
1129 if test "x${GCC_PCH}" = "x1" ; then
1130 # can do this because gcc is >= 3.4:
1131 ${D}{compiler} -o ${D}{outfile} -MMD -MF "${D}{depsfile}" "${D}{headerfile}"
1132 elif test "x${ICC_PCH}" = "x1" ; then
1133 filename=pch_gen-${D}${D}
1134 file=${D}{filename}.c
1135 dfile=${D}{filename}.d
1136 cat > ${D}file <<EOT
1137 #include "${D}header"
1138 EOT
1139 # using -MF icc complains about differing command lines in creation/use
1140 ${D}compiler -c -create_pch ${D}outfile -MMD ${D}file && \\
1141 sed -e "s,^.*:,${D}outfile:," -e "s, ${D}file,," < ${D}dfile > ${D}depsfile && \\
1142 rm -f ${D}file ${D}dfile ${D}{filename}.o
1143 fi
1144 exit ${D}{?}
1145 fi
1146 EOF
1147 dnl ===================== bk-make-pch ends here =====================
1148 ])