Check for xlC and add -qunique to CXXFLAGS if we're using it.
[wxWidgets.git] / aclocal.m4
1 # aclocal.m4 generated automatically by aclocal 1.6.3 -*- Autoconf -*-
2
3 # Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002
4 # Free Software Foundation, Inc.
5 # This file is free software; the Free Software Foundation
6 # gives unlimited permission to copy and/or distribute it,
7 # with or without modifications, as long as this notice is preserved.
8
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY, to the extent permitted by law; without
11 # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
12 # PARTICULAR PURPOSE.
13
14 dnl ---------------------------------------------------------------------------
15 dnl
16 dnl Macros for configure.in for wxWindows by Robert Roebling, Phil Blecker,
17 dnl Vadim Zeitlin and Ron Lee
18 dnl
19 dnl This script is under the wxWindows licence.
20 dnl
21 dnl Version: $Id$
22 dnl ---------------------------------------------------------------------------
23
24 dnl ===========================================================================
25 dnl macros to detect specialty compiler options
26 dnl ===========================================================================
27
28 dnl Figure out if we need to pass -ext o to compiler (MetroWerks)
29 AC_DEFUN([AC_WX_METROWERKS_EXTO],
30 [AC_CACHE_CHECK([if the _AC_LANG compiler requires -ext o], wx_cv_[]_AC_LANG_ABBREV[]_exto,
31 dnl First create an empty conf test
32 [AC_LANG_CONFTEST([AC_LANG_PROGRAM()])
33 dnl Now remove .o and .c.o or .cc.o
34 rm -f conftest.$ac_objext conftest.$ac_ext.o
35 dnl Now compile the test
36 AS_IF([AC_TRY_EVAL(ac_compile)],
37 dnl If the test succeeded look for conftest.c.o or conftest.cc.o
38 [for ac_file in `(ls conftest.* 2>/dev/null)`; do
39     case $ac_file in
40         conftest.$ac_ext.o)
41             wx_cv_[]_AC_LANG_ABBREV[]_exto="-ext o"
42             ;;
43         *)
44             ;;
45     esac
46 done],
47 [AC_MSG_FAILURE([cannot figure out if compiler needs -ext o: cannot compile])
48 ]) dnl AS_IF
49
50 rm -f conftest.$ac_ext.o conftest.$ac_objext conftest.$ac_ext
51 ]) dnl AC_CACHE_CHECK
52
53 if test "x$wx_cv_[]_AC_LANG_ABBREV[]_exto" '!=' "x"; then
54     if test "[]_AC_LANG_ABBREV[]" = "c"; then
55         CFLAGS="$wx_cv_[]_AC_LANG_ABBREV[]_exto $CFLAGS"
56     fi
57     if test "[]_AC_LANG_ABBREV[]" = "cxx"; then
58         CXXFLAGS="$wx_cv_[]_AC_LANG_ABBREV[]_exto $CXXFLAGS"
59     fi
60 fi
61 ]) dnl AC_DEFUN
62
63
64 dnl Based on autoconf _AC_LANG_COMPILER_GNU
65 AC_DEFUN([_AC_WX_LANG_COMPILER_XLC],
66 [AC_CACHE_CHECK([whether we are using the IBM xlC _AC_LANG compiler],
67     [wx_cv_[]_AC_LANG_ABBREV[]_compiler_xlc],
68     [AC_TRY_COMPILE([],[#ifndef __xlC__
69        choke me
70 #endif
71 ],
72         [wx_compiler_xlc=yes],
73         [wx_compiler_xlc=no])
74     wx_cv_[]_AC_LANG_ABBREV[]_compiler_xlc=$wx_compiler_xlc
75     ])
76 ])
77
78 dnl Loosely based on autoconf AC_PROG_CC
79 AC_DEFUN([AC_WX_PROG_XLCC],
80 [AC_LANG_PUSH(C)
81 _AC_WX_LANG_COMPILER_XLC
82 XLCC=`test $wx_compiler_xlc = yes && echo yes`
83 AC_LANG_POP(C)
84 ])
85
86 dnl Loosely based on autoconf AC_PROG_CXX
87 AC_DEFUN([AC_WX_PROG_XLCXX],
88 [AC_LANG_PUSH(C++)
89 _AC_WX_LANG_COMPILER_XLC
90 XLCXX=`test $wx_compiler_xlc = yes && echo yes`
91 AC_LANG_POP(C++)
92 ])
93
94
95 dnl ===========================================================================
96 dnl macros to find the a file in the list of include/lib paths
97 dnl ===========================================================================
98
99 dnl ---------------------------------------------------------------------------
100 dnl call WX_PATH_FIND_INCLUDES(search path, header name), sets ac_find_includes
101 dnl to the full name of the file that was found or leaves it empty if not found
102 dnl ---------------------------------------------------------------------------
103 AC_DEFUN([WX_PATH_FIND_INCLUDES],
104 [
105 ac_find_includes=
106 for ac_dir in $1 /usr/include;
107   do
108     if test -f "$ac_dir/$2"; then
109       ac_find_includes=$ac_dir
110       break
111     fi
112   done
113 ])
114
115 dnl ---------------------------------------------------------------------------
116 dnl call WX_PATH_FIND_LIBRARIES(search path, header name), sets ac_find_libraries
117 dnl to the full name of the file that was found or leaves it empty if not found
118 dnl ---------------------------------------------------------------------------
119 AC_DEFUN([WX_PATH_FIND_LIBRARIES],
120 [
121 ac_find_libraries=
122 for ac_dir in $1 /usr/lib;
123   do
124     for ac_extension in a so sl dylib; do
125       if test -f "$ac_dir/lib$2.$ac_extension"; then
126         ac_find_libraries=$ac_dir
127         break 2
128       fi
129     done
130   done
131 ])
132
133 dnl ---------------------------------------------------------------------------
134 dnl Path to include, already defined
135 dnl ---------------------------------------------------------------------------
136 AC_DEFUN([WX_INCLUDE_PATH_EXIST],
137 [
138   dnl never add -I/usr/include to the CPPFLAGS
139   if test "x$1" = "x/usr/include"; then
140     ac_path_to_include=""
141   else
142     echo "$2" | grep "\-I$1" > /dev/null
143     result=$?
144     if test $result = 0; then
145       ac_path_to_include=""
146     else
147       ac_path_to_include=" -I$1"
148     fi
149   fi
150 ])
151
152 dnl ---------------------------------------------------------------------------
153 dnl Path to link, already defined
154 dnl ---------------------------------------------------------------------------
155 AC_DEFUN([WX_LINK_PATH_EXIST],
156 [
157   echo "$2" | grep "\-L$1" > /dev/null
158   result=$?
159   if test $result = 0; then
160     ac_path_to_link=""
161   else
162     ac_path_to_link=" -L$1"
163   fi
164 ])
165
166 dnl ===========================================================================
167 dnl C++ features test
168 dnl ===========================================================================
169
170 dnl ---------------------------------------------------------------------------
171 dnl WX_CPP_NEW_HEADERS checks whether the compiler has "new" <iostream> header
172 dnl or only the old <iostream.h> one - it may be generally assumed that if
173 dnl <iostream> exists, the other "new" headers (without .h) exist too.
174 dnl
175 dnl call WX_CPP_NEW_HEADERS(actiof-if-true, action-if-false)
176 dnl ---------------------------------------------------------------------------
177
178 AC_DEFUN([WX_CPP_NEW_HEADERS],
179 [
180     AC_LANG_SAVE
181     AC_LANG_CPLUSPLUS
182
183     AC_CHECK_HEADERS(iostream)
184
185     if test "$ac_cv_header_iostream" = "yes" ; then
186       ifelse([$1], , :, [$1])
187     else
188       ifelse([$2], , :, [$2])
189     fi
190
191     AC_LANG_RESTORE
192 ])
193
194 dnl ---------------------------------------------------------------------------
195 dnl WX_CPP_BOOL checks whether the C++ compiler has a built in bool type
196 dnl
197 dnl call WX_CPP_BOOL - will define HAVE_BOOL if the compiler supports bool
198 dnl ---------------------------------------------------------------------------
199
200 AC_DEFUN([WX_CPP_BOOL],
201 [
202   AC_CACHE_CHECK([if C++ compiler supports bool], wx_cv_cpp_bool,
203   [
204     AC_LANG_SAVE
205     AC_LANG_CPLUSPLUS
206
207     AC_TRY_COMPILE(
208       [
209       ],
210       [
211         bool b = true;
212
213         return 0;
214       ],
215       [
216         wx_cv_cpp_bool=yes
217       ],
218       [
219         wx_cv_cpp_bool=no
220       ]
221     )
222
223     AC_LANG_RESTORE
224   ])
225
226   if test "$wx_cv_cpp_bool" = "yes"; then
227     AC_DEFINE(HAVE_BOOL)
228   fi
229 ])
230
231 dnl ---------------------------------------------------------------------------
232 dnl WX_CPP_EXPLICIT checks whether the C++ compiler support the explicit
233 dnl keyword and defines HAVE_EXPLICIT if this is the case
234 dnl ---------------------------------------------------------------------------
235
236 AC_DEFUN([WX_CPP_EXPLICIT],
237 [
238   AC_CACHE_CHECK([if C++ compiler supports the explicit keyword],
239                  wx_cv_explicit,
240   [
241     AC_LANG_SAVE
242     AC_LANG_CPLUSPLUS
243
244     dnl do the test in 2 steps: first check that the compiler knows about the
245     dnl explicit keyword at all and then verify that it really honours it
246     AC_TRY_COMPILE(
247       [
248         class Foo { public: explicit Foo(int) {} };
249       ],
250       [
251         return 0;
252       ],
253       [
254         AC_TRY_COMPILE(
255             [
256                 class Foo { public: explicit Foo(int) {} };
257                 static void TakeFoo(const Foo& foo) { }
258             ],
259             [
260                 TakeFoo(17);
261                 return 0;
262             ],
263             wx_cv_explicit=no,
264             wx_cv_explicit=yes
265         )
266       ],
267       wx_cv_explicit=no
268     )
269
270     AC_LANG_RESTORE
271   ])
272
273   if test "$wx_cv_explicit" = "yes"; then
274     AC_DEFINE(HAVE_EXPLICIT)
275   fi
276 ])
277
278 dnl ---------------------------------------------------------------------------
279 dnl a slightly better AC_C_BIGENDIAN macro which allows cross-compiling
280 dnl ---------------------------------------------------------------------------
281
282 AC_DEFUN([WX_C_BIGENDIAN],
283 [AC_CACHE_CHECK([whether byte ordering is bigendian], ac_cv_c_bigendian,
284 [ac_cv_c_bigendian=unknown
285 # See if sys/param.h defines the BYTE_ORDER macro.
286 AC_TRY_COMPILE([#include <sys/types.h>
287 #include <sys/param.h>], [
288 #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
289  bogus endian macros
290 #endif], [# It does; now see whether it defined to BIG_ENDIAN or not.
291 AC_TRY_COMPILE([#include <sys/types.h>
292 #include <sys/param.h>], [
293 #if BYTE_ORDER != BIG_ENDIAN
294  not big endian
295 #endif], ac_cv_c_bigendian=yes, ac_cv_c_bigendian=no)])
296 if test $ac_cv_c_bigendian = unknown; then
297 AC_TRY_RUN([main () {
298   /* Are we little or big endian?  From Harbison&Steele.  */
299   union
300   {
301     long l;
302     char c[sizeof (long)];
303   } u;
304   u.l = 1;
305   exit (u.c[sizeof (long) - 1] == 1);
306 }], [ac_cv_c_bigendian=no], [ac_cv_c_bigendian=yes], [ac_cv_c_bigendian=unknown])
307 fi])
308 if test $ac_cv_c_bigendian = unknown; then
309   AC_MSG_WARN([Assuming little-endian target machine - this may be overriden by adding the line "ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}" to config.cache file])
310 fi
311 if test $ac_cv_c_bigendian = yes; then
312   AC_DEFINE(WORDS_BIGENDIAN)
313 fi
314 ])
315
316 dnl ---------------------------------------------------------------------------
317 dnl override AC_ARG_ENABLE/WITH to cache the results in .cache file
318 dnl ---------------------------------------------------------------------------
319
320 AC_DEFUN([WX_ARG_CACHE_INIT],
321         [
322           wx_arg_cache_file="configarg.cache"
323           echo "loading argument cache $wx_arg_cache_file"
324           rm -f ${wx_arg_cache_file}.tmp
325           touch ${wx_arg_cache_file}.tmp
326           touch ${wx_arg_cache_file}
327         ])
328
329 AC_DEFUN([WX_ARG_CACHE_FLUSH],
330         [
331           echo "saving argument cache $wx_arg_cache_file"
332           mv ${wx_arg_cache_file}.tmp ${wx_arg_cache_file}
333         ])
334
335 dnl this macro checks for a three-valued command line --with argument:
336 dnl   possible arguments are 'yes', 'no', 'sys', or 'builtin'
337 dnl usage: WX_ARG_SYS_WITH(option, helpmessage, variable-name)
338 AC_DEFUN([WX_ARG_SYS_WITH],
339         [
340           AC_MSG_CHECKING([for --with-$1])
341           no_cache=0
342           AC_ARG_WITH($1, [$2],
343                       [
344                         if test "$withval" = yes; then
345                           ac_cv_use_$1='$3=yes'
346                         elif test "$withval" = no; then
347                           ac_cv_use_$1='$3=no'
348                         elif test "$withval" = sys; then
349                           ac_cv_use_$1='$3=sys'
350                         elif test "$withval" = builtin; then
351                           ac_cv_use_$1='$3=builtin'
352                         else
353                           AC_MSG_ERROR([Invalid value for --with-$1: should be yes, no, sys, or builtin])
354                         fi
355                       ],
356                       [
357                         LINE=`grep "$3" ${wx_arg_cache_file}`
358                         if test "x$LINE" != x ; then
359                           eval "DEFAULT_$LINE"
360                         else
361                           no_cache=1
362                         fi
363
364                         ac_cv_use_$1='$3='$DEFAULT_$3
365                       ])
366
367           eval "$ac_cv_use_$1"
368           if test "$no_cache" != 1; then
369             echo $ac_cv_use_$1 >> ${wx_arg_cache_file}.tmp
370           fi
371
372           if test "$$3" = yes; then
373             AC_MSG_RESULT(yes)
374           elif test "$$3" = no; then
375             AC_MSG_RESULT(no)
376           elif test "$$3" = sys; then
377             AC_MSG_RESULT([system version])
378           elif test "$$3" = builtin; then
379             AC_MSG_RESULT([builtin version])
380           else
381             AC_MSG_ERROR([Invalid value for --with-$1: should be yes, no, sys, or builtin])
382           fi
383         ])
384
385 dnl this macro checks for a command line argument and caches the result
386 dnl usage: WX_ARG_WITH(option, helpmessage, variable-name)
387 AC_DEFUN([WX_ARG_WITH],
388         [
389           AC_MSG_CHECKING([for --with-$1])
390           no_cache=0
391           AC_ARG_WITH($1, [$2],
392                       [
393                         if test "$withval" = yes; then
394                           ac_cv_use_$1='$3=yes'
395                         else
396                           ac_cv_use_$1='$3=no'
397                         fi
398                       ],
399                       [
400                         LINE=`grep "$3" ${wx_arg_cache_file}`
401                         if test "x$LINE" != x ; then
402                           eval "DEFAULT_$LINE"
403                         else
404                           no_cache=1
405                         fi
406
407                         ac_cv_use_$1='$3='$DEFAULT_$3
408                       ])
409
410           eval "$ac_cv_use_$1"
411           if test "$no_cache" != 1; then
412             echo $ac_cv_use_$1 >> ${wx_arg_cache_file}.tmp
413           fi
414
415           if test "$$3" = yes; then
416             AC_MSG_RESULT(yes)
417           else
418             AC_MSG_RESULT(no)
419           fi
420         ])
421
422 dnl like WX_ARG_WITH but uses AC_ARG_ENABLE instead of AC_ARG_WITH
423 dnl usage: WX_ARG_ENABLE(option, helpmessage, variable-name, enablestring)
424 dnl
425 dnl enablestring is a hack and allows to show "checking for --disable-foo"
426 dnl message when running configure instead of the default "checking for
427 dnl --enable-foo" one whih is useful for the options enabled by default
428 AC_DEFUN([WX_ARG_ENABLE],
429         [
430           enablestring=$4
431           AC_MSG_CHECKING([for --${enablestring:-enable}-$1])
432           no_cache=0
433           AC_ARG_ENABLE($1, [$2],
434                         [
435                           if test "$enableval" = yes; then
436                             ac_cv_use_$1='$3=yes'
437                           else
438                             ac_cv_use_$1='$3=no'
439                           fi
440                         ],
441                         [
442                           LINE=`grep "$3" ${wx_arg_cache_file}`
443                           if test "x$LINE" != x ; then
444                             eval "DEFAULT_$LINE"
445                           else
446                             no_cache=1
447                           fi
448
449                           ac_cv_use_$1='$3='$DEFAULT_$3
450                         ])
451
452           eval "$ac_cv_use_$1"
453           if test "$no_cache" != 1; then
454             echo $ac_cv_use_$1 >> ${wx_arg_cache_file}.tmp
455           fi
456
457           if test "$$3" = yes; then
458             AC_MSG_RESULT(yes)
459           else
460             AC_MSG_RESULT(no)
461           fi
462         ])
463
464
465 dnl ===========================================================================
466 dnl Linker features test
467 dnl ===========================================================================
468
469 dnl ---------------------------------------------------------------------------
470 dnl WX_VERSIONED_SYMBOLS checks whether the linker can create versioned
471 dnl symbols. If it can, sets LDFLAGS_VERSIONING to $CXX flags needed to use
472 dnl version script file named versionfile
473 dnl
474 dnl call WX_VERSIONED_SYMBOLS(versionfile)
475 dnl ---------------------------------------------------------------------------
476 AC_DEFUN([WX_VERSIONED_SYMBOLS],
477 [
478   found_versioning=no
479
480   dnl FIXME - doesn't work, Solaris linker doesn't accept wildcards
481   dnl         in the script.
482   dnl dnl Check for known non-gcc cases:
483   dnl case "${host}" in
484   dnl   *-*-solaris2* )
485   dnl     if test "x$GCC" != "xyes" ; then
486   dnl         LDFLAGS_VERSIONING="-M $1"
487   dnl         found_versioning=yes
488   dnl     fi
489   dnl   ;;
490   dnl esac
491   
492   dnl Generic check for GCC or GCC-like behaviour (Intel C++, GCC):
493   if test $found_versioning = no ; then
494       AC_CACHE_CHECK([if the linker accepts --version-script], wx_cv_version_script,
495       [
496         echo "VER_1 { *; };" >conftest.sym
497         echo "int main() { return 0; }" >conftest.cpp
498   
499         if AC_TRY_COMMAND([
500                 $CXX -o conftest.output $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.cpp
501                 -Wl,--version-script,conftest.sym >/dev/null 2>conftest.stderr]) ; then
502           if test -s conftest.stderr ; then
503               wx_cv_version_script=no
504           else
505               wx_cv_version_script=yes
506           fi
507         else
508           wx_cv_version_script=no
509         fi
510         rm -f conftest.output conftest.stderr conftest.sym conftest.cpp
511       ])
512       if test $wx_cv_version_script = yes ; then
513         LDFLAGS_VERSIONING="-Wl,--version-script,$1"
514       fi
515   fi
516 ])
517
518
519 dnl ===========================================================================
520 dnl "3rd party" macros included here because they are not widely available
521 dnl ===========================================================================
522
523 dnl ---------------------------------------------------------------------------
524 dnl test for availability of iconv()
525 dnl ---------------------------------------------------------------------------
526
527 dnl From Bruno Haible.
528
529 AC_DEFUN([AM_ICONV],
530 [
531   dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
532   dnl those with the standalone portable GNU libiconv installed).
533
534   AC_ARG_WITH([libiconv-prefix],
535 [  --with-libiconv-prefix=DIR  search for libiconv in DIR/include and DIR/lib], [
536     for dir in `echo "$withval" | tr : ' '`; do
537       if test -d $dir/include; then CPPFLAGS="$CPPFLAGS -I$dir/include"; fi
538       if test -d $dir/lib; then LDFLAGS="$LDFLAGS -L$dir/lib"; fi
539     done
540    ])
541
542   AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [
543     am_cv_func_iconv="no, consider installing GNU libiconv"
544     am_cv_lib_iconv=no
545     AC_TRY_LINK([#include <stdlib.h>
546 #include <iconv.h>],
547       [iconv_t cd = iconv_open("","");
548        iconv(cd,NULL,NULL,NULL,NULL);
549        iconv_close(cd);],
550       am_cv_func_iconv=yes)
551     if test "$am_cv_func_iconv" != yes; then
552       am_save_LIBS="$LIBS"
553       LIBS="$LIBS -liconv"
554       AC_TRY_LINK([#include <stdlib.h>
555 #include <iconv.h>],
556         [iconv_t cd = iconv_open("","");
557          iconv(cd,NULL,NULL,NULL,NULL);
558          iconv_close(cd);],
559         am_cv_lib_iconv=yes
560         am_cv_func_iconv=yes)
561       LIBS="$am_save_LIBS"
562     fi
563   ])
564   if test "$am_cv_func_iconv" = yes; then
565     AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
566     AC_CACHE_CHECK([if iconv needs const], wx_cv_func_iconv_const,
567       AC_TRY_COMPILE([
568 #include <stdlib.h>
569 #include <iconv.h>
570 extern
571 #ifdef __cplusplus
572 "C"
573 #endif
574 #if defined(__STDC__) || defined(__cplusplus)
575 size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
576 #else
577 size_t iconv();
578 #endif
579         ],
580         [],
581         wx_cv_func_iconv_const="no",
582         wx_cv_func_iconv_const="yes"
583       )
584     )
585
586     iconv_const=
587     if test "x$wx_cv_func_iconv_const" = "xyes"; then
588         iconv_const="const"
589     fi
590
591     AC_DEFINE_UNQUOTED(ICONV_CONST, $iconv_const,
592       [Define as const if the declaration of iconv() needs const.])
593   fi
594   LIBICONV=
595   if test "$am_cv_lib_iconv" = yes; then
596     LIBICONV="-liconv"
597   fi
598   AC_SUBST(LIBICONV)
599 ])
600
601 dnl ---------------------------------------------------------------------------
602 dnl AC_SYS_LARGEFILE (partly based on the code from autoconf 2.5x)
603 dnl ---------------------------------------------------------------------------
604
605 dnl WX_SYS_LARGEFILE_TEST
606 dnl
607 dnl NB: original autoconf test was checking if compiler supported 6 bit off_t
608 dnl     arithmetic properly but this failed miserably with gcc under Linux
609 dnl     whereas the system still supports 64 bit files, so now simply check
610 dnl     that off_t is big enough
611 define(WX_SYS_LARGEFILE_TEST,
612 [typedef struct {
613     unsigned int field: sizeof(off_t) == 8;
614 } wxlf;
615 ])
616
617
618 dnl WX_SYS_LARGEFILE_MACRO_VALUE(C-MACRO, VALUE, CACHE-VAR)
619 define(WX_SYS_LARGEFILE_MACRO_VALUE,
620 [
621     AC_CACHE_CHECK([for $1 value needed for large files], [$3],
622         [
623           AC_TRY_COMPILE([#define $1 $2
624                           #include <sys/types.h>],
625                          WX_SYS_LARGEFILE_TEST,
626                          [$3=$2],
627                          [$3=no])
628         ]
629     )
630
631     if test "$$3" != no; then
632         wx_largefile=yes
633         AC_DEFINE_UNQUOTED([$1], [$$3])
634     fi
635 ])
636
637
638 dnl AC_SYS_LARGEFILE
639 dnl ----------------
640 dnl By default, many hosts won't let programs access large files;
641 dnl one must use special compiler options to get large-file access to work.
642 dnl For more details about this brain damage please see:
643 dnl http://www.sas.com/standards/large.file/x_open.20Mar96.html
644 AC_DEFUN([AC_SYS_LARGEFILE],
645 [AC_ARG_ENABLE(largefile,
646                [  --disable-largefile     omit support for large files])
647 if test "$enable_largefile" != no; then
648     dnl _FILE_OFFSET_BITS==64 is needed for Linux, Solaris, ...
649     dnl _LARGE_FILES -- for AIX
650     wx_largefile=no
651     WX_SYS_LARGEFILE_MACRO_VALUE(_FILE_OFFSET_BITS, 64, ac_cv_sys_file_offset_bits)
652     if test "x$wx_largefile" != "xyes"; then
653         WX_SYS_LARGEFILE_MACRO_VALUE(_LARGE_FILES, 1, ac_cv_sys_large_files)
654     fi
655
656     AC_MSG_CHECKING(if large file support is available)
657     if test "x$wx_largefile" = "xyes"; then
658         AC_DEFINE(HAVE_LARGEFILE_SUPPORT)
659     fi
660     AC_MSG_RESULT($wx_largefile)
661 fi
662 ])
663
664
665 dnl Available from the GNU Autoconf Macro Archive at:
666 dnl http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_const_cast.html
667 dnl
668 AC_DEFUN([AC_CXX_CONST_CAST],
669 [AC_CACHE_CHECK(whether the compiler supports const_cast<>,
670 ac_cv_cxx_const_cast,
671 [AC_LANG_SAVE
672  AC_LANG_CPLUSPLUS
673  AC_TRY_COMPILE(,[int x = 0;const int& y = x;int& z = const_cast<int&>(y);return z;],
674  ac_cv_cxx_const_cast=yes, ac_cv_cxx_const_cast=no)
675  AC_LANG_RESTORE
676 ])
677 if test "$ac_cv_cxx_const_cast" = yes; then
678   AC_DEFINE(HAVE_CONST_CAST,,[define if the compiler supports const_cast<>])
679 fi
680 ])
681
682 dnl http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_reinterpret_cast.html
683 AC_DEFUN([AC_CXX_REINTERPRET_CAST],
684 [AC_CACHE_CHECK(whether the compiler supports reinterpret_cast<>,
685 ac_cv_cxx_reinterpret_cast,
686 [AC_LANG_SAVE
687  AC_LANG_CPLUSPLUS
688  AC_TRY_COMPILE([#include <typeinfo>
689 class Base { public : Base () {} virtual void f () = 0;};
690 class Derived : public Base { public : Derived () {} virtual void f () {} };
691 class Unrelated { public : Unrelated () {} };
692 int g (Unrelated&) { return 0; }],[
693 Derived d;Base& b=d;Unrelated& e=reinterpret_cast<Unrelated&>(b);return g(e);],
694  ac_cv_cxx_reinterpret_cast=yes, ac_cv_cxx_reinterpret_cast=no)
695  AC_LANG_RESTORE
696 ])
697 if test "$ac_cv_cxx_reinterpret_cast" = yes; then
698   AC_DEFINE(HAVE_REINTERPRET_CAST,,
699             [define if the compiler supports reinterpret_cast<>])
700 fi
701 ])
702
703 dnl and http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_static_cast.html
704 AC_DEFUN([AC_CXX_STATIC_CAST],
705 [AC_CACHE_CHECK(whether the compiler supports static_cast<>,
706 ac_cv_cxx_static_cast,
707 [AC_LANG_SAVE
708  AC_LANG_CPLUSPLUS
709  AC_TRY_COMPILE([#include <typeinfo>
710 class Base { public : Base () {} virtual void f () = 0; };
711 class Derived : public Base { public : Derived () {} virtual void f () {} };
712 int g (Derived&) { return 0; }],[
713 Derived d; Base& b = d; Derived& s = static_cast<Derived&> (b); return g (s);],
714  ac_cv_cxx_static_cast=yes, ac_cv_cxx_static_cast=no)
715  AC_LANG_RESTORE
716 ])
717 if test "$ac_cv_cxx_static_cast" = yes; then
718   AC_DEFINE(HAVE_STATIC_CAST,, [define if the compiler supports static_cast<>])
719 fi
720 ])
721
722 dnl ---------------------------------------------------------------------------
723 dnl Support macros for makefiles generated by BAKEFILE.
724 dnl ---------------------------------------------------------------------------
725
726 dnl Lots of compiler & linker detection code contained here was taken from
727 dnl wxWindows configure.in script (see http://www.wxwindows.org)
728
729 dnl Based on autoconf _AC_LANG_COMPILER_GNU
730 AC_DEFUN([_AC_BAKEFILE_LANG_COMPILER_MWERKS],
731 [AC_CACHE_CHECK([whether we are using the Metrowerks _AC_LANG compiler],
732     [bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_mwerks],
733     [AC_TRY_COMPILE([],[#ifndef __MWERKS__
734        choke me
735 #endif
736 ],
737         [bakefile_compiler_mwerks=yes],
738         [bakefile_compiler_mwerks=no])
739     bakefile_cv_[]_AC_LANG_ABBREV[]_compiler_mwerks=$bakefile_compiler_mwerks
740     ])
741 ])
742
743 dnl Loosely based on autoconf AC_PROG_CC
744 dnl TODO: Maybe this should wrap the call to AC_PROG_CC and be used instead.
745 AC_DEFUN([AC_BAKEFILE_PROG_MWCC],
746 [AC_LANG_PUSH(C)
747 _AC_BAKEFILE_LANG_COMPILER_MWERKS
748 MWCC=`test $bakefile_compiler_mwerks = yes && echo yes`
749 AC_LANG_POP(C)
750 ])
751
752 dnl Loosely based on autoconf AC_PROG_CXX
753 dnl TODO: Maybe this should wrap the call to AC_PROG_CXX and be used instead.
754 AC_DEFUN([AC_BAKEFILE_PROG_MWCXX],
755 [AC_LANG_PUSH(C++)
756 _AC_BAKEFILE_LANG_COMPILER_MWERKS
757 MWCXX=`test $bakefile_compiler_mwerks = yes && echo yes`
758 AC_LANG_POP(C++)
759 ])
760
761 dnl ---------------------------------------------------------------------------
762 dnl AC_BAKEFILE_GNUMAKE
763 dnl
764 dnl Detects GNU make
765 dnl ---------------------------------------------------------------------------
766
767 AC_DEFUN([AC_BAKEFILE_GNUMAKE],
768 [
769     dnl does make support "-include" (only GNU make does AFAIK)?
770     AC_CACHE_CHECK([if make is GNU make], bakefile_cv_prog_makeisgnu,
771     [
772         if ( ${SHELL-sh} -c "${MAKE-make} --version" 2> /dev/null |
773                 egrep -s GNU > /dev/null); then
774             bakefile_cv_prog_makeisgnu="yes"
775         else
776             bakefile_cv_prog_makeisgnu="no"
777         fi
778     ])
779
780     if test "x$bakefile_cv_prog_makeisgnu" = "xyes"; then
781         IF_GNU_MAKE=""
782     else
783         IF_GNU_MAKE="#"
784     fi
785     AC_SUBST(IF_GNU_MAKE)
786 ])
787
788 dnl ---------------------------------------------------------------------------
789 dnl AC_BAKEFILE_PLATFORM
790 dnl
791 dnl Detects platform and sets PLATFORM_XXX variables accordingly
792 dnl ---------------------------------------------------------------------------
793
794 AC_DEFUN([AC_BAKEFILE_PLATFORM],
795 [
796     PLATFORM_UNIX=0
797     PLATFORM_WIN32=0
798     PLATFORM_MSDOS=0
799     PLATFORM_MAC=0
800     PLATFORM_MACOS=0
801     PLATFORM_MACOSX=0
802     PLATFORM_OS2=0
803     PLATFORM_BEOS=0
804
805     if test "x$BAKEFILE_FORCE_PLATFORM" = "x"; then 
806         case "${BAKEFILE_HOST}" in
807             *-*-cygwin* | *-*-mingw32* )
808                 PLATFORM_WIN32=1
809             ;;
810             *-pc-msdosdjgpp )
811                 PLATFORM_MSDOS=1
812             ;;
813             *-pc-os2_emx | *-pc-os2-emx )
814                 PLATFORM_OS2=1
815             ;;
816             powerpc-*-darwin* )
817                 PLATFORM_MAC=1
818                 PLATFORM_MACOSX=1
819             ;; 
820             *-*-beos* )
821                 PLATFORM_BEOS=1
822             ;;
823             powerpc-apple-macos* )
824                 PLATFORM_MAC=1
825                 PLATFORM_MACOS=1
826             ;;
827             * )
828                 PLATFORM_UNIX=1
829             ;;
830         esac
831     else
832         case "$BAKEFILE_FORCE_PLATFORM" in
833             win32 )
834                 PLATFORM_WIN32=1
835             ;;
836             msdos )
837                 PLATFORM_MSDOS=1
838             ;;
839             os2 )
840                 PLATFORM_OS2=1
841             ;;
842             darwin )
843                 PLATFORM_MAC=1
844                 PLATFORM_MACOSX=1
845             ;;
846             unix )
847                 PLATFORM_UNIX=1
848             ;;
849             beos )
850                 PLATFORM_BEOS=1
851             ;;
852             * )
853                 AC_MSG_ERROR([Unknown platform: $BAKEFILE_FORCE_PLATFORM])
854             ;;
855         esac
856     fi
857
858     AC_SUBST(PLATFORM_UNIX)
859     AC_SUBST(PLATFORM_WIN32)
860     AC_SUBST(PLATFORM_MSDOS)
861     AC_SUBST(PLATFORM_MAC)
862     AC_SUBST(PLATFORM_MACOS)
863     AC_SUBST(PLATFORM_MACOSX)
864     AC_SUBST(PLATFORM_OS2)
865     AC_SUBST(PLATFORM_BEOS)
866 ])
867
868
869 dnl ---------------------------------------------------------------------------
870 dnl AC_BAKEFILE_PLATFORM_SPECIFICS
871 dnl
872 dnl Sets misc platform-specific settings
873 dnl ---------------------------------------------------------------------------
874
875 AC_DEFUN([AC_BAKEFILE_PLATFORM_SPECIFICS],
876 [
877     AC_ARG_ENABLE([omf], AS_HELP_STRING([--enable-omf],
878                                         [use OMF object format (OS/2)]),
879                   [bk_os2_use_omf="$enableval"])
880     
881     case "${BAKEFILE_HOST}" in
882       *-*-darwin* )
883         dnl For Unix to MacOS X porting instructions, see:
884         dnl http://fink.sourceforge.net/doc/porting/porting.html
885         CFLAGS="$CFLAGS -fno-common"
886         CXXFLAGS="$CXXFLAGS -fno-common"
887         ;;
888
889       *-pc-os2_emx | *-pc-os2-emx )
890         if test "x$bk_os2_use_omf" = "xyes" ; then
891             AR=emxomfar
892             RANLIB=:
893             LDFLAGS="-Zomf $LDFLAGS"
894             CFLAGS="-Zomf $CFLAGS"
895             CXXFLAGS="-Zomf $CXXFLAGS"
896             OS2_LIBEXT="lib"
897         else
898             OS2_LIBEXT="a"
899         fi
900         ;;
901       
902       i*86-*-beos* )
903         LDFLAGS="-L/boot/develop/lib/x86 $LDFLAGS"
904         ;;
905     esac
906 ])
907
908 dnl ---------------------------------------------------------------------------
909 dnl AC_BAKEFILE_SUFFIXES
910 dnl
911 dnl Detects shared various suffixes for shared libraries, libraries, programs,
912 dnl plugins etc.
913 dnl ---------------------------------------------------------------------------
914
915 AC_DEFUN([AC_BAKEFILE_SUFFIXES],
916 [
917     SO_SUFFIX="so"
918     SO_SUFFIX_MODULE="so"
919     EXEEXT=""
920     LIBPREFIX="lib"
921     LIBEXT=".a"
922     DLLPREFIX="lib"
923     DLLPREFIX_MODULE=""
924     DLLIMP_SUFFIX=""
925     
926     case "${BAKEFILE_HOST}" in
927         *-hp-hpux* )
928             SO_SUFFIX="sl"
929             SO_SUFFIX_MODULE="sl"
930         ;;
931         *-*-aix* )
932             dnl quoting from
933             dnl http://www-1.ibm.com/servers/esdd/articles/gnu.html:
934             dnl     Both archive libraries and shared libraries on AIX have an
935             dnl     .a extension. This will explain why you can't link with an
936             dnl     .so and why it works with the name changed to .a.
937             SO_SUFFIX="a"
938             SO_SUFFIX_MODULE="a"
939         ;;
940         *-*-cygwin* | *-*-mingw32* )
941             SO_SUFFIX="dll"
942             SO_SUFFIX_MODULE="dll"
943             DLLIMP_SUFFIX="dll.a"
944             EXEEXT=".exe"
945             DLLPREFIX=""
946         ;;
947         *-pc-msdosdjgpp )
948             EXEEXT=".exe"
949             DLLPREFIX=""
950         ;;
951         *-pc-os2_emx | *-pc-os2-emx )
952             SO_SUFFIX="dll"
953             SO_SUFFIX_MODULE="dll"
954             DLLIMP_SUFFIX=$OS2_LIBEXT
955             EXEEXT=".exe"
956             DLLPREFIX=""
957             LIBPREFIX=""
958             LIBEXT=".$OS2_LIBEXT"
959         ;;
960         powerpc-*-darwin* )
961             SO_SUFFIX="dylib"
962             SO_SUFFIX_MODULE="bundle"
963         ;;
964     esac
965
966     if test "x$DLLIMP_SUFFIX" = "x" ; then
967         DLLIMP_SUFFIX="$SO_SUFFIX"
968     fi
969
970     AC_SUBST(SO_SUFFIX)
971     AC_SUBST(SO_SUFFIX_MODULE)
972     AC_SUBST(DLLIMP_SUFFIX)
973     AC_SUBST(EXEEXT)
974     AC_SUBST(LIBPREFIX)
975     AC_SUBST(LIBEXT)
976     AC_SUBST(DLLPREFIX)
977     AC_SUBST(DLLPREFIX_MODULE)
978 ])
979
980
981 dnl ---------------------------------------------------------------------------
982 dnl AC_BAKEFILE_SHARED_LD
983 dnl
984 dnl Detects command for making shared libraries, substitutes SHARED_LD_CC
985 dnl and SHARED_LD_CXX.
986 dnl ---------------------------------------------------------------------------
987
988 AC_DEFUN([AC_BAKEFILE_SHARED_LD],
989 [
990     dnl the extra compiler flags needed for compilation of shared library
991     PIC_FLAG=""
992     if test "x$GCC" = "xyes"; then
993         dnl the switch for gcc is the same under all platforms
994         PIC_FLAG="-fPIC"
995     fi
996     
997     dnl Defaults for GCC and ELF .so shared libs:
998     SHARED_LD_CC="\$(CC) -shared ${PIC_FLAG} -o"
999     SHARED_LD_CXX="\$(CXX) -shared ${PIC_FLAG} -o"
1000
1001     case "${BAKEFILE_HOST}" in
1002       *-hp-hpux* )
1003         dnl default settings are good for gcc but not for the native HP-UX
1004         if test "x$GCC" != "xyes"; then
1005             dnl no idea why it wants it, but it does
1006             LDFLAGS="$LDFLAGS -L/usr/lib"
1007
1008             SHARED_LD_CC="${CC} -b -o"
1009             SHARED_LD_CXX="${CXX} -b -o"
1010             PIC_FLAG="+Z"
1011         fi
1012       ;;
1013
1014       *-*-linux* )
1015         if test "x$GCC" != "xyes"; then
1016             AC_CACHE_CHECK([for Intel compiler], bakefile_cv_prog_icc,
1017             [
1018                 AC_TRY_COMPILE([],
1019                     [
1020                         #ifndef __INTEL_COMPILER
1021                         #error Not icc
1022                         #endif
1023                     ],
1024                     bakefile_cv_prog_icc=yes,
1025                     bakefile_cv_prog_icc=no
1026                 )
1027             ])
1028             if test "$bakefile_cv_prog_icc" = "yes"; then
1029                 PIC_FLAG="-KPIC"
1030             fi
1031         fi
1032       ;;
1033
1034       *-*-solaris2* )
1035         if test "x$GCC" != xyes ; then
1036             SHARED_LD_CC="${CC} -G -o"
1037             SHARED_LD_CXX="${CXX} -G -o"
1038             PIC_FLAG="-KPIC"
1039         fi
1040       ;;
1041
1042       *-*-darwin* )
1043         dnl Most apps benefit from being fully binded (its faster and static
1044         dnl variables initialized at startup work).
1045         dnl This can be done either with the exe linker flag -Wl,-bind_at_load
1046         dnl or with a double stage link in order to create a single module
1047         dnl "-init _wxWindowsDylibInit" not useful with lazy linking solved
1048
1049         dnl If using newer dev tools then there is a -single_module flag that
1050         dnl we can use to do this, otherwise we'll need to use a helper
1051         dnl script.  Check the version of gcc to see which way we can go:
1052         AC_CACHE_CHECK([for gcc 3.1 or later], wx_cv_gcc31, [
1053            AC_TRY_COMPILE([],
1054                [
1055                    #if (__GNUC__ < 3) || \
1056                        ((__GNUC__ == 3) && (__GNUC_MINOR__ < 1))
1057                        #error old gcc
1058                    #endif
1059                ],
1060                [
1061                    wx_cv_gcc31=yes
1062                ],
1063                [
1064                    wx_cv_gcc31=no
1065                ]
1066            )
1067         ])
1068         if test "$wx_cv_gcc31" = "no"; then
1069             AC_BAKEFILE_CREATE_FILE_SHARED_LD_SH
1070             chmod +x shared-ld-sh
1071
1072             dnl Use the shared-ld-sh helper script
1073             SHARED_LD_CC="`pwd`/shared-ld-sh -dynamiclib -headerpad_max_install_names -o"
1074             SHARED_LD_MODULE_CC="`pwd`/shared-ld-sh -bundle -headerpad_max_install_names -o"
1075             SHARED_LD_CXX="$SHARED_LD_CC"
1076             SHARED_LD_MODULE_CXX="$SHARED_LD_MODULE_CC"
1077         else
1078             dnl Use the -single_module flag and let the linker do it for us
1079             SHARED_LD_CC="\${CC} -dynamiclib -single_module -headerpad_max_install_names -o"
1080             SHARED_LD_MODULE_CC="\${CC} -bundle -single_module -headerpad_max_install_names -o"
1081             SHARED_LD_CXX="\${CXX} -dynamiclib -single_module -headerpad_max_install_names -o"
1082             SHARED_LD_MODULE_CXX="\${CXX} -bundle -single_module -headerpad_max_install_names -o"
1083         fi
1084
1085         PIC_FLAG="-dynamic -fPIC"
1086       ;;
1087
1088       *-*-aix* )
1089         dnl default settings are ok for gcc
1090         if test "x$GCC" != "xyes"; then
1091             dnl the abs path below used to be hardcoded here so I guess it must
1092             dnl be some sort of standard location under AIX?
1093             AC_CHECK_PROG(AIX_CXX_LD, makeC++SharedLib,
1094                           makeC++SharedLib, /usr/lpp/xlC/bin/makeC++SharedLib)
1095             dnl FIXME - what about makeCSharedLib?            
1096             SHARED_LD_CC="$AIX_CC_LD -p 0 -o"
1097             SHARED_LD_CXX="$AIX_CXX_LD -p 0 -o"
1098         fi
1099       ;;
1100
1101       *-*-beos* )
1102         dnl can't use gcc under BeOS for shared library creation because it
1103         dnl complains about missing 'main'
1104         SHARED_LD_CC="${LD} -nostart -o"
1105         SHARED_LD_CXX="${LD} -nostart -o"
1106       ;;
1107
1108       *-*-irix* )
1109         dnl default settings are ok for gcc
1110         if test "x$GCC" != "xyes"; then
1111             PIC_FLAG="-KPIC"
1112         fi
1113       ;;
1114       
1115       *-*-cygwin* | *-*-mingw32* )
1116         PIC_FLAG=""
1117         SHARED_LD_CC="\$(CC) -shared -o"
1118         SHARED_LD_CXX="\$(CXX) -shared -o"
1119       ;;
1120
1121       *-pc-os2_emx | *-pc-os2-emx )
1122         SHARED_LD_CC="`pwd`/dllar.sh -libf INITINSTANCE -libf TERMINSTANCE -o"
1123         SHARED_LD_CXX="`pwd`/dllar.sh -libf INITINSTANCE -libf TERMINSTANCE -o"
1124         PIC_FLAG=""
1125         AC_BAKEFILE_CREATE_FILE_DLLAR_SH
1126         chmod +x dllar.sh
1127       ;;
1128       
1129       powerpc-apple-macos* | \
1130       *-*-freebsd* | *-*-openbsd* | *-*-netbsd* | \
1131       *-*-sunos4* | \
1132       *-*-osf* | \
1133       *-*-dgux5* | \
1134       *-*-sysv5* )
1135         dnl defaults are ok
1136       ;;
1137
1138       *)
1139         AC_MSG_ERROR(unknown system type $BAKEFILE_HOST.)
1140     esac
1141
1142     if test "x$PIC_FLAG" != "x" ; then
1143         PIC_FLAG="$PIC_FLAG -DPIC"
1144     fi
1145
1146     if test "x$SHARED_LD_MODULE_CC" = "x" ; then
1147         SHARED_LD_MODULE_CC="$SHARED_LD_CC"
1148     fi
1149     if test "x$SHARED_LD_MODULE_CXX" = "x" ; then
1150         SHARED_LD_MODULE_CXX="$SHARED_LD_CXX"
1151     fi
1152
1153     AC_SUBST(SHARED_LD_CC)
1154     AC_SUBST(SHARED_LD_CXX)
1155     AC_SUBST(SHARED_LD_MODULE_CC)
1156     AC_SUBST(SHARED_LD_MODULE_CXX)
1157     AC_SUBST(PIC_FLAG)
1158 ])
1159
1160
1161 dnl ---------------------------------------------------------------------------
1162 dnl AC_BAKEFILE_SHARED_VERSIONS
1163 dnl
1164 dnl Detects linker options for attaching versions (sonames) to shared  libs.
1165 dnl ---------------------------------------------------------------------------
1166
1167 AC_DEFUN([AC_BAKEFILE_SHARED_VERSIONS],
1168 [
1169     USE_SOVERSION=0
1170     USE_SOVERLINUX=0
1171     USE_SOVERSOLARIS=0
1172     USE_SOSYMLINKS=0
1173     USE_MACVERSION=0
1174     SONAME_FLAG=
1175
1176     case "${BAKEFILE_HOST}" in
1177       *-*-linux* | *-*-freebsd* )
1178         SONAME_FLAG="-Wl,-soname,"
1179         USE_SOVERSION=1
1180         USE_SOVERLINUX=1
1181         USE_SOSYMLINKS=1
1182       ;;
1183
1184       *-*-solaris2* )
1185         SONAME_FLAG="-h "
1186         USE_SOVERSION=1
1187         USE_SOVERSOLARIS=1
1188         USE_SOSYMLINKS=1
1189       ;;
1190
1191       *-*-darwin* )
1192         USE_MACVERSION=1
1193         USE_SOVERSION=1
1194         USE_SOSYMLINKS=1
1195       ;;      
1196     esac
1197
1198     AC_SUBST(USE_SOVERSION)
1199     AC_SUBST(USE_SOVERLINUX)
1200     AC_SUBST(USE_SOVERSOLARIS)
1201     AC_SUBST(USE_MACVERSION)
1202     AC_SUBST(USE_SOSYMLINKS)
1203     AC_SUBST(SONAME_FLAG)
1204 ])
1205
1206
1207 dnl ---------------------------------------------------------------------------
1208 dnl AC_BAKEFILE_DEPS
1209 dnl
1210 dnl Detects available C/C++ dependency tracking options
1211 dnl ---------------------------------------------------------------------------
1212
1213 AC_DEFUN([AC_BAKEFILE_DEPS],
1214 [
1215     AC_MSG_CHECKING([for dependency tracking method])
1216     DEPS_TRACKING=0
1217
1218     if test "x$GCC" = "xyes"; then
1219         DEPSMODE=gcc
1220         DEPS_TRACKING=1
1221         case "${BAKEFILE_HOST}" in
1222             powerpc-*-darwin* )
1223                 dnl -cpp-precomp (the default) conflicts with -MMD option
1224                 dnl used by bk-deps (see also http://developer.apple.com/documentation/Darwin/Conceptual/PortingUnix/compiling/chapter_4_section_3.html)
1225                 DEPSFLAG_GCC="-no-cpp-precomp -MMD"
1226             ;;
1227             * )
1228                 DEPSFLAG_GCC="-MMD"
1229             ;;
1230         esac
1231         AC_MSG_RESULT([gcc])
1232     elif test "x$MWCC" = "xyes"; then
1233         DEPSMODE=mwcc
1234         DEPS_TRACKING=1
1235         DEPSFLAG_MWCC="-MM"
1236         AC_MSG_RESULT([mwcc])
1237     else
1238         AC_MSG_RESULT([none])
1239     fi
1240
1241     if test $DEPS_TRACKING = 1 ; then
1242         AC_BAKEFILE_CREATE_FILE_BK_DEPS
1243         chmod +x bk-deps
1244     fi
1245     
1246     AC_SUBST(DEPS_TRACKING)
1247 ])
1248
1249 dnl ---------------------------------------------------------------------------
1250 dnl AC_BAKEFILE_CHECK_BASIC_STUFF
1251 dnl
1252 dnl Checks for presence of basic programs, such as C and C++ compiler, "ranlib"
1253 dnl or "install"
1254 dnl ---------------------------------------------------------------------------
1255
1256 AC_DEFUN([AC_BAKEFILE_CHECK_BASIC_STUFF],
1257 [
1258     AC_PROG_RANLIB
1259     AC_PROG_INSTALL
1260     AC_PROG_LN_S
1261
1262     AC_PROG_MAKE_SET
1263     AC_SUBST(MAKE_SET)
1264     
1265     AC_CHECK_TOOL(AR, ar, ar)
1266     AC_CHECK_TOOL(STRIP, strip, :)
1267     AC_CHECK_TOOL(NM, nm, :)
1268
1269     case ${BAKEFILE_HOST} in
1270         *-hp-hpux* )
1271             dnl HP-UX install doesn't handle the "-d" switch so don't
1272             dnl use it there
1273             INSTALL_DIR="mkdir -p"
1274             ;;
1275         *)  INSTALL_DIR="$INSTALL -d"
1276             ;;
1277     esac
1278     AC_SUBST(INSTALL_DIR)
1279
1280     LDFLAGS_GUI=
1281     case ${BAKEFILE_HOST} in
1282         *-*-cygwin* | *-*-mingw32* )
1283         LDFLAGS_GUI="-mwindows"
1284     esac
1285     AC_SUBST(LDFLAGS_GUI)
1286 ])
1287
1288
1289 dnl ---------------------------------------------------------------------------
1290 dnl AC_BAKEFILE_RES_COMPILERS
1291 dnl
1292 dnl Checks for presence of resource compilers for win32 or mac
1293 dnl ---------------------------------------------------------------------------
1294
1295 AC_DEFUN([AC_BAKEFILE_RES_COMPILERS],
1296 [
1297     RESCOMP=
1298     SETFILE=
1299
1300     case ${BAKEFILE_HOST} in 
1301         *-*-cygwin* | *-*-mingw32* )
1302             dnl Check for win32 resources compiler:
1303             if test "$build" != "$host" ; then
1304                 RESCOMP=$host_alias-windres
1305             else
1306                 AC_CHECK_PROG(RESCOMP, windres, windres, windres)
1307             fi
1308          ;;
1309  
1310       *-*-darwin* | powerpc-apple-macos* )
1311             AC_CHECK_PROG(RESCOMP, Rez, Rez, /Developer/Tools/Rez)
1312             AC_CHECK_PROG(SETFILE, SetFile, SetFile, /Developer/Tools/SetFile)
1313         ;;
1314     esac
1315
1316     AC_SUBST(RESCOMP)
1317     AC_SUBST(SETFILE)
1318 ])
1319
1320 dnl ---------------------------------------------------------------------------
1321 dnl AC_BAKEFILE_PRECOMP_HEADERS
1322 dnl
1323 dnl Check for precompiled headers support (GCC >= 3.4)
1324 dnl ---------------------------------------------------------------------------
1325
1326 AC_DEFUN([AC_BAKEFILE_PRECOMP_HEADERS],
1327 [
1328
1329     AC_ARG_ENABLE([precomp-headers],
1330                   AS_HELP_STRING([--disable-precomp-headers],
1331                                  [don't use precompiled headers even if compiler can]),
1332                   [bk_use_pch="$enableval"])
1333
1334     GCC_PCH=0
1335
1336     if test "x$bk_use_pch" = "x" -o "x$bk_use_pch" = "xyes" ; then
1337         if test "x$GCC" = "xyes"; then
1338             dnl test if we have gcc-3.4:
1339             AC_MSG_CHECKING([if the compiler supports precompiled headers])
1340             AC_TRY_COMPILE([],
1341                 [
1342                     #if !defined(__GNUC__) || !defined(__GNUC_MINOR__)
1343                         #error "no pch support"
1344                     #endif
1345                     #if (__GNUC__ < 3)
1346                         #error "no pch support"
1347                     #endif
1348                     #if (__GNUC__ == 3) && \
1349                        ((!defined(__APPLE_CC__) && (__GNUC_MINOR__ < 4)) || \
1350                        ( defined(__APPLE_CC__) && (__GNUC_MINOR__ < 3)))
1351                         #error "no pch support"
1352                     #endif
1353                 ],
1354                 [
1355                     AC_MSG_RESULT([yes])
1356                     GCC_PCH=1
1357                 ],
1358                 [
1359                     AC_MSG_RESULT([no])
1360                 ])
1361             if test $GCC_PCH = 1 ; then
1362                 AC_BAKEFILE_CREATE_FILE_BK_MAKE_PCH
1363                 chmod +x bk-make-pch
1364             fi
1365         fi
1366     fi
1367
1368     AC_SUBST(GCC_PCH)
1369 ])
1370
1371
1372
1373 dnl ---------------------------------------------------------------------------
1374 dnl AC_BAKEFILE([autoconf_inc.m4 inclusion])
1375 dnl
1376 dnl To be used in configure.in of any project using Bakefile-generated mks
1377 dnl
1378 dnl Behaviour can be modified by setting following variables:
1379 dnl    BAKEFILE_CHECK_BASICS    set to "no" if you don't want bakefile to
1380 dnl                             to perform check for basic tools like ranlib
1381 dnl    BAKEFILE_HOST            set this to override host detection, defaults
1382 dnl                             to ${host}
1383 dnl    BAKEFILE_FORCE_PLATFORM  set to override platform detection
1384 dnl
1385 dnl Example usage:
1386 dnl
1387 dnl   AC_BAKEFILE([FOO(autoconf_inc.m4)])
1388 dnl
1389 dnl (replace FOO with m4_include above, aclocal would die otherwise)
1390 dnl (yes, it's ugly, but thanks to a bug in aclocal, it's the only thing
1391 dnl we can do...)
1392 dnl ---------------------------------------------------------------------------
1393
1394 AC_DEFUN([AC_BAKEFILE],
1395 [
1396     AC_PREREQ(2.58)
1397
1398     if test "x$BAKEFILE_HOST" = "x"; then
1399         BAKEFILE_HOST="${host}"
1400     fi
1401
1402     if test "x$BAKEFILE_CHECK_BASICS" != "xno"; then
1403         AC_BAKEFILE_CHECK_BASIC_STUFF
1404     fi
1405     AC_BAKEFILE_GNUMAKE
1406     AC_BAKEFILE_PLATFORM
1407     AC_BAKEFILE_PLATFORM_SPECIFICS
1408     AC_BAKEFILE_SUFFIXES
1409     AC_BAKEFILE_SHARED_LD
1410     AC_BAKEFILE_SHARED_VERSIONS
1411     AC_BAKEFILE_DEPS
1412     AC_BAKEFILE_RES_COMPILERS
1413
1414     BAKEFILE_BAKEFILE_M4_VERSION="0.1.7"
1415    
1416     dnl includes autoconf_inc.m4:
1417     $1
1418     
1419     if test "$BAKEFILE_BAKEFILE_M4_VERSION" != "$BAKEFILE_AUTOCONF_INC_M4_VERSION" ; then
1420         AC_MSG_ERROR([Versions of Bakefile used to generate makefiles ($BAKEFILE_AUTOCONF_INC_M4_VERSION) and configure ($BAKEFILE_BAKEFILE_M4_VERSION) do not match.])
1421     fi
1422 ])
1423         
1424
1425 dnl ---------------------------------------------------------------------------
1426 dnl              Embedded copies of helper scripts follow:
1427 dnl ---------------------------------------------------------------------------
1428
1429 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_DLLAR_SH],
1430 [
1431 dnl ===================== dllar.sh begins here =====================
1432 dnl    (Created by merge-scripts.py from dllar.sh
1433 dnl     file do not edit here!)
1434 D='$'
1435 cat <<EOF >dllar.sh
1436 #!/bin/sh
1437 #
1438 # dllar - a tool to build both a .dll and an .a file
1439 # from a set of object (.o) files for EMX/OS2.
1440 #
1441 #  Written by Andrew Zabolotny, bit@freya.etu.ru
1442 #  Ported to Unix like shell by Stefan Neis, Stefan.Neis@t-online.de
1443 #
1444 #  This script will accept a set of files on the command line.
1445 #  All the public symbols from the .o files will be exported into
1446 #  a .DEF file, then linker will be run (through gcc) against them to
1447 #  build a shared library consisting of all given .o files. All libraries
1448 #  (.a) will be first decompressed into component .o files then act as
1449 #  described above. You can optionally give a description (-d "description")
1450 #  which will be put into .DLL. To see the list of accepted options (as well
1451 #  as command-line format) simply run this program without options. The .DLL
1452 #  is built to be imported by name (there is no guarantee that new versions
1453 #  of the library you build will have same ordinals for same symbols).
1454 #
1455 #  dllar is free software; you can redistribute it and/or modify
1456 #  it under the terms of the GNU General Public License as published by
1457 #  the Free Software Foundation; either version 2, or (at your option)
1458 #  any later version.
1459 #
1460 #  dllar is distributed in the hope that it will be useful,
1461 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
1462 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1463 #  GNU General Public License for more details.
1464 #
1465 #  You should have received a copy of the GNU General Public License
1466 #  along with dllar; see the file COPYING.  If not, write to the Free
1467 #  Software Foundation, 59 Temple Place - Suite 330, Boston, MA
1468 #  02111-1307, USA.
1469
1470 # To successfuly run this program you will need:
1471 #  - Current drive should have LFN support (HPFS, ext2, network, etc)
1472 #    (Sometimes dllar generates filenames which won't fit 8.3 scheme)
1473 #  - gcc
1474 #    (used to build the .dll)
1475 #  - emxexp
1476 #    (used to create .def file from .o files)
1477 #  - emximp
1478 #    (used to create .a file from .def file)
1479 #  - GNU text utilites (cat, sort, uniq)
1480 #    used to process emxexp output
1481 #  - GNU file utilities (mv, rm)
1482 #  - GNU sed
1483 #  - lxlite (optional, see flag below)
1484 #    (used for general .dll cleanup)
1485 #
1486
1487 flag_USE_LXLITE=1;
1488
1489 #
1490 # helper functions
1491 # basnam, variant of basename, which does _not_ remove the path, _iff_
1492 #                              second argument (suffix to remove) is given
1493 basnam(){
1494     case ${D}# in
1495     1)
1496         echo ${D}1 | sed 's/.*\\///' | sed 's/.*\\\\//'
1497         ;;
1498     2)
1499         echo ${D}1 | sed 's/'${D}2'${D}//'
1500         ;;
1501     *)
1502         echo "error in basnam ${D}*"
1503         exit 8
1504         ;;
1505     esac
1506 }
1507
1508 # Cleanup temporary files and output
1509 CleanUp() {
1510     cd ${D}curDir
1511     for i in ${D}inputFiles ; do
1512         case ${D}i in
1513         *!)
1514             rm -rf \`basnam ${D}i !\`
1515             ;;
1516         *)
1517             ;;
1518         esac
1519     done
1520
1521     # Kill result in case of failure as there is just to many stupid make/nmake
1522     # things out there which doesn't do this.
1523     if @<:@ ${D}# -eq 0 @:>@; then
1524         rm -f ${D}arcFile ${D}arcFile2 ${D}defFile ${D}dllFile
1525     fi
1526 }
1527
1528 # Print usage and exit script with rc=1.
1529 PrintHelp() {
1530  echo 'Usage: dllar.sh @<:@-o@<:@utput@:>@ output_file@:>@ @<:@-i@<:@mport@:>@ importlib_name@:>@'
1531  echo '       @<:@-name-mangler-script script.sh@:>@'
1532  echo '       @<:@-d@<:@escription@:>@ "dll descrption"@:>@ @<:@-cc "CC"@:>@ @<:@-f@<:@lags@:>@ "CFLAGS"@:>@'
1533  echo '       @<:@-ord@<:@inals@:>@@:>@ -ex@<:@clude@:>@ "symbol(s)"'
1534  echo '       @<:@-libf@<:@lags@:>@ "{INIT|TERM}{GLOBAL|INSTANCE}"@:>@ @<:@-nocrt@<:@dll@:>@@:>@ @<:@-nolxl@<:@ite@:>@@:>@'
1535  echo '       @<:@*.o@:>@ @<:@*.a@:>@'
1536  echo '*> "output_file" should have no extension.'
1537  echo '   If it has the .o, .a or .dll extension, it is automatically removed.'
1538  echo '   The import library name is derived from this and is set to "name".a,'
1539  echo '   unless overridden by -import'
1540  echo '*> "importlib_name" should have no extension.'
1541  echo '   If it has the .o, or .a extension, it is automatically removed.'
1542  echo '   This name is used as the import library name and may be longer and'
1543  echo '   more descriptive than the DLL name which has to follow the old '
1544  echo '   8.3 convention of FAT.'
1545  echo '*> "script.sh may be given to override the output_file name by a'
1546  echo '   different name. It is mainly useful if the regular make process'
1547  echo '   of some package does not take into account OS/2 restriction of'
1548  echo '   DLL name lengths. It takes the importlib name as input and is'
1549  echo '   supposed to procude a shorter name as output. The script should'
1550  echo '   expect to get importlib_name without extension and should produce'
1551  echo '   a (max.) 8 letter name without extension.'
1552  echo '*> "cc" is used to use another GCC executable.   (default: gcc.exe)'
1553  echo '*> "flags" should be any set of valid GCC flags. (default: -s -Zcrtdll)'
1554  echo '   These flags will be put at the start of GCC command line.'
1555  echo '*> -ord@<:@inals@:>@ tells dllar to export entries by ordinals. Be careful.'
1556  echo '*> -ex@<:@clude@:>@ defines symbols which will not be exported. You can define'
1557  echo '   multiple symbols, for example -ex "myfunc yourfunc _GLOBAL*".'
1558  echo '   If the last character of a symbol is "*", all symbols beginning'
1559  echo '   with the prefix before "*" will be exclude, (see _GLOBAL* above).'
1560  echo '*> -libf@<:@lags@:>@ can be used to add INITGLOBAL/INITINSTANCE and/or'
1561  echo '   TERMGLOBAL/TERMINSTANCE flags to the dynamically-linked library.'
1562  echo '*> -nocrt@<:@dll@:>@ switch will disable linking the library against emx''s'
1563  echo '   C runtime DLLs.'
1564  echo '*> -nolxl@<:@ite@:>@ switch will disable running lxlite on the resulting DLL.'
1565  echo '*> All other switches (for example -L./ or -lmylib) will be passed'
1566  echo '   unchanged to GCC at the end of command line.'
1567  echo '*> If you create a DLL from a library and you do not specify -o,'
1568  echo '   the basename for DLL and import library will be set to library name,'
1569  echo '   the initial library will be renamed to 'name'_s.a (_s for static)'
1570  echo '   i.e. "dllar gcc.a" will create gcc.dll and gcc.a, and the initial'
1571  echo '   library will be renamed into gcc_s.a.'
1572  echo '--------'
1573  echo 'Example:'
1574  echo '   dllar -o gcc290.dll libgcc.a -d "GNU C runtime library" -ord'
1575  echo '    -ex "__main __ctordtor*" -libf "INITINSTANCE TERMINSTANCE"'
1576  CleanUp
1577  exit 1
1578 }
1579
1580 # Execute a command.
1581 # If exit code of the commnad <> 0 CleanUp() is called and we'll exit the script.
1582 # @Uses    Whatever CleanUp() uses.
1583 doCommand() {
1584     echo "${D}*"
1585     eval ${D}*
1586     rcCmd=${D}?
1587
1588     if @<:@ ${D}rcCmd -ne 0 @:>@; then
1589         echo "command failed, exit code="${D}rcCmd
1590         CleanUp
1591         exit ${D}rcCmd
1592     fi
1593 }
1594
1595 # main routine
1596 # setup globals
1597 cmdLine=${D}*
1598 outFile=""
1599 outimpFile=""
1600 inputFiles=""
1601 renameScript=""
1602 description=""
1603 CC=gcc.exe
1604 CFLAGS="-s -Zcrtdll"
1605 EXTRA_CFLAGS=""
1606 EXPORT_BY_ORDINALS=0
1607 exclude_symbols=""
1608 library_flags=""
1609 curDir=\`pwd\`
1610 curDirS=curDir
1611 case ${D}curDirS in
1612 */)
1613   ;;
1614 *)
1615   curDirS=${D}{curDirS}"/"
1616   ;;
1617 esac
1618 # Parse commandline
1619 libsToLink=0
1620 omfLinking=0
1621 while @<:@ ${D}1 @:>@; do
1622     case ${D}1 in
1623     -ord*)
1624         EXPORT_BY_ORDINALS=1;
1625         ;;
1626     -o*)
1627         shift
1628         outFile=${D}1
1629         ;;
1630     -i*)
1631         shift
1632         outimpFile=${D}1
1633         ;;
1634     -name-mangler-script)
1635         shift
1636         renameScript=${D}1
1637         ;;
1638     -d*)
1639         shift
1640         description=${D}1
1641         ;;
1642     -f*)
1643         shift
1644         CFLAGS=${D}1
1645         ;;
1646     -c*)
1647         shift
1648         CC=${D}1
1649         ;;
1650     -h*)
1651         PrintHelp
1652         ;;
1653     -ex*)
1654         shift
1655         exclude_symbols=${D}{exclude_symbols}${D}1" "
1656         ;;
1657     -libf*)
1658         shift
1659         library_flags=${D}{library_flags}${D}1" "
1660         ;;
1661     -nocrt*)
1662         CFLAGS="-s"
1663         ;;
1664     -nolxl*)
1665         flag_USE_LXLITE=0
1666         ;;
1667     -* | /*)
1668         case ${D}1 in
1669         -L* | -l*)
1670             libsToLink=1
1671             ;;
1672         -Zomf)
1673             omfLinking=1
1674             ;;
1675         *)
1676             ;;
1677         esac
1678         EXTRA_CFLAGS=${D}{EXTRA_CFLAGS}" "${D}1
1679         ;;
1680     *.dll)
1681         EXTRA_CFLAGS="${D}{EXTRA_CFLAGS} \`basnam ${D}1 .dll\`"
1682         if @<:@ ${D}omfLinking -eq 1 @:>@; then
1683             EXTRA_CFLAGS="${D}{EXTRA_CFLAGS}.lib"
1684         else
1685             EXTRA_CFLAGS="${D}{EXTRA_CFLAGS}.a"
1686         fi
1687         ;;
1688     *)
1689         found=0;
1690         if @<:@ ${D}libsToLink -ne 0 @:>@; then
1691             EXTRA_CFLAGS=${D}{EXTRA_CFLAGS}" "${D}1
1692         else
1693             for file in ${D}1 ; do
1694                 if @<:@ -f ${D}file @:>@; then
1695                     inputFiles="${D}{inputFiles} ${D}file"
1696                     found=1
1697                 fi
1698             done
1699             if @<:@ ${D}found -eq 0 @:>@; then
1700                 echo "ERROR: No file(s) found: "${D}1
1701                 exit 8
1702             fi
1703         fi
1704       ;;
1705     esac
1706     shift
1707 done # iterate cmdline words
1708
1709 #
1710 if @<:@ -z "${D}inputFiles" @:>@; then
1711     echo "dllar: no input files"
1712     PrintHelp
1713 fi
1714
1715 # Now extract all .o files from .a files
1716 newInputFiles=""
1717 for file in ${D}inputFiles ; do
1718     case ${D}file in
1719     *.a | *.lib)
1720         case ${D}file in
1721         *.a)
1722             suffix=".a"
1723             AR="ar"
1724             ;;
1725         *.lib)
1726             suffix=".lib"
1727             AR="emxomfar"
1728             EXTRA_CFLAGS="${D}EXTRA_CFLAGS -Zomf"
1729             ;;
1730         *)
1731             ;;
1732         esac
1733         dirname=\`basnam ${D}file ${D}suffix\`"_%"
1734         mkdir ${D}dirname
1735         if @<:@ ${D}? -ne 0 @:>@; then
1736             echo "Failed to create subdirectory ./${D}dirname"
1737             CleanUp
1738             exit 8;
1739         fi
1740         # Append '!' to indicate archive
1741         newInputFiles="${D}newInputFiles ${D}{dirname}!"
1742         doCommand "cd ${D}dirname; ${D}AR x ../${D}file"
1743         cd ${D}curDir
1744         found=0;
1745         for subfile in ${D}dirname/*.o* ; do
1746             if @<:@ -f ${D}subfile @:>@; then
1747                 found=1
1748                 if @<:@ -s ${D}subfile @:>@; then
1749                     # FIXME: This should be: is file size > 32 byte, _not_ > 0!
1750                     newInputFiles="${D}newInputFiles ${D}subfile"
1751                 fi
1752             fi
1753         done
1754         if @<:@ ${D}found -eq 0 @:>@; then
1755             echo "WARNING: there are no files in archive \\'${D}file\\'"
1756         fi
1757         ;;
1758     *)
1759         newInputFiles="${D}{newInputFiles} ${D}file"
1760         ;;
1761     esac
1762 done
1763 inputFiles="${D}newInputFiles"
1764
1765 # Output filename(s).
1766 do_backup=0;
1767 if @<:@ -z ${D}outFile @:>@; then
1768     do_backup=1;
1769     set outFile ${D}inputFiles; outFile=${D}2
1770 fi
1771
1772 # If it is an archive, remove the '!' and the '_%' suffixes
1773 case ${D}outFile in
1774 *_%!)
1775     outFile=\`basnam ${D}outFile _%!\`
1776     ;;
1777 *)
1778     ;;
1779 esac
1780 case ${D}outFile in
1781 *.dll)
1782     outFile=\`basnam ${D}outFile .dll\`
1783     ;;
1784 *.DLL)
1785     outFile=\`basnam ${D}outFile .DLL\`
1786     ;;
1787 *.o)
1788     outFile=\`basnam ${D}outFile .o\`
1789     ;;
1790 *.obj)
1791     outFile=\`basnam ${D}outFile .obj\`
1792     ;;
1793 *.a)
1794     outFile=\`basnam ${D}outFile .a\`
1795     ;;
1796 *.lib)
1797     outFile=\`basnam ${D}outFile .lib\`
1798     ;;
1799 *)
1800     ;;
1801 esac
1802 case ${D}outimpFile in
1803 *.a)
1804     outimpFile=\`basnam ${D}outimpFile .a\`
1805     ;;
1806 *.lib)
1807     outimpFile=\`basnam ${D}outimpFile .lib\`
1808     ;;
1809 *)
1810     ;;
1811 esac
1812 if @<:@ -z ${D}outimpFile @:>@; then
1813     outimpFile=${D}outFile
1814 fi
1815 defFile="${D}{outFile}.def"
1816 arcFile="${D}{outimpFile}.a"
1817 arcFile2="${D}{outimpFile}.lib"
1818
1819 #create ${D}dllFile as something matching 8.3 restrictions,
1820 if @<:@ -z ${D}renameScript @:>@ ; then
1821     dllFile="${D}outFile"
1822 else
1823     dllFile=\`${D}renameScript ${D}outimpFile\`
1824 fi
1825
1826 if @<:@ ${D}do_backup -ne 0 @:>@ ; then
1827     if @<:@ -f ${D}arcFile @:>@ ; then
1828         doCommand "mv ${D}arcFile ${D}{outFile}_s.a"
1829     fi
1830     if @<:@ -f ${D}arcFile2 @:>@ ; then
1831         doCommand "mv ${D}arcFile2 ${D}{outFile}_s.lib"
1832     fi
1833 fi
1834
1835 # Extract public symbols from all the object files.
1836 tmpdefFile=${D}{defFile}_%
1837 rm -f ${D}tmpdefFile
1838 for file in ${D}inputFiles ; do
1839     case ${D}file in
1840     *!)
1841         ;;
1842     *)
1843         doCommand "emxexp -u ${D}file >> ${D}tmpdefFile"
1844         ;;
1845     esac
1846 done
1847
1848 # Create the def file.
1849 rm -f ${D}defFile
1850 echo "LIBRARY \`basnam ${D}dllFile\` ${D}library_flags" >> ${D}defFile
1851 dllFile="${D}{dllFile}.dll"
1852 if @<:@ ! -z ${D}description @:>@; then
1853     echo "DESCRIPTION  \\"${D}{description}\\"" >> ${D}defFile
1854 fi
1855 echo "EXPORTS" >> ${D}defFile
1856
1857 doCommand "cat ${D}tmpdefFile | sort.exe | uniq.exe > ${D}{tmpdefFile}%"
1858 grep -v "^ *;" < ${D}{tmpdefFile}% | grep -v "^ *${D}" >${D}tmpdefFile
1859
1860 # Checks if the export is ok or not.
1861 for word in ${D}exclude_symbols; do
1862     grep -v ${D}word < ${D}tmpdefFile >${D}{tmpdefFile}%
1863     mv ${D}{tmpdefFile}% ${D}tmpdefFile
1864 done
1865
1866
1867 if @<:@ ${D}EXPORT_BY_ORDINALS -ne 0 @:>@; then
1868     sed "=" < ${D}tmpdefFile | \\
1869     sed '
1870       N
1871       : loop
1872       s/^\\(@<:@0-9@:>@\\+\\)\\(@<:@^;@:>@*\\)\\(;.*\\)\\?/\\2 @\\1 NONAME/
1873       t loop
1874     ' > ${D}{tmpdefFile}%
1875     grep -v "^ *${D}" < ${D}{tmpdefFile}% > ${D}tmpdefFile
1876 else
1877     rm -f ${D}{tmpdefFile}%
1878 fi
1879 cat ${D}tmpdefFile >> ${D}defFile
1880 rm -f ${D}tmpdefFile
1881
1882 # Do linking, create implib, and apply lxlite.
1883 gccCmdl="";
1884 for file in ${D}inputFiles ; do
1885     case ${D}file in
1886     *!)
1887         ;;
1888     *)
1889         gccCmdl="${D}gccCmdl ${D}file"
1890         ;;
1891     esac
1892 done
1893 doCommand "${D}CC ${D}CFLAGS -Zdll -o ${D}dllFile ${D}defFile ${D}gccCmdl ${D}EXTRA_CFLAGS"
1894 touch "${D}{outFile}.dll"
1895
1896 doCommand "emximp -o ${D}arcFile ${D}defFile"
1897 if @<:@ ${D}flag_USE_LXLITE -ne 0 @:>@; then
1898     add_flags="";
1899     if @<:@ ${D}EXPORT_BY_ORDINALS -ne 0 @:>@; then
1900         add_flags="-ynd"
1901     fi
1902     doCommand "lxlite -cs -t: -mrn -mln ${D}add_flags ${D}dllFile"
1903 fi
1904 doCommand "emxomf -s -l ${D}arcFile"
1905
1906 # Successful exit.
1907 CleanUp 1
1908 exit 0
1909 EOF
1910 dnl ===================== dllar.sh ends here =====================
1911 ])
1912
1913 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_BK_DEPS],
1914 [
1915 dnl ===================== bk-deps begins here =====================
1916 dnl    (Created by merge-scripts.py from bk-deps
1917 dnl     file do not edit here!)
1918 D='$'
1919 cat <<EOF >bk-deps
1920 #!/bin/sh
1921
1922 # This script is part of Bakefile (http://bakefile.sourceforge.net) autoconf
1923 # script. It is used to track C/C++ files dependencies in portable way.
1924 #
1925 # Permission is given to use this file in any way.
1926
1927 DEPSMODE=${DEPSMODE}
1928 DEPSDIR=.deps
1929 DEPSFLAG_GCC="${DEPSFLAG_GCC}"
1930 DEPSFLAG_MWCC="${DEPSFLAG_MWCC}"
1931
1932 mkdir -p ${D}DEPSDIR
1933
1934 if test ${D}DEPSMODE = gcc ; then
1935     ${D}* ${D}{DEPSFLAG_GCC}
1936     status=${D}?
1937     if test ${D}{status} != 0 ; then
1938         exit ${D}{status}
1939     fi
1940     # move created file to the location we want it in:
1941     while test ${D}# -gt 0; do
1942         case "${D}1" in
1943             -o )
1944                 shift
1945                 objfile=${D}1
1946             ;;
1947             -* )
1948             ;;
1949             * )
1950                 srcfile=${D}1
1951             ;;
1952         esac
1953         shift
1954     done
1955     depfile=\`basename ${D}srcfile | sed -e 's/\\..*${D}/.d/g'\`
1956     depobjname=\`echo ${D}depfile |sed -e 's/\\.d/.o/g'\`
1957     if test -f ${D}depfile ; then
1958         sed -e "s,${D}depobjname:,${D}objfile:,g" ${D}depfile >${D}{DEPSDIR}/${D}{objfile}.d
1959         rm -f ${D}depfile
1960     else
1961         depfile=\`basename ${D}objfile | sed -e 's/\\..*${D}/.d/g'\`
1962         if test -f ${D}depfile ; then
1963             sed -e "/^${D}objfile/!s,${D}depobjname:,${D}objfile:,g" ${D}depfile >${D}{DEPSDIR}/${D}{objfile}.d
1964             rm -f ${D}depfile
1965         fi
1966     fi
1967     exit 0
1968 elif test ${D}DEPSMODE = mwcc ; then
1969     ${D}*
1970     status=${D}?
1971     if test ${D}{status} != 0 ; then
1972         exit ${D}{status}
1973     fi
1974     # Run mwcc again with -MM and redirect into the dep file we want
1975     # NOTE: We can't use shift here because we need ${D}* to be valid
1976     prevarg=
1977     for arg in ${D}* ; do
1978         if test "${D}prevarg" = "-o"; then
1979             objfile=${D}arg
1980         else
1981             case "${D}arg" in
1982                 -* )
1983                 ;;
1984                 * )
1985                     srcfile=${D}arg
1986                 ;;
1987             esac
1988         fi
1989         prevarg="${D}arg"
1990     done
1991     ${D}* ${D}DEPSFLAG_MWCC >${D}{DEPSDIR}/${D}{objfile}.d
1992     exit 0
1993 else
1994     ${D}*
1995     exit ${D}?
1996 fi
1997 EOF
1998 dnl ===================== bk-deps ends here =====================
1999 ])
2000
2001 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_SHARED_LD_SH],
2002 [
2003 dnl ===================== shared-ld-sh begins here =====================
2004 dnl    (Created by merge-scripts.py from shared-ld-sh
2005 dnl     file do not edit here!)
2006 D='$'
2007 cat <<EOF >shared-ld-sh
2008 #!/bin/sh
2009 #-----------------------------------------------------------------------------
2010 #-- Name:        distrib/mac/shared-ld-sh
2011 #-- Purpose:     Link a mach-o dynamic shared library for Darwin / Mac OS X
2012 #-- Author:      Gilles Depeyrot
2013 #-- Copyright:   (c) 2002 Gilles Depeyrot
2014 #-- Licence:     any use permitted
2015 #-----------------------------------------------------------------------------
2016
2017 verbose=0
2018 args=""
2019 objects=""
2020 linking_flag="-dynamiclib"
2021
2022 while test ${D}# -gt 0; do
2023     case ${D}1 in
2024
2025        -v)
2026         verbose=1
2027         ;;
2028
2029        -o|-compatibility_version|-current_version|-framework|-undefined|-install_name)
2030         # collect these options and values
2031         args="${D}{args} ${D}1 ${D}2"
2032         shift
2033         ;;
2034
2035        -l*|-L*|-flat_namespace|-headerpad_max_install_names)
2036         # collect these options
2037         args="${D}{args} ${D}1"
2038         ;;
2039
2040        -dynamiclib|-bundle)
2041         linking_flag="${D}1"
2042         ;;
2043
2044        -*)
2045         echo "shared-ld: unhandled option '${D}1'"
2046         exit 1
2047         ;;
2048
2049         *.o | *.a | *.dylib)
2050         # collect object files
2051         objects="${D}{objects} ${D}1"
2052         ;;
2053
2054         *)
2055         echo "shared-ld: unhandled argument '${D}1'"
2056         exit 1
2057         ;;
2058
2059     esac
2060     shift
2061 done
2062
2063 #
2064 # Link one module containing all the others
2065 #
2066 if test ${D}{verbose} = 1; then
2067     echo "c++ -r -keep_private_externs -nostdlib ${D}{objects} -o master.${D}${D}.o"
2068 fi
2069 c++ -r -keep_private_externs -nostdlib ${D}{objects} -o master.${D}${D}.o
2070 status=${D}?
2071 if test ${D}{status} != 0; then
2072     exit ${D}{status}
2073 fi
2074
2075 #
2076 # Link the shared library from the single module created
2077 #
2078 if test ${D}{verbose} = 1; then
2079     echo "cc ${D}{linking_flag} master.${D}${D}.o ${D}{args}"
2080 fi
2081 c++ ${D}{linking_flag} master.${D}${D}.o ${D}{args}
2082 status=${D}?
2083 if test ${D}{status} != 0; then
2084     exit ${D}{status}
2085 fi
2086
2087 #
2088 # Remove intermediate module
2089 #
2090 rm -f master.${D}${D}.o
2091
2092 exit 0
2093 EOF
2094 dnl ===================== shared-ld-sh ends here =====================
2095 ])
2096
2097 AC_DEFUN([AC_BAKEFILE_CREATE_FILE_BK_MAKE_PCH],
2098 [
2099 dnl ===================== bk-make-pch begins here =====================
2100 dnl    (Created by merge-scripts.py from bk-make-pch
2101 dnl     file do not edit here!)
2102 D='$'
2103 cat <<EOF >bk-make-pch
2104 #!/bin/sh
2105
2106 # This script is part of Bakefile (http://bakefile.sourceforge.net) autoconf
2107 # script. It is used to generated precompiled headers.
2108 #
2109 # Permission is given to use this file in any way.
2110
2111 outfile="${D}{1}"
2112 header="${D}{2}"
2113 shift
2114 shift
2115
2116 compiler=
2117 headerfile=
2118 while test ${D}{#} -gt 0; do
2119     case "${D}{1}" in
2120         -I* )
2121             incdir=\`echo ${D}{1} | sed -e 's/-I\\(.*\\)/\\1/g'\`
2122             if test "x${D}{headerfile}" = "x" -a -f "${D}{incdir}/${D}{header}" ; then
2123                 headerfile="${D}{incdir}/${D}{header}"
2124             fi
2125         ;;
2126     esac
2127     compiler="${D}{compiler} ${D}{1}"
2128     shift
2129 done
2130
2131 if test "x${D}{headerfile}" = "x" ; then
2132     echo "error: can't find header ${D}{header} in include paths" >2
2133 else
2134     if test -f ${D}{outfile} ; then
2135         rm -f ${D}{outfile}
2136     else
2137         mkdir -p \`dirname ${D}{outfile}\`
2138     fi
2139     depsfile=".deps/\`echo ${D}{outfile} | tr '/.' '__'\`.d"
2140     mkdir -p .deps
2141     # can do this because gcc is >= 3.4:
2142     ${D}{compiler} -o ${D}{outfile} -MMD -MF "${D}{depsfile}" "${D}{headerfile}"
2143     exit ${D}{?}
2144 fi
2145 EOF
2146 dnl ===================== bk-make-pch ends here =====================
2147 ])
2148
2149 # Configure paths for GTK+
2150 # Owen Taylor     1997-2001
2151
2152 dnl AM_PATH_GTK_2_0([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]])
2153 dnl Test for GTK+, and define GTK_CFLAGS and GTK_LIBS, if gthread is specified in MODULES, 
2154 dnl pass to pkg-config
2155 dnl
2156 AC_DEFUN([AM_PATH_GTK_2_0],
2157 [dnl 
2158 dnl Get the cflags and libraries from pkg-config
2159 dnl
2160 AC_ARG_ENABLE(gtktest, [  --disable-gtktest       do not try to compile and run a test GTK+ program],
2161                     , enable_gtktest=yes)
2162
2163   pkg_config_args=gtk+-2.0
2164   for module in . $4
2165   do
2166       case "$module" in
2167          gthread) 
2168              pkg_config_args="$pkg_config_args gthread-2.0"
2169          ;;
2170       esac
2171   done
2172
2173   no_gtk=""
2174
2175   AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
2176
2177   if test x$PKG_CONFIG != xno ; then
2178     if pkg-config --atleast-pkgconfig-version 0.7 ; then
2179       :
2180     else
2181       echo "*** pkg-config too old; version 0.7 or better required."
2182       no_gtk=yes
2183       PKG_CONFIG=no
2184     fi
2185   else
2186     no_gtk=yes
2187   fi
2188
2189   min_gtk_version=ifelse([$1], ,2.0.0,$1)
2190   AC_MSG_CHECKING(for GTK+ - version >= $min_gtk_version)
2191
2192   if test x$PKG_CONFIG != xno ; then
2193     ## don't try to run the test against uninstalled libtool libs
2194     if $PKG_CONFIG --uninstalled $pkg_config_args; then
2195           echo "Will use uninstalled version of GTK+ found in PKG_CONFIG_PATH"
2196           enable_gtktest=no
2197     fi
2198
2199     if $PKG_CONFIG --atleast-version $min_gtk_version $pkg_config_args; then
2200           :
2201     else
2202           no_gtk=yes
2203     fi
2204   fi
2205
2206   if test x"$no_gtk" = x ; then
2207     GTK_CFLAGS=`$PKG_CONFIG $pkg_config_args --cflags`
2208     GTK_LIBS=`$PKG_CONFIG $pkg_config_args --libs`
2209     gtk_config_major_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2210            sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
2211     gtk_config_minor_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2212            sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
2213     gtk_config_micro_version=`$PKG_CONFIG --modversion gtk+-2.0 | \
2214            sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
2215     if test "x$enable_gtktest" = "xyes" ; then
2216       ac_save_CFLAGS="$CFLAGS"
2217       ac_save_LIBS="$LIBS"
2218       CFLAGS="$CFLAGS $GTK_CFLAGS"
2219       LIBS="$GTK_LIBS $LIBS"
2220 dnl
2221 dnl Now check if the installed GTK+ is sufficiently new. (Also sanity
2222 dnl checks the results of pkg-config to some extent)
2223 dnl
2224       rm -f conf.gtktest
2225       AC_TRY_RUN([
2226 #include <gtk/gtk.h>
2227 #include <stdio.h>
2228 #include <stdlib.h>
2229
2230 int 
2231 main ()
2232 {
2233   int major, minor, micro;
2234   char *tmp_version;
2235
2236   system ("touch conf.gtktest");
2237
2238   /* HP/UX 9 (%@#!) writes to sscanf strings */
2239   tmp_version = g_strdup("$min_gtk_version");
2240   if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
2241      printf("%s, bad version string\n", "$min_gtk_version");
2242      exit(1);
2243    }
2244
2245   if ((gtk_major_version != $gtk_config_major_version) ||
2246       (gtk_minor_version != $gtk_config_minor_version) ||
2247       (gtk_micro_version != $gtk_config_micro_version))
2248     {
2249       printf("\n*** 'pkg-config --modversion gtk+-2.0' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n", 
2250              $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version,
2251              gtk_major_version, gtk_minor_version, gtk_micro_version);
2252       printf ("*** was found! If pkg-config was correct, then it is best\n");
2253       printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n");
2254       printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
2255       printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
2256       printf("*** required on your system.\n");
2257       printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n");
2258       printf("*** to point to the correct configuration files\n");
2259     } 
2260   else if ((gtk_major_version != GTK_MAJOR_VERSION) ||
2261            (gtk_minor_version != GTK_MINOR_VERSION) ||
2262            (gtk_micro_version != GTK_MICRO_VERSION))
2263     {
2264       printf("*** GTK+ header files (version %d.%d.%d) do not match\n",
2265              GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION);
2266       printf("*** library (version %d.%d.%d)\n",
2267              gtk_major_version, gtk_minor_version, gtk_micro_version);
2268     }
2269   else
2270     {
2271       if ((gtk_major_version > major) ||
2272         ((gtk_major_version == major) && (gtk_minor_version > minor)) ||
2273         ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro)))
2274       {
2275         return 0;
2276        }
2277      else
2278       {
2279         printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n",
2280                gtk_major_version, gtk_minor_version, gtk_micro_version);
2281         printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n",
2282                major, minor, micro);
2283         printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n");
2284         printf("***\n");
2285         printf("*** If you have already installed a sufficiently new version, this error\n");
2286         printf("*** probably means that the wrong copy of the pkg-config shell script is\n");
2287         printf("*** being found. The easiest way to fix this is to remove the old version\n");
2288         printf("*** of GTK+, but you can also set the PKG_CONFIG environment to point to the\n");
2289         printf("*** correct copy of pkg-config. (In this case, you will have to\n");
2290         printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
2291         printf("*** so that the correct libraries are found at run-time))\n");
2292       }
2293     }
2294   return 1;
2295 }
2296 ],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
2297        CFLAGS="$ac_save_CFLAGS"
2298        LIBS="$ac_save_LIBS"
2299      fi
2300   fi
2301   if test "x$no_gtk" = x ; then
2302      AC_MSG_RESULT(yes (version $gtk_config_major_version.$gtk_config_minor_version.$gtk_config_micro_version))
2303      ifelse([$2], , :, [$2])     
2304   else
2305      AC_MSG_RESULT(no)
2306      if test "$PKG_CONFIG" = "no" ; then
2307        echo "*** A new enough version of pkg-config was not found."
2308        echo "*** See http://pkgconfig.sourceforge.net"
2309      else
2310        if test -f conf.gtktest ; then
2311         :
2312        else
2313           echo "*** Could not run GTK+ test program, checking why..."
2314           ac_save_CFLAGS="$CFLAGS"
2315           ac_save_LIBS="$LIBS"
2316           CFLAGS="$CFLAGS $GTK_CFLAGS"
2317           LIBS="$LIBS $GTK_LIBS"
2318           AC_TRY_LINK([
2319 #include <gtk/gtk.h>
2320 #include <stdio.h>
2321 ],      [ return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ],
2322         [ echo "*** The test program compiled, but did not run. This usually means"
2323           echo "*** that the run-time linker is not finding GTK+ or finding the wrong"
2324           echo "*** version of GTK+. If it is not finding GTK+, you'll need to set your"
2325           echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
2326           echo "*** to the installed location  Also, make sure you have run ldconfig if that"
2327           echo "*** is required on your system"
2328           echo "***"
2329           echo "*** If you have an old version installed, it is best to remove it, although"
2330           echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ],
2331         [ echo "*** The test program failed to compile or link. See the file config.log for the"
2332           echo "*** exact error that occured. This usually means GTK+ is incorrectly installed."])
2333           CFLAGS="$ac_save_CFLAGS"
2334           LIBS="$ac_save_LIBS"
2335        fi
2336      fi
2337      GTK_CFLAGS=""
2338      GTK_LIBS=""
2339      ifelse([$3], , :, [$3])
2340   fi
2341   AC_SUBST(GTK_CFLAGS)
2342   AC_SUBST(GTK_LIBS)
2343   rm -f conf.gtktest
2344 ])
2345
2346 # Configure paths for GTK+
2347 # Owen Taylor     97-11-3
2348
2349 dnl AM_PATH_GTK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]])
2350 dnl Test for GTK, and define GTK_CFLAGS and GTK_LIBS
2351 dnl
2352 AC_DEFUN(AM_PATH_GTK,
2353 [dnl 
2354 dnl Get the cflags and libraries from the gtk-config script
2355 dnl
2356 AC_ARG_WITH(gtk-prefix,[  --with-gtk-prefix=PFX   Prefix where GTK is installed (optional)],
2357             gtk_config_prefix="$withval", gtk_config_prefix="")
2358 AC_ARG_WITH(gtk-exec-prefix,[  --with-gtk-exec-prefix=PFX Exec prefix where GTK is installed (optional)],
2359             gtk_config_exec_prefix="$withval", gtk_config_exec_prefix="")
2360 AC_ARG_ENABLE(gtktest, [  --disable-gtktest       Do not try to compile and run a test GTK program],
2361                     , enable_gtktest=yes)
2362
2363   for module in . $4
2364   do
2365       case "$module" in
2366          gthread) 
2367              gtk_config_args="$gtk_config_args gthread"
2368          ;;
2369       esac
2370   done
2371
2372   if test x$gtk_config_exec_prefix != x ; then
2373      gtk_config_args="$gtk_config_args --exec-prefix=$gtk_config_exec_prefix"
2374      if test x${GTK_CONFIG+set} != xset ; then
2375         GTK_CONFIG=$gtk_config_exec_prefix/bin/gtk-config
2376      fi
2377   fi
2378   if test x$gtk_config_prefix != x ; then
2379      gtk_config_args="$gtk_config_args --prefix=$gtk_config_prefix"
2380      if test x${GTK_CONFIG+set} != xset ; then
2381         GTK_CONFIG=$gtk_config_prefix/bin/gtk-config
2382      fi
2383   fi
2384
2385   AC_PATH_PROG(GTK_CONFIG, gtk-config, no)
2386   min_gtk_version=ifelse([$1], ,0.99.7,$1)
2387   AC_MSG_CHECKING(for GTK - version >= $min_gtk_version)
2388   no_gtk=""
2389   if test "$GTK_CONFIG" = "no" ; then
2390     no_gtk=yes
2391   else
2392     GTK_CFLAGS=`$GTK_CONFIG $gtk_config_args --cflags`
2393     GTK_LIBS=`$GTK_CONFIG $gtk_config_args --libs`
2394     gtk_config_major_version=`$GTK_CONFIG $gtk_config_args --version | \
2395            sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
2396     gtk_config_minor_version=`$GTK_CONFIG $gtk_config_args --version | \
2397            sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
2398     gtk_config_micro_version=`$GTK_CONFIG $gtk_config_args --version | \
2399            sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
2400     if test "x$enable_gtktest" = "xyes" ; then
2401       ac_save_CFLAGS="$CFLAGS"
2402       ac_save_LIBS="$LIBS"
2403       CFLAGS="$CFLAGS $GTK_CFLAGS"
2404       LIBS="$GTK_LIBS $LIBS"
2405 dnl
2406 dnl Now check if the installed GTK is sufficiently new. (Also sanity
2407 dnl checks the results of gtk-config to some extent
2408 dnl
2409       rm -f conf.gtktest
2410       AC_TRY_RUN([
2411 #include <gtk/gtk.h>
2412 #include <stdio.h>
2413 #include <stdlib.h>
2414
2415 int 
2416 main ()
2417 {
2418   int major, minor, micro;
2419   char *tmp_version;
2420
2421   system ("touch conf.gtktest");
2422
2423   /* HP/UX 9 (%@#!) writes to sscanf strings */
2424   tmp_version = g_strdup("$min_gtk_version");
2425   if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
2426      printf("%s, bad version string\n", "$min_gtk_version");
2427      exit(1);
2428    }
2429
2430   if ((gtk_major_version != $gtk_config_major_version) ||
2431       (gtk_minor_version != $gtk_config_minor_version) ||
2432       (gtk_micro_version != $gtk_config_micro_version))
2433     {
2434       printf("\n*** 'gtk-config --version' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n", 
2435              $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version,
2436              gtk_major_version, gtk_minor_version, gtk_micro_version);
2437       printf ("*** was found! If gtk-config was correct, then it is best\n");
2438       printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n");
2439       printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
2440       printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
2441       printf("*** required on your system.\n");
2442       printf("*** If gtk-config was wrong, set the environment variable GTK_CONFIG\n");
2443       printf("*** to point to the correct copy of gtk-config, and remove the file config.cache\n");
2444       printf("*** before re-running configure\n");
2445     } 
2446 #if defined (GTK_MAJOR_VERSION) && defined (GTK_MINOR_VERSION) && defined (GTK_MICRO_VERSION)
2447   else if ((gtk_major_version != GTK_MAJOR_VERSION) ||
2448            (gtk_minor_version != GTK_MINOR_VERSION) ||
2449            (gtk_micro_version != GTK_MICRO_VERSION))
2450     {
2451       printf("*** GTK+ header files (version %d.%d.%d) do not match\n",
2452              GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION);
2453       printf("*** library (version %d.%d.%d)\n",
2454              gtk_major_version, gtk_minor_version, gtk_micro_version);
2455     }
2456 #endif /* defined (GTK_MAJOR_VERSION) ... */
2457   else
2458     {
2459       if ((gtk_major_version > major) ||
2460         ((gtk_major_version == major) && (gtk_minor_version > minor)) ||
2461         ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro)))
2462       {
2463         return 0;
2464        }
2465      else
2466       {
2467         printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n",
2468                gtk_major_version, gtk_minor_version, gtk_micro_version);
2469         printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n",
2470                major, minor, micro);
2471         printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n");
2472         printf("***\n");
2473         printf("*** If you have already installed a sufficiently new version, this error\n");
2474         printf("*** probably means that the wrong copy of the gtk-config shell script is\n");
2475         printf("*** being found. The easiest way to fix this is to remove the old version\n");
2476         printf("*** of GTK+, but you can also set the GTK_CONFIG environment to point to the\n");
2477         printf("*** correct copy of gtk-config. (In this case, you will have to\n");
2478         printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
2479         printf("*** so that the correct libraries are found at run-time))\n");
2480       }
2481     }
2482   return 1;
2483 }
2484 ],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
2485        CFLAGS="$ac_save_CFLAGS"
2486        LIBS="$ac_save_LIBS"
2487      fi
2488   fi
2489   if test "x$no_gtk" = x ; then
2490      AC_MSG_RESULT(yes)
2491      ifelse([$2], , :, [$2])     
2492   else
2493      AC_MSG_RESULT(no)
2494      if test "$GTK_CONFIG" = "no" ; then
2495        echo "*** The gtk-config script installed by GTK could not be found"
2496        echo "*** If GTK was installed in PREFIX, make sure PREFIX/bin is in"
2497        echo "*** your path, or set the GTK_CONFIG environment variable to the"
2498        echo "*** full path to gtk-config."
2499      else
2500        if test -f conf.gtktest ; then
2501         :
2502        else
2503           echo "*** Could not run GTK test program, checking why..."
2504           CFLAGS="$CFLAGS $GTK_CFLAGS"
2505           LIBS="$LIBS $GTK_LIBS"
2506           AC_TRY_LINK([
2507 #include <gtk/gtk.h>
2508 #include <stdio.h>
2509 ],      [ return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ],
2510         [ echo "*** The test program compiled, but did not run. This usually means"
2511           echo "*** that the run-time linker is not finding GTK or finding the wrong"
2512           echo "*** version of GTK. If it is not finding GTK, you'll need to set your"
2513           echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
2514           echo "*** to the installed location  Also, make sure you have run ldconfig if that"
2515           echo "*** is required on your system"
2516           echo "***"
2517           echo "*** If you have an old version installed, it is best to remove it, although"
2518           echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"
2519           echo "***"
2520           echo "*** If you have a RedHat 5.0 system, you should remove the GTK package that"
2521           echo "*** came with the system with the command"
2522           echo "***"
2523           echo "***    rpm --erase --nodeps gtk gtk-devel" ],
2524         [ echo "*** The test program failed to compile or link. See the file config.log for the"
2525           echo "*** exact error that occured. This usually means GTK was incorrectly installed"
2526           echo "*** or that you have moved GTK since it was installed. In the latter case, you"
2527           echo "*** may want to edit the gtk-config script: $GTK_CONFIG" ])
2528           CFLAGS="$ac_save_CFLAGS"
2529           LIBS="$ac_save_LIBS"
2530        fi
2531      fi
2532      GTK_CFLAGS=""
2533      GTK_LIBS=""
2534      ifelse([$3], , :, [$3])
2535   fi
2536   AC_SUBST(GTK_CFLAGS)
2537   AC_SUBST(GTK_LIBS)
2538   rm -f conf.gtktest
2539 ])
2540
2541
2542 dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not)
2543 dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page
2544 dnl also defines GSTUFF_PKG_ERRORS on error
2545 AC_DEFUN(PKG_CHECK_MODULES, [
2546   succeeded=no
2547
2548   if test -z "$PKG_CONFIG"; then
2549     AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
2550   fi
2551
2552   if test "$PKG_CONFIG" = "no" ; then
2553      echo "*** The pkg-config script could not be found. Make sure it is"
2554      echo "*** in your path, or set the PKG_CONFIG environment variable"
2555      echo "*** to the full path to pkg-config."
2556      echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
2557   else
2558      PKG_CONFIG_MIN_VERSION=0.9.0
2559      if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
2560         AC_MSG_CHECKING(for $2)
2561
2562         if $PKG_CONFIG --exists "$2" ; then
2563             AC_MSG_RESULT(yes)
2564             succeeded=yes
2565
2566             AC_MSG_CHECKING($1_CFLAGS)
2567             $1_CFLAGS=`$PKG_CONFIG --cflags "$2"`
2568             AC_MSG_RESULT($$1_CFLAGS)
2569
2570             AC_MSG_CHECKING($1_LIBS)
2571             $1_LIBS=`$PKG_CONFIG --libs "$2"`
2572             AC_MSG_RESULT($$1_LIBS)
2573         else
2574             $1_CFLAGS=""
2575             $1_LIBS=""
2576             ## If we have a custom action on failure, don't print errors, but 
2577             ## do set a variable so people can do so.
2578             $1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
2579             ifelse([$4], ,echo $$1_PKG_ERRORS,)
2580         fi
2581
2582         AC_SUBST($1_CFLAGS)
2583         AC_SUBST($1_LIBS)
2584      else
2585         echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
2586         echo "*** See http://www.freedesktop.org/software/pkgconfig"
2587      fi
2588   fi
2589
2590   if test $succeeded = yes; then
2591      ifelse([$3], , :, [$3])
2592   else
2593      ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4])
2594   fi
2595 ])
2596
2597
2598
2599 # Configure paths for SDL
2600 # Sam Lantinga 9/21/99
2601 # stolen from Manish Singh
2602 # stolen back from Frank Belew
2603 # stolen from Manish Singh
2604 # Shamelessly stolen from Owen Taylor
2605
2606 dnl AM_PATH_SDL([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
2607 dnl Test for SDL, and define SDL_CFLAGS and SDL_LIBS
2608 dnl
2609 AC_DEFUN([AM_PATH_SDL],
2610 [dnl 
2611 dnl Get the cflags and libraries from the sdl-config script
2612 dnl
2613 AC_ARG_WITH(sdl-prefix,[  --with-sdl-prefix=PFX   Prefix where SDL is installed (optional)],
2614             sdl_prefix="$withval", sdl_prefix="")
2615 AC_ARG_WITH(sdl-exec-prefix,[  --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional)],
2616             sdl_exec_prefix="$withval", sdl_exec_prefix="")
2617 AC_ARG_ENABLE(sdltest, [  --disable-sdltest       Do not try to compile and run a test SDL program],
2618                     , enable_sdltest=yes)
2619
2620   if test x$sdl_exec_prefix != x ; then
2621      sdl_args="$sdl_args --exec-prefix=$sdl_exec_prefix"
2622      if test x${SDL_CONFIG+set} != xset ; then
2623         SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config
2624      fi
2625   fi
2626   if test x$sdl_prefix != x ; then
2627      sdl_args="$sdl_args --prefix=$sdl_prefix"
2628      if test x${SDL_CONFIG+set} != xset ; then
2629         SDL_CONFIG=$sdl_prefix/bin/sdl-config
2630      fi
2631   fi
2632
2633   AC_REQUIRE([AC_CANONICAL_TARGET])
2634   PATH="$prefix/bin:$prefix/usr/bin:$PATH"
2635   AC_PATH_PROG(SDL_CONFIG, sdl-config, no, [$PATH])
2636   min_sdl_version=ifelse([$1], ,0.11.0,$1)
2637   AC_MSG_CHECKING(for SDL - version >= $min_sdl_version)
2638   no_sdl=""
2639   if test "$SDL_CONFIG" = "no" ; then
2640     no_sdl=yes
2641   else
2642     SDL_CFLAGS=`$SDL_CONFIG $sdlconf_args --cflags`
2643     SDL_LIBS=`$SDL_CONFIG $sdlconf_args --libs`
2644
2645     sdl_major_version=`$SDL_CONFIG $sdl_args --version | \
2646            sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
2647     sdl_minor_version=`$SDL_CONFIG $sdl_args --version | \
2648            sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
2649     sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \
2650            sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
2651     if test "x$enable_sdltest" = "xyes" ; then
2652       ac_save_CFLAGS="$CFLAGS"
2653       ac_save_CXXFLAGS="$CXXFLAGS"
2654       ac_save_LIBS="$LIBS"
2655       CFLAGS="$CFLAGS $SDL_CFLAGS"
2656       CXXFLAGS="$CXXFLAGS $SDL_CFLAGS"
2657       LIBS="$LIBS $SDL_LIBS"
2658 dnl
2659 dnl Now check if the installed SDL is sufficiently new. (Also sanity
2660 dnl checks the results of sdl-config to some extent
2661 dnl
2662       rm -f conf.sdltest
2663       AC_TRY_RUN([
2664 #include <stdio.h>
2665 #include <stdlib.h>
2666 #include <string.h>
2667 #include "SDL.h"
2668
2669 char*
2670 my_strdup (char *str)
2671 {
2672   char *new_str;
2673   
2674   if (str)
2675     {
2676       new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char));
2677       strcpy (new_str, str);
2678     }
2679   else
2680     new_str = NULL;
2681   
2682   return new_str;
2683 }
2684
2685 int main (int argc, char *argv[])
2686 {
2687   int major, minor, micro;
2688   char *tmp_version;
2689
2690   /* This hangs on some systems (?)
2691   system ("touch conf.sdltest");
2692   */
2693   { FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); }
2694
2695   /* HP/UX 9 (%@#!) writes to sscanf strings */
2696   tmp_version = my_strdup("$min_sdl_version");
2697   if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
2698      printf("%s, bad version string\n", "$min_sdl_version");
2699      exit(1);
2700    }
2701
2702    if (($sdl_major_version > major) ||
2703       (($sdl_major_version == major) && ($sdl_minor_version > minor)) ||
2704       (($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro)))
2705     {
2706       return 0;
2707     }
2708   else
2709     {
2710       printf("\n*** 'sdl-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version);
2711       printf("*** of SDL required is %d.%d.%d. If sdl-config is correct, then it is\n", major, minor, micro);
2712       printf("*** best to upgrade to the required version.\n");
2713       printf("*** If sdl-config was wrong, set the environment variable SDL_CONFIG\n");
2714       printf("*** to point to the correct copy of sdl-config, and remove the file\n");
2715       printf("*** config.cache before re-running configure\n");
2716       return 1;
2717     }
2718 }
2719
2720 ],, no_sdl=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
2721        CFLAGS="$ac_save_CFLAGS"
2722        CXXFLAGS="$ac_save_CXXFLAGS"
2723        LIBS="$ac_save_LIBS"
2724      fi
2725   fi
2726   if test "x$no_sdl" = x ; then
2727      AC_MSG_RESULT(yes)
2728      ifelse([$2], , :, [$2])     
2729   else
2730      AC_MSG_RESULT(no)
2731      if test "$SDL_CONFIG" = "no" ; then
2732        echo "*** The sdl-config script installed by SDL could not be found"
2733        echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in"
2734        echo "*** your path, or set the SDL_CONFIG environment variable to the"
2735        echo "*** full path to sdl-config."
2736      else
2737        if test -f conf.sdltest ; then
2738         :
2739        else
2740           echo "*** Could not run SDL test program, checking why..."
2741           CFLAGS="$CFLAGS $SDL_CFLAGS"
2742           CXXFLAGS="$CXXFLAGS $SDL_CFLAGS"
2743           LIBS="$LIBS $SDL_LIBS"
2744           AC_TRY_LINK([
2745 #include <stdio.h>
2746 #include "SDL.h"
2747
2748 int main(int argc, char *argv[])
2749 { return 0; }
2750 #undef  main
2751 #define main K_and_R_C_main
2752 ],      [ return 0; ],
2753         [ echo "*** The test program compiled, but did not run. This usually means"
2754           echo "*** that the run-time linker is not finding SDL or finding the wrong"
2755           echo "*** version of SDL. If it is not finding SDL, you'll need to set your"
2756           echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
2757           echo "*** to the installed location  Also, make sure you have run ldconfig if that"
2758           echo "*** is required on your system"
2759           echo "***"
2760           echo "*** If you have an old version installed, it is best to remove it, although"
2761           echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"],
2762         [ echo "*** The test program failed to compile or link. See the file config.log for the"
2763           echo "*** exact error that occured. This usually means SDL was incorrectly installed"
2764           echo "*** or that you have moved SDL since it was installed. In the latter case, you"
2765           echo "*** may want to edit the sdl-config script: $SDL_CONFIG" ])
2766           CFLAGS="$ac_save_CFLAGS"
2767           CXXFLAGS="$ac_save_CXXFLAGS"
2768           LIBS="$ac_save_LIBS"
2769        fi
2770      fi
2771      SDL_CFLAGS=""
2772      SDL_LIBS=""
2773      ifelse([$3], , :, [$3])
2774   fi
2775   AC_SUBST(SDL_CFLAGS)
2776   AC_SUBST(SDL_LIBS)
2777   rm -f conf.sdltest
2778 ])
2779
2780 dnl Perform a check for a GStreamer element using gst-inspect
2781 dnl Thomas Vander Stichele <thomas at apestaart dot org>
2782 dnl Last modification: 25/01/2005
2783
2784 dnl AM_GST_ELEMENT_CHECK(ELEMENT-NAME, ACTION-IF-FOUND, ACTION-IF-NOT-FOUND)
2785
2786 AC_DEFUN([AM_GST_ELEMENT_CHECK],
2787 [
2788   if test "x$GST_INSPECT" == "x"; then
2789     AC_CHECK_PROG(GST_INSPECT, gst-inspect, gst-inspect, [])
2790   fi
2791
2792   if test "x$GST_INSPECT" != "x"; then
2793     AC_MSG_CHECKING(GStreamer element $1)
2794     if [ $GST_INSPECT $1 > /dev/null 2> /dev/null ]; then
2795       AC_MSG_RESULT(found.)
2796       $2
2797     else
2798       AC_MSG_RESULT(not found.)
2799       $3
2800     fi
2801   fi
2802 ])
2803
2804 dnl
2805 dnl AM_PATH_CPPUNIT(MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
2806 dnl
2807 AC_DEFUN(AM_PATH_CPPUNIT,
2808 [
2809
2810 AC_ARG_WITH(cppunit-prefix,[  --with-cppunit-prefix=PFX   Prefix where CppUnit is installed (optional)],
2811             cppunit_config_prefix="$withval", cppunit_config_prefix="")
2812 AC_ARG_WITH(cppunit-exec-prefix,[  --with-cppunit-exec-prefix=PFX  Exec prefix where CppUnit is installed (optional)],
2813             cppunit_config_exec_prefix="$withval", cppunit_config_exec_prefix="")
2814
2815   if test x$cppunit_config_exec_prefix != x ; then
2816      cppunit_config_args="$cppunit_config_args --exec-prefix=$cppunit_config_exec_prefix"
2817      if test x${CPPUNIT_CONFIG+set} != xset ; then
2818         CPPUNIT_CONFIG=$cppunit_config_exec_prefix/bin/cppunit-config
2819      fi
2820   fi
2821   if test x$cppunit_config_prefix != x ; then
2822      cppunit_config_args="$cppunit_config_args --prefix=$cppunit_config_prefix"
2823      if test x${CPPUNIT_CONFIG+set} != xset ; then
2824         CPPUNIT_CONFIG=$cppunit_config_prefix/bin/cppunit-config
2825      fi
2826   fi
2827
2828   AC_PATH_PROG(CPPUNIT_CONFIG, cppunit-config, no)
2829   cppunit_version_min=$1
2830
2831   AC_MSG_CHECKING(for Cppunit - version >= $cppunit_version_min)
2832   no_cppunit=""
2833   if test "$CPPUNIT_CONFIG" = "no" ; then
2834     no_cppunit=yes
2835   else
2836     CPPUNIT_CFLAGS=`$CPPUNIT_CONFIG --cflags`
2837     CPPUNIT_LIBS=`$CPPUNIT_CONFIG --libs`
2838     cppunit_version=`$CPPUNIT_CONFIG --version`
2839
2840     cppunit_major_version=`echo $cppunit_version | \
2841            sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
2842     cppunit_minor_version=`echo $cppunit_version | \
2843            sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
2844     cppunit_micro_version=`echo $cppunit_version | \
2845            sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
2846
2847     cppunit_major_min=`echo $cppunit_version_min | \
2848            sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
2849     cppunit_minor_min=`echo $cppunit_version_min | \
2850            sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
2851     cppunit_micro_min=`echo $cppunit_version_min | \
2852            sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
2853
2854     cppunit_version_proper=`expr \
2855         $cppunit_major_version \> $cppunit_major_min \| \
2856         $cppunit_major_version \= $cppunit_major_min \& \
2857         $cppunit_minor_version \> $cppunit_minor_min \| \
2858         $cppunit_major_version \= $cppunit_major_min \& \
2859         $cppunit_minor_version \= $cppunit_minor_min \& \
2860         $cppunit_micro_version \>= $cppunit_micro_min `
2861
2862     if test "$cppunit_version_proper" = "1" ; then
2863       AC_MSG_RESULT([$cppunit_major_version.$cppunit_minor_version.$cppunit_micro_version])
2864     else
2865       AC_MSG_RESULT(no)
2866       no_cppunit=yes
2867     fi
2868   fi
2869
2870   if test "x$no_cppunit" = x ; then
2871      ifelse([$2], , :, [$2])     
2872   else
2873      CPPUNIT_CFLAGS=""
2874      CPPUNIT_LIBS=""
2875      ifelse([$3], , :, [$3])
2876   fi
2877
2878   AC_SUBST(CPPUNIT_CFLAGS)
2879   AC_SUBST(CPPUNIT_LIBS)
2880 ])
2881
2882
2883
2884