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