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