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