added a new conditional CROSS_COMPILING which indicates ($build != $host).
[platform/upstream/glib.git] / configure.in
1 dnl ***********************************
2 dnl *** include special GLib macros ***
3 dnl ***********************************
4 builtin(include, acglib.m4)dnl
5 builtin(include, glib/libcharset/codeset.m4)dnl
6 builtin(include, glib/libcharset/glibc21.m4)dnl
7
8 # require autoconf 2.52
9 AC_PREREQ(2.52)
10
11 # Process this file with autoconf to produce a configure script.
12 AC_INIT(glib/glib.h)
13
14 # Save this value here, since automake will set cflags later
15 cflags_set=${CFLAGS+set}
16
17 # we rewrite this file
18 rm -f glibconfig-sysdefs.h
19
20 GLIB_AC_DIVERT_BEFORE_HELP([
21 #
22 # The following version number definitions apply to GLib, GModule, GObject 
23 # and GThread as a whole, so if changes occoured in any of them, they are all
24 # treated with the same interface and binary age.
25 #
26 # Making releases:
27 #   GLIB_MICRO_VERSION += 1;
28 #   GLIB_INTERFACE_AGE += 1;
29 #   GLIB_BINARY_AGE += 1;
30 # if any functions have been added, set GLIB_INTERFACE_AGE to 0.
31 # if backwards compatibility has been broken,
32 # set GLIB_BINARY_AGE _and_ GLIB_INTERFACE_AGE to 0.
33 #
34 GLIB_MAJOR_VERSION=2
35 GLIB_MINOR_VERSION=0
36 GLIB_MICRO_VERSION=1
37 GLIB_INTERFACE_AGE=1
38 GLIB_BINARY_AGE=1
39 GLIB_VERSION=$GLIB_MAJOR_VERSION.$GLIB_MINOR_VERSION.$GLIB_MICRO_VERSION
40 ])dnl
41
42 AC_SUBST(GLIB_MAJOR_VERSION)
43 AC_SUBST(GLIB_MINOR_VERSION)
44 AC_SUBST(GLIB_MICRO_VERSION)
45 AC_SUBST(GLIB_VERSION)
46 AC_SUBST(GLIB_INTERFACE_AGE)
47 AC_SUBST(GLIB_BINARY_AGE)
48
49 # libtool versioning
50 LT_RELEASE=$GLIB_MAJOR_VERSION.$GLIB_MINOR_VERSION
51 LT_CURRENT=`expr $GLIB_MICRO_VERSION - $GLIB_INTERFACE_AGE`
52 LT_REVISION=$GLIB_INTERFACE_AGE
53 LT_AGE=`expr $GLIB_BINARY_AGE - $GLIB_INTERFACE_AGE`
54 LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
55 AC_SUBST(LT_RELEASE)
56 AC_SUBST(LT_CURRENT)
57 AC_SUBST(LT_REVISION)
58 AC_SUBST(LT_AGE)
59 AC_SUBST(LT_CURRENT_MINUS_AGE)
60
61 VERSION=$GLIB_VERSION
62 PACKAGE=glib
63
64 AM_INIT_AUTOMAKE($PACKAGE, $VERSION, no-define)
65
66 # Specify a configuration file
67 AM_CONFIG_HEADER(config.h)
68
69 AC_DEFINE_UNQUOTED(GLIB_MAJOR_VERSION, $GLIB_MAJOR_VERSION,
70                    [Define to the GLIB major version])
71 AC_DEFINE_UNQUOTED(GLIB_MINOR_VERSION, $GLIB_MINOR_VERSION,
72                    [Define to the GLIB minor version])
73 AC_DEFINE_UNQUOTED(GLIB_MICRO_VERSION, $GLIB_MICRO_VERSION,
74                    [Define to the GLIB micro version])
75 AC_DEFINE_UNQUOTED(GLIB_INTERFACE_AGE, $GLIB_INTERFACE_AGE,
76                    [Define to the GLIB interface age])
77 AC_DEFINE_UNQUOTED(GLIB_BINARY_AGE, $GLIB_BINARY_AGE,
78                    [Define to the GLIB binary age])
79
80 dnl Initialize maintainer mode
81 AM_MAINTAINER_MODE
82
83 AC_CANONICAL_HOST
84
85 AC_MSG_CHECKING(for the BeOS)
86 case $host in
87   *-*-beos*)
88     glib_native_beos="yes"
89     ;;
90   *)
91     glib_native_beos="no"
92     ;;
93 esac
94 AC_MSG_RESULT([$glib_native_beos])
95
96 dnl
97
98 AC_MSG_CHECKING([for Win32])
99 case "$host" in
100   *-*-mingw*)
101     glib_native_win32=yes
102     G_LIB_WIN32_RESOURCE=glib-win32res.lo
103     G_MODULE_WIN32_RESOURCE=gmodule-win32res.lo
104     G_OBJECT_WIN32_RESOURCE=gobject-win32res.lo
105     G_THREAD_WIN32_RESOURCE=gthread-win32res.lo
106     GLIB_DEF=glib.def
107     GMODULE_DEF=gmodule.def
108     GOBJECT_DEF=gobject.def
109     GTHREAD_DEF=gthread.def
110     TESTGMODULE_EXP=testgmodule.exp
111     ;;
112   *)
113     glib_native_win32=no
114     G_LIB_WIN32_RESOURCE=
115     G_MODULE_WIN32_RESOURCE=
116     G_OBJECT_WIN32_RESOURCE=
117     G_THREAD_WIN32_RESOURCE=
118     GLIB_DEF=
119     GMODULE_DEF=
120     GOBJECT_DEF=
121     GTHREAD_DEF=
122     TESTGMODULE_EXP=
123     ;;
124 esac
125 AC_MSG_RESULT([$glib_native_win32])
126 AM_CONDITIONAL(OS_WIN32, test "$glib_native_win32" = "yes")
127 AC_SUBST(G_LIB_WIN32_RESOURCE)
128 AC_SUBST(G_MODULE_WIN32_RESOURCE)
129 AC_SUBST(G_OBJECT_WIN32_RESOURCE)
130 AC_SUBST(G_THREAD_WIN32_RESOURCE)
131 AC_SUBST(GLIB_DEF)
132 AC_SUBST(GMODULE_DEF)
133 AC_SUBST(GOBJECT_DEF)
134 AC_SUBST(GTHREAD_DEF)
135 AC_SUBST(TESTGMODULE_EXP)
136
137 if test "$glib_native_win32" = "yes"; then
138   AC_CHECK_PROG(ms_librarian, lib.exe, yes, no)
139 fi
140 AM_CONDITIONAL(MS_LIB_AVAILABLE, test x$ms_librarian = xyes)
141
142 GLIB_AC_DIVERT_BEFORE_HELP([
143 # figure debugging default, prior to $ac_help setup
144 case $GLIB_MINOR_VERSION in
145 *[[13579]]) debug_default=yes ;;
146 *)          debug_default=minimum ;;
147 esac[]dnl
148 ])
149
150 dnl declare --enable-* args and collect ac_help strings
151 AC_ARG_ENABLE(debug, [  --enable-debug=[no/minimum/yes] turn on debugging [default=$debug_default]],,enable_debug=$debug_default)
152 AC_ARG_ENABLE(gc_friendly, [  --enable-gc-friendly    turn on garbage collector friendliness [default=no]],,enable_gc_friendly=no)
153 AC_ARG_ENABLE(mem_pools, [  --disable-mem-pools     disable all glib memory pools],,disable_mem_pools=no)
154 AC_ARG_ENABLE(ansi, [  --enable-ansi           turn on strict ansi [default=no]],
155                     , enable_ansi=no)
156 AC_ARG_ENABLE(threads, [  --enable-threads        turn on basic thread support [default=yes]
157                           ([=no] will override --with-threads)],,enable_threads=yes)
158 AC_ARG_ENABLE(rebuilds, [  --disable-rebuilds      disable all source autogeneration rules],,enable_rebuilds=yes)
159
160 if test "x$enable_threads" != "xyes"; then
161   enable_threads=no
162 fi
163
164 AC_DEFINE_UNQUOTED(G_COMPILED_WITH_DEBUGGING, "${enable_debug}",
165         [Whether glib was compiled with debugging enabled])
166
167 AC_MSG_CHECKING(whether to enable garbage collector friendliness)
168 if test "x$enable_gc_friendly" = "xyes"; then
169   AC_DEFINE(ENABLE_GC_FRIENDLY, 1, [Whether to enable GC friendliness])
170   AC_SUBST(ENABLE_GC_FRIENDLY)
171   AC_MSG_RESULT(yes)
172 else
173   AC_MSG_RESULT(no)
174 fi
175
176 AC_MSG_CHECKING(whether to disable memory pools)
177 if test "x$disable_mem_pools" = "xno"; then
178   AC_MSG_RESULT(no)
179 else
180   AC_DEFINE(DISABLE_MEM_POOLS, 1, [Whether to disable memory pools])
181   AC_SUBST(DISABLE_MEM_POOLS)
182   AC_MSG_RESULT(yes)
183 fi
184
185 dnl Checks for programs.
186 AC_PROG_CC
187
188 dnl Check for a working C++ compiler, but do not bail out, if none is found.
189 AC_CHECK_PROGS(CXX, $CCC c++ g++ gcc CC cxx cc++ cl, gcc)
190 AC_LANG_SAVE
191 AC_LANG_CPLUSPLUS
192 AC_TRY_COMPILE(,[class a { int b; } c;], ,CXX=)
193 AM_CONDITIONAL(HAVE_CXX, test "$CXX" != "")
194 AC_LANG_RESTORE
195
196 AM_PROG_CC_STDC
197 AC_PROG_INSTALL
198
199 AC_SYS_LARGEFILE
200
201 #
202 # Find pkg-config
203 #
204 AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
205 if test x$PKG_CONFIG = xno ; then
206   AC_MSG_ERROR([*** pkg-config not found. See http://www.freedesktop.org/software/pkgconfig/])
207 fi
208
209 if $PKG_CONFIG --atleast-pkgconfig-version 0.5 ; then
210   :
211 else
212   AC_MSG_ERROR([*** pkg-config too old; version 0.5 or better required.])
213 fi
214
215 if test "x$enable_debug" = "xyes"; then
216   if test x$cflags_set != xset ; then
217       case " $CFLAGS " in
218       *[[\ \    ]]-g[[\ \       ]]*) ;;
219       *) CFLAGS="$CFLAGS -g" ;;
220       esac
221   fi
222         
223   GLIB_DEBUG_FLAGS="-DG_ENABLE_DEBUG"
224 else
225   if test "x$enable_debug" = "xno"; then
226     GLIB_DEBUG_FLAGS="-DG_DISABLE_ASSERT -DG_DISABLE_CHECKS"
227   fi
228 fi
229
230 # Ensure -fnative-struct is used when compiling for Win32
231 if test "x$glib_native_win32" = "xyes"; then
232   if test "x$GCC" = "xyes"; then
233     case " $CFLAGS " in
234     *[[\ \      ]]-fnative-struct[[\ \  ]]*) ;;
235     *) CFLAGS="$CFLAGS -fnative-struct" ;;
236     esac
237   fi
238 fi
239
240 AC_CYGWIN
241 AC_EXEEXT
242
243 # define a MAINT-like variable REBUILD which is set if Perl
244 # and awk are found, so autogenerated sources can be rebuilt
245 AC_PROG_AWK
246 AC_CHECK_PROGS(PERL, perl5 perl)
247 # We would like indent, but don't require it.
248 AC_CHECK_PROG(INDENT, indent, indent)
249 REBUILD=\#
250 if test "x$enable_rebuilds" = "xyes" && \
251      test -n "$PERL" && \
252      $PERL -e 'exit !($] >= 5.002)' > /dev/null 2>&1 && \
253      test -n "$AWK" ; then
254   REBUILD=
255 fi
256 AC_SUBST(REBUILD)
257
258 # Need full path to Perl for glib-mkenums
259 #
260 if test "x$PERL" != x ; then
261   AC_PATH_PROG(PERL_PATH, $PERL)
262 else
263   PERL_PATH="/usr/bin/env perl"
264 fi
265 AC_SUBST(PERL_PATH)
266
267 dnl
268 dnl gettext support
269 dnl
270
271 ALL_LINGUAS="az ca cs de el es eu fr gl ja ko ms nl nn no pl pt ro ru sk sl sv ta tr uk vi zh_CN zh_TW"
272 AM_GLIB_GNU_GETTEXT
273
274 if test "$gt_cv_func_dgettext_libc" = "yes" || test "$gt_cv_func_dgettext_libintl" = "yes"; then
275   :
276 else
277   AC_MSG_ERROR([
278 *** You must have either have gettext support in your C library, or use the 
279 *** GNU gettext library. (http://www.gnu.org/software/gettext/gettext.html
280 ])
281 fi
282
283 LIBS="$LIBS $INTLLIBS"
284
285 GETTEXT_PACKAGE=glib20
286 AC_SUBST(GETTEXT_PACKAGE)
287 AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE")
288
289 # AM_GLIB_GNU_GETTEXT above substs $DATADIRNAME
290 # this is the directory where the *.{mo,gmo} files are installed
291 GLIB_LOCALE_DIR="${prefix}/${DATADIRNAME}/locale"
292 AC_DEFINE_UNQUOTED(GLIB_LOCALE_DIR,"$GLIB_LOCALE_DIR")
293
294 AC_CHECK_FUNCS(bind_textdomain_codeset)
295
296 dnl Initialize libtool
297 AM_DISABLE_STATIC
298 AC_LIBTOOL_WIN32_DLL
299 AM_PROG_LIBTOOL
300
301 if test "x$GCC" = "xyes"; then
302   case " $CFLAGS " in
303   *[[\ \        ]]-Wall[[\ \    ]]*) ;;
304   *) CFLAGS="$CFLAGS -Wall" ;;
305   esac
306
307   if test "x$enable_ansi" = "xyes"; then
308     case " $CFLAGS " in
309     *[[\ \      ]]-ansi[[\ \    ]]*) ;;
310     *) CFLAGS="$CFLAGS -ansi" ;;
311     esac
312
313     case " $CFLAGS " in
314     *[[\ \      ]]-pedantic[[\ \        ]]*) ;;
315     *) CFLAGS="$CFLAGS -pedantic" ;;
316     esac
317   fi
318 fi
319
320 dnl DU4 native cc currently needs -std1 for ANSI mode (instead of K&R)
321 AC_MSG_CHECKING([for extra flags to get ANSI library prototypes])
322 glib_save_LIBS=$LIBS
323 LIBS="$LIBS -lm"
324 AC_TRY_RUN([#include <math.h>
325              int main (void) { return (log(1) != log(1.)); }],
326      AC_MSG_RESULT(none needed),
327      glib_save_CFLAGS=$CFLAGS
328      CFLAGS="$CFLAGS -std1"
329      AC_TRY_RUN([#include <math.h>
330                  int main (void) { return (log(1) != log(1.)); }],
331          AC_MSG_RESULT(-std1),
332          AC_MSG_RESULT()
333          CFLAGS=$glib_save_CFLAGS
334          AC_MSG_WARN(
335                 [No ANSI prototypes found in library. (-std1 didn't work.)])
336      )
337 )
338 LIBS=$glib_save_LIBS
339
340 dnl NeXTStep cc seems to need this
341 AC_MSG_CHECKING([for extra flags for POSIX compliance])
342 AC_TRY_COMPILE([#include <dirent.h>], [DIR *dir;],
343   AC_MSG_RESULT(none needed),
344   glib_save_CFLAGS=$CFLAGS
345   CFLAGS="$CFLAGS -posix"
346   AC_TRY_COMPILE([#include <dirent.h>], [DIR *dir;],
347     AC_MSG_RESULT(-posix),
348     AC_MSG_RESULT()
349     CFLAGS=$glib_save_CFLAGS
350     AC_MSG_WARN([Could not determine POSIX flag. (-posix didn't work.)])))
351
352 # Checks for header files.
353 AC_HEADER_STDC
354
355 # Checks for library functions.
356 AC_FUNC_VPRINTF
357
358 AC_FUNC_ALLOCA
359
360 AC_CHECK_FUNCS(atexit on_exit)
361
362 AC_CHECK_SIZEOF(char)
363 AC_CHECK_SIZEOF(short)
364 AC_CHECK_SIZEOF(long)
365 AC_CHECK_SIZEOF(int)
366 AC_CHECK_SIZEOF(void *)
367 AC_CHECK_SIZEOF(long long)
368 AC_CHECK_SIZEOF(__int64)
369
370 if test x$ac_cv_sizeof_long = x8 || test x$ac_cv_sizeof_long_long = x8 || test x$ac_cv_sizeof___int64 = x8 ; then
371   :
372 else
373   AC_MSG_ERROR([
374 *** GLib requires a 64 bit type. You might want to consider
375 *** using the GNU C compiler.
376 ])
377 fi
378
379 if test x$ac_cv_sizeof_long_long = x8; then
380         # long long is a 64 bit integer.
381         AC_MSG_CHECKING(for format to printf and scanf a guint64)
382         AC_CACHE_VAL(glib_cv_long_long_format,[
383                 for format in ll q I64; do
384                   AC_TRY_RUN([#include <stdio.h>  
385                         int main()
386                         {
387                           long long b, a = -0x3AFAFAFAFAFAFAFALL;
388                           char buffer[1000];
389                           sprintf (buffer, "%${format}u", a);
390                           sscanf (buffer, "%${format}u", &b);
391                           exit (b!=a);
392                         }
393                         ],
394                         glib_cv_long_long_format=${format}
395                         break)
396                 done])
397         if test -n "$glib_cv_long_long_format"; then
398           AC_MSG_RESULT(%${glib_cv_long_long_format}u)
399         else
400           AC_MSG_RESULT(none)
401         fi
402 elif test x$ac_cv_sizeof___int64 = x8; then
403         # __int64 is a 64 bit integer.
404         AC_MSG_CHECKING(for format to printf and scanf a guint64)
405         # We know this is MSVC, and what the formats are
406         glib_cv_long_long_format=I64
407         AC_MSG_RESULT(%${glib_cv_long_long_format}u)
408 fi
409
410 dnl long doubles were not used, and a portability problem
411 dnl AC_C_LONG_DOUBLE
412 AC_C_CONST
413
414 dnl ok, here we try to check whether the systems prototypes for
415 dnl malloc and friends actually match the prototypes provided
416 dnl by gmem.h (keep in sync). i currently only know how to check
417 dnl this reliably with gcc (-Werror), improvements for other
418 dnl compilers are apprechiated.
419 SANE_MALLOC_PROTOS=no
420 AC_MSG_CHECKING([if malloc() and friends prototypes are gmem.h compatible])
421 glib_save_CFLAGS=$CFLAGS
422 if test "x$GCC" = "xyes"; then
423   CFLAGS="$CFLAGS -Werror"
424   AC_TRY_COMPILE([#include <stdlib.h>], [
425     void* (*my_calloc_p)  (size_t, size_t) = calloc;
426     void* (*my_malloc_p)  (size_t)         = malloc;
427     void  (*my_free_p)    (void*)          = free;
428     void* (*my_realloc_p) (void*, size_t)  = realloc;
429     my_calloc_p = 0;
430     my_malloc_p = 0;
431     my_free_p = 0;
432     my_realloc_p = 0;
433   ],
434     AC_DEFINE(SANE_MALLOC_PROTOS)
435     SANE_MALLOC_PROTOS=yes)
436 fi
437 AC_MSG_RESULT($SANE_MALLOC_PROTOS)
438 CFLAGS=$glib_save_CFLAGS
439
440 dnl
441 dnl check in which direction the stack grows
442 dnl
443 AC_CACHE_CHECK([for growing stack pointer],glib_cv_stack_grows,[
444         AC_TRY_RUN([
445         volatile int *a = 0, *b = 0;
446         void foo (void);
447         int main () { volatile int y = 7; a = &y; foo (); return b > a; }
448         void foo (void) { volatile int x = 5; b = &x; }
449         ],
450         glib_cv_stack_grows=no
451         ,
452         glib_cv_stack_grows=yes
453         ,)
454 ])
455
456 dnl AC_C_INLINE is useless to us since it bails out too early, we need to
457 dnl truely know which ones of `inline', `__inline' and `__inline__' are
458 dnl actually supported.
459 AC_CACHE_CHECK([for __inline],glib_cv_has__inline,[
460         AC_TRY_RUN([
461         __inline int foo () { return 0; }
462         int main () { return foo (); }
463         ],
464         glib_cv_has__inline=yes
465         ,
466         glib_cv_has__inline=no
467         ,)
468 ])
469 case x$glib_cv_has__inline in
470 xyes) AC_DEFINE(G_HAVE___INLINE,1,[Have __inline keyword])
471 esac
472 AC_CACHE_CHECK([for __inline__],glib_cv_has__inline__,[
473         AC_TRY_RUN([
474         __inline__ int foo () { return 0; }
475         int main () { return foo (); }
476         ],
477         glib_cv_has__inline__=yes
478         ,
479         glib_cv_has__inline__=no
480         ,)
481 ])
482 case x$glib_cv_has__inline__ in
483 xyes) AC_DEFINE(G_HAVE___INLINE__,1,[Have __inline__ keyword])
484 esac
485 AC_CACHE_CHECK([for inline], glib_cv_hasinline,[
486         AC_TRY_RUN([
487         #undef inline
488         inline int foo () { return 0; }
489         int main () { return foo (); }
490         ],
491         glib_cv_hasinline=yes
492         ,
493         glib_cv_hasinline=no
494         ,)
495 ])
496 case x$glib_cv_hasinline in
497 xyes) AC_DEFINE(G_HAVE_INLINE,1,[Have inline keyword])
498 esac
499
500 # check for flavours of varargs macros
501 AC_MSG_CHECKING(for ISO C99 varargs macros in C)
502 AC_TRY_COMPILE([],[
503 int a(int p1, int p2, int p3);
504 #define call_a(...) a(1,__VA_ARGS__)
505 call_a(2,3);
506 ],g_have_iso_c_varargs=yes,g_have_iso_c_varargs=no)
507 AC_MSG_RESULT($g_have_iso_c_varargs)
508
509 AC_MSG_CHECKING(for ISO C99 varargs macros in C++)
510 if test "$CXX" = ""; then
511 dnl No C++ compiler
512   g_have_iso_cxx_varargs=no
513 else
514   AC_LANG_CPLUSPLUS
515   AC_TRY_COMPILE([],[
516 int a(int p1, int p2, int p3);
517 #define call_a(...) a(1,__VA_ARGS__)
518 call_a(2,3);
519 ],g_have_iso_cxx_varargs=yes,g_have_iso_cxx_varargs=no)
520   AC_LANG_C
521 fi
522 AC_MSG_RESULT($g_have_iso_cxx_varargs)
523
524 AC_MSG_CHECKING(for GNUC varargs macros)
525 AC_TRY_COMPILE([],[
526 int a(int p1, int p2, int p3);
527 #define call_a(params...) a(1,params)
528 call_a(2,3);
529 ],g_have_gnuc_varargs=yes,g_have_gnuc_varargs=no)
530 AC_MSG_RESULT($g_have_gnuc_varargs)
531
532 # check for bytesex stuff
533 AC_C_BIGENDIAN
534
535 # check for header files
536 AC_CHECK_HEADERS([dirent.h float.h limits.h pwd.h sys/param.h sys/poll.h sys/select.h])
537 AC_CHECK_HEADERS([sys/time.h sys/times.h unistd.h values.h stdint.h sched.h])
538
539 # Checks for libcharset
540 jm_LANGINFO_CODESET
541 jm_GLIBC21
542 AC_CHECK_HEADERS([stddef.h stdlib.h string.h])
543 AC_CHECK_FUNCS(setlocale)
544
545 AC_MSG_CHECKING(whether make is GNU Make)
546 STRIP_BEGIN=
547 STRIP_END=
548 if $ac_make --version 2>/dev/null | grep '^GNU Make ' >/dev/null ; then
549         STRIP_BEGIN='$(strip $(STRIP_DUMMY)'
550         STRIP_END=')'
551         AC_MSG_RESULT(yes)
552 else
553         AC_MSG_RESULT(no)
554 fi
555 STRIP_DUMMY=
556 AC_SUBST(STRIP_DUMMY)
557 AC_SUBST(STRIP_BEGIN)
558 AC_SUBST(STRIP_END)
559
560 # check additional type sizes
561 size_includes=["
562 #include <stdarg.h>
563 #include <stdio.h>
564 #include <ctype.h>
565 #include <string.h>
566 "]
567 if test "x$ac_cv_header_stdint_h" = "xyes"; then
568   size_includes=["$size_includes
569 #include <stdint.h>
570 "]
571 fi
572 if test "x$ac_cv_header_unistd_h" = "xyes"; then
573   size_includes=["$size_includes
574 #include <unistd.h>
575 "]
576 fi
577 GLIB_SIZEOF([$size_includes], size_t, size_t)
578 GLIB_SIZEOF([$size_includes], ptrdiff_t, ptrdiff_t)
579 GLIB_SIZEOF([$size_includes], intmax_t, intmax_t)
580
581 # Check for some functions
582 AC_CHECK_FUNCS(lstat strerror strsignal memmove mkstemp vsnprintf stpcpy strcasecmp strncasecmp poll getcwd nanosleep vasprintf unsetenv)
583
584 AC_FUNC_VSNPRINTF_C99
585
586 # Check if bcopy can be used for overlapping copies, if memmove isn't found.
587 # The check is borrowed from the PERL Configure script.
588 if test "$ac_cv_func_memmove" != "yes"; then
589   AC_CACHE_CHECK(whether bcopy can handle overlapping copies,
590     glib_cv_working_bcopy,[AC_TRY_RUN([
591       int main() {
592         char buf[128], abc[128], *b;
593         int len, off, align;
594         bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
595         for (align = 7; align >= 0; align--) {
596           for (len = 36; len; len--) {
597             b = buf+align; bcopy(abc, b, len);
598             for (off = 1; off <= len; off++) {
599               bcopy(b, b+off, len); bcopy(b+off, b, len);
600                 if (bcmp(b, abc, len)) return(1);
601             }
602           }
603         }
604         return(0);
605       }],glib_cv_working_bcopy=yes,glib_cv_working_bcopy=no)])
606   if test "$glib_cv_working_bcopy" = "yes"; then
607     AC_DEFINE(HAVE_WORKING_BCOPY,1,[Have a working bcopy])
608   fi
609 fi
610
611 # Check for sys_errlist
612 AC_MSG_CHECKING(for sys_errlist)
613 AC_TRY_LINK(, [
614 extern char *sys_errlist[];
615 extern int sys_nerr;
616 sys_errlist[sys_nerr-1][0] = 0;
617 ], glib_ok=yes, glib_ok=no)
618 AC_MSG_RESULT($glib_ok)
619 if test "$glib_ok" = "no"; then
620     AC_DEFINE(NO_SYS_ERRLIST,1,[global 'sys_errlist' not found])
621 fi
622
623 # Check for sys_siglist
624 AC_MSG_CHECKING(for sys_siglist)
625 AC_TRY_LINK(, [
626 extern char *sys_siglist[];
627 exit (sys_siglist[0]);
628 ], glib_ok=yes, glib_ok=no)
629 AC_MSG_RESULT($glib_ok)
630 if test "$glib_ok" = "no"; then
631     AC_DEFINE(NO_SYS_SIGLIST,1,[global 'sys_siglist' not found])
632 fi
633
634 # Check for sys_siglist decl (see Tue Jan 19 00:44:24 1999 in changelog)
635 AC_MSG_CHECKING(for sys_siglist declaration)
636 AC_TRY_COMPILE([#include <signal.h>], [
637 strlen (sys_siglist[0]);
638 ], glib_ok=yes, glib_ok=no)
639 AC_MSG_RESULT($glib_ok)
640 if test "$glib_ok" = "no"; then
641     AC_DEFINE(NO_SYS_SIGLIST_DECL,1,[global 'sys_siglist' not declared])
642 fi
643
644 # Check if <sys/select.h> needs to be included for fd_set
645 AC_MSG_CHECKING([for fd_set])
646 AC_TRY_COMPILE([#include <sys/types.h>],
647         [fd_set readMask, writeMask;], gtk_ok=yes, gtk_ok=no)
648 if test "$gtk_ok" = "yes"; then
649     AC_MSG_RESULT([yes, found in sys/types.h])
650 else
651     AC_EGREP_HEADER(fd_set, sys/select.h, gtk_ok=yes)
652     if test "$gtk_ok" = "yes"; then
653         # *** FIXME: give it a different name
654         AC_DEFINE(HAVE_SYS_SELECT_H,1,[found fd_set in sys/select.h])
655         AC_MSG_RESULT([yes, found in sys/select.h])
656     else
657         AC_DEFINE(NO_FD_SET,1,[didn't find fd_set])
658         AC_MSG_RESULT(no)
659     fi
660 fi
661
662 dnl *** check for sane realloc() ***
663 AC_CACHE_CHECK([whether realloc (NULL,) will work],glib_cv_sane_realloc,[
664         AC_TRY_RUN([
665         #include <stdlib.h>
666         int main() {
667           return realloc (0, sizeof (int)) == 0;
668         }],
669         [glib_cv_sane_realloc=yes],
670         [glib_cv_sane_realloc=no],
671         [])
672 ])
673 if test x$glib_cv_sane_realloc = xyes; then
674   AC_DEFINE(REALLOC_0_WORKS,1,[whether realloc (NULL,) works])
675 fi
676
677 dnl Check for nl_langinfo and CODESET
678
679 AC_MSG_CHECKING([for nl_langinfo (CODESET)])
680 AC_TRY_COMPILE([#include <langinfo.h>],
681         [char *codeset = nl_langinfo (CODESET);],
682    AC_DEFINE(HAVE_CODESET,1,[Have nl_langinfo (CODESET)])
683    have_codeset=yes,
684    have_codeset=no)
685 AC_MSG_RESULT($have_codeset)
686
687
688 dnl ****************************************
689 dnl *** strlcpy/strlcat                  ***
690 dnl ****************************************
691 # Check for strlcpy
692 AC_MSG_CHECKING(for strlcpy/strlcat)
693 AC_TRY_LINK([#include <stdlib.h>
694 #include <string.h>], [
695 char *p = malloc(10);
696 (void) strlcpy(p, "hi", 10);
697 (void) strlcat(p, "bye", 10);
698 ], glib_ok=yes, glib_ok=no)
699 AC_MSG_RESULT($glib_ok)
700 if test "$glib_ok" = "yes"; then
701     AC_DEFINE(HAVE_STRLCPY,1,[Have functions strlcpy and strlcat])
702 fi
703   
704
705 dnl **********************
706 dnl *** va_copy checks ***
707 dnl **********************
708 dnl we currently check for all three va_copy possibilities, so we get
709 dnl all results in config.log for bug reports.
710 AC_CACHE_CHECK([for an implementation of va_copy()],glib_cv_va_copy,[
711         AC_TRY_RUN([
712         #include <stdarg.h>
713         void f (int i, ...) {
714         va_list args1, args2;
715         va_start (args1, i);
716         va_copy (args2, args1);
717         if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
718           exit (1);
719         va_end (args1); va_end (args2);
720         }
721         int main() {
722           f (0, 42);
723           return 0;
724         }],
725         [glib_cv_va_copy=yes],
726         [glib_cv_va_copy=no],
727         [])
728 ])
729 AC_CACHE_CHECK([for an implementation of __va_copy()],glib_cv___va_copy,[
730         AC_TRY_RUN([
731         #include <stdarg.h>
732         void f (int i, ...) {
733         va_list args1, args2;
734         va_start (args1, i);
735         __va_copy (args2, args1);
736         if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
737           exit (1);
738         va_end (args1); va_end (args2);
739         }
740         int main() {
741           f (0, 42);
742           return 0;
743         }],
744         [glib_cv___va_copy=yes],
745         [glib_cv___va_copy=no],
746         [])
747 ])
748
749 if test "x$glib_cv_va_copy" = "xyes"; then
750   g_va_copy_func=va_copy
751 else if test "x$glib_cv___va_copy" = "xyes"; then
752   g_va_copy_func=__va_copy
753 fi
754 fi
755
756 if test -n "$g_va_copy_func"; then
757   AC_DEFINE_UNQUOTED(G_VA_COPY,$g_va_copy_func,[A 'va_copy' style function])
758 fi
759
760 AC_CACHE_CHECK([whether va_lists can be copied by value],glib_cv_va_val_copy,[
761         AC_TRY_RUN([
762         #include <stdarg.h>
763         void f (int i, ...) {
764         va_list args1, args2;
765         va_start (args1, i);
766         args2 = args1;
767         if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
768           exit (1);
769         va_end (args1); va_end (args2);
770         }
771         int main() {
772           f (0, 42);
773           return 0;
774         }],
775         [glib_cv_va_val_copy=yes],
776         [glib_cv_va_val_copy=no],
777         [])
778 ])
779
780 if test "x$glib_cv_va_val_copy" = "xno"; then
781   AC_DEFINE(G_VA_COPY_AS_ARRAY,1, ['va_lists' cannot be copies as values])
782 fi
783
784 dnl ***********************
785 dnl *** g_module checks ***
786 dnl ***********************
787 G_MODULE_LIBS=
788 G_MODULE_LIBS_EXTRA=
789 G_MODULE_PLUGIN_LIBS=
790 G_MODULE_LDFLAGS=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
791 dnl G_MODULE_IMPL= don't reset, so cmd-line can override
792 G_MODULE_NEED_USCORE=0
793 G_MODULE_BROKEN_RTLD_GLOBAL=0
794 G_MODULE_HAVE_DLERROR=0
795 dnl *** force native WIN32 shared lib loader 
796 if test -z "$G_MODULE_IMPL"; then
797   case "$host" in
798   *-*-mingw*|*-*-cygwin*) G_MODULE_IMPL=G_MODULE_IMPL_WIN32 ;;
799   esac
800 fi
801 dnl *** dlopen() and dlsym() in system libraries
802 if test -z "$G_MODULE_IMPL"; then
803         AC_CHECK_FUNC(dlopen,
804                       [AC_CHECK_FUNC(dlsym,
805                                      [G_MODULE_IMPL=G_MODULE_IMPL_DL],[])],
806                       [])
807 fi
808 dnl *** load_image (BeOS)
809 if test -z "$G_MODULE_IMPL" && test "x$glib_native_beos" = "xyes"; then
810   AC_CHECK_LIB(root, load_image,
811       [G_MODULE_LIBS="-lbe -lroot -lglib"
812       G_MODULE_LIBS_EXTRA="-L\$(top_builddir_full)/.libs"
813       G_MODULE_PLUGIN_LIBS="-L\$(top_builddir_full)/gmodule/.libs -lgmodule"
814       G_MODULE_IMPL=G_MODULE_IMPL_BEOS],
815       [])
816 fi   
817 dnl *** NSLinkModule (dyld) in system libraries (Darwin)
818 if test -z "$G_MODULE_IMPL"; then
819         AC_CHECK_FUNC(NSLinkModule,
820                       [G_MODULE_IMPL=G_MODULE_IMPL_DYLD
821                        G_MODULE_NEED_USCORE=1],
822                       [])
823 fi
824 dnl *** dlopen() and dlsym() in libdl
825 if test -z "$G_MODULE_IMPL"; then
826         AC_CHECK_LIB(dl, dlopen,
827                      [AC_CHECK_LIB(dl, dlsym,
828                                    [G_MODULE_LIBS=-ldl
829                                    G_MODULE_IMPL=G_MODULE_IMPL_DL],[])],
830                      [])
831 fi
832 dnl *** shl_load() in libdld (HP-UX)
833 if test -z "$G_MODULE_IMPL"; then
834         AC_CHECK_LIB(dld, shl_load,
835                 [G_MODULE_LIBS=-ldld
836                 G_MODULE_IMPL=G_MODULE_IMPL_DLD],
837                 [])
838 fi
839 dnl *** additional checks for G_MODULE_IMPL_DL
840 if test "$G_MODULE_IMPL" = "G_MODULE_IMPL_DL"; then
841         LIBS_orig="$LIBS"
842         LDFLAGS_orig="$LDFLAGS"
843         LIBS="$LIBS $G_MODULE_LIBS"
844         LDFLAGS="$LDFLAGS $G_MODULE_LDFLAGS"
845 dnl *** check for OSF1/5.0 RTLD_GLOBAL brokenness
846         AC_CACHE_CHECK([for RTLD_GLOBAL brokenness],
847                 glib_cv_rtldglobal_broken,[
848                 AC_TRY_RUN([
849                 #include <dlfcn.h>
850                 #ifndef RTLD_GLOBAL
851                 #define RTLD_GLOBAL 0
852                 #endif
853                 #ifndef RTLD_LAZY
854                 #define RTLD_LAZY 0
855                 #endif
856                 int pthread_create;
857                 int main () {
858                 void *handle, *global, *local;
859                 global = &pthread_create;
860                 handle = dlopen ("libpthread.so", RTLD_GLOBAL | RTLD_LAZY);
861                 if (!handle) return 0;
862                 local = dlsym (handle, "pthread_create");
863                 return global == local;
864                 }],
865                         [glib_cv_rtldglobal_broken=no],
866                         [glib_cv_rtldglobal_broken=yes],
867                         [])
868                 rm -f plugin.c plugin.o plugin.lo
869         ])
870         if test "x$glib_cv_rtldglobal_broken" = "xyes"; then
871                 G_MODULE_BROKEN_RTLD_GLOBAL=1
872         else
873                 G_MODULE_BROKEN_RTLD_GLOBAL=0
874         fi
875 dnl *** check whether we need preceeding underscores
876         AC_CACHE_CHECK([for preceeding underscore in symbols],
877                 glib_cv_uscore,[
878                 AC_TRY_RUN([
879                 #include <dlfcn.h>
880                 int glib_underscore_test (void) { return 42; }
881                 int main() {
882                   void *f1 = (void*)0, *f2 = (void*)0, *handle;
883                   handle = dlopen ((void*)0, 0);
884                   if (handle) {
885                     f1 = dlsym (handle, "glib_underscore_test");
886                     f2 = dlsym (handle, "_glib_underscore_test");
887                   } return (!f2 || f1);
888                 }],
889                         [glib_cv_uscore=yes],
890                         [glib_cv_uscore=no],
891                         [])
892                 rm -f plugin.c plugin.$ac_objext plugin.lo
893         ])
894         if test "x$glib_cv_uscore" = "xyes"; then
895                 G_MODULE_NEED_USCORE=1
896         else
897                 G_MODULE_NEED_USCORE=0
898         fi
899
900         LDFLAGS="$LDFLAGS_orig"
901 dnl *** check for having dlerror()
902         AC_CHECK_FUNC(dlerror,
903                 [G_MODULE_HAVE_DLERROR=1],
904                 [G_MODULE_HAVE_DLERROR=0])
905         LIBS="$LIBS_orig"
906 fi
907 dnl *** done, have we got an implementation?
908 if test -z "$G_MODULE_IMPL"; then
909         G_MODULE_IMPL=0
910         G_MODULE_SUPPORTED=false
911 else
912         G_MODULE_SUPPORTED=true
913 fi
914
915 AC_MSG_CHECKING(for the suffix of shared libraries)
916 case "$host_os" in
917   hpux9* | hpux10* | hpux11*)  # taken from ltconfig
918     glib_gmodule_suffix='sl'
919     ;;
920   cygwin* | mingw*)
921     glib_gmodule_suffix='dll'
922     ;;
923   *)
924     glib_gmodule_suffix='so'    
925     ;;
926 esac
927 AC_MSG_RESULT(.$glib_gmodule_suffix)
928  
929 AC_SUBST(G_MODULE_SUPPORTED)
930 AC_SUBST(G_MODULE_IMPL)
931 AC_SUBST(G_MODULE_LIBS)
932 AC_SUBST(G_MODULE_LIBS_EXTRA)
933 AC_SUBST(G_MODULE_PLUGIN_LIBS)
934 AC_SUBST(G_MODULE_LDFLAGS)
935 AC_SUBST(G_MODULE_HAVE_DLERROR)
936 AC_SUBST(G_MODULE_BROKEN_RTLD_GLOBAL)
937 AC_SUBST(G_MODULE_NEED_USCORE)
938 AC_SUBST(GLIB_DEBUG_FLAGS)
939
940 dnl **********************
941 dnl *** g_spawn checks ***
942 dnl **********************
943
944 AC_MSG_CHECKING(for gspawn implementation)
945 case "$host" in
946   *-*-mingw*)
947     GSPAWN=gspawn-win32.lo
948     ;;
949   *)
950     GSPAWN=gspawn.lo
951     ;;    
952 esac
953 AC_MSG_RESULT($GSPAWN)
954 AC_SUBST(GSPAWN)
955
956 dnl *************************
957 dnl *** GIOChannel checks ***
958 dnl *************************
959
960 AC_MSG_CHECKING(for GIOChannel implementation)
961 case "$host" in
962   *-*-mingw*)
963     GIO=giowin32.lo
964     ;;
965   *)
966     GIO=giounix.lo
967     ;;    
968 esac
969 AC_MSG_RESULT($GIO)
970 AC_SUBST(GIO)
971
972 dnl ****************************************
973 dnl *** platform dependent source checks ***
974 dnl ****************************************
975
976 AC_MSG_CHECKING(for platform-dependent source)
977 case "$host" in
978   *-*-cygwin*|*-*-mingw*)
979     PLATFORMDEP=gwin32.lo
980     ;;
981   *)
982     PLATFORMDEP=
983     ;;    
984 esac
985 AC_MSG_RESULT($PLATFORMDEP)
986 AC_SUBST(PLATFORMDEP)
987
988 AC_MSG_CHECKING([whether to compile timeloop])
989 case "$host" in
990   *-*-cygwin*|*-*-mingw*)
991     enable_timeloop=no
992     ;;
993   *)
994     enable_timeloop=yes
995     ;;    
996 esac
997 AC_MSG_RESULT($enable_timeloop)
998 AM_CONDITIONAL(ENABLE_TIMELOOP, test x$enable_timeloop = xyes)
999
1000 AC_MSG_CHECKING([if building for some Win32 platform])
1001 case "$host" in
1002   *-*-mingw*|*-*-cygwin*)
1003     platform_win32=yes
1004     ;;
1005   *)
1006     platform_win32=no
1007     ;;
1008 esac
1009 AC_MSG_RESULT($platform_win32)
1010 AM_CONDITIONAL(PLATFORM_WIN32, test x$platform_win32 = xyes)
1011
1012 dnl ***********************
1013 dnl *** g_thread checks ***
1014 dnl ***********************
1015
1016 AC_ARG_WITH(threads, [  --with-threads=[none/posix/dce/solaris/win32] specify a thread implementation to use],
1017         if test "x$with_threads" = x; then
1018                 want_threads=yes
1019         else
1020                 want_threads=$with_threads
1021         fi,
1022         want_threads=yes)
1023 if test "x$enable_threads" = "xno"; then
1024         want_threads=no
1025 fi
1026
1027 dnl error and warning message
1028 dnl *************************
1029
1030 THREAD_NO_IMPLEMENTATION="You do not have any known thread system on your
1031                 computer. GLib will not have a default thread implementation."
1032
1033 FLAG_DOES_NOT_WORK="I can't find the MACRO to enable thread safety on your
1034                 platform (normally it's "_REENTRANT"). I'll not use any flag on
1035                 compilation now, but then your programs might not work.
1036                 Please provide information on how it is done on your system."
1037
1038 LIBS_NOT_FOUND_1="I can't find the libraries for the thread implementation
1039                 "
1040
1041 LIBS_NOT_FOUND_2=". Please choose another thread implementation or
1042                 provide information on your thread implementation.
1043                 You can also run 'configure --disable-threads' 
1044                 to compile without thread support."
1045
1046 FUNC_NO_GETPWUID_R="the 'g_get_(user_name|real_name|home_dir|tmp_dir)'
1047                 functions will not be MT-safe during their first call because
1048                 there is no working 'getpwuid_r' on your system."
1049
1050 FUNC_NO_LOCALTIME_R="the 'g_date_set_time' function will not be MT-safe
1051                 because there is no 'localtime_r' on your system."
1052
1053 POSIX_NO_YIELD="I can not find a yield functions for your platform. A rather
1054                 crude surrogate will be used. If you happen to know a 
1055                 yield function for your system, please inform the GLib 
1056                 developers."
1057
1058 POSIX_NO_PRIORITIES="I can not find the minimal and maximal priorities for 
1059                 threads on your system. Thus threads can only have the default 
1060                 priority. If you happen to know these main/max
1061                 priorities, please inform the GLib developers."
1062
1063
1064 dnl determination of thread implementation
1065 dnl ***************************************
1066
1067 # have_threads=no   means no thread support
1068 # have_threads=none means no default thread implementation
1069
1070 have_threads=no
1071 if test "x$want_threads" = xyes || test "x$want_threads" = xsolaris; then
1072         case $host in
1073                 *-*-solaris*)
1074                 AC_CHECK_LIB(thread, cond_init, have_threads=solaris)
1075                 ;;
1076         esac
1077 fi
1078 if test "x$want_threads" = xyes || test "x$want_threads" = xposix \
1079                                 || test "x$want_threads" = xdce; then
1080         # -D_POSIX4_DRAFT_SOURCE -D_POSIX4A_DRAFT10_SOURCE is for DG/UX
1081         # -U_OSF_SOURCE is for Digital UNIX 4.0d
1082         GTHREAD_COMPILE_IMPL_DEFINES="-D_POSIX4_DRAFT_SOURCE -D_POSIX4A_DRAFT10_SOURCE -U_OSF_SOURCE"
1083         glib_save_CPPFLAGS="$CPPFLAGS"
1084         CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
1085         if test "x$have_threads" = xno; then
1086                 AC_TRY_COMPILE([#include <pthread.h>],
1087                         [pthread_attr_t attr; pthread_attr_init(&attr);],
1088                         have_threads=posix)
1089         fi
1090         if test "x$have_threads" = xno; then
1091                 AC_TRY_COMPILE([#include <pthread.h>],
1092                         [pthread_attr_t attr; pthread_attr_create(&attr);],
1093                         have_threads=dce)
1094         fi
1095         CPPFLAGS="$glib_save_CPPFLAGS"
1096 fi
1097 if test "x$want_threads" = xyes || test "x$want_threads" = xwin32; then
1098         case $host in
1099                 *-*-mingw*)
1100                 have_threads=win32
1101                 ;;
1102         esac
1103 fi
1104 if test "x$want_threads" = xnone; then
1105         have_threads=none
1106 fi
1107
1108 AC_MSG_CHECKING(for thread implementation)
1109
1110 if test "x$have_threads" = xno && test "x$want_threads" != xno; then
1111         AC_MSG_RESULT(none available)
1112         AC_MSG_WARN($THREAD_NO_IMPLEMENTATION)
1113 else
1114         AC_MSG_RESULT($have_threads)
1115 fi
1116
1117
1118 dnl determination of G_THREAD_CFLAGS
1119 dnl ********************************
1120
1121 G_THREAD_LIBS=
1122 G_THREAD_LIBS_EXTRA=
1123 G_THREAD_CFLAGS=
1124
1125 if test x"$have_threads" != xno; then
1126
1127     G_THREAD_CFLAGS="-D_REENTRANT" # good default guess
1128
1129     case $host in
1130         *-aix*)
1131                 G_THREAD_CFLAGS="$G_THREAD_CFLAGS -D_THREAD_SAFE"
1132                 if test x"$GCC" = xyes; then
1133                         # GCC 3.0 and above needs -pthread
1134                         # GCC 2.x and below needs -mthreads
1135                         AC_TRY_COMPILE(,[#if __GNUC__ <= 2
1136                                         bail out here
1137                                         #endif],
1138                                 G_THREAD_CFLAGS="$G_THREAD_CFLAGS -pthread", 
1139                                 G_THREAD_CFLAGS="$G_THREAD_CFLAGS -mthreads")
1140                 fi
1141                 ;;
1142         *-freebsd2.2*)
1143                 G_THREAD_CFLAGS="$G_THREAD_CFLAGS -D_THREAD_SAFE"
1144
1145                 # FreeBSD 2.2.x shiped with gcc 2.7.2.x, which doesn't support
1146                 # -mthreads flag.
1147                 ;;      
1148         *-sysv5uw7*)  # UnixWare 7 
1149                 if test "$GCC" != "yes"; then
1150                         G_THREAD_CFLAGS="$G_THREAD_CFLAGS -Kthread"
1151                 else    
1152                         G_THREAD_CFLAGS="$G_THREAD_CFLAGS -pthread"
1153                 fi      
1154                 ;;
1155         *-dg-dgux*)  # DG/UX
1156                 G_THREAD_CFLAGS="$G_THREAD_CFLAGS -D_POSIX4A_DRAFT10_SOURCE"
1157     esac
1158
1159     # if we are not finding the localtime_r function, then we probably are
1160     # not using the proper multithread flag
1161
1162     glib_save_CPPFLAGS="$CPPFLAGS"
1163     CPPFLAGS="$CPPFLAGS $G_THREAD_CFLAGS"
1164
1165     # First we test, whether localtime_r is declared in time.h
1166     # directly. Then we test whether a macro localtime_r exists, in
1167     # which case localtime_r in the test program is replaced and thus
1168     # if we still find localtime_r in the output, it is not defined as 
1169     # a macro.
1170
1171     AC_EGREP_CPP([[^a-zA-Z1-9_]localtime_r[^a-zA-Z1-9_]], [#include <time.h>], ,
1172       [AC_EGREP_CPP([[^a-zA-Z1-9_]localtime_r[^a-zA-Z1-9_]], [#include <time.h> 
1173                                                            localtime_r(a,b)],
1174                    AC_MSG_WARN($FLAG_DOES_NOT_WORK))])
1175
1176     CPPFLAGS="$glib_save_CPPFLAGS"
1177
1178     AC_MSG_CHECKING(thread related cflags)
1179     AC_MSG_RESULT($G_THREAD_CFLAGS)
1180     CFLAGS="$CFLAGS $G_THREAD_CFLAGS"
1181 fi
1182
1183 dnl determination of G_THREAD_LIBS
1184 dnl ******************************
1185
1186 mutex_has_default=no
1187 case $have_threads in
1188         posix|dce)
1189            glib_save_CPPFLAGS="$CPPFLAGS"
1190            CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
1191            G_THREAD_LIBS=error
1192            glib_save_LIBS="$LIBS"
1193            case $host in
1194              *-sysv5uw7*) # UnixWare 7 
1195                 if test "$GCC" != "yes"; then
1196                         G_THREAD_LIBS="-Kthread"
1197                 else    
1198                         G_THREAD_LIBS="-pthread"
1199                 fi      
1200                 ;;
1201              *-*-openbsd* | *-*-freebsd*) 
1202                 # FreeBSD and OpenBSD want us to use the -pthread flag 
1203                 # instead of linking to -lc_r and libtool enforces that.
1204                 G_THREAD_LIBS="-pthread"
1205                 ;;
1206              *)
1207                 for thread_lib in "" pthread pthread32 pthreads thread dce; do
1208                         if test x"$thread_lib" = x; then
1209                                 add_thread_lib=""
1210                                 IN=""
1211                         else
1212                                 add_thread_lib="-l$thread_lib"
1213                                 IN=" in -l$thread_lib"
1214                         fi
1215                         if test x"$have_threads" = xposix; then
1216                                 defattr=0
1217                         else
1218                                 defattr=pthread_attr_default
1219                         fi
1220                         
1221                         LIBS="$glib_save_LIBS $add_thread_lib"
1222                         
1223                         AC_MSG_CHECKING(for pthread_create/pthread_join$IN)
1224                         AC_TRY_RUN([#include <pthread.h> 
1225                                 int check_me = 0;
1226                                 void* func(void* data) {check_me = 42;}
1227                                 main()
1228                                 { pthread_t t; 
1229                                   void *ret;
1230                                   pthread_create (&t, $defattr, func, 0);
1231                                   pthread_join (t, &ret);
1232                                   exit (check_me != 42);
1233                                 }],
1234                                 [AC_MSG_RESULT(yes)
1235                                 G_THREAD_LIBS="$add_thread_lib"
1236                                 break],
1237                                 [AC_MSG_RESULT(no)])
1238                 done
1239                 ;;
1240            esac         
1241            if test "x$G_THREAD_LIBS" = xerror; then
1242              AC_MSG_ERROR($LIBS_NOT_FOUND_1$have_threads$LIBS_NOT_FOUND_2)
1243            fi
1244            for thread_lib in "" rt rte; do
1245              if test x"$thread_lib" = x; then
1246                add_thread_lib=""
1247                IN=""
1248              else
1249                add_thread_lib="-l$thread_lib"
1250                IN=" in -l$thread_lib"
1251              fi
1252              LIBS="$glib_save_LIBS $add_thread_lib"
1253                         
1254              AC_MSG_CHECKING(for sched_get_priority_min$IN)
1255              AC_TRY_RUN([#include <sched.h>
1256                          #include <errno.h>
1257                          int main() {
1258                          errno = 0;
1259                          return sched_get_priority_min(SCHED_OTHER)==-1
1260                                 && errno != 0;}],
1261                         [AC_MSG_RESULT(yes)
1262                          G_THREAD_LIBS="$G_THREAD_LIBS $add_thread_lib"
1263                          posix_priority_min="sched_get_priority_min(SCHED_OTHER)"
1264                          posix_priority_max="sched_get_priority_max(SCHED_OTHER)"
1265                          break],
1266                         [AC_MSG_RESULT(no)])
1267            done
1268            LIBS="$glib_save_LIBS"
1269            mutex_has_default=yes
1270            mutex_default_type='pthread_mutex_t'
1271            mutex_default_init='PTHREAD_MUTEX_INITIALIZER'
1272            mutex_header_file='pthread.h'
1273            if test "x$have_threads" = "xposix"; then
1274              g_threads_impl="POSIX"
1275            else
1276              g_threads_impl="DCE"
1277              have_threads="posix"
1278            fi
1279            AC_SUBST(GTHREAD_COMPILE_IMPL_DEFINES)
1280            CPPFLAGS="$glib_save_CPPFLAGS"
1281            ;;
1282         solaris)
1283            G_THREAD_LIBS=error
1284            AC_CHECK_LIB(thread, cond_init, G_THREAD_LIBS="-lthread")
1285            mutex_has_default=yes
1286            mutex_default_type='mutex_t'
1287            mutex_default_init="DEFAULTMUTEX"
1288            mutex_header_file='thread.h'
1289            g_threads_impl="SOLARIS"
1290            ;;
1291         win32)
1292            g_threads_impl="WIN32"
1293            G_THREAD_LIBS=""
1294            ;;
1295         none|no)
1296            g_threads_impl="NONE"
1297            ;;
1298         *)
1299            g_threads_impl="NONE"
1300            G_THREAD_LIBS=error
1301            ;;
1302 esac
1303
1304 if test "x$G_THREAD_LIBS" = xerror; then
1305         AC_MSG_ERROR($LIBS_NOT_FOUND_1$have_threads$LIBS_NOT_FOUND_2)
1306 fi
1307
1308 case $host in
1309   *-*-beos*)
1310     G_THREAD_LIBS="-lbe -lroot -lglib "
1311     G_THREAD_LIBS_EXTRA="-L\$(top_builddir_full)/.libs"
1312     ;;
1313   *)
1314     ;;
1315 esac
1316
1317 AC_MSG_CHECKING(thread related libraries)
1318 AC_MSG_RESULT($G_THREAD_LIBS)
1319
1320 dnl check for mt safe function variants and some posix functions
1321 dnl ************************************************************
1322
1323 if test x"$have_threads" != xno; then
1324         glib_save_LIBS="$LIBS"
1325         # we are not doing the following for now, as this might require glib 
1326         # to always be linked with the thread libs on some platforms. 
1327         # LIBS="$LIBS $G_THREAD_LIBS"
1328         AC_CHECK_FUNCS(localtime_r)
1329         if test "$ac_cv_header_pwd_h" = "yes"; then
1330                 AC_CACHE_CHECK([for posix getpwuid_r],
1331                         ac_cv_func_posix_getpwuid_r,
1332                         [AC_TRY_RUN([#include <errno.h>
1333                                 #include <pwd.h>
1334                                 int main () { char buffer[10000];
1335                                 struct passwd pwd, *pwptr = &pwd;
1336                                 int error;
1337                                 errno = 0;
1338                                 error = getpwuid_r (0, &pwd, buffer, 
1339                                         sizeof (buffer), &pwptr);
1340                                 return (error < 0 && errno == ENOSYS) 
1341                                         || error == ENOSYS; }],
1342                                 [ac_cv_func_posix_getpwuid_r=yes],
1343                                 [ac_cv_func_posix_getpwuid_r=no])])
1344                 if test "$ac_cv_func_posix_getpwuid_r" = yes; then
1345                         AC_DEFINE(HAVE_POSIX_GETPWUID_R,1,
1346                                 [Have POSIX function getpwuid_r])
1347                 else
1348                         AC_CACHE_CHECK([for nonposix getpwuid_r],
1349                                 ac_cv_func_nonposix_getpwuid_r,
1350                                 [AC_TRY_LINK([#include <pwd.h>],
1351                                         [char buffer[10000];
1352                                         struct passwd pwd;
1353                                         getpwuid_r (0, &pwd, buffer, 
1354                                                         sizeof (buffer));],
1355                                         [ac_cv_func_nonposix_getpwuid_r=yes],
1356                                         [ac_cv_func_nonposix_getpwuid_r=no])])
1357                         if test "$ac_cv_func_nonposix_getpwuid_r" = yes; then
1358                                 AC_DEFINE(HAVE_NONPOSIX_GETPWUID_R,1,
1359                                         [Have non-POSIX function getpwuid_r])
1360                         fi
1361                 fi
1362         fi
1363         LIBS="$LIBS $G_THREAD_LIBS"
1364         if test x"$have_threads" = xposix; then
1365                 glib_save_CPPFLAGS="$CPPFLAGS"
1366                 CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
1367                 dnl we might grow sizeof(pthread_t) later on, so use a dummy name here
1368                 GLIB_SIZEOF([#include <pthread.h>], pthread_t, system_thread)
1369                 # This is not AC_CHECK_FUNC to also work with function
1370                 # name mangling in header files.
1371                 AC_MSG_CHECKING(for pthread_attr_setstacksize)
1372                 AC_TRY_LINK([#include <pthread.h>],
1373                         [pthread_attr_t t; pthread_attr_setstacksize(&t,0)],
1374                         [AC_MSG_RESULT(yes)
1375                         AC_DEFINE(HAVE_PTHREAD_ATTR_SETSTACKSIZE,1,
1376                                   [Have function pthread_attr_setstacksize])],
1377                         [AC_MSG_RESULT(no)])
1378                 AC_MSG_CHECKING(for minimal/maximal thread priority)
1379                 if test x"$posix_priority_min" = xnone; then
1380                         AC_EGREP_CPP(PX_PRIO_MIN,[#include <pthread.h>
1381                                 PX_PRIO_MIN],,[
1382                                 posix_priority_min=PX_PRIO_MIN
1383                                 posix_priority_max=PX_PRIO_MAX])
1384                 fi
1385                 if test x"$posix_priority_min" = xnone; then
1386                         AC_EGREP_CPP(PRI_OTHER_MIN,[#include <pthread.h>
1387                                 PRI_OTHER_MIN],,[
1388                                 posix_priority_min=PRI_OTHER_MIN        
1389                                 posix_priority_max=PRI_OTHER_MAX])
1390                 fi
1391                 if test x"$posix_priority_min" = x; then
1392                         AC_MSG_RESULT(none found)
1393                         AC_MSG_WARN($POSIX_NO_PRIORITIES)
1394                         posix_priority_min=-1
1395                         posix_priority_max=-1
1396                 else
1397                         AC_MSG_RESULT($posix_priority_min/$posix_priority_max)
1398                         AC_DEFINE_UNQUOTED(POSIX_MIN_PRIORITY,$posix_priority_min,[Minimum POSIX RT priority])
1399                         AC_DEFINE_UNQUOTED(POSIX_MAX_PRIORITY,$posix_priority_max,[Maximum POSIX RT priority])
1400                 fi
1401                 posix_yield_func=none
1402                 AC_MSG_CHECKING(for posix yield function)
1403                 for yield_func in sched_yield pthread_yield_np pthread_yield \
1404                                                         thr_yield; do
1405                         AC_TRY_LINK([#include <pthread.h>],
1406                                 [$yield_func()],
1407                                 [posix_yield_func="$yield_func"
1408                                 break])
1409                 done            
1410                 if test x"$posix_yield_func" = xnone; then
1411                         AC_MSG_RESULT(none found)
1412                         AC_MSG_WARN($POSIX_NO_YIELD)
1413                         posix_yield_func="g_usleep(1000)"
1414                 else
1415                         AC_MSG_RESULT($posix_yield_func)
1416                         posix_yield_func="$posix_yield_func()"
1417                 fi
1418                 AC_DEFINE_UNQUOTED(POSIX_YIELD_FUNC,$posix_yield_func,[The POSIX RT yield function])
1419                 CPPFLAGS="$glib_save_CPPFLAGS"
1420
1421                 AC_MSG_CHECKING(whether to use the PID niceness surrogate for thread priorities)
1422                 AC_TRY_RUN([#include <pthread.h> 
1423                         #include <sys/types.h>
1424                         #include <unistd.h>
1425                         pid_t other_pid = 0;
1426
1427                         void* func(void* data) {other_pid = getpid();}
1428                         main()
1429                         { pthread_t t; 
1430                           void *ret;
1431                           pthread_create (&t, $defattr, func, NULL);
1432                           pthread_join (t, &ret);
1433                           exit (getpid()==other_pid || 
1434                                 $posix_priority_min != $posix_priority_max);
1435                         }],
1436                         [AC_MSG_RESULT(yes)
1437                           AC_DEFINE(G_THREAD_USE_PID_SURROGATE, 1, [whether to use the PID niceness surrogate for thread priorities])
1438                         ],
1439                         [AC_MSG_RESULT(no)])
1440         elif test x"$have_threads" = xwin32; then
1441                 # It's a pointer to a private struct
1442                 GLIB_SIZEOF(,struct _GThreadData *, system_thread)
1443         elif test x"$have_threads" = xsolaris; then 
1444                 GLIB_SIZEOF([#include <thread.h>], thread_t, system_thread)
1445         fi
1446
1447         LIBS="$glib_save_LIBS"
1448
1449         # now spit out all the warnings.
1450         if test "$ac_cv_func_posix_getpwuid_r" != "yes" && 
1451            test "$ac_cv_func_nonposix_getpwuid_r" != "yes"; then
1452                 AC_MSG_WARN($FUNC_NO_GETPWUID_R)
1453         fi
1454         if test "$ac_cv_func_localtime_r" != "yes"; then
1455                 AC_MSG_WARN($FUNC_NO_LOCALTIME_R)
1456         fi
1457 fi      
1458
1459 if test x"$glib_cv_sizeof_system_thread" = x; then
1460    # use a pointer as a fallback.
1461    GLIB_SIZEOF(,void *, system_thread)
1462 fi
1463
1464 AC_DEFINE_UNQUOTED(G_THREAD_SOURCE,"gthread-$have_threads.c",
1465                    [Source file containing theread implementation])
1466 AC_SUBST(G_THREAD_CFLAGS)
1467 AC_SUBST(G_THREAD_LIBS)
1468 AC_SUBST(G_THREAD_LIBS_EXTRA)
1469
1470 dnl **********************************************
1471 dnl *** GDefaultMutex setup and initialization ***
1472 dnl **********************************************
1473 dnl
1474 dnl if mutex_has_default = yes, we also got
1475 dnl mutex_default_type, mutex_default_init and mutex_header_file
1476 GLIB_IF_VAR_EQ(mutex_has_default, yes,
1477         glib_save_CPPFLAGS="$CPPFLAGS"
1478         glib_save_LIBS="$LIBS"
1479         LIBS="$LIBS $G_THREAD_LIBS"
1480         CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
1481         GLIB_SIZEOF([#include <$mutex_header_file>],
1482                     $mutex_default_type,
1483                     gmutex,
1484                     )
1485         GLIB_BYTE_CONTENTS([#include <$mutex_header_file>],
1486                            $mutex_default_type,
1487                            gmutex,
1488                            $glib_cv_sizeof_gmutex,
1489                            $mutex_default_init)
1490         if test x"$glib_cv_byte_contents_gmutex" = xno; then
1491                 mutex_has_default=no
1492         fi
1493         CPPFLAGS="$glib_save_CPPFLAGS"
1494         LIBS="$glib_save_LIBS"
1495         ,
1496 )
1497
1498
1499 dnl ****************************************
1500 dnl *** GLib POLL* compatibility defines ***
1501 dnl ****************************************
1502 GLIB_SYSDEFS(
1503 [#include <sys/types.h>
1504 #include <sys/poll.h>],
1505         POLLIN:1 POLLOUT:4 POLLPRI:2 POLLERR:8 POLLHUP:16 POLLNVAL:32,
1506         glibconfig-sysdefs.h,
1507         =)
1508
1509 dnl **********************
1510 dnl *** Win32 API libs ***
1511 dnl **********************
1512
1513 case $host in
1514   *-*-cygwin*)
1515         G_LIBS_EXTRA="-luser32 -lwsock32 -lkernel32"
1516     ;;
1517   *-*-mingw*)
1518         G_LIBS_EXTRA="-lwsock32"
1519     ;;
1520   *)
1521         G_LIBS_EXTRA=""
1522     ;;
1523 esac
1524 AC_SUBST(G_LIBS_EXTRA)
1525
1526 dnl ***********************
1527 dnl *** Tests for iconv ***
1528 dnl ***********************
1529
1530 AC_ARG_WITH(libiconv, [  --with-libiconv=[no/gnu/native] use the libiconv library ],,with_libiconv=maybe)
1531
1532 found_iconv=no
1533 case $with_libiconv in
1534   maybe)
1535     # Check in the C library first
1536     AC_CHECK_FUNC(iconv_open, with_libiconv=no; found_iconv=yes)
1537     # Check if we have GNU libiconv
1538     if test $found_iconv = "no"; then
1539       AC_CHECK_LIB(iconv, libiconv_open, with_libiconv=gnu; found_iconv=yes)
1540     fi
1541     # Check if we have a iconv in -liconv, possibly from vendor
1542     if test $found_iconv = "no"; then
1543       AC_CHECK_LIB(iconv, iconv_open, with_libiconv=native; found_iconv=yes)
1544     fi
1545     ;;
1546   no)
1547     AC_CHECK_FUNC(iconv_open, with_libiconv=no; found_iconv=yes)
1548     ;;
1549   gnu|yes)
1550     AC_CHECK_LIB(iconv, libiconv_open, with_libiconv=gnu; found_iconv=yes)
1551     ;;
1552   native)
1553     AC_CHECK_LIB(iconv, iconv_open, with_libiconv=native; found_iconv=yes)
1554     ;;
1555 esac
1556
1557 if test "x$found_iconv" = "xno" ; then
1558    AC_MSG_ERROR([*** No iconv() implementation found in C library or libiconv])
1559 fi
1560
1561 case $with_libiconv in
1562   gnu)
1563     ICONV_LIBS="-liconv"
1564     AC_DEFINE(USE_LIBICONV_GNU, [Using GNU libiconv])
1565     ;;
1566   native)
1567     ICONV_LIBS="-liconv"
1568     AC_DEFINE(USE_LIBICONV_NATIVE, [Using a native implementation of iconv in a separate library])
1569     ;;
1570 esac
1571 AC_SUBST(ICONV_LIBS)
1572
1573 dnl If the system doesn't define EILSEQ, we should define EILSEQ ourselves
1574 dnl since we need it for g_iconv()
1575
1576 AC_MSG_CHECKING([for EILSEQ])
1577 AC_TRY_COMPILE([
1578 #include <errno.h>
1579 ],
1580 [
1581 int error = EILSEQ;
1582 ], have_eilseq=yes, have_eilseq=no);
1583 AC_MSG_RESULT($have_eilseq)
1584
1585 dnl ******************************************************************
1586 dnl *** Look for glib-genmarshal in PATH if we are cross-compiling ***
1587 dnl ******************************************************************
1588
1589 AM_CONDITIONAL(CROSS_COMPILING, test $build != $host)
1590
1591 if test $CROSS_COMPILING; then
1592   AC_PATH_PROG(GLIB_GENMARSHAL, glib-genmarshal, no)
1593   if test x$GLIB_GENMARSHAL = xno; then
1594     AC_MSG_ERROR(Could not find a glib-genmarshal in your PATH)
1595   fi
1596 fi
1597
1598 dnl **************************
1599 dnl *** Checks for gtk-doc ***
1600 dnl **************************
1601
1602 AC_ARG_WITH(html-dir, [  --with-html-dir=PATH    path to installed docs])
1603
1604 if test "x$with_html_dir" = "x" ; then
1605   HTML_DIR='${datadir}/gtk-doc/html'
1606 else
1607   HTML_DIR=$with_html_dir
1608 fi
1609
1610 AC_SUBST(HTML_DIR)
1611
1612 AC_CHECK_PROG(GTKDOC, gtkdoc-mkdb, true, false)
1613
1614 gtk_doc_min_version=0.6
1615 if $GTKDOC ; then 
1616     gtk_doc_version=`gtkdoc-mkdb --version`
1617     AC_MSG_CHECKING([gtk-doc version ($gtk_doc_version) >= $gtk_doc_min_version])
1618     if perl <<EOF ; then
1619       exit (("$gtk_doc_version" =~ /^[[0-9]]+\.[[0-9]]+$/) &&
1620             ("$gtk_doc_version" >= "$gtk_doc_min_version") ? 0 : 1);
1621 EOF
1622       AC_MSG_RESULT(yes)
1623    else
1624       AC_MSG_RESULT(no)
1625       GTKDOC=false
1626    fi
1627 fi
1628
1629 AM_CONDITIONAL(HAVE_GTK_DOC, $GTKDOC)
1630 AC_SUBST(HAVE_GTK_DOC)
1631
1632 AC_CHECK_PROG(DB2HTML, db2html, true, false)
1633 AM_CONDITIONAL(HAVE_DOCBOOK, $DB2HTML)
1634
1635 dnl Let people disable the gtk-doc stuff.
1636 AC_ARG_ENABLE(gtk-doc, [  --enable-gtk-doc        use gtk-doc to build documentation [default=auto]], enable_gtk_doc="$enableval", enable_gtk_doc=no)
1637
1638 if test x$enable_gtk_doc = xyes ; then
1639   if test x$GTKDOC = xtrue ; then
1640     enable_gtk_doc=yes
1641   else
1642     enable_gtk_doc=no 
1643   fi
1644 fi
1645
1646 dnl NOTE: We need to use a separate automake conditional for this
1647 dnl       to make this work with the tarballs.
1648 AM_CONDITIONAL(ENABLE_GTK_DOC, test x$enable_gtk_doc = xyes)
1649
1650 dnl ******************************
1651 dnl *** output the whole stuff ***
1652 dnl ******************************
1653
1654 AC_OUTPUT_COMMANDS([
1655
1656 ## Generate `glibconfig.h' in two cases
1657 ## 1. `config.status' is run either explicitly, or via configure.
1658 ##     Esp. not when it is run in `Makefile' to generate makefiles and
1659 ##     config.h
1660 ## 2. CONFIG_OTHER is set explicitly
1661 ##
1662 ## Case 1 is difficult.  We know that `automake' sets one of
1663 ## CONFIG_FILES or CONFIG_HEADERS to empty.  This heuristic works
1664 ## only when AM_CONFIG_HEADER is set, however.
1665
1666 if test -n "${CONFIG_FILES}" && test -n "${CONFIG_HEADERS}"; then
1667   # Both CONFIG_FILES and CONFIG_HEADERS are non-empty ==> Case 1
1668   CONFIG_OTHER=${CONFIG_OTHER:-glibconfig.h}
1669 fi
1670 case "$CONFIG_OTHER" in
1671 *glibconfig.h*)
1672         echo creating glibconfig.h
1673         outfile=glibconfig.h-tmp
1674         cat > $outfile <<\_______EOF
1675 /* glibconfig.h
1676  *
1677  * This is a generated file.  Please modify 'configure.in'
1678  */
1679
1680 #ifndef __G_LIBCONFIG_H__
1681 #define __G_LIBCONFIG_H__
1682
1683 #include <glib/gmacros.h>
1684
1685 _______EOF
1686
1687         if test x$glib_limits_h = xyes; then
1688           echo '#include <limits.h>' >> $outfile
1689         fi
1690         if test x$glib_float_h = xyes; then
1691           echo '#include <float.h>' >> $outfile
1692         fi
1693         if test x$glib_values_h = xyes; then
1694           echo '#include <values.h>' >> $outfile
1695         fi
1696         if test "$glib_header_alloca_h" = "yes"; then
1697           echo '#define GLIB_HAVE_ALLOCA_H' >> $outfile
1698         fi
1699         if test x$glib_sys_poll_h = xyes; then
1700           echo '#define GLIB_HAVE_SYS_POLL_H' >> $outfile
1701         fi
1702
1703         cat >> $outfile <<_______EOF
1704
1705 G_BEGIN_DECLS
1706
1707 #define G_MINFLOAT      $glib_mf
1708 #define G_MAXFLOAT      $glib_Mf
1709 #define G_MINDOUBLE     $glib_md
1710 #define G_MAXDOUBLE     $glib_Md
1711 #define G_MINSHORT      $glib_ms
1712 #define G_MAXSHORT      $glib_Ms
1713 #define G_MAXUSHORT     $glib_Mus
1714 #define G_MININT        $glib_mi
1715 #define G_MAXINT        $glib_Mi
1716 #define G_MAXUINT       $glib_Mui
1717 #define G_MINLONG       $glib_ml
1718 #define G_MAXLONG       $glib_Ml
1719 #define G_MAXULONG      $glib_Mul
1720
1721 #define G_MININT64      ((gint64)  0x8000000000000000)
1722 #define G_MAXINT64      ((gint64)  0x7fffffffffffffff)
1723 #define G_MAXUINT64     ((guint64) 0xffffffffffffffff)
1724
1725 _______EOF
1726
1727
1728         ### this should always be true in a modern C/C++ compiler
1729         cat >>$outfile <<_______EOF
1730 typedef signed char gint8;
1731 typedef unsigned char guint8;
1732 _______EOF
1733
1734
1735         if test -n "$gint16"; then
1736           cat >>$outfile <<_______EOF
1737 typedef signed $gint16 gint16;
1738 typedef unsigned $gint16 guint16;
1739 #define G_GINT16_FORMAT $gint16_format
1740 #define G_GUINT16_FORMAT $guint16_format
1741 _______EOF
1742         fi
1743
1744
1745         if test -n "$gint32"; then
1746           cat >>$outfile <<_______EOF
1747 typedef signed $gint32 gint32;
1748 typedef unsigned $gint32 guint32;
1749 #define G_GINT32_FORMAT $gint32_format
1750 #define G_GUINT32_FORMAT $guint32_format
1751 _______EOF
1752         fi
1753
1754         cat >>$outfile <<_______EOF
1755 #define G_HAVE_GINT64 1          /* deprecated, always true */
1756
1757 ${glib_extension}typedef signed $gint64 gint64;
1758 ${glib_extension}typedef unsigned $gint64 guint64;
1759
1760 #define G_GINT64_CONSTANT(val)  $gint64_constant
1761 _______EOF
1762
1763         if test x$gint64_format != x ; then
1764           cat >>$outfile <<_______EOF
1765 #define G_GINT64_FORMAT $gint64_format
1766 #define G_GUINT64_FORMAT $guint64_format
1767 _______EOF
1768         else
1769           cat >>$outfile <<_______EOF
1770 #undef G_GINT64_FORMAT
1771 #undef G_GUINT64_FORMAT
1772 _______EOF
1773         fi           
1774
1775         cat >>$outfile <<_______EOF
1776
1777 #define GLIB_SIZEOF_VOID_P $glib_void_p
1778 #define GLIB_SIZEOF_LONG   $glib_long
1779 #define GLIB_SIZEOF_SIZE_T $glib_size_t
1780
1781 _______EOF
1782
1783         case x$glib_size_t in
1784         x2) echo "typedef gint16  gssize;" >> $outfile
1785             echo "typedef guint16 gsize;"  >> $outfile
1786             ;;
1787         x4) echo "typedef gint32  gssize;" >> $outfile
1788             echo "typedef guint32 gsize;"  >> $outfile
1789             ;;
1790         x8) echo "typedef gint64  gssize;" >> $outfile
1791             echo "typedef guint64 gsize;"  >> $outfile
1792             ;;
1793         *)  echo "#error size of size_t is unknown" >> $outfile
1794             ;;
1795         esac
1796
1797         if test -z "$glib_unknown_void_p"; then
1798           cat >>$outfile <<_______EOF
1799
1800 #define GPOINTER_TO_INT(p)      ((gint)  ${glib_gpi_cast} (p))
1801 #define GPOINTER_TO_UINT(p)     ((guint) ${glib_gpui_cast} (p))
1802
1803 #define GINT_TO_POINTER(i)      ((gpointer) ${glib_gpi_cast} (i))
1804 #define GUINT_TO_POINTER(u)     ((gpointer) ${glib_gpui_cast} (u))
1805 _______EOF
1806         else
1807           echo '#error SIZEOF_VOID_P unknown - This should never happen' >>$outfile
1808         fi
1809
1810
1811
1812         cat >>$outfile <<_______EOF
1813 $glib_atexit
1814 $glib_memmove
1815 $glib_defines
1816 $glib_os
1817
1818 $glib_vacopy
1819
1820 #ifdef  __cplusplus
1821 #define G_HAVE_INLINE   1
1822 #else   /* !__cplusplus */
1823 $glib_inline
1824 #endif  /* !__cplusplus */
1825
1826 _______EOF
1827
1828         if test x$g_have_iso_c_varargs = xyes ; then
1829                 cat >>$outfile <<_______EOF
1830 #ifndef __cplusplus
1831 # define G_HAVE_ISO_VARARGS 1
1832 #endif
1833 _______EOF
1834         fi
1835         if test x$g_have_iso_cxx_varargs = xyes ; then
1836                 cat >>$outfile <<_______EOF
1837 #ifdef __cplusplus
1838 # define G_HAVE_ISO_VARARGS 1
1839 #endif
1840 _______EOF
1841         fi
1842         if test x$g_have_gnuc_varargs = xyes ; then
1843                 cat >>$outfile <<_______EOF
1844
1845 /* gcc-2.95.x supports both gnu style and ISO varargs, but if -ansi
1846  * is passed ISO vararg support is turned off, and there is no work
1847  * around to turn it on, so we unconditionally turn it off.
1848  */
1849 #if __GNUC__ == 2 && __GNUC_MINOR__ == 95
1850 #  undef G_HAVE_ISO_VARARGS
1851 #endif
1852
1853 #define G_HAVE_GNUC_VARARGS 1
1854 _______EOF
1855         fi
1856
1857         case x$g_stack_grows in
1858         xyes) echo "#define G_HAVE_GROWING_STACK 1" >>$outfile ;;
1859         *)    echo "#define G_HAVE_GROWING_STACK 0" >>$outfile ;;
1860         esac
1861
1862
1863         echo >>$outfile
1864         if test x$g_have_eilseq = xno; then
1865                 cat >>$outfile <<_______EOF
1866 #ifndef EILSEQ
1867 /* On some systems, like SunOS and NetBSD, EILSEQ is not defined.
1868  * The correspondence between this and the corresponding definition
1869  * in libiconv is essential.
1870  */
1871 #  define EILSEQ ENOENT
1872 #endif
1873 _______EOF
1874
1875         fi
1876
1877         echo >>$outfile
1878         if test x$g_mutex_has_default = xyes; then
1879                 cat >>$outfile <<_______EOF
1880 $g_enable_threads_def G_THREADS_ENABLED
1881 #define G_THREADS_IMPL_$g_threads_impl_def
1882 typedef struct _GStaticMutex GStaticMutex;
1883 struct _GStaticMutex
1884 {
1885   struct _GMutex *runtime_mutex;
1886   union {
1887     char   pad[$g_mutex_sizeof];
1888     double dummy_double;
1889     void  *dummy_pointer;
1890     long   dummy_long;
1891   } static_mutex;
1892 };
1893 #define G_STATIC_MUTEX_INIT     { NULL, { { $g_mutex_contents} } }
1894 #define g_static_mutex_get_mutex(mutex) \
1895   (g_thread_use_default_impl ? ((GMutex*) &((mutex)->static_mutex)) : \
1896    g_static_mutex_get_mutex_impl (&((mutex)->runtime_mutex)))
1897 _______EOF
1898         else
1899                 cat >>$outfile <<_______EOF
1900 $g_enable_threads_def G_THREADS_ENABLED
1901 #define G_THREADS_IMPL_$g_threads_impl_def
1902 typedef struct _GMutex* GStaticMutex;
1903 #define G_STATIC_MUTEX_INIT NULL
1904 #define g_static_mutex_get_mutex(mutex) (g_static_mutex_get_mutex_impl (mutex))
1905 _______EOF
1906         fi
1907
1908         cat >>$outfile <<_______EOF
1909 /* This represents a system thread as used by the implementation. An
1910  * alien implementaion, as loaded by g_thread_init can only count on
1911  * "sizeof (gpointer)" bytes to store their info. We however need more
1912  * for some of our native implementations. */
1913 typedef union _GSystemThread GSystemThread;
1914 union _GSystemThread
1915 {
1916   char   data[$g_system_thread_sizeof];
1917   double dummy_double;
1918   void  *dummy_pointer;
1919   long   dummy_long;
1920 };
1921 _______EOF
1922
1923         echo >>$outfile
1924         g_bit_sizes="16 32 64"
1925         for bits in $g_bit_sizes; do
1926           cat >>$outfile <<_______EOF
1927 #define GINT${bits}_TO_${g_bs_native}(val)      ((gint${bits}) (val))
1928 #define GUINT${bits}_TO_${g_bs_native}(val)     ((guint${bits}) (val))
1929 #define GINT${bits}_TO_${g_bs_alien}(val)       ((gint${bits}) GUINT${bits}_SWAP_LE_BE (val))
1930 #define GUINT${bits}_TO_${g_bs_alien}(val)      (GUINT${bits}_SWAP_LE_BE (val))
1931 _______EOF
1932         done
1933
1934         cat >>$outfile <<_______EOF
1935 #define GLONG_TO_LE(val)        ((glong) GINT${glongbits}_TO_LE (val))
1936 #define GULONG_TO_LE(val)       ((gulong) GUINT${glongbits}_TO_LE (val))
1937 #define GLONG_TO_BE(val)        ((glong) GINT${glongbits}_TO_BE (val))
1938 #define GULONG_TO_BE(val)       ((gulong) GUINT${glongbits}_TO_BE (val))
1939 #define GINT_TO_LE(val)         ((gint) GINT${gintbits}_TO_LE (val))
1940 #define GUINT_TO_LE(val)        ((guint) GUINT${gintbits}_TO_LE (val))
1941 #define GINT_TO_BE(val)         ((gint) GINT${gintbits}_TO_BE (val))
1942 #define GUINT_TO_BE(val)        ((guint) GUINT${gintbits}_TO_BE (val))
1943 #define G_BYTE_ORDER $g_byte_order
1944
1945 _______EOF
1946
1947         if test -r glibconfig-sysdefs.h; then
1948           cat glibconfig-sysdefs.h >>$outfile
1949         fi
1950
1951         cat >>$outfile <<_______EOF
1952
1953 #define G_MODULE_SUFFIX "$g_module_suffix"
1954
1955 G_END_DECLS
1956
1957 #endif /* GLIBCONFIG_H */
1958 _______EOF
1959
1960
1961         if cmp -s $outfile glibconfig.h; then
1962           echo glibconfig.h is unchanged
1963           rm -f $outfile
1964         else
1965           mv $outfile glibconfig.h
1966         fi ;;
1967 esac
1968 ],[
1969
1970 # Note that if two cases are the same, case goes with the first one.
1971 # Note also that this is inside an AC_OUTPUT_COMMAND.  We do not depend
1972 # on variable expansion in case labels.  Look at the generated config.status
1973 # for a hint.
1974
1975 if test "x${ac_cv_working_alloca_h+set}" = xset ; then
1976   glib_header_alloca_h="$ac_cv_working_alloca_h"
1977 else
1978   glib_header_alloca_h="$ac_cv_header_alloca_h"
1979 fi
1980
1981 case xyes in
1982 x$ac_cv_header_float_h)
1983   glib_float_h=yes
1984   glib_mf=FLT_MIN glib_Mf=FLT_MAX
1985   glib_md=DBL_MIN glib_Md=DBL_MAX
1986   ;;
1987 x$ac_cv_header_values_h)
1988   glib_values_h=yes
1989   glib_mf=MINFLOAT  glib_Mf=MAXFLOAT
1990   glib_md=MINDOUBLE glib_Md=MAXDOUBLE
1991   ;;
1992 esac
1993
1994 case xyes in
1995 x$ac_cv_header_limits_h)
1996   glib_limits_h=yes
1997   glib_ms=SHRT_MIN glib_Ms=SHRT_MAX glib_Mus=USHRT_MAX
1998   glib_mi=INT_MIN  glib_Mi=INT_MAX  glib_Mui=UINT_MAX
1999   glib_ml=LONG_MIN glib_Ml=LONG_MAX glib_Mul=ULONG_MAX
2000   ;;
2001 x$ac_cv_header_values_h)
2002   glib_values_h=yes
2003   glib_ms=MINSHORT glib_Ms=MAXSHORT glib_Mus="(((gushort)G_MAXSHORT)*2+1)"
2004   glib_mi=MININT   glib_Mi=MAXINT   glib_Mui="(((guint)G_MAXINT)*2+1)"
2005   glib_ml=MINLONG  glib_Ml=MAXLONG  glib_Mul="(((gulong)G_MAXLONG)*2+1)"
2006   ;;
2007 esac
2008
2009 if test x$ac_cv_header_sys_poll_h = xyes ; then
2010   glib_sys_poll_h=yes
2011 fi
2012
2013 case 2 in
2014 $ac_cv_sizeof_short)            
2015   gint16=short
2016   gint16_format='"hi"'
2017   guint16_format='"hu"'
2018   ;;
2019 $ac_cv_sizeof_int)              
2020   gint16=int
2021   gint16_format='"i"'
2022   guint16_format='"u"'
2023   ;;
2024 esac
2025 case 4 in
2026 $ac_cv_sizeof_short)            
2027   gint32=short
2028   gint32_format='"hi"'
2029   guint32_format='"hu"'
2030   ;;
2031 $ac_cv_sizeof_int)              
2032   gint32=int
2033   gint32_format='"i"'
2034   guint32_format='"u"'
2035   ;;
2036 $ac_cv_sizeof_long)             
2037   gint32=long
2038   gint32_format='"li"'
2039   guint32_format='"lu"'
2040   ;;
2041 esac
2042 case 8 in
2043 $ac_cv_sizeof_int)
2044   gint64=int
2045   gint64_format='"i"'
2046   guint64_format='"u"'
2047   glib_extension=
2048   gint64_constant='(val)'
2049   ;;
2050 $ac_cv_sizeof_long)
2051   gint64=long
2052   gint64_format='"li"'
2053   guint64_format='"lu"'
2054   glib_extension=
2055   gint64_constant='(val##L)'
2056   ;;
2057 $ac_cv_sizeof_long_long)
2058   gint64='long long'
2059   if test -n "$glib_cv_long_long_format"; then
2060     gint64_format='"'$glib_cv_long_long_format'i"'
2061     guint64_format='"'$glib_cv_long_long_format'u"'
2062   fi
2063   glib_extension='G_GNUC_EXTENSION '
2064   gint64_constant='(G_GNUC_EXTENSION (val##LL))'
2065   ;;
2066 $ac_cv_sizeof___int64)
2067   gint64='__int64'
2068   if test -n "$glib_cv_long_long_format"; then
2069     gint64_format='"'$glib_cv_long_long_format'i"'
2070     guint64_format='"'$glib_cv_long_long_format'u"'
2071   fi
2072   glib_extension=
2073   gint64_constant='(val##i64)'
2074   ;;
2075 esac
2076 glib_size_t=$glib_cv_sizeof_size_t
2077 glib_void_p=$ac_cv_sizeof_long
2078 glib_long=$ac_cv_sizeof_void_p
2079
2080 gintbits=`expr $ac_cv_sizeof_int \* 8`
2081 glongbits=`expr $ac_cv_sizeof_long \* 8`
2082
2083
2084 case $ac_cv_sizeof_void_p in
2085 $ac_cv_sizeof_int)      glib_gpi_cast=''        glib_gpui_cast=''         ;;
2086 $ac_cv_sizeof_long)     glib_gpi_cast='(glong)' glib_gpui_cast='(gulong)' ;;
2087 *)                      glib_unknown_void_p=yes ;;
2088 esac
2089
2090
2091 case xyes in
2092 x$ac_cv_func_atexit)
2093   glib_atexit="
2094 #ifdef NeXT /* @#%@! NeXTStep */
2095 # define g_ATEXIT(proc) (!atexit (proc))
2096 #else
2097 # define g_ATEXIT(proc) (atexit (proc))
2098 #endif"
2099   ;;
2100 x$ac_cv_func_on_exit)
2101   glib_atexit="
2102 #define g_ATEXIT(proc)  (on_exit ((void (*)(int, void*))(proc), NULL))"
2103   ;;
2104 esac
2105
2106 case xyes in
2107 x$ac_cv_func_memmove)
2108   glib_memmove='
2109 #define g_memmove(d,s,n) G_STMT_START { memmove ((d), (s), (n)); } G_STMT_END'
2110   ;;
2111 x$glib_cv_working_bcopy)
2112   glib_memmove="
2113 /* memmove isn't available, but bcopy can copy overlapping memory regions */
2114 #define g_memmove(d,s,n) G_STMT_START { bcopy ((s), (d), (n)); } G_STMT_END"
2115   ;;
2116 *)  
2117   glib_memmove="
2118 /* memmove isn't found and bcopy can't copy overlapping memory regions, 
2119  * so we have to roll our own copy routine. */
2120 void g_memmove (void* dest, const void * src, unsigned long len);"
2121   ;;
2122 esac
2123
2124 glib_defines="
2125 #define GLIB_MAJOR_VERSION $GLIB_MAJOR_VERSION
2126 #define GLIB_MINOR_VERSION $GLIB_MINOR_VERSION
2127 #define GLIB_MICRO_VERSION $GLIB_MICRO_VERSION
2128 "
2129
2130 case xyes in
2131 x$glib_cv_va_copy)      glib_vacopy='#define G_VA_COPY  va_copy' ;;
2132 x$glib_cv___va_copy)    glib_vacopy='#define G_VA_COPY  __va_copy' ;;
2133 *)                      glib_vacopy=''
2134 esac
2135
2136 if test x$glib_cv_va_val_copy = xno; then
2137   glib_vacopy="\$glib_vacopy
2138 #define G_VA_COPY_AS_ARRAY 1"
2139 fi
2140
2141 if test x$glib_cv_hasinline = xyes; then
2142     glib_inline='#define G_HAVE_INLINE 1'
2143 fi
2144 if test x$glib_cv_has__inline = xyes; then
2145     glib_inline="\$glib_inline
2146 #define G_HAVE___INLINE 1"
2147 fi
2148 if test x$glib_cv_has__inline__ = xyes; then
2149     glib_inline="\$glib_inline
2150 #define G_HAVE___INLINE__ 1"
2151 fi
2152
2153 g_have_gnuc_varargs=$g_have_gnuc_varargs
2154 g_have_iso_c_varargs=$g_have_iso_c_varargs
2155 g_have_iso_cxx_varargs=$g_have_iso_cxx_varargs
2156
2157 case xyes in
2158 x$ac_cv_c_bigendian)
2159   g_byte_order=G_BIG_ENDIAN
2160   g_bs_native=BE
2161   g_bs_alien=LE
2162   ;;
2163 *)
2164   g_byte_order=G_LITTLE_ENDIAN
2165   g_bs_native=LE
2166   g_bs_alien=BE
2167   ;;
2168 esac
2169
2170 g_stack_grows=$glib_cv_stack_grows
2171
2172 g_have_eilseq=$have_eilseq
2173
2174 case x$have_threads in
2175 xno)    g_enable_threads_def="#undef";;
2176 *)      g_enable_threads_def="#define";;
2177 esac
2178
2179 g_threads_impl_def=$g_threads_impl
2180
2181 g_mutex_has_default="$mutex_has_default"
2182 g_mutex_sizeof="$glib_cv_sizeof_gmutex"
2183 g_system_thread_sizeof="$glib_cv_sizeof_system_thread"
2184 g_mutex_contents="$glib_cv_byte_contents_gmutex"
2185
2186 g_module_suffix="$glib_gmodule_suffix"
2187
2188 case $host in
2189   *-*-beos*)
2190     glib_os="#define G_OS_BEOS"
2191     ;;
2192   *-*-cygwin*)
2193     glib_os="#define G_OS_UNIX
2194 #define G_PLATFORM_WIN32
2195 #define G_WITH_CYGWIN"
2196     ;;
2197   *-*-mingw*)
2198     glib_os="#define G_OS_WIN32
2199 #define G_PLATFORM_WIN32"
2200     ;;
2201   *)
2202     glib_os="#define G_OS_UNIX"
2203     ;;
2204 esac
2205 ])
2206
2207 AC_OUTPUT([
2208 glib-2.0.pc
2209 glib-2.0-uninstalled.pc
2210 gmodule-2.0.pc
2211 gmodule-2.0-uninstalled.pc
2212 gthread-2.0.pc
2213 gthread-2.0-uninstalled.pc
2214 gobject-2.0.pc
2215 gobject-2.0-uninstalled.pc
2216 glib.spec
2217 glib-zip
2218 glib-gettextize
2219 Makefile
2220 build/Makefile
2221 build/win32/Makefile
2222 build/win32/dirent/Makefile
2223 glib/Makefile
2224 glib/libcharset/Makefile
2225 gmodule/gmoduleconf.h
2226 gmodule/Makefile
2227 gobject/Makefile
2228 gobject/glib-mkenums
2229 gthread/Makefile
2230 po/Makefile.in
2231 docs/Makefile
2232 docs/reference/Makefile
2233 docs/reference/glib/Makefile
2234 docs/reference/gobject/Makefile
2235 tests/Makefile
2236 m4macros/Makefile
2237 ])