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