gatomic: introduce G_ATOMIC_LOCK_FREE
[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 if test "$glib_native_win32" = "yes"; then
516   if test x$enable_static = xyes -a x$enable_shared = xyes; then
517     AC_MSG_ERROR([Can not build both shared and static at the same time on Windows.])
518   fi
519   if test x$enable_static = xyes; then
520     glib_win32_static_compilation=yes
521     GLIB_WIN32_STATIC_COMPILATION_DEFINE="#define GLIB_STATIC_COMPILATION 1
522 #define GOBJECT_STATIC_COMPILATION 1"
523     AC_SUBST(GLIB_WIN32_STATIC_COMPILATION_DEFINE)
524   fi
525 fi
526 AM_CONDITIONAL(OS_WIN32_AND_DLL_COMPILATION, [test x$glib_native_win32 = xyes -a x$glib_win32_static_compilation != xyes])
527
528 dnl
529 dnl DU4 native cc currently needs -std1 for ANSI mode (instead of K&R)
530 dnl
531 if test $cross_compiling != yes ; then
532     AC_MSG_CHECKING([for extra flags to get ANSI library prototypes])
533     glib_save_LIBS=$LIBS
534     LIBS="$LIBS -lm"
535     AC_TRY_RUN([#include <math.h>
536                  int main (void) { return (log(1) != log(1.)); }],
537          AC_MSG_RESULT(none needed),
538          glib_save_CFLAGS=$CFLAGS
539          CFLAGS="$CFLAGS -std1"
540          AC_TRY_RUN([#include <math.h>
541                      int main (void) { return (log(1) != log(1.)); }],
542              AC_MSG_RESULT(-std1),
543              AC_MSG_RESULT()
544              CFLAGS=$glib_save_CFLAGS
545              AC_MSG_WARN(
546                     [No ANSI prototypes found in library. (-std1 didn't work.)])
547          )
548     )
549     LIBS=$glib_save_LIBS
550 fi
551
552 dnl NeXTStep cc seems to need this
553 AC_MSG_CHECKING([for extra flags for POSIX compliance])
554 AC_TRY_COMPILE([#include <dirent.h>], [DIR *dir;],
555   AC_MSG_RESULT(none needed),
556   glib_save_CFLAGS=$CFLAGS
557   CFLAGS="$CFLAGS -posix"
558   AC_TRY_COMPILE([#include <dirent.h>], [DIR *dir;],
559     AC_MSG_RESULT(-posix),
560     AC_MSG_RESULT()
561     CFLAGS=$glib_save_CFLAGS
562     AC_MSG_WARN([Could not determine POSIX flag. (-posix didn't work.)])))
563
564 # Checks for header files.
565 AC_HEADER_STDC
566
567 # Checks for library functions.
568 AC_FUNC_VPRINTF
569 AC_FUNC_ALLOCA
570 AC_CHECK_FUNCS(mmap posix_memalign memalign valloc fsync pipe2)
571 AC_CHECK_FUNCS(atexit on_exit timegm gmtime_r)
572
573 dnl don't use AC_CHECK_FUNCS here, otherwise HAVE_QSORT_R will
574 dnl be automatically defined, which we don't want to do
575 dnl until we have checked this function is actually usable
576 AC_CHECK_FUNC([qsort_r])
577
578 # BSD has a qsort_r with wrong argument order
579 if test x$ac_cv_func_qsort_r = xyes ; then
580   AC_CACHE_CHECK([if qsort_r uses glibc compatible argument order], glib_cv_have_qsort_r, [
581   AC_RUN_IFELSE([AC_LANG_SOURCE([[
582   #define _GNU_SOURCE
583   #include <stdlib.h>
584
585   static int
586   cmp (const void *a, const void *b, void *c)
587   {
588     const int *ia = a;
589     const int *ib = b;
590
591     if (*ia < *ib)
592       return -1;
593     else if (*ia > *ib)
594       return 1;
595     else
596       return 0;
597   }
598
599   int
600   main (int argc, char **argv)
601   {
602     int arr[3] = { 1, 2, 0 };
603     int d = 3;
604
605     qsort_r (arr, 3, sizeof (int), cmp, &d);
606
607     if (arr[0] == 0 && arr[1] == 1 && arr[2] == 2)
608       return 0;
609     else
610       return 1;
611   }]])],[glib_cv_have_qsort_r=yes],[glib_cv_have_qsort_r=no])])
612 fi
613
614 if test x$glib_cv_have_qsort_r = xyes ; then
615   AC_DEFINE(HAVE_QSORT_R, 1, [Define to 1 if you have the 'qsort_r' function])
616 fi
617
618 AC_CHECK_SIZEOF(char)
619 AC_CHECK_SIZEOF(short)
620 AC_CHECK_SIZEOF(long)
621 AC_CHECK_SIZEOF(int)
622 AC_CHECK_SIZEOF(void *)
623 AC_CHECK_SIZEOF(long long)
624 AC_CHECK_SIZEOF(__int64)
625
626 if test x$ac_cv_sizeof_long = x8 || test x$ac_cv_sizeof_long_long = x8 || test x$ac_cv_sizeof___int64 = x8 ; then
627   :
628 else
629   AC_MSG_ERROR([
630 *** GLib requires a 64 bit type. You might want to consider
631 *** using the GNU C compiler.
632 ])
633 fi
634
635 if test x$glib_native_win32 != xyes && test x$ac_cv_sizeof_long_long = x8; then
636         # long long is a 64 bit integer.
637         AC_MSG_CHECKING(for format to printf and scanf a guint64)
638         AC_CACHE_VAL(glib_cv_long_long_format,[
639                 for format in ll q I64; do
640                   AC_TRY_RUN([#include <stdio.h>  
641                         int main()
642                         {
643                           long long b, a = -0x3AFAFAFAFAFAFAFALL;
644                           char buffer[1000];
645                           sprintf (buffer, "%${format}u", a);
646                           sscanf (buffer, "%${format}u", &b);
647                           exit (b!=a);
648                         }
649                         ],
650                         [glib_cv_long_long_format=${format}
651                         break],
652                         [],[:])
653                 done])
654         if test -n "$glib_cv_long_long_format"; then
655           AC_MSG_RESULT(%${glib_cv_long_long_format}u)
656           AC_DEFINE(HAVE_LONG_LONG_FORMAT,1,[define if system printf can print long long])
657           if test x"$glib_cv_long_long_format" = xI64; then
658             AC_DEFINE(HAVE_INT64_AND_I64,1,[define to support printing 64-bit integers with format I64])
659           fi
660         else
661           AC_MSG_RESULT(none)
662         fi
663 elif test x$ac_cv_sizeof___int64 = x8; then
664         # __int64 is a 64 bit integer.
665         AC_MSG_CHECKING(for format to printf and scanf a guint64)
666         # We know this is MSVCRT.DLL, and what the formats are
667         glib_cv_long_long_format=I64
668         AC_MSG_RESULT(%${glib_cv_long_long_format}u)
669         AC_DEFINE(HAVE_LONG_LONG_FORMAT,1,[define if system printf can print long long])
670         AC_DEFINE(HAVE_INT64_AND_I64,1,[define to support printing 64-bit integers with format I64])
671 fi
672
673 dnl long doubles were not used, and a portability problem
674 dnl AC_C_LONG_DOUBLE
675 AC_C_CONST
676
677 dnl ok, here we try to check whether the systems prototypes for
678 dnl malloc and friends actually match the prototypes provided
679 dnl by gmem.h (keep in sync). i currently only know how to check
680 dnl this reliably with gcc (-Werror), improvements for other
681 dnl compilers are apprechiated.
682 SANE_MALLOC_PROTOS=no
683 AC_MSG_CHECKING([if malloc() and friends prototypes are gmem.h compatible])
684 glib_save_CFLAGS=$CFLAGS
685 if test "x$GCC" = "xyes"; then
686   CFLAGS="$CFLAGS -Werror"
687   AC_TRY_COMPILE([#include <stdlib.h>], [
688     void* (*my_calloc_p)  (size_t, size_t) = calloc;
689     void* (*my_malloc_p)  (size_t)         = malloc;
690     void  (*my_free_p)    (void*)          = free;
691     void* (*my_realloc_p) (void*, size_t)  = realloc;
692     my_calloc_p = 0;
693     my_malloc_p = 0;
694     my_free_p = 0;
695     my_realloc_p = 0;
696   ],
697     AC_DEFINE(SANE_MALLOC_PROTOS, 1, 
698       [Define if you have correct malloc prototypes])
699     SANE_MALLOC_PROTOS=yes)
700 fi
701 AC_MSG_RESULT($SANE_MALLOC_PROTOS)
702 CFLAGS=$glib_save_CFLAGS
703
704 dnl
705 dnl check in which direction the stack grows
706 dnl
707 AC_CACHE_CHECK([for growing stack pointer],glib_cv_stack_grows,[
708         AC_TRY_RUN([
709         volatile int *a = 0, *b = 0;
710         void foo (void);
711         int main () { volatile int y = 7; a = &y; foo (); return b > a; }
712         void foo (void) { volatile int x = 5; b = &x; }
713         ],
714         glib_cv_stack_grows=no
715         ,
716         glib_cv_stack_grows=yes
717         ,)
718 ])
719
720 dnl AC_C_INLINE is useless to us since it bails out too early, we need to
721 dnl truely know which ones of `inline', `__inline' and `__inline__' are
722 dnl actually supported.
723 AC_CACHE_CHECK([for __inline],glib_cv_has__inline,[
724         AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
725         __inline int foo () { return 0; }
726         int main () { return foo (); }
727         ]])],
728         glib_cv_has__inline=yes
729         ,
730         glib_cv_has__inline=no
731         ,)
732 ])
733 case x$glib_cv_has__inline in
734 xyes) AC_DEFINE(G_HAVE___INLINE,1,[Have __inline keyword])
735 esac
736 AC_CACHE_CHECK([for __inline__],glib_cv_has__inline__,[
737         AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
738         __inline__ int foo () { return 0; }
739         int main () { return foo (); }
740         ]])],
741         glib_cv_has__inline__=yes
742         ,
743         glib_cv_has__inline__=no
744         ,)
745 ])
746 case x$glib_cv_has__inline__ in
747 xyes) AC_DEFINE(G_HAVE___INLINE__,1,[Have __inline__ keyword])
748 esac
749 AC_CACHE_CHECK([for inline], glib_cv_hasinline,[
750         AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
751         #undef inline
752         inline int foo () { return 0; }
753         int main () { return foo (); }
754         ]])],
755         glib_cv_hasinline=yes
756         ,
757         glib_cv_hasinline=no
758         ,)
759 ])
760 case x$glib_cv_hasinline in
761 xyes) AC_DEFINE(G_HAVE_INLINE,1,[Have inline keyword])
762 esac
763
764 # if we can use inline functions in headers
765 AC_MSG_CHECKING(if inline functions in headers work)
766 AC_LINK_IFELSE([AC_LANG_SOURCE([[
767 #if defined (G_HAVE_INLINE) && defined (__GNUC__) && defined (__STRICT_ANSI__)
768 #  undef inline
769 #  define inline __inline__
770 #elif !defined (G_HAVE_INLINE)
771 #  undef inline
772 #  if defined (G_HAVE___INLINE__)
773 #    define inline __inline__
774 #  elif defined (G_HAVE___INLINE)
775 #    define inline __inline
776 #  endif
777 #endif
778
779 int glib_test_func2 (int);
780
781 static inline int
782 glib_test_func1 (void) {
783   return glib_test_func2 (1);
784 }
785
786 int
787 main (void) {
788   int i = 1;
789 }]])],[g_can_inline=yes],[g_can_inline=no])
790 AC_MSG_RESULT($g_can_inline)
791
792 dnl *** check for working do while(0) macros ***
793 AC_CACHE_CHECK([for working do while(0) macros], g_cv_support_dowhile_macros, [
794         AC_TRY_COMPILE([],[
795         #define STMT_START do
796         #define STMT_END while(0)
797         #define STMT_TEST STMT_START { i = 0; } STMT_END
798         int main(void) { int i = 1; STMT_TEST; return i; }],
799         [g_cv_support_dowhile_macros=yes],
800         [g_cv_support_dowhile_macros=no],
801         [g_cv_support_dowhile_macros=yes])
802 ])
803 if test x$g_cv_support_dowhile_macros = xyes; then
804   AC_DEFINE(HAVE_DOWHILE_MACROS, 1, [define for working do while(0) macros])
805 fi
806
807 # check for flavours of varargs macros
808 AC_MSG_CHECKING(for ISO C99 varargs macros in C)
809 AC_TRY_COMPILE([],[
810 int a(int p1, int p2, int p3);
811 #define call_a(...) a(1,__VA_ARGS__)
812 call_a(2,3);
813 ],g_have_iso_c_varargs=yes,g_have_iso_c_varargs=no)
814 AC_MSG_RESULT($g_have_iso_c_varargs)
815
816 AC_MSG_CHECKING(for ISO C99 varargs macros in C++)
817 if test "$CXX" = ""; then
818 dnl No C++ compiler
819   g_have_iso_cxx_varargs=no
820 else
821   AC_LANG_CPLUSPLUS
822   AC_TRY_COMPILE([],[
823 int a(int p1, int p2, int p3);
824 #define call_a(...) a(1,__VA_ARGS__)
825 call_a(2,3);
826 ],g_have_iso_cxx_varargs=yes,g_have_iso_cxx_varargs=no)
827   AC_LANG_C
828 fi
829 AC_MSG_RESULT($g_have_iso_cxx_varargs)
830
831 AC_MSG_CHECKING(for GNUC varargs macros)
832 AC_TRY_COMPILE([],[
833 int a(int p1, int p2, int p3);
834 #define call_a(params...) a(1,params)
835 call_a(2,3);
836 ],g_have_gnuc_varargs=yes,g_have_gnuc_varargs=no)
837 AC_MSG_RESULT($g_have_gnuc_varargs)
838
839 # check for GNUC visibility support
840 AC_MSG_CHECKING(for GNUC visibility attribute)
841 GLIB_CHECK_COMPILE_WARNINGS([AC_LANG_SOURCE([[
842 void
843 __attribute__ ((visibility ("hidden")))
844      f_hidden (void)
845 {
846 }
847 void
848 __attribute__ ((visibility ("internal")))
849      f_internal (void)
850 {
851 }
852 void
853 __attribute__ ((visibility ("protected")))
854      f_protected (void)
855 {
856 }
857 void
858 __attribute__ ((visibility ("default")))
859      f_default (void)
860 {
861 }
862 int main (int argc, char **argv)
863 {
864         f_hidden();
865         f_internal();
866         f_protected();
867         f_default();
868         return 0;
869 }
870 ]])],g_have_gnuc_visibility=yes,g_have_gnuc_visibility=no)
871 AC_MSG_RESULT($g_have_gnuc_visibility)
872 AM_CONDITIONAL(HAVE_GNUC_VISIBILITY, [test x$g_have_gnuc_visibility = xyes])
873
874 AC_MSG_CHECKING([whether using Sun Studio C compiler])
875 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#if defined(__SUNPRO_C) || (__SUNPRO_C >= 0x550)
876 #else
877 # include "error: this is not Sun Studio."
878 #endif
879 ]], [[]])], [ g_have_sunstudio_visibility=yes ], [ g_have_sunstudio_visibility=no ])
880 AC_MSG_RESULT($g_have_sunstudio_visibility)
881 AM_CONDITIONAL(HAVE_SUNSTUDIO_VISIBILITY, [test x$g_have_sunstudio_visibility = xyes])
882
883 # check for bytesex stuff
884 AC_C_BIGENDIAN
885 if test x$ac_cv_c_bigendian = xuniversal ; then
886 AC_TRY_COMPILE([#include <endian.h>], [#if __BYTE_ORDER == __BIG_ENDIAN
887 #else
888 #error Not a big endian. 
889 #endif],
890     ac_cv_c_bigendian=yes
891     ,AC_TRY_COMPILE([#include <endian.h>], [#if __BYTE_ORDER == __LITTLE_ENDIAN
892 #else
893 #error Not a little endian. 
894 #endif],
895     ac_cv_c_bigendian=no
896     ,AC_MSG_WARN([Could not determine endianness.])))
897 fi
898
899
900 # check for header files
901 AC_CHECK_HEADERS([dirent.h float.h limits.h pwd.h grp.h sys/param.h sys/poll.h sys/resource.h])
902 AC_CHECK_HEADERS([sys/time.h sys/times.h sys/wait.h unistd.h values.h])
903 AC_CHECK_HEADERS([sys/select.h sys/types.h stdint.h inttypes.h sched.h malloc.h])
904 AC_CHECK_HEADERS([sys/vfs.h sys/mount.h sys/vmount.h sys/statfs.h sys/statvfs.h])
905 AC_CHECK_HEADERS([mntent.h sys/mnttab.h sys/vfstab.h sys/mntctl.h sys/sysctl.h fstab.h])
906 AC_CHECK_HEADERS([sys/uio.h sys/mkdev.h])
907 AC_CHECK_HEADERS([linux/magic.h])
908 AC_CHECK_HEADERS([sys/prctl.h])
909
910 # check for structure fields
911 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])
912 AC_CHECK_MEMBERS([struct stat.st_blksize, struct stat.st_blocks, struct statfs.f_fstypename, struct statfs.f_bavail],,, [#include <sys/types.h>
913 #include <sys/stat.h>
914 #include <unistd.h>
915 #ifdef HAVE_SYS_STATFS_H
916 #include <sys/statfs.h>
917 #endif
918 #ifdef HAVE_SYS_PARAM_H
919 #include <sys/param.h>
920 #endif
921 #ifdef HAVE_SYS_MOUNT_H
922 #include <sys/mount.h>
923 #endif])
924 # struct statvfs.f_basetype is available on Solaris but not for Linux. 
925 AC_CHECK_MEMBERS([struct statvfs.f_basetype],,, [#include <sys/statvfs.h>])
926 AC_CHECK_MEMBERS([struct statvfs.f_fstypename],,, [#include <sys/statvfs.h>])
927 AC_CHECK_MEMBERS([struct tm.tm_gmtoff, struct tm.__tm_gmtoff],,,[#include <time.h>])
928
929 # Checks for libcharset
930 AM_LANGINFO_CODESET
931 AC_CHECK_HEADERS([stddef.h stdlib.h string.h])
932 AC_CHECK_FUNCS(setlocale)
933
934 # check additional type sizes
935 AC_CHECK_SIZEOF(size_t)
936
937 dnl Try to figure out whether gsize, gssize should be long or int
938 AC_MSG_CHECKING([for the appropriate definition for size_t])
939
940 case $ac_cv_sizeof_size_t in
941   $ac_cv_sizeof_short) 
942       glib_size_type=short
943       ;;
944   $ac_cv_sizeof_int) 
945       glib_size_type=int
946       ;;
947   $ac_cv_sizeof_long) 
948       glib_size_type=long
949       ;;
950   $ac_cv_sizeof_long_long)
951       glib_size_type='long long'
952       ;;
953   $ac_cv_sizeof__int64)
954       glib_size_type='__int64'
955       ;;
956   *)  AC_MSG_ERROR([No type matching size_t in size])
957       ;;
958 esac
959
960 dnl If int/long are the same size, we see which one produces
961 dnl warnings when used in the location as size_t. (This matters
962 dnl on AIX with xlc)
963 dnl
964 if test $ac_cv_sizeof_size_t = $ac_cv_sizeof_int &&
965    test $ac_cv_sizeof_size_t = $ac_cv_sizeof_long ; then
966   GLIB_CHECK_COMPILE_WARNINGS([AC_LANG_SOURCE([[
967 #if defined(_AIX) && !defined(__GNUC__)
968 #pragma options langlvl=stdc89
969 #endif
970 #include <stddef.h> 
971 int main ()
972 {
973   size_t s = 1;
974   unsigned int *size_int = &s;
975   return (int)*size_int;
976 }
977     ]])],glib_size_type=int,
978       [GLIB_CHECK_COMPILE_WARNINGS([AC_LANG_SOURCE([[
979 #if defined(_AIX) && !defined(__GNUC__)
980 #pragma options langlvl=stdc89
981 #endif
982 #include <stddef.h> 
983 int main ()
984 {
985    size_t s = 1;
986    unsigned long *size_long = &s;
987    return (int)*size_long;
988 }
989         ]])],glib_size_type=long)])
990 fi
991
992 AC_MSG_RESULT(unsigned $glib_size_type)
993
994 # Check for some functions
995 AC_CHECK_FUNCS(lstat strerror strsignal memmove vsnprintf stpcpy strcasecmp strncasecmp poll getcwd vasprintf setenv unsetenv getc_unlocked readlink symlink fdwalk memmem)
996 AC_CHECK_FUNCS(chown lchmod lchown fchmod fchown link utimes getgrgid getpwuid)
997 AC_CHECK_FUNCS(getmntent_r setmntent endmntent hasmntopt getfsstat getvfsstat)
998 # Check for high-resolution sleep functions
999 AC_CHECK_FUNCS(splice)
1000 AC_CHECK_FUNCS(prlimit)
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 if <sys/select.h> needs to be included for fd_set
1236 AC_MSG_CHECKING([for fd_set])
1237 AC_TRY_COMPILE([#include <sys/types.h>],
1238         [fd_set readMask, writeMask;], gtk_ok=yes, gtk_ok=no)
1239 if test "$gtk_ok" = "yes"; then
1240     AC_MSG_RESULT([yes, found in sys/types.h])
1241 else
1242     AC_EGREP_HEADER(fd_set, sys/select.h, gtk_ok=yes)
1243     if test "$gtk_ok" = "yes"; then
1244         # *** FIXME: give it a different name
1245         AC_DEFINE(HAVE_SYS_SELECT_H,1,[found fd_set in sys/select.h])
1246         AC_MSG_RESULT([yes, found in sys/select.h])
1247     else
1248         AC_DEFINE(NO_FD_SET,1,[didn't find fd_set])
1249         AC_MSG_RESULT(no)
1250     fi
1251 fi
1252
1253 dnl *** check for sane realloc() ***
1254 AC_CACHE_CHECK([whether realloc (NULL,) will work],glib_cv_sane_realloc,[
1255         AC_TRY_RUN([#include <stdlib.h>
1256         int main() {
1257           return realloc (0, sizeof (int)) == 0;
1258         }],
1259         [glib_cv_sane_realloc=yes],
1260         [glib_cv_sane_realloc=no],
1261         [glib_cv_sane_realloc=yes])
1262 ])
1263 if test x$glib_cv_sane_realloc = xyes; then
1264   AC_DEFINE(REALLOC_0_WORKS,1,[whether realloc (NULL,) works])
1265 fi
1266
1267 dnl Check for nl_langinfo and CODESET
1268 AC_CACHE_CHECK([for nl_langinfo (CODESET)],glib_cv_langinfo_codeset,[
1269         AC_TRY_COMPILE([#include <langinfo.h>],
1270                 [char *codeset = nl_langinfo (CODESET);],
1271                 [glib_cv_langinfo_codeset=yes],
1272                 [glib_cv_langinfo_codeset=no])])
1273 if test x$glib_cv_langinfo_codeset = xyes; then
1274   AC_DEFINE(HAVE_CODESET,1,[Have nl_langinfo (CODESET)])
1275 fi
1276
1277 dnl Check for nl_langinfo and LC_TIME parts that are needed in gdatetime.c
1278 AC_CACHE_CHECK([for nl_langinfo (PM_STR)],glib_cv_langinfo_time,[
1279         AC_TRY_COMPILE([#include <langinfo.h>],
1280                 [char *str;
1281                  str = nl_langinfo (PM_STR);
1282                  str = nl_langinfo (D_T_FMT);
1283                  str = nl_langinfo (D_FMT);
1284                  str = nl_langinfo (T_FMT);
1285                  str = nl_langinfo (T_FMT_AMPM);
1286                  str = nl_langinfo (MON_1);
1287                  str = nl_langinfo (ABMON_12);
1288                  str = nl_langinfo (DAY_1);
1289                  str = nl_langinfo (ABDAY_7);],
1290                 [glib_cv_langinfo_time=yes],
1291                 [glib_cv_langinfo_time=no])])
1292 if test x$glib_cv_langinfo_time = xyes; then
1293   AC_DEFINE(HAVE_LANGINFO_TIME,1,[Have nl_langinfo (PM_STR)])
1294 fi
1295
1296 dnl Check for nl_langinfo and _NL_CTYPE_OUTDIGITn_WC
1297 AC_CACHE_CHECK([for nl_langinfo (_NL_CTYPE_OUTDIGITn_WC)], glib_cv_langinfo_outdigit,[
1298         AC_TRY_COMPILE([#include <langinfo.h>],
1299                 [char *str;
1300                  str = nl_langinfo (_NL_CTYPE_OUTDIGIT0_WC);
1301                  str = nl_langinfo (_NL_CTYPE_OUTDIGIT1_WC);
1302                  str = nl_langinfo (_NL_CTYPE_OUTDIGIT2_WC);
1303                  str = nl_langinfo (_NL_CTYPE_OUTDIGIT3_WC);
1304                  str = nl_langinfo (_NL_CTYPE_OUTDIGIT4_WC);
1305                  str = nl_langinfo (_NL_CTYPE_OUTDIGIT5_WC);
1306                  str = nl_langinfo (_NL_CTYPE_OUTDIGIT6_WC);
1307                  str = nl_langinfo (_NL_CTYPE_OUTDIGIT7_WC);
1308                  str = nl_langinfo (_NL_CTYPE_OUTDIGIT8_WC);
1309                  str = nl_langinfo (_NL_CTYPE_OUTDIGIT9_WC);],
1310                 [glib_cv_langinfo_outdigit=yes],
1311                 [glib_cv_langinfo_outdigit=no])])
1312 if test x$glib_cv_langinfo_outdigit = xyes; then
1313   AC_DEFINE(HAVE_LANGINFO_OUTDIGIT,1,[Have nl_langinfo (_NL_CTYPE_OUTDIGITn_WC)])
1314 fi
1315
1316 dnl ****************************************
1317 dnl *** posix_memalign                   ***
1318 dnl ****************************************
1319 AC_MSG_CHECKING(for a compliant posix_memalign() implementation)
1320 AC_CACHE_VAL(glib_cv_compliant_posix_memalign,[
1321     glib_cv_compliant_posix_memalign=0
1322     if test "$ac_cv_func_posix_memalign" = "yes" ; then
1323         AC_TRY_RUN([
1324                 #define _XOPEN_SOURCE 600
1325                 #include <stdlib.h> /* posix_memalign() should be defined here */
1326                 /* some systems break if #include <malloc.h> used */
1327                 static void test_memalign (size_t boundary, size_t size) {
1328                     void *mem = 0;
1329                     if (posix_memalign (&mem, boundary, size) != 0 || !mem)
1330                         exit (1);
1331                     else
1332                       free (mem);
1333                 }
1334                 int main() {
1335                     test_memalign (  128,   128 - 2 * sizeof (void*));
1336                     test_memalign (  256,   256 - 2 * sizeof (void*));
1337                     test_memalign (  512,   512 - 2 * sizeof (void*));
1338                     test_memalign ( 1024,  1024 - 2 * sizeof (void*));
1339                     test_memalign ( 2048,  2048 - 2 * sizeof (void*));
1340                     test_memalign ( 4096,  4096 - 2 * sizeof (void*));
1341                     test_memalign ( 8192,  8192 - 2 * sizeof (void*));
1342                     test_memalign (16384, 16384 - 2 * sizeof (void*));
1343                     test_memalign (32768, 32768 - 2 * sizeof (void*));
1344                     exit (0); /* success */
1345                 }
1346                 ],
1347             [glib_cv_compliant_posix_memalign=1], [], [:])
1348       :
1349     fi
1350     ])
1351 if test "$glib_cv_compliant_posix_memalign" = "1"; then
1352     AC_MSG_RESULT(yes)
1353     AC_DEFINE(POSIX_MEMALIGN_WITH_COMPLIANT_ALLOCS, 1, [define if posix_memalign() can allocate any size])
1354 else
1355     AC_MSG_RESULT(no)
1356 fi
1357
1358
1359 dnl ****************************************
1360 dnl *** strlcpy/strlcat                  ***
1361 dnl ****************************************
1362 # Check for strlcpy
1363 AC_CACHE_CHECK([for OpenBSD strlcpy/strlcat],glib_cv_have_strlcpy,[
1364 AC_TRY_RUN([#include <stdlib.h>
1365 #include <string.h>
1366 int main() {
1367   char p[10];
1368   (void) strlcpy (p, "hi", 10);
1369   if (strlcat (p, "bye", 0) != 3) 
1370     return 1;
1371   return 0;
1372 }], glib_cv_have_strlcpy=yes, 
1373     glib_cv_have_strlcpy=no,
1374     glib_cv_have_strlcpy=no)])
1375 if test "$glib_cv_have_strlcpy" = "yes"; then
1376     AC_DEFINE(HAVE_STRLCPY,1,[Have functions strlcpy and strlcat])
1377 fi
1378   
1379
1380 dnl **********************
1381 dnl *** va_copy checks ***
1382 dnl **********************
1383 dnl we currently check for all three va_copy possibilities, so we get
1384 dnl all results in config.log for bug reports.
1385 AC_CACHE_CHECK([for an implementation of va_copy()],glib_cv_va_copy,[
1386         AC_LINK_IFELSE([AC_LANG_SOURCE([[#include <stdarg.h>
1387 #include <stdlib.h>
1388         void f (int i, ...) {
1389         va_list args1, args2;
1390         va_start (args1, i);
1391         va_copy (args2, args1);
1392         if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
1393           exit (1);
1394         va_end (args1); va_end (args2);
1395         }
1396         int main() {
1397           f (0, 42);
1398           return 0;
1399         }]])],
1400         [glib_cv_va_copy=yes],
1401         [glib_cv_va_copy=no])
1402 ])
1403 AC_CACHE_CHECK([for an implementation of __va_copy()],glib_cv___va_copy,[
1404         AC_LINK_IFELSE([AC_LANG_SOURCE([[#include <stdarg.h>
1405 #include <stdlib.h>
1406         void f (int i, ...) {
1407         va_list args1, args2;
1408         va_start (args1, i);
1409         __va_copy (args2, args1);
1410         if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
1411           exit (1);
1412         va_end (args1); va_end (args2);
1413         }
1414         int main() {
1415           f (0, 42);
1416           return 0;
1417         }]])],
1418         [glib_cv___va_copy=yes],
1419         [glib_cv___va_copy=no])
1420 ])
1421
1422 if test "x$glib_cv_va_copy" = "xyes"; then
1423   g_va_copy_func=va_copy
1424 else if test "x$glib_cv___va_copy" = "xyes"; then
1425   g_va_copy_func=__va_copy
1426 fi
1427 fi
1428
1429 if test -n "$g_va_copy_func"; then
1430   AC_DEFINE_UNQUOTED(G_VA_COPY,$g_va_copy_func,[A 'va_copy' style function])
1431 fi
1432
1433 AC_CACHE_CHECK([whether va_lists can be copied by value],glib_cv_va_val_copy,[
1434         AC_TRY_RUN([#include <stdarg.h>
1435 #include <stdlib.h> 
1436         void f (int i, ...) {
1437         va_list args1, args2;
1438         va_start (args1, i);
1439         args2 = args1;
1440         if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
1441           exit (1);
1442         va_end (args1); va_end (args2);
1443         }
1444         int main() {
1445           f (0, 42);
1446           return 0;
1447         }],
1448         [glib_cv_va_val_copy=yes],
1449         [glib_cv_va_val_copy=no],
1450         [glib_cv_va_val_copy=yes])
1451 ])
1452
1453 if test "x$glib_cv_va_val_copy" = "xno"; then
1454   AC_DEFINE(G_VA_COPY_AS_ARRAY,1, ['va_lists' cannot be copies as values])
1455 fi
1456
1457 dnl ***********************
1458 dnl *** g_module checks ***
1459 dnl ***********************
1460 G_MODULE_LIBS=
1461 G_MODULE_LIBS_EXTRA=
1462 G_MODULE_PLUGIN_LIBS=
1463 if test x"$glib_native_win32" = xyes; then
1464   dnl No use for this on Win32
1465   G_MODULE_LDFLAGS=
1466 else
1467   export SED
1468   G_MODULE_LDFLAGS=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
1469 fi
1470 dnl G_MODULE_IMPL= don't reset, so cmd-line can override
1471 G_MODULE_NEED_USCORE=0
1472 G_MODULE_BROKEN_RTLD_GLOBAL=0
1473 G_MODULE_HAVE_DLERROR=0
1474 dnl *** force native WIN32 shared lib loader 
1475 if test -z "$G_MODULE_IMPL"; then
1476   case "$host" in
1477   *-*-mingw*|*-*-cygwin*) G_MODULE_IMPL=G_MODULE_IMPL_WIN32 ;;
1478   esac
1479 fi
1480 dnl *** force native AIX library loader
1481 dnl *** dlopen() filepath must be of the form /path/libname.a(libname.so)
1482 if test -z "$G_MODULE_IMPL"; then
1483   case "$host" in
1484   *-*-aix*) G_MODULE_IMPL=G_MODULE_IMPL_AR ;;
1485   esac
1486 fi
1487 dnl *** dlopen() and dlsym() in system libraries
1488 if test -z "$G_MODULE_IMPL"; then
1489         AC_CHECK_FUNC(dlopen,
1490                       [AC_CHECK_FUNC(dlsym,
1491                                      [G_MODULE_IMPL=G_MODULE_IMPL_DL],[])],
1492                       [])
1493 fi
1494 dnl *** load_image (BeOS)
1495 if test -z "$G_MODULE_IMPL" && test "x$glib_native_beos" = "xyes"; then
1496   AC_CHECK_LIB(root, load_image,
1497       [G_MODULE_LIBS="-lbe -lroot -lglib-2.0 "
1498       G_MODULE_LIBS_EXTRA="-L\$(top_builddir_full)/.libs"
1499       G_MODULE_PLUGIN_LIBS="-L\$(top_builddir_full)/gmodule/.libs -lgmodule"
1500       G_MODULE_IMPL=G_MODULE_IMPL_BEOS],
1501       [])
1502 fi   
1503 dnl *** NSLinkModule (dyld) in system libraries (Darwin)
1504 if test -z "$G_MODULE_IMPL"; then
1505         AC_CHECK_FUNC(NSLinkModule,
1506                       [G_MODULE_IMPL=G_MODULE_IMPL_DYLD
1507                        G_MODULE_NEED_USCORE=1],
1508                       [])
1509 fi
1510 dnl *** dlopen() and dlsym() in libdl
1511 if test -z "$G_MODULE_IMPL"; then
1512         AC_CHECK_LIB(dl, dlopen,
1513                      [AC_CHECK_LIB(dl, dlsym,
1514                                    [G_MODULE_LIBS=-ldl
1515                                    G_MODULE_IMPL=G_MODULE_IMPL_DL],[])],
1516                      [])
1517 fi
1518 dnl *** shl_load() in libdld (HP-UX)
1519 if test -z "$G_MODULE_IMPL"; then
1520         AC_CHECK_LIB(dld, shl_load,
1521                 [G_MODULE_LIBS=-ldld
1522                 G_MODULE_IMPL=G_MODULE_IMPL_DLD],
1523                 [])
1524 fi
1525 dnl *** additional checks for G_MODULE_IMPL_DL
1526 if test "$G_MODULE_IMPL" = "G_MODULE_IMPL_DL"; then
1527         LIBS_orig="$LIBS"
1528         LDFLAGS_orig="$LDFLAGS"
1529         LIBS="$G_MODULE_LIBS $LIBS"
1530         LDFLAGS="$LDFLAGS $G_MODULE_LDFLAGS"
1531 dnl *** check for OSF1/5.0 RTLD_GLOBAL brokenness
1532         echo "void glib_plugin_test(void) { }" > plugin.c
1533         ${SHELL} ./libtool --mode=compile ${CC} -shared \
1534                 -export-dynamic -o plugin.o plugin.c 2>&1 >/dev/null
1535         AC_CACHE_CHECK([for RTLD_GLOBAL brokenness],
1536                 glib_cv_rtldglobal_broken,[
1537                 AC_TRY_RUN([
1538 #include <dlfcn.h>
1539 #ifndef RTLD_GLOBAL
1540 #  define RTLD_GLOBAL 0
1541 #endif
1542 #ifndef RTLD_LAZY
1543 #  define RTLD_LAZY 0
1544 #endif
1545 int glib_plugin_test;
1546 int main () {
1547     void *handle, *global, *local;
1548     global = &glib_plugin_test;
1549     handle = dlopen ("./.libs/plugin.o", RTLD_GLOBAL | RTLD_LAZY);
1550     if (!handle) return 0;
1551     local = dlsym (handle, "glib_plugin_test");
1552     return global == local;
1553 }                       ],
1554                         [glib_cv_rtldglobal_broken=no],
1555                         [glib_cv_rtldglobal_broken=yes],
1556                         [glib_cv_rtldglobal_broken=no])
1557                 rm -f plugin.c plugin.o plugin.lo .libs/plugin.o
1558                 rmdir .libs 2>/dev/null
1559         ])
1560         if test "x$glib_cv_rtldglobal_broken" = "xyes"; then
1561                 G_MODULE_BROKEN_RTLD_GLOBAL=1
1562         else
1563                 G_MODULE_BROKEN_RTLD_GLOBAL=0
1564         fi
1565 dnl *** check whether we need preceeding underscores
1566         AC_CACHE_CHECK([for preceeding underscore in symbols],
1567                 glib_cv_uscore,[
1568                 AC_TRY_RUN([#include <dlfcn.h>
1569                 int glib_underscore_test (void) { return 42; }
1570                 int main() {
1571                   void *f1 = (void*)0, *f2 = (void*)0, *handle;
1572                   handle = dlopen ((void*)0, 0);
1573                   if (handle) {
1574                     f1 = dlsym (handle, "glib_underscore_test");
1575                     f2 = dlsym (handle, "_glib_underscore_test");
1576                   } return (!f2 || f1);
1577                 }],
1578                         [glib_cv_uscore=yes],
1579                         [glib_cv_uscore=no],
1580                         [])
1581                 rm -f plugin.c plugin.$ac_objext plugin.lo
1582         ])
1583         GLIB_ASSERT_SET(glib_cv_uscore)
1584         if test "x$glib_cv_uscore" = "xyes"; then
1585                 G_MODULE_NEED_USCORE=1
1586         else
1587                 G_MODULE_NEED_USCORE=0
1588         fi
1589
1590         LDFLAGS="$LDFLAGS_orig"
1591 dnl *** check for having dlerror()
1592         AC_CHECK_FUNC(dlerror,
1593                 [G_MODULE_HAVE_DLERROR=1],
1594                 [G_MODULE_HAVE_DLERROR=0])
1595         LIBS="$LIBS_orig"
1596 fi
1597 dnl *** done, have we got an implementation?
1598 if test -z "$G_MODULE_IMPL"; then
1599         G_MODULE_IMPL=0
1600         G_MODULE_SUPPORTED=false
1601 else
1602         G_MODULE_SUPPORTED=true
1603 fi
1604
1605 AC_MSG_CHECKING(for the suffix of module shared libraries)
1606 export SED
1607 shrext_cmds=`./libtool --config | grep '^shrext_cmds='`
1608 eval $shrext_cmds
1609 module=yes eval std_shrext=$shrext_cmds
1610 # chop the initial dot
1611 glib_gmodule_suffix=`echo $std_shrext | sed 's/^\.//'`
1612 AC_MSG_RESULT(.$glib_gmodule_suffix)
1613 # any reason it may fail?
1614 if test "x$glib_gmodule_suffix" = x; then
1615         AC_MSG_ERROR(Cannot determine shared library suffix from libtool)
1616 fi
1617  
1618 AC_SUBST(G_MODULE_SUPPORTED)
1619 AC_SUBST(G_MODULE_IMPL)
1620 AC_SUBST(G_MODULE_LIBS)
1621 AC_SUBST(G_MODULE_LIBS_EXTRA)
1622 AC_SUBST(G_MODULE_PLUGIN_LIBS)
1623 AC_SUBST(G_MODULE_LDFLAGS)
1624 AC_SUBST(G_MODULE_HAVE_DLERROR)
1625 AC_SUBST(G_MODULE_BROKEN_RTLD_GLOBAL)
1626 AC_SUBST(G_MODULE_NEED_USCORE)
1627 AC_SUBST(GLIB_DEBUG_FLAGS)
1628
1629 dnl **********************
1630 dnl *** g_spawn checks ***
1631 dnl **********************
1632
1633 AC_MSG_CHECKING(for gspawn implementation)
1634 case "$host" in
1635   *-*-mingw*)
1636     GSPAWN=gspawn-win32.lo
1637     ;;
1638   *)
1639     GSPAWN=gspawn.lo
1640     ;;    
1641 esac
1642 AC_MSG_RESULT($GSPAWN)
1643 AC_SUBST(GSPAWN)
1644
1645 dnl *************************
1646 dnl *** GIOChannel checks ***
1647 dnl *************************
1648
1649 AC_MSG_CHECKING(for GIOChannel implementation)
1650 case "$host" in
1651   *-*-mingw*)
1652     GIO=giowin32.lo
1653     ;;
1654   *)
1655     GIO=giounix.lo
1656     ;;    
1657 esac
1658 AC_MSG_RESULT($GIO)
1659 AC_SUBST(GIO)
1660
1661 dnl *********************************
1662 dnl *** Directory for GIO modules ***
1663 dnl *********************************
1664
1665 AC_ARG_WITH(gio-module-dir,
1666            [AC_HELP_STRING([--with-gio-module-dir=DIR],
1667                            [load gio modules from this directory [LIBDIR/gio/modules]])],
1668            [],
1669            [with_gio_module_dir='${libdir}/gio/modules'])
1670 GIO_MODULE_DIR=$with_gio_module_dir
1671 AC_SUBST(GIO_MODULE_DIR)
1672
1673 dnl **********************************
1674 dnl *** Check for libselinux (GIO) ***
1675 dnl **********************************
1676 AC_ARG_ENABLE(selinux,
1677               AC_HELP_STRING([--disable-selinux],
1678                              [build without selinux support]))
1679 msg_selinux=no
1680 SELINUX_LIBS=
1681 if test "x$enable_selinux" != "xno"; then
1682
1683  AC_CHECK_LIB(selinux, is_selinux_enabled,
1684    [AC_CHECK_HEADERS(selinux/selinux.h,
1685      [AC_CHECK_LIB(selinux, lgetfilecon_raw, 
1686        [AC_DEFINE(HAVE_SELINUX, 1, [Define to 1 if libselinux is available])
1687         SELINUX_LIBS="-lselinux"
1688         msg_selinux=yes])
1689      ])
1690    ])
1691 fi
1692 AC_SUBST(SELINUX_LIBS)
1693
1694 dnl *****************************
1695 dnl ** Check for inotify (GIO) **
1696 dnl *****************************
1697 inotify_support=no
1698 AC_CHECK_HEADERS([sys/inotify.h],
1699 [
1700         inotify_support=yes
1701         AC_CHECK_FUNCS(inotify_init1)
1702 ])
1703
1704 AM_CONDITIONAL(HAVE_INOTIFY, [test "$inotify_support" = "yes"])
1705
1706 dnl *********************************
1707 dnl ** Check for Solaris FEN (GIO) **
1708 dnl *********************************
1709 fen_support=no
1710 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
1711 #include <port.h> 
1712 #ifndef PORT_SOURCE_FILE 
1713 #error "Please upgrade to Nevada 72 or above to suppoert FEN" 
1714 #endif 
1715 int main() { return 0; } ]])],
1716 [
1717         fen_support=yes
1718 ],)
1719
1720 AM_CONDITIONAL(HAVE_FEN, [test "$fen_support" = "yes"])
1721
1722 dnl ****************************
1723 dnl *** Checks for FAM (GIO) ***
1724 dnl ****************************
1725
1726 should_disable_fam=no
1727
1728 AC_ARG_ENABLE(fam,
1729               AC_HELP_STRING([--disable-fam],
1730                              [don't use fam for file system monitoring]),
1731                          [
1732                                 if test "x$enable_fam" = "xno"; then
1733                                         should_disable_fam=yes
1734                                 fi
1735                          ]
1736                          )
1737 fam_support=no
1738 FAM_LIBS=
1739 if test "x$should_disable_fam" = "xno"; then
1740 AC_CHECK_LIB(fam, FAMOpen,
1741   [AC_CHECK_HEADERS(fam.h,
1742     [AC_DEFINE(HAVE_FAM, [], [Define if we have FAM])
1743      AC_CHECK_LIB(fam, FAMNoExists,
1744                   AC_DEFINE(HAVE_FAM_NO_EXISTS, [], [Define if we have FAMNoExists in fam]))
1745      FAM_LIBS="-lfam"]
1746      fam_support=yes,
1747     AC_MSG_WARN(*** FAM support will not be built (header files not found) ***))],
1748   AC_MSG_WARN(*** FAM support will not be built (FAM library not found) ***))
1749 AC_SUBST(FAM_LIBS)
1750 fi
1751 AM_CONDITIONAL(HAVE_FAM, [test "$fam_support" = "yes"])
1752
1753
1754 dnl *****************************
1755 dnl *** Check for xattr (GIO) ***
1756 dnl *****************************
1757 AC_ARG_ENABLE(xattr,
1758               AC_HELP_STRING([--disable-xattr], [build without xattr support]))
1759 msg_xattr=no
1760 XATTR_LIBS=
1761 if test "x$enable_xattr" != "xno"; then
1762
1763 dnl either glibc or libattr can provide xattr support
1764
1765 dnl for both of them, we check for getxattr being in
1766 dnl the library and a valid xattr header.
1767
1768 dnl try glibc
1769  AC_CHECK_LIB(c, getxattr,
1770    [AC_CHECK_HEADERS(sys/xattr.h,
1771      [AC_DEFINE(HAVE_XATTR, 1, [Define to 1 if xattr is available])
1772       msg_xattr=yes])
1773    ])
1774
1775   if test "x$msg_xattr" != "xyes"; then
1776 dnl   failure. try libattr
1777    AC_CHECK_LIB(attr, getxattr,
1778       [AC_CHECK_HEADERS(attr/xattr.h,
1779        [AC_DEFINE(HAVE_XATTR, 1, [Define to 1 if xattr is available])
1780         XATTR_LIBS="-lattr"
1781         msg_xattr=yes])
1782       ])
1783   fi
1784
1785   if test "x$msg_xattr" = "xyes"; then
1786     AC_MSG_CHECKING([for XATTR_NOFOLLOW])
1787     AC_TRY_COMPILE([
1788       #include <stdio.h>
1789       #ifdef HAVE_SYS_TYPES_H
1790       #include <sys/types.h>
1791       #endif
1792       #ifdef HAVE_SYS_XATTR_H
1793       #include <sys/xattr.h>
1794       #elif HAVE_ATTR_XATTR_H
1795       #include <attr/xattr.h>
1796       #endif
1797     ],
1798     [ssize_t len = getxattr("", "", NULL, 0, 0, XATTR_NOFOLLOW);],
1799     [
1800       AC_DEFINE([HAVE_XATTR_NOFOLLOW], [1], [Define to 1 if xattr API uses XATTR_NOFOLLOW])
1801       AC_MSG_RESULT([yes])
1802     ],
1803     [AC_MSG_RESULT([no])]
1804     )
1805   fi
1806
1807 fi
1808 AC_SUBST(XATTR_LIBS)
1809
1810 dnl ****************************************
1811 dnl *** platform dependent source checks ***
1812 dnl ****************************************
1813
1814 AC_MSG_CHECKING(for platform-dependent source)
1815 case "$host" in
1816   *-*-cygwin*|*-*-mingw*)
1817     PLATFORMDEP=gwin32.lo
1818     ;;
1819   *)
1820     PLATFORMDEP=
1821     ;;    
1822 esac
1823 AC_MSG_RESULT($PLATFORMDEP)
1824 AC_SUBST(PLATFORMDEP)
1825
1826 AC_MSG_CHECKING([whether to compile timeloop])
1827 case "$host" in
1828   *-*-cygwin*|*-*-mingw*|*-*-minix)
1829     enable_timeloop=no
1830     ;;
1831   *)
1832     enable_timeloop=yes
1833     ;;    
1834 esac
1835 AC_MSG_RESULT($enable_timeloop)
1836 AM_CONDITIONAL(ENABLE_TIMELOOP, test x$enable_timeloop = xyes)
1837
1838 AC_MSG_CHECKING([if building for some Win32 platform])
1839 case "$host" in
1840   *-*-mingw*|*-*-cygwin*)
1841     platform_win32=yes
1842     ;;
1843   *)
1844     platform_win32=no
1845     ;;
1846 esac
1847 AC_MSG_RESULT($platform_win32)
1848 AM_CONDITIONAL(PLATFORM_WIN32, test x$platform_win32 = xyes)
1849
1850 dnl ***********************
1851 dnl *** g_thread checks ***
1852 dnl ***********************
1853
1854 AC_ARG_WITH(threads,
1855            [AC_HELP_STRING([--with-threads=@<:@posix/win32@:>@],
1856                            [specify a thread implementation to use])],
1857            [if test "x$with_threads" = x; then
1858                 want_threads=yes
1859             else
1860                 want_threads=$with_threads
1861             fi],
1862            [want_threads=yes])
1863
1864 dnl error and warning message
1865 dnl *************************
1866
1867 THREAD_NO_IMPLEMENTATION="You do not have any known thread system on your
1868                 computer."
1869
1870 FLAG_DOES_NOT_WORK="I can't find the MACRO to enable thread safety on your
1871                 platform (normally it's "_REENTRANT"). I'll not use any flag on
1872                 compilation now, but then your programs might not work.
1873                 Please provide information on how it is done on your system."
1874
1875 LIBS_NOT_FOUND_1="I can't find the libraries for the thread implementation
1876                 "
1877
1878 LIBS_NOT_FOUND_2=". Please choose another thread implementation or
1879                 provide information on your thread implementation."
1880
1881 FUNC_NO_GETPWUID_R="the 'g_get_(user_name|real_name|home_dir|tmp_dir)'
1882                 functions will not be MT-safe during their first call because
1883                 there is no working 'getpwuid_r' on your system."
1884
1885 FUNC_NO_LOCALTIME_R="the 'g_date_set_time' function will not be MT-safe
1886                 because there is no 'localtime_r' on your system."
1887
1888 POSIX_NO_YIELD="I can not find a yield functions for your platform. A rather
1889                 crude surrogate will be used. If you happen to know a 
1890                 yield function for your system, please inform the GLib 
1891                 developers."
1892
1893 POSIX_NO_PRIORITIES="I can not find the minimal and maximal priorities for 
1894                 threads on your system. Thus threads can only have the default 
1895                 priority. If you happen to know these main/max
1896                 priorities, please inform the GLib developers."
1897
1898 AIX_COMPILE_INFO="AIX's C compiler needs to be called by a different name, when
1899                 linking threaded applications. As GLib cannot do that 
1900                 automatically, you will get an linkg error everytime you are 
1901                 not using the right compiler. In that case you have to relink 
1902                 with the right compiler. Ususally just '_r' is appended 
1903                 to the compiler name."
1904
1905 dnl determination of thread implementation
1906 dnl ***************************************
1907
1908 have_threads=no
1909 if test "x$want_threads" = xyes || test "x$want_threads" = xposix \
1910                                 || test "x$want_threads" = xdce; then
1911         # -D_POSIX4_DRAFT_SOURCE -D_POSIX4A_DRAFT10_SOURCE is for DG/UX
1912         # -U_OSF_SOURCE is for Digital UNIX 4.0d
1913         GTHREAD_COMPILE_IMPL_DEFINES="-D_POSIX4_DRAFT_SOURCE -D_POSIX4A_DRAFT10_SOURCE -U_OSF_SOURCE"
1914         glib_save_CPPFLAGS="$CPPFLAGS"
1915         CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
1916         if test "x$have_threads" = xno; then
1917                 AC_TRY_COMPILE([#include <pthread.h>],
1918                         [pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;],
1919                         have_threads=posix)
1920         fi
1921         # Tru64Unix requires -pthread to find pthread.h. See #103020
1922         CPPFLAGS="$CPPFLAGS -pthread"
1923         if test "x$have_threads" = xno; then
1924         AC_TRY_COMPILE([#include <pthread.h>],
1925                        [pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;],
1926                        have_threads=posix)
1927         fi
1928         CPPFLAGS="$glib_save_CPPFLAGS"
1929 fi
1930 if test "x$want_threads" = xyes || test "x$want_threads" = xwin32; then
1931         case $host in
1932                 *-*-mingw*)
1933                 have_threads=win32
1934                 ;;
1935         esac
1936 fi
1937
1938 AC_MSG_CHECKING(for thread implementation)
1939
1940 if test "x$have_threads" = xno; then
1941         AC_MSG_RESULT(none available)
1942         AC_MSG_ERROR($THREAD_NO_IMPLEMENTATION)
1943 else
1944         AC_MSG_RESULT($have_threads)
1945 fi
1946
1947
1948 dnl determination of G_THREAD_CFLAGS
1949 dnl ********************************
1950
1951 G_THREAD_LIBS=
1952 G_THREAD_LIBS_EXTRA=
1953 G_THREAD_CFLAGS=
1954
1955 dnl
1956 dnl Test program for basic POSIX threads functionality
1957 dnl
1958 m4_define([glib_thread_test],[
1959 #include <pthread.h> 
1960 int check_me = 0;
1961 void* func(void* data) {check_me = 42; return &check_me;}
1962 int main()
1963  { pthread_t t; 
1964    void *ret;
1965    pthread_create (&t, $1, func, 0);
1966    pthread_join (t, &ret);
1967    return (check_me != 42 || ret != &check_me);
1968 }])
1969
1970 dnl
1971 dnl Test program for sched_get_priority_min()
1972 dnl
1973 m4_define([glib_sched_priority_test],[
1974 #include <sched.h>
1975 #include <errno.h>
1976 int main() {
1977     errno = 0;
1978     return sched_get_priority_min(SCHED_OTHER)==-1
1979            && errno != 0;
1980 }])
1981
1982 if test x"$have_threads" = xposix; then
1983   # First we test for posix, whether -pthread or -pthreads do the trick as 
1984   # both CPPFLAG and LIBS. 
1985   # One of them does for most gcc versions and some other platforms/compilers
1986   # too and could be considered as the canonical way to go. 
1987   case $host in
1988     *-*-cygwin*|*-*-darwin*)
1989        # skip cygwin and darwin -pthread or -pthreads test
1990        ;;
1991     *-solaris*)
1992       # These compiler/linker flags work with both Sun Studio and gcc
1993       # Sun Studio expands -mt to -D_REENTRANT and -lthread
1994       # gcc expands -pthreads to -D_REENTRANT -D_PTHREADS -lpthread
1995       G_THREAD_CFLAGS="-D_REENTRANT -D_PTHREADS"
1996       G_THREAD_LIBS="-lpthread -lthread"
1997       ;;
1998     *)
1999       for flag in pthread pthreads mt; do
2000         glib_save_CFLAGS="$CFLAGS"
2001         CFLAGS="$CFLAGS -$flag"
2002         AC_TRY_RUN(glib_thread_test(0),
2003                    glib_flag_works=yes,
2004                    glib_flag_works=no,
2005                    [AC_LINK_IFELSE([AC_LANG_SOURCE(glib_thread_test(0))],
2006                                    glib_flag_works=yes,
2007                                    glib_flag_works=no)])
2008         CFLAGS="$glib_save_CFLAGS"
2009         if test $glib_flag_works = yes ; then
2010            G_THREAD_CFLAGS=-$flag
2011         G_THREAD_LIBS=-$flag
2012         break;
2013         fi
2014       done
2015        ;;
2016   esac
2017 fi
2018
2019 if test x"$G_THREAD_CFLAGS" = x; then
2020
2021   # The canonical -pthread[s] does not work. Try something different.
2022
2023   case $host in
2024         *-aix*)
2025                 if test x"$GCC" = xyes; then
2026                         # GCC 3.0 and above needs -pthread. 
2027                         # Should be coverd by the case above.
2028                         # GCC 2.x and below needs -mthreads
2029                         G_THREAD_CFLAGS="-mthreads"             
2030                         G_THREAD_LIBS=$G_THREAD_CFLAGS
2031                 else 
2032                         # We are probably using the aix compiler. Normaly a 
2033                         # program would have to be compiled with the _r variant
2034                         # of the corresponding compiler, but we as GLib cannot 
2035                         # do that: but the good news is that for compiling the
2036                         # only difference is the added -D_THREAD_SAFE compile 
2037                         # option. This is according to the "C for AIX User's 
2038                         # Guide".
2039                         G_THREAD_CFLAGS="-D_THREAD_SAFE"
2040                 fi
2041                 ;;
2042         *-dg-dgux*)  # DG/UX
2043                 G_THREAD_CFLAGS="-D_REENTRANT -D_POSIX4A_DRAFT10_SOURCE"
2044                 ;;
2045         *-sysv5uw7*) # UnixWare 7 
2046                 # We are not using gcc with -pthread. Catched above.
2047                 G_THREAD_CFLAGS="-Kthread"
2048                 G_THREAD_LIBS=$G_THREAD_CFLAGS
2049                 ;;
2050         *-mingw*)
2051                 # No flag needed when using MSVCRT.DLL
2052                 G_THREAD_CFLAGS=""
2053                 ;;
2054         *)
2055                 G_THREAD_CFLAGS="-D_REENTRANT" # good default guess otherwise
2056                 ;;
2057   esac
2058
2059 fi
2060
2061 # if we are not finding the localtime_r function, then we probably are
2062 # not using the proper multithread flag
2063
2064 glib_save_CPPFLAGS="$CPPFLAGS"
2065 CPPFLAGS="$CPPFLAGS $G_THREAD_CFLAGS"
2066
2067 # First we test, whether localtime_r is declared in time.h
2068 # directly. Then we test whether a macro localtime_r exists, in
2069 # which case localtime_r in the test program is replaced and thus
2070 # if we still find localtime_r in the output, it is not defined as 
2071 # a macro.
2072
2073 AC_EGREP_CPP([[^a-zA-Z1-9_]localtime_r[^a-zA-Z1-9_]], [#include <time.h>], ,
2074   [AC_EGREP_CPP([[^a-zA-Z1-9_]localtime_r[^a-zA-Z1-9_]], [#include <time.h> 
2075                                                            localtime_r(a,b)],
2076                    AC_MSG_WARN($FLAG_DOES_NOT_WORK))])
2077
2078 CPPFLAGS="$glib_save_CPPFLAGS"
2079
2080 AC_MSG_CHECKING(thread related cflags)
2081 AC_MSG_RESULT($G_THREAD_CFLAGS)
2082 CPPFLAGS="$CPPFLAGS $G_THREAD_CFLAGS"
2083
2084 dnl determination of G_THREAD_LIBS
2085 dnl ******************************
2086
2087 case $have_threads in
2088         posix)
2089           glib_save_CPPFLAGS="$CPPFLAGS"
2090           CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
2091           if test x"$G_THREAD_LIBS" = x; then
2092             case $host in
2093               *-aix*)
2094                 # We are not using gcc (would have set G_THREAD_LIBS) and thus 
2095                 # probably using the aix compiler.
2096                 AC_MSG_WARN($AIX_COMPILE_INFO)
2097                 ;;
2098               *)
2099                 G_THREAD_LIBS=error
2100                 glib_save_LIBS="$LIBS"
2101                 for thread_lib in "" pthread pthread32 pthreads thread; do
2102                         if test x"$thread_lib" = x; then
2103                                 add_thread_lib=""
2104                                 IN=""
2105                         else
2106                                 add_thread_lib="-l$thread_lib"
2107                                 IN=" in -l$thread_lib"
2108                         fi
2109                         if test x"$have_threads" = xposix; then
2110                                 defattr=0
2111                         else
2112                                 defattr=pthread_attr_default
2113                         fi
2114                         
2115                         LIBS="$add_thread_lib $glib_save_LIBS"
2116                         
2117                         AC_MSG_CHECKING(for pthread_create/pthread_join$IN)
2118                         AC_TRY_RUN(glib_thread_test($defattr),
2119                                    glib_result=yes,
2120                                    glib_result=no,
2121                                    [AC_LINK_IFELSE([AC_LANG_SOURCE(glib_thread_test($defattr))],
2122                                                    glib_result=yes,
2123                                                    glib_result=no)])
2124                         AC_MSG_RESULT($glib_result)
2125                         
2126                         if test "$glib_result" = "yes" ; then
2127                           G_THREAD_LIBS="$add_thread_lib"
2128                           break
2129                         fi
2130                 done
2131                 if test "x$G_THREAD_LIBS" = xerror; then
2132                   AC_MSG_ERROR($LIBS_NOT_FOUND_1$have_threads$LIBS_NOT_FOUND_2)
2133                 fi 
2134                 LIBS="$glib_save_LIBS"
2135                 ;;
2136             esac
2137           fi
2138
2139           glib_save_LIBS="$LIBS"
2140           for thread_lib in "" rt rte; do
2141             if test x"$thread_lib" = x; then
2142               add_thread_lib=""
2143               IN=""
2144             else
2145               add_thread_lib="-l$thread_lib"
2146               IN=" in -l$thread_lib"
2147             fi
2148             LIBS="$add_thread_lib $glib_save_LIBS"
2149             
2150             AC_MSG_CHECKING(for sched_get_priority_min$IN)
2151             AC_TRY_RUN(glib_sched_priority_test,
2152                        glib_result=yes,
2153                        glib_result=no,
2154                        [AC_LINK_IFELSE([AC_LANG_SOURCE(glib_sched_priority_test)],
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="$G_THREAD_LIBS $add_thread_lib"
2161                posix_priority_min="sched_get_priority_min(SCHED_OTHER)"
2162                posix_priority_max="sched_get_priority_max(SCHED_OTHER)"
2163                break
2164             fi
2165           done
2166           LIBS="$glib_save_LIBS"
2167           g_threads_impl="POSIX"
2168           AC_SUBST(GTHREAD_COMPILE_IMPL_DEFINES)
2169           CPPFLAGS="$glib_save_CPPFLAGS"
2170           ;;
2171         win32)
2172            g_threads_impl="WIN32"
2173            ;;
2174         *)
2175            g_threads_impl="NONE"
2176            G_THREAD_LIBS=error
2177            ;;
2178 esac
2179
2180 if test "x$G_THREAD_LIBS" = xerror; then
2181         AC_MSG_ERROR($LIBS_NOT_FOUND_1$have_threads$LIBS_NOT_FOUND_2)
2182 fi
2183
2184 case $host in
2185   *-*-beos*)
2186     G_THREAD_LIBS="-lbe -lroot -lglib-2.0 "
2187     G_THREAD_LIBS_EXTRA="-L\$(top_builddir_full)/.libs"
2188     ;;
2189   *)
2190     ;;
2191 esac
2192
2193 AC_MSG_CHECKING(thread related libraries)
2194 AC_MSG_RESULT($G_THREAD_LIBS)
2195
2196 dnl check for mt safe function variants and some posix functions
2197 dnl ************************************************************
2198
2199 glib_save_LIBS="$LIBS"
2200 # we are not doing the following for now, as this might require glib 
2201 # to always be linked with the thread libs on some platforms. 
2202 # LIBS="$LIBS $G_THREAD_LIBS"
2203 AC_CHECK_FUNCS(localtime_r gmtime_r)
2204 if test "$ac_cv_header_pwd_h" = "yes"; then
2205         AC_CACHE_CHECK([for posix getpwuid_r],
2206                 ac_cv_func_posix_getpwuid_r,
2207                 [AC_TRY_RUN([
2208 #include <errno.h>
2209 #include <pwd.h>
2210 int main () { 
2211     char buffer[10000];
2212     struct passwd pwd, *pwptr = &pwd;
2213     int error;
2214     errno = 0;
2215     error = getpwuid_r (0, &pwd, buffer, 
2216                         sizeof (buffer), &pwptr);
2217    return (error < 0 && errno == ENOSYS) 
2218            || error == ENOSYS; 
2219 }                               ],
2220                         [ac_cv_func_posix_getpwuid_r=yes],
2221                         [ac_cv_func_posix_getpwuid_r=no])])
2222         GLIB_ASSERT_SET(ac_cv_func_posix_getpwuid_r)
2223         if test "$ac_cv_func_posix_getpwuid_r" = yes; then
2224                 AC_DEFINE(HAVE_POSIX_GETPWUID_R,1,
2225                         [Have POSIX function getpwuid_r])
2226         else
2227                 AC_CACHE_CHECK([for nonposix getpwuid_r],
2228                         ac_cv_func_nonposix_getpwuid_r,
2229                         [AC_TRY_LINK([#include <pwd.h>],
2230                                 [char buffer[10000];
2231                                 struct passwd pwd;
2232                                 getpwuid_r (0, &pwd, buffer, 
2233                                                 sizeof (buffer));],
2234                                 [ac_cv_func_nonposix_getpwuid_r=yes],
2235                                 [ac_cv_func_nonposix_getpwuid_r=no])])
2236                 GLIB_ASSERT_SET(ac_cv_func_nonposix_getpwuid_r)
2237                 if test "$ac_cv_func_nonposix_getpwuid_r" = yes; then
2238                         AC_DEFINE(HAVE_NONPOSIX_GETPWUID_R,1,
2239                                 [Have non-POSIX function getpwuid_r])
2240                 fi
2241         fi
2242 fi
2243 if test "$ac_cv_header_grp_h" = "yes"; then
2244         AC_CACHE_CHECK([for posix getgrgid_r],
2245                 ac_cv_func_posix_getgrgid_r,
2246                 [AC_TRY_RUN([
2247 #include <errno.h>
2248 #include <grp.h>
2249 int main () { 
2250     char buffer[10000];
2251     struct group grp, *grpptr = &grp;
2252     int error;
2253     errno = 0;
2254     error = getgrgid_r (0, &grp, buffer, 
2255                         sizeof (buffer), &grpptr);
2256    return (error < 0 && errno == ENOSYS) 
2257            || error == ENOSYS; 
2258 }                              ],
2259                        [ac_cv_func_posix_getgrgid_r=yes],
2260                        [ac_cv_func_posix_getgrgid_r=no])])
2261         GLIB_ASSERT_SET(ac_cv_func_posix_getgrgid_r)
2262         if test "$ac_cv_func_posix_getgrgid_r" = yes; then
2263                 AC_DEFINE(HAVE_POSIX_GETGRGID_R,1,
2264                         [Have POSIX function getgrgid_r])
2265         else
2266                 AC_CACHE_CHECK([for nonposix getgrgid_r],
2267                         ac_cv_func_nonposix_getgrgid_r,
2268                         [AC_TRY_LINK([#include <grp.h>],
2269                                 [char buffer[10000];
2270                                 struct group grp;       
2271                                 getgrgid_r (0, &grp, buffer, 
2272                                 sizeof (buffer));],
2273                         [ac_cv_func_nonposix_getgrgid_r=yes],
2274                         [ac_cv_func_nonposix_getgrgid_r=no])])
2275                 GLIB_ASSERT_SET(ac_cv_func_nonposix_getgrgid_r)
2276                 if test "$ac_cv_func_nonposix_getgrgid_r" = yes; then
2277                         AC_DEFINE(HAVE_NONPOSIX_GETGRGID_R,1,
2278                                 [Have non-POSIX function getgrgid_r])
2279                 fi
2280         fi
2281 fi
2282 LIBS="$G_THREAD_LIBS $LIBS"
2283 if test x"$have_threads" = xposix; then
2284         glib_save_CPPFLAGS="$CPPFLAGS"
2285         CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
2286         dnl we might grow sizeof(pthread_t) later on, so use a dummy name here
2287         GLIB_SIZEOF([#include <pthread.h>], pthread_t, system_thread)
2288         # This is not AC_CHECK_FUNC to also work with function
2289         # name mangling in header files.
2290         AC_MSG_CHECKING(for pthread_attr_setstacksize)
2291         AC_TRY_LINK([#include <pthread.h>],
2292                 [pthread_attr_t t; pthread_attr_setstacksize(&t,0)],
2293                 [AC_MSG_RESULT(yes)
2294                 AC_DEFINE(HAVE_PTHREAD_ATTR_SETSTACKSIZE,1,
2295                           [Have function pthread_attr_setstacksize])],
2296                 [AC_MSG_RESULT(no)])
2297         AC_MSG_CHECKING(for minimal/maximal thread priority)
2298         if test x"$posix_priority_min" = x; then
2299                 AC_EGREP_CPP(PX_PRIO_MIN,[#include <pthread.h>
2300                         PX_PRIO_MIN],,[
2301                         posix_priority_min=PX_PRIO_MIN
2302                         posix_priority_max=PX_PRIO_MAX])
2303         fi
2304         if test x"$posix_priority_min" = x; then
2305                 # AIX
2306                 AC_EGREP_CPP(PTHREAD_PRIO_MIN,[#include <pthread.h>
2307                         PTHREAD_PRIO_MIN],,[
2308                         posix_priority_min=PTHREAD_PRIO_MIN
2309                         posix_priority_max=PTHREAD_PRIO_MAX])
2310         fi
2311         if test x"$posix_priority_min" = x; then
2312                 AC_EGREP_CPP(PRI_OTHER_MIN,[#include <pthread.h>
2313                         PRI_OTHER_MIN],,[
2314                         posix_priority_min=PRI_OTHER_MIN        
2315                         posix_priority_max=PRI_OTHER_MAX])
2316         fi
2317         if test x"$posix_priority_min" = x; then
2318                 AC_MSG_RESULT(none found)
2319                 AC_MSG_WARN($POSIX_NO_PRIORITIES)
2320                 posix_priority_min=-1
2321                 posix_priority_max=-1
2322         else
2323                 AC_MSG_RESULT($posix_priority_min/$posix_priority_max)
2324                 AC_MSG_CHECKING(for pthread_setschedparam)
2325                 AC_TRY_LINK([#include <pthread.h>],
2326                   [pthread_t t; pthread_setschedparam(t, 0, NULL)],
2327                   [AC_MSG_RESULT(yes)
2328                 AC_DEFINE_UNQUOTED(POSIX_MIN_PRIORITY,$posix_priority_min,[Minimum POSIX RT priority])
2329                    AC_DEFINE_UNQUOTED(POSIX_MAX_PRIORITY,$posix_priority_max,[Maximum POSIX RT priority])],
2330                   [AC_MSG_RESULT(no)
2331                    AC_MSG_WARN($POSIX_NO_PRIORITIES)])
2332         fi
2333         posix_yield_func=none
2334         AC_MSG_CHECKING(for posix yield function)
2335         for yield_func in sched_yield pthread_yield_np pthread_yield \
2336                                                 thr_yield; do
2337                 AC_TRY_LINK([#include <pthread.h>],
2338                         [$yield_func()],
2339                         [posix_yield_func="$yield_func"
2340                         break])
2341         done            
2342         if test x"$posix_yield_func" = xnone; then
2343                 AC_MSG_RESULT(none found)
2344                 AC_MSG_WARN($POSIX_NO_YIELD)
2345                 posix_yield_func="g_usleep(1000)"
2346         else
2347                 AC_MSG_RESULT($posix_yield_func)
2348                 posix_yield_func="$posix_yield_func()"
2349         fi
2350         AC_DEFINE_UNQUOTED(POSIX_YIELD_FUNC,$posix_yield_func,[The POSIX RT yield function])
2351         CPPFLAGS="$glib_save_CPPFLAGS"
2352    
2353 elif test x"$have_threads" = xwin32; then
2354         # It's a pointer to a private struct
2355         GLIB_SIZEOF(,struct _GThreadData *, system_thread)
2356 fi
2357
2358 LIBS="$glib_save_LIBS"
2359
2360 # now spit out all the warnings.
2361 if test "$ac_cv_func_posix_getpwuid_r" != "yes" && 
2362    test "$ac_cv_func_nonposix_getpwuid_r" != "yes"; then
2363         AC_MSG_WARN($FUNC_NO_GETPWUID_R)
2364 fi
2365 if test "$ac_cv_func_localtime_r" != "yes"; then
2366         AC_MSG_WARN($FUNC_NO_LOCALTIME_R)
2367 fi
2368
2369 if test x"$glib_cv_sizeof_system_thread" = x; then
2370    # use a pointer as a fallback.
2371    GLIB_SIZEOF(,void *, system_thread)
2372 fi
2373
2374 #
2375 # Hack to deal with:
2376
2377 #  a) GCC < 3.3 for Linux doesn't include -lpthread when
2378 #     building shared libraries with linux.
2379 #  b) FreeBSD doesn't do this either.
2380 #
2381 case $host in
2382   *-*-freebsd*|*-*-linux*)
2383     G_THREAD_LIBS_FOR_GTHREAD="`echo $G_THREAD_LIBS | sed s/-pthread/-lpthread/`"
2384     ;;
2385   *)     
2386     G_THREAD_LIBS_FOR_GTHREAD="$G_THREAD_LIBS"   
2387     ;;
2388 esac
2389
2390 AC_SUBST(G_THREAD_CFLAGS)
2391 AC_SUBST(G_THREAD_LIBS)
2392 AC_SUBST(G_THREAD_LIBS_FOR_GTHREAD)
2393 AC_SUBST(G_THREAD_LIBS_EXTRA)
2394
2395 AC_CHECK_FUNCS(clock_gettime, [], [
2396   AC_CHECK_LIB(rt, clock_gettime, [
2397     AC_DEFINE(HAVE_CLOCK_GETTIME, 1)
2398     G_THREAD_LIBS="$G_THREAD_LIBS -lrt"
2399     G_THREAD_LIBS_FOR_GTHREAD="$G_THREAD_LIBS_FOR_GTHREAD -lrt"
2400     GLIB_RT_LIBS="-lrt"
2401   ])
2402 ])
2403 AC_SUBST(GLIB_RT_LIBS)
2404
2405
2406 dnl ************************
2407 dnl *** g_atomic_* tests ***
2408 dnl ************************
2409
2410 dnl We need to decide at configure time if GLib will use real atomic
2411 dnl operations ("lock free") or emulated ones with a mutex.  This is
2412 dnl because we must put this information in glibconfig.h so we know if
2413 dnl it is safe or not to inline using compiler intrinsics directly from
2414 dnl the header.
2415 dnl
2416 dnl We also publish the information via G_ATOMIC_LOCK_FREE in case the
2417 dnl user is interested in knowing if they can use the atomic ops across
2418 dnl processes.
2419 dnl
2420 dnl We can currently support the atomic ops natively when building GLib
2421 dnl with recent versions of GCC or MSVC.  MSVC doesn't run ./configure,
2422 dnl so we skip that case here and define G_ATOMIC_LOCK_FREE exactly when
2423 dnl we are using GCC.
2424 dnl
2425 dnl Note that the atomic ops are only available with GCC on x86 when
2426 dnl using -march=i486 or higher.  If we detect that the atomic ops are
2427 dnl not available but would be available given the right flags, we want
2428 dnl to abort and advise the user to fix their CFLAGS.  It's better to do
2429 dnl that then to silently fall back on emulated atomic ops just because
2430 dnl the user had the wrong build environment.
2431
2432 dnl We may add other compilers here in the future...
2433 AC_MSG_CHECKING([for lock-free atomic intrinsics])
2434 AC_TRY_COMPILE([],
2435                [__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4;],
2436                [g_atomic_lock_free=yes],
2437                [g_atomic_lock_free=no])
2438 AC_MSG_RESULT($g_atomic_lock_free)
2439
2440 if test "$g_atomic_lock_free" = "no"; then
2441   SAVE_CFLAGS="${CFLAGS}"
2442   CFLAGS="-march=i486"
2443   AC_TRY_COMPILE([],
2444                  [__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4;],
2445                  [AC_MSG_ERROR([GLib must be build with -march=i486 or later.])],
2446                  [])
2447   CFLAGS="${SAVE_CFLAGS}"
2448 fi
2449
2450 dnl We need a more robust approach here...
2451 case $host_cpu in
2452   i?86|x86_64|s390|s390x|arm*|crisv32*|etrax*)
2453     glib_memory_barrier_needed=no
2454     ;;
2455   sparc*|alpha*|powerpc*|ia64)
2456     glib_memory_barrier_needed=yes
2457     ;;
2458   *)
2459     glib_memory_barrier_needed=yes
2460     ;;
2461 esac
2462
2463 dnl ************************
2464 dnl ** Check for futex(2) **
2465 dnl ************************
2466 AC_CACHE_CHECK(for futex(2) system call,
2467     glib_cv_futex,AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
2468 #include <linux/futex.h>
2469 #include <sys/syscall.h>
2470 #include <unistd.h>
2471 ],[
2472 int
2473 main (void)
2474 {
2475   /* it is not like this actually runs or anything... */
2476   syscall (__NR_futex, NULL, FUTEX_WAKE, FUTEX_WAIT);
2477   return 0;
2478 }
2479 ])],glib_cv_futex=yes,glib_cv_futex=no))
2480 if test x"$glib_cv_futex" = xyes; then
2481   AC_DEFINE(HAVE_FUTEX, 1, [we have the futex(2) system call])
2482 fi
2483
2484 AC_CACHE_CHECK(for eventfd(2) system call,
2485     glib_cv_eventfd,AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
2486 #include <sys/eventfd.h>
2487 #include <unistd.h>
2488 ],[
2489 int
2490 main (void)
2491 {
2492   eventfd (0, EFD_CLOEXEC);
2493   return 0;
2494 }
2495 ])],glib_cv_eventfd=yes,glib_cv_eventfd=no))
2496 if test x"$glib_cv_eventfd" = x"yes"; then
2497   AC_DEFINE(HAVE_EVENTFD, 1, [we have the eventfd(2) system call])
2498 fi
2499 AM_CONDITIONAL(HAVE_EVENTFD, [test "$glib_cv_eventfd" = "yes"])
2500
2501 dnl ****************************************
2502 dnl *** GLib POLL* compatibility defines ***
2503 dnl ****************************************
2504
2505 glib_poll_includes=["
2506 #include <sys/types.h>
2507 #include <sys/poll.h>
2508 "]
2509
2510 if test $ac_cv_header_sys_types_h = yes &&
2511    test $ac_cv_header_sys_poll_h = yes ; then
2512   glib_failed=false
2513   GLIB_CHECK_VALUE(POLLIN, $glib_poll_includes, glib_failed=true)
2514   GLIB_CHECK_VALUE(POLLOUT, $glib_poll_includes, glib_failed=true)
2515   GLIB_CHECK_VALUE(POLLPRI, $glib_poll_includes, glib_failed=true)
2516   GLIB_CHECK_VALUE(POLLERR, $glib_poll_includes, glib_failed=true)
2517   GLIB_CHECK_VALUE(POLLHUP, $glib_poll_includes, glib_failed=true)
2518   GLIB_CHECK_VALUE(POLLNVAL, $glib_poll_includes, glib_failed=true)
2519   if $glib_failed ; then
2520     AC_MSG_ERROR([Could not determine values for POLL* constants])
2521   fi
2522 else
2523   glib_cv_value_POLLIN=1
2524   glib_cv_value_POLLOUT=4
2525   glib_cv_value_POLLPRI=2
2526   glib_cv_value_POLLERR=8
2527   glib_cv_value_POLLHUP=16
2528   glib_cv_value_POLLNVAL=32
2529 fi
2530
2531 AC_MSG_CHECKING([for broken poll])
2532 AC_RUN_IFELSE([AC_LANG_SOURCE([[
2533         #include <stdlib.h>
2534         #include <fcntl.h>
2535         #include <poll.h>
2536         #ifdef HAVE_SYS_POLL_H
2537         #include <sys/poll.h>
2538         #endif
2539         int main(void) {
2540           struct pollfd fds[1];
2541           int fd;
2542           fd = open("/dev/null", 1);
2543           fds[0].fd = fd;
2544           fds[0].events = POLLIN;
2545           fds[0].revents = 0;
2546           if (poll(fds, 1, 0) < 0 || (fds[0].revents & POLLNVAL) != 0) {
2547                 exit(1);  /* Does not work for devices -- fail */
2548           }
2549           exit(0);
2550         }]])],
2551   [broken_poll=no],
2552   [broken_poll=yes
2553    AC_DEFINE(BROKEN_POLL,1,[poll doesn't work on devices])],
2554   [broken_poll="no (cross compiling)"])
2555 AC_MSG_RESULT($broken_poll)
2556
2557 dnl *********************
2558 dnl *** GRegex checks ***
2559 dnl *********************
2560 PCRE_REQUIRED_VERSION=8.11
2561
2562 # Check if we should compile GRegex
2563 AC_ARG_ENABLE(regex, AC_HELP_STRING([--disable-regex],
2564                                     [disable the compilation of GRegex]),
2565 [case "${enableval}" in
2566   yes) enable_regex=true ;;
2567   no)  enable_regex=false ;;
2568   *) AC_MSG_ERROR(bad value ${enableval} for --enable-regex) ;;
2569 esac],
2570 [enable_regex=true])
2571
2572 AM_CONDITIONAL(ENABLE_REGEX, $enable_regex)
2573
2574 if test x$enable_regex = xtrue; then
2575   AC_DEFINE(ENABLE_REGEX, [], [include GRegex])
2576   # Check if we should use the internal or the system-supplied pcre
2577   AC_ARG_WITH(pcre,
2578              [AC_HELP_STRING([--with-pcre=@<:@internal/system@:>@],
2579                              [whether to use system PCRE [default=internal]])])
2580
2581   AM_CONDITIONAL(USE_SYSTEM_PCRE, [test "x$with_pcre" = xsystem])
2582
2583   if test "x$with_pcre" = xsystem; then
2584     PKG_CHECK_MODULES(PCRE,
2585                       libpcre >= $PCRE_REQUIRED_VERSION)
2586     AC_CACHE_CHECK([for Unicode support in PCRE],glib_cv_pcre_has_unicode,[
2587                    glib_save_CFLAGS="$CFLAGS"
2588                    glib_save_LIBS="$LIBS"
2589                    CFLAGS="$CFLAGS $PCRE_CFLAGS" LIBS="$PCRE_LIBS"
2590                    AC_TRY_RUN([#include <pcre.h>
2591                                int main () {
2592                                  int support;
2593                                  pcre_config (PCRE_CONFIG_UTF8, &support);
2594                                  if (!support)
2595                                    return 1;
2596                                  pcre_config (PCRE_CONFIG_UNICODE_PROPERTIES, &support);
2597                                  if (!support)
2598                                    return 1;
2599                                  return 0;
2600                                }],
2601                    glib_cv_pcre_has_unicode=yes,
2602                    glib_cv_pcre_has_unicode=no,
2603                    glib_cv_pcre_has_unicode=yes)
2604                    CFLAGS="$glib_save_CFLAGS"
2605                    LIBS="$glib_save_LIBS"
2606         ])
2607     if test "$glib_cv_pcre_has_unicode" = "no"; then
2608       AC_MSG_ERROR([*** The system-supplied PCRE does not support Unicode properties or UTF-8.])
2609     fi
2610     AC_SUBST(PCRE_CFLAGS)
2611     AC_SUBST(PCRE_LIBS)
2612     AC_DEFINE(USE_SYSTEM_PCRE, [], [using the system-supplied PCRE library])
2613     PCRE_REQUIRES=libpcre
2614     AC_SUBST(PCRE_REQUIRES)
2615   else
2616     # If using gcc 4 pass -Wno-pointer-sign when compiling the internal PCRE
2617     if test x"$GCC" = xyes; then
2618       AC_MSG_CHECKING([whether compiler understands -Wno-pointer-sign])
2619       save_CFLAGS="$CFLAGS"
2620       CFLAGS="$CFLAGS -Wno-pointer-sign"
2621       AC_TRY_COMPILE([],[],[PCRE_WARN_CFLAGS="$PCRE_WARN_CFLAGS -Wno-pointer-sign"
2622                             AC_MSG_RESULT(yes)],[AC_MSG_RESULT(no)])
2623       CFLAGS="$save_CFLAGS"
2624     fi
2625   fi
2626   AC_SUBST(PCRE_WARN_CFLAGS)
2627 else
2628   AM_CONDITIONAL(USE_SYSTEM_PCRE, false])
2629 fi
2630
2631 dnl **********************
2632 dnl *** Win32 API libs ***
2633 dnl **********************
2634
2635 case $host in
2636   *-*-cygwin*)
2637         G_LIBS_EXTRA="-luser32 -lkernel32"
2638     ;;
2639   *-*-mingw*)
2640         G_LIBS_EXTRA="-lws2_32 -lole32"
2641     ;;
2642   *)
2643         G_LIBS_EXTRA=""
2644     ;;
2645 esac
2646 AC_SUBST(G_LIBS_EXTRA)
2647
2648 dnl If the system doesn't define EILSEQ, we should define EILSEQ ourselves
2649 dnl since we need it for g_iconv()
2650
2651 AC_MSG_CHECKING([for EILSEQ])
2652 AC_TRY_COMPILE([
2653 #include <errno.h>
2654 ],
2655 [
2656 int error = EILSEQ;
2657 ], have_eilseq=yes, have_eilseq=no);
2658 AC_MSG_RESULT($have_eilseq)
2659
2660 dnl ******************************************************************
2661 dnl *** If we are cross-compiling, look for glib-genmarshal and    ***
2662 dnl *** glib-compile-schemas in PATH                               ***
2663 dnl ******************************************************************
2664
2665 AM_CONDITIONAL(CROSS_COMPILING, test $cross_compiling = yes)
2666
2667 if test $cross_compiling = yes; then
2668   AC_PATH_PROG(GLIB_GENMARSHAL, glib-genmarshal, no)
2669   if test x$GLIB_GENMARSHAL = xno; then
2670     AC_MSG_ERROR(Could not find a glib-genmarshal in your PATH)
2671   fi
2672
2673   AC_PATH_PROG(GLIB_COMPILE_SCHEMAS, glib-compile-schemas, no)
2674   if test x$GLIB_COMPILE_SCHEMAS = xno; then
2675     AC_MSG_ERROR(Could not find a glib-compile-schemas in your PATH)
2676   fi
2677 fi
2678
2679 dnl **************************
2680 dnl *** Checks for gtk-doc ***
2681 dnl **************************
2682
2683 GTK_DOC_CHECK([1.15])
2684
2685 AC_ARG_ENABLE(man,
2686               [AC_HELP_STRING([--enable-man],
2687                               [regenerate man pages from Docbook [default=no]])],enable_man=yes,
2688               enable_man=no)
2689
2690 if test "${enable_man}" != no; then
2691 dnl
2692 dnl Check for xsltproc
2693 dnl
2694 AC_PATH_PROG([XSLTPROC], [xsltproc])
2695   if test -z "$XSLTPROC"; then
2696     enable_man=no
2697   fi
2698
2699   dnl check for DocBook DTD and stylesheets in the local catalog.
2700   JH_CHECK_XML_CATALOG([-//OASIS//DTD DocBook XML V4.1.2//EN],
2701      [DocBook XML DTD V4.1.2],,enable_man=no)
2702   JH_CHECK_XML_CATALOG([http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl],
2703      [DocBook XSL Stylesheets],,enable_man=no)
2704 fi
2705
2706 AM_CONDITIONAL(ENABLE_MAN, test x$enable_man != xno)
2707
2708 dnl
2709 dnl Tracing
2710 dnl
2711
2712 AC_ARG_ENABLE([dtrace],
2713              [AS_HELP_STRING([--enable-dtrace],
2714                               [include tracing support for dtrace])])
2715 have_dtrace=no
2716 AC_MSG_CHECKING([whether to include dtrace tracing support])
2717 if test "x$enable_dtrace" != xno; then
2718   if test x$glib_have_carbon = xyes; then
2719     AC_MSG_RESULT([no (not yet compatible with MacOS dtrace)])
2720   else 
2721     AC_MSG_RESULT([yes])
2722     AC_CHECK_PROGS(DTRACE, dtrace)
2723     if test -z "$DTRACE"; then
2724       if test "x$enable_dtrace" = xyes; then
2725         AC_MSG_ERROR([dtrace not found])
2726       fi
2727     else
2728       AC_CHECK_HEADER([sys/sdt.h],have_dtrace=yes,
2729                       [if test "x$enable_dtrace" = xyes; then
2730                         AC_MSG_ERROR([dtrace support needs sys/sdt.h header])
2731                        fi])
2732     fi
2733   fi
2734 else
2735   AC_MSG_RESULT([no])
2736 fi
2737 if test "x$have_dtrace" = xyes; then
2738   AC_DEFINE([HAVE_DTRACE], [1], [Define to 1 if using dtrace probes.])
2739 fi
2740 AM_CONDITIONAL([ENABLE_DTRACE], [test x$have_dtrace = xyes ])
2741
2742 AC_MSG_CHECKING([whether to include systemtap tracing support])
2743 AC_ARG_ENABLE([systemtap],
2744              [AS_HELP_STRING([--enable-systemtap],
2745                               [include tracing support for systemtap])])
2746 have_systemtap=no
2747 if test "x$enable_systemtap" != xno -a "x$have_dtrace" = xyes; then
2748   have_systemtap=yes
2749 fi
2750 AC_MSG_RESULT(${have_systemtap})
2751
2752 AM_CONDITIONAL([ENABLE_SYSTEMTAP], [test x$have_systemtap = xyes])
2753
2754 AC_ARG_WITH([tapset-install-dir],
2755             AS_HELP_STRING([--with-tapset-install-dir=DIR],
2756                             [path where systemtap tapsets are installed [DATADIR/systemtap/tapset]]),
2757             [if test "x${withval}" = x; then
2758                ABS_TAPSET_DIR="\$(datadir)/systemtap/tapset"
2759              else
2760                ABS_TAPSET_DIR="${withval}"
2761               fi],
2762             [ABS_TAPSET_DIR="\$(datadir)/systemtap/tapset"])
2763 AC_SUBST(ABS_TAPSET_DIR)
2764
2765 dnl ************************************
2766 dnl *** Enable lcov coverage reports ***
2767 dnl ************************************
2768
2769 AC_ARG_ENABLE(gcov,
2770   AS_HELP_STRING([--enable-gcov],
2771                  [enable coverage testing with gcov]),
2772   [use_gcov=$enableval], [use_gcov=no])
2773
2774 if test "x$use_gcov" = "xyes"; then
2775   dnl we need gcc:
2776   if test "$GCC" != "yes"; then
2777     AC_MSG_ERROR([GCC is required for --enable-gcov])
2778   fi
2779
2780   dnl Check if ccache is being used
2781   AC_CHECK_PROG(SHTOOL, shtool, shtool)
2782   case `$SHTOOL path $CC` in
2783     *ccache*[)] gcc_ccache=yes;;
2784     *[)] gcc_ccache=no;;
2785   esac
2786
2787   if test "$gcc_ccache" = "yes" && (test -z "$CCACHE_DISABLE" || test "$CCACHE_DISABLE" != "1"); then
2788     AC_MSG_ERROR([ccache must be disabled when --enable-gcov option is used. You can disable ccache by setting environment variable CCACHE_DISABLE=1.])
2789   fi
2790
2791   ltp_version_list="1.6 1.7 1.8 1.9"
2792   AC_CHECK_PROG(LTP, lcov, lcov)
2793   AC_CHECK_PROG(LTP_GENHTML, genhtml, genhtml)
2794
2795   if test "$LTP"; then
2796     AC_CACHE_CHECK([for ltp version], glib_cv_ltp_version, [
2797       glib_cv_ltp_version=invalid
2798       ltp_version=`$LTP -v 2>/dev/null | $SED -e 's/^.* //'`
2799       for ltp_check_version in $ltp_version_list; do
2800         if test "$ltp_version" = "$ltp_check_version"; then
2801           glib_cv_ltp_version="$ltp_check_version (ok)"
2802         fi
2803       done
2804     ])
2805   else
2806     ltp_msg="To enable code coverage reporting you must have one of the following LTP versions installed: $ltp_version_list"
2807     AC_MSG_ERROR([$ltp_msg])
2808   fi
2809
2810   case $glib_cv_ltp_version in
2811     ""|invalid[)]
2812       ltp_msg="You must have one of the following versions of LTP: $ltp_version_list (found: $ltp_version)."
2813       AC_MSG_ERROR([$ltp_msg])
2814       LTP="exit 0;"
2815       ;;
2816   esac
2817
2818   if test -z "$LTP_GENHTML"; then
2819     AC_MSG_ERROR([Could not find genhtml from the LTP package])
2820   fi
2821
2822   AC_DEFINE(HAVE_GCOV, 1, [Whether you have gcov])
2823
2824   dnl Remove all optimization flags from CFLAGS
2825   changequote({,})
2826   CFLAGS=`echo "$CFLAGS" | $SED -e 's/-O[0-9]*//g'`
2827   changequote([,])
2828
2829   dnl Add the special gcc flags
2830   CFLAGS="$CFLAGS -O0 -fprofile-arcs -ftest-coverage"
2831   LDFLAGS="$LDFLAGS -lgcov"
2832 fi
2833
2834 dnl ******************************
2835 dnl *** output the whole stuff ***
2836 dnl ******************************
2837
2838 dnl this section will only be run if config.status is invoked with no
2839 dnl arguments, or with "glib/glibconfig.h" as an argument.
2840 AC_CONFIG_COMMANDS([glib/glibconfig.h],
2841 [
2842         outfile=glib/glibconfig.h-tmp
2843         cat > $outfile <<\_______EOF
2844 /* glibconfig.h
2845  *
2846  * This is a generated file.  Please modify 'configure.ac'
2847  */
2848
2849 #ifndef __G_LIBCONFIG_H__
2850 #define __G_LIBCONFIG_H__
2851
2852 #include <glib/gmacros.h>
2853
2854 _______EOF
2855
2856         if test x$glib_limits_h = xyes; then
2857           echo '#include <limits.h>' >> $outfile
2858         fi
2859         if test x$glib_float_h = xyes; then
2860           echo '#include <float.h>' >> $outfile
2861         fi
2862         if test x$glib_values_h = xyes; then
2863           echo '#include <values.h>' >> $outfile
2864         fi
2865         if test "$glib_header_alloca_h" = "yes"; then
2866           echo '#define GLIB_HAVE_ALLOCA_H' >> $outfile
2867         fi
2868         if test x$glib_sys_poll_h = xyes; then
2869           echo '#define GLIB_HAVE_SYS_POLL_H' >> $outfile
2870         fi
2871         if test x$glib_included_printf != xyes; then
2872           echo "
2873 /* Specifies that GLib's g_print*() functions wrap the
2874  * system printf functions.  This is useful to know, for example,
2875  * when using glibc's register_printf_function().
2876  */" >> $outfile
2877           echo '#define GLIB_USING_SYSTEM_PRINTF' >> $outfile
2878         fi
2879
2880         cat >> $outfile <<_______EOF
2881
2882 G_BEGIN_DECLS
2883
2884 #define G_MINFLOAT      $glib_mf
2885 #define G_MAXFLOAT      $glib_Mf
2886 #define G_MINDOUBLE     $glib_md
2887 #define G_MAXDOUBLE     $glib_Md
2888 #define G_MINSHORT      $glib_ms
2889 #define G_MAXSHORT      $glib_Ms
2890 #define G_MAXUSHORT     $glib_Mus
2891 #define G_MININT        $glib_mi
2892 #define G_MAXINT        $glib_Mi
2893 #define G_MAXUINT       $glib_Mui
2894 #define G_MINLONG       $glib_ml
2895 #define G_MAXLONG       $glib_Ml
2896 #define G_MAXULONG      $glib_Mul
2897
2898 _______EOF
2899
2900
2901         ### this should always be true in a modern C/C++ compiler
2902         cat >>$outfile <<_______EOF
2903 typedef signed char gint8;
2904 typedef unsigned char guint8;
2905 _______EOF
2906
2907
2908         if test -n "$gint16"; then
2909           cat >>$outfile <<_______EOF
2910 typedef signed $gint16 gint16;
2911 typedef unsigned $gint16 guint16;
2912 #define G_GINT16_MODIFIER $gint16_modifier
2913 #define G_GINT16_FORMAT $gint16_format
2914 #define G_GUINT16_FORMAT $guint16_format
2915 _______EOF
2916         fi
2917
2918
2919         if test -n "$gint32"; then
2920           cat >>$outfile <<_______EOF
2921 typedef signed $gint32 gint32;
2922 typedef unsigned $gint32 guint32;
2923 #define G_GINT32_MODIFIER $gint32_modifier
2924 #define G_GINT32_FORMAT $gint32_format
2925 #define G_GUINT32_FORMAT $guint32_format
2926 _______EOF
2927         fi
2928
2929         cat >>$outfile <<_______EOF
2930 #define G_HAVE_GINT64 1          /* deprecated, always true */
2931
2932 ${glib_extension}typedef signed $gint64 gint64;
2933 ${glib_extension}typedef unsigned $gint64 guint64;
2934
2935 #define G_GINT64_CONSTANT(val)  $gint64_constant
2936 #define G_GUINT64_CONSTANT(val) $guint64_constant
2937 _______EOF
2938
2939         if test x$gint64_format != x ; then
2940           cat >>$outfile <<_______EOF
2941 #define G_GINT64_MODIFIER $gint64_modifier
2942 #define G_GINT64_FORMAT $gint64_format
2943 #define G_GUINT64_FORMAT $guint64_format
2944 _______EOF
2945         else
2946           cat >>$outfile <<_______EOF
2947 #undef G_GINT64_MODIFIER
2948 #undef G_GINT64_FORMAT
2949 #undef G_GUINT64_FORMAT
2950 _______EOF
2951         fi           
2952
2953         cat >>$outfile <<_______EOF
2954
2955 #define GLIB_SIZEOF_VOID_P $glib_void_p
2956 #define GLIB_SIZEOF_LONG   $glib_long
2957 #define GLIB_SIZEOF_SIZE_T $glib_size_t
2958
2959 _______EOF
2960
2961         cat >>$outfile <<_______EOF
2962 typedef signed $glib_size_type_define gssize;
2963 typedef unsigned $glib_size_type_define gsize;
2964 #define G_GSIZE_MODIFIER $gsize_modifier
2965 #define G_GSSIZE_FORMAT $gssize_format
2966 #define G_GSIZE_FORMAT $gsize_format
2967
2968 #define G_MAXSIZE       G_MAXU$glib_msize_type
2969 #define G_MINSSIZE      G_MIN$glib_msize_type
2970 #define G_MAXSSIZE      G_MAX$glib_msize_type
2971
2972 typedef gint64 goffset;
2973 #define G_MINOFFSET     G_MININT64
2974 #define G_MAXOFFSET     G_MAXINT64
2975
2976 #define G_GOFFSET_MODIFIER      G_GINT64_MODIFIER
2977 #define G_GOFFSET_FORMAT        G_GINT64_FORMAT
2978 #define G_GOFFSET_CONSTANT(val) G_GINT64_CONSTANT(val)
2979
2980 _______EOF
2981
2982         if test -z "$glib_unknown_void_p"; then
2983           cat >>$outfile <<_______EOF
2984
2985 #define GPOINTER_TO_INT(p)      ((gint)  ${glib_gpi_cast} (p))
2986 #define GPOINTER_TO_UINT(p)     ((guint) ${glib_gpui_cast} (p))
2987
2988 #define GINT_TO_POINTER(i)      ((gpointer) ${glib_gpi_cast} (i))
2989 #define GUINT_TO_POINTER(u)     ((gpointer) ${glib_gpui_cast} (u))
2990
2991 typedef signed $glib_intptr_type_define gintptr;
2992 typedef unsigned $glib_intptr_type_define guintptr;
2993
2994 #define G_GINTPTR_MODIFIER      $gintptr_modifier
2995 #define G_GINTPTR_FORMAT        $gintptr_format
2996 #define G_GUINTPTR_FORMAT       $guintptr_format
2997 _______EOF
2998         else
2999           echo '#error SIZEOF_VOID_P unknown - This should never happen' >>$outfile
3000         fi
3001
3002
3003
3004         cat >>$outfile <<_______EOF
3005 $glib_atexit
3006 $glib_memmove
3007 $glib_defines
3008 $glib_os
3009 $glib_static_compilation
3010
3011 $glib_vacopy
3012
3013 #ifdef  __cplusplus
3014 #define G_HAVE_INLINE   1
3015 #else   /* !__cplusplus */
3016 $glib_inline
3017 #endif  /* !__cplusplus */
3018
3019 #ifdef  __cplusplus
3020 #define G_CAN_INLINE    1
3021 _______EOF
3022
3023         if test x$g_can_inline = xyes ; then
3024                 cat >>$outfile <<_______EOF
3025 #else   /* !__cplusplus */
3026 #define G_CAN_INLINE    1
3027 _______EOF
3028         fi
3029
3030         cat >>$outfile <<_______EOF
3031 #endif
3032
3033 _______EOF
3034
3035         if test x$g_have_iso_c_varargs = xyes ; then
3036                 cat >>$outfile <<_______EOF
3037 #ifndef __cplusplus
3038 # define G_HAVE_ISO_VARARGS 1
3039 #endif
3040 _______EOF
3041         fi
3042         if test x$g_have_iso_cxx_varargs = xyes ; then
3043                 cat >>$outfile <<_______EOF
3044 #ifdef __cplusplus
3045 # define G_HAVE_ISO_VARARGS 1
3046 #endif
3047 _______EOF
3048         fi
3049         if test x$g_have_gnuc_varargs = xyes ; then
3050                 cat >>$outfile <<_______EOF
3051
3052 /* gcc-2.95.x supports both gnu style and ISO varargs, but if -ansi
3053  * is passed ISO vararg support is turned off, and there is no work
3054  * around to turn it on, so we unconditionally turn it off.
3055  */
3056 #if __GNUC__ == 2 && __GNUC_MINOR__ == 95
3057 #  undef G_HAVE_ISO_VARARGS
3058 #endif
3059
3060 #define G_HAVE_GNUC_VARARGS 1
3061 _______EOF
3062         fi
3063
3064         case x$g_stack_grows in
3065         xyes) echo "#define G_HAVE_GROWING_STACK 1" >>$outfile ;;
3066         *)    echo "#define G_HAVE_GROWING_STACK 0" >>$outfile ;;
3067         esac
3068
3069
3070         echo >>$outfile
3071         if test x$g_have_eilseq = xno; then
3072                 cat >>$outfile <<_______EOF
3073 #ifndef EILSEQ
3074 /* On some systems, like SunOS and NetBSD, EILSEQ is not defined.
3075  * The correspondence between this and the corresponding definition
3076  * in libiconv is essential.
3077  */
3078 #  define EILSEQ ENOENT
3079 #endif
3080 _______EOF
3081
3082         fi
3083
3084         if test x$g_have_gnuc_visibility = xyes; then
3085                 cat >>$outfile <<_______EOF
3086 #define G_HAVE_GNUC_VISIBILITY 1
3087 _______EOF
3088         fi
3089                 cat >>$outfile <<_______EOF
3090 #if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)
3091 #define G_GNUC_INTERNAL __attribute__((visibility("hidden")))
3092 #elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
3093 #define G_GNUC_INTERNAL __hidden
3094 #elif defined (__GNUC__) && defined (G_HAVE_GNUC_VISIBILITY)
3095 #define G_GNUC_INTERNAL __attribute__((visibility("hidden")))
3096 #else
3097 #define G_GNUC_INTERNAL
3098 #endif 
3099 _______EOF
3100
3101         echo >>$outfile
3102         cat >>$outfile <<_______EOF
3103 #define G_THREADS_ENABLED
3104 #define G_THREADS_IMPL_$g_threads_impl_def
3105 _______EOF
3106
3107         if test x"$g_memory_barrier_needed" != xno; then
3108           echo >>$outfile
3109           echo "#define G_ATOMIC_OP_MEMORY_BARRIER_NEEDED 1" >>$outfile
3110         fi
3111         if test x"$g_atomic_lock_free" = xyes; then
3112           echo >>$outfile
3113           echo "#define G_ATOMIC_LOCK_FREE" >>$outfile
3114         fi
3115         echo >>$outfile
3116         g_bit_sizes="16 32 64"
3117         for bits in $g_bit_sizes; do
3118           cat >>$outfile <<_______EOF
3119 #define GINT${bits}_TO_${g_bs_native}(val)      ((gint${bits}) (val))
3120 #define GUINT${bits}_TO_${g_bs_native}(val)     ((guint${bits}) (val))
3121 #define GINT${bits}_TO_${g_bs_alien}(val)       ((gint${bits}) GUINT${bits}_SWAP_LE_BE (val))
3122 #define GUINT${bits}_TO_${g_bs_alien}(val)      (GUINT${bits}_SWAP_LE_BE (val))
3123 _______EOF
3124         done
3125
3126         cat >>$outfile <<_______EOF
3127 #define GLONG_TO_LE(val)        ((glong) GINT${glongbits}_TO_LE (val))
3128 #define GULONG_TO_LE(val)       ((gulong) GUINT${glongbits}_TO_LE (val))
3129 #define GLONG_TO_BE(val)        ((glong) GINT${glongbits}_TO_BE (val))
3130 #define GULONG_TO_BE(val)       ((gulong) GUINT${glongbits}_TO_BE (val))
3131 #define GINT_TO_LE(val)         ((gint) GINT${gintbits}_TO_LE (val))
3132 #define GUINT_TO_LE(val)        ((guint) GUINT${gintbits}_TO_LE (val))
3133 #define GINT_TO_BE(val)         ((gint) GINT${gintbits}_TO_BE (val))
3134 #define GUINT_TO_BE(val)        ((guint) GUINT${gintbits}_TO_BE (val))
3135 #define GSIZE_TO_LE(val)        ((gsize) GUINT${gsizebits}_TO_LE (val))
3136 #define GSSIZE_TO_LE(val)       ((gssize) GINT${gsizebits}_TO_LE (val))
3137 #define GSIZE_TO_BE(val)        ((gsize) GUINT${gsizebits}_TO_BE (val))
3138 #define GSSIZE_TO_BE(val)       ((gssize) GINT${gsizebits}_TO_BE (val))
3139 #define G_BYTE_ORDER $g_byte_order
3140
3141 #define GLIB_SYSDEF_POLLIN =$g_pollin
3142 #define GLIB_SYSDEF_POLLOUT =$g_pollout
3143 #define GLIB_SYSDEF_POLLPRI =$g_pollpri
3144 #define GLIB_SYSDEF_POLLHUP =$g_pollhup
3145 #define GLIB_SYSDEF_POLLERR =$g_pollerr
3146 #define GLIB_SYSDEF_POLLNVAL =$g_pollnval
3147
3148 #define G_MODULE_SUFFIX "$g_module_suffix"
3149
3150 /* A GPid is an abstraction for a process "handle". It is *not* an
3151  * abstraction for a process identifier in general. GPid is used in
3152  * GLib only for descendant processes spawned with the g_spawn*
3153  * functions. On POSIX there is no "process handle" concept as such,
3154  * but on Windows a GPid is a handle to a process, a kind of pointer,
3155  * not a process identifier.
3156  */
3157 typedef $g_pid_type GPid;
3158
3159 #define GLIB_SYSDEF_AF_UNIX $g_af_unix
3160 #define GLIB_SYSDEF_AF_INET $g_af_inet
3161 #define GLIB_SYSDEF_AF_INET6 $g_af_inet6
3162
3163 #define GLIB_SYSDEF_MSG_OOB $g_msg_oob
3164 #define GLIB_SYSDEF_MSG_PEEK $g_msg_peek
3165 #define GLIB_SYSDEF_MSG_DONTROUTE $g_msg_dontroute
3166
3167 G_END_DECLS
3168
3169 #endif /* GLIBCONFIG_H */
3170 _______EOF
3171
3172
3173         if cmp -s $outfile glib/glibconfig.h; then
3174           AC_MSG_NOTICE([glib/glibconfig.h is unchanged])
3175           rm -f $outfile
3176         else
3177           mv $outfile glib/glibconfig.h
3178         fi
3179 ],[
3180
3181 # Note that if two cases are the same, case goes with the first one.
3182 # Note also that this is inside an AC_OUTPUT_COMMAND.  We do not depend
3183 # on variable expansion in case labels.  Look at the generated config.status
3184 # for a hint.
3185
3186 if test "x${ac_cv_working_alloca_h+set}" = xset ; then
3187   glib_header_alloca_h="$ac_cv_working_alloca_h"
3188 else
3189   glib_header_alloca_h="$ac_cv_header_alloca_h"
3190 fi
3191
3192 case xyes in
3193 x$ac_cv_header_float_h)
3194   glib_float_h=yes
3195   glib_mf=FLT_MIN glib_Mf=FLT_MAX
3196   glib_md=DBL_MIN glib_Md=DBL_MAX
3197   ;;
3198 x$ac_cv_header_values_h)
3199   glib_values_h=yes
3200   glib_mf=MINFLOAT  glib_Mf=MAXFLOAT
3201   glib_md=MINDOUBLE glib_Md=MAXDOUBLE
3202   ;;
3203 esac
3204
3205 case xyes in
3206 x$ac_cv_header_limits_h)
3207   glib_limits_h=yes
3208   glib_ms=SHRT_MIN glib_Ms=SHRT_MAX glib_Mus=USHRT_MAX
3209   glib_mi=INT_MIN  glib_Mi=INT_MAX  glib_Mui=UINT_MAX
3210   glib_ml=LONG_MIN glib_Ml=LONG_MAX glib_Mul=ULONG_MAX
3211   ;;
3212 x$ac_cv_header_values_h)
3213   glib_values_h=yes
3214   glib_ms=MINSHORT glib_Ms=MAXSHORT glib_Mus="(((gushort)G_MAXSHORT)*2+1)"
3215   glib_mi=MININT   glib_Mi=MAXINT   glib_Mui="(((guint)G_MAXINT)*2+1)"
3216   glib_ml=MINLONG  glib_Ml=MAXLONG  glib_Mul="(((gulong)G_MAXLONG)*2+1)"
3217   ;;
3218 esac
3219
3220 if test x$ac_cv_header_sys_poll_h = xyes ; then
3221   glib_sys_poll_h=yes
3222 fi
3223
3224 if test x$enable_included_printf = xyes ; then
3225   glib_included_printf=yes
3226 fi
3227
3228 case 2 in
3229 $ac_cv_sizeof_short)            
3230   gint16=short
3231   gint16_modifier='"h"'
3232   gint16_format='"hi"'
3233   guint16_format='"hu"'
3234   ;;
3235 $ac_cv_sizeof_int)              
3236   gint16=int
3237   gint16_modifier='""'
3238   gint16_format='"i"'
3239   guint16_format='"u"'
3240   ;;
3241 esac
3242 case 4 in
3243 $ac_cv_sizeof_short)            
3244   gint32=short
3245   gint32_modifier='"h"'
3246   gint32_format='"hi"'
3247   guint32_format='"hu"'
3248   ;;
3249 $ac_cv_sizeof_int)              
3250   gint32=int
3251   gint32_modifier='""'
3252   gint32_format='"i"'
3253   guint32_format='"u"'
3254   ;;
3255 $ac_cv_sizeof_long)             
3256   gint32=long
3257   gint32_modifier='"l"'
3258   gint32_format='"li"'
3259   guint32_format='"lu"'
3260   ;;
3261 esac
3262 case 8 in
3263 $ac_cv_sizeof_int)
3264   gint64=int
3265   gint64_modifier='""'
3266   gint64_format='"i"'
3267   guint64_format='"u"'
3268   glib_extension=
3269   gint64_constant='(val)'
3270   guint64_constant='(val)'
3271   ;;
3272 $ac_cv_sizeof_long)
3273   gint64=long
3274   gint64_modifier='"l"'
3275   gint64_format='"li"'
3276   guint64_format='"lu"'
3277   glib_extension=
3278   gint64_constant='(val##L)'
3279   guint64_constant='(val##UL)'
3280   ;;
3281 $ac_cv_sizeof_long_long)
3282   gint64='long long'
3283   if test -n "$glib_cv_long_long_format"; then
3284     gint64_modifier='"'$glib_cv_long_long_format'"'
3285     gint64_format='"'$glib_cv_long_long_format'i"'
3286     guint64_format='"'$glib_cv_long_long_format'u"'
3287   fi
3288   glib_extension='G_GNUC_EXTENSION '
3289   gint64_constant='(G_GNUC_EXTENSION (val##LL))'
3290   guint64_constant='(G_GNUC_EXTENSION (val##ULL))'
3291   ;;
3292 $ac_cv_sizeof___int64)
3293   gint64='__int64'
3294   if test -n "$glib_cv_long_long_format"; then
3295     gint64_modifier='"'$glib_cv_long_long_format'"'
3296     gint64_format='"'$glib_cv_long_long_format'i"'
3297     guint64_format='"'$glib_cv_long_long_format'u"'
3298   fi
3299   glib_extension=
3300   gint64_constant='(val##i64)'
3301   guint64_constant='(val##ui64)'
3302   ;;
3303 esac
3304 glib_size_t=$ac_cv_sizeof_size_t
3305 glib_size_type_define="$glib_size_type"
3306 glib_void_p=$ac_cv_sizeof_void_p
3307 glib_long=$ac_cv_sizeof_long
3308
3309 case "$glib_size_type" in
3310 short)
3311   gsize_modifier='"h"'
3312   gsize_format='"hu"'
3313   gssize_format='"hi"'
3314   glib_msize_type='SHRT'
3315   ;;
3316 int)
3317   gsize_modifier='""'
3318   gsize_format='"u"'
3319   gssize_format='"i"'
3320   glib_msize_type='INT'
3321   ;;
3322 long)
3323   gsize_modifier='"l"'
3324   gsize_format='"lu"'
3325   gssize_format='"li"'
3326   glib_msize_type='LONG'
3327   ;;
3328 "long long"|__int64)
3329   gsize_modifier='"I64"'
3330   gsize_format='"I64u"'
3331   gssize_format='"I64i"'
3332   glib_msize_type='INT64'
3333   ;;
3334 esac
3335
3336 gintbits=`expr $ac_cv_sizeof_int \* 8`
3337 glongbits=`expr $ac_cv_sizeof_long \* 8`
3338 gsizebits=`expr $ac_cv_sizeof_size_t \* 8`
3339
3340 case $ac_cv_sizeof_void_p in
3341 $ac_cv_sizeof_int)
3342   glib_intptr_type_define=int
3343   gintptr_modifier='""'
3344   gintptr_format='"i"'
3345   guintptr_format='"u"'
3346   glib_gpi_cast=''
3347   glib_gpui_cast=''
3348   ;;
3349 $ac_cv_sizeof_long)
3350   glib_intptr_type_define=long
3351   gintptr_modifier='"l"'
3352   gintptr_format='"li"'
3353   guintptr_format='"lu"'
3354   glib_gpi_cast='(glong)'
3355   glib_gpui_cast='(gulong)'
3356   ;;
3357 $ac_cv_sizeof_long_long)
3358   glib_intptr_type_define='long long'
3359   gintptr_modifier='"I64"'
3360   gintptr_format='"I64i"'
3361   guintptr_format='"I64u"'
3362   glib_gpi_cast='(gint64)'
3363   glib_gpui_cast='(guint64)'
3364   ;;
3365 $ac_cv_sizeof___int64)
3366   glib_intptr_type_define=__int64
3367   gintptr_modifier='"I64"'
3368   gintptr_format='"I64i"'
3369   guintptr_format='"I64u"'
3370   glib_gpi_cast='(gint64)'
3371   glib_gpui_cast='(guint64)'
3372   ;;
3373 *)
3374   glib_unknown_void_p=yes
3375   ;;
3376 esac
3377
3378
3379 case xyes in
3380 x$ac_cv_func_atexit)
3381   glib_atexit="
3382 #ifdef NeXT /* @#%@! NeXTStep */
3383 # define g_ATEXIT(proc) (!atexit (proc))
3384 #else
3385 # define g_ATEXIT(proc) (atexit (proc))
3386 #endif"
3387   ;;
3388 x$ac_cv_func_on_exit)
3389   glib_atexit="
3390 #define g_ATEXIT(proc)  (on_exit ((void (*)(int, void*))(proc), NULL))"
3391   ;;
3392 esac
3393
3394 case xyes in
3395 x$ac_cv_func_memmove)
3396   glib_memmove='
3397 #define g_memmove(dest,src,len) G_STMT_START { memmove ((dest), (src), (len)); } G_STMT_END'
3398   ;;
3399 x$glib_cv_working_bcopy)
3400   glib_memmove="
3401 /* memmove isn't available, but bcopy can copy overlapping memory regions */
3402 #define g_memmove(d,s,n) G_STMT_START { bcopy ((s), (d), (n)); } G_STMT_END"
3403   ;;
3404 *)  
3405   glib_memmove="
3406 /* memmove isn't found and bcopy can't copy overlapping memory regions, 
3407  * so we have to roll our own copy routine. */
3408 void g_memmove (void* dest, const void * src, unsigned long len);"
3409   ;;
3410 esac
3411
3412 glib_defines="
3413 #define GLIB_MAJOR_VERSION $GLIB_MAJOR_VERSION
3414 #define GLIB_MINOR_VERSION $GLIB_MINOR_VERSION
3415 #define GLIB_MICRO_VERSION $GLIB_MICRO_VERSION
3416 "
3417
3418 case xyes in
3419 x$glib_cv_va_copy)      glib_vacopy='#define G_VA_COPY  va_copy' ;;
3420 x$glib_cv___va_copy)    glib_vacopy='#define G_VA_COPY  __va_copy' ;;
3421 *)                      glib_vacopy=''
3422 esac
3423
3424 if test x$glib_cv_va_val_copy = xno; then
3425   glib_vacopy="\$glib_vacopy
3426 #define G_VA_COPY_AS_ARRAY 1"
3427 fi
3428
3429 if test x$glib_cv_hasinline = xyes; then
3430     glib_inline='#define G_HAVE_INLINE 1'
3431 fi
3432 if test x$glib_cv_has__inline = xyes; then
3433     glib_inline="\$glib_inline
3434 #define G_HAVE___INLINE 1"
3435 fi
3436 if test x$glib_cv_has__inline__ = xyes; then
3437     glib_inline="\$glib_inline
3438 #define G_HAVE___INLINE__ 1"
3439 fi
3440
3441 g_have_gnuc_varargs=$g_have_gnuc_varargs
3442 g_have_iso_c_varargs=$g_have_iso_c_varargs
3443 g_have_iso_cxx_varargs=$g_have_iso_cxx_varargs
3444
3445 g_can_inline=$g_can_inline
3446 g_have_gnuc_visibility=$g_have_gnuc_visibility
3447 g_have_sunstudio_visibility=$g_have_sunstudio_visibility
3448
3449 if test x$ac_cv_c_bigendian = xyes; then
3450   g_byte_order=G_BIG_ENDIAN
3451   g_bs_native=BE
3452   g_bs_alien=LE
3453 else
3454   g_byte_order=G_LITTLE_ENDIAN
3455   g_bs_native=LE
3456   g_bs_alien=BE
3457 fi
3458
3459 g_pollin=$glib_cv_value_POLLIN
3460 g_pollout=$glib_cv_value_POLLOUT
3461 g_pollpri=$glib_cv_value_POLLPRI
3462 g_pollhup=$glib_cv_value_POLLHUP
3463 g_pollerr=$glib_cv_value_POLLERR
3464 g_pollnval=$glib_cv_value_POLLNVAL
3465
3466 g_af_unix=$glib_cv_value_AF_UNIX
3467 g_af_inet=$glib_cv_value_AF_INET
3468 g_af_inet6=$glib_cv_value_AF_INET6
3469
3470 g_msg_peek=$glib_cv_value_MSG_PEEK
3471 g_msg_oob=$glib_cv_value_MSG_OOB
3472 g_msg_dontroute=$glib_cv_value_MSG_DONTROUTE
3473
3474 g_stack_grows=$glib_cv_stack_grows
3475
3476 g_have_eilseq=$have_eilseq
3477
3478 g_threads_impl_def=$g_threads_impl
3479
3480 g_system_thread_sizeof="$glib_cv_sizeof_system_thread"
3481
3482 g_memory_barrier_needed="$glib_memory_barrier_needed"
3483 g_gcc_atomic_ops="$glib_cv_gcc_has_builtin_atomic_operations"
3484
3485 g_module_suffix="$glib_gmodule_suffix"
3486
3487 g_pid_type="$glib_pid_type"
3488 case $host in
3489   *-*-beos*)
3490     glib_os="#define G_OS_BEOS"
3491     ;;
3492   *-*-cygwin*)
3493     glib_os="#define G_OS_UNIX
3494 #define G_PLATFORM_WIN32
3495 #define G_WITH_CYGWIN"
3496     ;;
3497   *-*-mingw*)
3498     glib_os="#define G_OS_WIN32
3499 #define G_PLATFORM_WIN32"
3500     ;;
3501   *)
3502     glib_os="#define G_OS_UNIX"
3503     ;;
3504 esac
3505 glib_static_compilation=""
3506 if test x$glib_win32_static_compilation = xyes; then
3507   glib_static_compilation="#define GLIB_STATIC_COMPILATION 1
3508 #define GOBJECT_STATIC_COMPILATION 1"
3509 fi
3510 ])
3511
3512 # Check for libdbus1 - Optional - is only used in the GDBus test cases
3513 #
3514 # 1.2.14 required for dbus_message_set_serial
3515 PKG_CHECK_MODULES(DBUS1,
3516                   dbus-1 >= 1.2.14,
3517                   [AC_DEFINE(HAVE_DBUS1, 1, [Define if dbus-1 is available]) have_dbus1=yes],
3518                   have_dbus1=no)
3519 AC_SUBST(DBUS1_CFLAGS)
3520 AC_SUBST(DBUS1_LIBS)
3521 AM_CONDITIONAL(HAVE_DBUS1, [test "x$have_dbus1" = "xyes"])
3522
3523 dnl
3524 dnl Check for -Bsymbolic-functions linker flag used to avoid
3525 dnl intra-library PLT jumps, if available.
3526 dnl
3527
3528 AC_ARG_ENABLE(Bsymbolic,
3529               [AC_HELP_STRING([--disable-Bsymbolic],
3530                               [avoid linking with -Bsymbolic])],,
3531               [SAVED_LDFLAGS="${LDFLAGS}"
3532                AC_MSG_CHECKING([for -Bsymbolic-functions linker flag])
3533                LDFLAGS=-Wl,-Bsymbolic-functions
3534                AC_TRY_LINK([], [int main (void) { return 0; }],
3535                            AC_MSG_RESULT(yes)
3536                            enable_Bsymbolic=yes,
3537                            AC_MSG_RESULT(no)
3538                            enable_Bsymbolic=no)
3539                LDFLAGS="${SAVED_LDFLAGS}"])
3540
3541 if test "x${enable_Bsymbolic}" == "xyes"; then
3542   GLIB_LINK_FLAGS=-Wl,-Bsymbolic-functions
3543 fi
3544
3545 AC_SUBST(GLIB_LINK_FLAGS)
3546
3547 #
3548 # Define variables corresponding to the correct include paths to use for
3549 # in-tree building.
3550 #
3551
3552 # for config.h:
3553 config_h_INCLUDES='-I$(top_builddir)'
3554 AC_SUBST(config_h_INCLUDES)
3555
3556 # glib:
3557 #   config.h
3558 #   $(top_builddir)/glib: for glibconfig.h
3559 #   $(top_srcdir)/glib:   for glib.h
3560 #   $(top_srcdir):        for everything
3561 glib_INCLUDES='$(config_h_INCLUDES) -I$(top_builddir)/glib -I$(top_srcdir)/glib -I$(top_srcdir)'
3562 AC_SUBST(glib_INCLUDES)
3563
3564 # gthread:
3565 #   same as glib
3566 gthread_INCLUDES='$(glib_INCLUDES)'
3567 AC_SUBST(gthread_INCLUDES)
3568
3569 # gobject:
3570 #   same as gthread
3571 gobject_INCLUDES='$(gthread_INCLUDES)'
3572 AC_SUBST(gobject_INCLUDES)
3573
3574 # gmodule:
3575 #   glib includes
3576 #   $(top_srcdir)/gmodule: for gmodule.h
3577 gmodule_INCLUDES='$(glib_INCLUDES) -I$(top_srcdir)/gmodule'
3578 AC_SUBST(gmodule_INCLUDES)
3579
3580 # gio:
3581 #   same as gmodule
3582 gio_INCLUDES='$(gmodule_INCLUDES)'
3583 AC_SUBST(gio_INCLUDES)
3584
3585
3586 AC_CONFIG_FILES([
3587 glib-2.0.pc
3588 gmodule-2.0.pc
3589 gmodule-export-2.0.pc
3590 gmodule-no-export-2.0.pc
3591 gthread-2.0.pc
3592 gobject-2.0.pc
3593 gio-2.0.pc
3594 gio-unix-2.0.pc
3595 gio-windows-2.0.pc
3596 glib-zip
3597 glib-gettextize
3598 Makefile
3599 build/Makefile
3600 build/win32/Makefile
3601 build/win32/dirent/Makefile
3602 build/win32/vs9/Makefile
3603 build/win32/vs10/Makefile
3604 glib/Makefile
3605 glib/glib.stp
3606 glib/libcharset/Makefile
3607 glib/gnulib/Makefile
3608 glib/pcre/Makefile
3609 glib/update-pcre/Makefile
3610 glib/tests/Makefile
3611 gmodule/Makefile
3612 gmodule/gmoduleconf.h
3613 gobject/Makefile
3614 gobject/gobject.stp
3615 gobject/glib-mkenums
3616 gobject/tests/Makefile
3617 gthread/Makefile
3618 gio/Makefile
3619 gio/gdbus-2.0/codegen/Makefile
3620 gio/gdbus-2.0/codegen/config.py
3621 gio/xdgmime/Makefile
3622 gio/inotify/Makefile
3623 gio/fen/Makefile
3624 gio/fam/Makefile
3625 gio/win32/Makefile
3626 gio/tests/Makefile
3627 gio/tests/gdbus-object-manager-example/Makefile
3628 po/Makefile.in
3629 docs/Makefile
3630 docs/reference/Makefile
3631 docs/reference/glib/Makefile
3632 docs/reference/glib/version.xml
3633 docs/reference/gobject/Makefile
3634 docs/reference/gobject/version.xml
3635 docs/reference/gio/Makefile
3636 docs/reference/gio/gdbus-object-manager-example/Makefile
3637 docs/reference/gio/version.xml
3638 tests/Makefile
3639 tests/gobject/Makefile
3640 tests/refcount/Makefile
3641 m4macros/Makefile
3642 ])
3643
3644 AC_CONFIG_COMMANDS([chmod-scripts],
3645 [chmod 0755 glib-zip
3646 chmod 0755 glib-gettextize
3647 chmod 0755 gobject/glib-mkenums])
3648
3649 # we want to invoke this macro solely so that the config.status script
3650 # and automake generated makefiles know about these generated files.
3651 # They are only needed to distcheck the package
3652 if false; then
3653   AC_CONFIG_FILES([
3654     INSTALL
3655     README
3656     config.h.win32
3657     glib/glibconfig.h.win32
3658     glib/makefile.msc
3659     glib/glib.rc
3660     gmodule/makefile.msc
3661     gmodule/gmodule.rc
3662     gobject/makefile.msc
3663     gobject/gobject.rc
3664     gthread/makefile.msc
3665     gthread/gthread.rc
3666     gio/gio.rc
3667     tests/makefile.msc
3668   ])
3669 fi
3670
3671 AC_OUTPUT