]> git.saurik.com Git - wxWidgets.git/blob - build/aclocal/bakefile.m4
94b8c196c0c7d090d54fc6f9eb80c7545a7c74b8
[wxWidgets.git] / build / aclocal / bakefile.m4
1 dnl ---------------------------------------------------------------------------
2 dnl Support macros for makefiles generated by BAKEFILE.
3 dnl ---------------------------------------------------------------------------
4
5 dnl Lots of compiler & linker detection code contained here was taken from
6 dnl wxWindows configure.in script (see http://www.wxwindows.org)
7
8
9
10 dnl ---------------------------------------------------------------------------
11 dnl AC_BAKEFILE_GNUMAKE
12 dnl
13 dnl Detects GNU make
14 dnl ---------------------------------------------------------------------------
15
16 AC_DEFUN([AC_BAKEFILE_GNUMAKE],
17 [
18 dnl does make support "-include" (only GNU make does AFAIK)?
19 AC_CACHE_CHECK([if make is GNU make], bakefile_cv_prog_makeisgnu,
20 [
21 if ( ${SHELL-sh} -c "${MAKE-make} --version" 2> /dev/null |
22 egrep -s GNU > /dev/null); then
23 bakefile_cv_prog_makeisgnu="yes"
24 else
25 bakefile_cv_prog_makeisgnu="no"
26 fi
27 ])
28
29 if test "x$bakefile_cv_prog_makeisgnu" = "xyes"; then
30 IF_GNU_MAKE=""
31 else
32 IF_GNU_MAKE="#"
33 fi
34 AC_SUBST(IF_GNU_MAKE)
35 ])
36
37 dnl ---------------------------------------------------------------------------
38 dnl AC_BAKEFILE_PLATFORM
39 dnl
40 dnl Detects platform and sets PLATFORM_XXX variables accordingly
41 dnl ---------------------------------------------------------------------------
42
43 AC_DEFUN([AC_BAKEFILE_PLATFORM],
44 [
45 PLATFORM_UNIX=0
46 PLATFORM_WIN32=0
47 PLATFORM_MSDOS=0
48 PLATFORM_MAC=0
49 PLATFORM_MACOS=0
50 PLATFORM_MACOSX=0
51 PLATFORM_OS2=0
52 PLATFORM_BEOS=0
53
54 if test "x$BAKEFILE_FORCE_PLATFORM" = "x"; then
55 case "${BAKEFILE_HOST}" in
56 *-*-mingw32* )
57 PLATFORM_WIN32=1
58 ;;
59 *-pc-msdosdjgpp )
60 PLATFORM_MSDOS=1
61 ;;
62 *-pc-os2_emx | *-pc-os2-emx )
63 PLATFORM_OS2=1
64 ;;
65 *-*-darwin* )
66 PLATFORM_MAC=1
67 PLATFORM_MACOSX=1
68 ;;
69 *-*-beos* )
70 PLATFORM_BEOS=1
71 ;;
72 powerpc-apple-macos* )
73 PLATFORM_MAC=1
74 PLATFORM_MACOS=1
75 ;;
76 * )
77 PLATFORM_UNIX=1
78 ;;
79 esac
80 else
81 case "$BAKEFILE_FORCE_PLATFORM" in
82 win32 )
83 PLATFORM_WIN32=1
84 ;;
85 msdos )
86 PLATFORM_MSDOS=1
87 ;;
88 os2 )
89 PLATFORM_OS2=1
90 ;;
91 darwin )
92 PLATFORM_MAC=1
93 PLATFORM_MACOSX=1
94 ;;
95 unix )
96 PLATFORM_UNIX=1
97 ;;
98 beos )
99 PLATFORM_BEOS=1
100 ;;
101 * )
102 AC_MSG_ERROR([Unknown platform: $BAKEFILE_FORCE_PLATFORM])
103 ;;
104 esac
105 fi
106
107 AC_SUBST(PLATFORM_UNIX)
108 AC_SUBST(PLATFORM_WIN32)
109 AC_SUBST(PLATFORM_MSDOS)
110 AC_SUBST(PLATFORM_MAC)
111 AC_SUBST(PLATFORM_MACOS)
112 AC_SUBST(PLATFORM_MACOSX)
113 AC_SUBST(PLATFORM_OS2)
114 AC_SUBST(PLATFORM_BEOS)
115 ])
116
117
118 dnl ---------------------------------------------------------------------------
119 dnl AC_BAKEFILE_PLATFORM_SPECIFICS
120 dnl
121 dnl Sets misc platform-specific settings
122 dnl ---------------------------------------------------------------------------
123
124 AC_DEFUN([AC_BAKEFILE_PLATFORM_SPECIFICS],
125 [
126 AC_ARG_ENABLE([omf], AS_HELP_STRING([--enable-omf],
127 [use OMF object format (OS/2)]),
128 [bk_os2_use_omf="$enableval"])
129
130 case "${BAKEFILE_HOST}" in
131 *-*-darwin* )
132 dnl For Unix to MacOS X porting instructions, see:
133 dnl http://fink.sourceforge.net/doc/porting/porting.html
134 if test "x$GCC" = "xyes"; then
135 CFLAGS="$CFLAGS -fno-common"
136 CXXFLAGS="$CXXFLAGS -fno-common"
137 fi
138 if test "x$XLCC" = "xyes"; then
139 CFLAGS="$CFLAGS -qnocommon"
140 CXXFLAGS="$CXXFLAGS -qnocommon"
141 fi
142 ;;
143
144 *-pc-os2_emx | *-pc-os2-emx )
145 if test "x$bk_os2_use_omf" = "xyes" ; then
146 AR=emxomfar
147 RANLIB=:
148 LDFLAGS="-Zomf $LDFLAGS"
149 CFLAGS="-Zomf $CFLAGS"
150 CXXFLAGS="-Zomf $CXXFLAGS"
151 OS2_LIBEXT="lib"
152 else
153 OS2_LIBEXT="a"
154 fi
155 ;;
156
157 i*86-*-beos* )
158 LDFLAGS="-L/boot/develop/lib/x86 $LDFLAGS"
159 ;;
160 esac
161 ])
162
163 dnl ---------------------------------------------------------------------------
164 dnl AC_BAKEFILE_SUFFIXES
165 dnl
166 dnl Detects shared various suffixes for shared libraries, libraries, programs,
167 dnl plugins etc.
168 dnl ---------------------------------------------------------------------------
169
170 AC_DEFUN([AC_BAKEFILE_SUFFIXES],
171 [
172 SO_SUFFIX="so"
173 SO_SUFFIX_MODULE="so"
174 EXEEXT=""
175 LIBPREFIX="lib"
176 LIBEXT=".a"
177 DLLPREFIX="lib"
178 DLLPREFIX_MODULE=""
179 DLLIMP_SUFFIX=""
180 dlldir="$libdir"
181
182 case "${BAKEFILE_HOST}" in
183 *-hp-hpux* )
184 SO_SUFFIX="sl"
185 SO_SUFFIX_MODULE="sl"
186 ;;
187 *-*-aix* )
188 dnl quoting from
189 dnl http://www-1.ibm.com/servers/esdd/articles/gnu.html:
190 dnl Both archive libraries and shared libraries on AIX have an
191 dnl .a extension. This will explain why you can't link with an
192 dnl .so and why it works with the name changed to .a.
193 SO_SUFFIX="a"
194 SO_SUFFIX_MODULE="a"
195 ;;
196 *-*-cygwin* )
197 SO_SUFFIX="dll"
198 SO_SUFFIX_MODULE="dll"
199 DLLIMP_SUFFIX="dll.a"
200 EXEEXT=".exe"
201 DLLPREFIX="cyg"
202 dlldir="$bindir"
203 ;;
204 *-*-mingw32* )
205 SO_SUFFIX="dll"
206 SO_SUFFIX_MODULE="dll"
207 DLLIMP_SUFFIX="dll.a"
208 EXEEXT=".exe"
209 DLLPREFIX=""
210 dlldir="$bindir"
211 ;;
212 *-pc-msdosdjgpp )
213 EXEEXT=".exe"
214 DLLPREFIX=""
215 dlldir="$bindir"
216 ;;
217 *-pc-os2_emx | *-pc-os2-emx )
218 SO_SUFFIX="dll"
219 SO_SUFFIX_MODULE="dll"
220 DLLIMP_SUFFIX=$OS2_LIBEXT
221 EXEEXT=".exe"
222 DLLPREFIX=""
223 LIBPREFIX=""
224 LIBEXT=".$OS2_LIBEXT"
225 dlldir="$bindir"
226 ;;
227 *-*-darwin* )
228 SO_SUFFIX="dylib"
229 SO_SUFFIX_MODULE="bundle"
230 ;;
231 esac
232
233 if test "x$DLLIMP_SUFFIX" = "x" ; then
234 DLLIMP_SUFFIX="$SO_SUFFIX"
235 fi
236
237 AC_SUBST(SO_SUFFIX)
238 AC_SUBST(SO_SUFFIX_MODULE)
239 AC_SUBST(DLLIMP_SUFFIX)
240 AC_SUBST(EXEEXT)
241 AC_SUBST(LIBPREFIX)
242 AC_SUBST(LIBEXT)
243 AC_SUBST(DLLPREFIX)
244 AC_SUBST(DLLPREFIX_MODULE)
245 AC_SUBST(dlldir)
246 ])
247
248
249 dnl ---------------------------------------------------------------------------
250 dnl AC_BAKEFILE_SHARED_LD
251 dnl
252 dnl Detects command for making shared libraries, substitutes SHARED_LD_CC
253 dnl and SHARED_LD_CXX.
254 dnl ---------------------------------------------------------------------------
255
256 AC_DEFUN([AC_BAKEFILE_SHARED_LD],
257 [
258 dnl the extra compiler flags needed for compilation of shared library
259 PIC_FLAG=""
260 if test "x$GCC" = "xyes"; then
261 dnl the switch for gcc is the same under all platforms
262 PIC_FLAG="-fPIC"
263 fi
264
265 dnl Defaults for GCC and ELF .so shared libs:
266 SHARED_LD_CC="\$(CC) -shared ${PIC_FLAG} -o"
267 SHARED_LD_CXX="\$(CXX) -shared ${PIC_FLAG} -o"
268 WINDOWS_IMPLIB=0
269
270 case "${BAKEFILE_HOST}" in
271 *-hp-hpux* )
272 dnl default settings are good for gcc but not for the native HP-UX
273 if test "x$GCC" != "xyes"; then
274 dnl no idea why it wants it, but it does
275 LDFLAGS="$LDFLAGS -L/usr/lib"
276
277 SHARED_LD_CC="${CC} -b -o"
278 SHARED_LD_CXX="${CXX} -b -o"
279 PIC_FLAG="+Z"
280 fi
281 ;;
282
283 *-*-linux* )
284 if test "x$GCC" != "xyes"; then
285 AC_CACHE_CHECK([for Intel compiler], bakefile_cv_prog_icc,
286 [
287 AC_TRY_COMPILE([],
288 [
289 #ifndef __INTEL_COMPILER
290 #error Not icc
291 #endif
292 ],
293 bakefile_cv_prog_icc=yes,
294 bakefile_cv_prog_icc=no
295 )
296 ])
297 if test "$bakefile_cv_prog_icc" = "yes"; then
298 PIC_FLAG="-KPIC"
299 fi
300 fi
301 ;;
302
303 *-*-solaris2* )
304 if test "x$GCC" != xyes ; then
305 SHARED_LD_CC="${CC} -G -o"
306 SHARED_LD_CXX="${CXX} -G -o"
307 PIC_FLAG="-KPIC"
308 fi
309 ;;
310
311 *-*-darwin* )
312 dnl Most apps benefit from being fully binded (its faster and static
313 dnl variables initialized at startup work).
314 dnl This can be done either with the exe linker flag -Wl,-bind_at_load
315 dnl or with a double stage link in order to create a single module
316 dnl "-init _wxWindowsDylibInit" not useful with lazy linking solved
317
318 dnl If using newer dev tools then there is a -single_module flag that
319 dnl we can use to do this, otherwise we'll need to use a helper
320 dnl script. Check the version of gcc to see which way we can go:
321 AC_CACHE_CHECK([for gcc 3.1 or later], bakefile_cv_gcc31, [
322 AC_TRY_COMPILE([],
323 [
324 #if (__GNUC__ < 3) || \
325 ((__GNUC__ == 3) && (__GNUC_MINOR__ < 1))
326 #error old gcc
327 #endif
328 ],
329 [
330 bakefile_cv_gcc31=yes
331 ],
332 [
333 bakefile_cv_gcc31=no
334 ]
335 )
336 ])
337 if test "$bakefile_cv_gcc31" = "no"; then
338 AC_BAKEFILE_CREATE_FILE_SHARED_LD_SH
339 chmod +x shared-ld-sh
340
341 dnl Use the shared-ld-sh helper script
342 SHARED_LD_CC="`pwd`/shared-ld-sh -dynamiclib -headerpad_max_install_names -o"
343 SHARED_LD_MODULE_CC="`pwd`/shared-ld-sh -bundle -headerpad_max_install_names -o"
344 SHARED_LD_CXX="$SHARED_LD_CC"
345 SHARED_LD_MODULE_CXX="$SHARED_LD_MODULE_CC"
346 else
347 dnl Use the -single_module flag and let the linker do it for us
348 SHARED_LD_CC="\${CC} -dynamiclib -single_module -headerpad_max_install_names -o"
349 SHARED_LD_MODULE_CC="\${CC} -bundle -single_module -headerpad_max_install_names -o"
350 SHARED_LD_CXX="\${CXX} -dynamiclib -single_module -headerpad_max_install_names -o"
351 SHARED_LD_MODULE_CXX="\${CXX} -bundle -single_module -headerpad_max_install_names -o"
352 fi
353
354 if test "x$GCC" == "xyes"; then
355 PIC_FLAG="-dynamic -fPIC"
356 fi
357 if test "x$XLCC" = "xyes"; then
358 PIC_FLAG="-dynamic -DPIC"
359 fi
360 ;;
361
362 *-*-aix* )
363 if test "x$GCC" = "xyes"; then
364 dnl at least gcc 2.95 warns that -fPIC is ignored when
365 dnl compiling each and every file under AIX which is annoying,
366 dnl so don't use it there (it's useless as AIX runs on
367 dnl position-independent architectures only anyhow)
368 PIC_FLAG=""
369
370 dnl -bexpfull is needed by AIX linker to export all symbols (by
371 dnl default it doesn't export any and even with -bexpall it
372 dnl doesn't export all C++ support symbols, e.g. vtable
373 dnl pointers) but it's only available starting from 5.1 (with
374 dnl maintenance pack 2, whatever this is), see
375 dnl http://www-128.ibm.com/developerworks/eserver/articles/gnu.html
376 case "${BAKEFILE_HOST}" in
377 *-*-aix5* )
378 LD_EXPFULL="-Wl,-bexpfull"
379 ;;
380 esac
381
382 SHARED_LD_CC="\$(CC) -shared $LD_EXPFULL -o"
383 SHARED_LD_CXX="\$(CXX) -shared $LD_EXPFULL -o"
384 else
385 dnl FIXME: makeC++SharedLib is obsolete, what should we do for
386 dnl recent AIX versions?
387 AC_CHECK_PROG(AIX_CXX_LD, makeC++SharedLib,
388 makeC++SharedLib, /usr/lpp/xlC/bin/makeC++SharedLib)
389 SHARED_LD_CC="$AIX_CC_LD -p 0 -o"
390 SHARED_LD_CXX="$AIX_CXX_LD -p 0 -o"
391 fi
392 ;;
393
394 *-*-beos* )
395 dnl can't use gcc under BeOS for shared library creation because it
396 dnl complains about missing 'main'
397 SHARED_LD_CC="${LD} -nostart -o"
398 SHARED_LD_CXX="${LD} -nostart -o"
399 ;;
400
401 *-*-irix* )
402 dnl default settings are ok for gcc
403 if test "x$GCC" != "xyes"; then
404 PIC_FLAG="-KPIC"
405 fi
406 ;;
407
408 *-*-cygwin* | *-*-mingw32* )
409 PIC_FLAG=""
410 SHARED_LD_CC="\$(CC) -shared -o"
411 SHARED_LD_CXX="\$(CXX) -shared -o"
412 WINDOWS_IMPLIB=1
413 ;;
414
415 *-pc-os2_emx | *-pc-os2-emx )
416 SHARED_LD_CC="`pwd`/dllar.sh -libf INITINSTANCE -libf TERMINSTANCE -o"
417 SHARED_LD_CXX="`pwd`/dllar.sh -libf INITINSTANCE -libf TERMINSTANCE -o"
418 PIC_FLAG=""
419 AC_BAKEFILE_CREATE_FILE_DLLAR_SH
420 chmod +x dllar.sh
421 ;;
422
423 powerpc-apple-macos* | \
424 *-*-freebsd* | *-*-openbsd* | *-*-netbsd* | *-*-k*bsd*-gnu | \
425 *-*-sunos4* | \
426 *-*-osf* | \
427 *-*-dgux5* | \
428 *-*-sysv5* | \
429 *-pc-msdosdjgpp )
430 dnl defaults are ok
431 ;;
432
433 *)
434 AC_MSG_ERROR(unknown system type $BAKEFILE_HOST.)
435 esac
436
437 if test "x$PIC_FLAG" != "x" ; then
438 PIC_FLAG="$PIC_FLAG -DPIC"
439 fi
440
441 if test "x$SHARED_LD_MODULE_CC" = "x" ; then
442 SHARED_LD_MODULE_CC="$SHARED_LD_CC"
443 fi
444 if test "x$SHARED_LD_MODULE_CXX" = "x" ; then
445 SHARED_LD_MODULE_CXX="$SHARED_LD_CXX"
446 fi
447
448 AC_SUBST(SHARED_LD_CC)
449 AC_SUBST(SHARED_LD_CXX)
450 AC_SUBST(SHARED_LD_MODULE_CC)
451 AC_SUBST(SHARED_LD_MODULE_CXX)
452 AC_SUBST(PIC_FLAG)
453 AC_SUBST(WINDOWS_IMPLIB)
454 ])
455
456
457 dnl ---------------------------------------------------------------------------
458 dnl AC_BAKEFILE_SHARED_VERSIONS
459 dnl
460 dnl Detects linker options for attaching versions (sonames) to shared libs.
461 dnl ---------------------------------------------------------------------------
462
463 AC_DEFUN([AC_BAKEFILE_SHARED_VERSIONS],
464 [
465 USE_SOVERSION=0
466 USE_SOVERLINUX=0
467 USE_SOVERSOLARIS=0
468 USE_SOVERCYGWIN=0
469 USE_SOSYMLINKS=0
470 USE_MACVERSION=0
471 SONAME_FLAG=
472
473 case "${BAKEFILE_HOST}" in
474 *-*-linux* | *-*-freebsd* | *-*-k*bsd*-gnu )
475 SONAME_FLAG="-Wl,-soname,"
476 USE_SOVERSION=1
477 USE_SOVERLINUX=1
478 USE_SOSYMLINKS=1
479 ;;
480
481 *-*-solaris2* )
482 SONAME_FLAG="-h "
483 USE_SOVERSION=1
484 USE_SOVERSOLARIS=1
485 USE_SOSYMLINKS=1
486 ;;
487
488 *-*-darwin* )
489 USE_MACVERSION=1
490 USE_SOVERSION=1
491 USE_SOSYMLINKS=1
492 ;;
493
494 *-*-cygwin* )
495 USE_SOVERSION=1
496 USE_SOVERCYGWIN=1
497 ;;
498 esac
499
500 AC_SUBST(USE_SOVERSION)
501 AC_SUBST(USE_SOVERLINUX)
502 AC_SUBST(USE_SOVERSOLARIS)
503 AC_SUBST(USE_SOVERCYGWIN)
504 AC_SUBST(USE_MACVERSION)
505 AC_SUBST(USE_SOSYMLINKS)
506 AC_SUBST(SONAME_FLAG)
507 ])
508
509
510 dnl ---------------------------------------------------------------------------
511 dnl AC_BAKEFILE_DEPS
512 dnl
513 dnl Detects available C/C++ dependency tracking options
514 dnl ---------------------------------------------------------------------------
515
516 AC_DEFUN([AC_BAKEFILE_DEPS],
517 [
518 AC_MSG_CHECKING([for dependency tracking method])
519 DEPS_TRACKING=1
520
521 if test "x$GCC" = "xyes"; then
522 DEPSMODE=gcc
523 case "${BAKEFILE_HOST}" in
524 *-*-darwin* )
525 dnl -cpp-precomp (the default) conflicts with -MMD option
526 dnl used by bk-deps (see also http://developer.apple.com/documentation/Darwin/Conceptual/PortingUnix/compiling/chapter_4_section_3.html)
527 DEPSFLAG="-no-cpp-precomp -MMD"
528 ;;
529 * )
530 DEPSFLAG="-MMD"
531 ;;
532 esac
533 AC_MSG_RESULT([gcc])
534 elif test "x$MWCC" = "xyes"; then
535 DEPSMODE=mwcc
536 DEPSFLAG="-MM"
537 AC_MSG_RESULT([mwcc])
538 elif test "x$SUNCC" = "xyes"; then
539 DEPSMODE=unixcc
540 DEPSFLAG="-xM1"
541 AC_MSG_RESULT([Sun cc])
542 elif test "x$SGICC" = "xyes"; then
543 DEPSMODE=unixcc
544 DEPSFLAG="-M"
545 AC_MSG_RESULT([SGI cc])
546 elif test "x$HPCC" = "xyes"; then
547 DEPSMODE=unixcc
548 DEPSFLAG="+make"
549 AC_MSG_RESULT([HP cc])
550 elif test "x$COMPAQCC" = "xyes"; then
551 DEPSMODE=gcc
552 DEPSFLAG="-MD"
553 AC_MSG_RESULT([Compaq cc])
554 else
555 DEPS_TRACKING=0
556 AC_MSG_RESULT([none])
557 fi
558
559 if test $DEPS_TRACKING = 1 ; then
560 AC_BAKEFILE_CREATE_FILE_BK_DEPS
561 chmod +x bk-deps
562 fi
563
564 AC_SUBST(DEPS_TRACKING)
565 ])
566
567 dnl ---------------------------------------------------------------------------
568 dnl AC_BAKEFILE_CHECK_BASIC_STUFF
569 dnl
570 dnl Checks for presence of basic programs, such as C and C++ compiler, "ranlib"
571 dnl or "install"
572 dnl ---------------------------------------------------------------------------
573
574 AC_DEFUN([AC_BAKEFILE_CHECK_BASIC_STUFF],
575 [
576 AC_PROG_RANLIB
577 AC_PROG_INSTALL
578 AC_PROG_LN_S
579
580 AC_PROG_MAKE_SET
581 AC_SUBST(MAKE_SET)
582
583 AC_CHECK_TOOL(AR, ar, ar)
584 AC_CHECK_TOOL(STRIP, strip, :)
585 AC_CHECK_TOOL(NM, nm, :)
586
587 case ${BAKEFILE_HOST} in
588 *-hp-hpux* )
589 dnl HP-UX install doesn't handle the "-d" switch so don't
590 dnl use it there
591 INSTALL_DIR="mkdir -p"
592 ;;
593 *) INSTALL_DIR="$INSTALL -d"
594 ;;
595 esac
596 AC_SUBST(INSTALL_DIR)
597
598 LDFLAGS_GUI=
599 case ${BAKEFILE_HOST} in
600 *-*-cygwin* | *-*-mingw32* )
601 LDFLAGS_GUI="-mwindows"
602 esac
603 AC_SUBST(LDFLAGS_GUI)
604 ])
605
606
607 dnl ---------------------------------------------------------------------------
608 dnl AC_BAKEFILE_RES_COMPILERS
609 dnl
610 dnl Checks for presence of resource compilers for win32 or mac
611 dnl ---------------------------------------------------------------------------
612
613 AC_DEFUN([AC_BAKEFILE_RES_COMPILERS],
614 [
615 RESCOMP=
616 SETFILE=
617
618 case ${BAKEFILE_HOST} in
619 *-*-cygwin* | *-*-mingw32* )
620 dnl Check for win32 resources compiler:
621 if test "$build" != "$host" ; then
622 RESCOMP=$host_alias-windres
623 else
624 AC_CHECK_PROG(RESCOMP, windres, windres, windres)
625 fi
626 ;;
627
628 *-*-darwin* | powerpc-apple-macos* )
629 AC_CHECK_PROG(RESCOMP, Rez, Rez, /Developer/Tools/Rez)
630 AC_CHECK_PROG(SETFILE, SetFile, SetFile, /Developer/Tools/SetFile)
631 ;;
632 esac
633
634 AC_SUBST(RESCOMP)
635 AC_SUBST(SETFILE)
636 ])
637
638 dnl ---------------------------------------------------------------------------
639 dnl AC_BAKEFILE_PRECOMP_HEADERS
640 dnl
641 dnl Check for precompiled headers support (GCC >= 3.4)
642 dnl ---------------------------------------------------------------------------
643
644 AC_DEFUN([AC_BAKEFILE_PRECOMP_HEADERS],
645 [
646
647 AC_ARG_ENABLE([precomp-headers],
648 AS_HELP_STRING([--disable-precomp-headers],
649 [don't use precompiled headers even if compiler can]),
650 [bk_use_pch="$enableval"])
651
652 GCC_PCH=0
653
654 if test "x$bk_use_pch" = "x" -o "x$bk_use_pch" = "xyes" ; then
655 if test "x$GCC" = "xyes"; then
656 dnl test if we have gcc-3.4:
657 AC_MSG_CHECKING([if the compiler supports precompiled headers])
658 AC_TRY_COMPILE([],
659 [
660 #if !defined(__GNUC__) || !defined(__GNUC_MINOR__)
661 #error "no pch support"
662 #endif
663 #if (__GNUC__ < 3)
664 #error "no pch support"
665 #endif
666 #if (__GNUC__ == 3) && \
667 ((!defined(__APPLE_CC__) && (__GNUC_MINOR__ < 4)) || \
668 ( defined(__APPLE_CC__) && (__GNUC_MINOR__ < 3)))
669 #error "no pch support"
670 #endif
671 ],
672 [
673 AC_MSG_RESULT([yes])
674 GCC_PCH=1
675 ],
676 [
677 AC_MSG_RESULT([no])
678 ])
679 if test $GCC_PCH = 1 ; then
680 AC_BAKEFILE_CREATE_FILE_BK_MAKE_PCH
681 chmod +x bk-make-pch
682 fi
683 fi
684 fi
685
686 AC_SUBST(GCC_PCH)
687 ])
688
689
690
691 dnl ---------------------------------------------------------------------------
692 dnl AC_BAKEFILE([autoconf_inc.m4 inclusion])
693 dnl
694 dnl To be used in configure.in of any project using Bakefile-generated mks
695 dnl
696 dnl Behaviour can be modified by setting following variables:
697 dnl BAKEFILE_CHECK_BASICS set to "no" if you don't want bakefile to
698 dnl to perform check for basic tools like ranlib
699 dnl BAKEFILE_HOST set this to override host detection, defaults
700 dnl to ${host}
701 dnl BAKEFILE_FORCE_PLATFORM set to override platform detection
702 dnl
703 dnl Example usage:
704 dnl
705 dnl AC_BAKEFILE([FOO(autoconf_inc.m4)])
706 dnl
707 dnl (replace FOO with m4_include above, aclocal would die otherwise)
708 dnl (yes, it's ugly, but thanks to a bug in aclocal, it's the only thing
709 dnl we can do...)
710 dnl ---------------------------------------------------------------------------
711
712 AC_DEFUN([AC_BAKEFILE],
713 [
714 AC_PREREQ(2.58)
715
716 if test "x$BAKEFILE_HOST" = "x"; then
717 BAKEFILE_HOST="${host}"
718 fi
719
720 if test "x$BAKEFILE_CHECK_BASICS" != "xno"; then
721 AC_BAKEFILE_CHECK_BASIC_STUFF
722 fi
723 AC_BAKEFILE_GNUMAKE
724 AC_BAKEFILE_PLATFORM
725 AC_BAKEFILE_PLATFORM_SPECIFICS
726 AC_BAKEFILE_SUFFIXES
727 AC_BAKEFILE_SHARED_LD
728 AC_BAKEFILE_SHARED_VERSIONS
729 AC_BAKEFILE_DEPS
730 AC_BAKEFILE_RES_COMPILERS
731
732 BAKEFILE_BAKEFILE_M4_VERSION="0.1.9"
733
734 dnl includes autoconf_inc.m4:
735 $1
736
737 if test "$BAKEFILE_AUTOCONF_INC_M4_VERSION" = "" ; then
738 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)?])
739 fi
740
741 if test "$BAKEFILE_BAKEFILE_M4_VERSION" != "$BAKEFILE_AUTOCONF_INC_M4_VERSION" ; then
742 AC_MSG_ERROR([Versions of Bakefile used to generate makefiles ($BAKEFILE_AUTOCONF_INC_M4_VERSION) and configure ($BAKEFILE_BAKEFILE_M4_VERSION) do not match.])
743 fi
744 ])
745
746
747 dnl ---------------------------------------------------------------------------
748 dnl Embedded copies of helper scripts follow:
749 dnl ---------------------------------------------------------------------------
750
751 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_DLLAR_SH],
752 [
753 dnl ===================== dllar.sh begins here =====================
754 dnl (Created by merge-scripts.py from dllar.sh
755 dnl file do not edit here!)
756 D='$'
757 cat <<EOF >dllar.sh
758 #!/bin/sh
759 #
760 # dllar - a tool to build both a .dll and an .a file
761 # from a set of object (.o) files for EMX/OS2.
762 #
763 # Written by Andrew Zabolotny, bit@freya.etu.ru
764 # Ported to Unix like shell by Stefan Neis, Stefan.Neis@t-online.de
765 #
766 # This script will accept a set of files on the command line.
767 # All the public symbols from the .o files will be exported into
768 # a .DEF file, then linker will be run (through gcc) against them to
769 # build a shared library consisting of all given .o files. All libraries
770 # (.a) will be first decompressed into component .o files then act as
771 # described above. You can optionally give a description (-d "description")
772 # which will be put into .DLL. To see the list of accepted options (as well
773 # as command-line format) simply run this program without options. The .DLL
774 # is built to be imported by name (there is no guarantee that new versions
775 # of the library you build will have same ordinals for same symbols).
776 #
777 # dllar is free software; you can redistribute it and/or modify
778 # it under the terms of the GNU General Public License as published by
779 # the Free Software Foundation; either version 2, or (at your option)
780 # any later version.
781 #
782 # dllar is distributed in the hope that it will be useful,
783 # but WITHOUT ANY WARRANTY; without even the implied warranty of
784 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
785 # GNU General Public License for more details.
786 #
787 # You should have received a copy of the GNU General Public License
788 # along with dllar; see the file COPYING. If not, write to the Free
789 # Software Foundation, 59 Temple Place - Suite 330, Boston, MA
790 # 02111-1307, USA.
791
792 # To successfuly run this program you will need:
793 # - Current drive should have LFN support (HPFS, ext2, network, etc)
794 # (Sometimes dllar generates filenames which won't fit 8.3 scheme)
795 # - gcc
796 # (used to build the .dll)
797 # - emxexp
798 # (used to create .def file from .o files)
799 # - emximp
800 # (used to create .a file from .def file)
801 # - GNU text utilites (cat, sort, uniq)
802 # used to process emxexp output
803 # - GNU file utilities (mv, rm)
804 # - GNU sed
805 # - lxlite (optional, see flag below)
806 # (used for general .dll cleanup)
807 #
808
809 flag_USE_LXLITE=1;
810
811 #
812 # helper functions
813 # basnam, variant of basename, which does _not_ remove the path, _iff_
814 # second argument (suffix to remove) is given
815 basnam(){
816 case ${D}# in
817 1)
818 echo ${D}1 | sed 's/.*\\///' | sed 's/.*\\\\//'
819 ;;
820 2)
821 echo ${D}1 | sed 's/'${D}2'${D}//'
822 ;;
823 *)
824 echo "error in basnam ${D}*"
825 exit 8
826 ;;
827 esac
828 }
829
830 # Cleanup temporary files and output
831 CleanUp() {
832 cd ${D}curDir
833 for i in ${D}inputFiles ; do
834 case ${D}i in
835 *!)
836 rm -rf \`basnam ${D}i !\`
837 ;;
838 *)
839 ;;
840 esac
841 done
842
843 # Kill result in case of failure as there is just to many stupid make/nmake
844 # things out there which doesn't do this.
845 if @<:@ ${D}# -eq 0 @:>@; then
846 rm -f ${D}arcFile ${D}arcFile2 ${D}defFile ${D}dllFile
847 fi
848 }
849
850 # Print usage and exit script with rc=1.
851 PrintHelp() {
852 echo 'Usage: dllar.sh @<:@-o@<:@utput@:>@ output_file@:>@ @<:@-i@<:@mport@:>@ importlib_name@:>@'
853 echo ' @<:@-name-mangler-script script.sh@:>@'
854 echo ' @<:@-d@<:@escription@:>@ "dll descrption"@:>@ @<:@-cc "CC"@:>@ @<:@-f@<:@lags@:>@ "CFLAGS"@:>@'
855 echo ' @<:@-ord@<:@inals@:>@@:>@ -ex@<:@clude@:>@ "symbol(s)"'
856 echo ' @<:@-libf@<:@lags@:>@ "{INIT|TERM}{GLOBAL|INSTANCE}"@:>@ @<:@-nocrt@<:@dll@:>@@:>@ @<:@-nolxl@<:@ite@:>@@:>@'
857 echo ' @<:@*.o@:>@ @<:@*.a@:>@'
858 echo '*> "output_file" should have no extension.'
859 echo ' If it has the .o, .a or .dll extension, it is automatically removed.'
860 echo ' The import library name is derived from this and is set to "name".a,'
861 echo ' unless overridden by -import'
862 echo '*> "importlib_name" should have no extension.'
863 echo ' If it has the .o, or .a extension, it is automatically removed.'
864 echo ' This name is used as the import library name and may be longer and'
865 echo ' more descriptive than the DLL name which has to follow the old '
866 echo ' 8.3 convention of FAT.'
867 echo '*> "script.sh may be given to override the output_file name by a'
868 echo ' different name. It is mainly useful if the regular make process'
869 echo ' of some package does not take into account OS/2 restriction of'
870 echo ' DLL name lengths. It takes the importlib name as input and is'
871 echo ' supposed to procude a shorter name as output. The script should'
872 echo ' expect to get importlib_name without extension and should produce'
873 echo ' a (max.) 8 letter name without extension.'
874 echo '*> "cc" is used to use another GCC executable. (default: gcc.exe)'
875 echo '*> "flags" should be any set of valid GCC flags. (default: -s -Zcrtdll)'
876 echo ' These flags will be put at the start of GCC command line.'
877 echo '*> -ord@<:@inals@:>@ tells dllar to export entries by ordinals. Be careful.'
878 echo '*> -ex@<:@clude@:>@ defines symbols which will not be exported. You can define'
879 echo ' multiple symbols, for example -ex "myfunc yourfunc _GLOBAL*".'
880 echo ' If the last character of a symbol is "*", all symbols beginning'
881 echo ' with the prefix before "*" will be exclude, (see _GLOBAL* above).'
882 echo '*> -libf@<:@lags@:>@ can be used to add INITGLOBAL/INITINSTANCE and/or'
883 echo ' TERMGLOBAL/TERMINSTANCE flags to the dynamically-linked library.'
884 echo '*> -nocrt@<:@dll@:>@ switch will disable linking the library against emx''s'
885 echo ' C runtime DLLs.'
886 echo '*> -nolxl@<:@ite@:>@ switch will disable running lxlite on the resulting DLL.'
887 echo '*> All other switches (for example -L./ or -lmylib) will be passed'
888 echo ' unchanged to GCC at the end of command line.'
889 echo '*> If you create a DLL from a library and you do not specify -o,'
890 echo ' the basename for DLL and import library will be set to library name,'
891 echo ' the initial library will be renamed to 'name'_s.a (_s for static)'
892 echo ' i.e. "dllar gcc.a" will create gcc.dll and gcc.a, and the initial'
893 echo ' library will be renamed into gcc_s.a.'
894 echo '--------'
895 echo 'Example:'
896 echo ' dllar -o gcc290.dll libgcc.a -d "GNU C runtime library" -ord'
897 echo ' -ex "__main __ctordtor*" -libf "INITINSTANCE TERMINSTANCE"'
898 CleanUp
899 exit 1
900 }
901
902 # Execute a command.
903 # If exit code of the commnad <> 0 CleanUp() is called and we'll exit the script.
904 # @Uses Whatever CleanUp() uses.
905 doCommand() {
906 echo "${D}*"
907 eval ${D}*
908 rcCmd=${D}?
909
910 if @<:@ ${D}rcCmd -ne 0 @:>@; then
911 echo "command failed, exit code="${D}rcCmd
912 CleanUp
913 exit ${D}rcCmd
914 fi
915 }
916
917 # main routine
918 # setup globals
919 cmdLine=${D}*
920 outFile=""
921 outimpFile=""
922 inputFiles=""
923 renameScript=""
924 description=""
925 CC=gcc.exe
926 CFLAGS="-s -Zcrtdll"
927 EXTRA_CFLAGS=""
928 EXPORT_BY_ORDINALS=0
929 exclude_symbols=""
930 library_flags=""
931 curDir=\`pwd\`
932 curDirS=curDir
933 case ${D}curDirS in
934 */)
935 ;;
936 *)
937 curDirS=${D}{curDirS}"/"
938 ;;
939 esac
940 # Parse commandline
941 libsToLink=0
942 omfLinking=0
943 while @<:@ ${D}1 @:>@; do
944 case ${D}1 in
945 -ord*)
946 EXPORT_BY_ORDINALS=1;
947 ;;
948 -o*)
949 shift
950 outFile=${D}1
951 ;;
952 -i*)
953 shift
954 outimpFile=${D}1
955 ;;
956 -name-mangler-script)
957 shift
958 renameScript=${D}1
959 ;;
960 -d*)
961 shift
962 description=${D}1
963 ;;
964 -f*)
965 shift
966 CFLAGS=${D}1
967 ;;
968 -c*)
969 shift
970 CC=${D}1
971 ;;
972 -h*)
973 PrintHelp
974 ;;
975 -ex*)
976 shift
977 exclude_symbols=${D}{exclude_symbols}${D}1" "
978 ;;
979 -libf*)
980 shift
981 library_flags=${D}{library_flags}${D}1" "
982 ;;
983 -nocrt*)
984 CFLAGS="-s"
985 ;;
986 -nolxl*)
987 flag_USE_LXLITE=0
988 ;;
989 -* | /*)
990 case ${D}1 in
991 -L* | -l*)
992 libsToLink=1
993 ;;
994 -Zomf)
995 omfLinking=1
996 ;;
997 *)
998 ;;
999 esac
1000 EXTRA_CFLAGS=${D}{EXTRA_CFLAGS}" "${D}1
1001 ;;
1002 *.dll)
1003 EXTRA_CFLAGS="${D}{EXTRA_CFLAGS} \`basnam ${D}1 .dll\`"
1004 if @<:@ ${D}omfLinking -eq 1 @:>@; then
1005 EXTRA_CFLAGS="${D}{EXTRA_CFLAGS}.lib"
1006 else
1007 EXTRA_CFLAGS="${D}{EXTRA_CFLAGS}.a"
1008 fi
1009 ;;
1010 *)
1011 found=0;
1012 if @<:@ ${D}libsToLink -ne 0 @:>@; then
1013 EXTRA_CFLAGS=${D}{EXTRA_CFLAGS}" "${D}1
1014 else
1015 for file in ${D}1 ; do
1016 if @<:@ -f ${D}file @:>@; then
1017 inputFiles="${D}{inputFiles} ${D}file"
1018 found=1
1019 fi
1020 done
1021 if @<:@ ${D}found -eq 0 @:>@; then
1022 echo "ERROR: No file(s) found: "${D}1
1023 exit 8
1024 fi
1025 fi
1026 ;;
1027 esac
1028 shift
1029 done # iterate cmdline words
1030
1031 #
1032 if @<:@ -z "${D}inputFiles" @:>@; then
1033 echo "dllar: no input files"
1034 PrintHelp
1035 fi
1036
1037 # Now extract all .o files from .a files
1038 newInputFiles=""
1039 for file in ${D}inputFiles ; do
1040 case ${D}file in
1041 *.a | *.lib)
1042 case ${D}file in
1043 *.a)
1044 suffix=".a"
1045 AR="ar"
1046 ;;
1047 *.lib)
1048 suffix=".lib"
1049 AR="emxomfar"
1050 EXTRA_CFLAGS="${D}EXTRA_CFLAGS -Zomf"
1051 ;;
1052 *)
1053 ;;
1054 esac
1055 dirname=\`basnam ${D}file ${D}suffix\`"_%"
1056 mkdir ${D}dirname
1057 if @<:@ ${D}? -ne 0 @:>@; then
1058 echo "Failed to create subdirectory ./${D}dirname"
1059 CleanUp
1060 exit 8;
1061 fi
1062 # Append '!' to indicate archive
1063 newInputFiles="${D}newInputFiles ${D}{dirname}!"
1064 doCommand "cd ${D}dirname; ${D}AR x ../${D}file"
1065 cd ${D}curDir
1066 found=0;
1067 for subfile in ${D}dirname/*.o* ; do
1068 if @<:@ -f ${D}subfile @:>@; then
1069 found=1
1070 if @<:@ -s ${D}subfile @:>@; then
1071 # FIXME: This should be: is file size > 32 byte, _not_ > 0!
1072 newInputFiles="${D}newInputFiles ${D}subfile"
1073 fi
1074 fi
1075 done
1076 if @<:@ ${D}found -eq 0 @:>@; then
1077 echo "WARNING: there are no files in archive \\'${D}file\\'"
1078 fi
1079 ;;
1080 *)
1081 newInputFiles="${D}{newInputFiles} ${D}file"
1082 ;;
1083 esac
1084 done
1085 inputFiles="${D}newInputFiles"
1086
1087 # Output filename(s).
1088 do_backup=0;
1089 if @<:@ -z ${D}outFile @:>@; then
1090 do_backup=1;
1091 set outFile ${D}inputFiles; outFile=${D}2
1092 fi
1093
1094 # If it is an archive, remove the '!' and the '_%' suffixes
1095 case ${D}outFile in
1096 *_%!)
1097 outFile=\`basnam ${D}outFile _%!\`
1098 ;;
1099 *)
1100 ;;
1101 esac
1102 case ${D}outFile in
1103 *.dll)
1104 outFile=\`basnam ${D}outFile .dll\`
1105 ;;
1106 *.DLL)
1107 outFile=\`basnam ${D}outFile .DLL\`
1108 ;;
1109 *.o)
1110 outFile=\`basnam ${D}outFile .o\`
1111 ;;
1112 *.obj)
1113 outFile=\`basnam ${D}outFile .obj\`
1114 ;;
1115 *.a)
1116 outFile=\`basnam ${D}outFile .a\`
1117 ;;
1118 *.lib)
1119 outFile=\`basnam ${D}outFile .lib\`
1120 ;;
1121 *)
1122 ;;
1123 esac
1124 case ${D}outimpFile in
1125 *.a)
1126 outimpFile=\`basnam ${D}outimpFile .a\`
1127 ;;
1128 *.lib)
1129 outimpFile=\`basnam ${D}outimpFile .lib\`
1130 ;;
1131 *)
1132 ;;
1133 esac
1134 if @<:@ -z ${D}outimpFile @:>@; then
1135 outimpFile=${D}outFile
1136 fi
1137 defFile="${D}{outFile}.def"
1138 arcFile="${D}{outimpFile}.a"
1139 arcFile2="${D}{outimpFile}.lib"
1140
1141 #create ${D}dllFile as something matching 8.3 restrictions,
1142 if @<:@ -z ${D}renameScript @:>@ ; then
1143 dllFile="${D}outFile"
1144 else
1145 dllFile=\`${D}renameScript ${D}outimpFile\`
1146 fi
1147
1148 if @<:@ ${D}do_backup -ne 0 @:>@ ; then
1149 if @<:@ -f ${D}arcFile @:>@ ; then
1150 doCommand "mv ${D}arcFile ${D}{outFile}_s.a"
1151 fi
1152 if @<:@ -f ${D}arcFile2 @:>@ ; then
1153 doCommand "mv ${D}arcFile2 ${D}{outFile}_s.lib"
1154 fi
1155 fi
1156
1157 # Extract public symbols from all the object files.
1158 tmpdefFile=${D}{defFile}_%
1159 rm -f ${D}tmpdefFile
1160 for file in ${D}inputFiles ; do
1161 case ${D}file in
1162 *!)
1163 ;;
1164 *)
1165 doCommand "emxexp -u ${D}file >> ${D}tmpdefFile"
1166 ;;
1167 esac
1168 done
1169
1170 # Create the def file.
1171 rm -f ${D}defFile
1172 echo "LIBRARY \`basnam ${D}dllFile\` ${D}library_flags" >> ${D}defFile
1173 dllFile="${D}{dllFile}.dll"
1174 if @<:@ ! -z ${D}description @:>@; then
1175 echo "DESCRIPTION \\"${D}{description}\\"" >> ${D}defFile
1176 fi
1177 echo "EXPORTS" >> ${D}defFile
1178
1179 doCommand "cat ${D}tmpdefFile | sort.exe | uniq.exe > ${D}{tmpdefFile}%"
1180 grep -v "^ *;" < ${D}{tmpdefFile}% | grep -v "^ *${D}" >${D}tmpdefFile
1181
1182 # Checks if the export is ok or not.
1183 for word in ${D}exclude_symbols; do
1184 grep -v ${D}word < ${D}tmpdefFile >${D}{tmpdefFile}%
1185 mv ${D}{tmpdefFile}% ${D}tmpdefFile
1186 done
1187
1188
1189 if @<:@ ${D}EXPORT_BY_ORDINALS -ne 0 @:>@; then
1190 sed "=" < ${D}tmpdefFile | \\
1191 sed '
1192 N
1193 : loop
1194 s/^\\(@<:@0-9@:>@\\+\\)\\(@<:@^;@:>@*\\)\\(;.*\\)\\?/\\2 @\\1 NONAME/
1195 t loop
1196 ' > ${D}{tmpdefFile}%
1197 grep -v "^ *${D}" < ${D}{tmpdefFile}% > ${D}tmpdefFile
1198 else
1199 rm -f ${D}{tmpdefFile}%
1200 fi
1201 cat ${D}tmpdefFile >> ${D}defFile
1202 rm -f ${D}tmpdefFile
1203
1204 # Do linking, create implib, and apply lxlite.
1205 gccCmdl="";
1206 for file in ${D}inputFiles ; do
1207 case ${D}file in
1208 *!)
1209 ;;
1210 *)
1211 gccCmdl="${D}gccCmdl ${D}file"
1212 ;;
1213 esac
1214 done
1215 doCommand "${D}CC ${D}CFLAGS -Zdll -o ${D}dllFile ${D}defFile ${D}gccCmdl ${D}EXTRA_CFLAGS"
1216 touch "${D}{outFile}.dll"
1217
1218 doCommand "emximp -o ${D}arcFile ${D}defFile"
1219 if @<:@ ${D}flag_USE_LXLITE -ne 0 @:>@; then
1220 add_flags="";
1221 if @<:@ ${D}EXPORT_BY_ORDINALS -ne 0 @:>@; then
1222 add_flags="-ynd"
1223 fi
1224 doCommand "lxlite -cs -t: -mrn -mln ${D}add_flags ${D}dllFile"
1225 fi
1226 doCommand "emxomf -s -l ${D}arcFile"
1227
1228 # Successful exit.
1229 CleanUp 1
1230 exit 0
1231 EOF
1232 dnl ===================== dllar.sh ends here =====================
1233 ])
1234
1235 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_BK_DEPS],
1236 [
1237 dnl ===================== bk-deps begins here =====================
1238 dnl (Created by merge-scripts.py from bk-deps
1239 dnl file do not edit here!)
1240 D='$'
1241 cat <<EOF >bk-deps
1242 #!/bin/sh
1243
1244 # This script is part of Bakefile (http://bakefile.sourceforge.net) autoconf
1245 # script. It is used to track C/C++ files dependencies in portable way.
1246 #
1247 # Permission is given to use this file in any way.
1248
1249 DEPSMODE=${DEPSMODE}
1250 DEPSDIR=.deps
1251 DEPSFLAG="${DEPSFLAG}"
1252
1253 mkdir -p ${D}DEPSDIR
1254
1255 if test ${D}DEPSMODE = gcc ; then
1256 ${D}* ${D}{DEPSFLAG}
1257 status=${D}?
1258 if test ${D}{status} != 0 ; then
1259 exit ${D}{status}
1260 fi
1261 # move created file to the location we want it in:
1262 while test ${D}# -gt 0; do
1263 case "${D}1" in
1264 -o )
1265 shift
1266 objfile=${D}1
1267 ;;
1268 -* )
1269 ;;
1270 * )
1271 srcfile=${D}1
1272 ;;
1273 esac
1274 shift
1275 done
1276 depfile=\`basename ${D}srcfile | sed -e 's/\\..*${D}/.d/g'\`
1277 depobjname=\`echo ${D}depfile |sed -e 's/\\.d/.o/g'\`
1278 if test -f ${D}depfile ; then
1279 sed -e "s,${D}depobjname:,${D}objfile:,g" ${D}depfile >${D}{DEPSDIR}/${D}{objfile}.d
1280 rm -f ${D}depfile
1281 else
1282 # "g++ -MMD -o fooobj.o foosrc.cpp" produces fooobj.d
1283 depfile=\`basename ${D}objfile | sed -e 's/\\..*${D}/.d/g'\`
1284 if test ! -f ${D}depfile ; then
1285 # "cxx -MD -o fooobj.o foosrc.cpp" creates fooobj.o.d (Compaq C++)
1286 depfile="${D}objfile.d"
1287 fi
1288 if test -f ${D}depfile ; then
1289 sed -e "/^${D}objfile/!s,${D}depobjname:,${D}objfile:,g" ${D}depfile >${D}{DEPSDIR}/${D}{objfile}.d
1290 rm -f ${D}depfile
1291 fi
1292 fi
1293 exit 0
1294 elif test ${D}DEPSMODE = mwcc ; then
1295 ${D}* || exit ${D}?
1296 # Run mwcc again with -MM and redirect into the dep file we want
1297 # NOTE: We can't use shift here because we need ${D}* to be valid
1298 prevarg=
1299 for arg in ${D}* ; do
1300 if test "${D}prevarg" = "-o"; then
1301 objfile=${D}arg
1302 else
1303 case "${D}arg" in
1304 -* )
1305 ;;
1306 * )
1307 srcfile=${D}arg
1308 ;;
1309 esac
1310 fi
1311 prevarg="${D}arg"
1312 done
1313 ${D}* ${D}DEPSFLAG >${D}{DEPSDIR}/${D}{objfile}.d
1314 exit 0
1315 elif test ${D}DEPSMODE = unixcc; then
1316 ${D}* || exit ${D}?
1317 # Run compiler again with deps flag and redirect into the dep file.
1318 # It doesn't work if the '-o FILE' option is used, but without it the
1319 # dependency file will contain the wrong name for the object. So it is
1320 # removed from the command line, and the dep file is fixed with sed.
1321 cmd=""
1322 while test ${D}# -gt 0; do
1323 case "${D}1" in
1324 -o )
1325 shift
1326 objfile=${D}1
1327 ;;
1328 * )
1329 eval arg${D}#=\\${D}1
1330 cmd="${D}cmd \\${D}arg${D}#"
1331 ;;
1332 esac
1333 shift
1334 done
1335 eval "${D}cmd ${D}DEPSFLAG" | sed "s|.*:|${D}objfile:|" >${D}{DEPSDIR}/${D}{objfile}.d
1336 exit 0
1337 else
1338 ${D}*
1339 exit ${D}?
1340 fi
1341 EOF
1342 dnl ===================== bk-deps ends here =====================
1343 ])
1344
1345 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_SHARED_LD_SH],
1346 [
1347 dnl ===================== shared-ld-sh begins here =====================
1348 dnl (Created by merge-scripts.py from shared-ld-sh
1349 dnl file do not edit here!)
1350 D='$'
1351 cat <<EOF >shared-ld-sh
1352 #!/bin/sh
1353 #-----------------------------------------------------------------------------
1354 #-- Name: distrib/mac/shared-ld-sh
1355 #-- Purpose: Link a mach-o dynamic shared library for Darwin / Mac OS X
1356 #-- Author: Gilles Depeyrot
1357 #-- Copyright: (c) 2002 Gilles Depeyrot
1358 #-- Licence: any use permitted
1359 #-----------------------------------------------------------------------------
1360
1361 verbose=0
1362 args=""
1363 objects=""
1364 linking_flag="-dynamiclib"
1365 ldargs="-r -keep_private_externs -nostdlib"
1366
1367 while test ${D}# -gt 0; do
1368 case ${D}1 in
1369
1370 -v)
1371 verbose=1
1372 ;;
1373
1374 -o|-compatibility_version|-current_version|-framework|-undefined|-install_name)
1375 # collect these options and values
1376 args="${D}{args} ${D}1 ${D}2"
1377 shift
1378 ;;
1379
1380 -s|-Wl,*)
1381 # collect these load args
1382 ldargs="${D}{ldargs} ${D}1"
1383 ;;
1384
1385 -l*|-L*|-flat_namespace|-headerpad_max_install_names)
1386 # collect these options
1387 args="${D}{args} ${D}1"
1388 ;;
1389
1390 -dynamiclib|-bundle)
1391 linking_flag="${D}1"
1392 ;;
1393
1394 -*)
1395 echo "shared-ld: unhandled option '${D}1'"
1396 exit 1
1397 ;;
1398
1399 *.o | *.a | *.dylib)
1400 # collect object files
1401 objects="${D}{objects} ${D}1"
1402 ;;
1403
1404 *)
1405 echo "shared-ld: unhandled argument '${D}1'"
1406 exit 1
1407 ;;
1408
1409 esac
1410 shift
1411 done
1412
1413 status=0
1414
1415 #
1416 # Link one module containing all the others
1417 #
1418 if test ${D}{verbose} = 1; then
1419 echo "c++ ${D}{ldargs} ${D}{objects} -o master.${D}${D}.o"
1420 fi
1421 c++ ${D}{ldargs} ${D}{objects} -o master.${D}${D}.o
1422 status=${D}?
1423
1424 #
1425 # Link the shared library from the single module created, but only if the
1426 # previous command didn't fail:
1427 #
1428 if test ${D}{status} = 0; then
1429 if test ${D}{verbose} = 1; then
1430 echo "c++ ${D}{linking_flag} master.${D}${D}.o ${D}{args}"
1431 fi
1432 c++ ${D}{linking_flag} master.${D}${D}.o ${D}{args}
1433 status=${D}?
1434 fi
1435
1436 #
1437 # Remove intermediate module
1438 #
1439 rm -f master.${D}${D}.o
1440
1441 exit ${D}status
1442 EOF
1443 dnl ===================== shared-ld-sh ends here =====================
1444 ])
1445
1446 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_BK_MAKE_PCH],
1447 [
1448 dnl ===================== bk-make-pch begins here =====================
1449 dnl (Created by merge-scripts.py from bk-make-pch
1450 dnl file do not edit here!)
1451 D='$'
1452 cat <<EOF >bk-make-pch
1453 #!/bin/sh
1454
1455 # This script is part of Bakefile (http://bakefile.sourceforge.net) autoconf
1456 # script. It is used to generated precompiled headers.
1457 #
1458 # Permission is given to use this file in any way.
1459
1460 outfile="${D}{1}"
1461 header="${D}{2}"
1462 shift
1463 shift
1464
1465 compiler=
1466 headerfile=
1467 while test ${D}{#} -gt 0; do
1468 case "${D}{1}" in
1469 -I* )
1470 incdir=\`echo ${D}{1} | sed -e 's/-I\\(.*\\)/\\1/g'\`
1471 if test "x${D}{headerfile}" = "x" -a -f "${D}{incdir}/${D}{header}" ; then
1472 headerfile="${D}{incdir}/${D}{header}"
1473 fi
1474 ;;
1475 esac
1476 compiler="${D}{compiler} ${D}{1}"
1477 shift
1478 done
1479
1480 if test "x${D}{headerfile}" = "x" ; then
1481 echo "error: can't find header ${D}{header} in include paths" >2
1482 else
1483 if test -f ${D}{outfile} ; then
1484 rm -f ${D}{outfile}
1485 else
1486 mkdir -p \`dirname ${D}{outfile}\`
1487 fi
1488 depsfile=".deps/\`echo ${D}{outfile} | tr '/.' '__'\`.d"
1489 mkdir -p .deps
1490 # can do this because gcc is >= 3.4:
1491 ${D}{compiler} -o ${D}{outfile} -MMD -MF "${D}{depsfile}" "${D}{headerfile}"
1492 exit ${D}{?}
1493 fi
1494 EOF
1495 dnl ===================== bk-make-pch ends here =====================
1496 ])