Bump version to 2.8.0
[platform/upstream/glib.git] / configure.in
1 # Process this file with autoconf to produce a configure script.
2 # require autoconf 2.54
3 AC_PREREQ(2.54)
4
5 dnl ***********************************
6 dnl *** include special GLib macros ***
7 dnl ***********************************
8
9 m4_define(glib_configure_in)
10 m4_include(acglib.m4)dnl
11 m4_include(glib/libcharset/codeset.m4)dnl
12 m4_include(glib/libcharset/glibc21.m4)dnl
13 m4_include(m4macros/glib-gettext.m4)dnl
14
15 #
16 # The following version number definitions apply to GLib, GModule, GObject 
17 # and GThread as a whole, so if changes occoured in any of them, they are all
18 # treated with the same interface and binary age.
19 #
20 # Making releases:
21 #   glib_micro_version += 1;
22 #   glib_interface_age += 1;
23 #   glib_binary_age += 1;
24 # if any functions have been added, set glib_interface_age to 0.
25 # if backwards compatibility has been broken,
26 # set glib_binary_age _and_ glib_interface_age to 0.
27 #
28 m4_define([glib_major_version], [2])
29 m4_define([glib_minor_version], [8])
30 m4_define([glib_micro_version], [0])
31 m4_define([glib_interface_age], [0])
32 m4_define([glib_binary_age],
33           [m4_eval(100 * glib_minor_version + glib_micro_version)])
34 m4_define([glib_version],
35           [glib_major_version.glib_minor_version.glib_micro_version])
36
37 # libtool version related macros
38 m4_define([glib_lt_release], [glib_major_version.glib_minor_version])
39 m4_define([glib_lt_current],
40           [m4_eval(100 * glib_minor_version + glib_micro_version - glib_interface_age)])
41 m4_define([glib_lt_revision], [glib_interface_age])
42 m4_define([glib_lt_age], [m4_eval(glib_binary_age - glib_interface_age)])
43 m4_define([glib_lt_current_minus_age],
44           [m4_eval(glib_lt_current - glib_lt_age)])
45
46 # if the minor version number is odd, then we want debugging.  Otherwise
47 # we only want minimal debugging support.
48 m4_define([glib_debug_default],
49           [m4_if(m4_eval(glib_minor_version % 2), [1], [yes], [minimum])])dnl
50
51
52 AC_INIT(glib, [glib_version],
53         [http://bugzilla.gnome.org/enter_bug.cgi?product=glib])
54
55 AC_CONFIG_SRCDIR([glib/glib.h])
56
57 # Save this value here, since automake will set cflags later
58 cflags_set=${CFLAGS+set}
59
60 AM_INIT_AUTOMAKE([no-define])
61
62 # Specify a configuration file
63 AM_CONFIG_HEADER([config.h])
64
65
66 GLIB_MAJOR_VERSION=glib_major_version
67 GLIB_MINOR_VERSION=glib_minor_version
68 GLIB_MICRO_VERSION=glib_micro_version
69 GLIB_INTERFACE_AGE=glib_interface_age
70 GLIB_BINARY_AGE=glib_binary_age
71 GLIB_VERSION=glib_version
72
73 AC_SUBST(GLIB_MAJOR_VERSION)
74 AC_SUBST(GLIB_MINOR_VERSION)
75 AC_SUBST(GLIB_MICRO_VERSION)
76 AC_SUBST(GLIB_VERSION)
77 AC_SUBST(GLIB_INTERFACE_AGE)
78 AC_SUBST(GLIB_BINARY_AGE)
79
80 AC_DEFINE(GLIB_MAJOR_VERSION, [glib_major_version],
81           [Define to the GLIB major version])
82 AC_DEFINE(GLIB_MINOR_VERSION, [glib_minor_version],
83           [Define to the GLIB minor version])
84 AC_DEFINE(GLIB_MICRO_VERSION, [glib_micro_version],
85           [Define to the GLIB micro version])
86 AC_DEFINE(GLIB_INTERFACE_AGE, [glib_interface_age],
87           [Define to the GLIB interface age])
88 AC_DEFINE(GLIB_BINARY_AGE, [glib_binary_age],
89           [Define to the GLIB binary age])
90
91 # libtool versioning
92 LT_RELEASE=glib_lt_release
93 LT_CURRENT=glib_lt_current
94 LT_REVISION=glib_lt_revision
95 LT_AGE=glib_lt_age
96 LT_CURRENT_MINUS_AGE=glib_lt_current_minus_age
97 AC_SUBST(LT_RELEASE)
98 AC_SUBST(LT_CURRENT)
99 AC_SUBST(LT_REVISION)
100 AC_SUBST(LT_AGE)
101 AC_SUBST(LT_CURRENT_MINUS_AGE)
102
103 dnl Initialize maintainer mode
104 AM_MAINTAINER_MODE
105
106 AC_CANONICAL_HOST
107
108 AC_MSG_CHECKING([for the BeOS])
109 case $host in
110   *-*-beos*)
111     glib_native_beos="yes"
112     ;;
113   *)
114     glib_native_beos="no"
115     ;;
116 esac
117 AC_MSG_RESULT([$glib_native_beos])
118
119 dnl
120
121 AC_MSG_CHECKING([for Win32])
122 case "$host" in
123   *-*-mingw*)
124     glib_native_win32=yes
125     GLIB_DEF=glib.def
126     GMODULE_DEF=gmodule.def
127     GOBJECT_DEF=gobject.def
128     GTHREAD_DEF=gthread.def
129     TESTGMODULE_EXP=testgmodule.exp
130     glib_pid_type='void *'
131     ;;
132   *)
133     glib_native_win32=no
134     GLIB_DEF=
135     GMODULE_DEF=
136     GOBJECT_DEF=
137     GTHREAD_DEF=
138     TESTGMODULE_EXP=
139     glib_pid_type=int
140     ;;
141 esac
142 case $host in
143   *-*-linux*)
144     glib_os_linux=yes
145     ;;
146 esac
147
148
149 AC_MSG_RESULT([$glib_native_win32])
150 AM_CONDITIONAL(OS_WIN32, [test "$glib_native_win32" = "yes"])
151 AM_CONDITIONAL(OS_UNIX, [test "$glib_native_win32" != "yes"])
152 AM_CONDITIONAL(OS_LINUX, [test "$glib_os_linux" = "yes"])
153 AC_SUBST(GLIB_DEF)
154 AC_SUBST(GMODULE_DEF)
155 AC_SUBST(GOBJECT_DEF)
156 AC_SUBST(GTHREAD_DEF)
157 AC_SUBST(TESTGMODULE_EXP)
158
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])
170 fi
171 AM_CONDITIONAL(MS_LIB_AVAILABLE, [test x$ms_librarian = xyes])
172
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 "^[[^_]].*"'
177 else
178     # We currently use .def files on Windows
179     LIBTOOL_EXPORT_OPTIONS=
180 fi
181 AC_SUBST(LIBTOOL_EXPORT_OPTIONS)
182
183 dnl declare --enable-* args and collect ac_help strings
184 AC_ARG_ENABLE(debug,
185               AC_HELP_STRING([--enable-debug=@<:@no/minimum/yes@:>@],
186                              [turn on debugging @<:@default=glib_debug_default@:>@]),,
187               enable_debug=glib_debug_default)
188
189 AC_ARG_ENABLE(gc_friendly,
190               [AC_HELP_STRING([--enable-gc-friendly],
191                               [turn on garbage collector friendliness [default=no]])],,
192               [enable_gc_friendly=no])
193 AC_ARG_ENABLE(mem_pools,
194               [AC_HELP_STRING([--disable-mem-pools],
195                               [disable all glib memory pools])],,
196               [disable_mem_pools=no])
197 AC_ARG_ENABLE(threads,
198               [AC_HELP_STRING([--enable-threads],
199                               [turn on basic thread support [default=yes]
200 ([=no] will override --with-threads)])],,
201               [enable_threads=yes])
202 AC_ARG_ENABLE(rebuilds,
203               [AC_HELP_STRING([--disable-rebuilds],
204                               [disable all source autogeneration rules])],,
205               [enable_rebuilds=yes])
206 AC_ARG_ENABLE(visibility,
207               [AC_HELP_STRING([--disable-visibility],
208                               [don't use ELF visibility attributes])],,
209               [enable_visibility=yes])
210
211 if test "x$enable_threads" != "xyes"; then
212   enable_threads=no
213 fi
214
215 AC_DEFINE_UNQUOTED(G_COMPILED_WITH_DEBUGGING, ["${enable_debug}"],
216         [Whether glib was compiled with debugging enabled])
217
218 AC_MSG_CHECKING([whether to enable garbage collector friendliness])
219 if test "x$enable_gc_friendly" = "xyes"; then
220   AC_DEFINE(ENABLE_GC_FRIENDLY, 1, [Whether to enable GC friendliness])
221   AC_SUBST(ENABLE_GC_FRIENDLY)
222   AC_MSG_RESULT([yes])
223 else
224   AC_MSG_RESULT([no])
225 fi
226
227 AC_MSG_CHECKING([whether to disable memory pools])
228 if test "x$disable_mem_pools" = "xno"; then
229   AC_MSG_RESULT([no])
230 else
231   AC_DEFINE(DISABLE_MEM_POOLS, [1], [Whether to disable memory pools])
232   AC_SUBST(DISABLE_MEM_POOLS)
233   AC_MSG_RESULT([yes])
234 fi
235
236 if test "$glib_native_win32" = "yes"; then
237   if test x$enable_static = xyes -o x$enable_static = x; then
238     AC_MSG_WARN([Disabling static library build, must build as DLL on Windows.])
239     enable_static=no
240   fi
241   if test x$enable_shared = xno; then
242     AC_MSG_WARN([Enabling shared library build, must build as DLL on Windows.])
243   fi
244   enable_shared=yes
245 fi
246
247 dnl Checks for programs.
248 AC_PROG_CC
249
250 dnl Check for a working C++ compiler, but do not bail out, if none is found.
251 AC_CHECK_PROGS(CXX, [$CCC c++ g++ gcc CC cxx cc++ cl], [gcc])
252 AC_LANG_SAVE
253 AC_LANG_CPLUSPLUS
254 AC_TRY_COMPILE(,[class a { int b; } c;], ,CXX=)
255 AM_CONDITIONAL(HAVE_CXX, [test "$CXX" != ""])
256 AC_LANG_RESTORE
257
258 AM_PROG_CC_STDC
259 AC_PROG_INSTALL
260
261 AC_SYS_LARGEFILE
262
263 #
264 # Find pkg-config
265 #
266 AC_PATH_PROG(PKG_CONFIG, [pkg-config], [no])
267 if test x$PKG_CONFIG = xno ; then
268   AC_MSG_ERROR([*** pkg-config not found. See http://www.freedesktop.org/software/pkgconfig/])
269 fi
270
271 if $PKG_CONFIG --atleast-pkgconfig-version 0.14 ; then
272   :
273 else
274   AC_MSG_ERROR([*** pkg-config too old; version 0.14 or better required.])
275 fi
276
277 if test "x$enable_debug" = "xyes"; then
278   if test x$cflags_set != xset ; then
279       case " $CFLAGS " in
280       *[[\ \    ]]-g[[\ \       ]]*) ;;
281       *) CFLAGS="$CFLAGS -g" ;;
282       esac
283   fi
284         
285   GLIB_DEBUG_FLAGS="-DG_ENABLE_DEBUG"
286 else
287   GLIB_DEBUG_FLAGS="-DG_DISABLE_CAST_CHECKS"
288
289   if test "x$enable_debug" = "xno"; then
290     GLIB_DEBUG_FLAGS="$GLIB_DEBUG_FLAGS -DG_DISABLE_ASSERT -DG_DISABLE_CHECKS"
291   fi
292 fi
293
294 if test "x$enable_visibility" = "xno"; then
295   GLIB_DEBUG_FLAGS="$GLIB_DEBUG_FLAGS -DDISABLE_VISIBILITY"
296 fi
297
298 # Ensure MSVC-compatible struct packing convention is used when
299 # compiling for Win32 with gcc.
300 # What flag to depends on gcc version: gcc3 uses "-mms-bitfields", while
301 # gcc2 uses "-fnative-struct".
302 if test x"$glib_native_win32" = xyes; then
303   if test x"$GCC" = xyes; then
304     msnative_struct=''
305     AC_MSG_CHECKING([how to get MSVC-compatible struct packing])
306     if test -z "$ac_cv_prog_CC"; then
307       our_gcc="$CC"
308     else
309       our_gcc="$ac_cv_prog_CC"
310     fi
311     case `$our_gcc --version | sed -e 's,\..*,.,' -e q` in
312       2.)
313         if $our_gcc -v --help 2>/dev/null | grep fnative-struct >/dev/null; then
314           msnative_struct='-fnative-struct'
315         fi
316         ;;
317       *)
318         if $our_gcc -v --help 2>/dev/null | grep ms-bitfields >/dev/null; then
319           msnative_struct='-mms-bitfields'
320         fi
321         ;;
322     esac
323     if test x"$msnative_struct" = x ; then
324       AC_MSG_RESULT([no way])
325       AC_MSG_WARN([produced libraries might be incompatible with MSVC-compiled code])
326     else
327       CFLAGS="$CFLAGS $msnative_struct"
328       AC_MSG_RESULT([${msnative_struct}])
329     fi
330   fi
331 fi
332
333 AC_EXEEXT
334
335 # define a MAINT-like variable REBUILD which is set if Perl
336 # and awk are found, so autogenerated sources can be rebuilt
337 AC_PROG_AWK
338 AC_CHECK_PROGS(PERL, [perl5 perl])
339 # We would like indent, but don't require it.
340 AC_CHECK_PROG(INDENT, indent, indent)
341 REBUILD=\#
342 if test "x$enable_rebuilds" = "xyes" && \
343      test -n "$PERL" && \
344      $PERL -e 'exit !($] >= 5.002)' > /dev/null 2>&1 && \
345      test -n "$AWK" ; then
346   REBUILD=
347 fi
348 AC_SUBST(REBUILD)
349
350 # Need full path to Perl for glib-mkenums
351 #
352 if test "x$PERL" != x ; then
353   AC_PATH_PROG(PERL_PATH, [$PERL])
354 else
355   PERL_PATH="/usr/bin/env perl"
356 fi
357 AC_SUBST(PERL_PATH)
358
359 dnl ***********************
360 dnl *** Tests for iconv ***
361 dnl ***********************
362 dnl
363 dnl We do this before the gettext checks, to avoid distortion
364
365 AC_ARG_WITH(libiconv,
366             [AC_HELP_STRING([--with-libiconv=@<:@no/gnu/native@:>@],
367                             [use the libiconv library])],,
368             [with_libiconv=maybe])
369
370 found_iconv=no
371 case $with_libiconv in
372   maybe)
373     # Check in the C library first
374     AC_CHECK_FUNC(iconv_open, [with_libiconv=no; found_iconv=yes])
375     # Check if we have GNU libiconv
376     if test $found_iconv = "no"; then
377       AC_CHECK_LIB(iconv, libiconv_open, [with_libiconv=gnu; found_iconv=yes])
378     fi
379     # Check if we have a iconv in -liconv, possibly from vendor
380     if test $found_iconv = "no"; then
381       AC_CHECK_LIB(iconv, iconv_open, [with_libiconv=native; found_iconv=yes])
382     fi
383     ;;
384   no)
385     AC_CHECK_FUNC(iconv_open, [with_libiconv=no; found_iconv=yes])
386     ;;
387   gnu|yes)
388     AC_CHECK_LIB(iconv, libiconv_open, [with_libiconv=gnu; found_iconv=yes])
389     ;;
390   native)
391     AC_CHECK_LIB(iconv, iconv_open, [with_libiconv=native; found_iconv=yes])
392     ;;
393 esac
394
395 if test "x$found_iconv" = "xno" ; then
396    AC_MSG_ERROR([*** No iconv() implementation found in C library or libiconv])
397 fi
398
399 jm_GLIBC21
400 AC_ARG_ENABLE(iconv-cache, 
401               [AC_HELP_STRING([--enable-iconv-cache=@<:@yes/no/auto@:>@],
402                               [cache iconv descriptors [default=auto]])],,
403               [enable_iconv_cache=auto])
404
405 AC_MSG_CHECKING([Whether to cache iconv descriptors])
406 case $enable_iconv_cache in
407   auto)
408     if test $ac_cv_gnu_library_2_1 = yes; then
409       enable_iconv_cache=no
410     else 
411       enable_iconv_cache=yes
412     fi
413   ;;
414   yes|no) 
415   ;;
416   *) AC_MSG_ERROR([Value given to --enable-iconv-cache must be one of yes, no or auto])
417   ;;
418 esac
419
420 if test $enable_iconv_cache = yes; then
421    AC_DEFINE(NEED_ICONV_CACHE,1,[Do we cache iconv descriptors])
422 fi
423
424 AC_MSG_RESULT($enable_iconv_cache)
425
426
427 dnl
428 dnl gettext support
429 dnl
430
431 ALL_LINGUAS="am ar az be bg bn bs ca cs cy da de el en_CA en_GB eo es et eu fa fi fr ga gl gu he hi hr hu id is it ja ko lt lv mk mn ms nb ne nl nn no or pa pl pt pt_BR ro ru rw sk sl sq sr sr@ije sr@Latn sv ta te th tl tr uk vi wa xh yi zh_CN zh_TW"
432 GLIB_GNU_GETTEXT
433
434 if test "$gt_cv_have_gettext" != "yes" ; then
435   AC_MSG_ERROR([
436 *** You must have either have gettext support in your C library, or use the 
437 *** GNU gettext library. (http://www.gnu.org/software/gettext/gettext.html
438 ])
439 fi
440
441 LIBS="$INTLLIBS $LIBS"
442
443 GETTEXT_PACKAGE=glib20
444 AC_SUBST(GETTEXT_PACKAGE)
445 AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, ["$GETTEXT_PACKAGE"], 
446   [Define the gettext package to be used])
447
448 GLIB_DEFINE_LOCALEDIR(GLIB_LOCALE_DIR)
449
450 dnl
451 dnl Now we are done with gettext checks, figure out ICONV_LIBS
452 dnl
453
454 if test x$with_libiconv != xno ; then
455   case " $INTLLIBS " in
456   *[[\ \        ]]-liconv[[\ \  ]]*) ;;
457   *) ICONV_LIBS="-liconv" ;;
458   esac
459 fi
460 AC_SUBST(ICONV_LIBS)
461
462 case $with_libiconv in
463   gnu)
464     AC_DEFINE(USE_LIBICONV_GNU, 1, [Using GNU libiconv])
465     ;;
466   native)
467     AC_DEFINE(USE_LIBICONV_NATIVE, 1, [Using a native implementation of iconv in a separate library])
468     ;;
469 esac
470
471 dnl Initialize libtool
472 AM_DISABLE_STATIC
473 AC_LIBTOOL_WIN32_DLL
474 AM_PROG_LIBTOOL
475
476 if test "x$GCC" = "xyes"; then
477   case " $CFLAGS " in
478   *[[\ \        ]]-Wall[[\ \    ]]*) ;;
479   *) CFLAGS="$CFLAGS -Wall" ;;
480   esac
481 fi
482
483 dnl
484 dnl DU4 native cc currently needs -std1 for ANSI mode (instead of K&R)
485 dnl
486 if test $cross_compiling != yes ; then
487     AC_MSG_CHECKING([for extra flags to get ANSI library prototypes])
488     glib_save_LIBS=$LIBS
489     LIBS="$LIBS -lm"
490     AC_TRY_RUN([#include <math.h>
491                  int main (void) { return (log(1) != log(1.)); }],
492          AC_MSG_RESULT(none needed),
493          glib_save_CFLAGS=$CFLAGS
494          CFLAGS="$CFLAGS -std1"
495          AC_TRY_RUN([#include <math.h>
496                      int main (void) { return (log(1) != log(1.)); }],
497              AC_MSG_RESULT(-std1),
498              AC_MSG_RESULT()
499              CFLAGS=$glib_save_CFLAGS
500              AC_MSG_WARN(
501                     [No ANSI prototypes found in library. (-std1 didn't work.)])
502          )
503     )
504     LIBS=$glib_save_LIBS
505 fi
506
507 dnl NeXTStep cc seems to need this
508 AC_MSG_CHECKING([for extra flags for POSIX compliance])
509 AC_TRY_COMPILE([#include <dirent.h>], [DIR *dir;],
510   AC_MSG_RESULT(none needed),
511   glib_save_CFLAGS=$CFLAGS
512   CFLAGS="$CFLAGS -posix"
513   AC_TRY_COMPILE([#include <dirent.h>], [DIR *dir;],
514     AC_MSG_RESULT(-posix),
515     AC_MSG_RESULT()
516     CFLAGS=$glib_save_CFLAGS
517     AC_MSG_WARN([Could not determine POSIX flag. (-posix didn't work.)])))
518
519 # Checks for header files.
520 AC_HEADER_STDC
521
522 # Checks for library functions.
523 AC_FUNC_VPRINTF
524 AC_FUNC_MMAP
525 AC_FUNC_ALLOCA
526
527 AC_CHECK_FUNCS(atexit on_exit)
528
529 AC_CHECK_SIZEOF(char)
530 AC_CHECK_SIZEOF(short)
531 AC_CHECK_SIZEOF(long)
532 AC_CHECK_SIZEOF(int)
533 AC_CHECK_SIZEOF(void *)
534 AC_CHECK_SIZEOF(long long)
535 AC_CHECK_SIZEOF(__int64)
536
537 if test x$ac_cv_sizeof_long = x8 || test x$ac_cv_sizeof_long_long = x8 || test x$ac_cv_sizeof___int64 = x8 ; then
538   :
539 else
540   AC_MSG_ERROR([
541 *** GLib requires a 64 bit type. You might want to consider
542 *** using the GNU C compiler.
543 ])
544 fi
545
546 if test x$glib_native_win32 != xyes && test x$ac_cv_sizeof_long_long = x8; then
547         # long long is a 64 bit integer.
548         AC_MSG_CHECKING(for format to printf and scanf a guint64)
549         AC_CACHE_VAL(glib_cv_long_long_format,[
550                 for format in ll q I64; do
551                   AC_TRY_RUN([#include <stdio.h>  
552                         int main()
553                         {
554                           long long b, a = -0x3AFAFAFAFAFAFAFALL;
555                           char buffer[1000];
556                           sprintf (buffer, "%${format}u", a);
557                           sscanf (buffer, "%${format}u", &b);
558                           exit (b!=a);
559                         }
560                         ],
561                         [glib_cv_long_long_format=${format}
562                         break],
563                         [],[:])
564                 done])
565         if test -n "$glib_cv_long_long_format"; then
566           AC_MSG_RESULT(%${glib_cv_long_long_format}u)
567           AC_DEFINE(HAVE_LONG_LONG_FORMAT,1,[define if system printf can print long long])
568           if test x"$glib_cv_long_long_format" = xI64; then
569             AC_DEFINE(HAVE_INT64_AND_I64,1,[define to support printing 64-bit integers with format I64])
570           fi
571         else
572           AC_MSG_RESULT(none)
573         fi
574 elif test x$ac_cv_sizeof___int64 = x8; then
575         # __int64 is a 64 bit integer.
576         AC_MSG_CHECKING(for format to printf and scanf a guint64)
577         # We know this is MSVCRT.DLL, and what the formats are
578         glib_cv_long_long_format=I64
579         AC_MSG_RESULT(%${glib_cv_long_long_format}u)
580         AC_DEFINE(HAVE_LONG_LONG_FORMAT,1,[define if system printf can print long long])
581         AC_DEFINE(HAVE_INT64_AND_I64,1,[define to support printing 64-bit integers with format I64])
582 fi
583
584 dnl long doubles were not used, and a portability problem
585 dnl AC_C_LONG_DOUBLE
586 AC_C_CONST
587
588 dnl ok, here we try to check whether the systems prototypes for
589 dnl malloc and friends actually match the prototypes provided
590 dnl by gmem.h (keep in sync). i currently only know how to check
591 dnl this reliably with gcc (-Werror), improvements for other
592 dnl compilers are apprechiated.
593 SANE_MALLOC_PROTOS=no
594 AC_MSG_CHECKING([if malloc() and friends prototypes are gmem.h compatible])
595 glib_save_CFLAGS=$CFLAGS
596 if test "x$GCC" = "xyes"; then
597   CFLAGS="$CFLAGS -Werror"
598   AC_TRY_COMPILE([#include <stdlib.h>], [
599     void* (*my_calloc_p)  (size_t, size_t) = calloc;
600     void* (*my_malloc_p)  (size_t)         = malloc;
601     void  (*my_free_p)    (void*)          = free;
602     void* (*my_realloc_p) (void*, size_t)  = realloc;
603     my_calloc_p = 0;
604     my_malloc_p = 0;
605     my_free_p = 0;
606     my_realloc_p = 0;
607   ],
608     AC_DEFINE(SANE_MALLOC_PROTOS, 1, 
609       [Define if you have correct malloc prototypes])
610     SANE_MALLOC_PROTOS=yes)
611 fi
612 AC_MSG_RESULT($SANE_MALLOC_PROTOS)
613 CFLAGS=$glib_save_CFLAGS
614
615 dnl
616 dnl check in which direction the stack grows
617 dnl
618 AC_CACHE_CHECK([for growing stack pointer],glib_cv_stack_grows,[
619         AC_TRY_RUN([
620         volatile int *a = 0, *b = 0;
621         void foo (void);
622         int main () { volatile int y = 7; a = &y; foo (); return b > a; }
623         void foo (void) { volatile int x = 5; b = &x; }
624         ],
625         glib_cv_stack_grows=no
626         ,
627         glib_cv_stack_grows=yes
628         ,)
629 ])
630
631 dnl AC_C_INLINE is useless to us since it bails out too early, we need to
632 dnl truely know which ones of `inline', `__inline' and `__inline__' are
633 dnl actually supported.
634 AC_CACHE_CHECK([for __inline],glib_cv_has__inline,[
635         AC_COMPILE_IFELSE([
636         __inline int foo () { return 0; }
637         int main () { return foo (); }
638         ],
639         glib_cv_has__inline=yes
640         ,
641         glib_cv_has__inline=no
642         ,)
643 ])
644 case x$glib_cv_has__inline in
645 xyes) AC_DEFINE(G_HAVE___INLINE,1,[Have __inline keyword])
646 esac
647 AC_CACHE_CHECK([for __inline__],glib_cv_has__inline__,[
648         AC_COMPILE_IFELSE([
649         __inline__ int foo () { return 0; }
650         int main () { return foo (); }
651         ],
652         glib_cv_has__inline__=yes
653         ,
654         glib_cv_has__inline__=no
655         ,)
656 ])
657 case x$glib_cv_has__inline__ in
658 xyes) AC_DEFINE(G_HAVE___INLINE__,1,[Have __inline__ keyword])
659 esac
660 AC_CACHE_CHECK([for inline], glib_cv_hasinline,[
661         AC_COMPILE_IFELSE([
662         #undef inline
663         inline int foo () { return 0; }
664         int main () { return foo (); }
665         ],
666         glib_cv_hasinline=yes
667         ,
668         glib_cv_hasinline=no
669         ,)
670 ])
671 case x$glib_cv_hasinline in
672 xyes) AC_DEFINE(G_HAVE_INLINE,1,[Have inline keyword])
673 esac
674
675 # if we can use inline functions in headers
676 AC_MSG_CHECKING(if inline functions in headers work)
677 AC_LINK_IFELSE([
678 #if defined (G_HAVE_INLINE) && defined (__GNUC__) && defined (__STRICT_ANSI__)
679 #  undef inline
680 #  define inline __inline__
681 #elif !defined (G_HAVE_INLINE)
682 #  undef inline
683 #  if defined (G_HAVE___INLINE__)
684 #    define inline __inline__
685 #  elif defined (G_HAVE___INLINE)
686 #    define inline __inline
687 #  endif
688 #endif
689
690 int glib_test_func2 (int);
691
692 static inline int
693 glib_test_func1 (void) {
694   return glib_test_func2 (1);
695 }
696
697 int
698 main (void) {
699   int i = 1;
700 }],[g_can_inline=yes],[g_can_inline=no])
701 AC_MSG_RESULT($g_can_inline)
702
703 # check for flavours of varargs macros
704 AC_MSG_CHECKING(for ISO C99 varargs macros in C)
705 AC_TRY_COMPILE([],[
706 int a(int p1, int p2, int p3);
707 #define call_a(...) a(1,__VA_ARGS__)
708 call_a(2,3);
709 ],g_have_iso_c_varargs=yes,g_have_iso_c_varargs=no)
710 AC_MSG_RESULT($g_have_iso_c_varargs)
711
712 AC_MSG_CHECKING(for ISO C99 varargs macros in C++)
713 if test "$CXX" = ""; then
714 dnl No C++ compiler
715   g_have_iso_cxx_varargs=no
716 else
717   AC_LANG_CPLUSPLUS
718   AC_TRY_COMPILE([],[
719 int a(int p1, int p2, int p3);
720 #define call_a(...) a(1,__VA_ARGS__)
721 call_a(2,3);
722 ],g_have_iso_cxx_varargs=yes,g_have_iso_cxx_varargs=no)
723   AC_LANG_C
724 fi
725 AC_MSG_RESULT($g_have_iso_cxx_varargs)
726
727 AC_MSG_CHECKING(for GNUC varargs macros)
728 AC_TRY_COMPILE([],[
729 int a(int p1, int p2, int p3);
730 #define call_a(params...) a(1,params)
731 call_a(2,3);
732 ],g_have_gnuc_varargs=yes,g_have_gnuc_varargs=no)
733 AC_MSG_RESULT($g_have_gnuc_varargs)
734
735 # check for GNUC visibility support
736 AC_MSG_CHECKING(for GNUC visibility attribute)
737 GLIB_CHECK_COMPILE_WARNINGS([
738 void
739 __attribute__ ((visibility ("hidden")))
740      f_hidden (void)
741 {
742 }
743 void
744 __attribute__ ((visibility ("internal")))
745      f_internal (void)
746 {
747 }
748 void
749 __attribute__ ((visibility ("protected")))
750      f_protected (void)
751 {
752 }
753 void
754 __attribute__ ((visibility ("default")))
755      f_default (void)
756 {
757 }
758 int main (int argc, char **argv)
759 {
760         f_hidden();
761         f_internal();
762         f_protected();
763         f_default();
764         return 0;
765 }
766 ],g_have_gnuc_visibility=yes,g_have_gnuc_visibility=no)
767 AC_MSG_RESULT($g_have_gnuc_visibility)
768 AM_CONDITIONAL(HAVE_GNUC_VISIBILITY, [test x$g_have_gnuc_visibility = xyes])
769
770 # check for bytesex stuff
771 AC_C_BIGENDIAN
772
773 # check for header files
774 AC_CHECK_HEADERS([dirent.h float.h limits.h pwd.h sys/param.h sys/poll.h sys/select.h sys/types.h])
775 AC_CHECK_HEADERS([sys/time.h sys/times.h unistd.h values.h stdint.h sched.h])
776
777 # Checks for libcharset
778 jm_LANGINFO_CODESET
779 jm_GLIBC21
780 AC_CHECK_HEADERS([stddef.h stdlib.h string.h])
781 AC_CHECK_FUNCS(setlocale)
782
783 # check additional type sizes
784 AC_CHECK_SIZEOF(size_t)
785
786 dnl Try to figure out whether gsize, gssize should be long or int
787 AC_MSG_CHECKING([for the appropriate definition for size_t])
788
789 case $ac_cv_sizeof_size_t in
790   $ac_cv_sizeof_short) 
791       glib_size_type=short
792       ;;
793   $ac_cv_sizeof_int) 
794       glib_size_type=int
795       ;;
796   $ac_cv_sizeof_long) 
797       glib_size_type=long
798       ;;
799   *)  AC_MSG_ERROR([No type matching size_t in size])
800       ;;
801 esac
802
803 dnl If int/long are the same size, we see which one produces
804 dnl warnings when used in the location as size_t. (This matters
805 dnl on AIX with xlc)
806 dnl
807 if test $ac_cv_sizeof_size_t = $ac_cv_sizeof_int &&
808    test $ac_cv_sizeof_size_t = $ac_cv_sizeof_long ; then
809   GLIB_CHECK_COMPILE_WARNINGS([
810 #if defined(_AIX) && !defined(__GNUC__)
811 #pragma options langlvl=stdc89
812 #endif
813 #include <stddef.h> 
814 int main ()
815 {
816   size_t s = 1;
817   unsigned int *size_int = &s;
818   return (int)*size_int;
819 }
820     ],glib_size_type=int,
821       [GLIB_CHECK_COMPILE_WARNINGS([
822 #if defined(_AIX) && !defined(__GNUC__)
823 #pragma options langlvl=stdc89
824 #endif
825 #include <stddef.h> 
826 int main ()
827 {
828    size_t s = 1;
829    unsigned long *size_long = &s;
830    return (int)*size_long;
831 }
832         ],glib_size_type=long)])
833 fi
834
835 AC_MSG_RESULT(unsigned $glib_size_type)
836
837 # Check for some functions
838 AC_CHECK_FUNCS(lstat strerror strsignal memmove mkstemp vsnprintf stpcpy strcasecmp strncasecmp poll getcwd nanosleep vasprintf setenv unsetenv getc_unlocked readlink symlink)
839
840 AC_FUNC_VSNPRINTF_C99
841 AC_FUNC_PRINTF_UNIX98
842
843 #
844 # Check whether to use an included printf
845 #
846
847 AC_ARG_ENABLE(included-printf,
848               [AC_HELP_STRING([--enable-included-printf],
849                               [use included printf [default=auto]])],
850               enable_included_printf="$enableval")
851
852 need_included_printf=no
853 if test "x$enable_included_printf" = "xyes" ; then
854   need_included_printf=yes
855 fi
856 if test "$ac_cv_func_vsnprintf_c99" != "yes" ; then
857   need_included_printf=yes
858 fi
859 if test "$ac_cv_func_printf_unix98" != "yes" ; then
860   need_included_printf=yes
861 fi
862 if test "x$ac_cv_sizeof_long_long" = "x8" &&
863    test -z "$glib_cv_long_long_format" ; then
864   need_included_printf=yes
865 fi
866
867 if test "x$enable_included_printf" = "xno" && 
868    test "x$need_included_printf" = "xyes" ; then
869   AC_MSG_ERROR([
870 *** Your C library's printf doesn't appear to have the features that
871 *** GLib needs, but you specified --enable-included-printf=no.])
872 fi
873
874 enable_included_printf=$need_included_printf
875
876 AM_CONDITIONAL(HAVE_GOOD_PRINTF, test "$enable_included_printf" != "yes")
877 if test "$enable_included_printf" != "yes" ; then 
878   AC_DEFINE(HAVE_GOOD_PRINTF,1,[define to use system printf])
879 else
880   if test -z "$glib_cv_long_long_format" ; then
881     glib_cv_long_long_format="ll"
882   fi
883   AC_DEFINE(HAVE_VASPRINTF,1)
884 fi
885
886 # Checks needed for gnulib vasnprintf
887 bh_C_SIGNED
888 jm_AC_TYPE_LONG_LONG
889 gt_TYPE_LONGDOUBLE
890 gt_TYPE_WCHAR_T
891 gt_TYPE_WINT_T
892 AC_TYPE_SIZE_T
893 AC_CHECK_TYPES(ptrdiff_t)
894 jm_AC_TYPE_INTMAX_T
895 AC_CHECK_FUNCS(snprintf)
896 AC_FUNC_SNPRINTF_C99
897
898 # Check if bcopy can be used for overlapping copies, if memmove isn't found.
899 # The check is borrowed from the PERL Configure script.
900 if test "$ac_cv_func_memmove" != "yes"; then
901   AC_CACHE_CHECK(whether bcopy can handle overlapping copies,
902     glib_cv_working_bcopy,[AC_TRY_RUN([
903       int main() {
904         char buf[128], abc[128], *b;
905         int len, off, align;
906         bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
907         for (align = 7; align >= 0; align--) {
908           for (len = 36; len; len--) {
909             b = buf+align; bcopy(abc, b, len);
910             for (off = 1; off <= len; off++) {
911               bcopy(b, b+off, len); bcopy(b+off, b, len);
912                 if (bcmp(b, abc, len)) return(1);
913             }
914           }
915         }
916         return(0);
917       }],glib_cv_working_bcopy=yes,glib_cv_working_bcopy=no)])
918
919   GLIB_ASSERT_SET(glib_cv_working_bcopy)
920   if test "$glib_cv_working_bcopy" = "yes"; then
921     AC_DEFINE(HAVE_WORKING_BCOPY,1,[Have a working bcopy])
922   fi
923 fi
924
925 # Check for sys_errlist
926 AC_MSG_CHECKING(for sys_errlist)
927 AC_TRY_LINK(, [
928 extern char *sys_errlist[];
929 extern int sys_nerr;
930 sys_errlist[sys_nerr-1][0] = 0;
931 ], glib_ok=yes, glib_ok=no)
932 AC_MSG_RESULT($glib_ok)
933 if test "$glib_ok" = "no"; then
934     AC_DEFINE(NO_SYS_ERRLIST,1,[global 'sys_errlist' not found])
935 fi
936
937 # Check for sys_siglist
938 AC_MSG_CHECKING(for sys_siglist)
939 AC_TRY_LINK(, [
940 extern char *sys_siglist[];
941 exit (sys_siglist[0]);
942 ], glib_ok=yes, glib_ok=no)
943 AC_MSG_RESULT($glib_ok)
944 if test "$glib_ok" = "no"; then
945     AC_DEFINE(NO_SYS_SIGLIST,1,[global 'sys_siglist' not found])
946 fi
947
948 # Check for sys_siglist decl (see Tue Jan 19 00:44:24 1999 in changelog)
949 AC_MSG_CHECKING(for sys_siglist declaration)
950 AC_TRY_COMPILE([#include <signal.h>], [
951 strlen (sys_siglist[0]);
952 ], glib_ok=yes, glib_ok=no)
953 AC_MSG_RESULT($glib_ok)
954 if test "$glib_ok" = "no"; then
955     AC_DEFINE(NO_SYS_SIGLIST_DECL,1,[global 'sys_siglist' not declared])
956 fi
957
958 # Check if <sys/select.h> needs to be included for fd_set
959 AC_MSG_CHECKING([for fd_set])
960 AC_TRY_COMPILE([#include <sys/types.h>],
961         [fd_set readMask, writeMask;], gtk_ok=yes, gtk_ok=no)
962 if test "$gtk_ok" = "yes"; then
963     AC_MSG_RESULT([yes, found in sys/types.h])
964 else
965     AC_EGREP_HEADER(fd_set, sys/select.h, gtk_ok=yes)
966     if test "$gtk_ok" = "yes"; then
967         # *** FIXME: give it a different name
968         AC_DEFINE(HAVE_SYS_SELECT_H,1,[found fd_set in sys/select.h])
969         AC_MSG_RESULT([yes, found in sys/select.h])
970     else
971         AC_DEFINE(NO_FD_SET,1,[didn't find fd_set])
972         AC_MSG_RESULT(no)
973     fi
974 fi
975
976 dnl *** check for sane realloc() ***
977 AC_CACHE_CHECK([whether realloc (NULL,) will work],glib_cv_sane_realloc,[
978         AC_TRY_RUN([#include <stdlib.h>
979         int main() {
980           return realloc (0, sizeof (int)) == 0;
981         }],
982         [glib_cv_sane_realloc=yes],
983         [glib_cv_sane_realloc=no],
984         [glib_cv_sane_realloc=yes])
985 ])
986 if test x$glib_cv_sane_realloc = xyes; then
987   AC_DEFINE(REALLOC_0_WORKS,1,[whether realloc (NULL,) works])
988 fi
989
990 dnl Check for nl_langinfo and CODESET
991
992 AC_MSG_CHECKING([for nl_langinfo (CODESET)])
993 AC_TRY_COMPILE([#include <langinfo.h>],
994         [char *codeset = nl_langinfo (CODESET);],
995    AC_DEFINE(HAVE_CODESET,1,[Have nl_langinfo (CODESET)])
996    have_codeset=yes,
997    have_codeset=no)
998 AC_MSG_RESULT($have_codeset)
999
1000
1001 dnl ****************************************
1002 dnl *** strlcpy/strlcat                  ***
1003 dnl ****************************************
1004 # Check for strlcpy
1005 AC_CACHE_CHECK([for OpenBSD strlcpy/strlcat],glib_cv_have_strlcpy,[
1006 AC_TRY_RUN([#include <stdlib.h>
1007 #include <string.h>
1008 int main() {
1009   char p[10];
1010   (void) strlcpy (p, "hi", 10);
1011   if (strlcat (p, "bye", 0) != 3) 
1012     return 1;
1013   return 0;
1014 }], glib_cv_have_strlcpy=yes, 
1015     glib_cv_have_strlcpy=no,
1016     glib_cv_have_strlcpy=no)])
1017 if test "$glib_cv_have_strlcpy" = "yes"; then
1018     AC_DEFINE(HAVE_STRLCPY,1,[Have functions strlcpy and strlcat])
1019 fi
1020   
1021
1022 dnl **********************
1023 dnl *** va_copy checks ***
1024 dnl **********************
1025 dnl we currently check for all three va_copy possibilities, so we get
1026 dnl all results in config.log for bug reports.
1027 AC_CACHE_CHECK([for an implementation of va_copy()],glib_cv_va_copy,[
1028         AC_LINK_IFELSE([#include <stdarg.h>
1029         void f (int i, ...) {
1030         va_list args1, args2;
1031         va_start (args1, i);
1032         va_copy (args2, args1);
1033         if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
1034           exit (1);
1035         va_end (args1); va_end (args2);
1036         }
1037         int main() {
1038           f (0, 42);
1039           return 0;
1040         }],
1041         [glib_cv_va_copy=yes],
1042         [glib_cv_va_copy=no])
1043 ])
1044 AC_CACHE_CHECK([for an implementation of __va_copy()],glib_cv___va_copy,[
1045         AC_LINK_IFELSE([#include <stdarg.h>
1046         void f (int i, ...) {
1047         va_list args1, args2;
1048         va_start (args1, i);
1049         __va_copy (args2, args1);
1050         if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
1051           exit (1);
1052         va_end (args1); va_end (args2);
1053         }
1054         int main() {
1055           f (0, 42);
1056           return 0;
1057         }],
1058         [glib_cv___va_copy=yes],
1059         [glib_cv___va_copy=no])
1060 ])
1061
1062 if test "x$glib_cv_va_copy" = "xyes"; then
1063   g_va_copy_func=va_copy
1064 else if test "x$glib_cv___va_copy" = "xyes"; then
1065   g_va_copy_func=__va_copy
1066 fi
1067 fi
1068
1069 if test -n "$g_va_copy_func"; then
1070   AC_DEFINE_UNQUOTED(G_VA_COPY,$g_va_copy_func,[A 'va_copy' style function])
1071 fi
1072
1073 AC_CACHE_CHECK([whether va_lists can be copied by value],glib_cv_va_val_copy,[
1074         AC_TRY_RUN([#include <stdarg.h>
1075         void f (int i, ...) {
1076         va_list args1, args2;
1077         va_start (args1, i);
1078         args2 = args1;
1079         if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
1080           exit (1);
1081         va_end (args1); va_end (args2);
1082         }
1083         int main() {
1084           f (0, 42);
1085           return 0;
1086         }],
1087         [glib_cv_va_val_copy=yes],
1088         [glib_cv_va_val_copy=no],
1089         [glib_cv_va_val_copy=yes])
1090 ])
1091
1092 if test "x$glib_cv_va_val_copy" = "xno"; then
1093   AC_DEFINE(G_VA_COPY_AS_ARRAY,1, ['va_lists' cannot be copies as values])
1094 fi
1095
1096 dnl ***********************
1097 dnl *** g_module checks ***
1098 dnl ***********************
1099 G_MODULE_LIBS=
1100 G_MODULE_LIBS_EXTRA=
1101 G_MODULE_PLUGIN_LIBS=
1102 if test x"$glib_native_win32" = xyes; then
1103   dnl No use for this on Win32
1104   G_MODULE_LDFLAGS=
1105 else
1106   G_MODULE_LDFLAGS=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
1107 fi
1108 dnl G_MODULE_IMPL= don't reset, so cmd-line can override
1109 G_MODULE_NEED_USCORE=0
1110 G_MODULE_BROKEN_RTLD_GLOBAL=0
1111 G_MODULE_HAVE_DLERROR=0
1112 dnl *** force native WIN32 shared lib loader 
1113 if test -z "$G_MODULE_IMPL"; then
1114   case "$host" in
1115   *-*-mingw*|*-*-cygwin*) G_MODULE_IMPL=G_MODULE_IMPL_WIN32 ;;
1116   esac
1117 fi
1118 dnl *** force native AIX library loader
1119 dnl *** dlopen() filepath must be of the form /path/libname.a(libname.so)
1120 if test -z "$G_MODULE_IMPL"; then
1121   case "$host" in
1122   *-*-aix*) G_MODULE_IMPL=G_MODULE_IMPL_AR ;;
1123   esac
1124 fi
1125 dnl *** dlopen() and dlsym() in system libraries
1126 if test -z "$G_MODULE_IMPL"; then
1127         AC_CHECK_FUNC(dlopen,
1128                       [AC_CHECK_FUNC(dlsym,
1129                                      [G_MODULE_IMPL=G_MODULE_IMPL_DL],[])],
1130                       [])
1131 fi
1132 dnl *** load_image (BeOS)
1133 if test -z "$G_MODULE_IMPL" && test "x$glib_native_beos" = "xyes"; then
1134   AC_CHECK_LIB(root, load_image,
1135       [G_MODULE_LIBS="-lbe -lroot -lglib-2.0 "
1136       G_MODULE_LIBS_EXTRA="-L\$(top_builddir_full)/.libs"
1137       G_MODULE_PLUGIN_LIBS="-L\$(top_builddir_full)/gmodule/.libs -lgmodule"
1138       G_MODULE_IMPL=G_MODULE_IMPL_BEOS],
1139       [])
1140 fi   
1141 dnl *** NSLinkModule (dyld) in system libraries (Darwin)
1142 if test -z "$G_MODULE_IMPL"; then
1143         AC_CHECK_FUNC(NSLinkModule,
1144                       [G_MODULE_IMPL=G_MODULE_IMPL_DYLD
1145                        G_MODULE_NEED_USCORE=1],
1146                       [])
1147 fi
1148 dnl *** dlopen() and dlsym() in libdl
1149 if test -z "$G_MODULE_IMPL"; then
1150         AC_CHECK_LIB(dl, dlopen,
1151                      [AC_CHECK_LIB(dl, dlsym,
1152                                    [G_MODULE_LIBS=-ldl
1153                                    G_MODULE_IMPL=G_MODULE_IMPL_DL],[])],
1154                      [])
1155 fi
1156 dnl *** shl_load() in libdld (HP-UX)
1157 if test -z "$G_MODULE_IMPL"; then
1158         AC_CHECK_LIB(dld, shl_load,
1159                 [G_MODULE_LIBS=-ldld
1160                 G_MODULE_IMPL=G_MODULE_IMPL_DLD],
1161                 [])
1162 fi
1163 dnl *** additional checks for G_MODULE_IMPL_DL
1164 if test "$G_MODULE_IMPL" = "G_MODULE_IMPL_DL"; then
1165         LIBS_orig="$LIBS"
1166         LDFLAGS_orig="$LDFLAGS"
1167         LIBS="$G_MODULE_LIBS $LIBS"
1168         LDFLAGS="$LDFLAGS $G_MODULE_LDFLAGS"
1169 dnl *** check for OSF1/5.0 RTLD_GLOBAL brokenness
1170         echo "void glib_plugin_test(void) { }" > plugin.c
1171         ${SHELL} ./libtool --mode=compile ${CC} -shared \
1172                 -export-dynamic -o plugin.o plugin.c 2>&1 >/dev/null
1173         AC_CACHE_CHECK([for RTLD_GLOBAL brokenness],
1174                 glib_cv_rtldglobal_broken,[
1175                 AC_TRY_RUN([
1176 #include <dlfcn.h>
1177 #ifndef RTLD_GLOBAL
1178 #  define RTLD_GLOBAL 0
1179 #endif
1180 #ifndef RTLD_LAZY
1181 #  define RTLD_LAZY 0
1182 #endif
1183 int glib_plugin_test;
1184 int main () {
1185     void *handle, *global, *local;
1186     global = &glib_plugin_test;
1187     handle = dlopen ("./.libs/plugin.o", RTLD_GLOBAL | RTLD_LAZY);
1188     if (!handle) return 0;
1189     local = dlsym (handle, "glib_plugin_test");
1190     return global == local;
1191 }                       ],
1192                         [glib_cv_rtldglobal_broken=no],
1193                         [glib_cv_rtldglobal_broken=yes],
1194                         [glib_cv_rtldglobal_broken=no])
1195                 rm -f plugin.c plugin.o plugin.lo .libs/plugin.o
1196                 rmdir .libs 2>/dev/null
1197         ])
1198         if test "x$glib_cv_rtldglobal_broken" = "xyes"; then
1199                 G_MODULE_BROKEN_RTLD_GLOBAL=1
1200         else
1201                 G_MODULE_BROKEN_RTLD_GLOBAL=0
1202         fi
1203 dnl *** check whether we need preceeding underscores
1204         AC_CACHE_CHECK([for preceeding underscore in symbols],
1205                 glib_cv_uscore,[
1206                 AC_TRY_RUN([#include <dlfcn.h>
1207                 int glib_underscore_test (void) { return 42; }
1208                 int main() {
1209                   void *f1 = (void*)0, *f2 = (void*)0, *handle;
1210                   handle = dlopen ((void*)0, 0);
1211                   if (handle) {
1212                     f1 = dlsym (handle, "glib_underscore_test");
1213                     f2 = dlsym (handle, "_glib_underscore_test");
1214                   } return (!f2 || f1);
1215                 }],
1216                         [glib_cv_uscore=yes],
1217                         [glib_cv_uscore=no],
1218                         [])
1219                 rm -f plugin.c plugin.$ac_objext plugin.lo
1220         ])
1221         GLIB_ASSERT_SET(glib_cv_uscore)
1222         if test "x$glib_cv_uscore" = "xyes"; then
1223                 G_MODULE_NEED_USCORE=1
1224         else
1225                 G_MODULE_NEED_USCORE=0
1226         fi
1227
1228         LDFLAGS="$LDFLAGS_orig"
1229 dnl *** check for having dlerror()
1230         AC_CHECK_FUNC(dlerror,
1231                 [G_MODULE_HAVE_DLERROR=1],
1232                 [G_MODULE_HAVE_DLERROR=0])
1233         LIBS="$LIBS_orig"
1234 fi
1235 dnl *** done, have we got an implementation?
1236 if test -z "$G_MODULE_IMPL"; then
1237         G_MODULE_IMPL=0
1238         G_MODULE_SUPPORTED=false
1239 else
1240         G_MODULE_SUPPORTED=true
1241 fi
1242
1243 AC_MSG_CHECKING(for the suffix of shared libraries)
1244 case "$host_os" in
1245   hpux9* | hpux10* | hpux11*)  # taken from ltconfig
1246     glib_gmodule_suffix='sl'
1247     ;;
1248   cygwin* | mingw*)
1249     glib_gmodule_suffix='dll'
1250     ;;
1251   aix*)
1252     glib_gmodule_suffix='a'
1253     ;;
1254   *)
1255     glib_gmodule_suffix='so'    
1256     ;;
1257 esac
1258 AC_MSG_RESULT(.$glib_gmodule_suffix)
1259  
1260 AC_SUBST(G_MODULE_SUPPORTED)
1261 AC_SUBST(G_MODULE_IMPL)
1262 AC_SUBST(G_MODULE_LIBS)
1263 AC_SUBST(G_MODULE_LIBS_EXTRA)
1264 AC_SUBST(G_MODULE_PLUGIN_LIBS)
1265 AC_SUBST(G_MODULE_LDFLAGS)
1266 AC_SUBST(G_MODULE_HAVE_DLERROR)
1267 AC_SUBST(G_MODULE_BROKEN_RTLD_GLOBAL)
1268 AC_SUBST(G_MODULE_NEED_USCORE)
1269 AC_SUBST(GLIB_DEBUG_FLAGS)
1270
1271 dnl **********************
1272 dnl *** g_spawn checks ***
1273 dnl **********************
1274
1275 AC_MSG_CHECKING(for gspawn implementation)
1276 case "$host" in
1277   *-*-mingw*)
1278     GSPAWN=gspawn-win32.lo
1279     ;;
1280   *)
1281     GSPAWN=gspawn.lo
1282     ;;    
1283 esac
1284 AC_MSG_RESULT($GSPAWN)
1285 AC_SUBST(GSPAWN)
1286
1287 dnl *************************
1288 dnl *** GIOChannel checks ***
1289 dnl *************************
1290
1291 AC_MSG_CHECKING(for GIOChannel implementation)
1292 case "$host" in
1293   *-*-mingw*)
1294     GIO=giowin32.lo
1295     ;;
1296   *)
1297     GIO=giounix.lo
1298     ;;    
1299 esac
1300 AC_MSG_RESULT($GIO)
1301 AC_SUBST(GIO)
1302
1303 dnl ****************************************
1304 dnl *** platform dependent source checks ***
1305 dnl ****************************************
1306
1307 AC_MSG_CHECKING(for platform-dependent source)
1308 case "$host" in
1309   *-*-cygwin*|*-*-mingw*)
1310     PLATFORMDEP=gwin32.lo
1311     ;;
1312   *)
1313     PLATFORMDEP=
1314     ;;    
1315 esac
1316 AC_MSG_RESULT($PLATFORMDEP)
1317 AC_SUBST(PLATFORMDEP)
1318
1319 AC_MSG_CHECKING([whether to compile timeloop])
1320 case "$host" in
1321   *-*-cygwin*|*-*-mingw*)
1322     enable_timeloop=no
1323     ;;
1324   *)
1325     enable_timeloop=yes
1326     ;;    
1327 esac
1328 AC_MSG_RESULT($enable_timeloop)
1329 AM_CONDITIONAL(ENABLE_TIMELOOP, test x$enable_timeloop = xyes)
1330
1331 AC_MSG_CHECKING([if building for some Win32 platform])
1332 case "$host" in
1333   *-*-mingw*|*-*-cygwin*)
1334     platform_win32=yes
1335     ;;
1336   *)
1337     platform_win32=no
1338     ;;
1339 esac
1340 AC_MSG_RESULT($platform_win32)
1341 AM_CONDITIONAL(PLATFORM_WIN32, test x$platform_win32 = xyes)
1342
1343 dnl ***********************
1344 dnl *** g_thread checks ***
1345 dnl ***********************
1346
1347 AC_ARG_WITH(threads,
1348            [AC_HELP_STRING([--with-threads=@<:@none/posix/dce/solaris/win32@:>@],
1349                            [specify a thread implementation to use])],
1350            [if test "x$with_threads" = x; then
1351                 want_threads=yes
1352             else
1353                 want_threads=$with_threads
1354             fi],
1355            [want_threads=yes])
1356 if test "x$enable_threads" = "xno"; then
1357         want_threads=no
1358 fi
1359
1360 dnl error and warning message
1361 dnl *************************
1362
1363 THREAD_NO_IMPLEMENTATION="You do not have any known thread system on your
1364                 computer. GLib will not have a default thread implementation."
1365
1366 FLAG_DOES_NOT_WORK="I can't find the MACRO to enable thread safety on your
1367                 platform (normally it's "_REENTRANT"). I'll not use any flag on
1368                 compilation now, but then your programs might not work.
1369                 Please provide information on how it is done on your system."
1370
1371 LIBS_NOT_FOUND_1="I can't find the libraries for the thread implementation
1372                 "
1373
1374 LIBS_NOT_FOUND_2=". Please choose another thread implementation or
1375                 provide information on your thread implementation.
1376                 You can also run 'configure --disable-threads' 
1377                 to compile without thread support."
1378
1379 FUNC_NO_GETPWUID_R="the 'g_get_(user_name|real_name|home_dir|tmp_dir)'
1380                 functions will not be MT-safe during their first call because
1381                 there is no working 'getpwuid_r' on your system."
1382
1383 FUNC_NO_LOCALTIME_R="the 'g_date_set_time' function will not be MT-safe
1384                 because there is no 'localtime_r' on your system."
1385
1386 POSIX_NO_YIELD="I can not find a yield functions for your platform. A rather
1387                 crude surrogate will be used. If you happen to know a 
1388                 yield function for your system, please inform the GLib 
1389                 developers."
1390
1391 POSIX_NO_PRIORITIES="I can not find the minimal and maximal priorities for 
1392                 threads on your system. Thus threads can only have the default 
1393                 priority. If you happen to know these main/max
1394                 priorities, please inform the GLib developers."
1395
1396 AIX_COMPILE_INFO="AIX's C compiler needs to be called by a different name, when
1397                 linking threaded applications. As GLib cannot do that 
1398                 automatically, you will get an linkg error everytime you are 
1399                 not using the right compiler. In that case you have to relink 
1400                 with the right compiler. Ususally just '_r' is appended 
1401                 to the compiler name."
1402
1403 dnl determination of thread implementation
1404 dnl ***************************************
1405
1406 # have_threads=no   means no thread support
1407 # have_threads=none means no default thread implementation
1408
1409 have_threads=no
1410 if test "x$want_threads" = xyes || test "x$want_threads" = xsolaris; then
1411         case $host in
1412                 *-*-solaris*)
1413                 AC_CHECK_LIB(thread, cond_init, have_threads=solaris)
1414                 ;;
1415         esac
1416 fi
1417 if test "x$want_threads" = xyes || test "x$want_threads" = xposix \
1418                                 || test "x$want_threads" = xdce; then
1419         # -D_POSIX4_DRAFT_SOURCE -D_POSIX4A_DRAFT10_SOURCE is for DG/UX
1420         # -U_OSF_SOURCE is for Digital UNIX 4.0d
1421         GTHREAD_COMPILE_IMPL_DEFINES="-D_POSIX4_DRAFT_SOURCE -D_POSIX4A_DRAFT10_SOURCE -U_OSF_SOURCE"
1422         glib_save_CPPFLAGS="$CPPFLAGS"
1423         CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
1424         if test "x$have_threads" = xno; then
1425                 AC_TRY_COMPILE([#include <pthread.h>],
1426                         [pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;],
1427                         have_threads=posix)
1428         fi
1429         if test "x$have_threads" = xno; then
1430                 AC_TRY_COMPILE([#include <pthread.h>],
1431                         [pthread_mutex_t m; 
1432                          pthread_mutex_init (&m, pthread_mutexattr_default);],
1433                         have_threads=dce)
1434         fi
1435         # Tru64Unix requires -pthread to find pthread.h. See #103020
1436         CPPFLAGS="$CPPFLAGS -pthread"
1437         if test "x$have_threads" = xno; then
1438         AC_TRY_COMPILE([#include <pthread.h>],
1439                        [pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;],
1440                        have_threads=posix)
1441         fi
1442         CPPFLAGS="$glib_save_CPPFLAGS"
1443 fi
1444 if test "x$want_threads" = xyes || test "x$want_threads" = xwin32; then
1445         case $host in
1446                 *-*-mingw*)
1447                 have_threads=win32
1448                 ;;
1449         esac
1450 fi
1451 if test "x$want_threads" = xnone; then
1452         have_threads=none
1453 fi
1454
1455 AC_MSG_CHECKING(for thread implementation)
1456
1457 if test "x$have_threads" = xno && test "x$want_threads" != xno; then
1458         AC_MSG_RESULT(none available)
1459         AC_MSG_WARN($THREAD_NO_IMPLEMENTATION)
1460 else
1461         AC_MSG_RESULT($have_threads)
1462 fi
1463
1464
1465 dnl determination of G_THREAD_CFLAGS
1466 dnl ********************************
1467
1468 G_THREAD_LIBS=
1469 G_THREAD_LIBS_EXTRA=
1470 G_THREAD_CFLAGS=
1471
1472 dnl
1473 dnl Test program for basic POSIX threads functionality
1474 dnl
1475 m4_define([glib_thread_test],[
1476 #include <pthread.h> 
1477 int check_me = 0;
1478 void* func(void* data) {check_me = 42; return &check_me;}
1479 int main()
1480  { pthread_t t; 
1481    void *ret;
1482    pthread_create (&t, $1, func, 0);
1483    pthread_join (t, &ret);
1484    exit (check_me != 42 || ret != &check_me);
1485 }])
1486
1487 dnl
1488 dnl Test program for sched_get_priority_min()
1489 dnl
1490 m4_define([glib_sched_priority_test],[
1491 #include <sched.h>
1492 #include <errno.h>
1493 int main() {
1494     errno = 0;
1495     return sched_get_priority_min(SCHED_OTHER)==-1
1496            && errno != 0;
1497 }])
1498
1499 if test x"$have_threads" != xno; then
1500
1501   if test x"$have_threads" = xposix; then
1502     # First we test for posix, whether -pthread or -pthreads do the trick as 
1503     # both CPPFLAG and LIBS. 
1504     # One of them does for most gcc versions and some other platforms/compilers
1505     # too and could be considered as the canonical way to go. 
1506     case $host in
1507       *-*-cygwin*)
1508          # skip cygwin -pthread or -pthreads test
1509          ;;
1510       *)
1511         for flag in pthread pthreads mt; do
1512           glib_save_CFLAGS="$CFLAGS"
1513           CFLAGS="$CFLAGS -$flag"
1514           AC_TRY_RUN(glib_thread_test(0),
1515                      glib_flag_works=yes,
1516                      glib_flag_works=no,
1517                      [AC_LINK_IFELSE(glib_thread_test(0),
1518                                      glib_flag_works=yes,
1519                                      glib_flag_works=no)])
1520           CFLAGS="$glib_save_CFLAGS"
1521           if test $glib_flag_works = yes ; then
1522              G_THREAD_CFLAGS=-$flag
1523              G_THREAD_LIBS=-$flag
1524           fi
1525         done
1526          ;;
1527     esac 
1528   fi
1529
1530   if test x"$G_THREAD_CFLAGS" = x; then
1531
1532     # The canonical -pthread[s] does not work. Try something different.
1533
1534     case $host in
1535         *-aix*)
1536                 if test x"$GCC" = xyes; then
1537                         # GCC 3.0 and above needs -pthread. 
1538                         # Should be coverd by the case above.
1539                         # GCC 2.x and below needs -mthreads
1540                         G_THREAD_CFLAGS="-mthreads"             
1541                         G_THREAD_LIBS=$G_THREAD_CFLAGS
1542                 else 
1543                         # We are probably using the aix compiler. Normaly a 
1544                         # program would have to be compiled with the _r variant
1545                         # of the corresponding compiler, but we as GLib cannot 
1546                         # do that: but the good news is that for compiling the
1547                         # only difference is the added -D_THREAD_SAFE compile 
1548                         # option. This is according to the "C for AIX User's 
1549                         # Guide".
1550                         G_THREAD_CFLAGS="-D_THREAD_SAFE"
1551                 fi
1552                 ;;
1553         *-dg-dgux*)  # DG/UX
1554                 G_THREAD_CFLAGS="-D_REENTRANT -D_POSIX4A_DRAFT10_SOURCE"
1555                 ;;
1556         *-osf*)
1557                 # So we are using dce threads. posix threads are already 
1558                 # catched above.
1559                 G_THREAD_CFLAGS="-threads"
1560                 G_THREAD_LIBS=$G_THREAD_CFLAGS
1561                 ;;
1562         *-solaris*)
1563                 if test x"$GCC" = xyes; then
1564                    # We are using solaris threads. posix threads are 
1565                    # already catched above.
1566                         G_THREAD_CFLAGS="-threads"
1567                 else
1568                         G_THREAD_CFLAGS="-mt"
1569                 fi
1570                 G_THREAD_LIBS=$G_THREAD_CFLAGS
1571                 ;;
1572         *-sysv5uw7*) # UnixWare 7 
1573                 # We are not using gcc with -pthread. Catched above.
1574                 G_THREAD_CFLAGS="-Kthread"
1575                 G_THREAD_LIBS=$G_THREAD_CFLAGS
1576                 ;;
1577         *-mingw*)
1578                 # No flag needed when using MSVCRT.DLL
1579                 G_THREAD_CFLAGS=""
1580                 ;;
1581         *)
1582                 G_THREAD_CFLAGS="-D_REENTRANT" # good default guess otherwise
1583                 ;;
1584     esac
1585  
1586   fi
1587
1588     # if we are not finding the localtime_r function, then we probably are
1589     # not using the proper multithread flag
1590
1591     glib_save_CPPFLAGS="$CPPFLAGS"
1592     CPPFLAGS="$CPPFLAGS $G_THREAD_CFLAGS"
1593
1594     # First we test, whether localtime_r is declared in time.h
1595     # directly. Then we test whether a macro localtime_r exists, in
1596     # which case localtime_r in the test program is replaced and thus
1597     # if we still find localtime_r in the output, it is not defined as 
1598     # a macro.
1599
1600     AC_EGREP_CPP([[^a-zA-Z1-9_]localtime_r[^a-zA-Z1-9_]], [#include <time.h>], ,
1601       [AC_EGREP_CPP([[^a-zA-Z1-9_]localtime_r[^a-zA-Z1-9_]], [#include <time.h> 
1602                                                            localtime_r(a,b)],
1603                    AC_MSG_WARN($FLAG_DOES_NOT_WORK))])
1604
1605     CPPFLAGS="$glib_save_CPPFLAGS"
1606
1607     AC_MSG_CHECKING(thread related cflags)
1608     AC_MSG_RESULT($G_THREAD_CFLAGS)
1609     CPPFLAGS="$CPPFLAGS $G_THREAD_CFLAGS"
1610 fi
1611
1612 dnl determination of G_THREAD_LIBS
1613 dnl ******************************
1614
1615 mutex_has_default=no
1616 case $have_threads in
1617         posix|dce)
1618           glib_save_CPPFLAGS="$CPPFLAGS"
1619           CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
1620           if test x"$G_THREAD_LIBS" = x; then
1621             case $host in
1622               *-aix*)
1623                 # We are not using gcc (would have set G_THREAD_LIBS) and thus 
1624                 # probably using the aix compiler.
1625                 AC_MSG_WARN($AIX_COMPILE_INFO)
1626                 ;;
1627               *)
1628                 G_THREAD_LIBS=error
1629                 glib_save_LIBS="$LIBS"
1630                 for thread_lib in "" pthread pthread32 pthreads thread dce; do
1631                         if test x"$thread_lib" = x; then
1632                                 add_thread_lib=""
1633                                 IN=""
1634                         else
1635                                 add_thread_lib="-l$thread_lib"
1636                                 IN=" in -l$thread_lib"
1637                         fi
1638                         if test x"$have_threads" = xposix; then
1639                                 defattr=0
1640                         else
1641                                 defattr=pthread_attr_default
1642                         fi
1643                         
1644                         LIBS="$add_thread_lib $glib_save_LIBS"
1645                         
1646                         AC_MSG_CHECKING(for pthread_create/pthread_join$IN)
1647                         AC_TRY_RUN(glib_thread_test($defattr),
1648                                    glib_result=yes,
1649                                    glib_result=no,
1650                                    [AC_LINK_IFELSE(glib_thread_test($defattr),
1651                                                    glib_result=yes,
1652                                                    glib_result=no)])
1653                         AC_MSG_RESULT($glib_result)
1654                         
1655                         if test "$glib_result" = "yes" ; then
1656                           G_THREAD_LIBS="$add_thread_lib"
1657                           break
1658                         fi
1659                 done
1660                 if test "x$G_THREAD_LIBS" = xerror; then
1661                   AC_MSG_ERROR($LIBS_NOT_FOUND_1$have_threads$LIBS_NOT_FOUND_2)
1662                 fi 
1663                 LIBS="$glib_save_LIBS"
1664                 ;;
1665             esac
1666           fi
1667
1668           glib_save_LIBS="$LIBS"
1669           for thread_lib in "" rt rte; do
1670             if test x"$thread_lib" = x; then
1671               add_thread_lib=""
1672               IN=""
1673             else
1674               add_thread_lib="-l$thread_lib"
1675               IN=" in -l$thread_lib"
1676             fi
1677             LIBS="$add_thread_lib $glib_save_LIBS"
1678             
1679             AC_MSG_CHECKING(for sched_get_priority_min$IN)
1680             AC_TRY_RUN(glib_sched_priority_test,
1681                        glib_result=yes,
1682                        glib_result=no,
1683                        [AC_LINK_IFELSE(glib_sched_priority_test,
1684                                        glib_result=yes,
1685                                        glib_result=no)])
1686             AC_MSG_RESULT($glib_result)
1687
1688             if test "$glib_result" = "yes" ; then           
1689                G_THREAD_LIBS="$G_THREAD_LIBS $add_thread_lib"
1690                posix_priority_min="sched_get_priority_min(SCHED_OTHER)"
1691                posix_priority_max="sched_get_priority_max(SCHED_OTHER)"
1692                break
1693             fi
1694           done
1695           LIBS="$glib_save_LIBS"
1696           mutex_has_default=yes
1697           mutex_default_type='pthread_mutex_t'
1698           mutex_default_init='PTHREAD_MUTEX_INITIALIZER'
1699           mutex_header_file='pthread.h'
1700           if test "x$have_threads" = "xposix"; then
1701             g_threads_impl="POSIX"
1702           else
1703             g_threads_impl="DCE"
1704             have_threads="posix"
1705           fi
1706           AC_SUBST(GTHREAD_COMPILE_IMPL_DEFINES)
1707           CPPFLAGS="$glib_save_CPPFLAGS"
1708           ;;
1709         solaris)
1710            mutex_has_default=yes
1711            mutex_default_type='mutex_t'
1712            mutex_default_init="DEFAULTMUTEX"
1713            mutex_header_file='thread.h'
1714            g_threads_impl="SOLARIS"
1715            ;;
1716         win32)
1717            g_threads_impl="WIN32"
1718            ;;
1719         none|no)
1720            g_threads_impl="NONE"
1721            ;;
1722         *)
1723            g_threads_impl="NONE"
1724            G_THREAD_LIBS=error
1725            ;;
1726 esac
1727
1728 if test "x$G_THREAD_LIBS" = xerror; then
1729         AC_MSG_ERROR($LIBS_NOT_FOUND_1$have_threads$LIBS_NOT_FOUND_2)
1730 fi
1731
1732 case $host in
1733   *-*-beos*)
1734     G_THREAD_LIBS="-lbe -lroot -lglib-2.0 "
1735     G_THREAD_LIBS_EXTRA="-L\$(top_builddir_full)/.libs"
1736     ;;
1737   *)
1738     ;;
1739 esac
1740
1741 AC_MSG_CHECKING(thread related libraries)
1742 AC_MSG_RESULT($G_THREAD_LIBS)
1743
1744 dnl check for mt safe function variants and some posix functions
1745 dnl ************************************************************
1746
1747 if test x"$have_threads" != xno; then
1748         glib_save_LIBS="$LIBS"
1749         # we are not doing the following for now, as this might require glib 
1750         # to always be linked with the thread libs on some platforms. 
1751         # LIBS="$LIBS $G_THREAD_LIBS"
1752         AC_CHECK_FUNCS(localtime_r)
1753         if test "$ac_cv_header_pwd_h" = "yes"; then
1754                 AC_CACHE_CHECK([for posix getpwuid_r],
1755                         ac_cv_func_posix_getpwuid_r,
1756                         [AC_TRY_RUN([
1757 #include <errno.h>
1758 #include <pwd.h>
1759 int main () { 
1760     char buffer[10000];
1761     struct passwd pwd, *pwptr = &pwd;
1762     int error;
1763     errno = 0;
1764     error = getpwuid_r (0, &pwd, buffer, 
1765                         sizeof (buffer), &pwptr);
1766    return (error < 0 && errno == ENOSYS) 
1767            || error == ENOSYS; 
1768 }                               ],
1769                                 [ac_cv_func_posix_getpwuid_r=yes],
1770                                 [ac_cv_func_posix_getpwuid_r=no])])
1771                 GLIB_ASSERT_SET(ac_cv_func_posix_getpwuid_r)
1772                 if test "$ac_cv_func_posix_getpwuid_r" = yes; then
1773                         AC_DEFINE(HAVE_POSIX_GETPWUID_R,1,
1774                                 [Have POSIX function getpwuid_r])
1775                 else
1776                         AC_CACHE_CHECK([for nonposix getpwuid_r],
1777                                 ac_cv_func_nonposix_getpwuid_r,
1778                                 [AC_TRY_LINK([#include <pwd.h>],
1779                                         [char buffer[10000];
1780                                         struct passwd pwd;
1781                                         getpwuid_r (0, &pwd, buffer, 
1782                                                         sizeof (buffer));],
1783                                         [ac_cv_func_nonposix_getpwuid_r=yes],
1784                                         [ac_cv_func_nonposix_getpwuid_r=no])])
1785                         GLIB_ASSERT_SET(ac_cv_func_nonposix_getpwuid_r)
1786                         if test "$ac_cv_func_nonposix_getpwuid_r" = yes; then
1787                                 AC_DEFINE(HAVE_NONPOSIX_GETPWUID_R,1,
1788                                         [Have non-POSIX function getpwuid_r])
1789                         fi
1790                 fi
1791         fi
1792         LIBS="$G_THREAD_LIBS $LIBS"
1793         if test x"$have_threads" = xposix; then
1794                 glib_save_CPPFLAGS="$CPPFLAGS"
1795                 CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
1796                 dnl we might grow sizeof(pthread_t) later on, so use a dummy name here
1797                 GLIB_SIZEOF([#include <pthread.h>], pthread_t, system_thread)
1798                 # This is not AC_CHECK_FUNC to also work with function
1799                 # name mangling in header files.
1800                 AC_MSG_CHECKING(for pthread_attr_setstacksize)
1801                 AC_TRY_LINK([#include <pthread.h>],
1802                         [pthread_attr_t t; pthread_attr_setstacksize(&t,0)],
1803                         [AC_MSG_RESULT(yes)
1804                         AC_DEFINE(HAVE_PTHREAD_ATTR_SETSTACKSIZE,1,
1805                                   [Have function pthread_attr_setstacksize])],
1806                         [AC_MSG_RESULT(no)])
1807                 AC_MSG_CHECKING(for minimal/maximal thread priority)
1808                 if test x"$posix_priority_min" = x; then
1809                         AC_EGREP_CPP(PX_PRIO_MIN,[#include <pthread.h>
1810                                 PX_PRIO_MIN],,[
1811                                 posix_priority_min=PX_PRIO_MIN
1812                                 posix_priority_max=PX_PRIO_MAX])
1813                 fi
1814                 if test x"$posix_priority_min" = x; then
1815                         # AIX
1816                         AC_EGREP_CPP(PTHREAD_PRIO_MIN,[#include <pthread.h>
1817                                 PTHREAD_PRIO_MIN],,[
1818                                 posix_priority_min=PTHREAD_PRIO_MIN
1819                                 posix_priority_max=PTHREAD_PRIO_MAX])
1820                 fi
1821                 if test x"$posix_priority_min" = x; then
1822                         AC_EGREP_CPP(PRI_OTHER_MIN,[#include <pthread.h>
1823                                 PRI_OTHER_MIN],,[
1824                                 posix_priority_min=PRI_OTHER_MIN        
1825                                 posix_priority_max=PRI_OTHER_MAX])
1826                 fi
1827                 if test x"$posix_priority_min" = x; then
1828                         AC_MSG_RESULT(none found)
1829                         AC_MSG_WARN($POSIX_NO_PRIORITIES)
1830                         posix_priority_min=-1
1831                         posix_priority_max=-1
1832                 else
1833                         AC_MSG_RESULT($posix_priority_min/$posix_priority_max)
1834                         AC_MSG_CHECKING(for pthread_setschedparam)
1835                         AC_TRY_LINK([#include <pthread.h>],
1836                           [pthread_t t; pthread_setschedparam(t, 0, NULL)],
1837                           [AC_MSG_RESULT(yes)
1838                         AC_DEFINE_UNQUOTED(POSIX_MIN_PRIORITY,$posix_priority_min,[Minimum POSIX RT priority])
1839                            AC_DEFINE_UNQUOTED(POSIX_MAX_PRIORITY,$posix_priority_max,[Maximum POSIX RT priority])],
1840                           [AC_MSG_RESULT(no)
1841                            AC_MSG_WARN($POSIX_NO_PRIORITIES)])
1842                 fi
1843                 posix_yield_func=none
1844                 AC_MSG_CHECKING(for posix yield function)
1845                 for yield_func in sched_yield pthread_yield_np pthread_yield \
1846                                                         thr_yield; do
1847                         AC_TRY_LINK([#include <pthread.h>],
1848                                 [$yield_func()],
1849                                 [posix_yield_func="$yield_func"
1850                                 break])
1851                 done            
1852                 if test x"$posix_yield_func" = xnone; then
1853                         AC_MSG_RESULT(none found)
1854                         AC_MSG_WARN($POSIX_NO_YIELD)
1855                         posix_yield_func="g_usleep(1000)"
1856                 else
1857                         AC_MSG_RESULT($posix_yield_func)
1858                         posix_yield_func="$posix_yield_func()"
1859                 fi
1860                 AC_DEFINE_UNQUOTED(POSIX_YIELD_FUNC,$posix_yield_func,[The POSIX RT yield function])
1861                 CPPFLAGS="$glib_save_CPPFLAGS"
1862            
1863         elif test x"$have_threads" = xwin32; then
1864                 # It's a pointer to a private struct
1865                 GLIB_SIZEOF(,struct _GThreadData *, system_thread)
1866         elif test x"$have_threads" = xsolaris; then 
1867                 GLIB_SIZEOF([#include <thread.h>], thread_t, system_thread)
1868         fi
1869
1870         LIBS="$glib_save_LIBS"
1871
1872         # now spit out all the warnings.
1873         if test "$ac_cv_func_posix_getpwuid_r" != "yes" && 
1874            test "$ac_cv_func_nonposix_getpwuid_r" != "yes"; then
1875                 AC_MSG_WARN($FUNC_NO_GETPWUID_R)
1876         fi
1877         if test "$ac_cv_func_localtime_r" != "yes"; then
1878                 AC_MSG_WARN($FUNC_NO_LOCALTIME_R)
1879         fi
1880 fi      
1881
1882 if test x"$glib_cv_sizeof_system_thread" = x; then
1883    # use a pointer as a fallback.
1884    GLIB_SIZEOF(,void *, system_thread)
1885 fi
1886
1887 #
1888 # Hack to deal with:
1889
1890 #  a) GCC < 3.3 for Linux doesn't include -lpthread when
1891 #     building shared libraries with linux.
1892 #
1893 case $host in
1894   *-*-linux*)
1895     G_THREAD_LIBS_FOR_GTHREAD="`echo $G_THREAD_LIBS | sed s/-pthread/-lpthread/`"
1896     ;;
1897   *)     
1898     G_THREAD_LIBS_FOR_GTHREAD="$G_THREAD_LIBS"   
1899     ;;
1900 esac
1901
1902 AC_DEFINE_UNQUOTED(G_THREAD_SOURCE,"gthread-$have_threads.c",
1903                    [Source file containing theread implementation])
1904 AC_SUBST(G_THREAD_CFLAGS)
1905 AC_SUBST(G_THREAD_LIBS)
1906 AC_SUBST(G_THREAD_LIBS_FOR_GTHREAD)
1907 AC_SUBST(G_THREAD_LIBS_EXTRA)
1908
1909 dnl **********************************************
1910 dnl *** GDefaultMutex setup and initialization ***
1911 dnl **********************************************
1912 dnl
1913 dnl if mutex_has_default = yes, we also got
1914 dnl mutex_default_type, mutex_default_init and mutex_header_file
1915 if test $mutex_has_default = yes ; then
1916         glib_save_CPPFLAGS="$CPPFLAGS"
1917         glib_save_LIBS="$LIBS"
1918         LIBS="$G_THREAD_LIBS $LIBS"
1919         CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
1920         GLIB_SIZEOF([#include <$mutex_header_file>],
1921                     $mutex_default_type,
1922                     gmutex)
1923         GLIB_BYTE_CONTENTS([#include <$mutex_header_file>],
1924                            $mutex_default_type,
1925                            gmutex,
1926                            $glib_cv_sizeof_gmutex,
1927                            $mutex_default_init)
1928         if test x"$glib_cv_byte_contents_gmutex" = xno; then
1929                 mutex_has_default=no
1930         fi
1931         CPPFLAGS="$glib_save_CPPFLAGS"
1932         LIBS="$glib_save_LIBS"
1933 fi
1934
1935 dnl ********************************
1936 dnl *** g_atomic_* tests for gcc ***
1937 dnl ********************************
1938
1939 AC_MSG_CHECKING([whether to use assembler code for atomic operations])
1940
1941 if test x"$GCC" = xyes; then
1942   case $host_cpu in
1943     i386)
1944       AC_MSG_RESULT([none])
1945       glib_memory_barrier_needed=no
1946       ;;
1947     i?86)
1948       AC_MSG_RESULT([i486])
1949       AC_DEFINE_UNQUOTED(G_ATOMIC_I486, 1,
1950                          [i486 atomic implementation])
1951       glib_memory_barrier_needed=no
1952       ;;
1953     sparc*)
1954       SPARCV9_WARNING="Try to rerun configure with CFLAGS='-mcpu=v9',
1955                 when you are using a sparc with v9 instruction set (most
1956                 sparcs nowadays). This will make the code for atomic
1957                 operations much faster. The resulting code will not run
1958                 on very old sparcs though."
1959
1960       AC_LINK_IFELSE([[
1961         main () 
1962         {
1963           int tmp1, tmp2, tmp3;
1964           __asm__ __volatile__("casx [%2], %0, %1" 
1965                                : "=&r" (tmp1), "=&r" (tmp2) : "r" (&tmp3));
1966         }]],
1967         AC_MSG_RESULT([sparcv9])
1968         AC_DEFINE_UNQUOTED(G_ATOMIC_SPARCV9, 1,
1969                            [sparcv9 atomic implementation]),
1970         AC_MSG_RESULT([no])
1971         AC_MSG_WARN([[$SPARCV9_WARNING]]))
1972       glib_memory_barrier_needed=yes
1973       ;;
1974     alpha*)
1975       AC_MSG_RESULT([alpha])
1976       AC_DEFINE_UNQUOTED(G_ATOMIC_ALPHA, 1,
1977                          [alpha atomic implementation])
1978       glib_memory_barrier_needed=yes
1979       ;;
1980     x86_64)
1981       AC_MSG_RESULT([x86_64])
1982       AC_DEFINE_UNQUOTED(G_ATOMIC_X86_64, 1,
1983                          [x86_64 atomic implementation])
1984       glib_memory_barrier_needed=no
1985      ;;
1986     powerpc*)
1987       AC_MSG_RESULT([powerpc])
1988       AC_DEFINE_UNQUOTED(G_ATOMIC_POWERPC, 1,
1989                          [powerpc atomic implementation])
1990       glib_memory_barrier_needed=yes
1991       ;;        
1992     ia64)
1993       AC_MSG_RESULT([ia64])
1994       AC_DEFINE_UNQUOTED(G_ATOMIC_IA64, 1,
1995                          [ia64 atomic implementation])
1996       glib_memory_barrier_needed=yes
1997       ;;        
1998     s390|s390x)
1999       AC_MSG_RESULT([s390])
2000       AC_DEFINE_UNQUOTED(G_ATOMIC_S390, 1,
2001                          [s390 atomic implementation])
2002       glib_memory_barrier_needed=no
2003       ;;        
2004     *)
2005       AC_MSG_RESULT([none])
2006       glib_memory_barrier_needed=yes
2007       ;;
2008   esac
2009 fi
2010
2011 dnl ****************************************
2012 dnl *** GLib POLL* compatibility defines ***
2013 dnl ****************************************
2014
2015 glib_poll_includes=["
2016 #include <sys/types.h>
2017 #include <sys/poll.h>
2018 "]
2019
2020 if test $ac_cv_header_sys_types_h = yes &&
2021    test $ac_cv_header_sys_poll_h = yes ; then
2022   glib_failed=false
2023   GLIB_CHECK_VALUE(POLLIN, $glib_poll_includes, glib_failed=true)
2024   GLIB_CHECK_VALUE(POLLOUT, $glib_poll_includes, glib_failed=true)
2025   GLIB_CHECK_VALUE(POLLPRI, $glib_poll_includes, glib_failed=true)
2026   GLIB_CHECK_VALUE(POLLERR, $glib_poll_includes, glib_failed=true)
2027   GLIB_CHECK_VALUE(POLLHUP, $glib_poll_includes, glib_failed=true)
2028   GLIB_CHECK_VALUE(POLLNVAL, $glib_poll_includes, glib_failed=true)
2029   if $glib_failed ; then
2030     AC_MSG_ERROR([Could not determine values for POLL* constants])
2031   fi
2032 else
2033   glib_cv_value_POLLIN=1
2034   glib_cv_value_POLLOUT=4
2035   glib_cv_value_POLLPRI=2
2036   glib_cv_value_POLLERR=8
2037   glib_cv_value_POLLHUP=16
2038   glib_cv_value_POLLNVAL=32
2039 fi
2040
2041 dnl **********************
2042 dnl *** Win32 API libs ***
2043 dnl **********************
2044
2045 case $host in
2046   *-*-cygwin*)
2047         G_LIBS_EXTRA="-luser32 -lkernel32"
2048     ;;
2049   *-*-mingw*)
2050         G_LIBS_EXTRA="-lws2_32 -lole32"
2051     ;;
2052   *)
2053         G_LIBS_EXTRA=""
2054     ;;
2055 esac
2056 AC_SUBST(G_LIBS_EXTRA)
2057
2058 dnl If the system doesn't define EILSEQ, we should define EILSEQ ourselves
2059 dnl since we need it for g_iconv()
2060
2061 AC_MSG_CHECKING([for EILSEQ])
2062 AC_TRY_COMPILE([
2063 #include <errno.h>
2064 ],
2065 [
2066 int error = EILSEQ;
2067 ], have_eilseq=yes, have_eilseq=no);
2068 AC_MSG_RESULT($have_eilseq)
2069
2070 dnl ******************************************************************
2071 dnl *** Look for glib-genmarshal in PATH if we are cross-compiling ***
2072 dnl ******************************************************************
2073
2074 AM_CONDITIONAL(CROSS_COMPILING, test $cross_compiling = yes)
2075
2076 if test $cross_compiling = yes; then
2077   AC_PATH_PROG(GLIB_GENMARSHAL, glib-genmarshal, no)
2078   if test x$GLIB_GENMARSHAL = xno; then
2079     AC_MSG_ERROR(Could not find a glib-genmarshal in your PATH)
2080   fi
2081 fi
2082
2083 dnl **************************
2084 dnl *** Checks for gtk-doc ***
2085 dnl **************************
2086
2087 GTK_DOC_CHECK([1.4])
2088
2089 AC_ARG_ENABLE(man,
2090               [AC_HELP_STRING([--enable-man],
2091                               [regenerate man pages from Docbook [default=no]])],enable_man=yes,
2092               enable_man=no)
2093
2094 if test "${enable_man}" != no; then
2095 dnl
2096 dnl Check for xsltproc
2097 dnl
2098 AC_PATH_PROG([XSLTPROC], [xsltproc])
2099   if test -z "$XSLTPROC"; then
2100     enable_man=no
2101   fi
2102
2103   dnl check for DocBook DTD and stylesheets in the local catalog.
2104   JH_CHECK_XML_CATALOG([-//OASIS//DTD DocBook XML V4.1.2//EN],
2105      [DocBook XML DTD V4.1.2],,enable_man=no)
2106   JH_CHECK_XML_CATALOG([http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl],
2107      [DocBook XSL Stylesheets],,enable_man=no)
2108 fi
2109
2110 AM_CONDITIONAL(ENABLE_MAN, test x$enable_man != xno)
2111
2112 dnl ******************************
2113 dnl *** output the whole stuff ***
2114 dnl ******************************
2115
2116 dnl this section will only be run if config.status is invoked with no
2117 dnl arguments, or with "glibconfig.h" as an argument.
2118 AC_CONFIG_COMMANDS([glibconfig.h],
2119 [
2120         outfile=glibconfig.h-tmp
2121         cat > $outfile <<\_______EOF
2122 /* glibconfig.h
2123  *
2124  * This is a generated file.  Please modify 'configure.in'
2125  */
2126
2127 #ifndef __G_LIBCONFIG_H__
2128 #define __G_LIBCONFIG_H__
2129
2130 #include <glib/gmacros.h>
2131
2132 _______EOF
2133
2134         if test x$glib_limits_h = xyes; then
2135           echo '#include <limits.h>' >> $outfile
2136         fi
2137         if test x$glib_float_h = xyes; then
2138           echo '#include <float.h>' >> $outfile
2139         fi
2140         if test x$glib_values_h = xyes; then
2141           echo '#include <values.h>' >> $outfile
2142         fi
2143         if test "$glib_header_alloca_h" = "yes"; then
2144           echo '#define GLIB_HAVE_ALLOCA_H' >> $outfile
2145         fi
2146         if test x$glib_sys_poll_h = xyes; then
2147           echo '#define GLIB_HAVE_SYS_POLL_H' >> $outfile
2148         fi
2149
2150         cat >> $outfile <<_______EOF
2151
2152 G_BEGIN_DECLS
2153
2154 #define G_MINFLOAT      $glib_mf
2155 #define G_MAXFLOAT      $glib_Mf
2156 #define G_MINDOUBLE     $glib_md
2157 #define G_MAXDOUBLE     $glib_Md
2158 #define G_MINSHORT      $glib_ms
2159 #define G_MAXSHORT      $glib_Ms
2160 #define G_MAXUSHORT     $glib_Mus
2161 #define G_MININT        $glib_mi
2162 #define G_MAXINT        $glib_Mi
2163 #define G_MAXUINT       $glib_Mui
2164 #define G_MINLONG       $glib_ml
2165 #define G_MAXLONG       $glib_Ml
2166 #define G_MAXULONG      $glib_Mul
2167
2168 _______EOF
2169
2170
2171         ### this should always be true in a modern C/C++ compiler
2172         cat >>$outfile <<_______EOF
2173 typedef signed char gint8;
2174 typedef unsigned char guint8;
2175 _______EOF
2176
2177
2178         if test -n "$gint16"; then
2179           cat >>$outfile <<_______EOF
2180 typedef signed $gint16 gint16;
2181 typedef unsigned $gint16 guint16;
2182 #define G_GINT16_MODIFIER $gint16_modifier
2183 #define G_GINT16_FORMAT $gint16_format
2184 #define G_GUINT16_FORMAT $guint16_format
2185 _______EOF
2186         fi
2187
2188
2189         if test -n "$gint32"; then
2190           cat >>$outfile <<_______EOF
2191 typedef signed $gint32 gint32;
2192 typedef unsigned $gint32 guint32;
2193 #define G_GINT32_MODIFIER $gint32_modifier
2194 #define G_GINT32_FORMAT $gint32_format
2195 #define G_GUINT32_FORMAT $guint32_format
2196 _______EOF
2197         fi
2198
2199         cat >>$outfile <<_______EOF
2200 #define G_HAVE_GINT64 1          /* deprecated, always true */
2201
2202 ${glib_extension}typedef signed $gint64 gint64;
2203 ${glib_extension}typedef unsigned $gint64 guint64;
2204
2205 #define G_GINT64_CONSTANT(val)  $gint64_constant
2206 _______EOF
2207
2208         if test x$gint64_format != x ; then
2209           cat >>$outfile <<_______EOF
2210 #define G_GINT64_MODIFIER $gint64_modifier
2211 #define G_GINT64_FORMAT $gint64_format
2212 #define G_GUINT64_FORMAT $guint64_format
2213 _______EOF
2214         else
2215           cat >>$outfile <<_______EOF
2216 #undef G_GINT64_MODIFIER
2217 #undef G_GINT64_FORMAT
2218 #undef G_GUINT64_FORMAT
2219 _______EOF
2220         fi           
2221
2222         cat >>$outfile <<_______EOF
2223
2224 #define GLIB_SIZEOF_VOID_P $glib_void_p
2225 #define GLIB_SIZEOF_LONG   $glib_long
2226 #define GLIB_SIZEOF_SIZE_T $glib_size_t
2227
2228 _______EOF
2229
2230         cat >>$outfile <<_______EOF
2231 typedef signed $glib_size_type_define gssize;
2232 typedef unsigned $glib_size_type_define gsize;
2233 #define G_GSIZE_MODIFIER $gsize_modifier
2234 #define G_GSSIZE_FORMAT $gssize_format
2235 #define G_GSIZE_FORMAT $gsize_format
2236
2237 #define G_MAXSIZE       G_MAXU$glib_msize_type
2238 _______EOF
2239
2240         if test -z "$glib_unknown_void_p"; then
2241           cat >>$outfile <<_______EOF
2242
2243 #define GPOINTER_TO_INT(p)      ((gint)  ${glib_gpi_cast} (p))
2244 #define GPOINTER_TO_UINT(p)     ((guint) ${glib_gpui_cast} (p))
2245
2246 #define GINT_TO_POINTER(i)      ((gpointer) ${glib_gpi_cast} (i))
2247 #define GUINT_TO_POINTER(u)     ((gpointer) ${glib_gpui_cast} (u))
2248 _______EOF
2249         else
2250           echo '#error SIZEOF_VOID_P unknown - This should never happen' >>$outfile
2251         fi
2252
2253
2254
2255         cat >>$outfile <<_______EOF
2256 $glib_atexit
2257 $glib_memmove
2258 $glib_defines
2259 $glib_os
2260
2261 $glib_vacopy
2262
2263 #ifdef  __cplusplus
2264 #define G_HAVE_INLINE   1
2265 #else   /* !__cplusplus */
2266 $glib_inline
2267 #endif  /* !__cplusplus */
2268
2269 #ifdef  __cplusplus
2270 #define G_CAN_INLINE    1
2271 _______EOF
2272
2273         if test x$g_can_inline = xyes ; then
2274                 cat >>$outfile <<_______EOF
2275 #else   /* !__cplusplus */
2276 #define G_CAN_INLINE    1
2277 _______EOF
2278         fi
2279
2280         cat >>$outfile <<_______EOF
2281 #endif
2282
2283 _______EOF
2284
2285         if test x$g_have_iso_c_varargs = xyes ; then
2286                 cat >>$outfile <<_______EOF
2287 #ifndef __cplusplus
2288 # define G_HAVE_ISO_VARARGS 1
2289 #endif
2290 _______EOF
2291         fi
2292         if test x$g_have_iso_cxx_varargs = xyes ; then
2293                 cat >>$outfile <<_______EOF
2294 #ifdef __cplusplus
2295 # define G_HAVE_ISO_VARARGS 1
2296 #endif
2297 _______EOF
2298         fi
2299         if test x$g_have_gnuc_varargs = xyes ; then
2300                 cat >>$outfile <<_______EOF
2301
2302 /* gcc-2.95.x supports both gnu style and ISO varargs, but if -ansi
2303  * is passed ISO vararg support is turned off, and there is no work
2304  * around to turn it on, so we unconditionally turn it off.
2305  */
2306 #if __GNUC__ == 2 && __GNUC_MINOR__ == 95
2307 #  undef G_HAVE_ISO_VARARGS
2308 #endif
2309
2310 #define G_HAVE_GNUC_VARARGS 1
2311 _______EOF
2312         fi
2313
2314         case x$g_stack_grows in
2315         xyes) echo "#define G_HAVE_GROWING_STACK 1" >>$outfile ;;
2316         *)    echo "#define G_HAVE_GROWING_STACK 0" >>$outfile ;;
2317         esac
2318
2319
2320         echo >>$outfile
2321         if test x$g_have_eilseq = xno; then
2322                 cat >>$outfile <<_______EOF
2323 #ifndef EILSEQ
2324 /* On some systems, like SunOS and NetBSD, EILSEQ is not defined.
2325  * The correspondence between this and the corresponding definition
2326  * in libiconv is essential.
2327  */
2328 #  define EILSEQ ENOENT
2329 #endif
2330 _______EOF
2331
2332         fi
2333
2334         if test x$g_have_gnuc_visibility = xyes ; then
2335                 cat >>$outfile <<_______EOF
2336 #define G_HAVE_GNUC_VISIBILITY 1
2337 #define G_GNUC_INTERNAL __attribute__((visibility("hidden")))
2338 _______EOF
2339         else
2340                 cat >>$outfile <<_______EOF
2341 #define G_GNUC_INTERNAL
2342 _______EOF
2343         fi
2344
2345
2346         echo >>$outfile
2347         if test x$g_mutex_has_default = xyes; then
2348                 cat >>$outfile <<_______EOF
2349 $g_enable_threads_def G_THREADS_ENABLED
2350 #define G_THREADS_IMPL_$g_threads_impl_def
2351 typedef struct _GStaticMutex GStaticMutex;
2352 struct _GStaticMutex
2353 {
2354   struct _GMutex *runtime_mutex;
2355   union {
2356     char   pad[[$g_mutex_sizeof]];
2357     double dummy_double;
2358     void  *dummy_pointer;
2359     long   dummy_long;
2360   } static_mutex;
2361 };
2362 #define G_STATIC_MUTEX_INIT     { NULL, { { $g_mutex_contents} } }
2363 #define g_static_mutex_get_mutex(mutex) \\
2364   (g_thread_use_default_impl ? ((GMutex*) &((mutex)->static_mutex)) : \\
2365    g_static_mutex_get_mutex_impl_shortcut (&((mutex)->runtime_mutex)))
2366 _______EOF
2367         else
2368                 cat >>$outfile <<_______EOF
2369 $g_enable_threads_def G_THREADS_ENABLED
2370 #define G_THREADS_IMPL_$g_threads_impl_def
2371 typedef struct _GMutex* GStaticMutex;
2372 #define G_STATIC_MUTEX_INIT NULL
2373 #define g_static_mutex_get_mutex(mutex) \\
2374   (g_static_mutex_get_mutex_impl_shortcut (mutex))
2375 _______EOF
2376         fi
2377
2378         cat >>$outfile <<_______EOF
2379 /* This represents a system thread as used by the implementation. An
2380  * alien implementaion, as loaded by g_thread_init can only count on
2381  * "sizeof (gpointer)" bytes to store their info. We however need more
2382  * for some of our native implementations. */
2383 typedef union _GSystemThread GSystemThread;
2384 union _GSystemThread
2385 {
2386   char   data[[$g_system_thread_sizeof]];
2387   double dummy_double;
2388   void  *dummy_pointer;
2389   long   dummy_long;
2390 };
2391 _______EOF
2392         if test x"$g_memory_barrier_needed" != xno; then
2393           echo >>$outfile
2394           echo "#define G_ATOMIC_OP_MEMORY_BARRIER_NEEDED 1" >>$outfile
2395         fi
2396
2397         echo >>$outfile
2398         g_bit_sizes="16 32 64"
2399         for bits in $g_bit_sizes; do
2400           cat >>$outfile <<_______EOF
2401 #define GINT${bits}_TO_${g_bs_native}(val)      ((gint${bits}) (val))
2402 #define GUINT${bits}_TO_${g_bs_native}(val)     ((guint${bits}) (val))
2403 #define GINT${bits}_TO_${g_bs_alien}(val)       ((gint${bits}) GUINT${bits}_SWAP_LE_BE (val))
2404 #define GUINT${bits}_TO_${g_bs_alien}(val)      (GUINT${bits}_SWAP_LE_BE (val))
2405 _______EOF
2406         done
2407
2408         cat >>$outfile <<_______EOF
2409 #define GLONG_TO_LE(val)        ((glong) GINT${glongbits}_TO_LE (val))
2410 #define GULONG_TO_LE(val)       ((gulong) GUINT${glongbits}_TO_LE (val))
2411 #define GLONG_TO_BE(val)        ((glong) GINT${glongbits}_TO_BE (val))
2412 #define GULONG_TO_BE(val)       ((gulong) GUINT${glongbits}_TO_BE (val))
2413 #define GINT_TO_LE(val)         ((gint) GINT${gintbits}_TO_LE (val))
2414 #define GUINT_TO_LE(val)        ((guint) GUINT${gintbits}_TO_LE (val))
2415 #define GINT_TO_BE(val)         ((gint) GINT${gintbits}_TO_BE (val))
2416 #define GUINT_TO_BE(val)        ((guint) GUINT${gintbits}_TO_BE (val))
2417 #define G_BYTE_ORDER $g_byte_order
2418
2419 #define GLIB_SYSDEF_POLLIN =$g_pollin
2420 #define GLIB_SYSDEF_POLLOUT =$g_pollout
2421 #define GLIB_SYSDEF_POLLPRI =$g_pollpri
2422 #define GLIB_SYSDEF_POLLHUP =$g_pollhup
2423 #define GLIB_SYSDEF_POLLERR =$g_pollerr
2424 #define GLIB_SYSDEF_POLLNVAL =$g_pollnval
2425
2426 #define G_MODULE_SUFFIX "$g_module_suffix"
2427
2428 typedef $g_pid_type GPid;
2429
2430 G_END_DECLS
2431
2432 #endif /* GLIBCONFIG_H */
2433 _______EOF
2434
2435
2436         if cmp -s $outfile glibconfig.h; then
2437           AC_MSG_NOTICE([glibconfig.h is unchanged])
2438           rm -f $outfile
2439         else
2440           mv $outfile glibconfig.h
2441         fi
2442 ],[
2443
2444 # Note that if two cases are the same, case goes with the first one.
2445 # Note also that this is inside an AC_OUTPUT_COMMAND.  We do not depend
2446 # on variable expansion in case labels.  Look at the generated config.status
2447 # for a hint.
2448
2449 if test "x${ac_cv_working_alloca_h+set}" = xset ; then
2450   glib_header_alloca_h="$ac_cv_working_alloca_h"
2451 else
2452   glib_header_alloca_h="$ac_cv_header_alloca_h"
2453 fi
2454
2455 case xyes in
2456 x$ac_cv_header_float_h)
2457   glib_float_h=yes
2458   glib_mf=FLT_MIN glib_Mf=FLT_MAX
2459   glib_md=DBL_MIN glib_Md=DBL_MAX
2460   ;;
2461 x$ac_cv_header_values_h)
2462   glib_values_h=yes
2463   glib_mf=MINFLOAT  glib_Mf=MAXFLOAT
2464   glib_md=MINDOUBLE glib_Md=MAXDOUBLE
2465   ;;
2466 esac
2467
2468 case xyes in
2469 x$ac_cv_header_limits_h)
2470   glib_limits_h=yes
2471   glib_ms=SHRT_MIN glib_Ms=SHRT_MAX glib_Mus=USHRT_MAX
2472   glib_mi=INT_MIN  glib_Mi=INT_MAX  glib_Mui=UINT_MAX
2473   glib_ml=LONG_MIN glib_Ml=LONG_MAX glib_Mul=ULONG_MAX
2474   ;;
2475 x$ac_cv_header_values_h)
2476   glib_values_h=yes
2477   glib_ms=MINSHORT glib_Ms=MAXSHORT glib_Mus="(((gushort)G_MAXSHORT)*2+1)"
2478   glib_mi=MININT   glib_Mi=MAXINT   glib_Mui="(((guint)G_MAXINT)*2+1)"
2479   glib_ml=MINLONG  glib_Ml=MAXLONG  glib_Mul="(((gulong)G_MAXLONG)*2+1)"
2480   ;;
2481 esac
2482
2483 if test x$ac_cv_header_sys_poll_h = xyes ; then
2484   glib_sys_poll_h=yes
2485 fi
2486
2487 case 2 in
2488 $ac_cv_sizeof_short)            
2489   gint16=short
2490   gint16_modifier='"h"'
2491   gint16_format='"hi"'
2492   guint16_format='"hu"'
2493   ;;
2494 $ac_cv_sizeof_int)              
2495   gint16=int
2496   gint16_modifier='""'
2497   gint16_format='"i"'
2498   guint16_format='"u"'
2499   ;;
2500 esac
2501 case 4 in
2502 $ac_cv_sizeof_short)            
2503   gint32=short
2504   gint32_modifier='"h"'
2505   gint32_format='"hi"'
2506   guint32_format='"hu"'
2507   ;;
2508 $ac_cv_sizeof_int)              
2509   gint32=int
2510   gint32_modifier='""'
2511   gint32_format='"i"'
2512   guint32_format='"u"'
2513   ;;
2514 $ac_cv_sizeof_long)             
2515   gint32=long
2516   gint32_modifier='"l"'
2517   gint32_format='"li"'
2518   guint32_format='"lu"'
2519   ;;
2520 esac
2521 case 8 in
2522 $ac_cv_sizeof_int)
2523   gint64=int
2524   gint64_modifier='""'
2525   gint64_format='"i"'
2526   guint64_format='"u"'
2527   glib_extension=
2528   gint64_constant='(val)'
2529   ;;
2530 $ac_cv_sizeof_long)
2531   gint64=long
2532   gint64_modifier='"l"'
2533   gint64_format='"li"'
2534   guint64_format='"lu"'
2535   glib_extension=
2536   gint64_constant='(val##L)'
2537   ;;
2538 $ac_cv_sizeof_long_long)
2539   gint64='long long'
2540   if test -n "$glib_cv_long_long_format"; then
2541     gint64_modifier='"'$glib_cv_long_long_format'"'
2542     gint64_format='"'$glib_cv_long_long_format'i"'
2543     guint64_format='"'$glib_cv_long_long_format'u"'
2544   fi
2545   glib_extension='G_GNUC_EXTENSION '
2546   gint64_constant='(G_GNUC_EXTENSION (val##LL))'
2547   ;;
2548 $ac_cv_sizeof___int64)
2549   gint64='__int64'
2550   if test -n "$glib_cv_long_long_format"; then
2551     gint64_modifier='"'$glib_cv_long_long_format'"'
2552     gint64_format='"'$glib_cv_long_long_format'i"'
2553     guint64_format='"'$glib_cv_long_long_format'u"'
2554   fi
2555   glib_extension=
2556   gint64_constant='(val##i64)'
2557   ;;
2558 esac
2559 glib_size_t=$ac_cv_sizeof_size_t
2560 glib_size_type_define=$glib_size_type
2561 glib_void_p=$ac_cv_sizeof_long
2562 glib_long=$ac_cv_sizeof_void_p
2563
2564 case $glib_size_type in
2565 short)
2566   gsize_modifier='"h"'
2567   gsize_format='"hu"'
2568   gssize_format='"hi"'
2569   glib_msize_type='SHRT'
2570   ;;
2571 int)
2572   gsize_modifier='""'
2573   gsize_format='"u"'
2574   gssize_format='"i"'
2575   glib_msize_type='INT'
2576   ;;
2577 long)
2578   gsize_modifier='"l"'
2579   gsize_format='"lu"'
2580   gssize_format='"li"'
2581   glib_msize_type='LONG'
2582   ;;
2583 esac
2584
2585 gintbits=`expr $ac_cv_sizeof_int \* 8`
2586 glongbits=`expr $ac_cv_sizeof_long \* 8`
2587
2588
2589 case $ac_cv_sizeof_void_p in
2590 $ac_cv_sizeof_int)      glib_gpi_cast=''        glib_gpui_cast=''         ;;
2591 $ac_cv_sizeof_long)     glib_gpi_cast='(glong)' glib_gpui_cast='(gulong)' ;;
2592 *)                      glib_unknown_void_p=yes ;;
2593 esac
2594
2595
2596 case xyes in
2597 x$ac_cv_func_atexit)
2598   glib_atexit="
2599 #ifdef NeXT /* @#%@! NeXTStep */
2600 # define g_ATEXIT(proc) (!atexit (proc))
2601 #else
2602 # define g_ATEXIT(proc) (atexit (proc))
2603 #endif"
2604   ;;
2605 x$ac_cv_func_on_exit)
2606   glib_atexit="
2607 #define g_ATEXIT(proc)  (on_exit ((void (*)(int, void*))(proc), NULL))"
2608   ;;
2609 esac
2610
2611 case xyes in
2612 x$ac_cv_func_memmove)
2613   glib_memmove='
2614 #define g_memmove(dest,src,len) G_STMT_START { memmove ((dest), (src), (len)); } G_STMT_END'
2615   ;;
2616 x$glib_cv_working_bcopy)
2617   glib_memmove="
2618 /* memmove isn't available, but bcopy can copy overlapping memory regions */
2619 #define g_memmove(d,s,n) G_STMT_START { bcopy ((s), (d), (n)); } G_STMT_END"
2620   ;;
2621 *)  
2622   glib_memmove="
2623 /* memmove isn't found and bcopy can't copy overlapping memory regions, 
2624  * so we have to roll our own copy routine. */
2625 void g_memmove (void* dest, const void * src, unsigned long len);"
2626   ;;
2627 esac
2628
2629 glib_defines="
2630 #define GLIB_MAJOR_VERSION $GLIB_MAJOR_VERSION
2631 #define GLIB_MINOR_VERSION $GLIB_MINOR_VERSION
2632 #define GLIB_MICRO_VERSION $GLIB_MICRO_VERSION
2633 "
2634
2635 case xyes in
2636 x$glib_cv_va_copy)      glib_vacopy='#define G_VA_COPY  va_copy' ;;
2637 x$glib_cv___va_copy)    glib_vacopy='#define G_VA_COPY  __va_copy' ;;
2638 *)                      glib_vacopy=''
2639 esac
2640
2641 if test x$glib_cv_va_val_copy = xno; then
2642   glib_vacopy="\$glib_vacopy
2643 #define G_VA_COPY_AS_ARRAY 1"
2644 fi
2645
2646 if test x$glib_cv_hasinline = xyes; then
2647     glib_inline='#define G_HAVE_INLINE 1'
2648 fi
2649 if test x$glib_cv_has__inline = xyes; then
2650     glib_inline="\$glib_inline
2651 #define G_HAVE___INLINE 1"
2652 fi
2653 if test x$glib_cv_has__inline__ = xyes; then
2654     glib_inline="\$glib_inline
2655 #define G_HAVE___INLINE__ 1"
2656 fi
2657
2658 g_have_gnuc_varargs=$g_have_gnuc_varargs
2659 g_have_iso_c_varargs=$g_have_iso_c_varargs
2660 g_have_iso_cxx_varargs=$g_have_iso_cxx_varargs
2661
2662 g_can_inline=$g_can_inline
2663 g_have_gnuc_visibility=$g_have_gnuc_visibility
2664
2665 case xyes in
2666 x$ac_cv_c_bigendian)
2667   g_byte_order=G_BIG_ENDIAN
2668   g_bs_native=BE
2669   g_bs_alien=LE
2670   ;;
2671 *)
2672   g_byte_order=G_LITTLE_ENDIAN
2673   g_bs_native=LE
2674   g_bs_alien=BE
2675   ;;
2676 esac
2677
2678 g_pollin=$glib_cv_value_POLLIN
2679 g_pollout=$glib_cv_value_POLLOUT
2680 g_pollpri=$glib_cv_value_POLLPRI
2681 g_pollhup=$glib_cv_value_POLLHUP
2682 g_pollerr=$glib_cv_value_POLLERR
2683 g_pollnval=$glib_cv_value_POLLNVAL
2684
2685 g_stack_grows=$glib_cv_stack_grows
2686
2687 g_have_eilseq=$have_eilseq
2688
2689 case x$have_threads in
2690 xno)    g_enable_threads_def="#undef";;
2691 *)      g_enable_threads_def="#define";;
2692 esac
2693
2694 g_threads_impl_def=$g_threads_impl
2695
2696 g_mutex_has_default="$mutex_has_default"
2697 g_mutex_sizeof="$glib_cv_sizeof_gmutex"
2698 g_system_thread_sizeof="$glib_cv_sizeof_system_thread"
2699 g_mutex_contents="$glib_cv_byte_contents_gmutex"
2700
2701 g_memory_barrier_needed="$glib_memory_barrier_needed"
2702
2703 g_module_suffix="$glib_gmodule_suffix"
2704
2705 g_pid_type="$glib_pid_type"
2706 case $host in
2707   *-*-beos*)
2708     glib_os="#define G_OS_BEOS"
2709     ;;
2710   *-*-cygwin*)
2711     glib_os="#define G_OS_UNIX
2712 #define G_PLATFORM_WIN32
2713 #define G_WITH_CYGWIN"
2714     ;;
2715   *-*-mingw*)
2716     glib_os="#define G_OS_WIN32
2717 #define G_PLATFORM_WIN32"
2718     ;;
2719   *)
2720     glib_os="#define G_OS_UNIX"
2721     ;;
2722 esac
2723 ])
2724
2725 AC_CONFIG_FILES([
2726 glib-2.0.pc
2727 glib-2.0-uninstalled.pc
2728 gmodule-2.0.pc
2729 gmodule-export-2.0.pc
2730 gmodule-no-export-2.0.pc
2731 gmodule-2.0-uninstalled.pc
2732 gmodule-no-export-2.0-uninstalled.pc
2733 gthread-2.0.pc
2734 gthread-2.0-uninstalled.pc
2735 gobject-2.0.pc
2736 gobject-2.0-uninstalled.pc
2737 glib-zip
2738 glib-gettextize
2739 Makefile
2740 build/Makefile
2741 build/win32/Makefile
2742 build/win32/dirent/Makefile
2743 glib/Makefile
2744 glib/libcharset/Makefile
2745 glib/gnulib/Makefile
2746 gmodule/Makefile
2747 gmodule/gmoduleconf.h
2748 gobject/Makefile
2749 gobject/glib-mkenums
2750 gthread/Makefile
2751 po/Makefile.in
2752 docs/Makefile
2753 docs/reference/Makefile
2754 docs/reference/glib/Makefile
2755 docs/reference/glib/version.xml
2756 docs/reference/gobject/Makefile
2757 docs/reference/gobject/version.xml
2758 tests/Makefile
2759 tests/gobject/Makefile
2760 tests/refcount/Makefile
2761 m4macros/Makefile
2762 ])
2763
2764 AC_CONFIG_COMMANDS([chmod-scripts],
2765 [chmod 0755 glib-zip
2766 chmod 0755 glib-gettextize
2767 chmod 0755 gobject/glib-mkenums])
2768
2769 # we want to invoke this macro solely so that the config.status script
2770 # and automake generated makefiles know about these generated files.
2771 # They are only needed to distcheck the package
2772 if false; then
2773   AC_CONFIG_FILES([
2774     INSTALL
2775     README
2776     config.h.win32
2777     glibconfig.h.win32
2778     glib/makefile.msc
2779     glib/glib.rc
2780     gmodule/makefile.msc
2781     gmodule/gmodule.rc
2782     gobject/makefile.msc
2783     gobject/gobject.rc
2784     gthread/makefile.msc
2785     gthread/gthread.rc
2786     tests/makefile.msc
2787   ])
2788 fi
2789
2790 AC_OUTPUT