configure.ac: Print qsort_r result only once
[platform/upstream/glib.git] / configure.ac
1 # Process this file with autoconf to produce a configure script.
2 AC_PREREQ([2.62])
3
4 dnl ***********************************
5 dnl *** include special GLib macros ***
6 dnl ***********************************
7
8 m4_define(glib_configure_ac)
9
10 #
11 # The following version number definitions apply to GLib, GModule, GObject,
12 # GThread and GIO as a whole, so if changes occurred in any of them, they are
13 # all treated with the same interface and binary age.
14 #
15 # Making releases:
16 #   glib_micro_version += 1;
17 #   glib_interface_age += 1;
18 #   glib_binary_age += 1;
19 # if any functions have been added, set glib_interface_age to 0.
20 # if backwards compatibility has been broken,
21 # set glib_binary_age _and_ glib_interface_age to 0.
22 #
23 # in easier to understand terms:
24 #
25 # <mclasen> on the stable branch, interface age == micro
26 # <mclasen> on the unstable (ie master), interface age = 0
27
28 m4_define([glib_major_version], [2])
29 m4_define([glib_minor_version], [29])
30 m4_define([glib_micro_version], [7])
31 m4_define([glib_interface_age], [0])
32 m4_define([glib_binary_age],
33           [m4_eval(100 * glib_minor_version + glib_micro_version)])
34 m4_define([glib_version],
35           [glib_major_version.glib_minor_version.glib_micro_version])
36
37 # libtool version related macros
38 m4_define([glib_lt_release], [glib_major_version.glib_minor_version])
39 m4_define([glib_lt_current],
40           [m4_eval(100 * glib_minor_version + glib_micro_version - glib_interface_age)])
41 m4_define([glib_lt_revision], [glib_interface_age])
42 m4_define([glib_lt_age], [m4_eval(glib_binary_age - glib_interface_age)])
43 m4_define([glib_lt_current_minus_age],
44           [m4_eval(glib_lt_current - glib_lt_age)])
45
46 # if the minor version number is odd, then we want debugging.  Otherwise
47 # we only want minimal debugging support.
48 m4_define([glib_debug_default],
49           [m4_if(m4_eval(glib_minor_version % 2), [1], [yes], [minimum])])dnl
50
51
52 AC_INIT(glib, [glib_version],
53         [http://bugzilla.gnome.org/enter_bug.cgi?product=glib])
54
55 AC_CONFIG_HEADER([config.h])
56 AC_CONFIG_SRCDIR([glib/glib.h])
57 AC_CONFIG_MACRO_DIR([m4macros])
58
59 # Save this value here, since automake will set cflags later
60 cflags_set=${CFLAGS+set}
61
62 AM_INIT_AUTOMAKE([1.10 no-define no-dist-gzip dist-bzip2 tar-ustar])
63
64 # Support silent build rules, requires at least automake-1.11. Disable
65 # by either passing --disable-silent-rules to configure or passing V=1
66 # to make
67 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
68
69 GLIB_MAJOR_VERSION=glib_major_version
70 GLIB_MINOR_VERSION=glib_minor_version
71 GLIB_MICRO_VERSION=glib_micro_version
72 GLIB_INTERFACE_AGE=glib_interface_age
73 GLIB_BINARY_AGE=glib_binary_age
74 GLIB_VERSION=glib_version
75
76 AC_SUBST(GLIB_MAJOR_VERSION)
77 AC_SUBST(GLIB_MINOR_VERSION)
78 AC_SUBST(GLIB_MICRO_VERSION)
79 AC_SUBST(GLIB_VERSION)
80 AC_SUBST(GLIB_INTERFACE_AGE)
81 AC_SUBST(GLIB_BINARY_AGE)
82
83 AC_DEFINE(GLIB_MAJOR_VERSION, [glib_major_version],
84           [Define to the GLIB major version])
85 AC_DEFINE(GLIB_MINOR_VERSION, [glib_minor_version],
86           [Define to the GLIB minor version])
87 AC_DEFINE(GLIB_MICRO_VERSION, [glib_micro_version],
88           [Define to the GLIB micro version])
89 AC_DEFINE(GLIB_INTERFACE_AGE, [glib_interface_age],
90           [Define to the GLIB interface age])
91 AC_DEFINE(GLIB_BINARY_AGE, [glib_binary_age],
92           [Define to the GLIB binary age])
93
94 # libtool versioning
95 LT_RELEASE=glib_lt_release
96 LT_CURRENT=glib_lt_current
97 LT_REVISION=glib_lt_revision
98 LT_AGE=glib_lt_age
99 LT_CURRENT_MINUS_AGE=glib_lt_current_minus_age
100 AC_SUBST(LT_RELEASE)
101 AC_SUBST(LT_CURRENT)
102 AC_SUBST(LT_REVISION)
103 AC_SUBST(LT_AGE)
104 AC_SUBST(LT_CURRENT_MINUS_AGE)
105
106 dnl Initialize maintainer mode
107 AM_MAINTAINER_MODE
108
109 dnl Checks for programs.
110 AC_PROG_CC
111 AC_PROG_CPP
112
113 AC_CANONICAL_HOST
114
115 AC_MSG_CHECKING([for the BeOS])
116 case $host in
117   *-*-beos*)
118     glib_native_beos="yes"
119     ;;
120   *)
121     glib_native_beos="no"
122     ;;
123 esac
124 AC_MSG_RESULT([$glib_native_beos])
125
126 dnl
127
128 AC_MSG_CHECKING([for Win32])
129 LIB_EXE_MACHINE_FLAG=X86
130 case "$host" in
131   *-*-mingw*)
132     glib_native_win32=yes
133     glib_pid_type='void *'
134     glib_cv_stack_grows=no
135     # Unfortunately the mingw implementations of C99-style snprintf and vsnprintf
136     # don't seem to be quite good enough, at least not in mingw-runtime-3.14.
137     # (Sorry, I don't know exactly what is the problem, but it is related to
138     # floating point formatting and decimal point vs. comma.)
139     # The simple tests in AC_FUNC_VSNPRINTF_C99 and AC_FUNC_SNPRINTF_C99 aren't
140     # rigorous enough to notice, though.
141     # So preset the autoconf cache variables.
142     ac_cv_func_vsnprintf_c99=no
143     ac_cv_func_snprintf_c99=no
144     case "$host" in
145     x86_64-*-*)
146       LIB_EXE_MACHINE_FLAG=X64
147       ;;
148     esac
149     ;;
150   *)
151     glib_native_win32=no
152     glib_pid_type=int
153     ;;
154 esac
155 case $host in
156   *-*-linux*)
157     glib_os_linux=yes
158     ;;
159 esac
160
161 AC_MSG_RESULT([$glib_native_win32])
162
163 AC_SUBST(LIB_EXE_MACHINE_FLAG)
164
165 glib_have_carbon=no
166 AC_MSG_CHECKING([for Mac OS X Carbon support])
167 AC_TRY_CPP([
168 #include <Carbon/Carbon.h>
169 #include <CoreServices/CoreServices.h>
170 ], glib_have_carbon=yes)
171
172 AC_MSG_RESULT([$glib_have_carbon])
173
174 AM_CONDITIONAL(OS_WIN32, [test "$glib_native_win32" = "yes"])
175 AM_CONDITIONAL(OS_WIN32_X64, [test "$LIB_EXE_MACHINE_FLAG" = "X64"])
176 AM_CONDITIONAL(OS_UNIX, [test "$glib_native_win32" != "yes"])
177 AM_CONDITIONAL(OS_LINUX, [test "$glib_os_linux" = "yes"])
178 AM_CONDITIONAL(OS_CARBON, [test "$glib_have_carbon" = "yes"])
179
180 if test "$glib_native_win32" = "yes"; then
181   AC_CHECK_TOOL(WINDRES, windres, no)
182   if test "$WINDRES" = no; then
183     AC_MSG_ERROR([*** Could not find an implementation of windres in your PATH.])
184   fi
185   AC_CHECK_TOOL(NM, nm, no)
186   if test "$NM" = no; then
187     AC_MSG_ERROR([*** Could not find an implementation of nm in your PATH.])
188   fi
189   AC_CHECK_TOOL(RANLIB, ranlib, :)
190   AC_CHECK_PROG(ms_librarian, [lib.exe], [yes], [no])
191 fi
192 AM_CONDITIONAL(MS_LIB_AVAILABLE, [test x$ms_librarian = xyes])
193
194 if test "$glib_native_win32" != yes; then
195     # libtool option to control which symbols are exported
196     # right now, symbols starting with _ are not exported
197     LIBTOOL_EXPORT_OPTIONS='-export-symbols-regex "^g.*"'
198 else
199     # We currently use .def files on Windows
200     LIBTOOL_EXPORT_OPTIONS=
201 fi
202 AC_SUBST(LIBTOOL_EXPORT_OPTIONS)
203
204 if test "x$glib_have_carbon" = "xyes"; then
205   AC_DEFINE(HAVE_CARBON, 1, [define to 1 if Carbon is available])
206   LDFLAGS="$LDFLAGS -framework Carbon"
207 fi
208
209 gl_GLIBC21
210 if test "x$GLIBC21" = "xyes"; then
211   AC_DEFINE([_GNU_SOURCE], 1, [Make all glibc extensions visible])
212 fi
213
214 dnl declare --enable-* args and collect ac_help strings
215 AC_ARG_ENABLE(debug,
216               AC_HELP_STRING([--enable-debug=@<:@no/minimum/yes@:>@],
217                              [turn on debugging @<:@default=glib_debug_default@:>@]),,
218               enable_debug=glib_debug_default)
219
220 AC_ARG_ENABLE(gc_friendly,
221               [AC_HELP_STRING([--enable-gc-friendly],
222                               [turn on garbage collector friendliness [default=no]])],,
223               [enable_gc_friendly=no])
224 AC_ARG_ENABLE(mem_pools,
225               [AC_HELP_STRING([--disable-mem-pools],
226                               [disable all glib memory pools])],,
227               [disable_mem_pools=no])
228 AC_ARG_ENABLE(threads,
229               [AC_HELP_STRING([--enable-threads],
230                               [turn on basic thread support [default=yes]
231 ([=no] will override --with-threads)])],,
232               [enable_threads=yes])
233 AC_ARG_ENABLE(rebuilds,
234               [AC_HELP_STRING([--disable-rebuilds],
235                               [disable all source autogeneration rules])],,
236               [enable_rebuilds=yes])
237
238 if test "x$enable_threads" != "xyes"; then
239   enable_threads=no
240 fi
241
242 AC_MSG_CHECKING([whether to enable garbage collector friendliness])
243 if test "x$enable_gc_friendly" = "xyes"; then
244   AC_DEFINE(ENABLE_GC_FRIENDLY_DEFAULT, 1, [Whether to enable GC friendliness by default])
245   AC_MSG_RESULT([yes])
246 else
247   AC_MSG_RESULT([no])
248 fi
249
250 AC_MSG_CHECKING([whether to disable memory pools])
251 if test "x$disable_mem_pools" = "xno"; then
252   AC_MSG_RESULT([no])
253 else
254   AC_DEFINE(DISABLE_MEM_POOLS, [1], [Whether to disable memory pools])
255   AC_SUBST(DISABLE_MEM_POOLS)
256   AC_MSG_RESULT([yes])
257 fi
258
259 dnl location to install runtime libraries, e.g. ../../lib to install
260 dnl to /lib if libdir is /usr/lib
261 AC_ARG_WITH(runtime-libdir,
262            [AC_HELP_STRING([--with-runtime-libdir=RELPATH],
263                            [Install runtime libraries relative to libdir])],
264            [],
265            [with_runtime_libdir=""])
266 GLIB_RUNTIME_LIBDIR="$with_runtime_libdir"
267 ABS_GLIB_RUNTIME_LIBDIR="`readlink -f $libdir/$with_runtime_libdir`"
268 AC_SUBST(GLIB_RUNTIME_LIBDIR)
269 AC_SUBST(ABS_GLIB_RUNTIME_LIBDIR)
270 AM_CONDITIONAL(HAVE_GLIB_RUNTIME_LIBDIR, [test "x$with_runtime_libdir" != "x"])
271
272 dnl Check for a working C++ compiler, but do not bail out, if none is found.
273 AC_CHECK_TOOLS(CXX, [$CCC c++ g++ gcc CC cxx cc++ cl], [gcc])
274 AC_LANG_SAVE
275 AC_LANG_CPLUSPLUS
276 AC_TRY_COMPILE(,[class a { int b; } c;], ,CXX=)
277 AM_CONDITIONAL(HAVE_CXX, [test "$CXX" != ""])
278 AC_LANG_RESTORE
279
280 AM_PROG_CC_STDC
281 AM_PROG_CC_C_O
282 AC_PROG_INSTALL
283
284 AC_SYS_LARGEFILE
285
286 PKG_PROG_PKG_CONFIG(0.16)
287
288 if test "x$enable_debug" = "xyes"; then
289   if test x$cflags_set != xset ; then
290       case " $CFLAGS " in
291       *[[\ \    ]]-g[[\ \       ]]*) ;;
292       *) CFLAGS="$CFLAGS -g" ;;
293       esac
294   fi
295         
296   GLIB_DEBUG_FLAGS="-DG_ENABLE_DEBUG"
297 else
298   GLIB_DEBUG_FLAGS="-DG_DISABLE_CAST_CHECKS"
299
300   if test "x$enable_debug" = "xno"; then
301     GLIB_DEBUG_FLAGS="$GLIB_DEBUG_FLAGS -DG_DISABLE_ASSERT -DG_DISABLE_CHECKS"
302   fi
303 fi
304
305 # Ensure MSVC-compatible struct packing convention is used when
306 # compiling for Win32 with gcc.
307 # What flag to depends on gcc version: gcc3 uses "-mms-bitfields", while
308 # gcc2 uses "-fnative-struct".
309 if test x"$glib_native_win32" = xyes; then
310   if test x"$GCC" = xyes; then
311     msnative_struct=''
312     AC_MSG_CHECKING([how to get MSVC-compatible struct packing])
313     if test -z "$ac_cv_prog_CC"; then
314       our_gcc="$CC"
315     else
316       our_gcc="$ac_cv_prog_CC"
317     fi
318     case `$our_gcc --version | sed -e 's,\..*,.,' -e q` in
319       2.)
320         if $our_gcc -v --help 2>/dev/null | grep fnative-struct >/dev/null; then
321           msnative_struct='-fnative-struct'
322         fi
323         ;;
324       *)
325         if $our_gcc -v --help 2>/dev/null | grep ms-bitfields >/dev/null; then
326           msnative_struct='-mms-bitfields'
327         fi
328         ;;
329     esac
330     if test x"$msnative_struct" = x ; then
331       AC_MSG_RESULT([no way])
332       AC_MSG_WARN([produced libraries might be incompatible with MSVC-compiled code])
333     else
334       CFLAGS="$CFLAGS $msnative_struct"
335       AC_MSG_RESULT([${msnative_struct}])
336     fi
337   fi
338 fi
339 GLIB_EXTRA_CFLAGS="${msnative_struct}"
340 AC_SUBST(GLIB_EXTRA_CFLAGS)
341
342 AC_EXEEXT
343
344 # define a MAINT-like variable REBUILD which is set if Perl
345 # and awk are found, so autogenerated sources can be rebuilt
346 AC_PROG_AWK
347 AC_CHECK_PROGS(PERL, [perl5 perl])
348 # We would like indent, but don't require it.
349 AC_CHECK_PROG(INDENT, indent, indent)
350 REBUILD=\#
351 if test "x$enable_rebuilds" = "xyes" && \
352      test -n "$PERL" && \
353      $PERL -e 'exit !($] >= 5.002)' > /dev/null 2>&1 && \
354      test -n "$AWK" ; then
355   REBUILD=
356 fi
357 AC_SUBST(REBUILD)
358
359 # Need full path to Perl for glib-mkenums
360 #
361 if test "x$PERL" != x ; then
362   AC_PATH_PROG(PERL_PATH, [$PERL])
363 fi
364 if test "x$PERL_PATH" = x ; then
365   PERL_PATH="/usr/bin/env perl"
366 fi
367 AC_SUBST(PERL_PATH)
368
369 # Need suitable python path for greport
370 AM_PATH_PYTHON(2.4,,PYTHON="/usr/bin/env python2.4")
371
372
373 dnl ***********************
374 dnl *** Tests for iconv ***
375 dnl ***********************
376 dnl
377 dnl We do this before the gettext checks, to avoid distortion
378
379 dnl On Windows we use a native implementation
380
381 if test x"$glib_native_win32" = xyes; then
382   with_libiconv=native
383 else
384   AC_ARG_WITH(libiconv,
385               [AC_HELP_STRING([--with-libiconv=@<:@no/gnu/native@:>@],
386                               [use the libiconv library])],,
387               [with_libiconv=maybe])
388
389   found_iconv=no
390   case $with_libiconv in
391     maybe)
392       # Check in the C library first
393       AC_CHECK_FUNC(iconv_open, [with_libiconv=no; found_iconv=yes])
394       # Check if we have GNU libiconv
395       if test $found_iconv = "no"; then
396         AC_CHECK_LIB(iconv, libiconv_open, [with_libiconv=gnu; found_iconv=yes])
397       fi
398       # Check if we have a iconv in -liconv, possibly from vendor
399       if test $found_iconv = "no"; then
400         AC_CHECK_LIB(iconv, iconv_open, [with_libiconv=native; found_iconv=yes])
401       fi
402       ;;
403     no)
404       AC_CHECK_FUNC(iconv_open, [with_libiconv=no; found_iconv=yes])
405       ;;
406     gnu|yes)
407       AC_CHECK_LIB(iconv, libiconv_open, [with_libiconv=gnu; found_iconv=yes])
408       ;;
409     native)
410       AC_CHECK_LIB(iconv, iconv_open, [with_libiconv=native; found_iconv=yes])
411       ;;
412   esac
413
414   if test "x$found_iconv" = "xno" ; then
415      AC_MSG_ERROR([*** No iconv() implementation found in C library or libiconv])
416   fi
417 fi
418
419 AC_ARG_ENABLE(iconv-cache, 
420               [AC_HELP_STRING([--enable-iconv-cache=@<:@yes/no/auto@:>@],
421                               [cache iconv descriptors [default=auto]])],,
422               [enable_iconv_cache=auto])
423
424 AC_MSG_CHECKING([Whether to cache iconv descriptors])
425 case $enable_iconv_cache in
426   auto)
427     if test $ac_cv_gnu_library_2_1 = yes; then
428       enable_iconv_cache=no
429     else 
430       enable_iconv_cache=yes
431     fi
432   ;;
433   yes|no) 
434   ;;
435   *) AC_MSG_ERROR([Value given to --enable-iconv-cache must be one of yes, no or auto])
436   ;;
437 esac
438
439 if test $enable_iconv_cache = yes; then
440    AC_DEFINE(NEED_ICONV_CACHE,1,[Do we cache iconv descriptors])
441 fi
442
443 AC_MSG_RESULT($enable_iconv_cache)
444
445
446 dnl
447 dnl zlib support
448 dnl
449 PKG_CHECK_MODULES([ZLIB], [zlib], [found_zlib=yes], [found_zlib=no])
450 if test "x$found_zlib" = "xno" ; then
451   AC_CHECK_LIB(z, inflate, [AC_CHECK_HEADER(zlib.h, found_zlib=yes)])
452   if test "x$found_zlib" = "xno" ; then
453     AC_MSG_ERROR([*** Working zlib library and headers not found ***])
454   fi
455   ZLIB_LIBS='-lz'
456   AC_SUBST(ZLIB_LIBS)
457 fi
458
459 PKG_CHECK_MODULES(LIBFFI, [libffi >= 3.0.0])
460 AC_SUBST(LIBFFI_CFLAGS)
461 AC_SUBST(LIBFFI_LIBS)
462
463 dnl
464 dnl gettext support
465 dnl
466
467 ALL_LINGUAS="`grep -v '^#' "$srcdir/po/LINGUAS" | tr '\n' ' '`"
468 AC_SUBST([CONFIG_STATUS_DEPENDENCIES],['$(top_srcdir)/po/LINGUAS'])
469 GLIB_GNU_GETTEXT
470
471 if test "$gt_cv_have_gettext" != "yes" ; then
472   AC_MSG_ERROR([
473 *** You must have either have gettext support in your C library, or use the 
474 *** GNU gettext library. (http://www.gnu.org/software/gettext/gettext.html
475 ])
476 fi
477
478 LIBS="$INTLLIBS $LIBS"
479
480 GETTEXT_PACKAGE=glib20
481 AC_SUBST(GETTEXT_PACKAGE)
482 AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, ["$GETTEXT_PACKAGE"], 
483   [Define the gettext package to be used])
484
485 GLIB_DEFINE_LOCALEDIR(GLIB_LOCALE_DIR)
486
487 dnl
488 dnl Now we are done with gettext checks, figure out ICONV_LIBS
489 dnl
490
491 if test x"$glib_native_win32" != xyes; then
492   if test x$with_libiconv != xno ; then
493     case " $INTLLIBS " in
494     *[[\ \      ]]-liconv[[\ \  ]]*) ;;
495     *) ICONV_LIBS="-liconv" ;;
496     esac
497   fi
498 fi
499 AC_SUBST(ICONV_LIBS)
500
501 case $with_libiconv in
502   gnu)
503     AC_DEFINE(USE_LIBICONV_GNU, 1, [Using GNU libiconv])
504     ;;
505   native)
506     AC_DEFINE(USE_LIBICONV_NATIVE, 1, [Using a native implementation of iconv in a separate library])
507     ;;
508 esac
509
510 dnl Initialize libtool
511 LT_PREREQ([2.2])
512 LT_INIT([disable-static win32-dll])
513 dnl when using libtool 2.x create libtool early, because it's used in configure
514 m4_ifdef([LT_OUTPUT], [LT_OUTPUT])
515
516
517 if test "x$GCC" = "xyes"; then
518   case " $CFLAGS " in
519   *[[\ \        ]]-Wall[[\ \    ]]*) ;;
520   *) CFLAGS="$CFLAGS -Wall" ;;
521   esac
522 fi
523
524 CPPFLAGS="$CPPFLAGS -DG_DISABLE_SINGLE_INCLUDES"
525
526 if test "$glib_native_win32" = "yes"; then
527   if test x$enable_static = xyes -a x$enable_shared = xyes; then
528     AC_MSG_ERROR([Can not build both shared and static at the same time on Windows.])
529   fi
530   if test x$enable_static = xyes; then
531     glib_win32_static_compilation=yes
532     GLIB_WIN32_STATIC_COMPILATION_DEFINE="#define GLIB_STATIC_COMPILATION 1
533 #define GOBJECT_STATIC_COMPILATION 1"
534     AC_SUBST(GLIB_WIN32_STATIC_COMPILATION_DEFINE)
535   fi
536 fi
537 AM_CONDITIONAL(OS_WIN32_AND_DLL_COMPILATION, [test x$glib_native_win32 = xyes -a x$glib_win32_static_compilation != xyes])
538
539 dnl
540 dnl DU4 native cc currently needs -std1 for ANSI mode (instead of K&R)
541 dnl
542 if test $cross_compiling != yes ; then
543     AC_MSG_CHECKING([for extra flags to get ANSI library prototypes])
544     glib_save_LIBS=$LIBS
545     LIBS="$LIBS -lm"
546     AC_TRY_RUN([#include <math.h>
547                  int main (void) { return (log(1) != log(1.)); }],
548          AC_MSG_RESULT(none needed),
549          glib_save_CFLAGS=$CFLAGS
550          CFLAGS="$CFLAGS -std1"
551          AC_TRY_RUN([#include <math.h>
552                      int main (void) { return (log(1) != log(1.)); }],
553              AC_MSG_RESULT(-std1),
554              AC_MSG_RESULT()
555              CFLAGS=$glib_save_CFLAGS
556              AC_MSG_WARN(
557                     [No ANSI prototypes found in library. (-std1 didn't work.)])
558          )
559     )
560     LIBS=$glib_save_LIBS
561 fi
562
563 dnl NeXTStep cc seems to need this
564 AC_MSG_CHECKING([for extra flags for POSIX compliance])
565 AC_TRY_COMPILE([#include <dirent.h>], [DIR *dir;],
566   AC_MSG_RESULT(none needed),
567   glib_save_CFLAGS=$CFLAGS
568   CFLAGS="$CFLAGS -posix"
569   AC_TRY_COMPILE([#include <dirent.h>], [DIR *dir;],
570     AC_MSG_RESULT(-posix),
571     AC_MSG_RESULT()
572     CFLAGS=$glib_save_CFLAGS
573     AC_MSG_WARN([Could not determine POSIX flag. (-posix didn't work.)])))
574
575 # Checks for header files.
576 AC_HEADER_STDC
577
578 # Checks for library functions.
579 AC_FUNC_VPRINTF
580 AC_FUNC_ALLOCA
581 AC_CHECK_FUNCS(mmap posix_memalign memalign valloc fsync pipe2)
582 AC_CHECK_FUNCS(atexit on_exit timegm gmtime_r)
583 # BSD has a qsort_r with wrong argument order
584 AC_CACHE_CHECK([for qsort_r], glib_cv_have_qsort_r, [
585 AC_RUN_IFELSE([AC_LANG_SOURCE([[
586 #define _GNU_SOURCE
587 #include <stdlib.h>
588
589 static int
590 cmp (const void *a, const void *b, void *c)
591 {
592   const int *ia = a;
593   const int *ib = b;
594
595   if (*ia < *ib)
596     return -1;
597   else if (*ia > *ib)
598     return 1;
599   else
600     return 0;
601 }
602
603 int
604 main (int argc, char **argv)
605 {
606   int arr[3] = { 1, 2, 0 };
607   int d = 3;
608
609   qsort_r (arr, 3, sizeof (int), cmp, &d);
610
611   if (arr[0] == 0 && arr[1] == 1 && arr[2] == 2)
612     return 0;
613   else
614     return 1;
615 }]])],[glib_cv_have_qsort_r=yes],[glib_cv_have_qsort_r=no])])
616
617 if test x$glib_cv_have_qsort_r = xyes ; then
618   AC_DEFINE(HAVE_QSORT_R, 1, [Define to 1 if you have the 'qsort_r' function])
619 fi
620
621 AC_CHECK_SIZEOF(char)
622 AC_CHECK_SIZEOF(short)
623 AC_CHECK_SIZEOF(long)
624 AC_CHECK_SIZEOF(int)
625 AC_CHECK_SIZEOF(void *)
626 AC_CHECK_SIZEOF(long long)
627 AC_CHECK_SIZEOF(__int64)
628
629 if test x$ac_cv_sizeof_long = x8 || test x$ac_cv_sizeof_long_long = x8 || test x$ac_cv_sizeof___int64 = x8 ; then
630   :
631 else
632   AC_MSG_ERROR([
633 *** GLib requires a 64 bit type. You might want to consider
634 *** using the GNU C compiler.
635 ])
636 fi
637
638 if test x$glib_native_win32 != xyes && test x$ac_cv_sizeof_long_long = x8; then
639         # long long is a 64 bit integer.
640         AC_MSG_CHECKING(for format to printf and scanf a guint64)
641         AC_CACHE_VAL(glib_cv_long_long_format,[
642                 for format in ll q I64; do
643                   AC_TRY_RUN([#include <stdio.h>  
644                         int main()
645                         {
646                           long long b, a = -0x3AFAFAFAFAFAFAFALL;
647                           char buffer[1000];
648                           sprintf (buffer, "%${format}u", a);
649                           sscanf (buffer, "%${format}u", &b);
650                           exit (b!=a);
651                         }
652                         ],
653                         [glib_cv_long_long_format=${format}
654                         break],
655                         [],[:])
656                 done])
657         if test -n "$glib_cv_long_long_format"; then
658           AC_MSG_RESULT(%${glib_cv_long_long_format}u)
659           AC_DEFINE(HAVE_LONG_LONG_FORMAT,1,[define if system printf can print long long])
660           if test x"$glib_cv_long_long_format" = xI64; then
661             AC_DEFINE(HAVE_INT64_AND_I64,1,[define to support printing 64-bit integers with format I64])
662           fi
663         else
664           AC_MSG_RESULT(none)
665         fi
666 elif test x$ac_cv_sizeof___int64 = x8; then
667         # __int64 is a 64 bit integer.
668         AC_MSG_CHECKING(for format to printf and scanf a guint64)
669         # We know this is MSVCRT.DLL, and what the formats are
670         glib_cv_long_long_format=I64
671         AC_MSG_RESULT(%${glib_cv_long_long_format}u)
672         AC_DEFINE(HAVE_LONG_LONG_FORMAT,1,[define if system printf can print long long])
673         AC_DEFINE(HAVE_INT64_AND_I64,1,[define to support printing 64-bit integers with format I64])
674 fi
675
676 dnl long doubles were not used, and a portability problem
677 dnl AC_C_LONG_DOUBLE
678 AC_C_CONST
679
680 dnl ok, here we try to check whether the systems prototypes for
681 dnl malloc and friends actually match the prototypes provided
682 dnl by gmem.h (keep in sync). i currently only know how to check
683 dnl this reliably with gcc (-Werror), improvements for other
684 dnl compilers are apprechiated.
685 SANE_MALLOC_PROTOS=no
686 AC_MSG_CHECKING([if malloc() and friends prototypes are gmem.h compatible])
687 glib_save_CFLAGS=$CFLAGS
688 if test "x$GCC" = "xyes"; then
689   CFLAGS="$CFLAGS -Werror"
690   AC_TRY_COMPILE([#include <stdlib.h>], [
691     void* (*my_calloc_p)  (size_t, size_t) = calloc;
692     void* (*my_malloc_p)  (size_t)         = malloc;
693     void  (*my_free_p)    (void*)          = free;
694     void* (*my_realloc_p) (void*, size_t)  = realloc;
695     my_calloc_p = 0;
696     my_malloc_p = 0;
697     my_free_p = 0;
698     my_realloc_p = 0;
699   ],
700     AC_DEFINE(SANE_MALLOC_PROTOS, 1, 
701       [Define if you have correct malloc prototypes])
702     SANE_MALLOC_PROTOS=yes)
703 fi
704 AC_MSG_RESULT($SANE_MALLOC_PROTOS)
705 CFLAGS=$glib_save_CFLAGS
706
707 dnl
708 dnl check in which direction the stack grows
709 dnl
710 AC_CACHE_CHECK([for growing stack pointer],glib_cv_stack_grows,[
711         AC_TRY_RUN([
712         volatile int *a = 0, *b = 0;
713         void foo (void);
714         int main () { volatile int y = 7; a = &y; foo (); return b > a; }
715         void foo (void) { volatile int x = 5; b = &x; }
716         ],
717         glib_cv_stack_grows=no
718         ,
719         glib_cv_stack_grows=yes
720         ,)
721 ])
722
723 dnl AC_C_INLINE is useless to us since it bails out too early, we need to
724 dnl truely know which ones of `inline', `__inline' and `__inline__' are
725 dnl actually supported.
726 AC_CACHE_CHECK([for __inline],glib_cv_has__inline,[
727         AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
728         __inline int foo () { return 0; }
729         int main () { return foo (); }
730         ]])],
731         glib_cv_has__inline=yes
732         ,
733         glib_cv_has__inline=no
734         ,)
735 ])
736 case x$glib_cv_has__inline in
737 xyes) AC_DEFINE(G_HAVE___INLINE,1,[Have __inline keyword])
738 esac
739 AC_CACHE_CHECK([for __inline__],glib_cv_has__inline__,[
740         AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
741         __inline__ int foo () { return 0; }
742         int main () { return foo (); }
743         ]])],
744         glib_cv_has__inline__=yes
745         ,
746         glib_cv_has__inline__=no
747         ,)
748 ])
749 case x$glib_cv_has__inline__ in
750 xyes) AC_DEFINE(G_HAVE___INLINE__,1,[Have __inline__ keyword])
751 esac
752 AC_CACHE_CHECK([for inline], glib_cv_hasinline,[
753         AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
754         #undef inline
755         inline int foo () { return 0; }
756         int main () { return foo (); }
757         ]])],
758         glib_cv_hasinline=yes
759         ,
760         glib_cv_hasinline=no
761         ,)
762 ])
763 case x$glib_cv_hasinline in
764 xyes) AC_DEFINE(G_HAVE_INLINE,1,[Have inline keyword])
765 esac
766
767 # if we can use inline functions in headers
768 AC_MSG_CHECKING(if inline functions in headers work)
769 AC_LINK_IFELSE([AC_LANG_SOURCE([[
770 #if defined (G_HAVE_INLINE) && defined (__GNUC__) && defined (__STRICT_ANSI__)
771 #  undef inline
772 #  define inline __inline__
773 #elif !defined (G_HAVE_INLINE)
774 #  undef inline
775 #  if defined (G_HAVE___INLINE__)
776 #    define inline __inline__
777 #  elif defined (G_HAVE___INLINE)
778 #    define inline __inline
779 #  endif
780 #endif
781
782 int glib_test_func2 (int);
783
784 static inline int
785 glib_test_func1 (void) {
786   return glib_test_func2 (1);
787 }
788
789 int
790 main (void) {
791   int i = 1;
792 }]])],[g_can_inline=yes],[g_can_inline=no])
793 AC_MSG_RESULT($g_can_inline)
794
795 dnl *** check for working do while(0) macros ***
796 AC_CACHE_CHECK([for working do while(0) macros], g_cv_support_dowhile_macros, [
797         AC_TRY_COMPILE([],[
798         #define STMT_START do
799         #define STMT_END while(0)
800         #define STMT_TEST STMT_START { i = 0; } STMT_END
801         int main(void) { int i = 1; STMT_TEST; return i; }],
802         [g_cv_support_dowhile_macros=yes],
803         [g_cv_support_dowhile_macros=no],
804         [g_cv_support_dowhile_macros=yes])
805 ])
806 if test x$g_cv_support_dowhile_macros = xyes; then
807   AC_DEFINE(HAVE_DOWHILE_MACROS, 1, [define for working do while(0) macros])
808 fi
809
810 # check for flavours of varargs macros
811 AC_MSG_CHECKING(for ISO C99 varargs macros in C)
812 AC_TRY_COMPILE([],[
813 int a(int p1, int p2, int p3);
814 #define call_a(...) a(1,__VA_ARGS__)
815 call_a(2,3);
816 ],g_have_iso_c_varargs=yes,g_have_iso_c_varargs=no)
817 AC_MSG_RESULT($g_have_iso_c_varargs)
818
819 AC_MSG_CHECKING(for ISO C99 varargs macros in C++)
820 if test "$CXX" = ""; then
821 dnl No C++ compiler
822   g_have_iso_cxx_varargs=no
823 else
824   AC_LANG_CPLUSPLUS
825   AC_TRY_COMPILE([],[
826 int a(int p1, int p2, int p3);
827 #define call_a(...) a(1,__VA_ARGS__)
828 call_a(2,3);
829 ],g_have_iso_cxx_varargs=yes,g_have_iso_cxx_varargs=no)
830   AC_LANG_C
831 fi
832 AC_MSG_RESULT($g_have_iso_cxx_varargs)
833
834 AC_MSG_CHECKING(for GNUC varargs macros)
835 AC_TRY_COMPILE([],[
836 int a(int p1, int p2, int p3);
837 #define call_a(params...) a(1,params)
838 call_a(2,3);
839 ],g_have_gnuc_varargs=yes,g_have_gnuc_varargs=no)
840 AC_MSG_RESULT($g_have_gnuc_varargs)
841
842 # check for GNUC visibility support
843 AC_MSG_CHECKING(for GNUC visibility attribute)
844 GLIB_CHECK_COMPILE_WARNINGS([AC_LANG_SOURCE([[
845 void
846 __attribute__ ((visibility ("hidden")))
847      f_hidden (void)
848 {
849 }
850 void
851 __attribute__ ((visibility ("internal")))
852      f_internal (void)
853 {
854 }
855 void
856 __attribute__ ((visibility ("protected")))
857      f_protected (void)
858 {
859 }
860 void
861 __attribute__ ((visibility ("default")))
862      f_default (void)
863 {
864 }
865 int main (int argc, char **argv)
866 {
867         f_hidden();
868         f_internal();
869         f_protected();
870         f_default();
871         return 0;
872 }
873 ]])],g_have_gnuc_visibility=yes,g_have_gnuc_visibility=no)
874 AC_MSG_RESULT($g_have_gnuc_visibility)
875 AM_CONDITIONAL(HAVE_GNUC_VISIBILITY, [test x$g_have_gnuc_visibility = xyes])
876
877 AC_MSG_CHECKING([whether using Sun Studio C compiler])
878 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#if defined(__SUNPRO_C) || (__SUNPRO_C >= 0x550)
879 #else
880 # include "error: this is not Sun Studio."
881 #endif
882 ]], [[]])], [ g_have_sunstudio_visibility=yes ], [ g_have_sunstudio_visibility=no ])
883 AC_MSG_RESULT($g_have_sunstudio_visibility)
884 AM_CONDITIONAL(HAVE_SUNSTUDIO_VISIBILITY, [test x$g_have_sunstudio_visibility = xyes])
885
886 # check for bytesex stuff
887 AC_C_BIGENDIAN
888 if test x$ac_cv_c_bigendian = xuniversal ; then
889 AC_TRY_COMPILE([#include <endian.h>], [#if __BYTE_ORDER == __BIG_ENDIAN
890 #else
891 #error Not a big endian. 
892 #endif],
893     ac_cv_c_bigendian=yes
894     ,AC_TRY_COMPILE([#include <endian.h>], [#if __BYTE_ORDER == __LITTLE_ENDIAN
895 #else
896 #error Not a little endian. 
897 #endif],
898     ac_cv_c_bigendian=no
899     ,AC_MSG_WARN([Could not determine endianness.])))
900 fi
901
902
903 # check for header files
904 AC_CHECK_HEADERS([dirent.h float.h limits.h pwd.h grp.h sys/param.h sys/poll.h sys/resource.h])
905 AC_CHECK_HEADERS([sys/time.h sys/times.h sys/wait.h unistd.h values.h])
906 AC_CHECK_HEADERS([sys/select.h sys/types.h stdint.h inttypes.h sched.h malloc.h])
907 AC_CHECK_HEADERS([sys/vfs.h sys/mount.h sys/vmount.h sys/statfs.h sys/statvfs.h])
908 AC_CHECK_HEADERS([mntent.h sys/mnttab.h sys/vfstab.h sys/mntctl.h sys/sysctl.h fstab.h])
909 AC_CHECK_HEADERS([sys/uio.h sys/mkdev.h])
910 AC_CHECK_HEADERS([linux/magic.h])
911
912 # check for structure fields
913 AC_CHECK_MEMBERS([struct stat.st_mtimensec, struct stat.st_mtim.tv_nsec, struct stat.st_atimensec, struct stat.st_atim.tv_nsec, struct stat.st_ctimensec, struct stat.st_ctim.tv_nsec])
914 AC_CHECK_MEMBERS([struct stat.st_blksize, struct stat.st_blocks, struct statfs.f_fstypename, struct statfs.f_bavail],,, [#include <sys/types.h>
915 #include <sys/stat.h>
916 #include <unistd.h>
917 #ifdef HAVE_SYS_STATFS_H
918 #include <sys/statfs.h>
919 #endif
920 #ifdef HAVE_SYS_PARAM_H
921 #include <sys/param.h>
922 #endif
923 #ifdef HAVE_SYS_MOUNT_H
924 #include <sys/mount.h>
925 #endif])
926 # struct statvfs.f_basetype is available on Solaris but not for Linux. 
927 AC_CHECK_MEMBERS([struct statvfs.f_basetype],,, [#include <sys/statvfs.h>])
928 AC_CHECK_MEMBERS([struct tm.tm_gmtoff, struct tm.__tm_gmtoff],,,[#include <time.h>])
929
930 # Checks for libcharset
931 AM_LANGINFO_CODESET
932 AC_CHECK_HEADERS([stddef.h stdlib.h string.h])
933 AC_CHECK_FUNCS(setlocale)
934
935 # check additional type sizes
936 AC_CHECK_SIZEOF(size_t)
937
938 dnl Try to figure out whether gsize, gssize should be long or int
939 AC_MSG_CHECKING([for the appropriate definition for size_t])
940
941 case $ac_cv_sizeof_size_t in
942   $ac_cv_sizeof_short) 
943       glib_size_type=short
944       ;;
945   $ac_cv_sizeof_int) 
946       glib_size_type=int
947       ;;
948   $ac_cv_sizeof_long) 
949       glib_size_type=long
950       ;;
951   $ac_cv_sizeof_long_long)
952       glib_size_type='long long'
953       ;;
954   $ac_cv_sizeof__int64)
955       glib_size_type='__int64'
956       ;;
957   *)  AC_MSG_ERROR([No type matching size_t in size])
958       ;;
959 esac
960
961 dnl If int/long are the same size, we see which one produces
962 dnl warnings when used in the location as size_t. (This matters
963 dnl on AIX with xlc)
964 dnl
965 if test $ac_cv_sizeof_size_t = $ac_cv_sizeof_int &&
966    test $ac_cv_sizeof_size_t = $ac_cv_sizeof_long ; then
967   GLIB_CHECK_COMPILE_WARNINGS([AC_LANG_SOURCE([[
968 #if defined(_AIX) && !defined(__GNUC__)
969 #pragma options langlvl=stdc89
970 #endif
971 #include <stddef.h> 
972 int main ()
973 {
974   size_t s = 1;
975   unsigned int *size_int = &s;
976   return (int)*size_int;
977 }
978     ]])],glib_size_type=int,
979       [GLIB_CHECK_COMPILE_WARNINGS([AC_LANG_SOURCE([[
980 #if defined(_AIX) && !defined(__GNUC__)
981 #pragma options langlvl=stdc89
982 #endif
983 #include <stddef.h> 
984 int main ()
985 {
986    size_t s = 1;
987    unsigned long *size_long = &s;
988    return (int)*size_long;
989 }
990         ]])],glib_size_type=long)])
991 fi
992
993 AC_MSG_RESULT(unsigned $glib_size_type)
994
995 # Check for some functions
996 AC_CHECK_FUNCS(lstat strerror strsignal memmove vsnprintf stpcpy strcasecmp strncasecmp poll getcwd vasprintf setenv unsetenv getc_unlocked readlink symlink fdwalk memmem)
997 AC_CHECK_FUNCS(chown lchmod lchown fchmod fchown link statvfs statfs utimes getgrgid getpwuid)
998 AC_CHECK_FUNCS(getmntent_r setmntent endmntent hasmntopt getmntinfo)
999 # Check for high-resolution sleep functions
1000 AC_CHECK_FUNCS(splice)
1001
1002 AC_CHECK_HEADERS(crt_externs.h)
1003 AC_CHECK_FUNCS(_NSGetEnviron)
1004
1005 AC_FUNC_VSNPRINTF_C99
1006 AC_FUNC_PRINTF_UNIX98
1007
1008 # Internet address families
1009 if test $glib_native_win32 = yes; then
1010   glib_inet_includes=["
1011 #include <winsock2.h>
1012   "]
1013 else
1014   glib_inet_includes=["
1015 #include <sys/types.h>
1016 #include <sys/socket.h>
1017   "]
1018 fi
1019
1020 glib_failed=false
1021 GLIB_CHECK_VALUE(AF_INET, $glib_inet_includes, glib_failed=true)
1022 GLIB_CHECK_VALUE(AF_INET6, $glib_inet_includes, glib_failed=true)
1023 # winsock defines this even though it doesn't support it
1024 GLIB_CHECK_VALUE(AF_UNIX, $glib_inet_includes, glib_failed=true)
1025 if $glib_failed ; then
1026   AC_MSG_ERROR([Could not determine values for AF_INET* constants])
1027 fi
1028
1029 glib_failed=false
1030 GLIB_CHECK_VALUE(MSG_PEEK, $glib_inet_includes, glib_failed=true)
1031 GLIB_CHECK_VALUE(MSG_OOB, $glib_inet_includes, glib_failed=true)
1032 GLIB_CHECK_VALUE(MSG_DONTROUTE, $glib_inet_includes, glib_failed=true)
1033 if $glib_failed ; then
1034   AC_MSG_ERROR([Could not determine values for MSG_* constants])
1035 fi
1036
1037 AC_CHECK_FUNCS(getprotobyname_r endservent)
1038 AC_CHECK_HEADERS([netdb.h wspiapi.h])
1039
1040 # For gio/libasyncns
1041 if test $glib_native_win32 = no; then
1042   AC_CHECK_FUNCS(strndup setresuid setreuid)
1043   AC_CHECK_HEADERS(sys/prctl.h arpa/nameser_compat.h)
1044
1045   # We can't just use AC_CHECK_FUNC/AC_CHECK_LIB here. Bug 586150
1046   AC_MSG_CHECKING([for res_query])
1047   AC_TRY_LINK([#include <sys/types.h>
1048 #include <netinet/in.h>
1049 #include <arpa/nameser.h>
1050 #include <resolv.h>],
1051               [res_query("test", 0, 0, (void *)0, 0);],
1052               [AC_MSG_RESULT([yes])],
1053               [save_libs="$LIBS"
1054                LIBS="-lresolv $LIBS"
1055                AC_TRY_LINK([#include <sys/types.h>
1056 #include <netinet/in.h>
1057 #include <arpa/nameser.h>
1058 #include <resolv.h>],
1059                            [res_query("test", 0, 0, (void *)0, 0);],
1060                            [AC_MSG_RESULT([in -lresolv])
1061                             LIBASYNCNS_LIBADD="-lresolv"],
1062                            [LIBS="-lbind $save_libs"
1063                             AC_TRY_LINK([#include <resolv.h>],
1064                                         [res_query("test", 0, 0, (void *)0, 0);],
1065                                         [AC_MSG_RESULT([in -lbind])
1066                                          LIBASYNCNS_LIBADD="-lbind"],
1067                                         [AC_MSG_ERROR(not found)])])
1068                LIBS="$save_libs"])
1069   AC_SUBST(LIBASYNCNS_LIBADD)
1070 fi
1071
1072 case $host in
1073   *-*-solaris* )
1074      AC_DEFINE(_XOPEN_SOURCE_EXTENDED, 1, Needed to get declarations for msg_control and msg_controllen on Solaris)
1075      AC_DEFINE(_XOPEN_SOURCE,          2, Needed to get declarations for msg_control and msg_controllen on Solaris)
1076      AC_DEFINE(__EXTENSIONS__,         1, Needed to get declarations for msg_control and msg_controllen on Solaris)
1077      ;;
1078 esac
1079
1080 dnl
1081 dnl if statfs() takes 2 arguments (Posix) or 4 (Solaris)
1082 dnl
1083 if test "$ac_cv_func_statfs" = yes ; then
1084   AC_MSG_CHECKING([number of arguments to statfs()])
1085   AC_TRY_COMPILE([#include <unistd.h>
1086   #ifdef HAVE_SYS_PARAM_H
1087   #include <sys/param.h>
1088   #endif
1089   #ifdef HAVE_SYS_VFS_H
1090   #include <sys/vfs.h>
1091   #endif
1092   #ifdef HAVE_SYS_MOUNT_H
1093   #include <sys/mount.h>
1094   #endif
1095   #ifdef HAVE_SYS_STATFS_H
1096   #include <sys/statfs.h>
1097   #endif], [struct statfs st;
1098   statfs(NULL, &st);],[
1099     AC_MSG_RESULT([2])
1100     AC_DEFINE(STATFS_ARGS, 2, [Number of arguments to statfs()])],[
1101     AC_TRY_COMPILE([#include <unistd.h>
1102   #ifdef HAVE_SYS_PARAM_H
1103   #include <sys/param.h>
1104   #endif
1105   #ifdef HAVE_SYS_VFS_H
1106   #include <sys/vfs.h>
1107   #endif
1108   #ifdef HAVE_SYS_MOUNT_H
1109   #include <sys/mount.h>
1110   #endif
1111   #ifdef HAVE_SYS_STATFS_H
1112   #include <sys/statfs.h>
1113   #endif], [struct statfs st;
1114   statfs(NULL, &st, sizeof (st), 0);],[
1115       AC_MSG_RESULT([4])
1116       AC_DEFINE(STATFS_ARGS, 4, [Number of arguments to statfs()])],[
1117       AC_MSG_RESULT(unknown)
1118       AC_MSG_ERROR([unable to determine number of arguments to statfs()])])])
1119 fi
1120
1121 #
1122 # Check whether to use an included printf
1123 #
1124
1125 AC_ARG_ENABLE(included-printf,
1126               [AC_HELP_STRING([--enable-included-printf],
1127                               [use included printf [default=auto]])],
1128               enable_included_printf="$enableval")
1129
1130 need_included_printf=no
1131 if test "x$enable_included_printf" = "xyes" ; then
1132   need_included_printf=yes
1133 fi
1134 if test "$ac_cv_func_vsnprintf_c99" != "yes" ; then
1135   need_included_printf=yes
1136 fi
1137 if test "$ac_cv_func_printf_unix98" != "yes" ; then
1138   need_included_printf=yes
1139 fi
1140 if test "x$ac_cv_sizeof_long_long" = "x8" &&
1141    test -z "$glib_cv_long_long_format" ; then
1142   need_included_printf=yes
1143 fi
1144
1145 if test "x$enable_included_printf" = "xno" && 
1146    test "x$need_included_printf" = "xyes" ; then
1147   AC_MSG_ERROR([
1148 *** Your C library's printf doesn't appear to have the features that
1149 *** GLib needs, but you specified --enable-included-printf=no.])
1150 fi
1151
1152 enable_included_printf=$need_included_printf
1153
1154 AM_CONDITIONAL(HAVE_GOOD_PRINTF, test "$enable_included_printf" != "yes")
1155 if test "$enable_included_printf" != "yes" ; then 
1156   AC_DEFINE(HAVE_GOOD_PRINTF,1,[define to use system printf])
1157 else
1158   if test -z "$glib_cv_long_long_format" ; then
1159     glib_cv_long_long_format="ll"
1160   fi
1161   AC_DEFINE(HAVE_VASPRINTF,1)
1162 fi
1163
1164 # Checks needed for gnulib vasnprintf
1165 bh_C_SIGNED
1166 jm_AC_TYPE_LONG_LONG
1167 gt_TYPE_LONGDOUBLE
1168 gt_TYPE_WCHAR_T
1169 gt_TYPE_WINT_T
1170 AC_TYPE_SIZE_T
1171 AC_CHECK_TYPES(ptrdiff_t)
1172 jm_AC_TYPE_INTMAX_T
1173 AC_CHECK_FUNCS([snprintf wcslen])
1174 AC_FUNC_SNPRINTF_C99
1175
1176 # Check if bcopy can be used for overlapping copies, if memmove isn't found.
1177 # The check is borrowed from the PERL Configure script.
1178 if test "$ac_cv_func_memmove" != "yes"; then
1179   AC_CACHE_CHECK(whether bcopy can handle overlapping copies,
1180     glib_cv_working_bcopy,[AC_TRY_RUN([
1181       int main() {
1182         char buf[128], abc[128], *b;
1183         int len, off, align;
1184         bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
1185         for (align = 7; align >= 0; align--) {
1186           for (len = 36; len; len--) {
1187             b = buf+align; bcopy(abc, b, len);
1188             for (off = 1; off <= len; off++) {
1189               bcopy(b, b+off, len); bcopy(b+off, b, len);
1190                 if (bcmp(b, abc, len)) return(1);
1191             }
1192           }
1193         }
1194         return(0);
1195       }],glib_cv_working_bcopy=yes,glib_cv_working_bcopy=no)])
1196
1197   GLIB_ASSERT_SET(glib_cv_working_bcopy)
1198   if test "$glib_cv_working_bcopy" = "yes"; then
1199     AC_DEFINE(HAVE_WORKING_BCOPY,1,[Have a working bcopy])
1200   fi
1201 fi
1202
1203 # Check for sys_errlist
1204 AC_MSG_CHECKING(for sys_errlist)
1205 AC_TRY_LINK(, [
1206 extern char *sys_errlist[];
1207 extern int sys_nerr;
1208 sys_errlist[sys_nerr-1][0] = 0;
1209 ], glib_ok=yes, glib_ok=no)
1210 AC_MSG_RESULT($glib_ok)
1211 if test "$glib_ok" = "no"; then
1212     AC_DEFINE(NO_SYS_ERRLIST,1,[global 'sys_errlist' not found])
1213 fi
1214
1215 # Check for sys_siglist
1216 AC_MSG_CHECKING(for sys_siglist)
1217 AC_TRY_LINK(, [
1218 extern char *sys_siglist[];
1219 exit (sys_siglist[0]);
1220 ], glib_ok=yes, glib_ok=no)
1221 AC_MSG_RESULT($glib_ok)
1222 if test "$glib_ok" = "no"; then
1223     AC_DEFINE(NO_SYS_SIGLIST,1,[global 'sys_siglist' not found])
1224 fi
1225
1226 # Check for sys_siglist decl (see Tue Jan 19 00:44:24 1999 in changelog)
1227 AC_MSG_CHECKING(for sys_siglist declaration)
1228 AC_TRY_COMPILE([#include <signal.h>], [
1229 strlen (sys_siglist[0]);
1230 ], glib_ok=yes, glib_ok=no)
1231 AC_MSG_RESULT($glib_ok)
1232 if test "$glib_ok" = "no"; then
1233     AC_DEFINE(NO_SYS_SIGLIST_DECL,1,[global 'sys_siglist' not declared])
1234 fi
1235
1236 # Check if <sys/select.h> needs to be included for fd_set
1237 AC_MSG_CHECKING([for fd_set])
1238 AC_TRY_COMPILE([#include <sys/types.h>],
1239         [fd_set readMask, writeMask;], gtk_ok=yes, gtk_ok=no)
1240 if test "$gtk_ok" = "yes"; then
1241     AC_MSG_RESULT([yes, found in sys/types.h])
1242 else
1243     AC_EGREP_HEADER(fd_set, sys/select.h, gtk_ok=yes)
1244     if test "$gtk_ok" = "yes"; then
1245         # *** FIXME: give it a different name
1246         AC_DEFINE(HAVE_SYS_SELECT_H,1,[found fd_set in sys/select.h])
1247         AC_MSG_RESULT([yes, found in sys/select.h])
1248     else
1249         AC_DEFINE(NO_FD_SET,1,[didn't find fd_set])
1250         AC_MSG_RESULT(no)
1251     fi
1252 fi
1253
1254 dnl *** check for sane realloc() ***
1255 AC_CACHE_CHECK([whether realloc (NULL,) will work],glib_cv_sane_realloc,[
1256         AC_TRY_RUN([#include <stdlib.h>
1257         int main() {
1258           return realloc (0, sizeof (int)) == 0;
1259         }],
1260         [glib_cv_sane_realloc=yes],
1261         [glib_cv_sane_realloc=no],
1262         [glib_cv_sane_realloc=yes])
1263 ])
1264 if test x$glib_cv_sane_realloc = xyes; then
1265   AC_DEFINE(REALLOC_0_WORKS,1,[whether realloc (NULL,) works])
1266 fi
1267
1268 dnl Check for nl_langinfo and CODESET
1269 AC_CACHE_CHECK([for nl_langinfo (CODESET)],glib_cv_langinfo_codeset,[
1270         AC_TRY_COMPILE([#include <langinfo.h>],
1271                 [char *codeset = nl_langinfo (CODESET);],
1272                 [glib_cv_langinfo_codeset=yes],
1273                 [glib_cv_langinfo_codeset=no])])
1274 if test x$glib_cv_langinfo_codeset = xyes; then
1275   AC_DEFINE(HAVE_CODESET,1,[Have nl_langinfo (CODESET)])
1276 fi
1277
1278 dnl ****************************************
1279 dnl *** posix_memalign                   ***
1280 dnl ****************************************
1281 AC_MSG_CHECKING(for a compliant posix_memalign() implementation)
1282 AC_CACHE_VAL(glib_cv_compliant_posix_memalign,[
1283     glib_cv_compliant_posix_memalign=0
1284     if test "$ac_cv_func_posix_memalign" = "yes" ; then
1285         AC_TRY_RUN([
1286                 #define _XOPEN_SOURCE 600
1287                 #include <stdlib.h> /* posix_memalign() should be defined here */
1288                 /* some systems break if #include <malloc.h> used */
1289                 static void test_memalign (size_t boundary, size_t size) {
1290                     void *mem = 0;
1291                     if (posix_memalign (&mem, boundary, size) != 0 || !mem)
1292                         exit (1);
1293                     else
1294                       free (mem);
1295                 }
1296                 int main() {
1297                     test_memalign (  128,   128 - 2 * sizeof (void*));
1298                     test_memalign (  256,   256 - 2 * sizeof (void*));
1299                     test_memalign (  512,   512 - 2 * sizeof (void*));
1300                     test_memalign ( 1024,  1024 - 2 * sizeof (void*));
1301                     test_memalign ( 2048,  2048 - 2 * sizeof (void*));
1302                     test_memalign ( 4096,  4096 - 2 * sizeof (void*));
1303                     test_memalign ( 8192,  8192 - 2 * sizeof (void*));
1304                     test_memalign (16384, 16384 - 2 * sizeof (void*));
1305                     test_memalign (32768, 32768 - 2 * sizeof (void*));
1306                     exit (0); /* success */
1307                 }
1308                 ],
1309             [glib_cv_compliant_posix_memalign=1], [], [:])
1310       :
1311     fi
1312     ])
1313 if test "$glib_cv_compliant_posix_memalign" = "1"; then
1314     AC_MSG_RESULT(yes)
1315     AC_DEFINE(POSIX_MEMALIGN_WITH_COMPLIANT_ALLOCS, 1, [define if posix_memalign() can allocate any size])
1316 else
1317     AC_MSG_RESULT(no)
1318 fi
1319
1320
1321 dnl ****************************************
1322 dnl *** strlcpy/strlcat                  ***
1323 dnl ****************************************
1324 # Check for strlcpy
1325 AC_CACHE_CHECK([for OpenBSD strlcpy/strlcat],glib_cv_have_strlcpy,[
1326 AC_TRY_RUN([#include <stdlib.h>
1327 #include <string.h>
1328 int main() {
1329   char p[10];
1330   (void) strlcpy (p, "hi", 10);
1331   if (strlcat (p, "bye", 0) != 3) 
1332     return 1;
1333   return 0;
1334 }], glib_cv_have_strlcpy=yes, 
1335     glib_cv_have_strlcpy=no,
1336     glib_cv_have_strlcpy=no)])
1337 if test "$glib_cv_have_strlcpy" = "yes"; then
1338     AC_DEFINE(HAVE_STRLCPY,1,[Have functions strlcpy and strlcat])
1339 fi
1340   
1341
1342 dnl **********************
1343 dnl *** va_copy checks ***
1344 dnl **********************
1345 dnl we currently check for all three va_copy possibilities, so we get
1346 dnl all results in config.log for bug reports.
1347 AC_CACHE_CHECK([for an implementation of va_copy()],glib_cv_va_copy,[
1348         AC_LINK_IFELSE([AC_LANG_SOURCE([[#include <stdarg.h>
1349 #include <stdlib.h>
1350         void f (int i, ...) {
1351         va_list args1, args2;
1352         va_start (args1, i);
1353         va_copy (args2, args1);
1354         if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
1355           exit (1);
1356         va_end (args1); va_end (args2);
1357         }
1358         int main() {
1359           f (0, 42);
1360           return 0;
1361         }]])],
1362         [glib_cv_va_copy=yes],
1363         [glib_cv_va_copy=no])
1364 ])
1365 AC_CACHE_CHECK([for an implementation of __va_copy()],glib_cv___va_copy,[
1366         AC_LINK_IFELSE([AC_LANG_SOURCE([[#include <stdarg.h>
1367 #include <stdlib.h>
1368         void f (int i, ...) {
1369         va_list args1, args2;
1370         va_start (args1, i);
1371         __va_copy (args2, args1);
1372         if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
1373           exit (1);
1374         va_end (args1); va_end (args2);
1375         }
1376         int main() {
1377           f (0, 42);
1378           return 0;
1379         }]])],
1380         [glib_cv___va_copy=yes],
1381         [glib_cv___va_copy=no])
1382 ])
1383
1384 if test "x$glib_cv_va_copy" = "xyes"; then
1385   g_va_copy_func=va_copy
1386 else if test "x$glib_cv___va_copy" = "xyes"; then
1387   g_va_copy_func=__va_copy
1388 fi
1389 fi
1390
1391 if test -n "$g_va_copy_func"; then
1392   AC_DEFINE_UNQUOTED(G_VA_COPY,$g_va_copy_func,[A 'va_copy' style function])
1393 fi
1394
1395 AC_CACHE_CHECK([whether va_lists can be copied by value],glib_cv_va_val_copy,[
1396         AC_TRY_RUN([#include <stdarg.h>
1397 #include <stdlib.h> 
1398         void f (int i, ...) {
1399         va_list args1, args2;
1400         va_start (args1, i);
1401         args2 = args1;
1402         if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
1403           exit (1);
1404         va_end (args1); va_end (args2);
1405         }
1406         int main() {
1407           f (0, 42);
1408           return 0;
1409         }],
1410         [glib_cv_va_val_copy=yes],
1411         [glib_cv_va_val_copy=no],
1412         [glib_cv_va_val_copy=yes])
1413 ])
1414
1415 if test "x$glib_cv_va_val_copy" = "xno"; then
1416   AC_DEFINE(G_VA_COPY_AS_ARRAY,1, ['va_lists' cannot be copies as values])
1417 fi
1418
1419 dnl ***********************
1420 dnl *** g_module checks ***
1421 dnl ***********************
1422 G_MODULE_LIBS=
1423 G_MODULE_LIBS_EXTRA=
1424 G_MODULE_PLUGIN_LIBS=
1425 if test x"$glib_native_win32" = xyes; then
1426   dnl No use for this on Win32
1427   G_MODULE_LDFLAGS=
1428 else
1429   export SED
1430   G_MODULE_LDFLAGS=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
1431 fi
1432 dnl G_MODULE_IMPL= don't reset, so cmd-line can override
1433 G_MODULE_NEED_USCORE=0
1434 G_MODULE_BROKEN_RTLD_GLOBAL=0
1435 G_MODULE_HAVE_DLERROR=0
1436 dnl *** force native WIN32 shared lib loader 
1437 if test -z "$G_MODULE_IMPL"; then
1438   case "$host" in
1439   *-*-mingw*|*-*-cygwin*) G_MODULE_IMPL=G_MODULE_IMPL_WIN32 ;;
1440   esac
1441 fi
1442 dnl *** force native AIX library loader
1443 dnl *** dlopen() filepath must be of the form /path/libname.a(libname.so)
1444 if test -z "$G_MODULE_IMPL"; then
1445   case "$host" in
1446   *-*-aix*) G_MODULE_IMPL=G_MODULE_IMPL_AR ;;
1447   esac
1448 fi
1449 dnl *** dlopen() and dlsym() in system libraries
1450 if test -z "$G_MODULE_IMPL"; then
1451         AC_CHECK_FUNC(dlopen,
1452                       [AC_CHECK_FUNC(dlsym,
1453                                      [G_MODULE_IMPL=G_MODULE_IMPL_DL],[])],
1454                       [])
1455 fi
1456 dnl *** load_image (BeOS)
1457 if test -z "$G_MODULE_IMPL" && test "x$glib_native_beos" = "xyes"; then
1458   AC_CHECK_LIB(root, load_image,
1459       [G_MODULE_LIBS="-lbe -lroot -lglib-2.0 "
1460       G_MODULE_LIBS_EXTRA="-L\$(top_builddir_full)/.libs"
1461       G_MODULE_PLUGIN_LIBS="-L\$(top_builddir_full)/gmodule/.libs -lgmodule"
1462       G_MODULE_IMPL=G_MODULE_IMPL_BEOS],
1463       [])
1464 fi   
1465 dnl *** NSLinkModule (dyld) in system libraries (Darwin)
1466 if test -z "$G_MODULE_IMPL"; then
1467         AC_CHECK_FUNC(NSLinkModule,
1468                       [G_MODULE_IMPL=G_MODULE_IMPL_DYLD
1469                        G_MODULE_NEED_USCORE=1],
1470                       [])
1471 fi
1472 dnl *** dlopen() and dlsym() in libdl
1473 if test -z "$G_MODULE_IMPL"; then
1474         AC_CHECK_LIB(dl, dlopen,
1475                      [AC_CHECK_LIB(dl, dlsym,
1476                                    [G_MODULE_LIBS=-ldl
1477                                    G_MODULE_IMPL=G_MODULE_IMPL_DL],[])],
1478                      [])
1479 fi
1480 dnl *** shl_load() in libdld (HP-UX)
1481 if test -z "$G_MODULE_IMPL"; then
1482         AC_CHECK_LIB(dld, shl_load,
1483                 [G_MODULE_LIBS=-ldld
1484                 G_MODULE_IMPL=G_MODULE_IMPL_DLD],
1485                 [])
1486 fi
1487 dnl *** additional checks for G_MODULE_IMPL_DL
1488 if test "$G_MODULE_IMPL" = "G_MODULE_IMPL_DL"; then
1489         LIBS_orig="$LIBS"
1490         LDFLAGS_orig="$LDFLAGS"
1491         LIBS="$G_MODULE_LIBS $LIBS"
1492         LDFLAGS="$LDFLAGS $G_MODULE_LDFLAGS"
1493 dnl *** check for OSF1/5.0 RTLD_GLOBAL brokenness
1494         echo "void glib_plugin_test(void) { }" > plugin.c
1495         ${SHELL} ./libtool --mode=compile ${CC} -shared \
1496                 -export-dynamic -o plugin.o plugin.c 2>&1 >/dev/null
1497         AC_CACHE_CHECK([for RTLD_GLOBAL brokenness],
1498                 glib_cv_rtldglobal_broken,[
1499                 AC_TRY_RUN([
1500 #include <dlfcn.h>
1501 #ifndef RTLD_GLOBAL
1502 #  define RTLD_GLOBAL 0
1503 #endif
1504 #ifndef RTLD_LAZY
1505 #  define RTLD_LAZY 0
1506 #endif
1507 int glib_plugin_test;
1508 int main () {
1509     void *handle, *global, *local;
1510     global = &glib_plugin_test;
1511     handle = dlopen ("./.libs/plugin.o", RTLD_GLOBAL | RTLD_LAZY);
1512     if (!handle) return 0;
1513     local = dlsym (handle, "glib_plugin_test");
1514     return global == local;
1515 }                       ],
1516                         [glib_cv_rtldglobal_broken=no],
1517                         [glib_cv_rtldglobal_broken=yes],
1518                         [glib_cv_rtldglobal_broken=no])
1519                 rm -f plugin.c plugin.o plugin.lo .libs/plugin.o
1520                 rmdir .libs 2>/dev/null
1521         ])
1522         if test "x$glib_cv_rtldglobal_broken" = "xyes"; then
1523                 G_MODULE_BROKEN_RTLD_GLOBAL=1
1524         else
1525                 G_MODULE_BROKEN_RTLD_GLOBAL=0
1526         fi
1527 dnl *** check whether we need preceeding underscores
1528         AC_CACHE_CHECK([for preceeding underscore in symbols],
1529                 glib_cv_uscore,[
1530                 AC_TRY_RUN([#include <dlfcn.h>
1531                 int glib_underscore_test (void) { return 42; }
1532                 int main() {
1533                   void *f1 = (void*)0, *f2 = (void*)0, *handle;
1534                   handle = dlopen ((void*)0, 0);
1535                   if (handle) {
1536                     f1 = dlsym (handle, "glib_underscore_test");
1537                     f2 = dlsym (handle, "_glib_underscore_test");
1538                   } return (!f2 || f1);
1539                 }],
1540                         [glib_cv_uscore=yes],
1541                         [glib_cv_uscore=no],
1542                         [])
1543                 rm -f plugin.c plugin.$ac_objext plugin.lo
1544         ])
1545         GLIB_ASSERT_SET(glib_cv_uscore)
1546         if test "x$glib_cv_uscore" = "xyes"; then
1547                 G_MODULE_NEED_USCORE=1
1548         else
1549                 G_MODULE_NEED_USCORE=0
1550         fi
1551
1552         LDFLAGS="$LDFLAGS_orig"
1553 dnl *** check for having dlerror()
1554         AC_CHECK_FUNC(dlerror,
1555                 [G_MODULE_HAVE_DLERROR=1],
1556                 [G_MODULE_HAVE_DLERROR=0])
1557         LIBS="$LIBS_orig"
1558 fi
1559 dnl *** done, have we got an implementation?
1560 if test -z "$G_MODULE_IMPL"; then
1561         G_MODULE_IMPL=0
1562         G_MODULE_SUPPORTED=false
1563 else
1564         G_MODULE_SUPPORTED=true
1565 fi
1566
1567 AC_MSG_CHECKING(for the suffix of module shared libraries)
1568 export SED
1569 shrext_cmds=`./libtool --config | grep '^shrext_cmds='`
1570 eval $shrext_cmds
1571 module=yes eval std_shrext=$shrext_cmds
1572 # chop the initial dot
1573 glib_gmodule_suffix=`echo $std_shrext | sed 's/^\.//'`
1574 AC_MSG_RESULT(.$glib_gmodule_suffix)
1575 # any reason it may fail?
1576 if test "x$glib_gmodule_suffix" = x; then
1577         AC_MSG_ERROR(Cannot determine shared library suffix from libtool)
1578 fi
1579  
1580 AC_SUBST(G_MODULE_SUPPORTED)
1581 AC_SUBST(G_MODULE_IMPL)
1582 AC_SUBST(G_MODULE_LIBS)
1583 AC_SUBST(G_MODULE_LIBS_EXTRA)
1584 AC_SUBST(G_MODULE_PLUGIN_LIBS)
1585 AC_SUBST(G_MODULE_LDFLAGS)
1586 AC_SUBST(G_MODULE_HAVE_DLERROR)
1587 AC_SUBST(G_MODULE_BROKEN_RTLD_GLOBAL)
1588 AC_SUBST(G_MODULE_NEED_USCORE)
1589 AC_SUBST(GLIB_DEBUG_FLAGS)
1590
1591 dnl **********************
1592 dnl *** g_spawn checks ***
1593 dnl **********************
1594
1595 AC_MSG_CHECKING(for gspawn implementation)
1596 case "$host" in
1597   *-*-mingw*)
1598     GSPAWN=gspawn-win32.lo
1599     ;;
1600   *)
1601     GSPAWN=gspawn.lo
1602     ;;    
1603 esac
1604 AC_MSG_RESULT($GSPAWN)
1605 AC_SUBST(GSPAWN)
1606
1607 dnl *************************
1608 dnl *** GIOChannel checks ***
1609 dnl *************************
1610
1611 AC_MSG_CHECKING(for GIOChannel implementation)
1612 case "$host" in
1613   *-*-mingw*)
1614     GIO=giowin32.lo
1615     ;;
1616   *)
1617     GIO=giounix.lo
1618     ;;    
1619 esac
1620 AC_MSG_RESULT($GIO)
1621 AC_SUBST(GIO)
1622
1623 dnl *********************************
1624 dnl *** Directory for GIO modules ***
1625 dnl *********************************
1626
1627 AC_ARG_WITH(gio-module-dir,
1628            [AC_HELP_STRING([--with-gio-module-dir=PATH],
1629                            [Load gio modules from this directory [LIBDIR/gio/modules]])],
1630            [],
1631            [with_gio_module_dir='${libdir}/gio/modules'])
1632 GIO_MODULE_DIR=$with_gio_module_dir
1633 AC_SUBST(GIO_MODULE_DIR)
1634
1635 dnl **********************************
1636 dnl *** Check for libselinux (GIO) ***
1637 dnl **********************************
1638 AC_ARG_ENABLE(selinux, [  --disable-selinux       build without selinux support])
1639 msg_selinux=no
1640 SELINUX_LIBS=
1641 if test "x$enable_selinux" != "xno"; then
1642
1643  AC_CHECK_LIB(selinux, is_selinux_enabled,
1644    [AC_CHECK_HEADERS(selinux/selinux.h,
1645      [AC_CHECK_LIB(selinux, lgetfilecon_raw, 
1646        [AC_DEFINE(HAVE_SELINUX, 1, [Define to 1 if libselinux is available])
1647         SELINUX_LIBS="-lselinux"
1648         msg_selinux=yes])
1649      ])
1650    ])
1651 fi
1652 AC_SUBST(SELINUX_LIBS)
1653
1654 dnl *****************************
1655 dnl ** Check for inotify (GIO) **
1656 dnl *****************************
1657 inotify_support=no
1658 AC_CHECK_HEADERS([sys/inotify.h],
1659 [
1660         inotify_support=yes
1661         AC_CHECK_FUNCS(inotify_init1)
1662 ])
1663
1664 AM_CONDITIONAL(HAVE_INOTIFY, [test "$inotify_support" = "yes"])
1665
1666 dnl *********************************
1667 dnl ** Check for Solaris FEN (GIO) **
1668 dnl *********************************
1669 fen_support=no
1670 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
1671 #include <port.h> 
1672 #ifndef PORT_SOURCE_FILE 
1673 #error "Please upgrade to Nevada 72 or above to suppoert FEN" 
1674 #endif 
1675 int main() { return 0; } ]])],
1676 [
1677         fen_support=yes
1678 ],)
1679
1680 AM_CONDITIONAL(HAVE_FEN, [test "$fen_support" = "yes"])
1681
1682 dnl ****************************
1683 dnl *** Checks for FAM (GIO) ***
1684 dnl ****************************
1685
1686 should_disable_fam=no
1687
1688 AC_ARG_ENABLE(fam, [  --disable-fam          build without enabling fam for file system monitoring],
1689                          [
1690                                 if test "x$enable_fam" = "xno"; then
1691                                         should_disable_fam=yes
1692                                         echo "Not building FAM support"
1693                                 fi
1694                          ]
1695                          )
1696 fam_support=no
1697 FAM_LIBS=
1698 if test "x$should_disable_fam" = "xno"; then
1699 AC_CHECK_LIB(fam, FAMOpen,
1700   [AC_CHECK_HEADERS(fam.h,
1701     [AC_DEFINE(HAVE_FAM, [], [Define if we have FAM])
1702      AC_CHECK_LIB(fam, FAMNoExists,
1703                   AC_DEFINE(HAVE_FAM_NO_EXISTS, [], [Define if we have FAMNoExists in fam]))
1704      FAM_LIBS="-lfam"]
1705      fam_support=yes,
1706     AC_MSG_WARN(*** FAM support will not be built (header files not found) ***))],
1707   AC_MSG_WARN(*** FAM support will not be built (FAM library not found) ***))
1708 AC_SUBST(FAM_LIBS)
1709 fi
1710 AM_CONDITIONAL(HAVE_FAM, [test "$fam_support" = "yes"])
1711
1712
1713 dnl *****************************
1714 dnl *** Check for xattr (GIO) ***
1715 dnl *****************************
1716 AC_ARG_ENABLE(xattr, [  --disable-xattr           build without xattr support])
1717 msg_xattr=no
1718 XATTR_LIBS=
1719 if test "x$enable_xattr" != "xno"; then
1720
1721 dnl either glibc or libattr can provide xattr support
1722
1723 dnl for both of them, we check for getxattr being in
1724 dnl the library and a valid xattr header.
1725
1726 dnl try glibc
1727  AC_CHECK_LIB(c, getxattr,
1728    [AC_CHECK_HEADERS(sys/xattr.h,
1729      [AC_DEFINE(HAVE_XATTR, 1, [Define to 1 if xattr is available])
1730       msg_xattr=yes])
1731    ])
1732
1733   if test "x$msg_xattr" != "xyes"; then
1734 dnl   failure. try libattr
1735    AC_CHECK_LIB(attr, getxattr,
1736       [AC_CHECK_HEADERS(attr/xattr.h,
1737        [AC_DEFINE(HAVE_XATTR, 1, [Define to 1 if xattr is available])
1738         XATTR_LIBS="-lattr"
1739         msg_xattr=yes])
1740       ])
1741   fi
1742
1743   if test "x$msg_xattr" = "xyes"; then
1744     AC_MSG_CHECKING([for XATTR_NOFOLLOW])
1745     AC_TRY_COMPILE([
1746       #include <stdio.h>
1747       #ifdef HAVE_SYS_TYPES_H
1748       #include <sys/types.h>
1749       #endif
1750       #ifdef HAVE_SYS_XATTR_H
1751       #include <sys/xattr.h>
1752       #elif HAVE_ATTR_XATTR_H
1753       #include <attr/xattr.h>
1754       #endif
1755     ],
1756     [ssize_t len = getxattr("", "", NULL, 0, 0, XATTR_NOFOLLOW);],
1757     [
1758       AC_DEFINE([HAVE_XATTR_NOFOLLOW], [1], [Define to 1 if xattr API uses XATTR_NOFOLLOW])
1759       AC_MSG_RESULT([yes])
1760     ],
1761     [AC_MSG_RESULT([no])]
1762     )
1763   fi
1764
1765 fi
1766 AC_SUBST(XATTR_LIBS)
1767
1768 dnl ****************************************
1769 dnl *** platform dependent source checks ***
1770 dnl ****************************************
1771
1772 AC_MSG_CHECKING(for platform-dependent source)
1773 case "$host" in
1774   *-*-cygwin*|*-*-mingw*)
1775     PLATFORMDEP=gwin32.lo
1776     ;;
1777   *)
1778     PLATFORMDEP=
1779     ;;    
1780 esac
1781 AC_MSG_RESULT($PLATFORMDEP)
1782 AC_SUBST(PLATFORMDEP)
1783
1784 AC_MSG_CHECKING([whether to compile timeloop])
1785 case "$host" in
1786   *-*-cygwin*|*-*-mingw*|*-*-minix)
1787     enable_timeloop=no
1788     ;;
1789   *)
1790     enable_timeloop=yes
1791     ;;    
1792 esac
1793 AC_MSG_RESULT($enable_timeloop)
1794 AM_CONDITIONAL(ENABLE_TIMELOOP, test x$enable_timeloop = xyes)
1795
1796 AC_MSG_CHECKING([if building for some Win32 platform])
1797 case "$host" in
1798   *-*-mingw*|*-*-cygwin*)
1799     platform_win32=yes
1800     ;;
1801   *)
1802     platform_win32=no
1803     ;;
1804 esac
1805 AC_MSG_RESULT($platform_win32)
1806 AM_CONDITIONAL(PLATFORM_WIN32, test x$platform_win32 = xyes)
1807
1808 dnl ***********************
1809 dnl *** g_thread checks ***
1810 dnl ***********************
1811
1812 AC_ARG_WITH(threads,
1813            [AC_HELP_STRING([--with-threads=@<:@none/posix/dce/win32@:>@],
1814                            [specify a thread implementation to use])],
1815            [if test "x$with_threads" = x; then
1816                 want_threads=yes
1817             else
1818                 want_threads=$with_threads
1819             fi],
1820            [want_threads=yes])
1821 if test "x$enable_threads" = "xno"; then
1822         want_threads=no
1823 fi
1824
1825 dnl error and warning message
1826 dnl *************************
1827
1828 THREAD_NO_IMPLEMENTATION="You do not have any known thread system on your
1829                 computer. GLib will not have a default thread implementation."
1830
1831 FLAG_DOES_NOT_WORK="I can't find the MACRO to enable thread safety on your
1832                 platform (normally it's "_REENTRANT"). I'll not use any flag on
1833                 compilation now, but then your programs might not work.
1834                 Please provide information on how it is done on your system."
1835
1836 LIBS_NOT_FOUND_1="I can't find the libraries for the thread implementation
1837                 "
1838
1839 LIBS_NOT_FOUND_2=". Please choose another thread implementation or
1840                 provide information on your thread implementation.
1841                 You can also run 'configure --disable-threads' 
1842                 to compile without thread support."
1843
1844 FUNC_NO_GETPWUID_R="the 'g_get_(user_name|real_name|home_dir|tmp_dir)'
1845                 functions will not be MT-safe during their first call because
1846                 there is no working 'getpwuid_r' on your system."
1847
1848 FUNC_NO_LOCALTIME_R="the 'g_date_set_time' function will not be MT-safe
1849                 because there is no 'localtime_r' on your system."
1850
1851 POSIX_NO_YIELD="I can not find a yield functions for your platform. A rather
1852                 crude surrogate will be used. If you happen to know a 
1853                 yield function for your system, please inform the GLib 
1854                 developers."
1855
1856 POSIX_NO_PRIORITIES="I can not find the minimal and maximal priorities for 
1857                 threads on your system. Thus threads can only have the default 
1858                 priority. If you happen to know these main/max
1859                 priorities, please inform the GLib developers."
1860
1861 AIX_COMPILE_INFO="AIX's C compiler needs to be called by a different name, when
1862                 linking threaded applications. As GLib cannot do that 
1863                 automatically, you will get an linkg error everytime you are 
1864                 not using the right compiler. In that case you have to relink 
1865                 with the right compiler. Ususally just '_r' is appended 
1866                 to the compiler name."
1867
1868 dnl determination of thread implementation
1869 dnl ***************************************
1870
1871 # have_threads=no   means no thread support
1872 # have_threads=none means no default thread implementation
1873
1874 have_threads=no
1875 if test "x$want_threads" = xyes || test "x$want_threads" = xposix \
1876                                 || test "x$want_threads" = xdce; then
1877         # -D_POSIX4_DRAFT_SOURCE -D_POSIX4A_DRAFT10_SOURCE is for DG/UX
1878         # -U_OSF_SOURCE is for Digital UNIX 4.0d
1879         GTHREAD_COMPILE_IMPL_DEFINES="-D_POSIX4_DRAFT_SOURCE -D_POSIX4A_DRAFT10_SOURCE -U_OSF_SOURCE"
1880         glib_save_CPPFLAGS="$CPPFLAGS"
1881         CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
1882         if test "x$have_threads" = xno; then
1883                 AC_TRY_COMPILE([#include <pthread.h>],
1884                         [pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;],
1885                         have_threads=posix)
1886         fi
1887         if test "x$have_threads" = xno; then
1888                 AC_TRY_COMPILE([#include <pthread.h>],
1889                         [pthread_mutex_t m; 
1890                          pthread_mutex_init (&m, pthread_mutexattr_default);],
1891                         have_threads=dce)
1892         fi
1893         # Tru64Unix requires -pthread to find pthread.h. See #103020
1894         CPPFLAGS="$CPPFLAGS -pthread"
1895         if test "x$have_threads" = xno; then
1896         AC_TRY_COMPILE([#include <pthread.h>],
1897                        [pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;],
1898                        have_threads=posix)
1899         fi
1900         CPPFLAGS="$glib_save_CPPFLAGS"
1901 fi
1902 if test "x$want_threads" = xyes || test "x$want_threads" = xwin32; then
1903         case $host in
1904                 *-*-mingw*)
1905                 have_threads=win32
1906                 ;;
1907         esac
1908 fi
1909 if test "x$want_threads" = xnone; then
1910         have_threads=none
1911 fi
1912
1913 AC_MSG_CHECKING(for thread implementation)
1914
1915 if test "x$have_threads" = xno && test "x$want_threads" != xno; then
1916         AC_MSG_RESULT(none available)
1917         AC_MSG_WARN($THREAD_NO_IMPLEMENTATION)
1918 else
1919         AC_MSG_RESULT($have_threads)
1920 fi
1921
1922
1923 dnl determination of G_THREAD_CFLAGS
1924 dnl ********************************
1925
1926 G_THREAD_LIBS=
1927 G_THREAD_LIBS_EXTRA=
1928 G_THREAD_CFLAGS=
1929
1930 dnl
1931 dnl Test program for basic POSIX threads functionality
1932 dnl
1933 m4_define([glib_thread_test],[
1934 #include <pthread.h> 
1935 int check_me = 0;
1936 void* func(void* data) {check_me = 42; return &check_me;}
1937 int main()
1938  { pthread_t t; 
1939    void *ret;
1940    pthread_create (&t, $1, func, 0);
1941    pthread_join (t, &ret);
1942    return (check_me != 42 || ret != &check_me);
1943 }])
1944
1945 dnl
1946 dnl Test program for sched_get_priority_min()
1947 dnl
1948 m4_define([glib_sched_priority_test],[
1949 #include <sched.h>
1950 #include <errno.h>
1951 int main() {
1952     errno = 0;
1953     return sched_get_priority_min(SCHED_OTHER)==-1
1954            && errno != 0;
1955 }])
1956
1957 if test x"$have_threads" != xno; then
1958
1959   if test x"$have_threads" = xposix; then
1960     # First we test for posix, whether -pthread or -pthreads do the trick as 
1961     # both CPPFLAG and LIBS. 
1962     # One of them does for most gcc versions and some other platforms/compilers
1963     # too and could be considered as the canonical way to go. 
1964     case $host in
1965       *-*-cygwin*|*-*-darwin*)
1966          # skip cygwin and darwin -pthread or -pthreads test
1967          ;;
1968       *-solaris*)
1969         # These compiler/linker flags work with both Sun Studio and gcc
1970         # Sun Studio expands -mt to -D_REENTRANT and -lthread
1971         # gcc expands -pthreads to -D_REENTRANT -D_PTHREADS -lpthread
1972         G_THREAD_CFLAGS="-D_REENTRANT -D_PTHREADS"
1973         G_THREAD_LIBS="-lpthread -lthread"
1974         ;;
1975       *)
1976         for flag in pthread pthreads mt; do
1977           glib_save_CFLAGS="$CFLAGS"
1978           CFLAGS="$CFLAGS -$flag"
1979           AC_TRY_RUN(glib_thread_test(0),
1980                      glib_flag_works=yes,
1981                      glib_flag_works=no,
1982                      [AC_LINK_IFELSE([AC_LANG_SOURCE(glib_thread_test(0))],
1983                                      glib_flag_works=yes,
1984                                      glib_flag_works=no)])
1985           CFLAGS="$glib_save_CFLAGS"
1986           if test $glib_flag_works = yes ; then
1987              G_THREAD_CFLAGS=-$flag
1988              G_THREAD_LIBS=-$flag
1989              break;
1990           fi
1991         done
1992          ;;
1993     esac 
1994   fi
1995
1996   if test x"$G_THREAD_CFLAGS" = x; then
1997
1998     # The canonical -pthread[s] does not work. Try something different.
1999
2000     case $host in
2001         *-aix*)
2002                 if test x"$GCC" = xyes; then
2003                         # GCC 3.0 and above needs -pthread. 
2004                         # Should be coverd by the case above.
2005                         # GCC 2.x and below needs -mthreads
2006                         G_THREAD_CFLAGS="-mthreads"             
2007                         G_THREAD_LIBS=$G_THREAD_CFLAGS
2008                 else 
2009                         # We are probably using the aix compiler. Normaly a 
2010                         # program would have to be compiled with the _r variant
2011                         # of the corresponding compiler, but we as GLib cannot 
2012                         # do that: but the good news is that for compiling the
2013                         # only difference is the added -D_THREAD_SAFE compile 
2014                         # option. This is according to the "C for AIX User's 
2015                         # Guide".
2016                         G_THREAD_CFLAGS="-D_THREAD_SAFE"
2017                 fi
2018                 ;;
2019         *-dg-dgux*)  # DG/UX
2020                 G_THREAD_CFLAGS="-D_REENTRANT -D_POSIX4A_DRAFT10_SOURCE"
2021                 ;;
2022         *-osf*)
2023                 # So we are using dce threads. posix threads are already 
2024                 # catched above.
2025                 G_THREAD_CFLAGS="-threads"
2026                 G_THREAD_LIBS=$G_THREAD_CFLAGS
2027                 ;;
2028         *-sysv5uw7*) # UnixWare 7 
2029                 # We are not using gcc with -pthread. Catched above.
2030                 G_THREAD_CFLAGS="-Kthread"
2031                 G_THREAD_LIBS=$G_THREAD_CFLAGS
2032                 ;;
2033         *-mingw*)
2034                 # No flag needed when using MSVCRT.DLL
2035                 G_THREAD_CFLAGS=""
2036                 ;;
2037         *)
2038                 G_THREAD_CFLAGS="-D_REENTRANT" # good default guess otherwise
2039                 ;;
2040     esac
2041  
2042   fi
2043
2044     # if we are not finding the localtime_r function, then we probably are
2045     # not using the proper multithread flag
2046
2047     glib_save_CPPFLAGS="$CPPFLAGS"
2048     CPPFLAGS="$CPPFLAGS $G_THREAD_CFLAGS"
2049
2050     # First we test, whether localtime_r is declared in time.h
2051     # directly. Then we test whether a macro localtime_r exists, in
2052     # which case localtime_r in the test program is replaced and thus
2053     # if we still find localtime_r in the output, it is not defined as 
2054     # a macro.
2055
2056     AC_EGREP_CPP([[^a-zA-Z1-9_]localtime_r[^a-zA-Z1-9_]], [#include <time.h>], ,
2057       [AC_EGREP_CPP([[^a-zA-Z1-9_]localtime_r[^a-zA-Z1-9_]], [#include <time.h> 
2058                                                            localtime_r(a,b)],
2059                    AC_MSG_WARN($FLAG_DOES_NOT_WORK))])
2060
2061     CPPFLAGS="$glib_save_CPPFLAGS"
2062
2063     AC_MSG_CHECKING(thread related cflags)
2064     AC_MSG_RESULT($G_THREAD_CFLAGS)
2065     CPPFLAGS="$CPPFLAGS $G_THREAD_CFLAGS"
2066 fi
2067
2068 dnl determination of G_THREAD_LIBS
2069 dnl ******************************
2070
2071 mutex_has_default=no
2072 case $have_threads in
2073         posix|dce)
2074           glib_save_CPPFLAGS="$CPPFLAGS"
2075           CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
2076           if test x"$G_THREAD_LIBS" = x; then
2077             case $host in
2078               *-aix*)
2079                 # We are not using gcc (would have set G_THREAD_LIBS) and thus 
2080                 # probably using the aix compiler.
2081                 AC_MSG_WARN($AIX_COMPILE_INFO)
2082                 ;;
2083               *)
2084                 G_THREAD_LIBS=error
2085                 glib_save_LIBS="$LIBS"
2086                 for thread_lib in "" pthread pthread32 pthreads thread dce; do
2087                         if test x"$thread_lib" = x; then
2088                                 add_thread_lib=""
2089                                 IN=""
2090                         else
2091                                 add_thread_lib="-l$thread_lib"
2092                                 IN=" in -l$thread_lib"
2093                         fi
2094                         if test x"$have_threads" = xposix; then
2095                                 defattr=0
2096                         else
2097                                 defattr=pthread_attr_default
2098                         fi
2099                         
2100                         LIBS="$add_thread_lib $glib_save_LIBS"
2101                         
2102                         AC_MSG_CHECKING(for pthread_create/pthread_join$IN)
2103                         AC_TRY_RUN(glib_thread_test($defattr),
2104                                    glib_result=yes,
2105                                    glib_result=no,
2106                                    [AC_LINK_IFELSE([AC_LANG_SOURCE(glib_thread_test($defattr))],
2107                                                    glib_result=yes,
2108                                                    glib_result=no)])
2109                         AC_MSG_RESULT($glib_result)
2110                         
2111                         if test "$glib_result" = "yes" ; then
2112                           G_THREAD_LIBS="$add_thread_lib"
2113                           break
2114                         fi
2115                 done
2116                 if test "x$G_THREAD_LIBS" = xerror; then
2117                   AC_MSG_ERROR($LIBS_NOT_FOUND_1$have_threads$LIBS_NOT_FOUND_2)
2118                 fi 
2119                 LIBS="$glib_save_LIBS"
2120                 ;;
2121             esac
2122           fi
2123
2124           glib_save_LIBS="$LIBS"
2125           for thread_lib in "" rt rte; do
2126             if test x"$thread_lib" = x; then
2127               add_thread_lib=""
2128               IN=""
2129             else
2130               add_thread_lib="-l$thread_lib"
2131               IN=" in -l$thread_lib"
2132             fi
2133             LIBS="$add_thread_lib $glib_save_LIBS"
2134             
2135             AC_MSG_CHECKING(for sched_get_priority_min$IN)
2136             AC_TRY_RUN(glib_sched_priority_test,
2137                        glib_result=yes,
2138                        glib_result=no,
2139                        [AC_LINK_IFELSE([AC_LANG_SOURCE(glib_sched_priority_test)],
2140                                        glib_result=yes,
2141                                        glib_result=no)])
2142             AC_MSG_RESULT($glib_result)
2143
2144             if test "$glib_result" = "yes" ; then           
2145                G_THREAD_LIBS="$G_THREAD_LIBS $add_thread_lib"
2146                posix_priority_min="sched_get_priority_min(SCHED_OTHER)"
2147                posix_priority_max="sched_get_priority_max(SCHED_OTHER)"
2148                break
2149             fi
2150           done
2151           LIBS="$glib_save_LIBS"
2152           mutex_has_default=yes
2153           mutex_default_type='pthread_mutex_t'
2154           mutex_default_init='PTHREAD_MUTEX_INITIALIZER'
2155           mutex_header_file='pthread.h'
2156           if test "x$have_threads" = "xposix"; then
2157             g_threads_impl="POSIX"
2158           else
2159             g_threads_impl="DCE"
2160             have_threads="posix"
2161           fi
2162           AC_SUBST(GTHREAD_COMPILE_IMPL_DEFINES)
2163           CPPFLAGS="$glib_save_CPPFLAGS"
2164           ;;
2165         win32)
2166            g_threads_impl="WIN32"
2167            ;;
2168         none|no)
2169            g_threads_impl="NONE"
2170            ;;
2171         *)
2172            g_threads_impl="NONE"
2173            G_THREAD_LIBS=error
2174            ;;
2175 esac
2176
2177 if test "x$G_THREAD_LIBS" = xerror; then
2178         AC_MSG_ERROR($LIBS_NOT_FOUND_1$have_threads$LIBS_NOT_FOUND_2)
2179 fi
2180
2181 case $host in
2182   *-*-beos*)
2183     G_THREAD_LIBS="-lbe -lroot -lglib-2.0 "
2184     G_THREAD_LIBS_EXTRA="-L\$(top_builddir_full)/.libs"
2185     ;;
2186   *)
2187     ;;
2188 esac
2189
2190 AC_MSG_CHECKING(thread related libraries)
2191 AC_MSG_RESULT($G_THREAD_LIBS)
2192
2193 dnl check for mt safe function variants and some posix functions
2194 dnl ************************************************************
2195
2196 if test x"$have_threads" != xno; then
2197         glib_save_LIBS="$LIBS"
2198         # we are not doing the following for now, as this might require glib 
2199         # to always be linked with the thread libs on some platforms. 
2200         # LIBS="$LIBS $G_THREAD_LIBS"
2201         AC_CHECK_FUNCS(localtime_r gmtime_r)
2202         if test "$ac_cv_header_pwd_h" = "yes"; then
2203                 AC_CACHE_CHECK([for posix getpwuid_r],
2204                         ac_cv_func_posix_getpwuid_r,
2205                         [AC_TRY_RUN([
2206 #include <errno.h>
2207 #include <pwd.h>
2208 int main () { 
2209     char buffer[10000];
2210     struct passwd pwd, *pwptr = &pwd;
2211     int error;
2212     errno = 0;
2213     error = getpwuid_r (0, &pwd, buffer, 
2214                         sizeof (buffer), &pwptr);
2215    return (error < 0 && errno == ENOSYS) 
2216            || error == ENOSYS; 
2217 }                               ],
2218                                 [ac_cv_func_posix_getpwuid_r=yes],
2219                                 [ac_cv_func_posix_getpwuid_r=no])])
2220                 GLIB_ASSERT_SET(ac_cv_func_posix_getpwuid_r)
2221                 if test "$ac_cv_func_posix_getpwuid_r" = yes; then
2222                         AC_DEFINE(HAVE_POSIX_GETPWUID_R,1,
2223                                 [Have POSIX function getpwuid_r])
2224                 else
2225                         AC_CACHE_CHECK([for nonposix getpwuid_r],
2226                                 ac_cv_func_nonposix_getpwuid_r,
2227                                 [AC_TRY_LINK([#include <pwd.h>],
2228                                         [char buffer[10000];
2229                                         struct passwd pwd;
2230                                         getpwuid_r (0, &pwd, buffer, 
2231                                                         sizeof (buffer));],
2232                                         [ac_cv_func_nonposix_getpwuid_r=yes],
2233                                         [ac_cv_func_nonposix_getpwuid_r=no])])
2234                         GLIB_ASSERT_SET(ac_cv_func_nonposix_getpwuid_r)
2235                         if test "$ac_cv_func_nonposix_getpwuid_r" = yes; then
2236                                 AC_DEFINE(HAVE_NONPOSIX_GETPWUID_R,1,
2237                                         [Have non-POSIX function getpwuid_r])
2238                         fi
2239                 fi
2240         fi
2241         if test "$ac_cv_header_grp_h" = "yes"; then
2242                 AC_CACHE_CHECK([for posix getgrgid_r],
2243                         ac_cv_func_posix_getgrgid_r,
2244                         [AC_TRY_RUN([
2245 #include <errno.h>
2246 #include <grp.h>
2247 int main () { 
2248     char buffer[10000];
2249     struct group grp, *grpptr = &grp;
2250     int error;
2251     errno = 0;
2252     error = getgrgid_r (0, &grp, buffer, 
2253                         sizeof (buffer), &grpptr);
2254    return (error < 0 && errno == ENOSYS) 
2255            || error == ENOSYS; 
2256 }                              ],
2257                                [ac_cv_func_posix_getgrgid_r=yes],
2258                                [ac_cv_func_posix_getgrgid_r=no])])
2259                 GLIB_ASSERT_SET(ac_cv_func_posix_getgrgid_r)
2260                 if test "$ac_cv_func_posix_getgrgid_r" = yes; then
2261                         AC_DEFINE(HAVE_POSIX_GETGRGID_R,1,
2262                                 [Have POSIX function getgrgid_r])
2263                 else
2264                         AC_CACHE_CHECK([for nonposix getgrgid_r],
2265                                 ac_cv_func_nonposix_getgrgid_r,
2266                                 [AC_TRY_LINK([#include <grp.h>],
2267                                         [char buffer[10000];
2268                                         struct group grp;       
2269                                         getgrgid_r (0, &grp, buffer, 
2270                                         sizeof (buffer));],
2271                                 [ac_cv_func_nonposix_getgrgid_r=yes],
2272                                 [ac_cv_func_nonposix_getgrgid_r=no])])
2273                         GLIB_ASSERT_SET(ac_cv_func_nonposix_getgrgid_r)
2274                         if test "$ac_cv_func_nonposix_getgrgid_r" = yes; then
2275                                 AC_DEFINE(HAVE_NONPOSIX_GETGRGID_R,1,
2276                                         [Have non-POSIX function getgrgid_r])
2277                         fi
2278                 fi
2279         fi
2280         LIBS="$G_THREAD_LIBS $LIBS"
2281         if test x"$have_threads" = xposix; then
2282                 glib_save_CPPFLAGS="$CPPFLAGS"
2283                 CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
2284                 dnl we might grow sizeof(pthread_t) later on, so use a dummy name here
2285                 GLIB_SIZEOF([#include <pthread.h>], pthread_t, system_thread)
2286                 # This is not AC_CHECK_FUNC to also work with function
2287                 # name mangling in header files.
2288                 AC_MSG_CHECKING(for pthread_attr_setstacksize)
2289                 AC_TRY_LINK([#include <pthread.h>],
2290                         [pthread_attr_t t; pthread_attr_setstacksize(&t,0)],
2291                         [AC_MSG_RESULT(yes)
2292                         AC_DEFINE(HAVE_PTHREAD_ATTR_SETSTACKSIZE,1,
2293                                   [Have function pthread_attr_setstacksize])],
2294                         [AC_MSG_RESULT(no)])
2295                 AC_MSG_CHECKING(for minimal/maximal thread priority)
2296                 if test x"$posix_priority_min" = x; then
2297                         AC_EGREP_CPP(PX_PRIO_MIN,[#include <pthread.h>
2298                                 PX_PRIO_MIN],,[
2299                                 posix_priority_min=PX_PRIO_MIN
2300                                 posix_priority_max=PX_PRIO_MAX])
2301                 fi
2302                 if test x"$posix_priority_min" = x; then
2303                         # AIX
2304                         AC_EGREP_CPP(PTHREAD_PRIO_MIN,[#include <pthread.h>
2305                                 PTHREAD_PRIO_MIN],,[
2306                                 posix_priority_min=PTHREAD_PRIO_MIN
2307                                 posix_priority_max=PTHREAD_PRIO_MAX])
2308                 fi
2309                 if test x"$posix_priority_min" = x; then
2310                         AC_EGREP_CPP(PRI_OTHER_MIN,[#include <pthread.h>
2311                                 PRI_OTHER_MIN],,[
2312                                 posix_priority_min=PRI_OTHER_MIN        
2313                                 posix_priority_max=PRI_OTHER_MAX])
2314                 fi
2315                 if test x"$posix_priority_min" = x; then
2316                         AC_MSG_RESULT(none found)
2317                         AC_MSG_WARN($POSIX_NO_PRIORITIES)
2318                         posix_priority_min=-1
2319                         posix_priority_max=-1
2320                 else
2321                         AC_MSG_RESULT($posix_priority_min/$posix_priority_max)
2322                         AC_MSG_CHECKING(for pthread_setschedparam)
2323                         AC_TRY_LINK([#include <pthread.h>],
2324                           [pthread_t t; pthread_setschedparam(t, 0, NULL)],
2325                           [AC_MSG_RESULT(yes)
2326                         AC_DEFINE_UNQUOTED(POSIX_MIN_PRIORITY,$posix_priority_min,[Minimum POSIX RT priority])
2327                            AC_DEFINE_UNQUOTED(POSIX_MAX_PRIORITY,$posix_priority_max,[Maximum POSIX RT priority])],
2328                           [AC_MSG_RESULT(no)
2329                            AC_MSG_WARN($POSIX_NO_PRIORITIES)])
2330                 fi
2331                 posix_yield_func=none
2332                 AC_MSG_CHECKING(for posix yield function)
2333                 for yield_func in sched_yield pthread_yield_np pthread_yield \
2334                                                         thr_yield; do
2335                         AC_TRY_LINK([#include <pthread.h>],
2336                                 [$yield_func()],
2337                                 [posix_yield_func="$yield_func"
2338                                 break])
2339                 done            
2340                 if test x"$posix_yield_func" = xnone; then
2341                         AC_MSG_RESULT(none found)
2342                         AC_MSG_WARN($POSIX_NO_YIELD)
2343                         posix_yield_func="g_usleep(1000)"
2344                 else
2345                         AC_MSG_RESULT($posix_yield_func)
2346                         posix_yield_func="$posix_yield_func()"
2347                 fi
2348                 AC_DEFINE_UNQUOTED(POSIX_YIELD_FUNC,$posix_yield_func,[The POSIX RT yield function])
2349                 CPPFLAGS="$glib_save_CPPFLAGS"
2350            
2351         elif test x"$have_threads" = xwin32; then
2352                 # It's a pointer to a private struct
2353                 GLIB_SIZEOF(,struct _GThreadData *, system_thread)
2354         fi
2355
2356         LIBS="$glib_save_LIBS"
2357
2358         # now spit out all the warnings.
2359         if test "$ac_cv_func_posix_getpwuid_r" != "yes" && 
2360            test "$ac_cv_func_nonposix_getpwuid_r" != "yes"; then
2361                 AC_MSG_WARN($FUNC_NO_GETPWUID_R)
2362         fi
2363         if test "$ac_cv_func_localtime_r" != "yes"; then
2364                 AC_MSG_WARN($FUNC_NO_LOCALTIME_R)
2365         fi
2366 fi      
2367
2368 if test x"$glib_cv_sizeof_system_thread" = x; then
2369    # use a pointer as a fallback.
2370    GLIB_SIZEOF(,void *, system_thread)
2371 fi
2372
2373 #
2374 # Hack to deal with:
2375
2376 #  a) GCC < 3.3 for Linux doesn't include -lpthread when
2377 #     building shared libraries with linux.
2378 #  b) FreeBSD doesn't do this either.
2379 #
2380 case $host in
2381   *-*-freebsd*|*-*-linux*)
2382     G_THREAD_LIBS_FOR_GTHREAD="`echo $G_THREAD_LIBS | sed s/-pthread/-lpthread/`"
2383     ;;
2384   *)     
2385     G_THREAD_LIBS_FOR_GTHREAD="$G_THREAD_LIBS"   
2386     ;;
2387 esac
2388
2389 AM_CONDITIONAL(HAVE_THREADS, [test "$have_threads" != "none"])
2390 AC_DEFINE_UNQUOTED(G_THREAD_SOURCE,"gthread-$have_threads.c",
2391                    [Source file containing theread implementation])
2392 AC_SUBST(G_THREAD_CFLAGS)
2393 AC_SUBST(G_THREAD_LIBS)
2394 AC_SUBST(G_THREAD_LIBS_FOR_GTHREAD)
2395 AC_SUBST(G_THREAD_LIBS_EXTRA)
2396
2397 dnl **********************************************
2398 dnl *** GDefaultMutex setup and initialization ***
2399 dnl **********************************************
2400 dnl
2401 dnl if mutex_has_default = yes, we also got
2402 dnl mutex_default_type, mutex_default_init and mutex_header_file
2403 if test $mutex_has_default = yes ; then
2404         glib_save_CPPFLAGS="$CPPFLAGS"
2405         glib_save_LIBS="$LIBS"
2406         LIBS="$G_THREAD_LIBS $LIBS"
2407         CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
2408         GLIB_SIZEOF([#include <$mutex_header_file>],
2409                     $mutex_default_type,
2410                     gmutex)
2411         GLIB_BYTE_CONTENTS([#include <$mutex_header_file>],
2412                            $mutex_default_type,
2413                            gmutex,
2414                            $glib_cv_sizeof_gmutex,
2415                            $mutex_default_init)
2416         if test x"$glib_cv_byte_contents_gmutex" = xno; then
2417                 mutex_has_default=no
2418         fi
2419         CPPFLAGS="$glib_save_CPPFLAGS"
2420         LIBS="$glib_save_LIBS"
2421 fi
2422
2423 AC_CHECK_FUNCS(clock_gettime, [], [
2424   AC_CHECK_LIB(rt, clock_gettime, [
2425     AC_DEFINE(HAVE_CLOCK_GETTIME, 1)
2426     G_THREAD_LIBS="$G_THREAD_LIBS -lrt"
2427     G_THREAD_LIBS_FOR_GTHREAD="$G_THREAD_LIBS_FOR_GTHREAD -lrt"
2428     GLIB_RT_LIBS="-lrt"
2429   ])
2430 ])
2431 AC_SUBST(GLIB_RT_LIBS)
2432
2433 AC_CACHE_CHECK(for monotonic clocks,
2434     glib_cv_monotonic_clock,AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
2435 #include <time.h>
2436 #include <unistd.h>
2437 int main() {
2438 #if !(defined(_POSIX_MONOTONIC_CLOCK) && _POSIX_MONOTONIC_CLOCK >= 0 && defined(CLOCK_MONOTONIC))
2439         #error No monotonic clock
2440 #endif
2441         return 0;
2442 }
2443 ]])],glib_cv_monotonic_clock=yes,glib_cv_monotonic_clock=no))
2444 if test "$glib_cv_monotonic_clock" = "yes"; then
2445   AC_DEFINE(HAVE_MONOTONIC_CLOCK,1,[Have a monotonic clock])
2446 fi
2447
2448
2449 dnl ********************************
2450 dnl *** g_atomic_* tests for gcc ***
2451 dnl ********************************
2452
2453 AC_MSG_CHECKING([whether to use assembler code for atomic operations])
2454
2455 glib_cv_gcc_has_builtin_atomic_operations=no
2456 if test x"$GCC" = xyes; then
2457   AC_MSG_CHECKING([whether GCC supports build-in atomic intrinsics])
2458   AC_TRY_LINK([],
2459               [int i;
2460                __sync_synchronize ();
2461                __sync_bool_compare_and_swap (&i, 0, 1);
2462                __sync_fetch_and_add (&i, 1);
2463               ],
2464               [glib_cv_gcc_has_builtin_atomic_operations=yes],
2465               [glib_cv_gcc_has_builtin_atomic_operations=no])
2466
2467   AC_MSG_RESULT($glib_cv_gcc_has_builtin_atomic_operations)
2468     case $host_cpu in
2469       i386)
2470         AC_MSG_RESULT([none])
2471         glib_memory_barrier_needed=no
2472         ;;
2473       i?86)
2474         AC_MSG_RESULT([i486])
2475         AC_DEFINE_UNQUOTED(G_ATOMIC_I486, 1,
2476                            [i486 atomic implementation])
2477         glib_memory_barrier_needed=no
2478         ;;
2479       sparc*)
2480         SPARCV9_WARNING="Try to rerun configure with CFLAGS='-mcpu=v9',
2481                          when you are using a sparc with v9 instruction set (most
2482                          sparcs nowadays). This will make the code for atomic
2483                          operations much faster. The resulting code will not run
2484                          on very old sparcs though."
2485
2486         AC_LINK_IFELSE([AC_LANG_SOURCE([[
2487           main ()
2488           {
2489             int tmp1, tmp2, tmp3;
2490             __asm__ __volatile__("casx [%2], %0, %1"
2491                                  : "=&r" (tmp1), "=&r" (tmp2) : "r" (&tmp3));
2492           }]])],
2493           AC_MSG_RESULT([sparcv9])
2494           AC_DEFINE_UNQUOTED(G_ATOMIC_SPARCV9, 1,
2495                              [sparcv9 atomic implementation]),
2496           AC_MSG_RESULT([no])
2497           AC_MSG_WARN([[$SPARCV9_WARNING]]))
2498         glib_memory_barrier_needed=yes
2499         ;;
2500       alpha*)
2501         AC_MSG_RESULT([alpha])
2502         AC_DEFINE_UNQUOTED(G_ATOMIC_ALPHA, 1,
2503                            [alpha atomic implementation])
2504         glib_memory_barrier_needed=yes
2505         ;;
2506       x86_64)
2507         AC_MSG_RESULT([x86_64])
2508         AC_DEFINE_UNQUOTED(G_ATOMIC_X86_64, 1,
2509                            [x86_64 atomic implementation])
2510         glib_memory_barrier_needed=no
2511        ;;
2512       powerpc*)
2513         AC_MSG_RESULT([powerpc])
2514         AC_DEFINE_UNQUOTED(G_ATOMIC_POWERPC, 1,
2515                            [powerpc atomic implementation])
2516         glib_memory_barrier_needed=yes
2517         AC_MSG_CHECKING([whether asm supports numbered local labels])
2518         AC_TRY_COMPILE(
2519                        ,[
2520                        __asm__ __volatile__ ("1:       nop\n"
2521                                "         bne-    1b")
2522                        ],[
2523                        AC_DEFINE_UNQUOTED(ASM_NUMERIC_LABELS, 1, [define if asm blocks can use numeric local labels])
2524                        AC_MSG_RESULT([yes])
2525                        ],[
2526                        AC_MSG_RESULT([no])
2527                        ])
2528         ;;
2529       ia64)
2530         AC_MSG_RESULT([ia64])
2531         AC_DEFINE_UNQUOTED(G_ATOMIC_IA64, 1,
2532                            [ia64 atomic implementation])
2533         glib_memory_barrier_needed=yes
2534         ;;
2535       s390|s390x)
2536         AC_MSG_RESULT([s390])
2537         AC_DEFINE_UNQUOTED(G_ATOMIC_S390, 1,
2538                            [s390 atomic implementation])
2539         glib_memory_barrier_needed=no
2540         ;;
2541       arm*)
2542         AC_MSG_RESULT([arm])
2543         AC_DEFINE_UNQUOTED(G_ATOMIC_ARM, 1,
2544                            [arm atomic implementation])
2545         glib_memory_barrier_needed=no
2546         ;;
2547       crisv32*|etraxfs*)
2548         AC_MSG_RESULT([crisv32])
2549         AC_DEFINE_UNQUOTED(G_ATOMIC_CRISV32, 1,
2550                            [crisv32 atomic implementation])
2551         glib_memory_barrier_needed=no
2552         ;;
2553       cris*|etrax*)
2554         AC_MSG_RESULT([cris])
2555         AC_DEFINE_UNQUOTED(G_ATOMIC_CRIS, 1,
2556                            [cris atomic implementation])
2557         glib_memory_barrier_needed=no
2558         ;;
2559       *)
2560         AC_MSG_RESULT([none])
2561         glib_memory_barrier_needed=yes
2562         ;;
2563     esac
2564 else
2565   if test $glib_native_win32 = yes; then
2566     # For Windows but not using gcc. No barriers needed then either.
2567     glib_memory_barrier_needed=no
2568   fi
2569 fi
2570
2571 AM_CONDITIONAL(HAVE_GCC_BUILTINS_FOR_ATOMIC_OPERATIONS,
2572                [test $glib_cv_gcc_has_builtin_atomic_operations = yes])
2573
2574 dnl ************************
2575 dnl ** Check for futex(2) **
2576 dnl ************************
2577 AC_MSG_CHECKING([for futex(2) system call])
2578 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
2579 #include <linux/futex.h>
2580 #include <sys/syscall.h>
2581 #include <unistd.h>
2582 ],[
2583 int
2584 main (void)
2585 {
2586   /* it is not like this actually runs or anything... */
2587   syscall (__NR_futex, NULL, FUTEX_WAKE, FUTEX_WAIT);
2588   return 0;
2589 }
2590 ])],
2591 [
2592   AC_MSG_RESULT(yes)
2593   AC_DEFINE(HAVE_FUTEX, 1, [we have the futex(2) system call])
2594 ],
2595 [
2596   AC_MSG_RESULT(no)
2597 ])
2598
2599 dnl ****************************************
2600 dnl *** GLib POLL* compatibility defines ***
2601 dnl ****************************************
2602
2603 glib_poll_includes=["
2604 #include <sys/types.h>
2605 #include <sys/poll.h>
2606 "]
2607
2608 if test $ac_cv_header_sys_types_h = yes &&
2609    test $ac_cv_header_sys_poll_h = yes ; then
2610   glib_failed=false
2611   GLIB_CHECK_VALUE(POLLIN, $glib_poll_includes, glib_failed=true)
2612   GLIB_CHECK_VALUE(POLLOUT, $glib_poll_includes, glib_failed=true)
2613   GLIB_CHECK_VALUE(POLLPRI, $glib_poll_includes, glib_failed=true)
2614   GLIB_CHECK_VALUE(POLLERR, $glib_poll_includes, glib_failed=true)
2615   GLIB_CHECK_VALUE(POLLHUP, $glib_poll_includes, glib_failed=true)
2616   GLIB_CHECK_VALUE(POLLNVAL, $glib_poll_includes, glib_failed=true)
2617   if $glib_failed ; then
2618     AC_MSG_ERROR([Could not determine values for POLL* constants])
2619   fi
2620 else
2621   glib_cv_value_POLLIN=1
2622   glib_cv_value_POLLOUT=4
2623   glib_cv_value_POLLPRI=2
2624   glib_cv_value_POLLERR=8
2625   glib_cv_value_POLLHUP=16
2626   glib_cv_value_POLLNVAL=32
2627 fi
2628
2629 AC_MSG_CHECKING([for broken poll])
2630 AC_RUN_IFELSE([AC_LANG_SOURCE([[
2631         #include <stdlib.h>
2632         #include <fcntl.h>
2633         #include <poll.h>
2634         #ifdef HAVE_SYS_POLL_H
2635         #include <sys/poll.h>
2636         #endif
2637         int main(void) {
2638           struct pollfd fds[1];
2639           int fd;
2640           fd = open("/dev/null", 1);
2641           fds[0].fd = fd;
2642           fds[0].events = POLLIN;
2643           fds[0].revents = 0;
2644           if (poll(fds, 1, 0) < 0 || (fds[0].revents & POLLNVAL) != 0) {
2645                 exit(1);  /* Does not work for devices -- fail */
2646           }
2647           exit(0);
2648         }]])],
2649   [broken_poll=no],
2650   [broken_poll=yes
2651    AC_DEFINE(BROKEN_POLL,1,[poll doesn't work on devices])],
2652   [broken_poll="no (cross compiling)"])
2653 AC_MSG_RESULT($broken_poll)
2654
2655 dnl *********************
2656 dnl *** GRegex checks ***
2657 dnl *********************
2658 PCRE_REQUIRED_VERSION=8.11
2659
2660 # Check if we should compile GRegex
2661 AC_ARG_ENABLE(regex, AC_HELP_STRING([--disable-regex],
2662               [disable the compilation of GRegex]),
2663 [case "${enableval}" in
2664   yes) enable_regex=true ;;
2665   no)  enable_regex=false ;;
2666   *) AC_MSG_ERROR(bad value ${enableval} for --enable-regex) ;;
2667 esac],
2668 [enable_regex=true])
2669
2670 AM_CONDITIONAL(ENABLE_REGEX, $enable_regex)
2671
2672 if test x$enable_regex = xtrue; then
2673   AC_DEFINE(ENABLE_REGEX, [], [include GRegex])
2674   # Check if we should use the internal or the system-supplied pcre
2675   AC_ARG_WITH(pcre,
2676              [AC_HELP_STRING([--with-pcre=@<:@internal/system@:>@],
2677                              [specify whether to use the internal or the
2678                               system-supplied PCRE library])])
2679
2680   AM_CONDITIONAL(USE_SYSTEM_PCRE, [test "x$with_pcre" = xsystem])
2681
2682   if test "x$with_pcre" = xsystem; then
2683     PKG_CHECK_MODULES(PCRE,
2684                       libpcre >= $PCRE_REQUIRED_VERSION)
2685     AC_CACHE_CHECK([for Unicode support in PCRE],glib_cv_pcre_has_unicode,[
2686                    glib_save_CFLAGS="$CFLAGS"
2687                    glib_save_LIBS="$LIBS"
2688                    CFLAGS="$CFLAGS $PCRE_CFLAGS" LIBS="$PCRE_LIBS"
2689                    AC_TRY_RUN([#include <pcre.h>
2690                                int main () {
2691                                  int support;
2692                                  pcre_config (PCRE_CONFIG_UTF8, &support);
2693                                  if (!support)
2694                                    return 1;
2695                                  pcre_config (PCRE_CONFIG_UNICODE_PROPERTIES, &support);
2696                                  if (!support)
2697                                    return 1;
2698                                  return 0;
2699                                }],
2700                    glib_cv_pcre_has_unicode=yes,
2701                    glib_cv_pcre_has_unicode=no,
2702                    glib_cv_pcre_has_unicode=yes)
2703                    CFLAGS="$glib_save_CFLAGS"
2704                    LIBS="$glib_save_LIBS"
2705         ])
2706     if test "$glib_cv_pcre_has_unicode" = "no"; then
2707       AC_MSG_ERROR([*** The system-supplied PCRE does not support Unicode properties or UTF-8.])
2708     fi
2709     AC_SUBST(PCRE_CFLAGS)
2710     AC_SUBST(PCRE_LIBS)
2711     AC_DEFINE(USE_SYSTEM_PCRE, [], [using the system-supplied PCRE library])
2712     PCRE_REQUIRES=libpcre
2713     AC_SUBST(PCRE_REQUIRES)
2714   else
2715     # If using gcc 4 pass -Wno-pointer-sign when compiling the internal PCRE
2716     if test x"$GCC" = xyes; then
2717       AC_MSG_CHECKING([whether compiler understands -Wno-pointer-sign])
2718       save_CFLAGS="$CFLAGS"
2719       CFLAGS="$CFLAGS -Wno-pointer-sign"
2720       AC_TRY_COMPILE([],[],[PCRE_WARN_CFLAGS="$PCRE_WARN_CFLAGS -Wno-pointer-sign"
2721                             AC_MSG_RESULT(yes)],[AC_MSG_RESULT(no)])
2722       CFLAGS="$save_CFLAGS"
2723     fi
2724   fi
2725   AC_SUBST(PCRE_WARN_CFLAGS)
2726 else
2727   AM_CONDITIONAL(USE_SYSTEM_PCRE, false])
2728 fi
2729
2730 dnl **********************
2731 dnl *** Win32 API libs ***
2732 dnl **********************
2733
2734 case $host in
2735   *-*-cygwin*)
2736         G_LIBS_EXTRA="-luser32 -lkernel32"
2737     ;;
2738   *-*-mingw*)
2739         G_LIBS_EXTRA="-lws2_32 -lole32"
2740     ;;
2741   *)
2742         G_LIBS_EXTRA=""
2743     ;;
2744 esac
2745 AC_SUBST(G_LIBS_EXTRA)
2746
2747 dnl If the system doesn't define EILSEQ, we should define EILSEQ ourselves
2748 dnl since we need it for g_iconv()
2749
2750 AC_MSG_CHECKING([for EILSEQ])
2751 AC_TRY_COMPILE([
2752 #include <errno.h>
2753 ],
2754 [
2755 int error = EILSEQ;
2756 ], have_eilseq=yes, have_eilseq=no);
2757 AC_MSG_RESULT($have_eilseq)
2758
2759 dnl ******************************************************************
2760 dnl *** If we are cross-compiling, look for glib-genmarshal and    ***
2761 dnl *** glib-compile-schemas in PATH                               ***
2762 dnl ******************************************************************
2763
2764 AM_CONDITIONAL(CROSS_COMPILING, test $cross_compiling = yes)
2765
2766 if test $cross_compiling = yes; then
2767   AC_PATH_PROG(GLIB_GENMARSHAL, glib-genmarshal, no)
2768   if test x$GLIB_GENMARSHAL = xno; then
2769     AC_MSG_ERROR(Could not find a glib-genmarshal in your PATH)
2770   fi
2771
2772   AC_PATH_PROG(GLIB_COMPILE_SCHEMAS, glib-compile-schemas, no)
2773   if test x$GLIB_COMPILE_SCHEMAS = xno; then
2774     AC_MSG_ERROR(Could not find a glib-compile-schemas in your PATH)
2775   fi
2776 fi
2777
2778 dnl **************************
2779 dnl *** Checks for gtk-doc ***
2780 dnl **************************
2781
2782 GTK_DOC_CHECK([1.15])
2783
2784 AC_ARG_ENABLE(man,
2785               [AC_HELP_STRING([--enable-man],
2786                               [regenerate man pages from Docbook [default=no]])],enable_man=yes,
2787               enable_man=no)
2788
2789 if test "${enable_man}" != no; then
2790 dnl
2791 dnl Check for xsltproc
2792 dnl
2793 AC_PATH_PROG([XSLTPROC], [xsltproc])
2794   if test -z "$XSLTPROC"; then
2795     enable_man=no
2796   fi
2797
2798   dnl check for DocBook DTD and stylesheets in the local catalog.
2799   JH_CHECK_XML_CATALOG([-//OASIS//DTD DocBook XML V4.1.2//EN],
2800      [DocBook XML DTD V4.1.2],,enable_man=no)
2801   JH_CHECK_XML_CATALOG([http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl],
2802      [DocBook XSL Stylesheets],,enable_man=no)
2803 fi
2804
2805 AM_CONDITIONAL(ENABLE_MAN, test x$enable_man != xno)
2806
2807 dnl
2808 dnl Tracing
2809 dnl
2810
2811 AC_ARG_ENABLE([dtrace],
2812              [AS_HELP_STRING([--enable-dtrace],
2813                               [Enable inclusion of dtrace trace support])])
2814 have_dtrace=no
2815 AC_MSG_CHECKING([whether to include dtrace tracing support])
2816 if test "x$enable_dtrace" != xno; then
2817   if test x$glib_have_carbon = xyes; then
2818     AC_MSG_RESULT([no (not yet compatible with MacOS dtrace)])
2819   else 
2820     AC_MSG_RESULT([yes])
2821     AC_CHECK_PROGS(DTRACE, dtrace)
2822     if test -z "$DTRACE"; then
2823       if test "x$enable_dtrace" = xyes; then
2824         AC_MSG_ERROR([dtrace not found])
2825       fi
2826     else
2827       AC_CHECK_HEADER([sys/sdt.h],have_dtrace=yes,
2828                       [if test "x$enable_dtrace" = xyes; then
2829                         AC_MSG_ERROR([dtrace support needs sys/sdt.h header])
2830                        fi])
2831     fi
2832   fi
2833 else
2834   AC_MSG_RESULT([no])
2835 fi
2836 if test "x$have_dtrace" = xyes; then
2837   AC_DEFINE([HAVE_DTRACE], [1], [Define to 1 if using dtrace probes.])
2838 fi
2839 AM_CONDITIONAL([ENABLE_DTRACE], [test x$have_dtrace = xyes ])
2840
2841 AC_MSG_CHECKING([whether to include systemtap tracing support])
2842 AC_ARG_ENABLE([systemtap],
2843              [AS_HELP_STRING([--enable-systemtap],
2844                               [Enable inclusion of systemtap trace support])])
2845 have_systemtap=no
2846 if test "x$enable_systemtap" != xno -a "x$have_dtrace" = xyes; then
2847   have_systemtap=yes
2848 fi
2849 AC_MSG_RESULT(${have_systemtap})
2850
2851 AM_CONDITIONAL([ENABLE_SYSTEMTAP], [test x$have_systemtap = xyes])
2852
2853 AC_ARG_WITH([tapset-install-dir],
2854             [AS_HELP_STRING([--with-tapset-install-dir],
2855             [The absolute path where the systemtap tapsets will be installed])],
2856             [if test "x${withval}" = x; then
2857                ABS_TAPSET_DIR="\$(datadir)/systemtap/tapset"
2858              else
2859                ABS_TAPSET_DIR="${withval}"
2860               fi],
2861             [ABS_TAPSET_DIR="\$(datadir)/systemtap/tapset"])
2862 AC_SUBST(ABS_TAPSET_DIR)
2863
2864 dnl ************************************
2865 dnl *** Enable lcov coverage reports ***
2866 dnl ************************************
2867
2868 AC_ARG_ENABLE(gcov,
2869   AS_HELP_STRING([--enable-gcov],
2870                  [Enable gcov]),
2871   [use_gcov=$enableval], [use_gcov=no])
2872
2873 if test "x$use_gcov" = "xyes"; then
2874   dnl we need gcc:
2875   if test "$GCC" != "yes"; then
2876     AC_MSG_ERROR([GCC is required for --enable-gcov])
2877   fi
2878
2879   dnl Check if ccache is being used
2880   AC_CHECK_PROG(SHTOOL, shtool, shtool)
2881   case `$SHTOOL path $CC` in
2882     *ccache*[)] gcc_ccache=yes;;
2883     *[)] gcc_ccache=no;;
2884   esac
2885
2886   if test "$gcc_ccache" = "yes" && (test -z "$CCACHE_DISABLE" || test "$CCACHE_DISABLE" != "1"); then
2887     AC_MSG_ERROR([ccache must be disabled when --enable-gcov option is used. You can disable ccache by setting environment variable CCACHE_DISABLE=1.])
2888   fi
2889
2890   ltp_version_list="1.6 1.7 1.8"
2891   AC_CHECK_PROG(LTP, lcov, lcov)
2892   AC_CHECK_PROG(LTP_GENHTML, genhtml, genhtml)
2893
2894   if test "$LTP"; then
2895     AC_CACHE_CHECK([for ltp version], glib_cv_ltp_version, [
2896       glib_cv_ltp_version=invalid
2897       ltp_version=`$LTP -v 2>/dev/null | $SED -e 's/^.* //'`
2898       for ltp_check_version in $ltp_version_list; do
2899         if test "$ltp_version" = "$ltp_check_version"; then
2900           glib_cv_ltp_version="$ltp_check_version (ok)"
2901         fi
2902       done
2903     ])
2904   else
2905     ltp_msg="To enable code coverage reporting you must have one of the following LTP versions installed: $ltp_version_list"
2906     AC_MSG_ERROR([$ltp_msg])
2907   fi
2908
2909   case $glib_cv_ltp_version in
2910     ""|invalid[)]
2911       ltp_msg="You must have one of the following versions of LTP: $ltp_version_list (found: $ltp_version)."
2912       AC_MSG_ERROR([$ltp_msg])
2913       LTP="exit 0;"
2914       ;;
2915   esac
2916
2917   if test -z "$LTP_GENHTML"; then
2918     AC_MSG_ERROR([Could not find genhtml from the LTP package])
2919   fi
2920
2921   AC_DEFINE(HAVE_GCOV, 1, [Whether you have gcov])
2922
2923   dnl Remove all optimization flags from CFLAGS
2924   changequote({,})
2925   CFLAGS=`echo "$CFLAGS" | $SED -e 's/-O[0-9]*//g'`
2926   changequote([,])
2927
2928   dnl Add the special gcc flags
2929   CFLAGS="$CFLAGS -O0 -fprofile-arcs -ftest-coverage"
2930   LDFLAGS="$LDFLAGS -lgcov"
2931 fi
2932
2933 dnl ******************************
2934 dnl *** output the whole stuff ***
2935 dnl ******************************
2936
2937 dnl this section will only be run if config.status is invoked with no
2938 dnl arguments, or with "glib/glibconfig.h" as an argument.
2939 AC_CONFIG_COMMANDS([glib/glibconfig.h],
2940 [
2941         outfile=glib/glibconfig.h-tmp
2942         cat > $outfile <<\_______EOF
2943 /* glibconfig.h
2944  *
2945  * This is a generated file.  Please modify 'configure.ac'
2946  */
2947
2948 #ifndef __G_LIBCONFIG_H__
2949 #define __G_LIBCONFIG_H__
2950
2951 #include <glib/gmacros.h>
2952
2953 _______EOF
2954
2955         if test x$glib_limits_h = xyes; then
2956           echo '#include <limits.h>' >> $outfile
2957         fi
2958         if test x$glib_float_h = xyes; then
2959           echo '#include <float.h>' >> $outfile
2960         fi
2961         if test x$glib_values_h = xyes; then
2962           echo '#include <values.h>' >> $outfile
2963         fi
2964         if test "$glib_header_alloca_h" = "yes"; then
2965           echo '#define GLIB_HAVE_ALLOCA_H' >> $outfile
2966         fi
2967         if test x$glib_sys_poll_h = xyes; then
2968           echo '#define GLIB_HAVE_SYS_POLL_H' >> $outfile
2969         fi
2970         if test x$glib_included_printf != xyes; then
2971           echo "
2972 /* Specifies that GLib's g_print*() functions wrap the
2973  * system printf functions.  This is useful to know, for example,
2974  * when using glibc's register_printf_function().
2975  */" >> $outfile
2976           echo '#define GLIB_USING_SYSTEM_PRINTF' >> $outfile
2977         fi
2978
2979         cat >> $outfile <<_______EOF
2980
2981 G_BEGIN_DECLS
2982
2983 #define G_MINFLOAT      $glib_mf
2984 #define G_MAXFLOAT      $glib_Mf
2985 #define G_MINDOUBLE     $glib_md
2986 #define G_MAXDOUBLE     $glib_Md
2987 #define G_MINSHORT      $glib_ms
2988 #define G_MAXSHORT      $glib_Ms
2989 #define G_MAXUSHORT     $glib_Mus
2990 #define G_MININT        $glib_mi
2991 #define G_MAXINT        $glib_Mi
2992 #define G_MAXUINT       $glib_Mui
2993 #define G_MINLONG       $glib_ml
2994 #define G_MAXLONG       $glib_Ml
2995 #define G_MAXULONG      $glib_Mul
2996
2997 _______EOF
2998
2999
3000         ### this should always be true in a modern C/C++ compiler
3001         cat >>$outfile <<_______EOF
3002 typedef signed char gint8;
3003 typedef unsigned char guint8;
3004 _______EOF
3005
3006
3007         if test -n "$gint16"; then
3008           cat >>$outfile <<_______EOF
3009 typedef signed $gint16 gint16;
3010 typedef unsigned $gint16 guint16;
3011 #define G_GINT16_MODIFIER $gint16_modifier
3012 #define G_GINT16_FORMAT $gint16_format
3013 #define G_GUINT16_FORMAT $guint16_format
3014 _______EOF
3015         fi
3016
3017
3018         if test -n "$gint32"; then
3019           cat >>$outfile <<_______EOF
3020 typedef signed $gint32 gint32;
3021 typedef unsigned $gint32 guint32;
3022 #define G_GINT32_MODIFIER $gint32_modifier
3023 #define G_GINT32_FORMAT $gint32_format
3024 #define G_GUINT32_FORMAT $guint32_format
3025 _______EOF
3026         fi
3027
3028         cat >>$outfile <<_______EOF
3029 #define G_HAVE_GINT64 1          /* deprecated, always true */
3030
3031 ${glib_extension}typedef signed $gint64 gint64;
3032 ${glib_extension}typedef unsigned $gint64 guint64;
3033
3034 #define G_GINT64_CONSTANT(val)  $gint64_constant
3035 #define G_GUINT64_CONSTANT(val) $guint64_constant
3036 _______EOF
3037
3038         if test x$gint64_format != x ; then
3039           cat >>$outfile <<_______EOF
3040 #define G_GINT64_MODIFIER $gint64_modifier
3041 #define G_GINT64_FORMAT $gint64_format
3042 #define G_GUINT64_FORMAT $guint64_format
3043 _______EOF
3044         else
3045           cat >>$outfile <<_______EOF
3046 #undef G_GINT64_MODIFIER
3047 #undef G_GINT64_FORMAT
3048 #undef G_GUINT64_FORMAT
3049 _______EOF
3050         fi           
3051
3052         cat >>$outfile <<_______EOF
3053
3054 #define GLIB_SIZEOF_VOID_P $glib_void_p
3055 #define GLIB_SIZEOF_LONG   $glib_long
3056 #define GLIB_SIZEOF_SIZE_T $glib_size_t
3057
3058 _______EOF
3059
3060         cat >>$outfile <<_______EOF
3061 typedef signed $glib_size_type_define gssize;
3062 typedef unsigned $glib_size_type_define gsize;
3063 #define G_GSIZE_MODIFIER $gsize_modifier
3064 #define G_GSSIZE_FORMAT $gssize_format
3065 #define G_GSIZE_FORMAT $gsize_format
3066
3067 #define G_MAXSIZE       G_MAXU$glib_msize_type
3068 #define G_MINSSIZE      G_MIN$glib_msize_type
3069 #define G_MAXSSIZE      G_MAX$glib_msize_type
3070
3071 typedef gint64 goffset;
3072 #define G_MINOFFSET     G_MININT64
3073 #define G_MAXOFFSET     G_MAXINT64
3074
3075 #define G_GOFFSET_MODIFIER      G_GINT64_MODIFIER
3076 #define G_GOFFSET_FORMAT        G_GINT64_FORMAT
3077 #define G_GOFFSET_CONSTANT(val) G_GINT64_CONSTANT(val)
3078
3079 _______EOF
3080
3081         if test -z "$glib_unknown_void_p"; then
3082           cat >>$outfile <<_______EOF
3083
3084 #define GPOINTER_TO_INT(p)      ((gint)  ${glib_gpi_cast} (p))
3085 #define GPOINTER_TO_UINT(p)     ((guint) ${glib_gpui_cast} (p))
3086
3087 #define GINT_TO_POINTER(i)      ((gpointer) ${glib_gpi_cast} (i))
3088 #define GUINT_TO_POINTER(u)     ((gpointer) ${glib_gpui_cast} (u))
3089
3090 typedef signed $glib_intptr_type_define gintptr;
3091 typedef unsigned $glib_intptr_type_define guintptr;
3092
3093 #define G_GINTPTR_MODIFIER      $gintptr_modifier
3094 #define G_GINTPTR_FORMAT        $gintptr_format
3095 #define G_GUINTPTR_FORMAT       $guintptr_format
3096 _______EOF
3097         else
3098           echo '#error SIZEOF_VOID_P unknown - This should never happen' >>$outfile
3099         fi
3100
3101
3102
3103         cat >>$outfile <<_______EOF
3104 $glib_atexit
3105 $glib_memmove
3106 $glib_defines
3107 $glib_os
3108 $glib_static_compilation
3109
3110 $glib_vacopy
3111
3112 #ifdef  __cplusplus
3113 #define G_HAVE_INLINE   1
3114 #else   /* !__cplusplus */
3115 $glib_inline
3116 #endif  /* !__cplusplus */
3117
3118 #ifdef  __cplusplus
3119 #define G_CAN_INLINE    1
3120 _______EOF
3121
3122         if test x$g_can_inline = xyes ; then
3123                 cat >>$outfile <<_______EOF
3124 #else   /* !__cplusplus */
3125 #define G_CAN_INLINE    1
3126 _______EOF
3127         fi
3128
3129         cat >>$outfile <<_______EOF
3130 #endif
3131
3132 _______EOF
3133
3134         if test x$g_have_iso_c_varargs = xyes ; then
3135                 cat >>$outfile <<_______EOF
3136 #ifndef __cplusplus
3137 # define G_HAVE_ISO_VARARGS 1
3138 #endif
3139 _______EOF
3140         fi
3141         if test x$g_have_iso_cxx_varargs = xyes ; then
3142                 cat >>$outfile <<_______EOF
3143 #ifdef __cplusplus
3144 # define G_HAVE_ISO_VARARGS 1
3145 #endif
3146 _______EOF
3147         fi
3148         if test x$g_have_gnuc_varargs = xyes ; then
3149                 cat >>$outfile <<_______EOF
3150
3151 /* gcc-2.95.x supports both gnu style and ISO varargs, but if -ansi
3152  * is passed ISO vararg support is turned off, and there is no work
3153  * around to turn it on, so we unconditionally turn it off.
3154  */
3155 #if __GNUC__ == 2 && __GNUC_MINOR__ == 95
3156 #  undef G_HAVE_ISO_VARARGS
3157 #endif
3158
3159 #define G_HAVE_GNUC_VARARGS 1
3160 _______EOF
3161         fi
3162
3163         case x$g_stack_grows in
3164         xyes) echo "#define G_HAVE_GROWING_STACK 1" >>$outfile ;;
3165         *)    echo "#define G_HAVE_GROWING_STACK 0" >>$outfile ;;
3166         esac
3167
3168
3169         echo >>$outfile
3170         if test x$g_have_eilseq = xno; then
3171                 cat >>$outfile <<_______EOF
3172 #ifndef EILSEQ
3173 /* On some systems, like SunOS and NetBSD, EILSEQ is not defined.
3174  * The correspondence between this and the corresponding definition
3175  * in libiconv is essential.
3176  */
3177 #  define EILSEQ ENOENT
3178 #endif
3179 _______EOF
3180
3181         fi
3182
3183         if test x$g_have_gnuc_visibility = xyes; then
3184                 cat >>$outfile <<_______EOF
3185 #define G_HAVE_GNUC_VISIBILITY 1
3186 _______EOF
3187         fi
3188                 cat >>$outfile <<_______EOF
3189 #if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)
3190 #define G_GNUC_INTERNAL __attribute__((visibility("hidden")))
3191 #elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
3192 #define G_GNUC_INTERNAL __hidden
3193 #elif defined (__GNUC__) && defined (G_HAVE_GNUC_VISIBILITY)
3194 #define G_GNUC_INTERNAL __attribute__((visibility("hidden")))
3195 #else
3196 #define G_GNUC_INTERNAL
3197 #endif 
3198 _______EOF
3199
3200
3201         echo >>$outfile
3202         if test x$g_mutex_has_default = xyes; then
3203                 cat >>$outfile <<_______EOF
3204 $g_enable_threads_def G_THREADS_ENABLED
3205 #define G_THREADS_IMPL_$g_threads_impl_def
3206 typedef struct _GStaticMutex GStaticMutex;
3207 struct _GStaticMutex
3208 {
3209   struct _GMutex *runtime_mutex;
3210   union {
3211     char   pad[[$g_mutex_sizeof]];
3212     double dummy_double;
3213     void  *dummy_pointer;
3214     long   dummy_long;
3215   } static_mutex;
3216 };
3217 #define G_STATIC_MUTEX_INIT     { NULL, { { $g_mutex_contents} } }
3218 #define g_static_mutex_get_mutex(mutex) \\
3219   (g_thread_use_default_impl ? ((GMutex*)(gpointer) ((mutex)->static_mutex.pad)) : \\
3220    g_static_mutex_get_mutex_impl_shortcut (&((mutex)->runtime_mutex)))
3221 _______EOF
3222         else
3223                 cat >>$outfile <<_______EOF
3224 $g_enable_threads_def G_THREADS_ENABLED
3225 #define G_THREADS_IMPL_$g_threads_impl_def
3226 typedef struct _GMutex* GStaticMutex;
3227 #define G_STATIC_MUTEX_INIT NULL
3228 #define g_static_mutex_get_mutex(mutex) \\
3229   (g_static_mutex_get_mutex_impl_shortcut (mutex))
3230 _______EOF
3231         fi
3232
3233         cat >>$outfile <<_______EOF
3234 /* This represents a system thread as used by the implementation. An
3235  * alien implementaion, as loaded by g_thread_init can only count on
3236  * "sizeof (gpointer)" bytes to store their info. We however need more
3237  * for some of our native implementations. */
3238 typedef union _GSystemThread GSystemThread;
3239 union _GSystemThread
3240 {
3241   char   data[[$g_system_thread_sizeof]];
3242   double dummy_double;
3243   void  *dummy_pointer;
3244   long   dummy_long;
3245 };
3246 _______EOF
3247         if test x"$g_memory_barrier_needed" != xno; then
3248           echo >>$outfile
3249           echo "#define G_ATOMIC_OP_MEMORY_BARRIER_NEEDED 1" >>$outfile
3250         fi
3251         if test x"$g_gcc_atomic_ops" != xno; then
3252           echo >>$outfile
3253           echo "#define G_ATOMIC_OP_USE_GCC_BUILTINS 1" >>$outfile
3254         fi
3255         echo >>$outfile
3256         g_bit_sizes="16 32 64"
3257         for bits in $g_bit_sizes; do
3258           cat >>$outfile <<_______EOF
3259 #define GINT${bits}_TO_${g_bs_native}(val)      ((gint${bits}) (val))
3260 #define GUINT${bits}_TO_${g_bs_native}(val)     ((guint${bits}) (val))
3261 #define GINT${bits}_TO_${g_bs_alien}(val)       ((gint${bits}) GUINT${bits}_SWAP_LE_BE (val))
3262 #define GUINT${bits}_TO_${g_bs_alien}(val)      (GUINT${bits}_SWAP_LE_BE (val))
3263 _______EOF
3264         done
3265
3266         cat >>$outfile <<_______EOF
3267 #define GLONG_TO_LE(val)        ((glong) GINT${glongbits}_TO_LE (val))
3268 #define GULONG_TO_LE(val)       ((gulong) GUINT${glongbits}_TO_LE (val))
3269 #define GLONG_TO_BE(val)        ((glong) GINT${glongbits}_TO_BE (val))
3270 #define GULONG_TO_BE(val)       ((gulong) GUINT${glongbits}_TO_BE (val))
3271 #define GINT_TO_LE(val)         ((gint) GINT${gintbits}_TO_LE (val))
3272 #define GUINT_TO_LE(val)        ((guint) GUINT${gintbits}_TO_LE (val))
3273 #define GINT_TO_BE(val)         ((gint) GINT${gintbits}_TO_BE (val))
3274 #define GUINT_TO_BE(val)        ((guint) GUINT${gintbits}_TO_BE (val))
3275 #define GSIZE_TO_LE(val)        ((gsize) GUINT${gsizebits}_TO_LE (val))
3276 #define GSSIZE_TO_LE(val)       ((gssize) GINT${gsizebits}_TO_LE (val))
3277 #define GSIZE_TO_BE(val)        ((gsize) GUINT${gsizebits}_TO_BE (val))
3278 #define GSSIZE_TO_BE(val)       ((gssize) GINT${gsizebits}_TO_BE (val))
3279 #define G_BYTE_ORDER $g_byte_order
3280
3281 #define GLIB_SYSDEF_POLLIN =$g_pollin
3282 #define GLIB_SYSDEF_POLLOUT =$g_pollout
3283 #define GLIB_SYSDEF_POLLPRI =$g_pollpri
3284 #define GLIB_SYSDEF_POLLHUP =$g_pollhup
3285 #define GLIB_SYSDEF_POLLERR =$g_pollerr
3286 #define GLIB_SYSDEF_POLLNVAL =$g_pollnval
3287
3288 #define G_MODULE_SUFFIX "$g_module_suffix"
3289
3290 /* A GPid is an abstraction for a process "handle". It is *not* an
3291  * abstraction for a process identifier in general. GPid is used in
3292  * GLib only for descendant processes spawned with the g_spawn*
3293  * functions. On POSIX there is no "process handle" concept as such,
3294  * but on Windows a GPid is a handle to a process, a kind of pointer,
3295  * not a process identifier.
3296  */
3297 typedef $g_pid_type GPid;
3298
3299 #define GLIB_SYSDEF_AF_UNIX $g_af_unix
3300 #define GLIB_SYSDEF_AF_INET $g_af_inet
3301 #define GLIB_SYSDEF_AF_INET6 $g_af_inet6
3302
3303 #define GLIB_SYSDEF_MSG_OOB $g_msg_oob
3304 #define GLIB_SYSDEF_MSG_PEEK $g_msg_peek
3305 #define GLIB_SYSDEF_MSG_DONTROUTE $g_msg_dontroute
3306
3307 G_END_DECLS
3308
3309 #endif /* GLIBCONFIG_H */
3310 _______EOF
3311
3312
3313         if cmp -s $outfile glib/glibconfig.h; then
3314           AC_MSG_NOTICE([glib/glibconfig.h is unchanged])
3315           rm -f $outfile
3316         else
3317           mv $outfile glib/glibconfig.h
3318         fi
3319 ],[
3320
3321 # Note that if two cases are the same, case goes with the first one.
3322 # Note also that this is inside an AC_OUTPUT_COMMAND.  We do not depend
3323 # on variable expansion in case labels.  Look at the generated config.status
3324 # for a hint.
3325
3326 if test "x${ac_cv_working_alloca_h+set}" = xset ; then
3327   glib_header_alloca_h="$ac_cv_working_alloca_h"
3328 else
3329   glib_header_alloca_h="$ac_cv_header_alloca_h"
3330 fi
3331
3332 case xyes in
3333 x$ac_cv_header_float_h)
3334   glib_float_h=yes
3335   glib_mf=FLT_MIN glib_Mf=FLT_MAX
3336   glib_md=DBL_MIN glib_Md=DBL_MAX
3337   ;;
3338 x$ac_cv_header_values_h)
3339   glib_values_h=yes
3340   glib_mf=MINFLOAT  glib_Mf=MAXFLOAT
3341   glib_md=MINDOUBLE glib_Md=MAXDOUBLE
3342   ;;
3343 esac
3344
3345 case xyes in
3346 x$ac_cv_header_limits_h)
3347   glib_limits_h=yes
3348   glib_ms=SHRT_MIN glib_Ms=SHRT_MAX glib_Mus=USHRT_MAX
3349   glib_mi=INT_MIN  glib_Mi=INT_MAX  glib_Mui=UINT_MAX
3350   glib_ml=LONG_MIN glib_Ml=LONG_MAX glib_Mul=ULONG_MAX
3351   ;;
3352 x$ac_cv_header_values_h)
3353   glib_values_h=yes
3354   glib_ms=MINSHORT glib_Ms=MAXSHORT glib_Mus="(((gushort)G_MAXSHORT)*2+1)"
3355   glib_mi=MININT   glib_Mi=MAXINT   glib_Mui="(((guint)G_MAXINT)*2+1)"
3356   glib_ml=MINLONG  glib_Ml=MAXLONG  glib_Mul="(((gulong)G_MAXLONG)*2+1)"
3357   ;;
3358 esac
3359
3360 if test x$ac_cv_header_sys_poll_h = xyes ; then
3361   glib_sys_poll_h=yes
3362 fi
3363
3364 if test x$enable_included_printf = xyes ; then
3365   glib_included_printf=yes
3366 fi
3367
3368 case 2 in
3369 $ac_cv_sizeof_short)            
3370   gint16=short
3371   gint16_modifier='"h"'
3372   gint16_format='"hi"'
3373   guint16_format='"hu"'
3374   ;;
3375 $ac_cv_sizeof_int)              
3376   gint16=int
3377   gint16_modifier='""'
3378   gint16_format='"i"'
3379   guint16_format='"u"'
3380   ;;
3381 esac
3382 case 4 in
3383 $ac_cv_sizeof_short)            
3384   gint32=short
3385   gint32_modifier='"h"'
3386   gint32_format='"hi"'
3387   guint32_format='"hu"'
3388   ;;
3389 $ac_cv_sizeof_int)              
3390   gint32=int
3391   gint32_modifier='""'
3392   gint32_format='"i"'
3393   guint32_format='"u"'
3394   ;;
3395 $ac_cv_sizeof_long)             
3396   gint32=long
3397   gint32_modifier='"l"'
3398   gint32_format='"li"'
3399   guint32_format='"lu"'
3400   ;;
3401 esac
3402 case 8 in
3403 $ac_cv_sizeof_int)
3404   gint64=int
3405   gint64_modifier='""'
3406   gint64_format='"i"'
3407   guint64_format='"u"'
3408   glib_extension=
3409   gint64_constant='(val)'
3410   guint64_constant='(val)'
3411   ;;
3412 $ac_cv_sizeof_long)
3413   gint64=long
3414   gint64_modifier='"l"'
3415   gint64_format='"li"'
3416   guint64_format='"lu"'
3417   glib_extension=
3418   gint64_constant='(val##L)'
3419   guint64_constant='(val##UL)'
3420   ;;
3421 $ac_cv_sizeof_long_long)
3422   gint64='long long'
3423   if test -n "$glib_cv_long_long_format"; then
3424     gint64_modifier='"'$glib_cv_long_long_format'"'
3425     gint64_format='"'$glib_cv_long_long_format'i"'
3426     guint64_format='"'$glib_cv_long_long_format'u"'
3427   fi
3428   glib_extension='G_GNUC_EXTENSION '
3429   gint64_constant='(G_GNUC_EXTENSION (val##LL))'
3430   guint64_constant='(G_GNUC_EXTENSION (val##ULL))'
3431   ;;
3432 $ac_cv_sizeof___int64)
3433   gint64='__int64'
3434   if test -n "$glib_cv_long_long_format"; then
3435     gint64_modifier='"'$glib_cv_long_long_format'"'
3436     gint64_format='"'$glib_cv_long_long_format'i"'
3437     guint64_format='"'$glib_cv_long_long_format'u"'
3438   fi
3439   glib_extension=
3440   gint64_constant='(val##i64)'
3441   guint64_constant='(val##ui64)'
3442   ;;
3443 esac
3444 glib_size_t=$ac_cv_sizeof_size_t
3445 glib_size_type_define="$glib_size_type"
3446 glib_void_p=$ac_cv_sizeof_void_p
3447 glib_long=$ac_cv_sizeof_long
3448
3449 case "$glib_size_type" in
3450 short)
3451   gsize_modifier='"h"'
3452   gsize_format='"hu"'
3453   gssize_format='"hi"'
3454   glib_msize_type='SHRT'
3455   ;;
3456 int)
3457   gsize_modifier='""'
3458   gsize_format='"u"'
3459   gssize_format='"i"'
3460   glib_msize_type='INT'
3461   ;;
3462 long)
3463   gsize_modifier='"l"'
3464   gsize_format='"lu"'
3465   gssize_format='"li"'
3466   glib_msize_type='LONG'
3467   ;;
3468 "long long"|__int64)
3469   gsize_modifier='"I64"'
3470   gsize_format='"I64u"'
3471   gssize_format='"I64i"'
3472   glib_msize_type='INT64'
3473   ;;
3474 esac
3475
3476 gintbits=`expr $ac_cv_sizeof_int \* 8`
3477 glongbits=`expr $ac_cv_sizeof_long \* 8`
3478 gsizebits=`expr $ac_cv_sizeof_size_t \* 8`
3479
3480 case $ac_cv_sizeof_void_p in
3481 $ac_cv_sizeof_int)
3482   glib_intptr_type_define=int
3483   gintptr_modifier='""'
3484   gintptr_format='"i"'
3485   guintptr_format='"u"'
3486   glib_gpi_cast=''
3487   glib_gpui_cast=''
3488   ;;
3489 $ac_cv_sizeof_long)
3490   glib_intptr_type_define=long
3491   gintptr_modifier='"l"'
3492   gintptr_format='"li"'
3493   guintptr_format='"lu"'
3494   glib_gpi_cast='(glong)'
3495   glib_gpui_cast='(gulong)'
3496   ;;
3497 $ac_cv_sizeof_long_long)
3498   glib_intptr_type_define='long long'
3499   gintptr_modifier='"I64"'
3500   gintptr_format='"I64i"'
3501   guintptr_format='"I64u"'
3502   glib_gpi_cast='(gint64)'
3503   glib_gpui_cast='(guint64)'
3504   ;;
3505 $ac_cv_sizeof___int64)
3506   glib_intptr_type_define=__int64
3507   gintptr_modifier='"I64"'
3508   gintptr_format='"I64i"'
3509   guintptr_format='"I64u"'
3510   glib_gpi_cast='(gint64)'
3511   glib_gpui_cast='(guint64)'
3512   ;;
3513 *)
3514   glib_unknown_void_p=yes
3515   ;;
3516 esac
3517
3518
3519 case xyes in
3520 x$ac_cv_func_atexit)
3521   glib_atexit="
3522 #ifdef NeXT /* @#%@! NeXTStep */
3523 # define g_ATEXIT(proc) (!atexit (proc))
3524 #else
3525 # define g_ATEXIT(proc) (atexit (proc))
3526 #endif"
3527   ;;
3528 x$ac_cv_func_on_exit)
3529   glib_atexit="
3530 #define g_ATEXIT(proc)  (on_exit ((void (*)(int, void*))(proc), NULL))"
3531   ;;
3532 esac
3533
3534 case xyes in
3535 x$ac_cv_func_memmove)
3536   glib_memmove='
3537 #define g_memmove(dest,src,len) G_STMT_START { memmove ((dest), (src), (len)); } G_STMT_END'
3538   ;;
3539 x$glib_cv_working_bcopy)
3540   glib_memmove="
3541 /* memmove isn't available, but bcopy can copy overlapping memory regions */
3542 #define g_memmove(d,s,n) G_STMT_START { bcopy ((s), (d), (n)); } G_STMT_END"
3543   ;;
3544 *)  
3545   glib_memmove="
3546 /* memmove isn't found and bcopy can't copy overlapping memory regions, 
3547  * so we have to roll our own copy routine. */
3548 void g_memmove (void* dest, const void * src, unsigned long len);"
3549   ;;
3550 esac
3551
3552 glib_defines="
3553 #define GLIB_MAJOR_VERSION $GLIB_MAJOR_VERSION
3554 #define GLIB_MINOR_VERSION $GLIB_MINOR_VERSION
3555 #define GLIB_MICRO_VERSION $GLIB_MICRO_VERSION
3556 "
3557
3558 case xyes in
3559 x$glib_cv_va_copy)      glib_vacopy='#define G_VA_COPY  va_copy' ;;
3560 x$glib_cv___va_copy)    glib_vacopy='#define G_VA_COPY  __va_copy' ;;
3561 *)                      glib_vacopy=''
3562 esac
3563
3564 if test x$glib_cv_va_val_copy = xno; then
3565   glib_vacopy="\$glib_vacopy
3566 #define G_VA_COPY_AS_ARRAY 1"
3567 fi
3568
3569 if test x$glib_cv_hasinline = xyes; then
3570     glib_inline='#define G_HAVE_INLINE 1'
3571 fi
3572 if test x$glib_cv_has__inline = xyes; then
3573     glib_inline="\$glib_inline
3574 #define G_HAVE___INLINE 1"
3575 fi
3576 if test x$glib_cv_has__inline__ = xyes; then
3577     glib_inline="\$glib_inline
3578 #define G_HAVE___INLINE__ 1"
3579 fi
3580
3581 g_have_gnuc_varargs=$g_have_gnuc_varargs
3582 g_have_iso_c_varargs=$g_have_iso_c_varargs
3583 g_have_iso_cxx_varargs=$g_have_iso_cxx_varargs
3584
3585 g_can_inline=$g_can_inline
3586 g_have_gnuc_visibility=$g_have_gnuc_visibility
3587 g_have_sunstudio_visibility=$g_have_sunstudio_visibility
3588
3589 if test x$ac_cv_c_bigendian = xyes; then
3590   g_byte_order=G_BIG_ENDIAN
3591   g_bs_native=BE
3592   g_bs_alien=LE
3593 else
3594   g_byte_order=G_LITTLE_ENDIAN
3595   g_bs_native=LE
3596   g_bs_alien=BE
3597 fi
3598
3599 g_pollin=$glib_cv_value_POLLIN
3600 g_pollout=$glib_cv_value_POLLOUT
3601 g_pollpri=$glib_cv_value_POLLPRI
3602 g_pollhup=$glib_cv_value_POLLHUP
3603 g_pollerr=$glib_cv_value_POLLERR
3604 g_pollnval=$glib_cv_value_POLLNVAL
3605
3606 g_af_unix=$glib_cv_value_AF_UNIX
3607 g_af_inet=$glib_cv_value_AF_INET
3608 g_af_inet6=$glib_cv_value_AF_INET6
3609
3610 g_msg_peek=$glib_cv_value_MSG_PEEK
3611 g_msg_oob=$glib_cv_value_MSG_OOB
3612 g_msg_dontroute=$glib_cv_value_MSG_DONTROUTE
3613
3614 g_stack_grows=$glib_cv_stack_grows
3615
3616 g_have_eilseq=$have_eilseq
3617
3618 case x$have_threads in
3619 xno)    g_enable_threads_def="#undef";;
3620 *)      g_enable_threads_def="#define";;
3621 esac
3622
3623 g_threads_impl_def=$g_threads_impl
3624
3625 g_mutex_has_default="$mutex_has_default"
3626 g_mutex_sizeof="$glib_cv_sizeof_gmutex"
3627 g_system_thread_sizeof="$glib_cv_sizeof_system_thread"
3628 g_mutex_contents="$glib_cv_byte_contents_gmutex"
3629
3630 g_memory_barrier_needed="$glib_memory_barrier_needed"
3631 g_gcc_atomic_ops="$glib_cv_gcc_has_builtin_atomic_operations"
3632
3633 g_module_suffix="$glib_gmodule_suffix"
3634
3635 g_pid_type="$glib_pid_type"
3636 case $host in
3637   *-*-beos*)
3638     glib_os="#define G_OS_BEOS"
3639     ;;
3640   *-*-cygwin*)
3641     glib_os="#define G_OS_UNIX
3642 #define G_PLATFORM_WIN32
3643 #define G_WITH_CYGWIN"
3644     ;;
3645   *-*-mingw*)
3646     glib_os="#define G_OS_WIN32
3647 #define G_PLATFORM_WIN32"
3648     ;;
3649   *)
3650     glib_os="#define G_OS_UNIX"
3651     ;;
3652 esac
3653 glib_static_compilation=""
3654 if test x$glib_win32_static_compilation = xyes; then
3655   glib_static_compilation="#define GLIB_STATIC_COMPILATION 1
3656 #define GOBJECT_STATIC_COMPILATION 1"
3657 fi
3658 ])
3659
3660 # Check for libdbus1 - Optional - is only used in the GDBus test cases
3661 #
3662 # 1.2.14 required for dbus_message_set_serial
3663 PKG_CHECK_MODULES(DBUS1,
3664                   dbus-1 >= 1.2.14,
3665                   [AC_DEFINE(HAVE_DBUS1, 1, [Define if dbus-1 is available]) have_dbus1=yes],
3666                   have_dbus1=no)
3667 AC_SUBST(DBUS1_CFLAGS)
3668 AC_SUBST(DBUS1_LIBS)
3669 AM_CONDITIONAL(HAVE_DBUS1, [test "x$have_dbus1" = "xyes"])
3670
3671 dnl
3672 dnl Check for -Bsymbolic-functions linker flag used to avoid
3673 dnl intra-library PLT jumps, if available.
3674 dnl
3675
3676 AC_ARG_ENABLE(Bsymbolic,
3677               [AC_HELP_STRING([--disable-Bsymbolic],
3678                               [avoid linking with -Bsymbolic])],,
3679               [SAVED_LDFLAGS="${LDFLAGS}"
3680                AC_MSG_CHECKING([for -Bsymbolic-functions linker flag])
3681                LDFLAGS=-Wl,-Bsymbolic-functions
3682                AC_TRY_LINK([], [int main (void) { return 0; }],
3683                            AC_MSG_RESULT(yes)
3684                            enable_Bsymbolic=yes,
3685                            AC_MSG_RESULT(no)
3686                            enable_Bsymbolic=no)
3687                LDFLAGS="${SAVED_LDFLAGS}"])
3688
3689 if test "x${enable_Bsymbolic}" == "xyes"; then
3690   GLIB_LINK_FLAGS=-Wl,-Bsymbolic-functions
3691 fi
3692
3693 AC_SUBST(GLIB_LINK_FLAGS)
3694
3695 #
3696 # Define variables corresponding to the correct include paths to use for
3697 # in-tree building.
3698 #
3699
3700 # for config.h:
3701 config_h_INCLUDES='-I$(top_builddir)'
3702 AC_SUBST(config_h_INCLUDES)
3703
3704 # glib:
3705 #   config.h
3706 #   $(top_builddir)/glib: for glibconfig.h
3707 #   $(top_srcdir)/glib:   for glib.h
3708 #   $(top_srcdir):        for everything
3709 glib_INCLUDES='$(config_h_INCLUDES) -I$(top_builddir)/glib -I$(top_srcdir)/glib -I$(top_srcdir)'
3710 AC_SUBST(glib_INCLUDES)
3711
3712 # gthread:
3713 #   same as glib
3714 gthread_INCLUDES='$(glib_INCLUDES)'
3715 AC_SUBST(gthread_INCLUDES)
3716
3717 # gobject:
3718 #   same as gthread
3719 gobject_INCLUDES='$(gthread_INCLUDES)'
3720 AC_SUBST(gobject_INCLUDES)
3721
3722 # gmodule:
3723 #   glib includes
3724 #   $(top_srcdir)/gmodule: for gmodule.h
3725 gmodule_INCLUDES='$(glib_INCLUDES) -I$(top_srcdir)/gmodule'
3726 AC_SUBST(gmodule_INCLUDES)
3727
3728 # gio:
3729 #   same as gmodule
3730 gio_INCLUDES='$(gmodule_INCLUDES)'
3731 AC_SUBST(gio_INCLUDES)
3732
3733
3734 AC_CONFIG_FILES([
3735 glib-2.0.pc
3736 glib-2.0-uninstalled.pc
3737 gmodule-2.0.pc
3738 gmodule-export-2.0.pc
3739 gmodule-no-export-2.0.pc
3740 gmodule-2.0-uninstalled.pc
3741 gmodule-no-export-2.0-uninstalled.pc
3742 gthread-2.0.pc
3743 gthread-2.0-uninstalled.pc
3744 gobject-2.0.pc
3745 gobject-2.0-uninstalled.pc
3746 gio-2.0.pc
3747 gio-unix-2.0.pc
3748 gio-windows-2.0.pc
3749 gio-2.0-uninstalled.pc
3750 gio-unix-2.0-uninstalled.pc
3751 glib-zip
3752 glib-gettextize
3753 Makefile
3754 build/Makefile
3755 build/win32/Makefile
3756 build/win32/dirent/Makefile
3757 build/win32/vs9/Makefile
3758 build/win32/vs10/Makefile
3759 glib/Makefile
3760 glib/glib.stp
3761 glib/libcharset/Makefile
3762 glib/gnulib/Makefile
3763 glib/pcre/Makefile
3764 glib/update-pcre/Makefile
3765 glib/tests/Makefile
3766 gmodule/Makefile
3767 gmodule/gmoduleconf.h
3768 gobject/Makefile
3769 gobject/gobject.stp
3770 gobject/glib-mkenums
3771 gobject/tests/Makefile
3772 gthread/Makefile
3773 gthread/tests/Makefile
3774 gio/Makefile
3775 gio/gdbus-codegen/Makefile
3776 gio/gdbus-codegen/config.py
3777 gio/xdgmime/Makefile
3778 gio/inotify/Makefile
3779 gio/libasyncns/Makefile
3780 gio/fen/Makefile
3781 gio/fam/Makefile
3782 gio/win32/Makefile
3783 gio/tests/Makefile
3784 gio/tests/gdbus-object-manager-example/Makefile
3785 po/Makefile.in
3786 docs/Makefile
3787 docs/reference/Makefile
3788 docs/reference/glib/Makefile
3789 docs/reference/glib/version.xml
3790 docs/reference/gobject/Makefile
3791 docs/reference/gobject/version.xml
3792 docs/reference/gio/Makefile
3793 docs/reference/gio/gdbus-object-manager-example/Makefile
3794 docs/reference/gio/version.xml
3795 tests/Makefile
3796 tests/gobject/Makefile
3797 tests/refcount/Makefile
3798 m4macros/Makefile
3799 ])
3800
3801 AC_CONFIG_COMMANDS([chmod-scripts],
3802 [chmod 0755 glib-zip
3803 chmod 0755 glib-gettextize
3804 chmod 0755 gobject/glib-mkenums])
3805
3806 # we want to invoke this macro solely so that the config.status script
3807 # and automake generated makefiles know about these generated files.
3808 # They are only needed to distcheck the package
3809 if false; then
3810   AC_CONFIG_FILES([
3811     INSTALL
3812     README
3813     config.h.win32
3814     glib/glibconfig.h.win32
3815     glib/makefile.msc
3816     glib/glib.rc
3817     gmodule/makefile.msc
3818     gmodule/gmodule.rc
3819     gobject/makefile.msc
3820     gobject/gobject.rc
3821     gthread/makefile.msc
3822     gthread/gthread.rc
3823     gio/gio.rc
3824     tests/makefile.msc
3825   ])
3826 fi
3827
3828 AC_OUTPUT