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