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