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