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