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