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