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