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