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