fix some docs
[glib.git] / configure.in
blobb21ec45e5754f450c855f43b8c7754be9e3aa9e3
1 # Process this file with autoconf to produce a configure script.
2 # require autoconf 2.54
3 AC_PREREQ(2.54)
5 dnl ***********************************
6 dnl *** include special GLib macros ***
7 dnl ***********************************
9 m4_define(glib_configure_in)
12 # The following version number definitions apply to GLib, GModule, GObject 
13 # and GThread as a whole, so if changes occoured in any of them, they are all
14 # treated with the same interface and binary age.
16 # Making releases:
17 #   glib_micro_version += 1;
18 #   glib_interface_age += 1;
19 #   glib_binary_age += 1;
20 # if any functions have been added, set glib_interface_age to 0.
21 # if backwards compatibility has been broken,
22 # set glib_binary_age _and_ glib_interface_age to 0.
24 m4_define([glib_major_version], [2])
25 m4_define([glib_minor_version], [17])
26 m4_define([glib_micro_version], [1])
27 m4_define([glib_interface_age], [0])
28 m4_define([glib_binary_age],
29           [m4_eval(100 * glib_minor_version + glib_micro_version)])
30 m4_define([glib_version],
31           [glib_major_version.glib_minor_version.glib_micro_version])
33 # libtool version related macros
34 m4_define([glib_lt_release], [glib_major_version.glib_minor_version])
35 m4_define([glib_lt_current],
36           [m4_eval(100 * glib_minor_version + glib_micro_version - glib_interface_age)])
37 m4_define([glib_lt_revision], [glib_interface_age])
38 m4_define([glib_lt_age], [m4_eval(glib_binary_age - glib_interface_age)])
39 m4_define([glib_lt_current_minus_age],
40           [m4_eval(glib_lt_current - glib_lt_age)])
42 # if the minor version number is odd, then we want debugging.  Otherwise
43 # we only want minimal debugging support.
44 m4_define([glib_debug_default],
45           [m4_if(m4_eval(glib_minor_version % 2), [1], [yes], [minimum])])dnl
48 AC_INIT(glib, [glib_version],
49         [http://bugzilla.gnome.org/enter_bug.cgi?product=glib])
51 AC_CONFIG_SRCDIR([glib/glib.h])
53 # Save this value here, since automake will set cflags later
54 cflags_set=${CFLAGS+set}
56 AM_INIT_AUTOMAKE([no-define])
58 # Specify a configuration file
59 AM_CONFIG_HEADER([config.h])
62 GLIB_MAJOR_VERSION=glib_major_version
63 GLIB_MINOR_VERSION=glib_minor_version
64 GLIB_MICRO_VERSION=glib_micro_version
65 GLIB_INTERFACE_AGE=glib_interface_age
66 GLIB_BINARY_AGE=glib_binary_age
67 GLIB_VERSION=glib_version
69 AC_SUBST(GLIB_MAJOR_VERSION)
70 AC_SUBST(GLIB_MINOR_VERSION)
71 AC_SUBST(GLIB_MICRO_VERSION)
72 AC_SUBST(GLIB_VERSION)
73 AC_SUBST(GLIB_INTERFACE_AGE)
74 AC_SUBST(GLIB_BINARY_AGE)
76 AC_DEFINE(GLIB_MAJOR_VERSION, [glib_major_version],
77           [Define to the GLIB major version])
78 AC_DEFINE(GLIB_MINOR_VERSION, [glib_minor_version],
79           [Define to the GLIB minor version])
80 AC_DEFINE(GLIB_MICRO_VERSION, [glib_micro_version],
81           [Define to the GLIB micro version])
82 AC_DEFINE(GLIB_INTERFACE_AGE, [glib_interface_age],
83           [Define to the GLIB interface age])
84 AC_DEFINE(GLIB_BINARY_AGE, [glib_binary_age],
85           [Define to the GLIB binary age])
87 # libtool versioning
88 LT_RELEASE=glib_lt_release
89 LT_CURRENT=glib_lt_current
90 LT_REVISION=glib_lt_revision
91 LT_AGE=glib_lt_age
92 LT_CURRENT_MINUS_AGE=glib_lt_current_minus_age
93 AC_SUBST(LT_RELEASE)
94 AC_SUBST(LT_CURRENT)
95 AC_SUBST(LT_REVISION)
96 AC_SUBST(LT_AGE)
97 AC_SUBST(LT_CURRENT_MINUS_AGE)
99 dnl Initialize maintainer mode
100 AM_MAINTAINER_MODE
102 AC_CANONICAL_HOST
104 AC_MSG_CHECKING([for the BeOS])
105 case $host in
106   *-*-beos*)
107     glib_native_beos="yes"
108     ;;
109   *)
110     glib_native_beos="no"
111     ;;
112 esac
113 AC_MSG_RESULT([$glib_native_beos])
117 AC_MSG_CHECKING([for Win32])
118 case "$host" in
119   *-*-mingw*)
120     glib_native_win32=yes
121     glib_pid_type='void *'
122     # Unfortunately the mingw implementations of C99-style snprintf and vsnprintf
123     # don't seem to be quite good enough, at least not in mingw-runtime-3.14.
124     # (Sorry, I don't know exactly what is the problem, but it is related to
125     # floating point formatting and decimal point vs. comma.)
126     # The simple tests in AC_FUNC_VSNPRINTF_C99 and AC_FUNC_SNPRINTF_C99 aren't
127     # rigorous enough to notice, though.
128     # So preset the autoconf cache variables.
129     ac_cv_func_vsnprintf_c99=no
130     ac_cv_func_snprintf_c99=no
131     ;;
132   *)
133     glib_native_win32=no
134     glib_pid_type=int
135     ;;
136 esac
137 case $host in
138   *-*-linux*)
139     glib_os_linux=yes
140     ;;
141 esac
143 AC_MSG_RESULT([$glib_native_win32])
145 glib_have_carbon=no
146 AC_MSG_CHECKING([for Mac OS X Carbon support])
147 AC_TRY_CPP([
148 #include <Carbon/Carbon.h>
149 #include <CoreServices/CoreServices.h>
150 ], glib_have_carbon=yes)
152 AC_MSG_RESULT([$glib_have_carbon])
154 AM_CONDITIONAL(OS_WIN32, [test "$glib_native_win32" = "yes"])
155 AM_CONDITIONAL(OS_UNIX, [test "$glib_native_win32" != "yes"])
156 AM_CONDITIONAL(OS_LINUX, [test "$glib_os_linux" = "yes"])
157 AM_CONDITIONAL(OS_CARBON, [test "$glib_have_carbon" = "yes"])
159 if test "$glib_native_win32" = "yes"; then
160   AC_CHECK_TOOL(WINDRES, windres, no)
161   if test "$WINDRES" = no; then
162     AC_MSG_ERROR([*** Could not find an implementation of windres in your PATH.])
163   fi
164   AC_CHECK_TOOL(NM, nm, no)
165   if test "$NM" = no; then
166     AC_MSG_ERROR([*** Could not find an implementation of nm in your PATH.])
167   fi
168   AC_CHECK_TOOL(RANLIB, ranlib, :)
169   AC_CHECK_PROG(ms_librarian, [lib.exe], [yes], [no])
171 AM_CONDITIONAL(MS_LIB_AVAILABLE, [test x$ms_librarian = xyes])
173 if test "$glib_native_win32" != yes; then
174     # libtool option to control which symbols are exported
175     # right now, symbols starting with _ are not exported
176     LIBTOOL_EXPORT_OPTIONS='-export-symbols-regex "^g.*"'
177 else
178     # We currently use .def files on Windows
179     LIBTOOL_EXPORT_OPTIONS=
181 AC_SUBST(LIBTOOL_EXPORT_OPTIONS)
183 if test "x$glib_have_carbon" = "xyes"; then
184   AC_DEFINE(HAVE_CARBON, 1, [define to 1 if Carbon is available])
185   LDFLAGS="$LDFLAGS -framework Carbon"
189 dnl declare --enable-* args and collect ac_help strings
190 AC_ARG_ENABLE(debug,
191               AC_HELP_STRING([--enable-debug=@<:@no/minimum/yes@:>@],
192                              [turn on debugging @<:@default=glib_debug_default@:>@]),,
193               enable_debug=glib_debug_default)
195 AC_ARG_ENABLE(gc_friendly,
196               [AC_HELP_STRING([--enable-gc-friendly],
197                               [turn on garbage collector friendliness [default=no]])],,
198               [enable_gc_friendly=no])
199 AC_ARG_ENABLE(mem_pools,
200               [AC_HELP_STRING([--disable-mem-pools],
201                               [disable all glib memory pools])],,
202               [disable_mem_pools=no])
203 AC_ARG_ENABLE(threads,
204               [AC_HELP_STRING([--enable-threads],
205                               [turn on basic thread support [default=yes]
206 ([=no] will override --with-threads)])],,
207               [enable_threads=yes])
208 AC_ARG_ENABLE(rebuilds,
209               [AC_HELP_STRING([--disable-rebuilds],
210                               [disable all source autogeneration rules])],,
211               [enable_rebuilds=yes])
212 AC_ARG_ENABLE(visibility,
213               [AC_HELP_STRING([--disable-visibility],
214                               [don't use ELF visibility attributes])],,
215               [enable_visibility=yes])
217 if test "x$enable_threads" != "xyes"; then
218   enable_threads=no
221 AC_MSG_CHECKING([whether to enable garbage collector friendliness])
222 if test "x$enable_gc_friendly" = "xyes"; then
223   AC_DEFINE(ENABLE_GC_FRIENDLY_DEFAULT, 1, [Whether to enable GC friendliness by default])
224   AC_MSG_RESULT([yes])
225 else
226   AC_MSG_RESULT([no])
229 AC_MSG_CHECKING([whether to disable memory pools])
230 if test "x$disable_mem_pools" = "xno"; then
231   AC_MSG_RESULT([no])
232 else
233   AC_DEFINE(DISABLE_MEM_POOLS, [1], [Whether to disable memory pools])
234   AC_SUBST(DISABLE_MEM_POOLS)
235   AC_MSG_RESULT([yes])
238 dnl Checks for programs.
239 AC_PROG_CC
241 dnl Check for a working C++ compiler, but do not bail out, if none is found.
242 AC_CHECK_PROGS(CXX, [$CCC c++ g++ gcc CC cxx cc++ cl], [gcc])
243 AC_LANG_SAVE
244 AC_LANG_CPLUSPLUS
245 AC_TRY_COMPILE(,[class a { int b; } c;], ,CXX=)
246 AM_CONDITIONAL(HAVE_CXX, [test "$CXX" != ""])
247 AC_LANG_RESTORE
249 AM_PROG_CC_STDC
250 AM_PROG_CC_C_O
251 AC_PROG_INSTALL
253 AC_SYS_LARGEFILE
256 # Find pkg-config
258 AC_PATH_PROG(PKG_CONFIG, [pkg-config], [no])
259 if test x$PKG_CONFIG = xno ; then
260   AC_MSG_ERROR([*** pkg-config not found. See http://www.freedesktop.org/software/pkgconfig/])
263 if $PKG_CONFIG --atleast-pkgconfig-version 0.16 ; then
264   :
265 else
266   AC_MSG_ERROR([*** pkg-config too old; version 0.16 or better required.])
269 if test "x$enable_debug" = "xyes"; then
270   if test x$cflags_set != xset ; then
271       case " $CFLAGS " in
272       *[[\ \    ]]-g[[\ \       ]]*) ;;
273       *) CFLAGS="$CFLAGS -g" ;;
274       esac
275   fi
276         
277   GLIB_DEBUG_FLAGS="-DG_ENABLE_DEBUG"
278 else
279   GLIB_DEBUG_FLAGS="-DG_DISABLE_CAST_CHECKS"
281   if test "x$enable_debug" = "xno"; then
282     GLIB_DEBUG_FLAGS="$GLIB_DEBUG_FLAGS -DG_DISABLE_ASSERT -DG_DISABLE_CHECKS"
283   fi
286 if test "x$enable_visibility" = "xno"; then
287   GLIB_DEBUG_FLAGS="$GLIB_DEBUG_FLAGS -DDISABLE_VISIBILITY"
290 # Ensure MSVC-compatible struct packing convention is used when
291 # compiling for Win32 with gcc.
292 # What flag to depends on gcc version: gcc3 uses "-mms-bitfields", while
293 # gcc2 uses "-fnative-struct".
294 if test x"$glib_native_win32" = xyes; then
295   if test x"$GCC" = xyes; then
296     msnative_struct=''
297     AC_MSG_CHECKING([how to get MSVC-compatible struct packing])
298     if test -z "$ac_cv_prog_CC"; then
299       our_gcc="$CC"
300     else
301       our_gcc="$ac_cv_prog_CC"
302     fi
303     case `$our_gcc --version | sed -e 's,\..*,.,' -e q` in
304       2.)
305         if $our_gcc -v --help 2>/dev/null | grep fnative-struct >/dev/null; then
306           msnative_struct='-fnative-struct'
307         fi
308         ;;
309       *)
310         if $our_gcc -v --help 2>/dev/null | grep ms-bitfields >/dev/null; then
311           msnative_struct='-mms-bitfields'
312         fi
313         ;;
314     esac
315     if test x"$msnative_struct" = x ; then
316       AC_MSG_RESULT([no way])
317       AC_MSG_WARN([produced libraries might be incompatible with MSVC-compiled code])
318     else
319       CFLAGS="$CFLAGS $msnative_struct"
320       AC_MSG_RESULT([${msnative_struct}])
321     fi
322   fi
324 GLIB_EXTRA_CFLAGS="${msnative_struct}"
325 AC_SUBST(GLIB_EXTRA_CFLAGS)
327 AC_EXEEXT
329 # define a MAINT-like variable REBUILD which is set if Perl
330 # and awk are found, so autogenerated sources can be rebuilt
331 AC_PROG_AWK
332 AC_CHECK_PROGS(PERL, [perl5 perl])
333 # We would like indent, but don't require it.
334 AC_CHECK_PROG(INDENT, indent, indent)
335 REBUILD=\#
336 if test "x$enable_rebuilds" = "xyes" && \
337      test -n "$PERL" && \
338      $PERL -e 'exit !($] >= 5.002)' > /dev/null 2>&1 && \
339      test -n "$AWK" ; then
340   REBUILD=
342 AC_SUBST(REBUILD)
344 # Need full path to Perl for glib-mkenums
346 if test "x$PERL" != x ; then
347   AC_PATH_PROG(PERL_PATH, [$PERL])
349 if test "x$PERL_PATH" = x ; then
350   PERL_PATH="/usr/bin/env perl"
352 AC_SUBST(PERL_PATH)
354 # Need suitable python path for greport
355 AM_PATH_PYTHON(2.4,,PYTHON="/usr/bin/env python2.4")
358 dnl ***********************
359 dnl *** Tests for iconv ***
360 dnl ***********************
362 dnl We do this before the gettext checks, to avoid distortion
364 dnl On Windows we use a native implementation
366 if test x"$glib_native_win32" = xyes; then
367   with_libiconv=native
368 else
369   AC_ARG_WITH(libiconv,
370               [AC_HELP_STRING([--with-libiconv=@<:@no/gnu/native@:>@],
371                               [use the libiconv library])],,
372               [with_libiconv=maybe])
374   found_iconv=no
375   case $with_libiconv in
376     maybe)
377       # Check in the C library first
378       AC_CHECK_FUNC(iconv_open, [with_libiconv=no; found_iconv=yes])
379       # Check if we have GNU libiconv
380       if test $found_iconv = "no"; then
381         AC_CHECK_LIB(iconv, libiconv_open, [with_libiconv=gnu; found_iconv=yes])
382       fi
383       # Check if we have a iconv in -liconv, possibly from vendor
384       if test $found_iconv = "no"; then
385         AC_CHECK_LIB(iconv, iconv_open, [with_libiconv=native; found_iconv=yes])
386       fi
387       ;;
388     no)
389       AC_CHECK_FUNC(iconv_open, [with_libiconv=no; found_iconv=yes])
390       ;;
391     gnu|yes)
392       AC_CHECK_LIB(iconv, libiconv_open, [with_libiconv=gnu; found_iconv=yes])
393       ;;
394     native)
395       AC_CHECK_LIB(iconv, iconv_open, [with_libiconv=native; found_iconv=yes])
396       ;;
397   esac
399   if test "x$found_iconv" = "xno" ; then
400      AC_MSG_ERROR([*** No iconv() implementation found in C library or libiconv])
401   fi
404 gl_GLIBC21
405 AC_ARG_ENABLE(iconv-cache, 
406               [AC_HELP_STRING([--enable-iconv-cache=@<:@yes/no/auto@:>@],
407                               [cache iconv descriptors [default=auto]])],,
408               [enable_iconv_cache=auto])
410 AC_MSG_CHECKING([Whether to cache iconv descriptors])
411 case $enable_iconv_cache in
412   auto)
413     if test $ac_cv_gnu_library_2_1 = yes; then
414       enable_iconv_cache=no
415     else 
416       enable_iconv_cache=yes
417     fi
418   ;;
419   yes|no) 
420   ;;
421   *) AC_MSG_ERROR([Value given to --enable-iconv-cache must be one of yes, no or auto])
422   ;;
423 esac
425 if test $enable_iconv_cache = yes; then
426    AC_DEFINE(NEED_ICONV_CACHE,1,[Do we cache iconv descriptors])
429 AC_MSG_RESULT($enable_iconv_cache)
433 dnl gettext support
436 ALL_LINGUAS="am ar as az be be@latin bg bn bn_IN bs ca cs cy da de dz el en_CA en_GB eo es et eu fa fi fr ga gl gu he hi hr hu hy id is it ja ka kn ko ku lt lv mg mk ml mn mr ms nb ne nl nn oc or pa pl pt pt_BR ro ru rw si sk sl sq sr sr@Latn sr@ije sv ta te th tl tr tt uk vi wa xh yi zh_CN zh_HK zh_TW"
437 GLIB_GNU_GETTEXT
439 if test "$gt_cv_have_gettext" != "yes" ; then
440   AC_MSG_ERROR([
441 *** You must have either have gettext support in your C library, or use the 
442 *** GNU gettext library. (http://www.gnu.org/software/gettext/gettext.html
446 LIBS="$INTLLIBS $LIBS"
448 GETTEXT_PACKAGE=glib20
449 AC_SUBST(GETTEXT_PACKAGE)
450 AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, ["$GETTEXT_PACKAGE"], 
451   [Define the gettext package to be used])
453 GLIB_DEFINE_LOCALEDIR(GLIB_LOCALE_DIR)
456 dnl Now we are done with gettext checks, figure out ICONV_LIBS
459 if test x"$glib_native_win32" != xyes; then
460   if test x$with_libiconv != xno ; then
461     case " $INTLLIBS " in
462     *[[\ \      ]]-liconv[[\ \  ]]*) ;;
463     *) ICONV_LIBS="-liconv" ;;
464     esac
465   fi
467 AC_SUBST(ICONV_LIBS)
469 case $with_libiconv in
470   gnu)
471     AC_DEFINE(USE_LIBICONV_GNU, 1, [Using GNU libiconv])
472     ;;
473   native)
474     AC_DEFINE(USE_LIBICONV_NATIVE, 1, [Using a native implementation of iconv in a separate library])
475     ;;
476 esac
478 dnl Initialize libtool
479 AM_DISABLE_STATIC
480 AC_LIBTOOL_WIN32_DLL
481 AM_PROG_LIBTOOL
483 if test "x$GCC" = "xyes"; then
484   case " $CFLAGS " in
485   *[[\ \        ]]-Wall[[\ \    ]]*) ;;
486   *) CFLAGS="$CFLAGS -Wall" ;;
487   esac
490 CPPFLAGS="$CPPFLAGS -DG_DISABLE_SINGLE_INCLUDES"
492 if test "$glib_native_win32" = "yes"; then
493   if test x$enable_static = xyes -a x$enable_shared = xyes; then
494     AC_MSG_ERROR([Can not build both shared and static at the same time on Windows.])
495   fi
496   if test x$enable_static = xyes; then
497     glib_win32_static_compilation=yes
498     GLIB_WIN32_STATIC_COMPILATION_DEFINE="#define GLIB_STATIC_COMPILATION 1
499 #define GOBJECT_STATIC_COMPILATION 1"
500     AC_SUBST(GLIB_WIN32_STATIC_COMPILATION_DEFINE)
501   fi
503 AM_CONDITIONAL(OS_WIN32_AND_DLL_COMPILATION, [test x$glib_native_win32 = xyes -a x$glib_win32_static_compilation != xyes])
506 dnl DU4 native cc currently needs -std1 for ANSI mode (instead of K&R)
508 if test $cross_compiling != yes ; then
509     AC_MSG_CHECKING([for extra flags to get ANSI library prototypes])
510     glib_save_LIBS=$LIBS
511     LIBS="$LIBS -lm"
512     AC_TRY_RUN([#include <math.h>
513                  int main (void) { return (log(1) != log(1.)); }],
514          AC_MSG_RESULT(none needed),
515          glib_save_CFLAGS=$CFLAGS
516          CFLAGS="$CFLAGS -std1"
517          AC_TRY_RUN([#include <math.h>
518                      int main (void) { return (log(1) != log(1.)); }],
519              AC_MSG_RESULT(-std1),
520              AC_MSG_RESULT()
521              CFLAGS=$glib_save_CFLAGS
522              AC_MSG_WARN(
523                     [No ANSI prototypes found in library. (-std1 didn't work.)])
524          )
525     )
526     LIBS=$glib_save_LIBS
529 dnl NeXTStep cc seems to need this
530 AC_MSG_CHECKING([for extra flags for POSIX compliance])
531 AC_TRY_COMPILE([#include <dirent.h>], [DIR *dir;],
532   AC_MSG_RESULT(none needed),
533   glib_save_CFLAGS=$CFLAGS
534   CFLAGS="$CFLAGS -posix"
535   AC_TRY_COMPILE([#include <dirent.h>], [DIR *dir;],
536     AC_MSG_RESULT(-posix),
537     AC_MSG_RESULT()
538     CFLAGS=$glib_save_CFLAGS
539     AC_MSG_WARN([Could not determine POSIX flag. (-posix didn't work.)])))
541 # Checks for header files.
542 AC_HEADER_STDC
544 # Checks for library functions.
545 AC_FUNC_VPRINTF
546 AC_FUNC_MMAP
547 AC_FUNC_ALLOCA
548 AC_CHECK_FUNCS(posix_memalign)
549 AC_CHECK_FUNCS(memalign)
550 AC_CHECK_FUNCS(valloc)
552 AC_CHECK_FUNCS(atexit on_exit)
554 AC_CHECK_FUNCS(timegm gmtime_r)
556 AC_CHECK_SIZEOF(char)
557 AC_CHECK_SIZEOF(short)
558 AC_CHECK_SIZEOF(long)
559 AC_CHECK_SIZEOF(int)
560 AC_CHECK_SIZEOF(void *)
561 AC_CHECK_SIZEOF(long long)
562 AC_CHECK_SIZEOF(__int64)
564 if test x$ac_cv_sizeof_long = x8 || test x$ac_cv_sizeof_long_long = x8 || test x$ac_cv_sizeof___int64 = x8 ; then
565   :
566 else
567   AC_MSG_ERROR([
568 *** GLib requires a 64 bit type. You might want to consider
569 *** using the GNU C compiler.
573 if test x$glib_native_win32 != xyes && test x$ac_cv_sizeof_long_long = x8; then
574         # long long is a 64 bit integer.
575         AC_MSG_CHECKING(for format to printf and scanf a guint64)
576         AC_CACHE_VAL(glib_cv_long_long_format,[
577                 for format in ll q I64; do
578                   AC_TRY_RUN([#include <stdio.h>  
579                         int main()
580                         {
581                           long long b, a = -0x3AFAFAFAFAFAFAFALL;
582                           char buffer[1000];
583                           sprintf (buffer, "%${format}u", a);
584                           sscanf (buffer, "%${format}u", &b);
585                           exit (b!=a);
586                         }
587                         ],
588                         [glib_cv_long_long_format=${format}
589                         break],
590                         [],[:])
591                 done])
592         if test -n "$glib_cv_long_long_format"; then
593           AC_MSG_RESULT(%${glib_cv_long_long_format}u)
594           AC_DEFINE(HAVE_LONG_LONG_FORMAT,1,[define if system printf can print long long])
595           if test x"$glib_cv_long_long_format" = xI64; then
596             AC_DEFINE(HAVE_INT64_AND_I64,1,[define to support printing 64-bit integers with format I64])
597           fi
598         else
599           AC_MSG_RESULT(none)
600         fi
601 elif test x$ac_cv_sizeof___int64 = x8; then
602         # __int64 is a 64 bit integer.
603         AC_MSG_CHECKING(for format to printf and scanf a guint64)
604         # We know this is MSVCRT.DLL, and what the formats are
605         glib_cv_long_long_format=I64
606         AC_MSG_RESULT(%${glib_cv_long_long_format}u)
607         AC_DEFINE(HAVE_LONG_LONG_FORMAT,1,[define if system printf can print long long])
608         AC_DEFINE(HAVE_INT64_AND_I64,1,[define to support printing 64-bit integers with format I64])
611 dnl long doubles were not used, and a portability problem
612 dnl AC_C_LONG_DOUBLE
613 AC_C_CONST
615 dnl ok, here we try to check whether the systems prototypes for
616 dnl malloc and friends actually match the prototypes provided
617 dnl by gmem.h (keep in sync). i currently only know how to check
618 dnl this reliably with gcc (-Werror), improvements for other
619 dnl compilers are apprechiated.
620 SANE_MALLOC_PROTOS=no
621 AC_MSG_CHECKING([if malloc() and friends prototypes are gmem.h compatible])
622 glib_save_CFLAGS=$CFLAGS
623 if test "x$GCC" = "xyes"; then
624   CFLAGS="$CFLAGS -Werror"
625   AC_TRY_COMPILE([#include <stdlib.h>], [
626     void* (*my_calloc_p)  (size_t, size_t) = calloc;
627     void* (*my_malloc_p)  (size_t)         = malloc;
628     void  (*my_free_p)    (void*)          = free;
629     void* (*my_realloc_p) (void*, size_t)  = realloc;
630     my_calloc_p = 0;
631     my_malloc_p = 0;
632     my_free_p = 0;
633     my_realloc_p = 0;
634   ],
635     AC_DEFINE(SANE_MALLOC_PROTOS, 1, 
636       [Define if you have correct malloc prototypes])
637     SANE_MALLOC_PROTOS=yes)
639 AC_MSG_RESULT($SANE_MALLOC_PROTOS)
640 CFLAGS=$glib_save_CFLAGS
643 dnl check in which direction the stack grows
645 AC_CACHE_CHECK([for growing stack pointer],glib_cv_stack_grows,[
646         AC_TRY_RUN([
647         volatile int *a = 0, *b = 0;
648         void foo (void);
649         int main () { volatile int y = 7; a = &y; foo (); return b > a; }
650         void foo (void) { volatile int x = 5; b = &x; }
651         ],
652         glib_cv_stack_grows=no
653         ,
654         glib_cv_stack_grows=yes
655         ,)
658 dnl AC_C_INLINE is useless to us since it bails out too early, we need to
659 dnl truely know which ones of `inline', `__inline' and `__inline__' are
660 dnl actually supported.
661 AC_CACHE_CHECK([for __inline],glib_cv_has__inline,[
662         AC_COMPILE_IFELSE([
663         __inline int foo () { return 0; }
664         int main () { return foo (); }
665         ],
666         glib_cv_has__inline=yes
667         ,
668         glib_cv_has__inline=no
669         ,)
671 case x$glib_cv_has__inline in
672 xyes) AC_DEFINE(G_HAVE___INLINE,1,[Have __inline keyword])
673 esac
674 AC_CACHE_CHECK([for __inline__],glib_cv_has__inline__,[
675         AC_COMPILE_IFELSE([
676         __inline__ int foo () { return 0; }
677         int main () { return foo (); }
678         ],
679         glib_cv_has__inline__=yes
680         ,
681         glib_cv_has__inline__=no
682         ,)
684 case x$glib_cv_has__inline__ in
685 xyes) AC_DEFINE(G_HAVE___INLINE__,1,[Have __inline__ keyword])
686 esac
687 AC_CACHE_CHECK([for inline], glib_cv_hasinline,[
688         AC_COMPILE_IFELSE([
689         #undef inline
690         inline int foo () { return 0; }
691         int main () { return foo (); }
692         ],
693         glib_cv_hasinline=yes
694         ,
695         glib_cv_hasinline=no
696         ,)
698 case x$glib_cv_hasinline in
699 xyes) AC_DEFINE(G_HAVE_INLINE,1,[Have inline keyword])
700 esac
702 # if we can use inline functions in headers
703 AC_MSG_CHECKING(if inline functions in headers work)
704 AC_LINK_IFELSE([
705 #if defined (G_HAVE_INLINE) && defined (__GNUC__) && defined (__STRICT_ANSI__)
706 #  undef inline
707 #  define inline __inline__
708 #elif !defined (G_HAVE_INLINE)
709 #  undef inline
710 #  if defined (G_HAVE___INLINE__)
711 #    define inline __inline__
712 #  elif defined (G_HAVE___INLINE)
713 #    define inline __inline
714 #  endif
715 #endif
717 int glib_test_func2 (int);
719 static inline int
720 glib_test_func1 (void) {
721   return glib_test_func2 (1);
725 main (void) {
726   int i = 1;
727 }],[g_can_inline=yes],[g_can_inline=no])
728 AC_MSG_RESULT($g_can_inline)
730 dnl *** check for working do while(0) macros ***
731 AC_CACHE_CHECK([for working do while(0) macros], g_support_dowhile_macros, [
732         AC_TRY_COMPILE([],[
733         #define STMT_START do
734         #define STMT_END while(0)
735         #define STMT_TEST STMT_START { i = 0; } STMT_END
736         int main(void) { int i = 1; STMT_TEST; return i; }],
737         [g_support_dowhile_macros=yes],
738         [g_support_dowhile_macros=no],
739         [g_support_dowhile_macros=yes])
741 if test x$g_support_dowhile_macros = xyes; then
742   AC_DEFINE(HAVE_DOWHILE_MACROS, 1, [define for working do while(0) macros])
745 # check for flavours of varargs macros
746 AC_MSG_CHECKING(for ISO C99 varargs macros in C)
747 AC_TRY_COMPILE([],[
748 int a(int p1, int p2, int p3);
749 #define call_a(...) a(1,__VA_ARGS__)
750 call_a(2,3);
751 ],g_have_iso_c_varargs=yes,g_have_iso_c_varargs=no)
752 AC_MSG_RESULT($g_have_iso_c_varargs)
754 AC_MSG_CHECKING(for ISO C99 varargs macros in C++)
755 if test "$CXX" = ""; then
756 dnl No C++ compiler
757   g_have_iso_cxx_varargs=no
758 else
759   AC_LANG_CPLUSPLUS
760   AC_TRY_COMPILE([],[
761 int a(int p1, int p2, int p3);
762 #define call_a(...) a(1,__VA_ARGS__)
763 call_a(2,3);
764 ],g_have_iso_cxx_varargs=yes,g_have_iso_cxx_varargs=no)
765   AC_LANG_C
767 AC_MSG_RESULT($g_have_iso_cxx_varargs)
769 AC_MSG_CHECKING(for GNUC varargs macros)
770 AC_TRY_COMPILE([],[
771 int a(int p1, int p2, int p3);
772 #define call_a(params...) a(1,params)
773 call_a(2,3);
774 ],g_have_gnuc_varargs=yes,g_have_gnuc_varargs=no)
775 AC_MSG_RESULT($g_have_gnuc_varargs)
777 # check for GNUC visibility support
778 AC_MSG_CHECKING(for GNUC visibility attribute)
779 GLIB_CHECK_COMPILE_WARNINGS([
780 void
781 __attribute__ ((visibility ("hidden")))
782      f_hidden (void)
785 void
786 __attribute__ ((visibility ("internal")))
787      f_internal (void)
790 void
791 __attribute__ ((visibility ("protected")))
792      f_protected (void)
795 void
796 __attribute__ ((visibility ("default")))
797      f_default (void)
800 int main (int argc, char **argv)
802         f_hidden();
803         f_internal();
804         f_protected();
805         f_default();
806         return 0;
808 ],g_have_gnuc_visibility=yes,g_have_gnuc_visibility=no)
809 AC_MSG_RESULT($g_have_gnuc_visibility)
810 AM_CONDITIONAL(HAVE_GNUC_VISIBILITY, [test x$g_have_gnuc_visibility = xyes])
812 AC_MSG_CHECKING([whether using Sun Studio C compiler])
813 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#if defined(__SUNPRO_C) || (__SUNPRO_C >= 0x550)
814 #else
815 # include "error: this is not Sun Studio."
816 #endif
817 ]], [[]])], [ g_have_sunstudio_visibility=yes ], [ g_have_sunstudio_visibility=no ])
818 AC_MSG_RESULT($g_have_sunstudio_visibility)
819 AM_CONDITIONAL(HAVE_SUNSTUDIO_VISIBILITY, [test x$g_have_sunstudio_visibility = xyes])
821 # check for bytesex stuff
822 AC_C_BIGENDIAN
824 # check for header files
825 AC_CHECK_HEADERS([dirent.h float.h limits.h pwd.h grp.h sys/param.h sys/poll.h sys/resource.h])
826 AC_CHECK_HEADERS([sys/time.h sys/times.h sys/wait.h unistd.h values.h])
827 AC_CHECK_HEADERS([sys/select.h sys/types.h stdint.h sched.h malloc.h])
828 AC_CHECK_HEADERS([sys/vfs.h sys/mount.h sys/vmount.h sys/statfs.h sys/statvfs.h])
829 AC_CHECK_HEADERS([mntent.h sys/mnttab.h sys/vfstab.h sys/mntctl.h sys/sysctl.h fstab.h])
831 # check for structure fields
832 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])
833 AC_CHECK_MEMBERS([struct stat.st_blksize, struct stat.st_blocks, struct statfs.f_fstypename],,, [#include <sys/types.h>
834 #include <sys/stat.h>
835 #include <unistd.h>
836 #ifdef HAVE_SYS_PARAM_H
837 #include <sys/param.h>
838 #endif
839 #ifdef HAVE_SYS_MOUNT_H
840 #include <sys/mount.h>
841 #endif])
842 # struct statvfs.f_basetype is available on Solaris but not for Linux. 
843 AC_CHECK_MEMBERS([struct statvfs.f_basetype],,, [#include <sys/statvfs.h>])
845 # Checks for libcharset
846 AM_LANGINFO_CODESET
847 gl_GLIBC21
848 AC_CHECK_HEADERS([stddef.h stdlib.h string.h])
849 AC_CHECK_FUNCS(setlocale)
851 # check additional type sizes
852 AC_CHECK_SIZEOF(size_t)
854 dnl Try to figure out whether gsize, gssize should be long or int
855 AC_MSG_CHECKING([for the appropriate definition for size_t])
857 case $ac_cv_sizeof_size_t in
858   $ac_cv_sizeof_short) 
859       glib_size_type=short
860       ;;
861   $ac_cv_sizeof_int) 
862       glib_size_type=int
863       ;;
864   $ac_cv_sizeof_long) 
865       glib_size_type=long
866       ;;
867   *)  AC_MSG_ERROR([No type matching size_t in size])
868       ;;
869 esac
871 dnl If int/long are the same size, we see which one produces
872 dnl warnings when used in the location as size_t. (This matters
873 dnl on AIX with xlc)
875 if test $ac_cv_sizeof_size_t = $ac_cv_sizeof_int &&
876    test $ac_cv_sizeof_size_t = $ac_cv_sizeof_long ; then
877   GLIB_CHECK_COMPILE_WARNINGS([
878 #if defined(_AIX) && !defined(__GNUC__)
879 #pragma options langlvl=stdc89
880 #endif
881 #include <stddef.h> 
882 int main ()
884   size_t s = 1;
885   unsigned int *size_int = &s;
886   return (int)*size_int;
888     ],glib_size_type=int,
889       [GLIB_CHECK_COMPILE_WARNINGS([
890 #if defined(_AIX) && !defined(__GNUC__)
891 #pragma options langlvl=stdc89
892 #endif
893 #include <stddef.h> 
894 int main ()
896    size_t s = 1;
897    unsigned long *size_long = &s;
898    return (int)*size_long;
900         ],glib_size_type=long)])
903 AC_MSG_RESULT(unsigned $glib_size_type)
905 # Check for some functions
906 AC_CHECK_FUNCS(lstat strerror strsignal memmove vsnprintf stpcpy strcasecmp strncasecmp poll getcwd vasprintf setenv unsetenv getc_unlocked readlink symlink fdwalk)
907 AC_CHECK_FUNCS(chown lchown fchmod fchown link statvfs statfs utimes getgrgid getpwuid)
908 AC_CHECK_FUNCS(getmntent_r setmntent endmntent hasmntopt getmntinfo)
909 # Check for high-resolution sleep functions
910 AC_CHECK_FUNCS(nanosleep nsleep)
912 AC_CHECK_HEADERS(crt_externs.h)
913 AC_CHECK_FUNCS(_NSGetEnviron)
915 AC_FUNC_VSNPRINTF_C99
916 AC_FUNC_PRINTF_UNIX98
919 dnl if statfs() takes 2 arguments (Posix) or 4 (Solaris)
921 if test "$ac_cv_func_statfs" = yes ; then
922   AC_MSG_CHECKING([number of arguments to statfs()])
923   AC_TRY_COMPILE([#include <unistd.h>
924   #ifdef HAVE_SYS_PARAM_H
925   #include <sys/param.h>
926   #endif
927   #ifdef HAVE_SYS_VFS_H
928   #include <sys/vfs.h>
929   #endif
930   #ifdef HAVE_SYS_MOUNT_H
931   #include <sys/mount.h>
932   #endif
933   #ifdef HAVE_SYS_STATFS_H
934   #include <sys/statfs.h>
935   #endif], [struct statfs st;
936   statfs(NULL, &st);],[
937     AC_MSG_RESULT([2])
938     AC_DEFINE(STATFS_ARGS, 2, [Number of arguments to statfs()])],[
939     AC_TRY_COMPILE([#include <unistd.h>
940   #ifdef HAVE_SYS_PARAM_H
941   #include <sys/param.h>
942   #endif
943   #ifdef HAVE_SYS_VFS_H
944   #include <sys/vfs.h>
945   #endif
946   #ifdef HAVE_SYS_MOUNT_H
947   #include <sys/mount.h>
948   #endif
949   #ifdef HAVE_SYS_STATFS_H
950   #include <sys/statfs.h>
951   #endif], [struct statfs st;
952   statfs(NULL, &st, sizeof (st), 0);],[
953       AC_MSG_RESULT([4])
954       AC_DEFINE(STATFS_ARGS, 4, [Number of arguments to statfs()])],[
955       AC_MSG_RESULT(unknown)
956       AC_MSG_ERROR([unable to determine number of arguments to statfs()])])])
960 # Check whether to use an included printf
963 AC_ARG_ENABLE(included-printf,
964               [AC_HELP_STRING([--enable-included-printf],
965                               [use included printf [default=auto]])],
966               enable_included_printf="$enableval")
968 need_included_printf=no
969 if test "x$enable_included_printf" = "xyes" ; then
970   need_included_printf=yes
972 if test "$ac_cv_func_vsnprintf_c99" != "yes" ; then
973   need_included_printf=yes
975 if test "$ac_cv_func_printf_unix98" != "yes" ; then
976   need_included_printf=yes
978 if test "x$ac_cv_sizeof_long_long" = "x8" &&
979    test -z "$glib_cv_long_long_format" ; then
980   need_included_printf=yes
983 if test "x$enable_included_printf" = "xno" && 
984    test "x$need_included_printf" = "xyes" ; then
985   AC_MSG_ERROR([
986 *** Your C library's printf doesn't appear to have the features that
987 *** GLib needs, but you specified --enable-included-printf=no.])
990 enable_included_printf=$need_included_printf
992 AM_CONDITIONAL(HAVE_GOOD_PRINTF, test "$enable_included_printf" != "yes")
993 if test "$enable_included_printf" != "yes" ; then 
994   AC_DEFINE(HAVE_GOOD_PRINTF,1,[define to use system printf])
995 else
996   if test -z "$glib_cv_long_long_format" ; then
997     glib_cv_long_long_format="ll"
998   fi
999   AC_DEFINE(HAVE_VASPRINTF,1)
1002 # Checks needed for gnulib vasnprintf
1003 bh_C_SIGNED
1004 jm_AC_TYPE_LONG_LONG
1005 gt_TYPE_LONGDOUBLE
1006 gt_TYPE_WCHAR_T
1007 gt_TYPE_WINT_T
1008 AC_TYPE_SIZE_T
1009 AC_CHECK_TYPES(ptrdiff_t)
1010 jm_AC_TYPE_INTMAX_T
1011 AC_CHECK_FUNCS([snprintf wcslen])
1012 AC_FUNC_SNPRINTF_C99
1014 # Check if bcopy can be used for overlapping copies, if memmove isn't found.
1015 # The check is borrowed from the PERL Configure script.
1016 if test "$ac_cv_func_memmove" != "yes"; then
1017   AC_CACHE_CHECK(whether bcopy can handle overlapping copies,
1018     glib_cv_working_bcopy,[AC_TRY_RUN([
1019       int main() {
1020         char buf[128], abc[128], *b;
1021         int len, off, align;
1022         bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
1023         for (align = 7; align >= 0; align--) {
1024           for (len = 36; len; len--) {
1025             b = buf+align; bcopy(abc, b, len);
1026             for (off = 1; off <= len; off++) {
1027               bcopy(b, b+off, len); bcopy(b+off, b, len);
1028                 if (bcmp(b, abc, len)) return(1);
1029             }
1030           }
1031         }
1032         return(0);
1033       }],glib_cv_working_bcopy=yes,glib_cv_working_bcopy=no)])
1035   GLIB_ASSERT_SET(glib_cv_working_bcopy)
1036   if test "$glib_cv_working_bcopy" = "yes"; then
1037     AC_DEFINE(HAVE_WORKING_BCOPY,1,[Have a working bcopy])
1038   fi
1041 # Check for sys_errlist
1042 AC_MSG_CHECKING(for sys_errlist)
1043 AC_TRY_LINK(, [
1044 extern char *sys_errlist[];
1045 extern int sys_nerr;
1046 sys_errlist[sys_nerr-1][0] = 0;
1047 ], glib_ok=yes, glib_ok=no)
1048 AC_MSG_RESULT($glib_ok)
1049 if test "$glib_ok" = "no"; then
1050     AC_DEFINE(NO_SYS_ERRLIST,1,[global 'sys_errlist' not found])
1053 # Check for sys_siglist
1054 AC_MSG_CHECKING(for sys_siglist)
1055 AC_TRY_LINK(, [
1056 extern char *sys_siglist[];
1057 exit (sys_siglist[0]);
1058 ], glib_ok=yes, glib_ok=no)
1059 AC_MSG_RESULT($glib_ok)
1060 if test "$glib_ok" = "no"; then
1061     AC_DEFINE(NO_SYS_SIGLIST,1,[global 'sys_siglist' not found])
1064 # Check for sys_siglist decl (see Tue Jan 19 00:44:24 1999 in changelog)
1065 AC_MSG_CHECKING(for sys_siglist declaration)
1066 AC_TRY_COMPILE([#include <signal.h>], [
1067 strlen (sys_siglist[0]);
1068 ], glib_ok=yes, glib_ok=no)
1069 AC_MSG_RESULT($glib_ok)
1070 if test "$glib_ok" = "no"; then
1071     AC_DEFINE(NO_SYS_SIGLIST_DECL,1,[global 'sys_siglist' not declared])
1074 # Check if <sys/select.h> needs to be included for fd_set
1075 AC_MSG_CHECKING([for fd_set])
1076 AC_TRY_COMPILE([#include <sys/types.h>],
1077         [fd_set readMask, writeMask;], gtk_ok=yes, gtk_ok=no)
1078 if test "$gtk_ok" = "yes"; then
1079     AC_MSG_RESULT([yes, found in sys/types.h])
1080 else
1081     AC_EGREP_HEADER(fd_set, sys/select.h, gtk_ok=yes)
1082     if test "$gtk_ok" = "yes"; then
1083         # *** FIXME: give it a different name
1084         AC_DEFINE(HAVE_SYS_SELECT_H,1,[found fd_set in sys/select.h])
1085         AC_MSG_RESULT([yes, found in sys/select.h])
1086     else
1087         AC_DEFINE(NO_FD_SET,1,[didn't find fd_set])
1088         AC_MSG_RESULT(no)
1089     fi
1092 dnl *** check for sane realloc() ***
1093 AC_CACHE_CHECK([whether realloc (NULL,) will work],glib_cv_sane_realloc,[
1094         AC_TRY_RUN([#include <stdlib.h>
1095         int main() {
1096           return realloc (0, sizeof (int)) == 0;
1097         }],
1098         [glib_cv_sane_realloc=yes],
1099         [glib_cv_sane_realloc=no],
1100         [glib_cv_sane_realloc=yes])
1102 if test x$glib_cv_sane_realloc = xyes; then
1103   AC_DEFINE(REALLOC_0_WORKS,1,[whether realloc (NULL,) works])
1106 dnl Check for nl_langinfo and CODESET
1107 AC_CACHE_CHECK([for nl_langinfo (CODESET)],glib_cv_langinfo_codeset,[
1108         AC_TRY_COMPILE([#include <langinfo.h>],
1109                 [char *codeset = nl_langinfo (CODESET);],
1110                 [glib_cv_langinfo_codeset=yes],
1111                 [glib_cv_langinfo_codeset=no])])
1112 if test x$glib_cv_langinfo_codeset = xyes; then
1113   AC_DEFINE(HAVE_CODESET,1,[Have nl_langinfo (CODESET)])
1116 dnl ****************************************
1117 dnl *** posix_memalign                   ***
1118 dnl ****************************************
1119 AC_MSG_CHECKING(for a compliant posix_memalign() implementation)
1120 AC_CACHE_VAL(glib_cv_compliant_posix_memalign,[
1121     glib_cv_compliant_posix_memalign=0
1122     if test "$ac_cv_func_posix_memalign" = "yes" ; then
1123         AC_TRY_RUN([
1124                 #define _XOPEN_SOURCE 600
1125                 #include <stdlib.h> /* posix_memalign() should be defined here */
1126                 /* some systems break if #include <malloc.h> used */
1127                 static void test_memalign (size_t boundary, size_t size) {
1128                     void *mem = 0;
1129                     if (posix_memalign (&mem, boundary, size) != 0 || !mem)
1130                         exit (1);
1131                     else
1132                       free (mem);
1133                 }
1134                 int main() {
1135                     test_memalign (  128,   128 - 2 * sizeof (void*));
1136                     test_memalign (  256,   256 - 2 * sizeof (void*));
1137                     test_memalign (  512,   512 - 2 * sizeof (void*));
1138                     test_memalign ( 1024,  1024 - 2 * sizeof (void*));
1139                     test_memalign ( 2048,  2048 - 2 * sizeof (void*));
1140                     test_memalign ( 4096,  4096 - 2 * sizeof (void*));
1141                     test_memalign ( 8192,  8192 - 2 * sizeof (void*));
1142                     test_memalign (16384, 16384 - 2 * sizeof (void*));
1143                     test_memalign (32768, 32768 - 2 * sizeof (void*));
1144                     exit (0); /* success */
1145                 }
1146                 ],
1147             [glib_cv_compliant_posix_memalign=1], [], [:])
1148       :
1149     fi
1150     ])
1151 if test "$glib_cv_compliant_posix_memalign" = "1"; then
1152     AC_MSG_RESULT(yes)
1153     AC_DEFINE(POSIX_MEMALIGN_WITH_COMPLIANT_ALLOCS, 1, [define if posix_memalign() can allocate any size])
1154 else
1155     AC_MSG_RESULT(no)
1159 dnl ****************************************
1160 dnl *** strlcpy/strlcat                  ***
1161 dnl ****************************************
1162 # Check for strlcpy
1163 AC_CACHE_CHECK([for OpenBSD strlcpy/strlcat],glib_cv_have_strlcpy,[
1164 AC_TRY_RUN([#include <stdlib.h>
1165 #include <string.h>
1166 int main() {
1167   char p[10];
1168   (void) strlcpy (p, "hi", 10);
1169   if (strlcat (p, "bye", 0) != 3) 
1170     return 1;
1171   return 0;
1172 }], glib_cv_have_strlcpy=yes, 
1173     glib_cv_have_strlcpy=no,
1174     glib_cv_have_strlcpy=no)])
1175 if test "$glib_cv_have_strlcpy" = "yes"; then
1176     AC_DEFINE(HAVE_STRLCPY,1,[Have functions strlcpy and strlcat])
1178   
1180 dnl **********************
1181 dnl *** va_copy checks ***
1182 dnl **********************
1183 dnl we currently check for all three va_copy possibilities, so we get
1184 dnl all results in config.log for bug reports.
1185 AC_CACHE_CHECK([for an implementation of va_copy()],glib_cv_va_copy,[
1186         AC_LINK_IFELSE([#include <stdarg.h>
1187 #include <stdlib.h>
1188         void f (int i, ...) {
1189         va_list args1, args2;
1190         va_start (args1, i);
1191         va_copy (args2, args1);
1192         if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
1193           exit (1);
1194         va_end (args1); va_end (args2);
1195         }
1196         int main() {
1197           f (0, 42);
1198           return 0;
1199         }],
1200         [glib_cv_va_copy=yes],
1201         [glib_cv_va_copy=no])
1203 AC_CACHE_CHECK([for an implementation of __va_copy()],glib_cv___va_copy,[
1204         AC_LINK_IFELSE([#include <stdarg.h>
1205 #include <stdlib.h>
1206         void f (int i, ...) {
1207         va_list args1, args2;
1208         va_start (args1, i);
1209         __va_copy (args2, args1);
1210         if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
1211           exit (1);
1212         va_end (args1); va_end (args2);
1213         }
1214         int main() {
1215           f (0, 42);
1216           return 0;
1217         }],
1218         [glib_cv___va_copy=yes],
1219         [glib_cv___va_copy=no])
1222 if test "x$glib_cv_va_copy" = "xyes"; then
1223   g_va_copy_func=va_copy
1224 else if test "x$glib_cv___va_copy" = "xyes"; then
1225   g_va_copy_func=__va_copy
1229 if test -n "$g_va_copy_func"; then
1230   AC_DEFINE_UNQUOTED(G_VA_COPY,$g_va_copy_func,[A 'va_copy' style function])
1233 AC_CACHE_CHECK([whether va_lists can be copied by value],glib_cv_va_val_copy,[
1234         AC_TRY_RUN([#include <stdarg.h>
1235 #include <stdlib.h> 
1236         void f (int i, ...) {
1237         va_list args1, args2;
1238         va_start (args1, i);
1239         args2 = args1;
1240         if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
1241           exit (1);
1242         va_end (args1); va_end (args2);
1243         }
1244         int main() {
1245           f (0, 42);
1246           return 0;
1247         }],
1248         [glib_cv_va_val_copy=yes],
1249         [glib_cv_va_val_copy=no],
1250         [glib_cv_va_val_copy=yes])
1253 if test "x$glib_cv_va_val_copy" = "xno"; then
1254   AC_DEFINE(G_VA_COPY_AS_ARRAY,1, ['va_lists' cannot be copies as values])
1257 dnl ***********************
1258 dnl *** g_module checks ***
1259 dnl ***********************
1260 G_MODULE_LIBS=
1261 G_MODULE_LIBS_EXTRA=
1262 G_MODULE_PLUGIN_LIBS=
1263 if test x"$glib_native_win32" = xyes; then
1264   dnl No use for this on Win32
1265   G_MODULE_LDFLAGS=
1266 else
1267   export SED
1268   G_MODULE_LDFLAGS=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
1270 dnl G_MODULE_IMPL= don't reset, so cmd-line can override
1271 G_MODULE_NEED_USCORE=0
1272 G_MODULE_BROKEN_RTLD_GLOBAL=0
1273 G_MODULE_HAVE_DLERROR=0
1274 dnl *** force native WIN32 shared lib loader 
1275 if test -z "$G_MODULE_IMPL"; then
1276   case "$host" in
1277   *-*-mingw*|*-*-cygwin*) G_MODULE_IMPL=G_MODULE_IMPL_WIN32 ;;
1278   esac
1280 dnl *** force native AIX library loader
1281 dnl *** dlopen() filepath must be of the form /path/libname.a(libname.so)
1282 if test -z "$G_MODULE_IMPL"; then
1283   case "$host" in
1284   *-*-aix*) G_MODULE_IMPL=G_MODULE_IMPL_AR ;;
1285   esac
1287 dnl *** dlopen() and dlsym() in system libraries
1288 if test -z "$G_MODULE_IMPL"; then
1289         AC_CHECK_FUNC(dlopen,
1290                       [AC_CHECK_FUNC(dlsym,
1291                                      [G_MODULE_IMPL=G_MODULE_IMPL_DL],[])],
1292                       [])
1294 dnl *** load_image (BeOS)
1295 if test -z "$G_MODULE_IMPL" && test "x$glib_native_beos" = "xyes"; then
1296   AC_CHECK_LIB(root, load_image,
1297       [G_MODULE_LIBS="-lbe -lroot -lglib-2.0 "
1298       G_MODULE_LIBS_EXTRA="-L\$(top_builddir_full)/.libs"
1299       G_MODULE_PLUGIN_LIBS="-L\$(top_builddir_full)/gmodule/.libs -lgmodule"
1300       G_MODULE_IMPL=G_MODULE_IMPL_BEOS],
1301       [])
1302 fi   
1303 dnl *** NSLinkModule (dyld) in system libraries (Darwin)
1304 if test -z "$G_MODULE_IMPL"; then
1305         AC_CHECK_FUNC(NSLinkModule,
1306                       [G_MODULE_IMPL=G_MODULE_IMPL_DYLD
1307                        G_MODULE_NEED_USCORE=1],
1308                       [])
1310 dnl *** dlopen() and dlsym() in libdl
1311 if test -z "$G_MODULE_IMPL"; then
1312         AC_CHECK_LIB(dl, dlopen,
1313                      [AC_CHECK_LIB(dl, dlsym,
1314                                    [G_MODULE_LIBS=-ldl
1315                                    G_MODULE_IMPL=G_MODULE_IMPL_DL],[])],
1316                      [])
1318 dnl *** shl_load() in libdld (HP-UX)
1319 if test -z "$G_MODULE_IMPL"; then
1320         AC_CHECK_LIB(dld, shl_load,
1321                 [G_MODULE_LIBS=-ldld
1322                 G_MODULE_IMPL=G_MODULE_IMPL_DLD],
1323                 [])
1325 dnl *** additional checks for G_MODULE_IMPL_DL
1326 if test "$G_MODULE_IMPL" = "G_MODULE_IMPL_DL"; then
1327         LIBS_orig="$LIBS"
1328         LDFLAGS_orig="$LDFLAGS"
1329         LIBS="$G_MODULE_LIBS $LIBS"
1330         LDFLAGS="$LDFLAGS $G_MODULE_LDFLAGS"
1331 dnl *** check for OSF1/5.0 RTLD_GLOBAL brokenness
1332         echo "void glib_plugin_test(void) { }" > plugin.c
1333         ${SHELL} ./libtool --mode=compile ${CC} -shared \
1334                 -export-dynamic -o plugin.o plugin.c 2>&1 >/dev/null
1335         AC_CACHE_CHECK([for RTLD_GLOBAL brokenness],
1336                 glib_cv_rtldglobal_broken,[
1337                 AC_TRY_RUN([
1338 #include <dlfcn.h>
1339 #ifndef RTLD_GLOBAL
1340 #  define RTLD_GLOBAL 0
1341 #endif
1342 #ifndef RTLD_LAZY
1343 #  define RTLD_LAZY 0
1344 #endif
1345 int glib_plugin_test;
1346 int main () {
1347     void *handle, *global, *local;
1348     global = &glib_plugin_test;
1349     handle = dlopen ("./.libs/plugin.o", RTLD_GLOBAL | RTLD_LAZY);
1350     if (!handle) return 0;
1351     local = dlsym (handle, "glib_plugin_test");
1352     return global == local;
1353 }                       ],
1354                         [glib_cv_rtldglobal_broken=no],
1355                         [glib_cv_rtldglobal_broken=yes],
1356                         [glib_cv_rtldglobal_broken=no])
1357                 rm -f plugin.c plugin.o plugin.lo .libs/plugin.o
1358                 rmdir .libs 2>/dev/null
1359         ])
1360         if test "x$glib_cv_rtldglobal_broken" = "xyes"; then
1361                 G_MODULE_BROKEN_RTLD_GLOBAL=1
1362         else
1363                 G_MODULE_BROKEN_RTLD_GLOBAL=0
1364         fi
1365 dnl *** check whether we need preceeding underscores
1366         AC_CACHE_CHECK([for preceeding underscore in symbols],
1367                 glib_cv_uscore,[
1368                 AC_TRY_RUN([#include <dlfcn.h>
1369                 int glib_underscore_test (void) { return 42; }
1370                 int main() {
1371                   void *f1 = (void*)0, *f2 = (void*)0, *handle;
1372                   handle = dlopen ((void*)0, 0);
1373                   if (handle) {
1374                     f1 = dlsym (handle, "glib_underscore_test");
1375                     f2 = dlsym (handle, "_glib_underscore_test");
1376                   } return (!f2 || f1);
1377                 }],
1378                         [glib_cv_uscore=yes],
1379                         [glib_cv_uscore=no],
1380                         [])
1381                 rm -f plugin.c plugin.$ac_objext plugin.lo
1382         ])
1383         GLIB_ASSERT_SET(glib_cv_uscore)
1384         if test "x$glib_cv_uscore" = "xyes"; then
1385                 G_MODULE_NEED_USCORE=1
1386         else
1387                 G_MODULE_NEED_USCORE=0
1388         fi
1390         LDFLAGS="$LDFLAGS_orig"
1391 dnl *** check for having dlerror()
1392         AC_CHECK_FUNC(dlerror,
1393                 [G_MODULE_HAVE_DLERROR=1],
1394                 [G_MODULE_HAVE_DLERROR=0])
1395         LIBS="$LIBS_orig"
1397 dnl *** done, have we got an implementation?
1398 if test -z "$G_MODULE_IMPL"; then
1399         G_MODULE_IMPL=0
1400         G_MODULE_SUPPORTED=false
1401 else
1402         G_MODULE_SUPPORTED=true
1405 AC_MSG_CHECKING(for the suffix of shared libraries)
1406 export SED
1407 shrext_cmds=`./libtool --config | grep '^shrext_cmds='`
1408 eval $shrext_cmds
1409 module=yes eval std_shrext=$shrext_cmds
1410 # chop the initial dot
1411 glib_gmodule_suffix=`echo $std_shrext | sed 's/^\.//'`
1412 AC_MSG_RESULT(.$glib_gmodule_suffix)
1413 # any reason it may fail?
1414 if test "x$glib_gmodule_suffix" = x; then
1415         AC_MSG_ERROR(Cannot determine shared library suffix from libtool)
1418 AC_SUBST(G_MODULE_SUPPORTED)
1419 AC_SUBST(G_MODULE_IMPL)
1420 AC_SUBST(G_MODULE_LIBS)
1421 AC_SUBST(G_MODULE_LIBS_EXTRA)
1422 AC_SUBST(G_MODULE_PLUGIN_LIBS)
1423 AC_SUBST(G_MODULE_LDFLAGS)
1424 AC_SUBST(G_MODULE_HAVE_DLERROR)
1425 AC_SUBST(G_MODULE_BROKEN_RTLD_GLOBAL)
1426 AC_SUBST(G_MODULE_NEED_USCORE)
1427 AC_SUBST(GLIB_DEBUG_FLAGS)
1429 dnl **********************
1430 dnl *** g_spawn checks ***
1431 dnl **********************
1433 AC_MSG_CHECKING(for gspawn implementation)
1434 case "$host" in
1435   *-*-mingw*)
1436     GSPAWN=gspawn-win32.lo
1437     ;;
1438   *)
1439     GSPAWN=gspawn.lo
1440     ;;    
1441 esac
1442 AC_MSG_RESULT($GSPAWN)
1443 AC_SUBST(GSPAWN)
1445 dnl *************************
1446 dnl *** GIOChannel checks ***
1447 dnl *************************
1449 AC_MSG_CHECKING(for GIOChannel implementation)
1450 case "$host" in
1451   *-*-mingw*)
1452     GIO=giowin32.lo
1453     ;;
1454   *)
1455     GIO=giounix.lo
1456     ;;    
1457 esac
1458 AC_MSG_RESULT($GIO)
1459 AC_SUBST(GIO)
1461 dnl *********************************
1462 dnl *** Directory for GIO modules ***
1463 dnl *********************************
1465 AC_ARG_WITH(gio-module-dir,
1466            [AC_HELP_STRING([--with-gio-module-dir=PATH],
1467                            [Load gio modules from this directory [LIBDIR/gio/modules]])],
1468            [],
1469            [with_gio_module_dir='${libdir}/gio/modules'])
1470 GIO_MODULE_DIR=$with_gio_module_dir
1471 AC_SUBST(GIO_MODULE_DIR)
1473 dnl **********************************
1474 dnl *** Check for libselinux (GIO) ***
1475 dnl **********************************
1476 AC_ARG_ENABLE(selinux, [  --disable-selinux       build without selinux support])
1477 msg_selinux=no
1478 SELINUX_LIBS=
1479 if test "x$enable_selinux" != "xno"; then
1481  AC_CHECK_LIB(selinux, is_selinux_enabled,
1482    [AC_CHECK_HEADERS(selinux/selinux.h,
1483      [AC_SEARCH_LIBS(lgetfilecon_raw, selinux, 
1484        [AC_DEFINE(HAVE_SELINUX, 1, [Define to 1 if libselinux is available])
1485         SELINUX_LIBS="-lselinux"
1486         msg_selinux=yes])
1487      ])
1488    ])
1490 AC_SUBST(SELINUX_LIBS)
1492 dnl *****************************
1493 dnl ** Check for inotify (GIO) **
1494 dnl *****************************
1495 inotify_support=no
1496 AC_CHECK_HEADERS([sys/inotify.h],
1498         inotify_support=yes
1501 AM_CONDITIONAL(HAVE_INOTIFY, [test "$inotify_support" = "yes"])
1503 dnl *********************************
1504 dnl ** Check for Solaris FEN (GIO) **
1505 dnl *********************************
1506 fen_support=no
1507 AC_COMPILE_IFELSE([ 
1508 #include <port.h> 
1509 #ifndef PORT_SOURCE_FILE 
1510 #error "Please upgrade to Nevada 72 or above to suppoert FEN" 
1511 #endif 
1512 int main() { return 0; } ],
1514         fen_support=yes
1517 AM_CONDITIONAL(HAVE_FEN, [test "$fen_support" = "yes"])
1519 dnl ****************************
1520 dnl *** Checks for FAM (GIO) ***
1521 dnl ****************************
1523 should_disable_fam=no
1525 AC_ARG_ENABLE(fam, [  --disable-fam          build without enabling fam for file system monitoring],
1526                          [
1527                                 if test "x$enable_fam" = "xno"; then
1528                                         should_disable_fam=yes
1529                                         echo "Not building FAM support"
1530                                 fi
1531                          ]
1532                          )
1533 fam_support=no
1534 FAM_LIBS=
1535 if test "x$should_disable_fam" = "xno"; then
1536 AC_CHECK_LIB(fam, FAMOpen,
1537   [AC_CHECK_HEADERS(fam.h,
1538     [AC_DEFINE(HAVE_FAM, [], [Define if we have FAM])
1539      AC_CHECK_LIB(fam, FAMNoExists,
1540                   AC_DEFINE(HAVE_FAM_NO_EXISTS, [], [Define if we have FAMNoExists in fam]))
1541      FAM_LIBS="-lfam"]
1542      fam_support=yes,
1543     AC_MSG_WARN(*** FAM support will not be built (header files not found) ***))],
1544   AC_MSG_WARN(*** FAM support will not be built (FAM library not found) ***))
1545 AC_SUBST(FAM_LIBS)
1547 AM_CONDITIONAL(HAVE_FAM, [test "$fam_support" = "yes"])
1550 dnl *****************************
1551 dnl *** Check for xattr (GIO) ***
1552 dnl *****************************
1553 AC_ARG_ENABLE(xattr, [  --disable-xattr           build without xattr support])
1554 msg_xattr=no
1555 XATTR_LIBS=
1556 if test "x$enable_xattr" != "xno"; then
1558 dnl either glibc or libattr can provide xattr support
1560 dnl for both of them, we check for getxattr being in
1561 dnl the library and a valid xattr header.
1563 dnl try glibc
1564  AC_CHECK_LIB(c, getxattr,
1565    [AC_CHECK_HEADERS(sys/xattr.h,
1566      [AC_DEFINE(HAVE_XATTR, 1, [Define to 1 if xattr is available])
1567       msg_xattr=yes])
1568    ])
1570   if test "x$msg_xattr" != "xyes"; then
1571 dnl   failure. try libattr
1572    AC_CHECK_LIB(attr, getxattr,
1573       [AC_CHECK_HEADERS(attr/xattr.h,
1574        [AC_DEFINE(HAVE_XATTR, 1, [Define to 1 if xattr is available])
1575         XATTR_LIBS="-lattr"
1576         msg_xattr=yes])
1577       ])
1578   fi
1580   if test "x$msg_xattr" = "xyes"; then
1581     AC_MSG_CHECKING([for XATTR_NOFOLLOW])
1582     AC_TRY_COMPILE([
1583       #include <stdio.h>
1584       #ifdef HAVE_SYS_TYPES_H
1585       #include <sys/types.h>
1586       #endif
1587       #ifdef HAVE_SYS_XATTR_H
1588       #include <sys/xattr.h>
1589       #elif HAVE_ATTR_XATTR_H
1590       #include <attr/xattr.h>
1591       #endif
1592     ],
1593     [ssize_t len = getxattr("", "", NULL, 0, 0, XATTR_NOFOLLOW);],
1594     [
1595       AC_DEFINE([HAVE_XATTR_NOFOLLOW], [1], [Define to 1 if xattr API uses XATTR_NOFOLLOW])
1596       AC_MSG_RESULT([yes])
1597     ],
1598     [AC_MSG_RESULT([no])]
1599     )
1600   fi
1603 AC_SUBST(XATTR_LIBS)
1605 dnl ****************************************
1606 dnl *** platform dependent source checks ***
1607 dnl ****************************************
1609 AC_MSG_CHECKING(for platform-dependent source)
1610 case "$host" in
1611   *-*-cygwin*|*-*-mingw*)
1612     PLATFORMDEP=gwin32.lo
1613     ;;
1614   *)
1615     PLATFORMDEP=
1616     ;;    
1617 esac
1618 AC_MSG_RESULT($PLATFORMDEP)
1619 AC_SUBST(PLATFORMDEP)
1621 AC_MSG_CHECKING([whether to compile timeloop])
1622 case "$host" in
1623   *-*-cygwin*|*-*-mingw*|*-*-minix)
1624     enable_timeloop=no
1625     ;;
1626   *)
1627     enable_timeloop=yes
1628     ;;    
1629 esac
1630 AC_MSG_RESULT($enable_timeloop)
1631 AM_CONDITIONAL(ENABLE_TIMELOOP, test x$enable_timeloop = xyes)
1633 AC_MSG_CHECKING([if building for some Win32 platform])
1634 case "$host" in
1635   *-*-mingw*|*-*-cygwin*)
1636     platform_win32=yes
1637     ;;
1638   *)
1639     platform_win32=no
1640     ;;
1641 esac
1642 AC_MSG_RESULT($platform_win32)
1643 AM_CONDITIONAL(PLATFORM_WIN32, test x$platform_win32 = xyes)
1645 dnl ***********************
1646 dnl *** g_thread checks ***
1647 dnl ***********************
1649 AC_ARG_WITH(threads,
1650            [AC_HELP_STRING([--with-threads=@<:@none/posix/dce/win32@:>@],
1651                            [specify a thread implementation to use])],
1652            [if test "x$with_threads" = x; then
1653                 want_threads=yes
1654             else
1655                 want_threads=$with_threads
1656             fi],
1657            [want_threads=yes])
1658 if test "x$enable_threads" = "xno"; then
1659         want_threads=no
1662 dnl error and warning message
1663 dnl *************************
1665 THREAD_NO_IMPLEMENTATION="You do not have any known thread system on your
1666                 computer. GLib will not have a default thread implementation."
1668 FLAG_DOES_NOT_WORK="I can't find the MACRO to enable thread safety on your
1669                 platform (normally it's "_REENTRANT"). I'll not use any flag on
1670                 compilation now, but then your programs might not work.
1671                 Please provide information on how it is done on your system."
1673 LIBS_NOT_FOUND_1="I can't find the libraries for the thread implementation
1674                 "
1676 LIBS_NOT_FOUND_2=". Please choose another thread implementation or
1677                 provide information on your thread implementation.
1678                 You can also run 'configure --disable-threads' 
1679                 to compile without thread support."
1681 FUNC_NO_GETPWUID_R="the 'g_get_(user_name|real_name|home_dir|tmp_dir)'
1682                 functions will not be MT-safe during their first call because
1683                 there is no working 'getpwuid_r' on your system."
1685 FUNC_NO_LOCALTIME_R="the 'g_date_set_time' function will not be MT-safe
1686                 because there is no 'localtime_r' on your system."
1688 POSIX_NO_YIELD="I can not find a yield functions for your platform. A rather
1689                 crude surrogate will be used. If you happen to know a 
1690                 yield function for your system, please inform the GLib 
1691                 developers."
1693 POSIX_NO_PRIORITIES="I can not find the minimal and maximal priorities for 
1694                 threads on your system. Thus threads can only have the default 
1695                 priority. If you happen to know these main/max
1696                 priorities, please inform the GLib developers."
1698 AIX_COMPILE_INFO="AIX's C compiler needs to be called by a different name, when
1699                 linking threaded applications. As GLib cannot do that 
1700                 automatically, you will get an linkg error everytime you are 
1701                 not using the right compiler. In that case you have to relink 
1702                 with the right compiler. Ususally just '_r' is appended 
1703                 to the compiler name."
1705 dnl determination of thread implementation
1706 dnl ***************************************
1708 # have_threads=no   means no thread support
1709 # have_threads=none means no default thread implementation
1711 have_threads=no
1712 if test "x$want_threads" = xyes || test "x$want_threads" = xposix \
1713                                 || test "x$want_threads" = xdce; then
1714         # -D_POSIX4_DRAFT_SOURCE -D_POSIX4A_DRAFT10_SOURCE is for DG/UX
1715         # -U_OSF_SOURCE is for Digital UNIX 4.0d
1716         GTHREAD_COMPILE_IMPL_DEFINES="-D_POSIX4_DRAFT_SOURCE -D_POSIX4A_DRAFT10_SOURCE -U_OSF_SOURCE"
1717         glib_save_CPPFLAGS="$CPPFLAGS"
1718         CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
1719         if test "x$have_threads" = xno; then
1720                 AC_TRY_COMPILE([#include <pthread.h>],
1721                         [pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;],
1722                         have_threads=posix)
1723         fi
1724         if test "x$have_threads" = xno; then
1725                 AC_TRY_COMPILE([#include <pthread.h>],
1726                         [pthread_mutex_t m; 
1727                          pthread_mutex_init (&m, pthread_mutexattr_default);],
1728                         have_threads=dce)
1729         fi
1730         # Tru64Unix requires -pthread to find pthread.h. See #103020
1731         CPPFLAGS="$CPPFLAGS -pthread"
1732         if test "x$have_threads" = xno; then
1733         AC_TRY_COMPILE([#include <pthread.h>],
1734                        [pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;],
1735                        have_threads=posix)
1736         fi
1737         CPPFLAGS="$glib_save_CPPFLAGS"
1739 if test "x$want_threads" = xyes || test "x$want_threads" = xwin32; then
1740         case $host in
1741                 *-*-mingw*)
1742                 have_threads=win32
1743                 ;;
1744         esac
1746 if test "x$want_threads" = xnone; then
1747         have_threads=none
1750 AC_MSG_CHECKING(for thread implementation)
1752 if test "x$have_threads" = xno && test "x$want_threads" != xno; then
1753         AC_MSG_RESULT(none available)
1754         AC_MSG_WARN($THREAD_NO_IMPLEMENTATION)
1755 else
1756         AC_MSG_RESULT($have_threads)
1760 dnl determination of G_THREAD_CFLAGS
1761 dnl ********************************
1763 G_THREAD_LIBS=
1764 G_THREAD_LIBS_EXTRA=
1765 G_THREAD_CFLAGS=
1768 dnl Test program for basic POSIX threads functionality
1770 m4_define([glib_thread_test],[
1771 #include <pthread.h> 
1772 int check_me = 0;
1773 void* func(void* data) {check_me = 42; return &check_me;}
1774 int main()
1775  { pthread_t t; 
1776    void *ret;
1777    pthread_create (&t, $1, func, 0);
1778    pthread_join (t, &ret);
1779    return (check_me != 42 || ret != &check_me);
1783 dnl Test program for sched_get_priority_min()
1785 m4_define([glib_sched_priority_test],[
1786 #include <sched.h>
1787 #include <errno.h>
1788 int main() {
1789     errno = 0;
1790     return sched_get_priority_min(SCHED_OTHER)==-1
1791            && errno != 0;
1794 if test x"$have_threads" != xno; then
1796   if test x"$have_threads" = xposix; then
1797     # First we test for posix, whether -pthread or -pthreads do the trick as 
1798     # both CPPFLAG and LIBS. 
1799     # One of them does for most gcc versions and some other platforms/compilers
1800     # too and could be considered as the canonical way to go. 
1801     case $host in
1802       *-*-cygwin*|*-*-darwin*)
1803          # skip cygwin and darwin -pthread or -pthreads test
1804          ;;
1805       *-solaris*)
1806         # These compiler/linker flags work with both Sun Studio and gcc
1807         # Sun Studio expands -mt to -D_REENTRANT and -lthread
1808         # gcc expands -pthreads to -D_REENTRANT -D_PTHREADS -lpthread
1809         G_THREAD_CFLAGS="-D_REENTRANT -D_PTHREADS"
1810         G_THREAD_LIBS="-lpthread -lthread"
1811         ;;
1812       *)
1813         for flag in pthread pthreads mt; do
1814           glib_save_CFLAGS="$CFLAGS"
1815           CFLAGS="$CFLAGS -$flag"
1816           AC_TRY_RUN(glib_thread_test(0),
1817                      glib_flag_works=yes,
1818                      glib_flag_works=no,
1819                      [AC_LINK_IFELSE(glib_thread_test(0),
1820                                      glib_flag_works=yes,
1821                                      glib_flag_works=no)])
1822           CFLAGS="$glib_save_CFLAGS"
1823           if test $glib_flag_works = yes ; then
1824              G_THREAD_CFLAGS=-$flag
1825              G_THREAD_LIBS=-$flag
1826              break;
1827           fi
1828         done
1829          ;;
1830     esac 
1831   fi
1833   if test x"$G_THREAD_CFLAGS" = x; then
1835     # The canonical -pthread[s] does not work. Try something different.
1837     case $host in
1838         *-aix*)
1839                 if test x"$GCC" = xyes; then
1840                         # GCC 3.0 and above needs -pthread. 
1841                         # Should be coverd by the case above.
1842                         # GCC 2.x and below needs -mthreads
1843                         G_THREAD_CFLAGS="-mthreads"             
1844                         G_THREAD_LIBS=$G_THREAD_CFLAGS
1845                 else 
1846                         # We are probably using the aix compiler. Normaly a 
1847                         # program would have to be compiled with the _r variant
1848                         # of the corresponding compiler, but we as GLib cannot 
1849                         # do that: but the good news is that for compiling the
1850                         # only difference is the added -D_THREAD_SAFE compile 
1851                         # option. This is according to the "C for AIX User's 
1852                         # Guide".
1853                         G_THREAD_CFLAGS="-D_THREAD_SAFE"
1854                 fi
1855                 ;;
1856         *-dg-dgux*)  # DG/UX
1857                 G_THREAD_CFLAGS="-D_REENTRANT -D_POSIX4A_DRAFT10_SOURCE"
1858                 ;;
1859         *-osf*)
1860                 # So we are using dce threads. posix threads are already 
1861                 # catched above.
1862                 G_THREAD_CFLAGS="-threads"
1863                 G_THREAD_LIBS=$G_THREAD_CFLAGS
1864                 ;;
1865         *-sysv5uw7*) # UnixWare 7 
1866                 # We are not using gcc with -pthread. Catched above.
1867                 G_THREAD_CFLAGS="-Kthread"
1868                 G_THREAD_LIBS=$G_THREAD_CFLAGS
1869                 ;;
1870         *-mingw*)
1871                 # No flag needed when using MSVCRT.DLL
1872                 G_THREAD_CFLAGS=""
1873                 ;;
1874         *)
1875                 G_THREAD_CFLAGS="-D_REENTRANT" # good default guess otherwise
1876                 ;;
1877     esac
1879   fi
1881     # if we are not finding the localtime_r function, then we probably are
1882     # not using the proper multithread flag
1884     glib_save_CPPFLAGS="$CPPFLAGS"
1885     CPPFLAGS="$CPPFLAGS $G_THREAD_CFLAGS"
1887     # First we test, whether localtime_r is declared in time.h
1888     # directly. Then we test whether a macro localtime_r exists, in
1889     # which case localtime_r in the test program is replaced and thus
1890     # if we still find localtime_r in the output, it is not defined as 
1891     # a macro.
1893     AC_EGREP_CPP([[^a-zA-Z1-9_]localtime_r[^a-zA-Z1-9_]], [#include <time.h>], ,
1894       [AC_EGREP_CPP([[^a-zA-Z1-9_]localtime_r[^a-zA-Z1-9_]], [#include <time.h> 
1895                                                            localtime_r(a,b)],
1896                    AC_MSG_WARN($FLAG_DOES_NOT_WORK))])
1898     CPPFLAGS="$glib_save_CPPFLAGS"
1900     AC_MSG_CHECKING(thread related cflags)
1901     AC_MSG_RESULT($G_THREAD_CFLAGS)
1902     CPPFLAGS="$CPPFLAGS $G_THREAD_CFLAGS"
1905 dnl determination of G_THREAD_LIBS
1906 dnl ******************************
1908 mutex_has_default=no
1909 case $have_threads in
1910         posix|dce)
1911           glib_save_CPPFLAGS="$CPPFLAGS"
1912           CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
1913           if test x"$G_THREAD_LIBS" = x; then
1914             case $host in
1915               *-aix*)
1916                 # We are not using gcc (would have set G_THREAD_LIBS) and thus 
1917                 # probably using the aix compiler.
1918                 AC_MSG_WARN($AIX_COMPILE_INFO)
1919                 ;;
1920               *)
1921                 G_THREAD_LIBS=error
1922                 glib_save_LIBS="$LIBS"
1923                 for thread_lib in "" pthread pthread32 pthreads thread dce; do
1924                         if test x"$thread_lib" = x; then
1925                                 add_thread_lib=""
1926                                 IN=""
1927                         else
1928                                 add_thread_lib="-l$thread_lib"
1929                                 IN=" in -l$thread_lib"
1930                         fi
1931                         if test x"$have_threads" = xposix; then
1932                                 defattr=0
1933                         else
1934                                 defattr=pthread_attr_default
1935                         fi
1936                         
1937                         LIBS="$add_thread_lib $glib_save_LIBS"
1938                         
1939                         AC_MSG_CHECKING(for pthread_create/pthread_join$IN)
1940                         AC_TRY_RUN(glib_thread_test($defattr),
1941                                    glib_result=yes,
1942                                    glib_result=no,
1943                                    [AC_LINK_IFELSE(glib_thread_test($defattr),
1944                                                    glib_result=yes,
1945                                                    glib_result=no)])
1946                         AC_MSG_RESULT($glib_result)
1947                         
1948                         if test "$glib_result" = "yes" ; then
1949                           G_THREAD_LIBS="$add_thread_lib"
1950                           break
1951                         fi
1952                 done
1953                 if test "x$G_THREAD_LIBS" = xerror; then
1954                   AC_MSG_ERROR($LIBS_NOT_FOUND_1$have_threads$LIBS_NOT_FOUND_2)
1955                 fi 
1956                 LIBS="$glib_save_LIBS"
1957                 ;;
1958             esac
1959           fi
1961           glib_save_LIBS="$LIBS"
1962           for thread_lib in "" rt rte; do
1963             if test x"$thread_lib" = x; then
1964               add_thread_lib=""
1965               IN=""
1966             else
1967               add_thread_lib="-l$thread_lib"
1968               IN=" in -l$thread_lib"
1969             fi
1970             LIBS="$add_thread_lib $glib_save_LIBS"
1971             
1972             AC_MSG_CHECKING(for sched_get_priority_min$IN)
1973             AC_TRY_RUN(glib_sched_priority_test,
1974                        glib_result=yes,
1975                        glib_result=no,
1976                        [AC_LINK_IFELSE(glib_sched_priority_test,
1977                                        glib_result=yes,
1978                                        glib_result=no)])
1979             AC_MSG_RESULT($glib_result)
1981             if test "$glib_result" = "yes" ; then           
1982                G_THREAD_LIBS="$G_THREAD_LIBS $add_thread_lib"
1983                posix_priority_min="sched_get_priority_min(SCHED_OTHER)"
1984                posix_priority_max="sched_get_priority_max(SCHED_OTHER)"
1985                break
1986             fi
1987           done
1988           LIBS="$glib_save_LIBS"
1989           mutex_has_default=yes
1990           mutex_default_type='pthread_mutex_t'
1991           mutex_default_init='PTHREAD_MUTEX_INITIALIZER'
1992           mutex_header_file='pthread.h'
1993           if test "x$have_threads" = "xposix"; then
1994             g_threads_impl="POSIX"
1995           else
1996             g_threads_impl="DCE"
1997             have_threads="posix"
1998           fi
1999           AC_SUBST(GTHREAD_COMPILE_IMPL_DEFINES)
2000           CPPFLAGS="$glib_save_CPPFLAGS"
2001           ;;
2002         win32)
2003            g_threads_impl="WIN32"
2004            ;;
2005         none|no)
2006            g_threads_impl="NONE"
2007            ;;
2008         *)
2009            g_threads_impl="NONE"
2010            G_THREAD_LIBS=error
2011            ;;
2012 esac
2014 if test "x$G_THREAD_LIBS" = xerror; then
2015         AC_MSG_ERROR($LIBS_NOT_FOUND_1$have_threads$LIBS_NOT_FOUND_2)
2018 case $host in
2019   *-*-beos*)
2020     G_THREAD_LIBS="-lbe -lroot -lglib-2.0 "
2021     G_THREAD_LIBS_EXTRA="-L\$(top_builddir_full)/.libs"
2022     ;;
2023   *)
2024     ;;
2025 esac
2027 AC_MSG_CHECKING(thread related libraries)
2028 AC_MSG_RESULT($G_THREAD_LIBS)
2030 dnl check for mt safe function variants and some posix functions
2031 dnl ************************************************************
2033 if test x"$have_threads" != xno; then
2034         glib_save_LIBS="$LIBS"
2035         # we are not doing the following for now, as this might require glib 
2036         # to always be linked with the thread libs on some platforms. 
2037         # LIBS="$LIBS $G_THREAD_LIBS"
2038         AC_CHECK_FUNCS(localtime_r gmtime_r)
2039         if test "$ac_cv_header_pwd_h" = "yes"; then
2040                 AC_CACHE_CHECK([for posix getpwuid_r],
2041                         ac_cv_func_posix_getpwuid_r,
2042                         [AC_TRY_RUN([
2043 #include <errno.h>
2044 #include <pwd.h>
2045 int main () { 
2046     char buffer[10000];
2047     struct passwd pwd, *pwptr = &pwd;
2048     int error;
2049     errno = 0;
2050     error = getpwuid_r (0, &pwd, buffer, 
2051                         sizeof (buffer), &pwptr);
2052    return (error < 0 && errno == ENOSYS) 
2053            || error == ENOSYS; 
2054 }                               ],
2055                                 [ac_cv_func_posix_getpwuid_r=yes],
2056                                 [ac_cv_func_posix_getpwuid_r=no])])
2057                 GLIB_ASSERT_SET(ac_cv_func_posix_getpwuid_r)
2058                 if test "$ac_cv_func_posix_getpwuid_r" = yes; then
2059                         AC_DEFINE(HAVE_POSIX_GETPWUID_R,1,
2060                                 [Have POSIX function getpwuid_r])
2061                 else
2062                         AC_CACHE_CHECK([for nonposix getpwuid_r],
2063                                 ac_cv_func_nonposix_getpwuid_r,
2064                                 [AC_TRY_LINK([#include <pwd.h>],
2065                                         [char buffer[10000];
2066                                         struct passwd pwd;
2067                                         getpwuid_r (0, &pwd, buffer, 
2068                                                         sizeof (buffer));],
2069                                         [ac_cv_func_nonposix_getpwuid_r=yes],
2070                                         [ac_cv_func_nonposix_getpwuid_r=no])])
2071                         GLIB_ASSERT_SET(ac_cv_func_nonposix_getpwuid_r)
2072                         if test "$ac_cv_func_nonposix_getpwuid_r" = yes; then
2073                                 AC_DEFINE(HAVE_NONPOSIX_GETPWUID_R,1,
2074                                         [Have non-POSIX function getpwuid_r])
2075                         fi
2076                 fi
2077         fi
2078         if test "$ac_cv_header_grp_h" = "yes"; then
2079                 AC_CACHE_CHECK([for posix getgrgid_r],
2080                         ac_cv_func_posix_getgrgid_r,
2081                         [AC_TRY_RUN([
2082 #include <errno.h>
2083 #include <grp.h>
2084 int main () { 
2085     char buffer[10000];
2086     struct group grp, *grpptr = &grp;
2087     int error;
2088     errno = 0;
2089     error = getgrgid_r (0, &grp, buffer, 
2090                         sizeof (buffer), &grpptr);
2091    return (error < 0 && errno == ENOSYS) 
2092            || error == ENOSYS; 
2093 }                              ],
2094                                [ac_cv_func_posix_getgrgid_r=yes],
2095                                [ac_cv_func_posix_getgrgid_r=no])])
2096                 GLIB_ASSERT_SET(ac_cv_func_posix_getgrgid_r)
2097                 if test "$ac_cv_func_posix_getgrgid_r" = yes; then
2098                         AC_DEFINE(HAVE_POSIX_GETGRGID_R,1,
2099                                 [Have POSIX function getgrgid_r])
2100                 else
2101                         AC_CACHE_CHECK([for nonposix getgrgid_r],
2102                                 ac_cv_func_nonposix_getgrgid_r,
2103                                 [AC_TRY_LINK([#include <grp.h>],
2104                                         [char buffer[10000];
2105                                         struct group grp;       
2106                                         getgrgid_r (0, &grp, buffer, 
2107                                         sizeof (buffer));],
2108                                 [ac_cv_func_nonposix_getgrgid_r=yes],
2109                                 [ac_cv_func_nonposix_getgrgid_r=no])])
2110                         GLIB_ASSERT_SET(ac_cv_func_nonposix_getgrgid_r)
2111                         if test "$ac_cv_func_nonposix_getgrgid_r" = yes; then
2112                                 AC_DEFINE(HAVE_NONPOSIX_GETGRGID_R,1,
2113                                         [Have non-POSIX function getgrgid_r])
2114                         fi
2115                 fi
2116         fi
2117         LIBS="$G_THREAD_LIBS $LIBS"
2118         if test x"$have_threads" = xposix; then
2119                 glib_save_CPPFLAGS="$CPPFLAGS"
2120                 CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
2121                 dnl we might grow sizeof(pthread_t) later on, so use a dummy name here
2122                 GLIB_SIZEOF([#include <pthread.h>], pthread_t, system_thread)
2123                 # This is not AC_CHECK_FUNC to also work with function
2124                 # name mangling in header files.
2125                 AC_MSG_CHECKING(for pthread_attr_setstacksize)
2126                 AC_TRY_LINK([#include <pthread.h>],
2127                         [pthread_attr_t t; pthread_attr_setstacksize(&t,0)],
2128                         [AC_MSG_RESULT(yes)
2129                         AC_DEFINE(HAVE_PTHREAD_ATTR_SETSTACKSIZE,1,
2130                                   [Have function pthread_attr_setstacksize])],
2131                         [AC_MSG_RESULT(no)])
2132                 AC_MSG_CHECKING(for minimal/maximal thread priority)
2133                 if test x"$posix_priority_min" = x; then
2134                         AC_EGREP_CPP(PX_PRIO_MIN,[#include <pthread.h>
2135                                 PX_PRIO_MIN],,[
2136                                 posix_priority_min=PX_PRIO_MIN
2137                                 posix_priority_max=PX_PRIO_MAX])
2138                 fi
2139                 if test x"$posix_priority_min" = x; then
2140                         # AIX
2141                         AC_EGREP_CPP(PTHREAD_PRIO_MIN,[#include <pthread.h>
2142                                 PTHREAD_PRIO_MIN],,[
2143                                 posix_priority_min=PTHREAD_PRIO_MIN
2144                                 posix_priority_max=PTHREAD_PRIO_MAX])
2145                 fi
2146                 if test x"$posix_priority_min" = x; then
2147                         AC_EGREP_CPP(PRI_OTHER_MIN,[#include <pthread.h>
2148                                 PRI_OTHER_MIN],,[
2149                                 posix_priority_min=PRI_OTHER_MIN        
2150                                 posix_priority_max=PRI_OTHER_MAX])
2151                 fi
2152                 if test x"$posix_priority_min" = x; then
2153                         AC_MSG_RESULT(none found)
2154                         AC_MSG_WARN($POSIX_NO_PRIORITIES)
2155                         posix_priority_min=-1
2156                         posix_priority_max=-1
2157                 else
2158                         AC_MSG_RESULT($posix_priority_min/$posix_priority_max)
2159                         AC_MSG_CHECKING(for pthread_setschedparam)
2160                         AC_TRY_LINK([#include <pthread.h>],
2161                           [pthread_t t; pthread_setschedparam(t, 0, NULL)],
2162                           [AC_MSG_RESULT(yes)
2163                         AC_DEFINE_UNQUOTED(POSIX_MIN_PRIORITY,$posix_priority_min,[Minimum POSIX RT priority])
2164                            AC_DEFINE_UNQUOTED(POSIX_MAX_PRIORITY,$posix_priority_max,[Maximum POSIX RT priority])],
2165                           [AC_MSG_RESULT(no)
2166                            AC_MSG_WARN($POSIX_NO_PRIORITIES)])
2167                 fi
2168                 posix_yield_func=none
2169                 AC_MSG_CHECKING(for posix yield function)
2170                 for yield_func in sched_yield pthread_yield_np pthread_yield \
2171                                                         thr_yield; do
2172                         AC_TRY_LINK([#include <pthread.h>],
2173                                 [$yield_func()],
2174                                 [posix_yield_func="$yield_func"
2175                                 break])
2176                 done            
2177                 if test x"$posix_yield_func" = xnone; then
2178                         AC_MSG_RESULT(none found)
2179                         AC_MSG_WARN($POSIX_NO_YIELD)
2180                         posix_yield_func="g_usleep(1000)"
2181                 else
2182                         AC_MSG_RESULT($posix_yield_func)
2183                         posix_yield_func="$posix_yield_func()"
2184                 fi
2185                 AC_DEFINE_UNQUOTED(POSIX_YIELD_FUNC,$posix_yield_func,[The POSIX RT yield function])
2186                 CPPFLAGS="$glib_save_CPPFLAGS"
2187            
2188         elif test x"$have_threads" = xwin32; then
2189                 # It's a pointer to a private struct
2190                 GLIB_SIZEOF(,struct _GThreadData *, system_thread)
2191         fi
2193         LIBS="$glib_save_LIBS"
2195         # now spit out all the warnings.
2196         if test "$ac_cv_func_posix_getpwuid_r" != "yes" && 
2197            test "$ac_cv_func_nonposix_getpwuid_r" != "yes"; then
2198                 AC_MSG_WARN($FUNC_NO_GETPWUID_R)
2199         fi
2200         if test "$ac_cv_func_localtime_r" != "yes"; then
2201                 AC_MSG_WARN($FUNC_NO_LOCALTIME_R)
2202         fi
2203 fi      
2205 if test x"$glib_cv_sizeof_system_thread" = x; then
2206    # use a pointer as a fallback.
2207    GLIB_SIZEOF(,void *, system_thread)
2211 # Hack to deal with:
2213 #  a) GCC < 3.3 for Linux doesn't include -lpthread when
2214 #     building shared libraries with linux.
2215 #  b) FreeBSD doesn't do this either.
2217 case $host in
2218   *-*-freebsd*|*-*-linux*)
2219     G_THREAD_LIBS_FOR_GTHREAD="`echo $G_THREAD_LIBS | sed s/-pthread/-lpthread/`"
2220     ;;
2221   *)     
2222     G_THREAD_LIBS_FOR_GTHREAD="$G_THREAD_LIBS"   
2223     ;;
2224 esac
2226 AC_DEFINE_UNQUOTED(G_THREAD_SOURCE,"gthread-$have_threads.c",
2227                    [Source file containing theread implementation])
2228 AC_SUBST(G_THREAD_CFLAGS)
2229 AC_SUBST(G_THREAD_LIBS)
2230 AC_SUBST(G_THREAD_LIBS_FOR_GTHREAD)
2231 AC_SUBST(G_THREAD_LIBS_EXTRA)
2233 dnl **********************************************
2234 dnl *** GDefaultMutex setup and initialization ***
2235 dnl **********************************************
2237 dnl if mutex_has_default = yes, we also got
2238 dnl mutex_default_type, mutex_default_init and mutex_header_file
2239 if test $mutex_has_default = yes ; then
2240         glib_save_CPPFLAGS="$CPPFLAGS"
2241         glib_save_LIBS="$LIBS"
2242         LIBS="$G_THREAD_LIBS $LIBS"
2243         CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
2244         GLIB_SIZEOF([#include <$mutex_header_file>],
2245                     $mutex_default_type,
2246                     gmutex)
2247         GLIB_BYTE_CONTENTS([#include <$mutex_header_file>],
2248                            $mutex_default_type,
2249                            gmutex,
2250                            $glib_cv_sizeof_gmutex,
2251                            $mutex_default_init)
2252         if test x"$glib_cv_byte_contents_gmutex" = xno; then
2253                 mutex_has_default=no
2254         fi
2255         CPPFLAGS="$glib_save_CPPFLAGS"
2256         LIBS="$glib_save_LIBS"
2259 AC_CHECK_FUNCS(clock_gettime, [], [
2260   AC_CHECK_LIB(rt, clock_gettime, [
2261     AC_DEFINE(HAVE_CLOCK_GETTIME, 1)
2262     G_THREAD_LIBS="$G_THREAD_LIBS -lrt"
2263     G_THREAD_LIBS_FOR_GTHREAD="$G_THREAD_LIBS_FOR_GTHREAD -lrt"
2264   ])
2267 AC_CACHE_CHECK(for monotonic clocks,
2268     glib_cv_monotonic_clock,AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
2269 #include <time.h>
2270 #include <unistd.h>
2271 int main() {
2272 #if !(defined(_POSIX_MONOTONIC_CLOCK) && _POSIX_MONOTONIC_CLOCK >= 0 && defined(CLOCK_MONOTONIC))
2273         #error No monotonic clock
2274 #endif
2275         return 0;
2277 ]])],glib_cv_monotonic_clock=yes,glib_cv_monotonic_clock=no))
2278 if test "$glib_cv_monotonic_clock" = "yes"; then
2279   AC_DEFINE(HAVE_MONOTONIC_CLOCK,1,[Have a monotonic clock])
2283 dnl ********************************
2284 dnl *** g_atomic_* tests for gcc ***
2285 dnl ********************************
2287 AC_MSG_CHECKING([whether to use assembler code for atomic operations])
2289 if test x"$GCC" = xyes; then
2290   case $host_cpu in
2291     i386)
2292       AC_MSG_RESULT([none])
2293       glib_memory_barrier_needed=no
2294       ;;
2295     i?86)
2296       AC_MSG_RESULT([i486])
2297       AC_DEFINE_UNQUOTED(G_ATOMIC_I486, 1,
2298                          [i486 atomic implementation])
2299       glib_memory_barrier_needed=no
2300       ;;
2301     sparc*)
2302       SPARCV9_WARNING="Try to rerun configure with CFLAGS='-mcpu=v9',
2303                 when you are using a sparc with v9 instruction set (most
2304                 sparcs nowadays). This will make the code for atomic
2305                 operations much faster. The resulting code will not run
2306                 on very old sparcs though."
2308       AC_LINK_IFELSE([[
2309         main () 
2310         {
2311           int tmp1, tmp2, tmp3;
2312           __asm__ __volatile__("casx [%2], %0, %1" 
2313                                : "=&r" (tmp1), "=&r" (tmp2) : "r" (&tmp3));
2314         }]],
2315         AC_MSG_RESULT([sparcv9])
2316         AC_DEFINE_UNQUOTED(G_ATOMIC_SPARCV9, 1,
2317                            [sparcv9 atomic implementation]),
2318         AC_MSG_RESULT([no])
2319         AC_MSG_WARN([[$SPARCV9_WARNING]]))
2320       glib_memory_barrier_needed=yes
2321       ;;
2322     alpha*)
2323       AC_MSG_RESULT([alpha])
2324       AC_DEFINE_UNQUOTED(G_ATOMIC_ALPHA, 1,
2325                          [alpha atomic implementation])
2326       glib_memory_barrier_needed=yes
2327       ;;
2328     x86_64)
2329       AC_MSG_RESULT([x86_64])
2330       AC_DEFINE_UNQUOTED(G_ATOMIC_X86_64, 1,
2331                          [x86_64 atomic implementation])
2332       glib_memory_barrier_needed=no
2333      ;;
2334     powerpc*)
2335       AC_MSG_RESULT([powerpc])
2336       AC_DEFINE_UNQUOTED(G_ATOMIC_POWERPC, 1,
2337                          [powerpc atomic implementation])
2338       glib_memory_barrier_needed=yes
2339       AC_MSG_CHECKING([whether asm supports numbered local labels])
2340       AC_TRY_COMPILE(
2341                 ,[ 
2342                         __asm__ __volatile__ ("1:       nop\n"
2343                                               "         bne-    1b")
2344                 ],[
2345                         AC_DEFINE_UNQUOTED(ASM_NUMERIC_LABELS, 1, [define if asm blocks can use numeric local labels])
2346                         AC_MSG_RESULT([yes])
2347                 ],[
2348                         AC_MSG_RESULT([no])
2349                 ])
2350       ;;        
2351     ia64)
2352       AC_MSG_RESULT([ia64])
2353       AC_DEFINE_UNQUOTED(G_ATOMIC_IA64, 1,
2354                          [ia64 atomic implementation])
2355       glib_memory_barrier_needed=yes
2356       ;;        
2357     s390|s390x)
2358       AC_MSG_RESULT([s390])
2359       AC_DEFINE_UNQUOTED(G_ATOMIC_S390, 1,
2360                          [s390 atomic implementation])
2361       glib_memory_barrier_needed=no
2362       ;;        
2363     arm*)
2364       AC_MSG_RESULT([arm])
2365       AC_DEFINE_UNQUOTED(G_ATOMIC_ARM, 1,
2366                          [arm atomic implementation])
2367       glib_memory_barrier_needed=no
2368       ;;
2369     *)
2370       AC_MSG_RESULT([none])
2371       glib_memory_barrier_needed=yes
2372       ;;
2373   esac
2374 else
2375   if test $glib_native_win32 = yes; then
2376     # For Windows but not using gcc. No barriers needed then either.
2377     glib_memory_barrier_needed=no
2378   fi
2381 dnl ****************************************
2382 dnl *** GLib POLL* compatibility defines ***
2383 dnl ****************************************
2385 glib_poll_includes=["
2386 #include <sys/types.h>
2387 #include <sys/poll.h>
2390 if test $ac_cv_header_sys_types_h = yes &&
2391    test $ac_cv_header_sys_poll_h = yes ; then
2392   glib_failed=false
2393   GLIB_CHECK_VALUE(POLLIN, $glib_poll_includes, glib_failed=true)
2394   GLIB_CHECK_VALUE(POLLOUT, $glib_poll_includes, glib_failed=true)
2395   GLIB_CHECK_VALUE(POLLPRI, $glib_poll_includes, glib_failed=true)
2396   GLIB_CHECK_VALUE(POLLERR, $glib_poll_includes, glib_failed=true)
2397   GLIB_CHECK_VALUE(POLLHUP, $glib_poll_includes, glib_failed=true)
2398   GLIB_CHECK_VALUE(POLLNVAL, $glib_poll_includes, glib_failed=true)
2399   if $glib_failed ; then
2400     AC_MSG_ERROR([Could not determine values for POLL* constants])
2401   fi
2402 else
2403   glib_cv_value_POLLIN=1
2404   glib_cv_value_POLLOUT=4
2405   glib_cv_value_POLLPRI=2
2406   glib_cv_value_POLLERR=8
2407   glib_cv_value_POLLHUP=16
2408   glib_cv_value_POLLNVAL=32
2411 AC_MSG_CHECKING([for broken poll])
2412 AC_RUN_IFELSE([AC_LANG_SOURCE([[
2413         #include <stdlib.h>
2414         #include <fcntl.h>
2415         #include <poll.h>
2416         #ifdef HAVE_SYS_POLL_H
2417         #include <sys/poll.h>
2418         #endif
2419         int main(void) {
2420           struct pollfd fds[1];
2421           int fd;
2422           fd = open("/dev/null", 1);
2423           fds[0].fd = fd;
2424           fds[0].events = POLLIN;
2425           fds[0].revents = 0;
2426           if (poll(fds, 1, 0) < 0 || (fds[0].revents & POLLNVAL) != 0) {
2427                 exit(1);  /* Does not work for devices -- fail */
2428           }
2429           exit(0);
2430         }]])],
2431   [broken_poll=no],
2432   [broken_poll=yes
2433    AC_DEFINE(BROKEN_POLL,1,[poll doesn't work on devices])],
2434   [broken_poll="no (cross compiling)"])
2435 AC_MSG_RESULT($broken_poll)
2437 dnl *********************
2438 dnl *** GRegex checks ***
2439 dnl *********************
2440 PCRE_REQUIRED_VERSION=7.2
2442 # Check if we should compile GRegex
2443 AC_ARG_ENABLE(regex, AC_HELP_STRING([--disable-regex],
2444               [disable the compilation of GRegex]),
2445 [case "${enableval}" in
2446   yes) enable_regex=true ;;
2447   no)  enable_regex=false ;;
2448   *) AC_MSG_ERROR(bad value ${enableval} for --enable-regex) ;;
2449 esac],
2450 [enable_regex=true])
2452 AM_CONDITIONAL(ENABLE_REGEX, $enable_regex)
2454 if test x$enable_regex = xtrue; then
2455   # Check if we should use the internal or the system-supplied pcre
2456   AC_ARG_WITH(pcre,
2457              [AC_HELP_STRING([--with-pcre=@<:@internal/system@:>@],
2458                              [specify whether to use the internal or the
2459                               system-supplied PCRE library])])
2461   AM_CONDITIONAL(USE_SYSTEM_PCRE, [test "x$with_pcre" = xsystem])
2463   if test "x$with_pcre" = xsystem; then
2464     PKG_CHECK_MODULES(PCRE,
2465                       libpcre >= $PCRE_REQUIRED_VERSION)
2466     AC_CACHE_CHECK([for Unicode support in PCRE],glib_cv_pcre_has_unicode,[
2467                    glib_save_CFLAGS="$CFLAGS"
2468                    glib_save_LIBS="$LIBS"
2469                    CFLAGS="$CFLAGS $PCRE_CFLAGS" LIBS="$PCRE_LIBS"
2470                    AC_TRY_RUN([#include <pcre.h>
2471                                int main () {
2472                                  int support;
2473                                  pcre_config (PCRE_CONFIG_UTF8, &support);
2474                                  if (!support)
2475                                    return 1;
2476                                  pcre_config (PCRE_CONFIG_UNICODE_PROPERTIES, &support);
2477                                  if (!support)
2478                                    return 1;
2479                                  return 0;
2480                                }],
2481                    glib_cv_pcre_has_unicode=yes,
2482                    glib_cv_pcre_has_unicode=no,
2483                    glib_cv_pcre_has_unicode=yes)
2484                    CFLAGS="$glib_save_CFLAGS"
2485                    LIBS="$glib_save_LIBS"
2486         ])
2487     if test "$glib_cv_pcre_has_unicode" = "no"; then
2488       AC_MSG_ERROR([*** The system-supplied PCRE does not support Unicode properties or UTF-8.])
2489     fi
2490     AC_SUBST(PCRE_CFLAGS)
2491     AC_SUBST(PCRE_LIBS)
2492     AC_DEFINE(USE_SYSTEM_PCRE, [], [using the system-supplied PCRE library])
2493     PCRE_REQUIRES=libpcre
2494     AC_SUBST(PCRE_REQUIRES)
2495   else
2496     # If using gcc 4 pass -Wno-pointer-sign when compiling the internal PCRE
2497     if test x"$GCC" = xyes; then
2498       AC_MSG_CHECKING([whether compiler understands -Wno-pointer-sign])
2499       save_CFLAGS="$CFLAGS"
2500       CFLAGS="$CFLAGS -Wno-pointer-sign"
2501       AC_TRY_COMPILE([],[],[PCRE_WARN_CFLAGS="$PCRE_WARN_CFLAGS -Wno-pointer-sign"
2502                             AC_MSG_RESULT(yes)],[AC_MSG_RESULT(no)])
2503       CFLAGS="$save_CFLAGS"
2504     fi
2505   fi
2506   AC_SUBST(PCRE_WARN_CFLAGS)
2507 else
2508   AM_CONDITIONAL(USE_SYSTEM_PCRE, false])
2511 dnl **********************
2512 dnl *** Win32 API libs ***
2513 dnl **********************
2515 case $host in
2516   *-*-cygwin*)
2517         G_LIBS_EXTRA="-luser32 -lkernel32"
2518     ;;
2519   *-*-mingw*)
2520         G_LIBS_EXTRA="-lws2_32 -lole32"
2521     ;;
2522   *)
2523         G_LIBS_EXTRA=""
2524     ;;
2525 esac
2526 AC_SUBST(G_LIBS_EXTRA)
2528 dnl If the system doesn't define EILSEQ, we should define EILSEQ ourselves
2529 dnl since we need it for g_iconv()
2531 AC_MSG_CHECKING([for EILSEQ])
2532 AC_TRY_COMPILE([
2533 #include <errno.h>
2536 int error = EILSEQ;
2537 ], have_eilseq=yes, have_eilseq=no);
2538 AC_MSG_RESULT($have_eilseq)
2540 dnl ******************************************************************
2541 dnl *** Look for glib-genmarshal in PATH if we are cross-compiling ***
2542 dnl ******************************************************************
2544 AM_CONDITIONAL(CROSS_COMPILING, test $cross_compiling = yes)
2546 if test $cross_compiling = yes; then
2547   AC_PATH_PROG(GLIB_GENMARSHAL, glib-genmarshal, no)
2548   if test x$GLIB_GENMARSHAL = xno; then
2549     AC_MSG_ERROR(Could not find a glib-genmarshal in your PATH)
2550   fi
2553 dnl **************************
2554 dnl *** Checks for gtk-doc ***
2555 dnl **************************
2557 GTK_DOC_CHECK([1.8])
2559 AC_ARG_ENABLE(man,
2560               [AC_HELP_STRING([--enable-man],
2561                               [regenerate man pages from Docbook [default=no]])],enable_man=yes,
2562               enable_man=no)
2564 if test "${enable_man}" != no; then
2566 dnl Check for xsltproc
2568 AC_PATH_PROG([XSLTPROC], [xsltproc])
2569   if test -z "$XSLTPROC"; then
2570     enable_man=no
2571   fi
2573   dnl check for DocBook DTD and stylesheets in the local catalog.
2574   JH_CHECK_XML_CATALOG([-//OASIS//DTD DocBook XML V4.1.2//EN],
2575      [DocBook XML DTD V4.1.2],,enable_man=no)
2576   JH_CHECK_XML_CATALOG([http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl],
2577      [DocBook XSL Stylesheets],,enable_man=no)
2580 AM_CONDITIONAL(ENABLE_MAN, test x$enable_man != xno)
2582 dnl ******************************
2583 dnl *** output the whole stuff ***
2584 dnl ******************************
2586 dnl this section will only be run if config.status is invoked with no
2587 dnl arguments, or with "glibconfig.h" as an argument.
2588 AC_CONFIG_COMMANDS([glibconfig.h],
2590         outfile=glibconfig.h-tmp
2591         cat > $outfile <<\_______EOF
2592 /* glibconfig.h
2594  * This is a generated file.  Please modify 'configure.in'
2595  */
2597 #ifndef __G_LIBCONFIG_H__
2598 #define __G_LIBCONFIG_H__
2600 #include <glib/gmacros.h>
2602 _______EOF
2604         if test x$glib_limits_h = xyes; then
2605           echo '#include <limits.h>' >> $outfile
2606         fi
2607         if test x$glib_float_h = xyes; then
2608           echo '#include <float.h>' >> $outfile
2609         fi
2610         if test x$glib_values_h = xyes; then
2611           echo '#include <values.h>' >> $outfile
2612         fi
2613         if test "$glib_header_alloca_h" = "yes"; then
2614           echo '#define GLIB_HAVE_ALLOCA_H' >> $outfile
2615         fi
2616         if test x$glib_sys_poll_h = xyes; then
2617           echo '#define GLIB_HAVE_SYS_POLL_H' >> $outfile
2618         fi
2620         cat >> $outfile <<_______EOF
2622 G_BEGIN_DECLS
2624 #define G_MINFLOAT      $glib_mf
2625 #define G_MAXFLOAT      $glib_Mf
2626 #define G_MINDOUBLE     $glib_md
2627 #define G_MAXDOUBLE     $glib_Md
2628 #define G_MINSHORT      $glib_ms
2629 #define G_MAXSHORT      $glib_Ms
2630 #define G_MAXUSHORT     $glib_Mus
2631 #define G_MININT        $glib_mi
2632 #define G_MAXINT        $glib_Mi
2633 #define G_MAXUINT       $glib_Mui
2634 #define G_MINLONG       $glib_ml
2635 #define G_MAXLONG       $glib_Ml
2636 #define G_MAXULONG      $glib_Mul
2638 _______EOF
2641         ### this should always be true in a modern C/C++ compiler
2642         cat >>$outfile <<_______EOF
2643 typedef signed char gint8;
2644 typedef unsigned char guint8;
2645 _______EOF
2648         if test -n "$gint16"; then
2649           cat >>$outfile <<_______EOF
2650 typedef signed $gint16 gint16;
2651 typedef unsigned $gint16 guint16;
2652 #define G_GINT16_MODIFIER $gint16_modifier
2653 #define G_GINT16_FORMAT $gint16_format
2654 #define G_GUINT16_FORMAT $guint16_format
2655 _______EOF
2656         fi
2659         if test -n "$gint32"; then
2660           cat >>$outfile <<_______EOF
2661 typedef signed $gint32 gint32;
2662 typedef unsigned $gint32 guint32;
2663 #define G_GINT32_MODIFIER $gint32_modifier
2664 #define G_GINT32_FORMAT $gint32_format
2665 #define G_GUINT32_FORMAT $guint32_format
2666 _______EOF
2667         fi
2669         cat >>$outfile <<_______EOF
2670 #define G_HAVE_GINT64 1          /* deprecated, always true */
2672 ${glib_extension}typedef signed $gint64 gint64;
2673 ${glib_extension}typedef unsigned $gint64 guint64;
2675 #define G_GINT64_CONSTANT(val)  $gint64_constant
2676 #define G_GUINT64_CONSTANT(val) $guint64_constant
2677 _______EOF
2679         if test x$gint64_format != x ; then
2680           cat >>$outfile <<_______EOF
2681 #define G_GINT64_MODIFIER $gint64_modifier
2682 #define G_GINT64_FORMAT $gint64_format
2683 #define G_GUINT64_FORMAT $guint64_format
2684 _______EOF
2685         else
2686           cat >>$outfile <<_______EOF
2687 #undef G_GINT64_MODIFIER
2688 #undef G_GINT64_FORMAT
2689 #undef G_GUINT64_FORMAT
2690 _______EOF
2691         fi           
2693         cat >>$outfile <<_______EOF
2695 #define GLIB_SIZEOF_VOID_P $glib_void_p
2696 #define GLIB_SIZEOF_LONG   $glib_long
2697 #define GLIB_SIZEOF_SIZE_T $glib_size_t
2699 _______EOF
2701         cat >>$outfile <<_______EOF
2702 typedef signed $glib_size_type_define gssize;
2703 typedef unsigned $glib_size_type_define gsize;
2704 #define G_GSIZE_MODIFIER $gsize_modifier
2705 #define G_GSSIZE_FORMAT $gssize_format
2706 #define G_GSIZE_FORMAT $gsize_format
2708 #define G_MAXSIZE       G_MAXU$glib_msize_type
2709 #define G_MINSSIZE      G_MIN$glib_msize_type
2710 #define G_MAXSSIZE      G_MAX$glib_msize_type
2712 typedef gint64 goffset;
2713 #define G_MINOFFSET     G_MININT64
2714 #define G_MAXOFFSET     G_MAXINT64
2716 _______EOF
2718         if test -z "$glib_unknown_void_p"; then
2719           cat >>$outfile <<_______EOF
2721 #define GPOINTER_TO_INT(p)      ((gint)  ${glib_gpi_cast} (p))
2722 #define GPOINTER_TO_UINT(p)     ((guint) ${glib_gpui_cast} (p))
2724 #define GINT_TO_POINTER(i)      ((gpointer) ${glib_gpi_cast} (i))
2725 #define GUINT_TO_POINTER(u)     ((gpointer) ${glib_gpui_cast} (u))
2726 _______EOF
2727         else
2728           echo '#error SIZEOF_VOID_P unknown - This should never happen' >>$outfile
2729         fi
2733         cat >>$outfile <<_______EOF
2734 $glib_atexit
2735 $glib_memmove
2736 $glib_defines
2737 $glib_os
2738 $glib_static_compilation
2740 $glib_vacopy
2742 #ifdef  __cplusplus
2743 #define G_HAVE_INLINE   1
2744 #else   /* !__cplusplus */
2745 $glib_inline
2746 #endif  /* !__cplusplus */
2748 #ifdef  __cplusplus
2749 #define G_CAN_INLINE    1
2750 _______EOF
2752         if test x$g_can_inline = xyes ; then
2753                 cat >>$outfile <<_______EOF
2754 #else   /* !__cplusplus */
2755 #define G_CAN_INLINE    1
2756 _______EOF
2757         fi
2759         cat >>$outfile <<_______EOF
2760 #endif
2762 _______EOF
2764         if test x$g_have_iso_c_varargs = xyes ; then
2765                 cat >>$outfile <<_______EOF
2766 #ifndef __cplusplus
2767 # define G_HAVE_ISO_VARARGS 1
2768 #endif
2769 _______EOF
2770         fi
2771         if test x$g_have_iso_cxx_varargs = xyes ; then
2772                 cat >>$outfile <<_______EOF
2773 #ifdef __cplusplus
2774 # define G_HAVE_ISO_VARARGS 1
2775 #endif
2776 _______EOF
2777         fi
2778         if test x$g_have_gnuc_varargs = xyes ; then
2779                 cat >>$outfile <<_______EOF
2781 /* gcc-2.95.x supports both gnu style and ISO varargs, but if -ansi
2782  * is passed ISO vararg support is turned off, and there is no work
2783  * around to turn it on, so we unconditionally turn it off.
2784  */
2785 #if __GNUC__ == 2 && __GNUC_MINOR__ == 95
2786 #  undef G_HAVE_ISO_VARARGS
2787 #endif
2789 #define G_HAVE_GNUC_VARARGS 1
2790 _______EOF
2791         fi
2793         case x$g_stack_grows in
2794         xyes) echo "#define G_HAVE_GROWING_STACK 1" >>$outfile ;;
2795         *)    echo "#define G_HAVE_GROWING_STACK 0" >>$outfile ;;
2796         esac
2799         echo >>$outfile
2800         if test x$g_have_eilseq = xno; then
2801                 cat >>$outfile <<_______EOF
2802 #ifndef EILSEQ
2803 /* On some systems, like SunOS and NetBSD, EILSEQ is not defined.
2804  * The correspondence between this and the corresponding definition
2805  * in libiconv is essential.
2806  */
2807 #  define EILSEQ ENOENT
2808 #endif
2809 _______EOF
2811         fi
2813         if test x$g_have_gnuc_visibility = xyes; then
2814                 cat >>$outfile <<_______EOF
2815 #define G_HAVE_GNUC_VISIBILITY 1
2816 _______EOF
2817         fi
2818                 cat >>$outfile <<_______EOF
2819 #if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
2820 #define G_GNUC_INTERNAL __hidden
2821 #elif defined (__GNUC__) && defined (G_HAVE_GNUC_VISIBILITY)
2822 #define G_GNUC_INTERNAL __attribute__((visibility("hidden")))
2823 #else
2824 #define G_GNUC_INTERNAL
2825 #endif
2826 _______EOF
2829         echo >>$outfile
2830         if test x$g_mutex_has_default = xyes; then
2831                 cat >>$outfile <<_______EOF
2832 $g_enable_threads_def G_THREADS_ENABLED
2833 #define G_THREADS_IMPL_$g_threads_impl_def
2834 typedef struct _GStaticMutex GStaticMutex;
2835 struct _GStaticMutex
2837   struct _GMutex *runtime_mutex;
2838   union {
2839     char   pad[[$g_mutex_sizeof]];
2840     double dummy_double;
2841     void  *dummy_pointer;
2842     long   dummy_long;
2843   } static_mutex;
2845 #define G_STATIC_MUTEX_INIT     { NULL, { { $g_mutex_contents} } }
2846 #ifdef __cplusplus
2847 #define g_static_mutex_get_mutex(mutex) \\
2848   (g_thread_use_default_impl ? ((GMutex*) ((mutex)->static_mutex.pad)) : \\
2849    g_static_mutex_get_mutex_impl_shortcut (&((mutex)->runtime_mutex)))
2850 #else
2851 #define g_static_mutex_get_mutex(mutex) \\
2852   (g_thread_use_default_impl ? ((GMutex*) (void*) ((mutex)->static_mutex.pad)) : \\
2853    g_static_mutex_get_mutex_impl_shortcut (&((mutex)->runtime_mutex)))
2854 #endif
2855 _______EOF
2856         else
2857                 cat >>$outfile <<_______EOF
2858 $g_enable_threads_def G_THREADS_ENABLED
2859 #define G_THREADS_IMPL_$g_threads_impl_def
2860 typedef struct _GMutex* GStaticMutex;
2861 #define G_STATIC_MUTEX_INIT NULL
2862 #define g_static_mutex_get_mutex(mutex) \\
2863   (g_static_mutex_get_mutex_impl_shortcut (mutex))
2864 _______EOF
2865         fi
2867         cat >>$outfile <<_______EOF
2868 /* This represents a system thread as used by the implementation. An
2869  * alien implementaion, as loaded by g_thread_init can only count on
2870  * "sizeof (gpointer)" bytes to store their info. We however need more
2871  * for some of our native implementations. */
2872 typedef union _GSystemThread GSystemThread;
2873 union _GSystemThread
2875   char   data[[$g_system_thread_sizeof]];
2876   double dummy_double;
2877   void  *dummy_pointer;
2878   long   dummy_long;
2880 _______EOF
2881         if test x"$g_memory_barrier_needed" != xno; then
2882           echo >>$outfile
2883           echo "#define G_ATOMIC_OP_MEMORY_BARRIER_NEEDED 1" >>$outfile
2884         fi
2886         echo >>$outfile
2887         g_bit_sizes="16 32 64"
2888         for bits in $g_bit_sizes; do
2889           cat >>$outfile <<_______EOF
2890 #define GINT${bits}_TO_${g_bs_native}(val)      ((gint${bits}) (val))
2891 #define GUINT${bits}_TO_${g_bs_native}(val)     ((guint${bits}) (val))
2892 #define GINT${bits}_TO_${g_bs_alien}(val)       ((gint${bits}) GUINT${bits}_SWAP_LE_BE (val))
2893 #define GUINT${bits}_TO_${g_bs_alien}(val)      (GUINT${bits}_SWAP_LE_BE (val))
2894 _______EOF
2895         done
2897         cat >>$outfile <<_______EOF
2898 #define GLONG_TO_LE(val)        ((glong) GINT${glongbits}_TO_LE (val))
2899 #define GULONG_TO_LE(val)       ((gulong) GUINT${glongbits}_TO_LE (val))
2900 #define GLONG_TO_BE(val)        ((glong) GINT${glongbits}_TO_BE (val))
2901 #define GULONG_TO_BE(val)       ((gulong) GUINT${glongbits}_TO_BE (val))
2902 #define GINT_TO_LE(val)         ((gint) GINT${gintbits}_TO_LE (val))
2903 #define GUINT_TO_LE(val)        ((guint) GUINT${gintbits}_TO_LE (val))
2904 #define GINT_TO_BE(val)         ((gint) GINT${gintbits}_TO_BE (val))
2905 #define GUINT_TO_BE(val)        ((guint) GUINT${gintbits}_TO_BE (val))
2906 #define G_BYTE_ORDER $g_byte_order
2908 #define GLIB_SYSDEF_POLLIN =$g_pollin
2909 #define GLIB_SYSDEF_POLLOUT =$g_pollout
2910 #define GLIB_SYSDEF_POLLPRI =$g_pollpri
2911 #define GLIB_SYSDEF_POLLHUP =$g_pollhup
2912 #define GLIB_SYSDEF_POLLERR =$g_pollerr
2913 #define GLIB_SYSDEF_POLLNVAL =$g_pollnval
2915 #define G_MODULE_SUFFIX "$g_module_suffix"
2917 typedef $g_pid_type GPid;
2919 G_END_DECLS
2921 #endif /* GLIBCONFIG_H */
2922 _______EOF
2925         if cmp -s $outfile glibconfig.h; then
2926           AC_MSG_NOTICE([glibconfig.h is unchanged])
2927           rm -f $outfile
2928         else
2929           mv $outfile glibconfig.h
2930         fi
2933 # Note that if two cases are the same, case goes with the first one.
2934 # Note also that this is inside an AC_OUTPUT_COMMAND.  We do not depend
2935 # on variable expansion in case labels.  Look at the generated config.status
2936 # for a hint.
2938 if test "x${ac_cv_working_alloca_h+set}" = xset ; then
2939   glib_header_alloca_h="$ac_cv_working_alloca_h"
2940 else
2941   glib_header_alloca_h="$ac_cv_header_alloca_h"
2944 case xyes in
2945 x$ac_cv_header_float_h)
2946   glib_float_h=yes
2947   glib_mf=FLT_MIN glib_Mf=FLT_MAX
2948   glib_md=DBL_MIN glib_Md=DBL_MAX
2949   ;;
2950 x$ac_cv_header_values_h)
2951   glib_values_h=yes
2952   glib_mf=MINFLOAT  glib_Mf=MAXFLOAT
2953   glib_md=MINDOUBLE glib_Md=MAXDOUBLE
2954   ;;
2955 esac
2957 case xyes in
2958 x$ac_cv_header_limits_h)
2959   glib_limits_h=yes
2960   glib_ms=SHRT_MIN glib_Ms=SHRT_MAX glib_Mus=USHRT_MAX
2961   glib_mi=INT_MIN  glib_Mi=INT_MAX  glib_Mui=UINT_MAX
2962   glib_ml=LONG_MIN glib_Ml=LONG_MAX glib_Mul=ULONG_MAX
2963   ;;
2964 x$ac_cv_header_values_h)
2965   glib_values_h=yes
2966   glib_ms=MINSHORT glib_Ms=MAXSHORT glib_Mus="(((gushort)G_MAXSHORT)*2+1)"
2967   glib_mi=MININT   glib_Mi=MAXINT   glib_Mui="(((guint)G_MAXINT)*2+1)"
2968   glib_ml=MINLONG  glib_Ml=MAXLONG  glib_Mul="(((gulong)G_MAXLONG)*2+1)"
2969   ;;
2970 esac
2972 if test x$ac_cv_header_sys_poll_h = xyes ; then
2973   glib_sys_poll_h=yes
2976 case 2 in
2977 $ac_cv_sizeof_short)            
2978   gint16=short
2979   gint16_modifier='"h"'
2980   gint16_format='"hi"'
2981   guint16_format='"hu"'
2982   ;;
2983 $ac_cv_sizeof_int)              
2984   gint16=int
2985   gint16_modifier='""'
2986   gint16_format='"i"'
2987   guint16_format='"u"'
2988   ;;
2989 esac
2990 case 4 in
2991 $ac_cv_sizeof_short)            
2992   gint32=short
2993   gint32_modifier='"h"'
2994   gint32_format='"hi"'
2995   guint32_format='"hu"'
2996   ;;
2997 $ac_cv_sizeof_int)              
2998   gint32=int
2999   gint32_modifier='""'
3000   gint32_format='"i"'
3001   guint32_format='"u"'
3002   ;;
3003 $ac_cv_sizeof_long)             
3004   gint32=long
3005   gint32_modifier='"l"'
3006   gint32_format='"li"'
3007   guint32_format='"lu"'
3008   ;;
3009 esac
3010 case 8 in
3011 $ac_cv_sizeof_int)
3012   gint64=int
3013   gint64_modifier='""'
3014   gint64_format='"i"'
3015   guint64_format='"u"'
3016   glib_extension=
3017   gint64_constant='(val)'
3018   guint64_constant='(val)'
3019   ;;
3020 $ac_cv_sizeof_long)
3021   gint64=long
3022   gint64_modifier='"l"'
3023   gint64_format='"li"'
3024   guint64_format='"lu"'
3025   glib_extension=
3026   gint64_constant='(val##L)'
3027   guint64_constant='(val##UL)'
3028   ;;
3029 $ac_cv_sizeof_long_long)
3030   gint64='long long'
3031   if test -n "$glib_cv_long_long_format"; then
3032     gint64_modifier='"'$glib_cv_long_long_format'"'
3033     gint64_format='"'$glib_cv_long_long_format'i"'
3034     guint64_format='"'$glib_cv_long_long_format'u"'
3035   fi
3036   glib_extension='G_GNUC_EXTENSION '
3037   gint64_constant='(G_GNUC_EXTENSION (val##LL))'
3038   guint64_constant='(G_GNUC_EXTENSION (val##ULL))'
3039   ;;
3040 $ac_cv_sizeof___int64)
3041   gint64='__int64'
3042   if test -n "$glib_cv_long_long_format"; then
3043     gint64_modifier='"'$glib_cv_long_long_format'"'
3044     gint64_format='"'$glib_cv_long_long_format'i"'
3045     guint64_format='"'$glib_cv_long_long_format'u"'
3046   fi
3047   glib_extension=
3048   gint64_constant='(val##i64)'
3049   guint64_constant='(val##ui64)'
3050   ;;
3051 esac
3052 glib_size_t=$ac_cv_sizeof_size_t
3053 glib_size_type_define=$glib_size_type
3054 glib_void_p=$ac_cv_sizeof_long
3055 glib_long=$ac_cv_sizeof_void_p
3057 case $glib_size_type in
3058 short)
3059   gsize_modifier='"h"'
3060   gsize_format='"hu"'
3061   gssize_format='"hi"'
3062   glib_msize_type='SHRT'
3063   ;;
3064 int)
3065   gsize_modifier='""'
3066   gsize_format='"u"'
3067   gssize_format='"i"'
3068   glib_msize_type='INT'
3069   ;;
3070 long)
3071   gsize_modifier='"l"'
3072   gsize_format='"lu"'
3073   gssize_format='"li"'
3074   glib_msize_type='LONG'
3075   ;;
3076 esac
3078 gintbits=`expr $ac_cv_sizeof_int \* 8`
3079 glongbits=`expr $ac_cv_sizeof_long \* 8`
3082 case $ac_cv_sizeof_void_p in
3083 $ac_cv_sizeof_int)      glib_gpi_cast=''        glib_gpui_cast=''         ;;
3084 $ac_cv_sizeof_long)     glib_gpi_cast='(glong)' glib_gpui_cast='(gulong)' ;;
3085 *)                      glib_unknown_void_p=yes ;;
3086 esac
3089 case xyes in
3090 x$ac_cv_func_atexit)
3091   glib_atexit="
3092 #ifdef NeXT /* @#%@! NeXTStep */
3093 # define g_ATEXIT(proc) (!atexit (proc))
3094 #else
3095 # define g_ATEXIT(proc) (atexit (proc))
3096 #endif"
3097   ;;
3098 x$ac_cv_func_on_exit)
3099   glib_atexit="
3100 #define g_ATEXIT(proc)  (on_exit ((void (*)(int, void*))(proc), NULL))"
3101   ;;
3102 esac
3104 case xyes in
3105 x$ac_cv_func_memmove)
3106   glib_memmove='
3107 #define g_memmove(dest,src,len) G_STMT_START { memmove ((dest), (src), (len)); } G_STMT_END'
3108   ;;
3109 x$glib_cv_working_bcopy)
3110   glib_memmove="
3111 /* memmove isn't available, but bcopy can copy overlapping memory regions */
3112 #define g_memmove(d,s,n) G_STMT_START { bcopy ((s), (d), (n)); } G_STMT_END"
3113   ;;
3114 *)  
3115   glib_memmove="
3116 /* memmove isn't found and bcopy can't copy overlapping memory regions, 
3117  * so we have to roll our own copy routine. */
3118 void g_memmove (void* dest, const void * src, unsigned long len);"
3119   ;;
3120 esac
3122 glib_defines="
3123 #define GLIB_MAJOR_VERSION $GLIB_MAJOR_VERSION
3124 #define GLIB_MINOR_VERSION $GLIB_MINOR_VERSION
3125 #define GLIB_MICRO_VERSION $GLIB_MICRO_VERSION
3128 case xyes in
3129 x$glib_cv_va_copy)      glib_vacopy='#define G_VA_COPY  va_copy' ;;
3130 x$glib_cv___va_copy)    glib_vacopy='#define G_VA_COPY  __va_copy' ;;
3131 *)                      glib_vacopy=''
3132 esac
3134 if test x$glib_cv_va_val_copy = xno; then
3135   glib_vacopy="\$glib_vacopy
3136 #define G_VA_COPY_AS_ARRAY 1"
3139 if test x$glib_cv_hasinline = xyes; then
3140     glib_inline='#define G_HAVE_INLINE 1'
3142 if test x$glib_cv_has__inline = xyes; then
3143     glib_inline="\$glib_inline
3144 #define G_HAVE___INLINE 1"
3146 if test x$glib_cv_has__inline__ = xyes; then
3147     glib_inline="\$glib_inline
3148 #define G_HAVE___INLINE__ 1"
3151 g_have_gnuc_varargs=$g_have_gnuc_varargs
3152 g_have_iso_c_varargs=$g_have_iso_c_varargs
3153 g_have_iso_cxx_varargs=$g_have_iso_cxx_varargs
3155 g_can_inline=$g_can_inline
3156 g_have_gnuc_visibility=$g_have_gnuc_visibility
3157 g_have_sunstudio_visibility=$g_have_sunstudio_visibility
3159 case xyes in
3160 x$ac_cv_c_bigendian)
3161   g_byte_order=G_BIG_ENDIAN
3162   g_bs_native=BE
3163   g_bs_alien=LE
3164   ;;
3166   g_byte_order=G_LITTLE_ENDIAN
3167   g_bs_native=LE
3168   g_bs_alien=BE
3169   ;;
3170 esac
3172 g_pollin=$glib_cv_value_POLLIN
3173 g_pollout=$glib_cv_value_POLLOUT
3174 g_pollpri=$glib_cv_value_POLLPRI
3175 g_pollhup=$glib_cv_value_POLLHUP
3176 g_pollerr=$glib_cv_value_POLLERR
3177 g_pollnval=$glib_cv_value_POLLNVAL
3179 g_stack_grows=$glib_cv_stack_grows
3181 g_have_eilseq=$have_eilseq
3183 case x$have_threads in
3184 xno)    g_enable_threads_def="#undef";;
3185 *)      g_enable_threads_def="#define";;
3186 esac
3188 g_threads_impl_def=$g_threads_impl
3190 g_mutex_has_default="$mutex_has_default"
3191 g_mutex_sizeof="$glib_cv_sizeof_gmutex"
3192 g_system_thread_sizeof="$glib_cv_sizeof_system_thread"
3193 g_mutex_contents="$glib_cv_byte_contents_gmutex"
3195 g_memory_barrier_needed="$glib_memory_barrier_needed"
3197 g_module_suffix="$glib_gmodule_suffix"
3199 g_pid_type="$glib_pid_type"
3200 case $host in
3201   *-*-beos*)
3202     glib_os="#define G_OS_BEOS"
3203     ;;
3204   *-*-cygwin*)
3205     glib_os="#define G_OS_UNIX
3206 #define G_PLATFORM_WIN32
3207 #define G_WITH_CYGWIN"
3208     ;;
3209   *-*-mingw*)
3210     glib_os="#define G_OS_WIN32
3211 #define G_PLATFORM_WIN32"
3212     ;;
3213   *)
3214     glib_os="#define G_OS_UNIX"
3215     ;;
3216 esac
3217 glib_static_compilation=""
3218 if test x$glib_win32_static_compilation = xyes; then
3219   glib_static_compilation="#define GLIB_STATIC_COMPILATION 1
3220 #define GOBJECT_STATIC_COMPILATION 1"
3224 AC_CONFIG_FILES([
3225 glib-2.0.pc
3226 glib-2.0-uninstalled.pc
3227 gmodule-2.0.pc
3228 gmodule-export-2.0.pc
3229 gmodule-no-export-2.0.pc
3230 gmodule-2.0-uninstalled.pc
3231 gmodule-no-export-2.0-uninstalled.pc
3232 gthread-2.0.pc
3233 gthread-2.0-uninstalled.pc
3234 gobject-2.0.pc
3235 gobject-2.0-uninstalled.pc
3236 gio-2.0.pc
3237 gio-unix-2.0.pc
3238 gio-2.0-uninstalled.pc
3239 gio-unix-2.0-uninstalled.pc
3240 glib-zip
3241 glib-gettextize
3242 Makefile
3243 build/Makefile
3244 build/win32/Makefile
3245 build/win32/dirent/Makefile
3246 build/win32/vs8/Makefile
3247 glib/Makefile
3248 glib/libcharset/Makefile
3249 glib/gnulib/Makefile
3250 glib/pcre/Makefile
3251 glib/update-pcre/Makefile
3252 glib/tests/Makefile
3253 gmodule/Makefile
3254 gmodule/gmoduleconf.h
3255 gobject/Makefile
3256 gobject/glib-mkenums
3257 gobject/tests/Makefile
3258 gthread/Makefile
3259 gio/Makefile
3260 gio/xdgmime/Makefile
3261 gio/inotify/Makefile
3262 gio/fen/Makefile
3263 gio/fam/Makefile
3264 gio/win32/Makefile
3265 gio/tests/Makefile
3266 po/Makefile.in
3267 docs/Makefile
3268 docs/reference/Makefile
3269 docs/reference/glib/Makefile
3270 docs/reference/glib/version.xml
3271 docs/reference/gobject/Makefile
3272 docs/reference/gobject/version.xml
3273 docs/reference/gio/Makefile
3274 docs/reference/gio/version.xml
3275 tests/Makefile
3276 tests/gobject/Makefile
3277 tests/refcount/Makefile
3278 m4macros/Makefile
3281 AC_CONFIG_COMMANDS([chmod-scripts],
3282 [chmod 0755 glib-zip
3283 chmod 0755 glib-gettextize
3284 chmod 0755 gobject/glib-mkenums])
3286 # we want to invoke this macro solely so that the config.status script
3287 # and automake generated makefiles know about these generated files.
3288 # They are only needed to distcheck the package
3289 if false; then
3290   AC_CONFIG_FILES([
3291     INSTALL
3292     README
3293     config.h.win32
3294     glibconfig.h.win32
3295     glib/makefile.msc
3296     glib/glib.rc
3297     gmodule/makefile.msc
3298     gmodule/gmodule.rc
3299     gobject/makefile.msc
3300     gobject/gobject.rc
3301     gthread/makefile.msc
3302     gthread/gthread.rc
3303     tests/makefile.msc
3304   ])
3307 AC_OUTPUT