cd42896f4dd9b7a821a2f98ec286ba1ed0749e6c
[platform/upstream/glib.git] / configure.in
1 dnl ***********************************
2 dnl *** include special GLib macros ***
3 dnl ***********************************
4
5 define(glib_configure_in)
6 builtin(include, acglib.m4)dnl
7 builtin(include, glib/libcharset/codeset.m4)dnl
8 builtin(include, glib/libcharset/glibc21.m4)dnl
9 builtin(include, m4macros/glib-gettext.m4)dnl
10
11 # require autoconf 2.53
12 AC_PREREQ(2.53)
13
14 # Process this file with autoconf to produce a configure script.
15 AC_INIT(glib/glib.h)
16
17 # Save this value here, since automake will set cflags later
18 cflags_set=${CFLAGS+set}
19
20 GLIB_AC_DIVERT_BEFORE_HELP([
21 #
22 # The following version number definitions apply to GLib, GModule, GObject 
23 # and GThread as a whole, so if changes occoured in any of them, they are all
24 # treated with the same interface and binary age.
25 #
26 # Making releases:
27 #   GLIB_MICRO_VERSION += 1;
28 #   GLIB_INTERFACE_AGE += 1;
29 #   GLIB_BINARY_AGE += 1;
30 # if any functions have been added, set GLIB_INTERFACE_AGE to 0.
31 # if backwards compatibility has been broken,
32 # set GLIB_BINARY_AGE _and_ GLIB_INTERFACE_AGE to 0.
33 #
34 GLIB_MAJOR_VERSION=2
35 GLIB_MINOR_VERSION=1
36 GLIB_MICRO_VERSION=4
37 GLIB_INTERFACE_AGE=1
38 GLIB_BINARY_AGE=`expr 100 '*' $GLIB_MINOR_VERSION + $GLIB_MICRO_VERSION`
39 GLIB_VERSION=$GLIB_MAJOR_VERSION.$GLIB_MINOR_VERSION.$GLIB_MICRO_VERSION
40 ])dnl
41
42 AC_SUBST(GLIB_MAJOR_VERSION)
43 AC_SUBST(GLIB_MINOR_VERSION)
44 AC_SUBST(GLIB_MICRO_VERSION)
45 AC_SUBST(GLIB_VERSION)
46 AC_SUBST(GLIB_INTERFACE_AGE)
47 AC_SUBST(GLIB_BINARY_AGE)
48
49 # libtool versioning
50 LT_RELEASE=$GLIB_MAJOR_VERSION.$GLIB_MINOR_VERSION
51 LT_CURRENT=`expr 100 '*' $GLIB_MINOR_VERSION + $GLIB_MICRO_VERSION - $GLIB_INTERFACE_AGE`
52 LT_REVISION=$GLIB_INTERFACE_AGE
53 LT_AGE=`expr $GLIB_BINARY_AGE - $GLIB_INTERFACE_AGE`
54 LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
55 AC_SUBST(LT_RELEASE)
56 AC_SUBST(LT_CURRENT)
57 AC_SUBST(LT_REVISION)
58 AC_SUBST(LT_AGE)
59 AC_SUBST(LT_CURRENT_MINUS_AGE)
60
61 VERSION=$GLIB_VERSION
62 PACKAGE=glib
63
64 AM_INIT_AUTOMAKE($PACKAGE, $VERSION, no-define)
65
66 # Specify a configuration file
67 AM_CONFIG_HEADER(config.h)
68
69 AC_DEFINE_UNQUOTED(GLIB_MAJOR_VERSION, $GLIB_MAJOR_VERSION,
70                    [Define to the GLIB major version])
71 AC_DEFINE_UNQUOTED(GLIB_MINOR_VERSION, $GLIB_MINOR_VERSION,
72                    [Define to the GLIB minor version])
73 AC_DEFINE_UNQUOTED(GLIB_MICRO_VERSION, $GLIB_MICRO_VERSION,
74                    [Define to the GLIB micro version])
75 AC_DEFINE_UNQUOTED(GLIB_INTERFACE_AGE, $GLIB_INTERFACE_AGE,
76                    [Define to the GLIB interface age])
77 AC_DEFINE_UNQUOTED(GLIB_BINARY_AGE, $GLIB_BINARY_AGE,
78                    [Define to the GLIB binary age])
79
80 dnl Initialize maintainer mode
81 AM_MAINTAINER_MODE
82
83 AC_CANONICAL_HOST
84
85 AC_MSG_CHECKING(for the BeOS)
86 case $host in
87   *-*-beos*)
88     glib_native_beos="yes"
89     ;;
90   *)
91     glib_native_beos="no"
92     ;;
93 esac
94 AC_MSG_RESULT([$glib_native_beos])
95
96 dnl
97
98 AC_MSG_CHECKING([for Win32])
99 case "$host" in
100   *-*-mingw*)
101     glib_native_win32=yes
102     G_LIB_WIN32_RESOURCE=glib-win32res.lo
103     G_MODULE_WIN32_RESOURCE=gmodule-win32res.lo
104     G_OBJECT_WIN32_RESOURCE=gobject-win32res.lo
105     G_THREAD_WIN32_RESOURCE=gthread-win32res.lo
106     GLIB_DEF=glib.def
107     GMODULE_DEF=gmodule.def
108     GOBJECT_DEF=gobject.def
109     GTHREAD_DEF=gthread.def
110     TESTGMODULE_EXP=testgmodule.exp
111     ;;
112   *)
113     glib_native_win32=no
114     G_LIB_WIN32_RESOURCE=
115     G_MODULE_WIN32_RESOURCE=
116     G_OBJECT_WIN32_RESOURCE=
117     G_THREAD_WIN32_RESOURCE=
118     GLIB_DEF=
119     GMODULE_DEF=
120     GOBJECT_DEF=
121     GTHREAD_DEF=
122     TESTGMODULE_EXP=
123     ;;
124 esac
125 AC_MSG_RESULT([$glib_native_win32])
126 AM_CONDITIONAL(OS_WIN32, test "$glib_native_win32" = "yes")
127 AC_SUBST(G_LIB_WIN32_RESOURCE)
128 AC_SUBST(G_MODULE_WIN32_RESOURCE)
129 AC_SUBST(G_OBJECT_WIN32_RESOURCE)
130 AC_SUBST(G_THREAD_WIN32_RESOURCE)
131 AC_SUBST(GLIB_DEF)
132 AC_SUBST(GMODULE_DEF)
133 AC_SUBST(GOBJECT_DEF)
134 AC_SUBST(GTHREAD_DEF)
135 AC_SUBST(TESTGMODULE_EXP)
136
137 if test "$glib_native_win32" = "yes"; then
138   AC_CHECK_PROG(ms_librarian, lib.exe, yes, no)
139 fi
140 AM_CONDITIONAL(MS_LIB_AVAILABLE, test x$ms_librarian = xyes)
141
142 GLIB_AC_DIVERT_BEFORE_HELP([
143 # figure debugging default, prior to $ac_help setup
144 case $GLIB_MINOR_VERSION in
145 *[[13579]]) debug_default=yes ;;
146 *)          debug_default=minimum ;;
147 esac[]dnl
148 ])
149
150 dnl declare --enable-* args and collect ac_help strings
151 AC_ARG_ENABLE(debug, [  --enable-debug=[no/minimum/yes] turn on debugging [default=$debug_default]],,enable_debug=$debug_default)
152 AC_ARG_ENABLE(gc_friendly, [  --enable-gc-friendly    turn on garbage collector friendliness [default=no]],,enable_gc_friendly=no)
153 AC_ARG_ENABLE(mem_pools, [  --disable-mem-pools     disable all glib memory pools],,disable_mem_pools=no)
154 AC_ARG_ENABLE(ansi, [  --enable-ansi           turn on strict ansi [default=no]],
155                     , enable_ansi=no)
156 AC_ARG_ENABLE(threads, [  --enable-threads        turn on basic thread support [default=yes]
157                           ([=no] will override --with-threads)],,enable_threads=yes)
158 AC_ARG_ENABLE(rebuilds, [  --disable-rebuilds      disable all source autogeneration rules],,enable_rebuilds=yes)
159
160 if test "x$enable_threads" != "xyes"; then
161   enable_threads=no
162 fi
163
164 AC_DEFINE_UNQUOTED(G_COMPILED_WITH_DEBUGGING, "${enable_debug}",
165         [Whether glib was compiled with debugging enabled])
166
167 AC_MSG_CHECKING(whether to enable garbage collector friendliness)
168 if test "x$enable_gc_friendly" = "xyes"; then
169   AC_DEFINE(ENABLE_GC_FRIENDLY, 1, [Whether to enable GC friendliness])
170   AC_SUBST(ENABLE_GC_FRIENDLY)
171   AC_MSG_RESULT(yes)
172 else
173   AC_MSG_RESULT(no)
174 fi
175
176 AC_MSG_CHECKING(whether to disable memory pools)
177 if test "x$disable_mem_pools" = "xno"; then
178   AC_MSG_RESULT(no)
179 else
180   AC_DEFINE(DISABLE_MEM_POOLS, 1, [Whether to disable memory pools])
181   AC_SUBST(DISABLE_MEM_POOLS)
182   AC_MSG_RESULT(yes)
183 fi
184
185 dnl Checks for programs.
186 AC_PROG_CC
187
188 dnl Check for a working C++ compiler, but do not bail out, if none is found.
189 AC_CHECK_PROGS(CXX, $CCC c++ g++ gcc CC cxx cc++ cl, gcc)
190 AC_LANG_SAVE
191 AC_LANG_CPLUSPLUS
192 AC_TRY_COMPILE(,[class a { int b; } c;], ,CXX=)
193 AM_CONDITIONAL(HAVE_CXX, test "$CXX" != "")
194 AC_LANG_RESTORE
195
196 AM_PROG_CC_STDC
197 AC_PROG_INSTALL
198
199 AC_SYS_LARGEFILE
200
201 #
202 # Find pkg-config
203 #
204 AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
205 if test x$PKG_CONFIG = xno ; then
206   AC_MSG_ERROR([*** pkg-config not found. See http://www.freedesktop.org/software/pkgconfig/])
207 fi
208
209 if $PKG_CONFIG --atleast-pkgconfig-version 0.14 ; then
210   :
211 else
212   AC_MSG_ERROR([*** pkg-config too old; version 0.14 or better required.])
213 fi
214
215 if test "x$enable_debug" = "xyes"; then
216   if test x$cflags_set != xset ; then
217       case " $CFLAGS " in
218       *[[\ \    ]]-g[[\ \       ]]*) ;;
219       *) CFLAGS="$CFLAGS -g" ;;
220       esac
221   fi
222         
223   GLIB_DEBUG_FLAGS="-DG_ENABLE_DEBUG"
224 else
225   GLIB_DEBUG_FLAGS="-DG_DISABLE_CAST_CHECKS"
226
227   if test "x$enable_debug" = "xno"; then
228     GLIB_DEBUG_FLAGS="$GLIB_DEBUG_FLAGS -DG_DISABLE_ASSERT -DG_DISABLE_CHECKS"
229   fi
230 fi
231
232 # Ensure MSVC-compatible struct packing convention is used when
233 # compiling for Win32 with gcc.
234 # What flag to depends on gcc version: gcc3 uses "-mms-bitfields", while
235 # gcc2 uses "-fnative-struct".
236 if test x"$glib_native_win32" = xyes; then
237   if test x"$GCC" = xyes; then
238     msnative_struct=''
239     AC_MSG_CHECKING([how to get MSVC-compatible struct packing])
240     if test -z "$ac_cv_prog_CC"; then
241       our_gcc="$CC"
242     else
243       our_gcc="$ac_cv_prog_CC"
244     fi
245     case `$our_gcc --version | sed -e 's,\..*,.,' -e q` in
246       2.)
247         if $our_gcc -v --help 2>/dev/null | grep fnative-struct >/dev/null; then
248           msnative_struct='-fnative-struct'
249         fi
250         ;;
251       *)
252         if $our_gcc -v --help 2>/dev/null | grep ms-bitfields >/dev/null; then
253           msnative_struct='-mms-bitfields'
254         fi
255         ;;
256     esac
257     if test x"$msnative_struct" = x ; then
258       AC_MSG_RESULT([no way])
259       AC_MSG_WARN([produced libraries might be incompatible with MSVC-compiled code])
260     else
261       CFLAGS="$CFLAGS $msnative_struct"
262       AC_MSG_RESULT([${msnative_struct}])
263     fi
264   fi
265 fi
266
267 AC_CYGWIN
268 AC_EXEEXT
269
270 # define a MAINT-like variable REBUILD which is set if Perl
271 # and awk are found, so autogenerated sources can be rebuilt
272 AC_PROG_AWK
273 AC_CHECK_PROGS(PERL, perl5 perl)
274 # We would like indent, but don't require it.
275 AC_CHECK_PROG(INDENT, indent, indent)
276 REBUILD=\#
277 if test "x$enable_rebuilds" = "xyes" && \
278      test -n "$PERL" && \
279      $PERL -e 'exit !($] >= 5.002)' > /dev/null 2>&1 && \
280      test -n "$AWK" ; then
281   REBUILD=
282 fi
283 AC_SUBST(REBUILD)
284
285 # Need full path to Perl for glib-mkenums
286 #
287 if test "x$PERL" != x ; then
288   AC_PATH_PROG(PERL_PATH, $PERL)
289 else
290   PERL_PATH="/usr/bin/env perl"
291 fi
292 AC_SUBST(PERL_PATH)
293
294 dnl ***********************
295 dnl *** Tests for iconv ***
296 dnl ***********************
297 dnl
298 dnl We do this before the gettext checks, to avoid distortion
299
300 AC_ARG_WITH(libiconv, [  --with-libiconv=[no/gnu/native] use the libiconv library ],,with_libiconv=maybe)
301
302 found_iconv=no
303 case $with_libiconv in
304   maybe)
305     # Check in the C library first
306     AC_CHECK_FUNC(iconv_open, with_libiconv=no; found_iconv=yes)
307     # Check if we have GNU libiconv
308     if test $found_iconv = "no"; then
309       AC_CHECK_LIB(iconv, libiconv_open, with_libiconv=gnu; found_iconv=yes)
310     fi
311     # Check if we have a iconv in -liconv, possibly from vendor
312     if test $found_iconv = "no"; then
313       AC_CHECK_LIB(iconv, iconv_open, with_libiconv=native; found_iconv=yes)
314     fi
315     ;;
316   no)
317     AC_CHECK_FUNC(iconv_open, with_libiconv=no; found_iconv=yes)
318     ;;
319   gnu|yes)
320     AC_CHECK_LIB(iconv, libiconv_open, with_libiconv=gnu; found_iconv=yes)
321     ;;
322   native)
323     AC_CHECK_LIB(iconv, iconv_open, with_libiconv=native; found_iconv=yes)
324     ;;
325 esac
326
327 if test "x$found_iconv" = "xno" ; then
328    AC_MSG_ERROR([*** No iconv() implementation found in C library or libiconv])
329 fi
330
331 dnl
332 dnl gettext support
333 dnl
334
335 ALL_LINGUAS="az be bg ca cs da de el es eu fi fr gl hi ja ko ms nl nn no pl pt pt_BR ro ru sk sl sq sv ta tr uk vi zh_CN zh_TW"
336 GLIB_GNU_GETTEXT
337
338 if test "$gt_cv_have_gettext" != "yes" ; then
339   AC_MSG_ERROR([
340 *** You must have either have gettext support in your C library, or use the 
341 *** GNU gettext library. (http://www.gnu.org/software/gettext/gettext.html
342 ])
343 fi
344
345 LIBS="$LIBS $INTLLIBS"
346
347 GETTEXT_PACKAGE=glib20
348 AC_SUBST(GETTEXT_PACKAGE)
349 AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE", 
350   [Define the gettext package to be used])
351
352 GLIB_DEFINE_LOCALEDIR(GLIB_LOCALE_DIR)
353
354 AC_CHECK_FUNCS(bind_textdomain_codeset)
355
356 dnl
357 dnl Now we are done with gettext checks, figure out ICONV_LIBS
358 dnl
359
360 if test x$with_libiconv != xno ; then
361   case " $INTLLIBS " in
362   *[[\ \        ]]-liconv[[\ \  ]]*) ;;
363   *) ICONV_LIBS="-liconv" ;;
364   esac
365 fi
366 AC_SUBST(ICONV_LIBS)
367
368 case $with_libiconv in
369   gnu)
370     AC_DEFINE(USE_LIBICONV_GNU, 1, [Using GNU libiconv])
371     ;;
372   native)
373     AC_DEFINE(USE_LIBICONV_NATIVE, 1, [Using a native implementation of iconv in a separate library])
374     ;;
375 esac
376
377 dnl Initialize libtool
378 AM_DISABLE_STATIC
379 AC_LIBTOOL_WIN32_DLL
380 AM_PROG_LIBTOOL
381
382 if test "x$GCC" = "xyes"; then
383   case " $CFLAGS " in
384   *[[\ \        ]]-Wall[[\ \    ]]*) ;;
385   *) CFLAGS="$CFLAGS -Wall" ;;
386   esac
387
388   if test "x$enable_ansi" = "xyes"; then
389     case " $CFLAGS " in
390     *[[\ \      ]]-ansi[[\ \    ]]*) ;;
391     *) CFLAGS="$CFLAGS -ansi" ;;
392     esac
393
394     case " $CFLAGS " in
395     *[[\ \      ]]-pedantic[[\ \        ]]*) ;;
396     *) CFLAGS="$CFLAGS -pedantic" ;;
397     esac
398   fi
399 fi
400
401 dnl
402 dnl DU4 native cc currently needs -std1 for ANSI mode (instead of K&R)
403 dnl
404 if test $cross_compiling != yes ; then
405     AC_MSG_CHECKING([for extra flags to get ANSI library prototypes])
406     glib_save_LIBS=$LIBS
407     LIBS="$LIBS -lm"
408     AC_TRY_RUN([#include <math.h>
409                  int main (void) { return (log(1) != log(1.)); }],
410          AC_MSG_RESULT(none needed),
411          glib_save_CFLAGS=$CFLAGS
412          CFLAGS="$CFLAGS -std1"
413          AC_TRY_RUN([#include <math.h>
414                      int main (void) { return (log(1) != log(1.)); }],
415              AC_MSG_RESULT(-std1),
416              AC_MSG_RESULT()
417              CFLAGS=$glib_save_CFLAGS
418              AC_MSG_WARN(
419                     [No ANSI prototypes found in library. (-std1 didn't work.)])
420          )
421     )
422     LIBS=$glib_save_LIBS
423 fi
424
425 dnl NeXTStep cc seems to need this
426 AC_MSG_CHECKING([for extra flags for POSIX compliance])
427 AC_TRY_COMPILE([#include <dirent.h>], [DIR *dir;],
428   AC_MSG_RESULT(none needed),
429   glib_save_CFLAGS=$CFLAGS
430   CFLAGS="$CFLAGS -posix"
431   AC_TRY_COMPILE([#include <dirent.h>], [DIR *dir;],
432     AC_MSG_RESULT(-posix),
433     AC_MSG_RESULT()
434     CFLAGS=$glib_save_CFLAGS
435     AC_MSG_WARN([Could not determine POSIX flag. (-posix didn't work.)])))
436
437 # Checks for header files.
438 AC_HEADER_STDC
439
440 # Checks for library functions.
441 AC_FUNC_VPRINTF
442
443 AC_FUNC_ALLOCA
444
445 AC_CHECK_FUNCS(atexit on_exit)
446
447 AC_CHECK_SIZEOF(char)
448 AC_CHECK_SIZEOF(short)
449 AC_CHECK_SIZEOF(long)
450 AC_CHECK_SIZEOF(int)
451 AC_CHECK_SIZEOF(void *)
452 AC_CHECK_SIZEOF(long long)
453 AC_CHECK_SIZEOF(__int64)
454
455 if test x$ac_cv_sizeof_long = x8 || test x$ac_cv_sizeof_long_long = x8 || test x$ac_cv_sizeof___int64 = x8 ; then
456   :
457 else
458   AC_MSG_ERROR([
459 *** GLib requires a 64 bit type. You might want to consider
460 *** using the GNU C compiler.
461 ])
462 fi
463
464 if test x$ac_cv_sizeof_long_long = x8; then
465         # long long is a 64 bit integer.
466         AC_MSG_CHECKING(for format to printf and scanf a guint64)
467         AC_CACHE_VAL(glib_cv_long_long_format,[
468                 for format in ll q I64; do
469                   AC_TRY_RUN([#include <stdio.h>  
470                         int main()
471                         {
472                           long long b, a = -0x3AFAFAFAFAFAFAFALL;
473                           char buffer[1000];
474                           sprintf (buffer, "%${format}u", a);
475                           sscanf (buffer, "%${format}u", &b);
476                           exit (b!=a);
477                         }
478                         ],
479                         glib_cv_long_long_format=${format}
480                         break)
481                 done])
482         if test -n "$glib_cv_long_long_format"; then
483           AC_MSG_RESULT(%${glib_cv_long_long_format}u)
484         else
485           AC_MSG_RESULT(none)
486         fi
487 elif test x$ac_cv_sizeof___int64 = x8; then
488         # __int64 is a 64 bit integer.
489         AC_MSG_CHECKING(for format to printf and scanf a guint64)
490         # We know this is MSVC, and what the formats are
491         glib_cv_long_long_format=I64
492         AC_MSG_RESULT(%${glib_cv_long_long_format}u)
493 fi
494
495 dnl long doubles were not used, and a portability problem
496 dnl AC_C_LONG_DOUBLE
497 AC_C_CONST
498
499 dnl ok, here we try to check whether the systems prototypes for
500 dnl malloc and friends actually match the prototypes provided
501 dnl by gmem.h (keep in sync). i currently only know how to check
502 dnl this reliably with gcc (-Werror), improvements for other
503 dnl compilers are apprechiated.
504 SANE_MALLOC_PROTOS=no
505 AC_MSG_CHECKING([if malloc() and friends prototypes are gmem.h compatible])
506 glib_save_CFLAGS=$CFLAGS
507 if test "x$GCC" = "xyes"; then
508   CFLAGS="$CFLAGS -Werror"
509   AC_TRY_COMPILE([#include <stdlib.h>], [
510     void* (*my_calloc_p)  (size_t, size_t) = calloc;
511     void* (*my_malloc_p)  (size_t)         = malloc;
512     void  (*my_free_p)    (void*)          = free;
513     void* (*my_realloc_p) (void*, size_t)  = realloc;
514     my_calloc_p = 0;
515     my_malloc_p = 0;
516     my_free_p = 0;
517     my_realloc_p = 0;
518   ],
519     AC_DEFINE(SANE_MALLOC_PROTOS, 1, 
520       [Define if you have correct malloc prototypes])
521     SANE_MALLOC_PROTOS=yes)
522 fi
523 AC_MSG_RESULT($SANE_MALLOC_PROTOS)
524 CFLAGS=$glib_save_CFLAGS
525
526 dnl
527 dnl check in which direction the stack grows
528 dnl
529 AC_CACHE_CHECK([for growing stack pointer],glib_cv_stack_grows,[
530         AC_TRY_RUN([
531         volatile int *a = 0, *b = 0;
532         void foo (void);
533         int main () { volatile int y = 7; a = &y; foo (); return b > a; }
534         void foo (void) { volatile int x = 5; b = &x; }
535         ],
536         glib_cv_stack_grows=no
537         ,
538         glib_cv_stack_grows=yes
539         ,)
540 ])
541
542 dnl AC_C_INLINE is useless to us since it bails out too early, we need to
543 dnl truely know which ones of `inline', `__inline' and `__inline__' are
544 dnl actually supported.
545 AC_CACHE_CHECK([for __inline],glib_cv_has__inline,[
546         AC_TRY_COMPILE([
547         __inline int foo () { return 0; }
548         int main () { return foo (); }
549         ],
550         glib_cv_has__inline=yes
551         ,
552         glib_cv_has__inline=no
553         ,)
554 ])
555 case x$glib_cv_has__inline in
556 xyes) AC_DEFINE(G_HAVE___INLINE,1,[Have __inline keyword])
557 esac
558 AC_CACHE_CHECK([for __inline__],glib_cv_has__inline__,[
559         AC_TRY_COMPILE([
560         __inline__ int foo () { return 0; }
561         int main () { return foo (); }
562         ],
563         glib_cv_has__inline__=yes
564         ,
565         glib_cv_has__inline__=no
566         ,)
567 ])
568 case x$glib_cv_has__inline__ in
569 xyes) AC_DEFINE(G_HAVE___INLINE__,1,[Have __inline__ keyword])
570 esac
571 AC_CACHE_CHECK([for inline], glib_cv_hasinline,[
572         AC_TRY_COMPILE([
573         #undef inline
574         inline int foo () { return 0; }
575         int main () { return foo (); }
576         ],
577         glib_cv_hasinline=yes
578         ,
579         glib_cv_hasinline=no
580         ,)
581 ])
582 case x$glib_cv_hasinline in
583 xyes) AC_DEFINE(G_HAVE_INLINE,1,[Have inline keyword])
584 esac
585
586 # check for flavours of varargs macros
587 AC_MSG_CHECKING(for ISO C99 varargs macros in C)
588 AC_TRY_COMPILE([],[
589 int a(int p1, int p2, int p3);
590 #define call_a(...) a(1,__VA_ARGS__)
591 call_a(2,3);
592 ],g_have_iso_c_varargs=yes,g_have_iso_c_varargs=no)
593 AC_MSG_RESULT($g_have_iso_c_varargs)
594
595 AC_MSG_CHECKING(for ISO C99 varargs macros in C++)
596 if test "$CXX" = ""; then
597 dnl No C++ compiler
598   g_have_iso_cxx_varargs=no
599 else
600   AC_LANG_CPLUSPLUS
601   AC_TRY_COMPILE([],[
602 int a(int p1, int p2, int p3);
603 #define call_a(...) a(1,__VA_ARGS__)
604 call_a(2,3);
605 ],g_have_iso_cxx_varargs=yes,g_have_iso_cxx_varargs=no)
606   AC_LANG_C
607 fi
608 AC_MSG_RESULT($g_have_iso_cxx_varargs)
609
610 AC_MSG_CHECKING(for GNUC varargs macros)
611 AC_TRY_COMPILE([],[
612 int a(int p1, int p2, int p3);
613 #define call_a(params...) a(1,params)
614 call_a(2,3);
615 ],g_have_gnuc_varargs=yes,g_have_gnuc_varargs=no)
616 AC_MSG_RESULT($g_have_gnuc_varargs)
617
618 # check for bytesex stuff
619 AC_C_BIGENDIAN
620
621 # check for header files
622 AC_CHECK_HEADERS([dirent.h float.h limits.h pwd.h sys/param.h sys/poll.h sys/select.h sys/types.h])
623 AC_CHECK_HEADERS([sys/time.h sys/times.h unistd.h values.h stdint.h sched.h])
624
625 # Checks for libcharset
626 jm_LANGINFO_CODESET
627 jm_GLIBC21
628 AC_CHECK_HEADERS([stddef.h stdlib.h string.h])
629 AC_CHECK_FUNCS(setlocale)
630
631 AC_MSG_CHECKING(whether make is GNU Make)
632 STRIP_BEGIN=
633 STRIP_END=
634 if $ac_make --version 2>/dev/null | grep '^GNU Make ' >/dev/null ; then
635         STRIP_BEGIN='$(strip $(STRIP_DUMMY)'
636         STRIP_END=')'
637         AC_MSG_RESULT(yes)
638 else
639         AC_MSG_RESULT(no)
640 fi
641 STRIP_DUMMY=
642 AC_SUBST(STRIP_DUMMY)
643 AC_SUBST(STRIP_BEGIN)
644 AC_SUBST(STRIP_END)
645
646 # check additional type sizes
647 AC_CHECK_SIZEOF(size_t)
648
649 dnl Try to figure out whether gsize, gssize should be long or int
650 AC_MSG_CHECKING([for the appropriate definition for size_t])
651
652 case $ac_cv_sizeof_size_t in
653   $ac_cv_sizeof_short) 
654       glib_size_type=short
655       ;;
656   $ac_cv_sizeof_int) 
657       glib_size_type=int
658       ;;
659   $ac_cv_sizeof_long) 
660       glib_size_type=long
661       ;;
662   *)  AC_MSG_ERROR([No type matching size_t in size])
663       ;;
664 esac
665
666 dnl If int/long are the same size, we see which one produces
667 dnl warnings when used in the location as size_t. (This matters
668 dnl on AIX with xlc)
669 dnl
670 if test $ac_cv_sizeof_size_t = $ac_cv_sizeof_int &&
671    test $ac_cv_sizeof_size_t = $ac_cv_sizeof_long ; then
672   GLIB_CHECK_COMPILE_WARNINGS([
673 #include <stddef.h> 
674 int main ()
675 {
676   size_t s = 1;
677   unsigned int *size_int = &s;
678   return (int)*size_int;
679 }
680     ],glib_size_type=int,
681       [GLIB_CHECK_COMPILE_WARNINGS([
682 #include <stddef.h> 
683 int main ()
684 {
685    size_t s = 1;
686    unsigned long *size_long = &s;
687    return (int)*size_long;
688 }
689         ],glib_size_type=long)])
690 fi
691
692 AC_MSG_RESULT(unsigned $glib_size_type)
693
694 # Check for some functions
695 AC_CHECK_FUNCS(lstat strerror strsignal memmove mkstemp vsnprintf stpcpy strcasecmp strncasecmp poll getcwd nanosleep vasprintf unsetenv getc_unlocked)
696
697 AC_FUNC_VSNPRINTF_C99
698 AC_FUNC_PRINTF_UNIX98
699
700 #
701 # Check whether to use trio printf
702 #
703
704 AC_ARG_ENABLE(included-printf, [  --enable-included-printf    use included printf [default=auto]], enable_trio="$enableval")
705
706 if test "$enable_trio" != "no" ; then
707   if test "$ac_cv_func_vsnprintf_c99" != "yes" ; then
708     enable_trio=yes
709   fi
710   if test "$ac_cv_func_printf_unix98" != "yes" ; then
711     enable_trio=yes
712   fi
713 fi
714
715 AM_CONDITIONAL(HAVE_GOOD_PRINTF, test "$enable_trio" != "yes")
716 if test "$enable_trio" != "yes" ; then 
717   AC_DEFINE(HAVE_GOOD_PRINTF,1,[define to use system printf])
718 else
719   AC_DEFINE(HAVE_VASPRINTF,1)
720   AC_DEFINE(HAVE_C99_VSNPRINTF,1)
721   AC_DEFINE(HAVE_UNIX98_PRINTF,1)
722 fi
723
724 # Check if bcopy can be used for overlapping copies, if memmove isn't found.
725 # The check is borrowed from the PERL Configure script.
726 if test "$ac_cv_func_memmove" != "yes"; then
727   AC_CACHE_CHECK(whether bcopy can handle overlapping copies,
728     glib_cv_working_bcopy,[AC_TRY_RUN([
729       int main() {
730         char buf[128], abc[128], *b;
731         int len, off, align;
732         bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
733         for (align = 7; align >= 0; align--) {
734           for (len = 36; len; len--) {
735             b = buf+align; bcopy(abc, b, len);
736             for (off = 1; off <= len; off++) {
737               bcopy(b, b+off, len); bcopy(b+off, b, len);
738                 if (bcmp(b, abc, len)) return(1);
739             }
740           }
741         }
742         return(0);
743       }],glib_cv_working_bcopy=yes,glib_cv_working_bcopy=no)])
744
745   GLIB_ASSERT_SET(glib_cv_working_bcopy)
746   if test "$glib_cv_working_bcopy" = "yes"; then
747     AC_DEFINE(HAVE_WORKING_BCOPY,1,[Have a working bcopy])
748   fi
749 fi
750
751 # Check for sys_errlist
752 AC_MSG_CHECKING(for sys_errlist)
753 AC_TRY_LINK(, [
754 extern char *sys_errlist[];
755 extern int sys_nerr;
756 sys_errlist[sys_nerr-1][0] = 0;
757 ], glib_ok=yes, glib_ok=no)
758 AC_MSG_RESULT($glib_ok)
759 if test "$glib_ok" = "no"; then
760     AC_DEFINE(NO_SYS_ERRLIST,1,[global 'sys_errlist' not found])
761 fi
762
763 # Check for sys_siglist
764 AC_MSG_CHECKING(for sys_siglist)
765 AC_TRY_LINK(, [
766 extern char *sys_siglist[];
767 exit (sys_siglist[0]);
768 ], glib_ok=yes, glib_ok=no)
769 AC_MSG_RESULT($glib_ok)
770 if test "$glib_ok" = "no"; then
771     AC_DEFINE(NO_SYS_SIGLIST,1,[global 'sys_siglist' not found])
772 fi
773
774 # Check for sys_siglist decl (see Tue Jan 19 00:44:24 1999 in changelog)
775 AC_MSG_CHECKING(for sys_siglist declaration)
776 AC_TRY_COMPILE([#include <signal.h>], [
777 strlen (sys_siglist[0]);
778 ], glib_ok=yes, glib_ok=no)
779 AC_MSG_RESULT($glib_ok)
780 if test "$glib_ok" = "no"; then
781     AC_DEFINE(NO_SYS_SIGLIST_DECL,1,[global 'sys_siglist' not declared])
782 fi
783
784 # Check if <sys/select.h> needs to be included for fd_set
785 AC_MSG_CHECKING([for fd_set])
786 AC_TRY_COMPILE([#include <sys/types.h>],
787         [fd_set readMask, writeMask;], gtk_ok=yes, gtk_ok=no)
788 if test "$gtk_ok" = "yes"; then
789     AC_MSG_RESULT([yes, found in sys/types.h])
790 else
791     AC_EGREP_HEADER(fd_set, sys/select.h, gtk_ok=yes)
792     if test "$gtk_ok" = "yes"; then
793         # *** FIXME: give it a different name
794         AC_DEFINE(HAVE_SYS_SELECT_H,1,[found fd_set in sys/select.h])
795         AC_MSG_RESULT([yes, found in sys/select.h])
796     else
797         AC_DEFINE(NO_FD_SET,1,[didn't find fd_set])
798         AC_MSG_RESULT(no)
799     fi
800 fi
801
802 dnl *** check for sane realloc() ***
803 AC_CACHE_CHECK([whether realloc (NULL,) will work],glib_cv_sane_realloc,[
804         AC_TRY_RUN([#include <stdlib.h>
805         int main() {
806           return realloc (0, sizeof (int)) == 0;
807         }],
808         [glib_cv_sane_realloc=yes],
809         [glib_cv_sane_realloc=no],
810         [glib_cv_sane_realloc=yes])
811 ])
812 if test x$glib_cv_sane_realloc = xyes; then
813   AC_DEFINE(REALLOC_0_WORKS,1,[whether realloc (NULL,) works])
814 fi
815
816 dnl Check for nl_langinfo and CODESET
817
818 AC_MSG_CHECKING([for nl_langinfo (CODESET)])
819 AC_TRY_COMPILE([#include <langinfo.h>],
820         [char *codeset = nl_langinfo (CODESET);],
821    AC_DEFINE(HAVE_CODESET,1,[Have nl_langinfo (CODESET)])
822    have_codeset=yes,
823    have_codeset=no)
824 AC_MSG_RESULT($have_codeset)
825
826
827 dnl ****************************************
828 dnl *** strlcpy/strlcat                  ***
829 dnl ****************************************
830 # Check for strlcpy
831 AC_CACHE_CHECK([for OpenBSD strlcpy/strlcat],glib_cv_have_strlcpy,[
832 AC_TRY_RUN([#include <stdlib.h>
833 #include <string.h>
834 int main() {
835   char p[10];
836   (void) strlcpy (p, "hi", 10);
837   if (strlcat (p, "bye", 0) != 3) 
838     return 1;
839   return 0;
840 }], glib_cv_have_strlcpy=yes, 
841     glib_cv_have_strlcpy=no,
842     glib_cv_have_strlcpy=no)])
843 if test "$glib_cv_have_strlcpy" = "yes"; then
844     AC_DEFINE(HAVE_STRLCPY,1,[Have functions strlcpy and strlcat])
845 fi
846   
847
848 dnl **********************
849 dnl *** va_copy checks ***
850 dnl **********************
851 dnl we currently check for all three va_copy possibilities, so we get
852 dnl all results in config.log for bug reports.
853 AC_CACHE_CHECK([for an implementation of va_copy()],glib_cv_va_copy,[
854         AC_LINK_IFELSE([#include <stdarg.h>
855         void f (int i, ...) {
856         va_list args1, args2;
857         va_start (args1, i);
858         va_copy (args2, args1);
859         if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
860           exit (1);
861         va_end (args1); va_end (args2);
862         }
863         int main() {
864           f (0, 42);
865           return 0;
866         }],
867         [glib_cv_va_copy=yes],
868         [glib_cv_va_copy=no])
869 ])
870 AC_CACHE_CHECK([for an implementation of __va_copy()],glib_cv___va_copy,[
871         AC_LINK_IFELSE([#include <stdarg.h>
872         void f (int i, ...) {
873         va_list args1, args2;
874         va_start (args1, i);
875         __va_copy (args2, args1);
876         if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
877           exit (1);
878         va_end (args1); va_end (args2);
879         }
880         int main() {
881           f (0, 42);
882           return 0;
883         }],
884         [glib_cv___va_copy=yes],
885         [glib_cv___va_copy=no])
886 ])
887
888 if test "x$glib_cv_va_copy" = "xyes"; then
889   g_va_copy_func=va_copy
890 else if test "x$glib_cv___va_copy" = "xyes"; then
891   g_va_copy_func=__va_copy
892 fi
893 fi
894
895 if test -n "$g_va_copy_func"; then
896   AC_DEFINE_UNQUOTED(G_VA_COPY,$g_va_copy_func,[A 'va_copy' style function])
897 fi
898
899 AC_CACHE_CHECK([whether va_lists can be copied by value],glib_cv_va_val_copy,[
900         AC_TRY_RUN([#include <stdarg.h>
901         void f (int i, ...) {
902         va_list args1, args2;
903         va_start (args1, i);
904         args2 = args1;
905         if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
906           exit (1);
907         va_end (args1); va_end (args2);
908         }
909         int main() {
910           f (0, 42);
911           return 0;
912         }],
913         [glib_cv_va_val_copy=yes],
914         [glib_cv_va_val_copy=no],
915         [glib_cv_va_val_copy=yes])
916 ])
917
918 if test "x$glib_cv_va_val_copy" = "xno"; then
919   AC_DEFINE(G_VA_COPY_AS_ARRAY,1, ['va_lists' cannot be copies as values])
920 fi
921
922 dnl ***********************
923 dnl *** g_module checks ***
924 dnl ***********************
925 G_MODULE_LIBS=
926 G_MODULE_LIBS_EXTRA=
927 G_MODULE_PLUGIN_LIBS=
928 if test x"$glib_native_win32" = xyes; then
929   dnl No use for this on Win32
930   G_MODULE_LDFLAGS=
931 else
932   G_MODULE_LDFLAGS=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
933 fi
934 dnl G_MODULE_IMPL= don't reset, so cmd-line can override
935 G_MODULE_NEED_USCORE=0
936 G_MODULE_BROKEN_RTLD_GLOBAL=0
937 G_MODULE_HAVE_DLERROR=0
938 dnl *** force native WIN32 shared lib loader 
939 if test -z "$G_MODULE_IMPL"; then
940   case "$host" in
941   *-*-mingw*|*-*-cygwin*) G_MODULE_IMPL=G_MODULE_IMPL_WIN32 ;;
942   esac
943 fi
944 dnl *** dlopen() and dlsym() in system libraries
945 if test -z "$G_MODULE_IMPL"; then
946         AC_CHECK_FUNC(dlopen,
947                       [AC_CHECK_FUNC(dlsym,
948                                      [G_MODULE_IMPL=G_MODULE_IMPL_DL],[])],
949                       [])
950 fi
951 dnl *** load_image (BeOS)
952 if test -z "$G_MODULE_IMPL" && test "x$glib_native_beos" = "xyes"; then
953   AC_CHECK_LIB(root, load_image,
954       [G_MODULE_LIBS="-lbe -lroot -lglib"
955       G_MODULE_LIBS_EXTRA="-L\$(top_builddir_full)/.libs"
956       G_MODULE_PLUGIN_LIBS="-L\$(top_builddir_full)/gmodule/.libs -lgmodule"
957       G_MODULE_IMPL=G_MODULE_IMPL_BEOS],
958       [])
959 fi   
960 dnl *** NSLinkModule (dyld) in system libraries (Darwin)
961 if test -z "$G_MODULE_IMPL"; then
962         AC_CHECK_FUNC(NSLinkModule,
963                       [G_MODULE_IMPL=G_MODULE_IMPL_DYLD
964                        G_MODULE_NEED_USCORE=1],
965                       [])
966 fi
967 dnl *** dlopen() and dlsym() in libdl
968 if test -z "$G_MODULE_IMPL"; then
969         AC_CHECK_LIB(dl, dlopen,
970                      [AC_CHECK_LIB(dl, dlsym,
971                                    [G_MODULE_LIBS=-ldl
972                                    G_MODULE_IMPL=G_MODULE_IMPL_DL],[])],
973                      [])
974 fi
975 dnl *** shl_load() in libdld (HP-UX)
976 if test -z "$G_MODULE_IMPL"; then
977         AC_CHECK_LIB(dld, shl_load,
978                 [G_MODULE_LIBS=-ldld
979                 G_MODULE_IMPL=G_MODULE_IMPL_DLD],
980                 [])
981 fi
982 dnl *** additional checks for G_MODULE_IMPL_DL
983 if test "$G_MODULE_IMPL" = "G_MODULE_IMPL_DL"; then
984         LIBS_orig="$LIBS"
985         LDFLAGS_orig="$LDFLAGS"
986         LIBS="$LIBS $G_MODULE_LIBS"
987         LDFLAGS="$LDFLAGS $G_MODULE_LDFLAGS"
988 dnl *** check for OSF1/5.0 RTLD_GLOBAL brokenness
989         AC_CACHE_CHECK([for RTLD_GLOBAL brokenness],
990                 glib_cv_rtldglobal_broken,[
991                 AC_TRY_RUN([
992 #include <dlfcn.h>
993 #ifndef RTLD_GLOBAL
994 #  define RTLD_GLOBAL 0
995 #endif
996 #ifndef RTLD_LAZY
997 #  define RTLD_LAZY 0
998 #endif
999 int pthread_create;
1000 int main () {
1001     void *handle, *global, *local;
1002     global = &pthread_create;
1003     handle = dlopen ("libpthread.so", RTLD_GLOBAL | RTLD_LAZY);
1004     if (!handle) return 0;
1005     local = dlsym (handle, "pthread_create");
1006     return global == local;
1007 }                       ],
1008                         [glib_cv_rtldglobal_broken=no],
1009                         [glib_cv_rtldglobal_broken=yes],
1010                         [glib_cv_rtldglobal_broken=no])
1011                 rm -f plugin.c plugin.o plugin.lo
1012         ])
1013         if test "x$glib_cv_rtldglobal_broken" = "xyes"; then
1014                 G_MODULE_BROKEN_RTLD_GLOBAL=1
1015         else
1016                 G_MODULE_BROKEN_RTLD_GLOBAL=0
1017         fi
1018 dnl *** check whether we need preceeding underscores
1019         AC_CACHE_CHECK([for preceeding underscore in symbols],
1020                 glib_cv_uscore,[
1021                 AC_TRY_RUN([#include <dlfcn.h>
1022                 int glib_underscore_test (void) { return 42; }
1023                 int main() {
1024                   void *f1 = (void*)0, *f2 = (void*)0, *handle;
1025                   handle = dlopen ((void*)0, 0);
1026                   if (handle) {
1027                     f1 = dlsym (handle, "glib_underscore_test");
1028                     f2 = dlsym (handle, "_glib_underscore_test");
1029                   } return (!f2 || f1);
1030                 }],
1031                         [glib_cv_uscore=yes],
1032                         [glib_cv_uscore=no],
1033                         [])
1034                 rm -f plugin.c plugin.$ac_objext plugin.lo
1035         ])
1036         GLIB_ASSERT_SET(glib_cv_uscore)
1037         if test "x$glib_cv_uscore" = "xyes"; then
1038                 G_MODULE_NEED_USCORE=1
1039         else
1040                 G_MODULE_NEED_USCORE=0
1041         fi
1042
1043         LDFLAGS="$LDFLAGS_orig"
1044 dnl *** check for having dlerror()
1045         AC_CHECK_FUNC(dlerror,
1046                 [G_MODULE_HAVE_DLERROR=1],
1047                 [G_MODULE_HAVE_DLERROR=0])
1048         LIBS="$LIBS_orig"
1049 fi
1050 dnl *** done, have we got an implementation?
1051 if test -z "$G_MODULE_IMPL"; then
1052         G_MODULE_IMPL=0
1053         G_MODULE_SUPPORTED=false
1054 else
1055         G_MODULE_SUPPORTED=true
1056 fi
1057
1058 AC_MSG_CHECKING(for the suffix of shared libraries)
1059 case "$host_os" in
1060   hpux9* | hpux10* | hpux11*)  # taken from ltconfig
1061     glib_gmodule_suffix='sl'
1062     ;;
1063   cygwin* | mingw*)
1064     glib_gmodule_suffix='dll'
1065     ;;
1066   *)
1067     glib_gmodule_suffix='so'    
1068     ;;
1069 esac
1070 AC_MSG_RESULT(.$glib_gmodule_suffix)
1071  
1072 AC_SUBST(G_MODULE_SUPPORTED)
1073 AC_SUBST(G_MODULE_IMPL)
1074 AC_SUBST(G_MODULE_LIBS)
1075 AC_SUBST(G_MODULE_LIBS_EXTRA)
1076 AC_SUBST(G_MODULE_PLUGIN_LIBS)
1077 AC_SUBST(G_MODULE_LDFLAGS)
1078 AC_SUBST(G_MODULE_HAVE_DLERROR)
1079 AC_SUBST(G_MODULE_BROKEN_RTLD_GLOBAL)
1080 AC_SUBST(G_MODULE_NEED_USCORE)
1081 AC_SUBST(GLIB_DEBUG_FLAGS)
1082
1083 dnl **********************
1084 dnl *** g_spawn checks ***
1085 dnl **********************
1086
1087 AC_MSG_CHECKING(for gspawn implementation)
1088 case "$host" in
1089   *-*-mingw*)
1090     GSPAWN=gspawn-win32.lo
1091     ;;
1092   *)
1093     GSPAWN=gspawn.lo
1094     ;;    
1095 esac
1096 AC_MSG_RESULT($GSPAWN)
1097 AC_SUBST(GSPAWN)
1098
1099 dnl *************************
1100 dnl *** GIOChannel checks ***
1101 dnl *************************
1102
1103 AC_MSG_CHECKING(for GIOChannel implementation)
1104 case "$host" in
1105   *-*-mingw*)
1106     GIO=giowin32.lo
1107     ;;
1108   *)
1109     GIO=giounix.lo
1110     ;;    
1111 esac
1112 AC_MSG_RESULT($GIO)
1113 AC_SUBST(GIO)
1114
1115 dnl ****************************************
1116 dnl *** platform dependent source checks ***
1117 dnl ****************************************
1118
1119 AC_MSG_CHECKING(for platform-dependent source)
1120 case "$host" in
1121   *-*-cygwin*|*-*-mingw*)
1122     PLATFORMDEP=gwin32.lo
1123     ;;
1124   *)
1125     PLATFORMDEP=
1126     ;;    
1127 esac
1128 AC_MSG_RESULT($PLATFORMDEP)
1129 AC_SUBST(PLATFORMDEP)
1130
1131 AC_MSG_CHECKING([whether to compile timeloop])
1132 case "$host" in
1133   *-*-cygwin*|*-*-mingw*)
1134     enable_timeloop=no
1135     ;;
1136   *)
1137     enable_timeloop=yes
1138     ;;    
1139 esac
1140 AC_MSG_RESULT($enable_timeloop)
1141 AM_CONDITIONAL(ENABLE_TIMELOOP, test x$enable_timeloop = xyes)
1142
1143 AC_MSG_CHECKING([if building for some Win32 platform])
1144 case "$host" in
1145   *-*-mingw*|*-*-cygwin*)
1146     platform_win32=yes
1147     ;;
1148   *)
1149     platform_win32=no
1150     ;;
1151 esac
1152 AC_MSG_RESULT($platform_win32)
1153 AM_CONDITIONAL(PLATFORM_WIN32, test x$platform_win32 = xyes)
1154
1155 dnl ***********************
1156 dnl *** g_thread checks ***
1157 dnl ***********************
1158
1159 AC_ARG_WITH(threads, [  --with-threads=[none/posix/dce/solaris/win32] specify a thread implementation to use],
1160         if test "x$with_threads" = x; then
1161                 want_threads=yes
1162         else
1163                 want_threads=$with_threads
1164         fi,
1165         want_threads=yes)
1166 if test "x$enable_threads" = "xno"; then
1167         want_threads=no
1168 fi
1169
1170 dnl error and warning message
1171 dnl *************************
1172
1173 THREAD_NO_IMPLEMENTATION="You do not have any known thread system on your
1174                 computer. GLib will not have a default thread implementation."
1175
1176 FLAG_DOES_NOT_WORK="I can't find the MACRO to enable thread safety on your
1177                 platform (normally it's "_REENTRANT"). I'll not use any flag on
1178                 compilation now, but then your programs might not work.
1179                 Please provide information on how it is done on your system."
1180
1181 LIBS_NOT_FOUND_1="I can't find the libraries for the thread implementation
1182                 "
1183
1184 LIBS_NOT_FOUND_2=". Please choose another thread implementation or
1185                 provide information on your thread implementation.
1186                 You can also run 'configure --disable-threads' 
1187                 to compile without thread support."
1188
1189 FUNC_NO_GETPWUID_R="the 'g_get_(user_name|real_name|home_dir|tmp_dir)'
1190                 functions will not be MT-safe during their first call because
1191                 there is no working 'getpwuid_r' on your system."
1192
1193 FUNC_NO_LOCALTIME_R="the 'g_date_set_time' function will not be MT-safe
1194                 because there is no 'localtime_r' on your system."
1195
1196 POSIX_NO_YIELD="I can not find a yield functions for your platform. A rather
1197                 crude surrogate will be used. If you happen to know a 
1198                 yield function for your system, please inform the GLib 
1199                 developers."
1200
1201 POSIX_NO_PRIORITIES="I can not find the minimal and maximal priorities for 
1202                 threads on your system. Thus threads can only have the default 
1203                 priority. If you happen to know these main/max
1204                 priorities, please inform the GLib developers."
1205
1206 AIX_COMPILE_INFO="AIX's C compiler needs to be called by a different name, when
1207                 linking threaded applications. As GLib cannot do that 
1208                 automatically, you will get an linkg error everytime you are 
1209                 not using the right compiler. In that case you have to relink 
1210                 with the right compiler. Ususally just '_r' is appended 
1211                 to the compiler name."
1212
1213 dnl determination of thread implementation
1214 dnl ***************************************
1215
1216 # have_threads=no   means no thread support
1217 # have_threads=none means no default thread implementation
1218
1219 have_threads=no
1220 if test "x$want_threads" = xyes || test "x$want_threads" = xsolaris; then
1221         case $host in
1222                 *-*-solaris*)
1223                 AC_CHECK_LIB(thread, cond_init, have_threads=solaris)
1224                 ;;
1225         esac
1226 fi
1227 if test "x$want_threads" = xyes || test "x$want_threads" = xposix \
1228                                 || test "x$want_threads" = xdce; then
1229         # -D_POSIX4_DRAFT_SOURCE -D_POSIX4A_DRAFT10_SOURCE is for DG/UX
1230         # -U_OSF_SOURCE is for Digital UNIX 4.0d
1231         GTHREAD_COMPILE_IMPL_DEFINES="-D_POSIX4_DRAFT_SOURCE -D_POSIX4A_DRAFT10_SOURCE -U_OSF_SOURCE"
1232         glib_save_CPPFLAGS="$CPPFLAGS"
1233         CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
1234         if test "x$have_threads" = xno; then
1235                 AC_TRY_COMPILE([#include <pthread.h>],
1236                         [pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;],
1237                         have_threads=posix)
1238         fi
1239         if test "x$have_threads" = xno; then
1240                 AC_TRY_COMPILE([#include <pthread.h>],
1241                         [pthread_mutex_t m; 
1242                          pthread_mutex_init (&m, pthread_mutexattr_default);],
1243                         have_threads=dce)
1244         fi
1245         CPPFLAGS="$glib_save_CPPFLAGS"
1246 fi
1247 if test "x$want_threads" = xyes || test "x$want_threads" = xwin32; then
1248         case $host in
1249                 *-*-mingw*)
1250                 have_threads=win32
1251                 ;;
1252         esac
1253 fi
1254 if test "x$want_threads" = xnone; then
1255         have_threads=none
1256 fi
1257
1258 AC_MSG_CHECKING(for thread implementation)
1259
1260 if test "x$have_threads" = xno && test "x$want_threads" != xno; then
1261         AC_MSG_RESULT(none available)
1262         AC_MSG_WARN($THREAD_NO_IMPLEMENTATION)
1263 else
1264         AC_MSG_RESULT($have_threads)
1265 fi
1266
1267
1268 dnl determination of G_THREAD_CFLAGS
1269 dnl ********************************
1270
1271 G_THREAD_LIBS=
1272 G_THREAD_LIBS_EXTRA=
1273 G_THREAD_CFLAGS=
1274
1275 dnl
1276 dnl Test program for basic POSIX threads functionality
1277 dnl
1278 m4_define([glib_thread_test],[
1279 #include <pthread.h> 
1280 int check_me = 0;
1281 void* func(void* data) {return check_me = 42;}
1282 main()
1283  { pthread_t t; 
1284    void *ret;
1285    pthread_create (&t, 0, func, 0);
1286    pthread_join (t, &ret);
1287    exit (check_me != 42 || ret != 42);
1288 }])
1289
1290 dnl
1291 dnl Test program for sched_get_priority_min()
1292 dnl
1293 m4_define([glib_sched_priority_test],[
1294 #include <sched.h>
1295 #include <errno.h>
1296 int main() {
1297     errno = 0;
1298     return sched_get_priority_min(SCHED_OTHER)==-1
1299            && errno != 0;
1300 }])
1301
1302 if test x"$have_threads" != xno; then
1303
1304   if test x"$have_threads" = xposix; then
1305     # First we test for posix, whether -pthread or -pthreads do the trick as 
1306     # both CPPFLAG and LIBS. 
1307     # One of them does for most gcc versions and some other platforms/compilers
1308     # too and could be considered as the canonical way to go. 
1309     for flag in pthread pthreads; do
1310       glib_save_CFLAGS="$CFLAGS"
1311       CFLAGS="$CFLAGS -$flag"
1312       AC_TRY_RUN(glib_thread_test,
1313                  glib_flag_works=yes,
1314                  glib_flag_works=no,
1315                  [AC_LINK_IFELSE(glib_thread_test,
1316                                  glib_flag_works=yes,
1317                                  glib_flag_works=no)])
1318       CFLAGS="$glib_save_CFLAGS"
1319       if test $glib_flag_works = yes ; then
1320          G_THREAD_CFLAGS=-$flag
1321          G_THREAD_LIBS=-$flag
1322       fi
1323     done
1324   fi
1325
1326   if test x"$G_THREAD_CFLAGS" = x; then
1327
1328     # The canonical -pthread[s] does not work. Try something different.
1329
1330     case $host in
1331         *-aix*)
1332                 if test x"$GCC" = xyes; then
1333                         # GCC 3.0 and above needs -pthread. 
1334                         # Should be coverd by the case above.
1335                         # GCC 2.x and below needs -mthreads
1336                         G_THREAD_CFLAGS="-mthreads"             
1337                         G_THREAD_LIBS=$G_THREAD_CFLAGS
1338                 else 
1339                         # We are probably using the aix compiler. Normaly a 
1340                         # program would have to be compiled with the _r variant
1341                         # of the corresponding compiler, but we as GLib cannot 
1342                         # do that: but the good news is that for compiling the
1343                         # only difference is the added -D_THREAD_SAFE compile 
1344                         # option. This is according to the "C for AIX User's 
1345                         # Guide".
1346                         G_THREAD_CFLAGS="-D_THREAD_SAFE"
1347                 fi
1348                 ;;
1349         *-dg-dgux*)  # DG/UX
1350                 G_THREAD_CFLAGS="-D_REENTRANT -D_POSIX4A_DRAFT10_SOURCE"
1351                 ;;
1352         *-osf*)
1353                 # So we are using dce threads. posix threads are already 
1354                 # catched above.
1355                 G_THREAD_CFLAGS="-threads"
1356                 G_THREAD_LIBS=$G_THREAD_CFLAGS
1357                 ;;
1358         *-solaris*)
1359                 if test x"$GCC" = xyes; then
1360                    # We are using solaris threads. posix threads are 
1361                    # already catched above.
1362                         G_THREAD_CFLAGS="-threads"
1363                 else
1364                         G_THREAD_CFLAGS="-mt"
1365                 fi
1366                 G_THREAD_LIBS=$G_THREAD_CFLAGS
1367                 ;;
1368         *-sysv5uw7*) # UnixWare 7 
1369                 # We are not using gcc with -pthread. Catched above.
1370                 G_THREAD_CFLAGS="-Kthread"
1371                 G_THREAD_LIBS=$G_THREAD_CFLAGS
1372                 ;;
1373         *)
1374                 G_THREAD_CFLAGS="-D_REENTRANT" # good default guess otherwise
1375                 ;;
1376     esac
1377  
1378   fi
1379
1380     # if we are not finding the localtime_r function, then we probably are
1381     # not using the proper multithread flag
1382
1383     glib_save_CPPFLAGS="$CPPFLAGS"
1384     CPPFLAGS="$CPPFLAGS $G_THREAD_CFLAGS"
1385
1386     # First we test, whether localtime_r is declared in time.h
1387     # directly. Then we test whether a macro localtime_r exists, in
1388     # which case localtime_r in the test program is replaced and thus
1389     # if we still find localtime_r in the output, it is not defined as 
1390     # a macro.
1391
1392     AC_EGREP_CPP([[^a-zA-Z1-9_]localtime_r[^a-zA-Z1-9_]], [#include <time.h>], ,
1393       [AC_EGREP_CPP([[^a-zA-Z1-9_]localtime_r[^a-zA-Z1-9_]], [#include <time.h> 
1394                                                            localtime_r(a,b)],
1395                    AC_MSG_WARN($FLAG_DOES_NOT_WORK))])
1396
1397     CPPFLAGS="$glib_save_CPPFLAGS"
1398
1399     AC_MSG_CHECKING(thread related cflags)
1400     AC_MSG_RESULT($G_THREAD_CFLAGS)
1401     CPPFLAGS="$CPPFLAGS $G_THREAD_CFLAGS"
1402 fi
1403
1404 dnl determination of G_THREAD_LIBS
1405 dnl ******************************
1406
1407 mutex_has_default=no
1408 case $have_threads in
1409         posix|dce)
1410           glib_save_CPPFLAGS="$CPPFLAGS"
1411           CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
1412           if test x"$G_THREAD_LIBS" = x; then
1413             case $host in
1414               *-aix*)
1415                 # We are not using gcc (would have set G_THREAD_LIBS) and thus 
1416                 # probably using the aix compiler.
1417                 AC_MSG_WARN($AIX_COMPILE_INFO)
1418                 ;;
1419               *)
1420                 G_THREAD_LIBS=error
1421                 glib_save_LIBS="$LIBS"
1422                 for thread_lib in "" pthread pthread32 pthreads thread dce; do
1423                         if test x"$thread_lib" = x; then
1424                                 add_thread_lib=""
1425                                 IN=""
1426                         else
1427                                 add_thread_lib="-l$thread_lib"
1428                                 IN=" in -l$thread_lib"
1429                         fi
1430                         if test x"$have_threads" = xposix; then
1431                                 defattr=0
1432                         else
1433                                 defattr=pthread_attr_default
1434                         fi
1435                         
1436                         LIBS="$glib_save_LIBS $add_thread_lib"
1437                         
1438                         AC_MSG_CHECKING(for pthread_create/pthread_join$IN)
1439                         AC_TRY_RUN(glib_thread_test,
1440                                    glib_result=yes,
1441                                    glib_result=no,
1442                                    [AC_LINK_IFELSE(glib_thread_test,
1443                                                    glib_result=yes
1444                                                    glib_result=no)])
1445                         AC_MSG_RESULT($glib_result)
1446                         
1447                         if test "$glib_result" = "yes" ; then
1448                           G_THREAD_LIBS="$add_thread_lib"
1449                           break
1450                         fi
1451                 done
1452                 if test "x$G_THREAD_LIBS" = xerror; then
1453                   AC_MSG_ERROR($LIBS_NOT_FOUND_1$have_threads$LIBS_NOT_FOUND_2)
1454                 fi 
1455                 LIBS="$glib_save_LIBS"
1456                 ;;
1457             esac
1458           fi
1459
1460           glib_save_LIBS="$LIBS"
1461           for thread_lib in "" rt rte; do
1462             if test x"$thread_lib" = x; then
1463               add_thread_lib=""
1464               IN=""
1465             else
1466               add_thread_lib="-l$thread_lib"
1467               IN=" in -l$thread_lib"
1468             fi
1469             LIBS="$glib_save_LIBS $add_thread_lib"
1470             
1471             AC_MSG_CHECKING(for sched_get_priority_min$IN)
1472             AC_TRY_RUN(glib_sched_priority_test,
1473                        glib_result=yes,
1474                        glib_result=no,
1475                        [AC_LINK_IFELSE(glib_sched_priority_test,
1476                                        glib_result=yes
1477                                        glib_result=no)])
1478             AC_MSG_RESULT($glib_result)
1479
1480             if test "$glib_result" = "yes" ; then           
1481                G_THREAD_LIBS="$G_THREAD_LIBS $add_thread_lib"
1482                posix_priority_min="sched_get_priority_min(SCHED_OTHER)"
1483                posix_priority_max="sched_get_priority_max(SCHED_OTHER)"
1484                break
1485             fi
1486           done
1487           LIBS="$glib_save_LIBS"
1488           mutex_has_default=yes
1489           mutex_default_type='pthread_mutex_t'
1490           mutex_default_init='PTHREAD_MUTEX_INITIALIZER'
1491           mutex_header_file='pthread.h'
1492           if test "x$have_threads" = "xposix"; then
1493             g_threads_impl="POSIX"
1494           else
1495             g_threads_impl="DCE"
1496             have_threads="posix"
1497           fi
1498           AC_SUBST(GTHREAD_COMPILE_IMPL_DEFINES)
1499           CPPFLAGS="$glib_save_CPPFLAGS"
1500           ;;
1501         solaris)
1502            mutex_has_default=yes
1503            mutex_default_type='mutex_t'
1504            mutex_default_init="DEFAULTMUTEX"
1505            mutex_header_file='thread.h'
1506            g_threads_impl="SOLARIS"
1507            ;;
1508         win32)
1509            g_threads_impl="WIN32"
1510            ;;
1511         none|no)
1512            g_threads_impl="NONE"
1513            ;;
1514         *)
1515            g_threads_impl="NONE"
1516            G_THREAD_LIBS=error
1517            ;;
1518 esac
1519
1520 if test "x$G_THREAD_LIBS" = xerror; then
1521         AC_MSG_ERROR($LIBS_NOT_FOUND_1$have_threads$LIBS_NOT_FOUND_2)
1522 fi
1523
1524 case $host in
1525   *-*-beos*)
1526     G_THREAD_LIBS="-lbe -lroot -lglib "
1527     G_THREAD_LIBS_EXTRA="-L\$(top_builddir_full)/.libs"
1528     ;;
1529   *)
1530     ;;
1531 esac
1532
1533 AC_MSG_CHECKING(thread related libraries)
1534 AC_MSG_RESULT($G_THREAD_LIBS)
1535
1536 dnl check for mt safe function variants and some posix functions
1537 dnl ************************************************************
1538
1539 if test x"$have_threads" != xno; then
1540         glib_save_LIBS="$LIBS"
1541         # we are not doing the following for now, as this might require glib 
1542         # to always be linked with the thread libs on some platforms. 
1543         # LIBS="$LIBS $G_THREAD_LIBS"
1544         AC_CHECK_FUNCS(localtime_r)
1545         if test "$ac_cv_header_pwd_h" = "yes"; then
1546                 AC_CACHE_CHECK([for posix getpwuid_r],
1547                         ac_cv_func_posix_getpwuid_r,
1548                         [AC_TRY_RUN([
1549 #include <errno.h>
1550 #include <pwd.h>
1551 int main () { 
1552     char buffer[10000];
1553     struct passwd pwd, *pwptr = &pwd;
1554     int error;
1555     errno = 0;
1556     error = getpwuid_r (0, &pwd, buffer, 
1557                         sizeof (buffer), &pwptr);
1558    return (error < 0 && errno == ENOSYS) 
1559            || error == ENOSYS; 
1560 }                               ],
1561                                 [ac_cv_func_posix_getpwuid_r=yes],
1562                                 [ac_cv_func_posix_getpwuid_r=no])])
1563                 GLIB_ASSERT_SET(ac_cv_func_posix_getpwuid_r)
1564                 if test "$ac_cv_func_posix_getpwuid_r" = yes; then
1565                         AC_DEFINE(HAVE_POSIX_GETPWUID_R,1,
1566                                 [Have POSIX function getpwuid_r])
1567                 else
1568                         AC_CACHE_CHECK([for nonposix getpwuid_r],
1569                                 ac_cv_func_nonposix_getpwuid_r,
1570                                 [AC_TRY_LINK([#include <pwd.h>],
1571                                         [char buffer[10000];
1572                                         struct passwd pwd;
1573                                         getpwuid_r (0, &pwd, buffer, 
1574                                                         sizeof (buffer));],
1575                                         [ac_cv_func_nonposix_getpwuid_r=yes],
1576                                         [ac_cv_func_nonposix_getpwuid_r=no])])
1577                         GLIB_ASSERT_SET(ac_cv_func_nonposix_getpwuid_r)
1578                         if test "$ac_cv_func_nonposix_getpwuid_r" = yes; then
1579                                 AC_DEFINE(HAVE_NONPOSIX_GETPWUID_R,1,
1580                                         [Have non-POSIX function getpwuid_r])
1581                         fi
1582                 fi
1583         fi
1584         LIBS="$LIBS $G_THREAD_LIBS"
1585         if test x"$have_threads" = xposix; then
1586                 glib_save_CPPFLAGS="$CPPFLAGS"
1587                 CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
1588                 dnl we might grow sizeof(pthread_t) later on, so use a dummy name here
1589                 GLIB_SIZEOF([#include <pthread.h>], pthread_t, system_thread)
1590                 # This is not AC_CHECK_FUNC to also work with function
1591                 # name mangling in header files.
1592                 AC_MSG_CHECKING(for pthread_attr_setstacksize)
1593                 AC_TRY_LINK([#include <pthread.h>],
1594                         [pthread_attr_t t; pthread_attr_setstacksize(&t,0)],
1595                         [AC_MSG_RESULT(yes)
1596                         AC_DEFINE(HAVE_PTHREAD_ATTR_SETSTACKSIZE,1,
1597                                   [Have function pthread_attr_setstacksize])],
1598                         [AC_MSG_RESULT(no)])
1599                 AC_MSG_CHECKING(for minimal/maximal thread priority)
1600                 if test x"$posix_priority_min" = x; then
1601                         AC_EGREP_CPP(PX_PRIO_MIN,[#include <pthread.h>
1602                                 PX_PRIO_MIN],,[
1603                                 posix_priority_min=PX_PRIO_MIN
1604                                 posix_priority_max=PX_PRIO_MAX])
1605                 fi
1606                 if test x"$posix_priority_min" = x; then
1607                         # AIX
1608                         AC_EGREP_CPP(PTHREAD_PRIO_MIN,[#include <pthread.h>
1609                                 PTHREAD_PRIO_MIN],,[
1610                                 posix_priority_min=PTHREAD_PRIO_MIN
1611                                 posix_priority_max=PTHREAD_PRIO_MAX])
1612                 fi
1613                 if test x"$posix_priority_min" = x; then
1614                         AC_EGREP_CPP(PRI_OTHER_MIN,[#include <pthread.h>
1615                                 PRI_OTHER_MIN],,[
1616                                 posix_priority_min=PRI_OTHER_MIN        
1617                                 posix_priority_max=PRI_OTHER_MAX])
1618                 fi
1619                 if test x"$posix_priority_min" = x; then
1620                         AC_MSG_RESULT(none found)
1621                         AC_MSG_WARN($POSIX_NO_PRIORITIES)
1622                         posix_priority_min=-1
1623                         posix_priority_max=-1
1624                 else
1625                         AC_MSG_RESULT($posix_priority_min/$posix_priority_max)
1626                         AC_DEFINE_UNQUOTED(POSIX_MIN_PRIORITY,$posix_priority_min,[Minimum POSIX RT priority])
1627                         AC_DEFINE_UNQUOTED(POSIX_MAX_PRIORITY,$posix_priority_max,[Maximum POSIX RT priority])
1628                 fi
1629                 posix_yield_func=none
1630                 AC_MSG_CHECKING(for posix yield function)
1631                 for yield_func in sched_yield pthread_yield_np pthread_yield \
1632                                                         thr_yield; do
1633                         AC_TRY_LINK([#include <pthread.h>],
1634                                 [$yield_func()],
1635                                 [posix_yield_func="$yield_func"
1636                                 break])
1637                 done            
1638                 if test x"$posix_yield_func" = xnone; then
1639                         AC_MSG_RESULT(none found)
1640                         AC_MSG_WARN($POSIX_NO_YIELD)
1641                         posix_yield_func="g_usleep(1000)"
1642                 else
1643                         AC_MSG_RESULT($posix_yield_func)
1644                         posix_yield_func="$posix_yield_func()"
1645                 fi
1646                 AC_DEFINE_UNQUOTED(POSIX_YIELD_FUNC,$posix_yield_func,[The POSIX RT yield function])
1647                 CPPFLAGS="$glib_save_CPPFLAGS"
1648
1649                 AC_CACHE_CHECK([whether to use the PID niceness surrogate for thread priorities], 
1650                                glib_cv_use_pid_surrogate, 
1651                  [AC_TRY_RUN([
1652 #include <pthread.h> 
1653 #include <sys/types.h>
1654 #include <unistd.h>
1655 pid_t other_pid = 0;
1656
1657 void* func(void* data) {other_pid = getpid();}
1658 main()
1659 { pthread_t t; 
1660   void *ret;
1661   pthread_create (&t, 0, func, NULL);
1662   pthread_join (t, &ret);
1663   exit (getpid()==other_pid || 
1664         $posix_priority_min != $posix_priority_max);
1665 }               ],
1666                 [glib_cv_use_pid_surrogate=yes],
1667                 [glib_cv_use_pid_surrogate=no],
1668                 [])])
1669           GLIB_ASSERT_SET(glib_cv_use_pid_surrogate)
1670           if test "$glib_cv_use_pid_surrogate" = "yes" ; then
1671             AC_DEFINE(G_THREAD_USE_PID_SURROGATE, 1, 
1672                       [whether to use the PID niceness surrogate for thread priorities])
1673           fi
1674            
1675         elif test x"$have_threads" = xwin32; then
1676                 # It's a pointer to a private struct
1677                 GLIB_SIZEOF(,struct _GThreadData *, system_thread)
1678         elif test x"$have_threads" = xsolaris; then 
1679                 GLIB_SIZEOF([#include <thread.h>], thread_t, system_thread)
1680         fi
1681
1682         LIBS="$glib_save_LIBS"
1683
1684         # now spit out all the warnings.
1685         if test "$ac_cv_func_posix_getpwuid_r" != "yes" && 
1686            test "$ac_cv_func_nonposix_getpwuid_r" != "yes"; then
1687                 AC_MSG_WARN($FUNC_NO_GETPWUID_R)
1688         fi
1689         if test "$ac_cv_func_localtime_r" != "yes"; then
1690                 AC_MSG_WARN($FUNC_NO_LOCALTIME_R)
1691         fi
1692 fi      
1693
1694 if test x"$glib_cv_sizeof_system_thread" = x; then
1695    # use a pointer as a fallback.
1696    GLIB_SIZEOF(,void *, system_thread)
1697 fi
1698
1699 AC_DEFINE_UNQUOTED(G_THREAD_SOURCE,"gthread-$have_threads.c",
1700                    [Source file containing theread implementation])
1701 AC_SUBST(G_THREAD_CFLAGS)
1702 AC_SUBST(G_THREAD_LIBS)
1703 AC_SUBST(G_THREAD_LIBS_EXTRA)
1704
1705 dnl **********************************************
1706 dnl *** GDefaultMutex setup and initialization ***
1707 dnl **********************************************
1708 dnl
1709 dnl if mutex_has_default = yes, we also got
1710 dnl mutex_default_type, mutex_default_init and mutex_header_file
1711 if test $mutex_has_default = yes ; then
1712         glib_save_CPPFLAGS="$CPPFLAGS"
1713         glib_save_LIBS="$LIBS"
1714         LIBS="$LIBS $G_THREAD_LIBS"
1715         CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
1716         GLIB_SIZEOF([#include <$mutex_header_file>],
1717                     $mutex_default_type,
1718                     gmutex)
1719         GLIB_BYTE_CONTENTS([#include <$mutex_header_file>],
1720                            $mutex_default_type,
1721                            gmutex,
1722                            $glib_cv_sizeof_gmutex,
1723                            $mutex_default_init)
1724         if test x"$glib_cv_byte_contents_gmutex" = xno; then
1725                 mutex_has_default=no
1726         fi
1727         CPPFLAGS="$glib_save_CPPFLAGS"
1728         LIBS="$glib_save_LIBS"
1729 fi
1730
1731 dnl ****************************************
1732 dnl *** GLib POLL* compatibility defines ***
1733 dnl ****************************************
1734
1735 glib_poll_includes=["
1736 #include <sys/types.h>
1737 #include <sys/poll.h>
1738 "]
1739
1740 if test $ac_cv_header_sys_types_h = yes &&
1741    test $ac_cv_header_sys_poll_h = yes ; then
1742   glib_failed=false
1743   GLIB_CHECK_VALUE(POLLIN, $glib_poll_includes, glib_failed=true)
1744   GLIB_CHECK_VALUE(POLLOUT, $glib_poll_includes, glib_failed=true)
1745   GLIB_CHECK_VALUE(POLLPRI, $glib_poll_includes, glib_failed=true)
1746   GLIB_CHECK_VALUE(POLLERR, $glib_poll_includes, glib_failed=true)
1747   GLIB_CHECK_VALUE(POLLHUP, $glib_poll_includes, glib_failed=true)
1748   GLIB_CHECK_VALUE(POLLNVAL, $glib_poll_includes, glib_failed=true)
1749   if $glib_failed ; then
1750     AC_MSG_ERROR([Could not determine values for POLL* constants])
1751   fi
1752 else
1753   glib_cv_value_POLLIN=1
1754   glib_cv_value_POLLOUT=4
1755   glib_cv_value_POLLPRI=2
1756   glib_cv_value_POLLERR=8
1757   glib_cv_value_POLLHUP=16
1758   glib_cv_value_POLLNVAL=32
1759 fi
1760
1761 dnl **********************
1762 dnl *** Win32 API libs ***
1763 dnl **********************
1764
1765 case $host in
1766   *-*-cygwin*)
1767         G_LIBS_EXTRA="-luser32 -lkernel32"
1768     ;;
1769   *-*-mingw*)
1770         G_LIBS_EXTRA="-lwsock32"
1771     ;;
1772   *)
1773         G_LIBS_EXTRA=""
1774     ;;
1775 esac
1776 AC_SUBST(G_LIBS_EXTRA)
1777
1778 dnl If the system doesn't define EILSEQ, we should define EILSEQ ourselves
1779 dnl since we need it for g_iconv()
1780
1781 AC_MSG_CHECKING([for EILSEQ])
1782 AC_TRY_COMPILE([
1783 #include <errno.h>
1784 ],
1785 [
1786 int error = EILSEQ;
1787 ], have_eilseq=yes, have_eilseq=no);
1788 AC_MSG_RESULT($have_eilseq)
1789
1790 dnl ******************************************************************
1791 dnl *** Look for glib-genmarshal in PATH if we are cross-compiling ***
1792 dnl ******************************************************************
1793
1794 AM_CONDITIONAL(CROSS_COMPILING, test $cross_compiling = yes)
1795
1796 if test $cross_compiling = yes; then
1797   AC_PATH_PROG(GLIB_GENMARSHAL, glib-genmarshal, no)
1798   if test x$GLIB_GENMARSHAL = xno; then
1799     AC_MSG_ERROR(Could not find a glib-genmarshal in your PATH)
1800   fi
1801 fi
1802
1803 dnl **************************
1804 dnl *** Checks for gtk-doc ***
1805 dnl **************************
1806
1807 AC_ARG_WITH(html-dir, [  --with-html-dir=PATH    path to installed docs])
1808
1809 if test "x$with_html_dir" = "x" ; then
1810   HTML_DIR='${datadir}/gtk-doc/html'
1811 else
1812   HTML_DIR=$with_html_dir
1813 fi
1814
1815 AC_SUBST(HTML_DIR)
1816
1817 AC_CHECK_PROG(GTKDOC, gtkdoc-mkdb, true, false)
1818
1819 AC_CHECK_PROG(GTKDOC, gtkdoc-mkdb, true, false)
1820
1821 gtk_doc_min_version=0.10
1822 if $GTKDOC ; then
1823     gtk_doc_version=`gtkdoc-mkdb --version`
1824     AC_MSG_CHECKING([gtk-doc version ($gtk_doc_version) >= $gtk_doc_min_version])
1825
1826     IFS="${IFS=         }"; gtk_save_IFS="$IFS"; IFS="."
1827     set $gtk_doc_version
1828     for min in $gtk_doc_min_version ; do
1829         cur=$1; shift
1830         if test -z $min ; then break; fi
1831         if test -z $cur ; then GTKDOC=false; break; fi
1832         if test $cur -gt $min ; then break ; fi
1833         if test $cur -lt $min ; then GTKDOC=false; break ; fi
1834     done
1835     IFS="$gtk_save_IFS"
1836
1837     if $GTKDOC ; then
1838       AC_MSG_RESULT(yes)
1839     else
1840       AC_MSG_RESULT(no)
1841     fi
1842 fi
1843
1844 AM_CONDITIONAL(HAVE_GTK_DOC, $GTKDOC)
1845 AC_SUBST(HAVE_GTK_DOC)
1846
1847 AC_CHECK_PROG(DB2HTML, db2html, true, false)
1848 AM_CONDITIONAL(HAVE_DOCBOOK, $DB2HTML)
1849
1850 dnl Let people disable the gtk-doc stuff.
1851 AC_ARG_ENABLE(gtk-doc, [  --enable-gtk-doc        use gtk-doc to build documentation [default=auto]], enable_gtk_doc="$enableval", enable_gtk_doc=no)
1852
1853 if test x$enable_gtk_doc = xyes ; then
1854   if test x$GTKDOC = xtrue ; then
1855     enable_gtk_doc=yes
1856   else
1857     enable_gtk_doc=no 
1858   fi
1859 fi
1860
1861 dnl NOTE: We need to use a separate automake conditional for this
1862 dnl       to make this work with the tarballs.
1863 AM_CONDITIONAL(ENABLE_GTK_DOC, test x$enable_gtk_doc = xyes)
1864
1865 dnl ******************************
1866 dnl *** output the whole stuff ***
1867 dnl ******************************
1868
1869 AC_OUTPUT_COMMANDS([
1870
1871 ## Generate `glibconfig.h' in two cases
1872 ## 1. `config.status' is run either explicitly, or via configure.
1873 ##     Esp. not when it is run in `Makefile' to generate makefiles and
1874 ##     config.h
1875 ## 2. CONFIG_OTHER is set explicitly
1876 ##
1877 ## Case 1 is difficult.  We know that `automake' sets one of
1878 ## CONFIG_FILES or CONFIG_HEADERS to empty.  This heuristic works
1879 ## only when AM_CONFIG_HEADER is set, however.
1880
1881 if test -n "${CONFIG_FILES}" && test -n "${CONFIG_HEADERS}"; then
1882   # Both CONFIG_FILES and CONFIG_HEADERS are non-empty ==> Case 1
1883   CONFIG_OTHER=${CONFIG_OTHER:-glibconfig.h}
1884 fi
1885 case "$CONFIG_OTHER" in
1886 *glibconfig.h*)
1887         echo creating glibconfig.h
1888         outfile=glibconfig.h-tmp
1889         cat > $outfile <<\_______EOF
1890 /* glibconfig.h
1891  *
1892  * This is a generated file.  Please modify 'configure.in'
1893  */
1894
1895 #ifndef __G_LIBCONFIG_H__
1896 #define __G_LIBCONFIG_H__
1897
1898 #include <glib/gmacros.h>
1899
1900 _______EOF
1901
1902         if test x$glib_limits_h = xyes; then
1903           echo '#include <limits.h>' >> $outfile
1904         fi
1905         if test x$glib_float_h = xyes; then
1906           echo '#include <float.h>' >> $outfile
1907         fi
1908         if test x$glib_values_h = xyes; then
1909           echo '#include <values.h>' >> $outfile
1910         fi
1911         if test "$glib_header_alloca_h" = "yes"; then
1912           echo '#define GLIB_HAVE_ALLOCA_H' >> $outfile
1913         fi
1914         if test x$glib_sys_poll_h = xyes; then
1915           echo '#define GLIB_HAVE_SYS_POLL_H' >> $outfile
1916         fi
1917
1918         cat >> $outfile <<_______EOF
1919
1920 G_BEGIN_DECLS
1921
1922 #define G_MINFLOAT      $glib_mf
1923 #define G_MAXFLOAT      $glib_Mf
1924 #define G_MINDOUBLE     $glib_md
1925 #define G_MAXDOUBLE     $glib_Md
1926 #define G_MINSHORT      $glib_ms
1927 #define G_MAXSHORT      $glib_Ms
1928 #define G_MAXUSHORT     $glib_Mus
1929 #define G_MININT        $glib_mi
1930 #define G_MAXINT        $glib_Mi
1931 #define G_MAXUINT       $glib_Mui
1932 #define G_MINLONG       $glib_ml
1933 #define G_MAXLONG       $glib_Ml
1934 #define G_MAXULONG      $glib_Mul
1935
1936 #define G_MININT64      ((gint64)  0x8000000000000000)
1937 #define G_MAXINT64      ((gint64)  0x7fffffffffffffff)
1938 #define G_MAXUINT64     ((guint64) 0xffffffffffffffff)
1939
1940 _______EOF
1941
1942
1943         ### this should always be true in a modern C/C++ compiler
1944         cat >>$outfile <<_______EOF
1945 typedef signed char gint8;
1946 typedef unsigned char guint8;
1947 _______EOF
1948
1949
1950         if test -n "$gint16"; then
1951           cat >>$outfile <<_______EOF
1952 typedef signed $gint16 gint16;
1953 typedef unsigned $gint16 guint16;
1954 #define G_GINT16_FORMAT $gint16_format
1955 #define G_GUINT16_FORMAT $guint16_format
1956 _______EOF
1957         fi
1958
1959
1960         if test -n "$gint32"; then
1961           cat >>$outfile <<_______EOF
1962 typedef signed $gint32 gint32;
1963 typedef unsigned $gint32 guint32;
1964 #define G_GINT32_FORMAT $gint32_format
1965 #define G_GUINT32_FORMAT $guint32_format
1966 _______EOF
1967         fi
1968
1969         cat >>$outfile <<_______EOF
1970 #define G_HAVE_GINT64 1          /* deprecated, always true */
1971
1972 ${glib_extension}typedef signed $gint64 gint64;
1973 ${glib_extension}typedef unsigned $gint64 guint64;
1974
1975 #define G_GINT64_CONSTANT(val)  $gint64_constant
1976 _______EOF
1977
1978         if test x$gint64_format != x ; then
1979           cat >>$outfile <<_______EOF
1980 #define G_GINT64_FORMAT $gint64_format
1981 #define G_GUINT64_FORMAT $guint64_format
1982 _______EOF
1983         else
1984           cat >>$outfile <<_______EOF
1985 #undef G_GINT64_FORMAT
1986 #undef G_GUINT64_FORMAT
1987 _______EOF
1988         fi           
1989
1990         cat >>$outfile <<_______EOF
1991
1992 #define GLIB_SIZEOF_VOID_P $glib_void_p
1993 #define GLIB_SIZEOF_LONG   $glib_long
1994 #define GLIB_SIZEOF_SIZE_T $glib_size_t
1995
1996 _______EOF
1997
1998 echo "typedef signed $glib_size_type_define gssize;" >> $outfile
1999 echo "typedef unsigned $glib_size_type_define gsize;" >> $outfile
2000
2001         if test -z "$glib_unknown_void_p"; then
2002           cat >>$outfile <<_______EOF
2003
2004 #define GPOINTER_TO_INT(p)      ((gint)  ${glib_gpi_cast} (p))
2005 #define GPOINTER_TO_UINT(p)     ((guint) ${glib_gpui_cast} (p))
2006
2007 #define GINT_TO_POINTER(i)      ((gpointer) ${glib_gpi_cast} (i))
2008 #define GUINT_TO_POINTER(u)     ((gpointer) ${glib_gpui_cast} (u))
2009 _______EOF
2010         else
2011           echo '#error SIZEOF_VOID_P unknown - This should never happen' >>$outfile
2012         fi
2013
2014
2015
2016         cat >>$outfile <<_______EOF
2017 $glib_atexit
2018 $glib_memmove
2019 $glib_defines
2020 $glib_os
2021
2022 $glib_vacopy
2023
2024 #ifdef  __cplusplus
2025 #define G_HAVE_INLINE   1
2026 #else   /* !__cplusplus */
2027 $glib_inline
2028 #endif  /* !__cplusplus */
2029
2030 _______EOF
2031
2032         if test x$g_have_iso_c_varargs = xyes ; then
2033                 cat >>$outfile <<_______EOF
2034 #ifndef __cplusplus
2035 # define G_HAVE_ISO_VARARGS 1
2036 #endif
2037 _______EOF
2038         fi
2039         if test x$g_have_iso_cxx_varargs = xyes ; then
2040                 cat >>$outfile <<_______EOF
2041 #ifdef __cplusplus
2042 # define G_HAVE_ISO_VARARGS 1
2043 #endif
2044 _______EOF
2045         fi
2046         if test x$g_have_gnuc_varargs = xyes ; then
2047                 cat >>$outfile <<_______EOF
2048
2049 /* gcc-2.95.x supports both gnu style and ISO varargs, but if -ansi
2050  * is passed ISO vararg support is turned off, and there is no work
2051  * around to turn it on, so we unconditionally turn it off.
2052  */
2053 #if __GNUC__ == 2 && __GNUC_MINOR__ == 95
2054 #  undef G_HAVE_ISO_VARARGS
2055 #endif
2056
2057 #define G_HAVE_GNUC_VARARGS 1
2058 _______EOF
2059         fi
2060
2061         case x$g_stack_grows in
2062         xyes) echo "#define G_HAVE_GROWING_STACK 1" >>$outfile ;;
2063         *)    echo "#define G_HAVE_GROWING_STACK 0" >>$outfile ;;
2064         esac
2065
2066
2067         echo >>$outfile
2068         if test x$g_have_eilseq = xno; then
2069                 cat >>$outfile <<_______EOF
2070 #ifndef EILSEQ
2071 /* On some systems, like SunOS and NetBSD, EILSEQ is not defined.
2072  * The correspondence between this and the corresponding definition
2073  * in libiconv is essential.
2074  */
2075 #  define EILSEQ ENOENT
2076 #endif
2077 _______EOF
2078
2079         fi
2080
2081         echo >>$outfile
2082         if test x$g_mutex_has_default = xyes; then
2083                 cat >>$outfile <<_______EOF
2084 $g_enable_threads_def G_THREADS_ENABLED
2085 #define G_THREADS_IMPL_$g_threads_impl_def
2086 typedef struct _GStaticMutex GStaticMutex;
2087 struct _GStaticMutex
2088 {
2089   struct _GMutex *runtime_mutex;
2090   union {
2091     char   pad[$g_mutex_sizeof];
2092     double dummy_double;
2093     void  *dummy_pointer;
2094     long   dummy_long;
2095   } static_mutex;
2096 };
2097 #define G_STATIC_MUTEX_INIT     { NULL, { { $g_mutex_contents} } }
2098 #define g_static_mutex_get_mutex(mutex) \
2099   (g_thread_use_default_impl ? ((GMutex*) &((mutex)->static_mutex)) : \
2100    g_static_mutex_get_mutex_impl (&((mutex)->runtime_mutex)))
2101 _______EOF
2102         else
2103                 cat >>$outfile <<_______EOF
2104 $g_enable_threads_def G_THREADS_ENABLED
2105 #define G_THREADS_IMPL_$g_threads_impl_def
2106 typedef struct _GMutex* GStaticMutex;
2107 #define G_STATIC_MUTEX_INIT NULL
2108 #define g_static_mutex_get_mutex(mutex) (g_static_mutex_get_mutex_impl (mutex))
2109 _______EOF
2110         fi
2111
2112         cat >>$outfile <<_______EOF
2113 /* This represents a system thread as used by the implementation. An
2114  * alien implementaion, as loaded by g_thread_init can only count on
2115  * "sizeof (gpointer)" bytes to store their info. We however need more
2116  * for some of our native implementations. */
2117 typedef union _GSystemThread GSystemThread;
2118 union _GSystemThread
2119 {
2120   char   data[$g_system_thread_sizeof];
2121   double dummy_double;
2122   void  *dummy_pointer;
2123   long   dummy_long;
2124 };
2125 _______EOF
2126
2127         echo >>$outfile
2128         g_bit_sizes="16 32 64"
2129         for bits in $g_bit_sizes; do
2130           cat >>$outfile <<_______EOF
2131 #define GINT${bits}_TO_${g_bs_native}(val)      ((gint${bits}) (val))
2132 #define GUINT${bits}_TO_${g_bs_native}(val)     ((guint${bits}) (val))
2133 #define GINT${bits}_TO_${g_bs_alien}(val)       ((gint${bits}) GUINT${bits}_SWAP_LE_BE (val))
2134 #define GUINT${bits}_TO_${g_bs_alien}(val)      (GUINT${bits}_SWAP_LE_BE (val))
2135 _______EOF
2136         done
2137
2138         cat >>$outfile <<_______EOF
2139 #define GLONG_TO_LE(val)        ((glong) GINT${glongbits}_TO_LE (val))
2140 #define GULONG_TO_LE(val)       ((gulong) GUINT${glongbits}_TO_LE (val))
2141 #define GLONG_TO_BE(val)        ((glong) GINT${glongbits}_TO_BE (val))
2142 #define GULONG_TO_BE(val)       ((gulong) GUINT${glongbits}_TO_BE (val))
2143 #define GINT_TO_LE(val)         ((gint) GINT${gintbits}_TO_LE (val))
2144 #define GUINT_TO_LE(val)        ((guint) GUINT${gintbits}_TO_LE (val))
2145 #define GINT_TO_BE(val)         ((gint) GINT${gintbits}_TO_BE (val))
2146 #define GUINT_TO_BE(val)        ((guint) GUINT${gintbits}_TO_BE (val))
2147 #define G_BYTE_ORDER $g_byte_order
2148
2149 #define GLIB_SYSDEF_POLLIN =$g_pollin
2150 #define GLIB_SYSDEF_POLLOUT =$g_pollout
2151 #define GLIB_SYSDEF_POLLPRI =$g_pollpri
2152 #define GLIB_SYSDEF_POLLHUP =$g_pollhup
2153 #define GLIB_SYSDEF_POLLERR =$g_pollerr
2154 #define GLIB_SYSDEF_POLLNVAL =$g_pollnval
2155
2156 #define G_MODULE_SUFFIX "$g_module_suffix"
2157
2158 G_END_DECLS
2159
2160 #endif /* GLIBCONFIG_H */
2161 _______EOF
2162
2163
2164         if cmp -s $outfile glibconfig.h; then
2165           echo glibconfig.h is unchanged
2166           rm -f $outfile
2167         else
2168           mv $outfile glibconfig.h
2169         fi ;;
2170 esac
2171 ],[
2172
2173 # Note that if two cases are the same, case goes with the first one.
2174 # Note also that this is inside an AC_OUTPUT_COMMAND.  We do not depend
2175 # on variable expansion in case labels.  Look at the generated config.status
2176 # for a hint.
2177
2178 if test "x${ac_cv_working_alloca_h+set}" = xset ; then
2179   glib_header_alloca_h="$ac_cv_working_alloca_h"
2180 else
2181   glib_header_alloca_h="$ac_cv_header_alloca_h"
2182 fi
2183
2184 case xyes in
2185 x$ac_cv_header_float_h)
2186   glib_float_h=yes
2187   glib_mf=FLT_MIN glib_Mf=FLT_MAX
2188   glib_md=DBL_MIN glib_Md=DBL_MAX
2189   ;;
2190 x$ac_cv_header_values_h)
2191   glib_values_h=yes
2192   glib_mf=MINFLOAT  glib_Mf=MAXFLOAT
2193   glib_md=MINDOUBLE glib_Md=MAXDOUBLE
2194   ;;
2195 esac
2196
2197 case xyes in
2198 x$ac_cv_header_limits_h)
2199   glib_limits_h=yes
2200   glib_ms=SHRT_MIN glib_Ms=SHRT_MAX glib_Mus=USHRT_MAX
2201   glib_mi=INT_MIN  glib_Mi=INT_MAX  glib_Mui=UINT_MAX
2202   glib_ml=LONG_MIN glib_Ml=LONG_MAX glib_Mul=ULONG_MAX
2203   ;;
2204 x$ac_cv_header_values_h)
2205   glib_values_h=yes
2206   glib_ms=MINSHORT glib_Ms=MAXSHORT glib_Mus="(((gushort)G_MAXSHORT)*2+1)"
2207   glib_mi=MININT   glib_Mi=MAXINT   glib_Mui="(((guint)G_MAXINT)*2+1)"
2208   glib_ml=MINLONG  glib_Ml=MAXLONG  glib_Mul="(((gulong)G_MAXLONG)*2+1)"
2209   ;;
2210 esac
2211
2212 if test x$ac_cv_header_sys_poll_h = xyes ; then
2213   glib_sys_poll_h=yes
2214 fi
2215
2216 case 2 in
2217 $ac_cv_sizeof_short)            
2218   gint16=short
2219   gint16_format='"hi"'
2220   guint16_format='"hu"'
2221   ;;
2222 $ac_cv_sizeof_int)              
2223   gint16=int
2224   gint16_format='"i"'
2225   guint16_format='"u"'
2226   ;;
2227 esac
2228 case 4 in
2229 $ac_cv_sizeof_short)            
2230   gint32=short
2231   gint32_format='"hi"'
2232   guint32_format='"hu"'
2233   ;;
2234 $ac_cv_sizeof_int)              
2235   gint32=int
2236   gint32_format='"i"'
2237   guint32_format='"u"'
2238   ;;
2239 $ac_cv_sizeof_long)             
2240   gint32=long
2241   gint32_format='"li"'
2242   guint32_format='"lu"'
2243   ;;
2244 esac
2245 case 8 in
2246 $ac_cv_sizeof_int)
2247   gint64=int
2248   gint64_format='"i"'
2249   guint64_format='"u"'
2250   glib_extension=
2251   gint64_constant='(val)'
2252   ;;
2253 $ac_cv_sizeof_long)
2254   gint64=long
2255   gint64_format='"li"'
2256   guint64_format='"lu"'
2257   glib_extension=
2258   gint64_constant='(val##L)'
2259   ;;
2260 $ac_cv_sizeof_long_long)
2261   gint64='long long'
2262   if test -n "$glib_cv_long_long_format"; then
2263     gint64_format='"'$glib_cv_long_long_format'i"'
2264     guint64_format='"'$glib_cv_long_long_format'u"'
2265   fi
2266   glib_extension='G_GNUC_EXTENSION '
2267   gint64_constant='(G_GNUC_EXTENSION (val##LL))'
2268   ;;
2269 $ac_cv_sizeof___int64)
2270   gint64='__int64'
2271   if test -n "$glib_cv_long_long_format"; then
2272     gint64_format='"'$glib_cv_long_long_format'i"'
2273     guint64_format='"'$glib_cv_long_long_format'u"'
2274   fi
2275   glib_extension=
2276   gint64_constant='(val##i64)'
2277   ;;
2278 esac
2279 glib_size_t=$ac_cv_sizeof_size_t
2280 glib_size_type_define=$glib_size_type
2281 glib_void_p=$ac_cv_sizeof_long
2282 glib_long=$ac_cv_sizeof_void_p
2283
2284 gintbits=`expr $ac_cv_sizeof_int \* 8`
2285 glongbits=`expr $ac_cv_sizeof_long \* 8`
2286
2287
2288 case $ac_cv_sizeof_void_p in
2289 $ac_cv_sizeof_int)      glib_gpi_cast=''        glib_gpui_cast=''         ;;
2290 $ac_cv_sizeof_long)     glib_gpi_cast='(glong)' glib_gpui_cast='(gulong)' ;;
2291 *)                      glib_unknown_void_p=yes ;;
2292 esac
2293
2294
2295 case xyes in
2296 x$ac_cv_func_atexit)
2297   glib_atexit="
2298 #ifdef NeXT /* @#%@! NeXTStep */
2299 # define g_ATEXIT(proc) (!atexit (proc))
2300 #else
2301 # define g_ATEXIT(proc) (atexit (proc))
2302 #endif"
2303   ;;
2304 x$ac_cv_func_on_exit)
2305   glib_atexit="
2306 #define g_ATEXIT(proc)  (on_exit ((void (*)(int, void*))(proc), NULL))"
2307   ;;
2308 esac
2309
2310 case xyes in
2311 x$ac_cv_func_memmove)
2312   glib_memmove='
2313 #define g_memmove(d,s,n) G_STMT_START { memmove ((d), (s), (n)); } G_STMT_END'
2314   ;;
2315 x$glib_cv_working_bcopy)
2316   glib_memmove="
2317 /* memmove isn't available, but bcopy can copy overlapping memory regions */
2318 #define g_memmove(d,s,n) G_STMT_START { bcopy ((s), (d), (n)); } G_STMT_END"
2319   ;;
2320 *)  
2321   glib_memmove="
2322 /* memmove isn't found and bcopy can't copy overlapping memory regions, 
2323  * so we have to roll our own copy routine. */
2324 void g_memmove (void* dest, const void * src, unsigned long len);"
2325   ;;
2326 esac
2327
2328 glib_defines="
2329 #define GLIB_MAJOR_VERSION $GLIB_MAJOR_VERSION
2330 #define GLIB_MINOR_VERSION $GLIB_MINOR_VERSION
2331 #define GLIB_MICRO_VERSION $GLIB_MICRO_VERSION
2332 "
2333
2334 case xyes in
2335 x$glib_cv_va_copy)      glib_vacopy='#define G_VA_COPY  va_copy' ;;
2336 x$glib_cv___va_copy)    glib_vacopy='#define G_VA_COPY  __va_copy' ;;
2337 *)                      glib_vacopy=''
2338 esac
2339
2340 if test x$glib_cv_va_val_copy = xno; then
2341   glib_vacopy="\$glib_vacopy
2342 #define G_VA_COPY_AS_ARRAY 1"
2343 fi
2344
2345 if test x$glib_cv_hasinline = xyes; then
2346     glib_inline='#define G_HAVE_INLINE 1'
2347 fi
2348 if test x$glib_cv_has__inline = xyes; then
2349     glib_inline="\$glib_inline
2350 #define G_HAVE___INLINE 1"
2351 fi
2352 if test x$glib_cv_has__inline__ = xyes; then
2353     glib_inline="\$glib_inline
2354 #define G_HAVE___INLINE__ 1"
2355 fi
2356
2357 g_have_gnuc_varargs=$g_have_gnuc_varargs
2358 g_have_iso_c_varargs=$g_have_iso_c_varargs
2359 g_have_iso_cxx_varargs=$g_have_iso_cxx_varargs
2360
2361 case xyes in
2362 x$ac_cv_c_bigendian)
2363   g_byte_order=G_BIG_ENDIAN
2364   g_bs_native=BE
2365   g_bs_alien=LE
2366   ;;
2367 *)
2368   g_byte_order=G_LITTLE_ENDIAN
2369   g_bs_native=LE
2370   g_bs_alien=BE
2371   ;;
2372 esac
2373
2374 g_pollin=$glib_cv_value_POLLIN
2375 g_pollout=$glib_cv_value_POLLOUT
2376 g_pollpri=$glib_cv_value_POLLPRI
2377 g_pollhup=$glib_cv_value_POLLHUP
2378 g_pollerr=$glib_cv_value_POLLERR
2379 g_pollnval=$glib_cv_value_POLLNVAL
2380
2381 g_stack_grows=$glib_cv_stack_grows
2382
2383 g_have_eilseq=$have_eilseq
2384
2385 case x$have_threads in
2386 xno)    g_enable_threads_def="#undef";;
2387 *)      g_enable_threads_def="#define";;
2388 esac
2389
2390 g_threads_impl_def=$g_threads_impl
2391
2392 g_mutex_has_default="$mutex_has_default"
2393 g_mutex_sizeof="$glib_cv_sizeof_gmutex"
2394 g_system_thread_sizeof="$glib_cv_sizeof_system_thread"
2395 g_mutex_contents="$glib_cv_byte_contents_gmutex"
2396
2397 g_module_suffix="$glib_gmodule_suffix"
2398
2399 case $host in
2400   *-*-beos*)
2401     glib_os="#define G_OS_BEOS"
2402     ;;
2403   *-*-cygwin*)
2404     glib_os="#define G_OS_UNIX
2405 #define G_PLATFORM_WIN32
2406 #define G_WITH_CYGWIN"
2407     ;;
2408   *-*-mingw*)
2409     glib_os="#define G_OS_WIN32
2410 #define G_PLATFORM_WIN32"
2411     ;;
2412   *)
2413     glib_os="#define G_OS_UNIX"
2414     ;;
2415 esac
2416 ])
2417
2418 AC_OUTPUT([
2419 glib-2.0.pc
2420 glib-2.0-uninstalled.pc
2421 gmodule-2.0.pc
2422 gmodule-2.0-uninstalled.pc
2423 gthread-2.0.pc
2424 gthread-2.0-uninstalled.pc
2425 gobject-2.0.pc
2426 gobject-2.0-uninstalled.pc
2427 glib.spec
2428 glib-zip
2429 glib-gettextize
2430 Makefile
2431 build/Makefile
2432 build/win32/Makefile
2433 build/win32/dirent/Makefile
2434 glib/Makefile
2435 glib/libcharset/Makefile
2436 glib/trio/Makefile
2437 gmodule/gmoduleconf.h
2438 gmodule/Makefile
2439 gobject/Makefile
2440 gobject/glib-mkenums
2441 gthread/Makefile
2442 po/Makefile.in
2443 docs/Makefile
2444 docs/reference/Makefile
2445 docs/reference/glib/Makefile
2446 docs/reference/glib/version.xml
2447 docs/reference/gobject/Makefile
2448 docs/reference/gobject/version.xml
2449 tests/Makefile
2450 m4macros/Makefile
2451 ],[
2452 chmod 0755 glib-zip
2453 chmod 0755 glib-gettextize
2454 chmod 0755 gobject/glib-mkenums
2455 ])