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