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