]> git.saurik.com Git - wxWidgets.git/blob - build/aclocal/bakefile.m4
fixed the error 'macro parameters must be comma-separated' reported by running gcc...
[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 dnl OBJCFLAGS is set by Autoconf, but OBJCXXFLAGS is not:
832 AC_SUBST(OBJCXXFLAGS)
833
834
835 BAKEFILE_BAKEFILE_M4_VERSION="0.2.5"
836
837 dnl includes autoconf_inc.m4:
838 $1
839
840 if test "$BAKEFILE_AUTOCONF_INC_M4_VERSION" = "" ; then
841 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)?])
842 fi
843
844 if test "$BAKEFILE_BAKEFILE_M4_VERSION" != "$BAKEFILE_AUTOCONF_INC_M4_VERSION" ; then
845 AC_MSG_ERROR([Versions of Bakefile used to generate makefiles ($BAKEFILE_AUTOCONF_INC_M4_VERSION) and configure ($BAKEFILE_BAKEFILE_M4_VERSION) do not match.])
846 fi
847 ])
848
849
850 dnl ---------------------------------------------------------------------------
851 dnl Embedded copies of helper scripts follow:
852 dnl ---------------------------------------------------------------------------
853
854 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_BK_DEPS],
855 [
856 dnl ===================== bk-deps begins here =====================
857 dnl (Created by merge-scripts.py from bk-deps
858 dnl file do not edit here!)
859 D='$'
860 cat <<EOF >bk-deps
861 #!/bin/sh
862
863 # This script is part of Bakefile (http://www.bakefile.org) autoconf
864 # script. It is used to track C/C++ files dependencies in portable way.
865 #
866 # Permission is given to use this file in any way.
867
868 DEPSMODE=${DEPSMODE}
869 DEPSFLAG="${DEPSFLAG}"
870 DEPSDIRBASE=.deps
871
872 if test ${D}DEPSMODE = gcc ; then
873 ${D}* ${D}{DEPSFLAG}
874 status=${D}?
875
876 # determine location of created files:
877 while test ${D}# -gt 0; do
878 case "${D}1" in
879 -o )
880 shift
881 objfile=${D}1
882 ;;
883 -* )
884 ;;
885 * )
886 srcfile=${D}1
887 ;;
888 esac
889 shift
890 done
891 objfilebase=\`basename ${D}objfile\`
892 builddir=\`dirname ${D}objfile\`
893 depfile=\`basename ${D}srcfile | sed -e 's/\\..*${D}/.d/g'\`
894 depobjname=\`echo ${D}depfile |sed -e 's/\\.d/.o/g'\`
895 depsdir=${D}builddir/${D}DEPSDIRBASE
896 mkdir -p ${D}depsdir
897
898 # if the compiler failed, we're done:
899 if test ${D}{status} != 0 ; then
900 rm -f ${D}depfile
901 exit ${D}{status}
902 fi
903
904 # move created file to the location we want it in:
905 if test -f ${D}depfile ; then
906 sed -e "s,${D}depobjname:,${D}objfile:,g" ${D}depfile >${D}{depsdir}/${D}{objfilebase}.d
907 rm -f ${D}depfile
908 else
909 # "g++ -MMD -o fooobj.o foosrc.cpp" produces fooobj.d
910 depfile=\`echo "${D}objfile" | sed -e 's/\\..*${D}/.d/g'\`
911 if test ! -f ${D}depfile ; then
912 # "cxx -MD -o fooobj.o foosrc.cpp" creates fooobj.o.d (Compaq C++)
913 depfile="${D}objfile.d"
914 fi
915 if test -f ${D}depfile ; then
916 sed -e "\\,^${D}objfile,!s,${D}depobjname:,${D}objfile:,g" ${D}depfile >${D}{depsdir}/${D}{objfilebase}.d
917 rm -f ${D}depfile
918 fi
919 fi
920 exit 0
921
922 elif test ${D}DEPSMODE = mwcc ; then
923 ${D}* || exit ${D}?
924 # Run mwcc again with -MM and redirect into the dep file we want
925 # NOTE: We can't use shift here because we need ${D}* to be valid
926 prevarg=
927 for arg in ${D}* ; do
928 if test "${D}prevarg" = "-o"; then
929 objfile=${D}arg
930 else
931 case "${D}arg" in
932 -* )
933 ;;
934 * )
935 srcfile=${D}arg
936 ;;
937 esac
938 fi
939 prevarg="${D}arg"
940 done
941
942 objfilebase=\`basename ${D}objfile\`
943 builddir=\`dirname ${D}objfile\`
944 depsdir=${D}builddir/${D}DEPSDIRBASE
945 mkdir -p ${D}depsdir
946
947 ${D}* ${D}DEPSFLAG >${D}{depsdir}/${D}{objfilebase}.d
948 exit 0
949
950 elif test ${D}DEPSMODE = unixcc; then
951 ${D}* || exit ${D}?
952 # Run compiler again with deps flag and redirect into the dep file.
953 # It doesn't work if the '-o FILE' option is used, but without it the
954 # dependency file will contain the wrong name for the object. So it is
955 # removed from the command line, and the dep file is fixed with sed.
956 cmd=""
957 while test ${D}# -gt 0; do
958 case "${D}1" in
959 -o )
960 shift
961 objfile=${D}1
962 ;;
963 * )
964 eval arg${D}#=\\${D}1
965 cmd="${D}cmd \\${D}arg${D}#"
966 ;;
967 esac
968 shift
969 done
970
971 objfilebase=\`basename ${D}objfile\`
972 builddir=\`dirname ${D}objfile\`
973 depsdir=${D}builddir/${D}DEPSDIRBASE
974 mkdir -p ${D}depsdir
975
976 eval "${D}cmd ${D}DEPSFLAG" | sed "s|.*:|${D}objfile:|" >${D}{DEPSDIR}/${D}{objfilebase}.d
977 exit 0
978
979 else
980 ${D}*
981 exit ${D}?
982 fi
983 EOF
984 dnl ===================== bk-deps ends here =====================
985 ])
986
987 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_SHARED_LD_SH],
988 [
989 dnl ===================== shared-ld-sh begins here =====================
990 dnl (Created by merge-scripts.py from shared-ld-sh
991 dnl file do not edit here!)
992 D='$'
993 cat <<EOF >shared-ld-sh
994 #!/bin/sh
995 #-----------------------------------------------------------------------------
996 #-- Name: distrib/mac/shared-ld-sh
997 #-- Purpose: Link a mach-o dynamic shared library for Darwin / Mac OS X
998 #-- Author: Gilles Depeyrot
999 #-- Copyright: (c) 2002 Gilles Depeyrot
1000 #-- Licence: any use permitted
1001 #-----------------------------------------------------------------------------
1002
1003 verbose=0
1004 args=""
1005 objects=""
1006 linking_flag="-dynamiclib"
1007 ldargs="-r -keep_private_externs -nostdlib"
1008
1009 if test "x${D}CXX" = "x"; then
1010 CXX="c++"
1011 fi
1012
1013 while test ${D}# -gt 0; do
1014 case ${D}1 in
1015
1016 -v)
1017 verbose=1
1018 ;;
1019
1020 -o|-compatibility_version|-current_version|-framework|-undefined|-install_name)
1021 # collect these options and values
1022 args="${D}{args} ${D}1 ${D}2"
1023 shift
1024 ;;
1025
1026 -arch|-isysroot)
1027 # collect these options and values
1028 ldargs="${D}{ldargs} ${D}1 ${D}2"
1029 shift
1030 ;;
1031
1032 -s|-Wl,*)
1033 # collect these load args
1034 ldargs="${D}{ldargs} ${D}1"
1035 ;;
1036
1037 -l*|-L*|-flat_namespace|-headerpad_max_install_names)
1038 # collect these options
1039 args="${D}{args} ${D}1"
1040 ;;
1041
1042 -dynamiclib|-bundle)
1043 linking_flag="${D}1"
1044 ;;
1045
1046 -*)
1047 echo "shared-ld: unhandled option '${D}1'"
1048 exit 1
1049 ;;
1050
1051 *.o | *.a | *.dylib)
1052 # collect object files
1053 objects="${D}{objects} ${D}1"
1054 ;;
1055
1056 *)
1057 echo "shared-ld: unhandled argument '${D}1'"
1058 exit 1
1059 ;;
1060
1061 esac
1062 shift
1063 done
1064
1065 status=0
1066
1067 #
1068 # Link one module containing all the others
1069 #
1070 if test ${D}{verbose} = 1; then
1071 echo "${D}CXX ${D}{ldargs} ${D}{objects} -o master.${D}${D}.o"
1072 fi
1073 ${D}CXX ${D}{ldargs} ${D}{objects} -o master.${D}${D}.o
1074 status=${D}?
1075
1076 #
1077 # Link the shared library from the single module created, but only if the
1078 # previous command didn't fail:
1079 #
1080 if test ${D}{status} = 0; then
1081 if test ${D}{verbose} = 1; then
1082 echo "${D}CXX ${D}{linking_flag} master.${D}${D}.o ${D}{args}"
1083 fi
1084 ${D}CXX ${D}{linking_flag} master.${D}${D}.o ${D}{args}
1085 status=${D}?
1086 fi
1087
1088 #
1089 # Remove intermediate module
1090 #
1091 rm -f master.${D}${D}.o
1092
1093 exit ${D}status
1094 EOF
1095 dnl ===================== shared-ld-sh ends here =====================
1096 ])
1097
1098 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_BK_MAKE_PCH],
1099 [
1100 dnl ===================== bk-make-pch begins here =====================
1101 dnl (Created by merge-scripts.py from bk-make-pch
1102 dnl file do not edit here!)
1103 D='$'
1104 cat <<EOF >bk-make-pch
1105 #!/bin/sh
1106
1107 # This script is part of Bakefile (http://www.bakefile.org) autoconf
1108 # script. It is used to generated precompiled headers.
1109 #
1110 # Permission is given to use this file in any way.
1111
1112 outfile="${D}{1}"
1113 header="${D}{2}"
1114 shift
1115 shift
1116
1117 builddir=\`echo ${D}outfile | sed -e 's,/\\.pch/.*${D},,g'\`
1118
1119 compiler=""
1120 headerfile=""
1121
1122 while test ${D}{#} -gt 0; do
1123 add_to_cmdline=1
1124 case "${D}{1}" in
1125 -I* )
1126 incdir=\`echo ${D}{1} | sed -e 's/-I\\(.*\\)/\\1/g'\`
1127 if test "x${D}{headerfile}" = "x" -a -f "${D}{incdir}/${D}{header}" ; then
1128 headerfile="${D}{incdir}/${D}{header}"
1129 fi
1130 ;;
1131 -use-pch|-use_pch )
1132 shift
1133 add_to_cmdline=0
1134 ;;
1135 esac
1136 if test ${D}add_to_cmdline = 1 ; then
1137 compiler="${D}{compiler} ${D}{1}"
1138 fi
1139 shift
1140 done
1141
1142 if test "x${D}{headerfile}" = "x" ; then
1143 echo "error: can't find header ${D}{header} in include paths" >&2
1144 else
1145 if test -f ${D}{outfile} ; then
1146 rm -f ${D}{outfile}
1147 else
1148 mkdir -p \`dirname ${D}{outfile}\`
1149 fi
1150 depsfile="${D}{builddir}/.deps/\`echo ${D}{outfile} | tr '/.' '__'\`.d"
1151 mkdir -p ${D}{builddir}/.deps
1152 if test "x${GCC_PCH}" = "x1" ; then
1153 # can do this because gcc is >= 3.4:
1154 ${D}{compiler} -o ${D}{outfile} -MMD -MF "${D}{depsfile}" "${D}{headerfile}"
1155 elif test "x${ICC_PCH}" = "x1" ; then
1156 filename=pch_gen-${D}${D}
1157 file=${D}{filename}.c
1158 dfile=${D}{filename}.d
1159 cat > ${D}file <<EOT
1160 #include "${D}header"
1161 EOT
1162 # using -MF icc complains about differing command lines in creation/use
1163 ${D}compiler -c -create_pch ${D}outfile -MMD ${D}file && \\
1164 sed -e "s,^.*:,${D}outfile:," -e "s, ${D}file,," < ${D}dfile > ${D}depsfile && \\
1165 rm -f ${D}file ${D}dfile ${D}{filename}.o
1166 fi
1167 exit ${D}{?}
1168 fi
1169 EOF
1170 dnl ===================== bk-make-pch ends here =====================
1171 ])