18:36. incorporated proposed cleanups from gtk-devel-list.
[platform/upstream/glib.git] / configure.in
1 dnl ***********************************
2 dnl *** include special GLib macros ***
3 dnl ***********************************
4 builtin(include, acglib.m4)dnl
5
6 # require autoconf 2.13
7 AC_PREREQ(2.13)
8
9 # Process this file with autoconf to produce a configure script.
10 AC_INIT(glist.c)
11
12 # Save this value here, since automake will set cflags later
13 cflags_set=${CFLAGS+set}
14
15 # we rewrite this file
16 rm -f glibconfig-sysdefs.h
17
18 dnl we need to AC_DIVERT_PUSH/AC_DIVERT_POP these variable definitions so they
19 dnl are available for $ac_help expansion (don't we all *love* autoconf?)
20 AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)dnl
21 #
22 # The following version number definitions apply to GLib, GModule and GThread
23 # 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=1
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 AC_DIVERT_POP()dnl
42
43 AC_SUBST(GLIB_MAJOR_VERSION)
44 AC_SUBST(GLIB_MINOR_VERSION)
45 AC_SUBST(GLIB_MICRO_VERSION)
46 AC_SUBST(GLIB_VERSION)
47 AC_SUBST(GLIB_INTERFACE_AGE)
48 AC_SUBST(GLIB_BINARY_AGE)
49
50 # libtool versioning
51 LT_RELEASE=$GLIB_MAJOR_VERSION.$GLIB_MINOR_VERSION
52 LT_CURRENT=`expr $GLIB_MICRO_VERSION - $GLIB_INTERFACE_AGE`
53 LT_REVISION=$GLIB_INTERFACE_AGE
54 LT_AGE=`expr $GLIB_BINARY_AGE - $GLIB_INTERFACE_AGE`
55 AC_SUBST(LT_RELEASE)
56 AC_SUBST(LT_CURRENT)
57 AC_SUBST(LT_REVISION)
58 AC_SUBST(LT_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 AC_DEFINE_UNQUOTED(GLIB_MINOR_VERSION, $GLIB_MINOR_VERSION)
70 AC_DEFINE_UNQUOTED(GLIB_MICRO_VERSION, $GLIB_MICRO_VERSION)
71 AC_DEFINE_UNQUOTED(GLIB_INTERFACE_AGE, $GLIB_INTERFACE_AGE)
72 AC_DEFINE_UNQUOTED(GLIB_BINARY_AGE, $GLIB_BINARY_AGE)
73
74 dnl Initialize libtool
75 AM_PROG_LIBTOOL
76
77 dnl Initialize maintainer mode
78 AM_MAINTAINER_MODE
79
80 AC_CANONICAL_HOST
81
82 AC_MSG_CHECKING(for the BeOS)
83 case $host in
84   *-*-beos*)
85     AC_DEFINE(GLIB_NATIVE_BEOS, 1)
86     glib_native_beos="yes"
87     AC_MSG_RESULT([$glib_native_beos])
88     ;;
89   default)
90     glib_native_beos="no"
91     AC_MSG_RESULT($glib_native_beos)
92     ;;
93 esac
94
95 dnl figure debugging default, prior to $ac_help setup
96 dnl
97 AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)dnl
98 if test `expr $GLIB_MINOR_VERSION \% 2` = 1 ; then
99         debug_default=yes
100 else
101         debug_default=minimum
102 fi
103 AC_DIVERT_POP()dnl
104
105 dnl declare --enable-* args and collect ac_help strings
106 AC_ARG_ENABLE(debug, [  --enable-debug=[no/minimum/yes] turn on debugging [default=$debug_default]],,enable_debug=$debug_default)
107 AC_ARG_ENABLE(mem_check, [  --enable-mem-check      turn on malloc/free sanity checking [default=no]],,enable_mem_check=no)
108 AC_ARG_ENABLE(mem_profile, [  --enable-mem-profile    turn on malloc profiling atexit [default=no]],,enable_mem_profile=no)
109 AC_ARG_ENABLE(ansi, [  --enable-ansi           turn on strict ansi [default=no]],
110                     , enable_ansi=no)
111 AC_ARG_ENABLE(threads, [  --enable-threads        turn on basic thread support [default=yes]
112                           ([=no] will override --with-threads)],,enable_threads=yes)
113
114 if test "x$enable_threads" != "xyes"; then
115   enable_threads=no
116 fi
117
118 AC_MSG_CHECKING(whether to enable memory checking)
119 if test "x$enable_mem_check" = "xyes"; then
120   AC_DEFINE(ENABLE_MEM_CHECK, 1)
121   AC_SUBST(ENABLE_MEM_CHECK)
122   AC_MSG_RESULT(yes)
123 else
124   AC_MSG_RESULT(no)
125 fi
126
127 AC_MSG_CHECKING(whether to enable memory profiling)
128 if test "x$enable_mem_profile" = "xyes"; then
129   AC_DEFINE(ENABLE_MEM_PROFILE, 1)
130   AC_SUBST(ENABLE_MEM_PROFILE)
131   AC_MSG_RESULT(yes)
132 else
133   AC_MSG_RESULT(no)
134 fi
135
136 if test "x$enable_debug" = "xyes"; then
137   test "$cflags_set" = set || CFLAGS="$CFLAGS -g"
138   GLIB_DEBUG_FLAGS="-DG_ENABLE_DEBUG"
139 else
140   if test "x$enable_debug" = "xno"; then
141     GLIB_DEBUG_FLAGS="-DG_DISABLE_ASSERT -DG_DISABLE_CHECKS"
142   fi
143 fi
144
145 AC_DEFINE_UNQUOTED(G_COMPILED_WITH_DEBUGGING, "${enable_debug}")
146
147 # Checks for programs.
148 AC_PROG_CC
149 AM_PROG_CC_STDC
150 AC_PROG_INSTALL
151
152 changequote(,)dnl
153 if test "x$GCC" = "xyes"; then
154   case " $CFLAGS " in
155   *[\ \ ]-Wall[\ \      ]*) ;;
156   *) CFLAGS="$CFLAGS -Wall" ;;
157   esac
158
159   if test "x$enable_ansi" = "xyes"; then
160     case " $CFLAGS " in
161     *[\ \       ]-ansi[\ \      ]*) ;;
162     *) CFLAGS="$CFLAGS -ansi" ;;
163     esac
164
165     case " $CFLAGS " in
166     *[\ \       ]-pedantic[\ \  ]*) ;;
167     *) CFLAGS="$CFLAGS -pedantic" ;;
168     esac
169   fi
170 fi
171 changequote([,])dnl
172
173 dnl DU4 native cc currently needs -std1 for ANSI mode (instead of K&R)
174 AC_MSG_CHECKING([for extra flags to get ANSI library prototypes])
175 glib_save_LIBS=$LIBS
176 LIBS="$LIBS -lm"
177 AC_TRY_RUN([#include <math.h>
178              int main (void) { return (log(1) != log(1.)); }],
179      AC_MSG_RESULT(none needed),
180      glib_save_CFLAGS=$CFLAGS
181      CFLAGS="$CFLAGS -std1"
182      AC_TRY_RUN([#include <math.h>
183                  int main (void) { return (log(1) != log(1.)); }],
184          AC_MSG_RESULT(-std1),
185          AC_MSG_RESULT()
186          CFLAGS=$glib_save_CFLAGS
187          AC_MSG_WARN(
188                 [No ANSI prototypes found in library. (-std1 didn't work.)])
189      )
190 )
191 LIBS=$glib_save_LIBS
192
193 dnl NeXTStep cc seems to need this
194 AC_MSG_CHECKING([for extra flags for POSIX compliance])
195 AC_TRY_COMPILE([#include <dirent.h>], [DIR *dir;],
196   AC_MSG_RESULT(none needed),
197   glib_save_CFLAGS=$CFLAGS
198   CFLAGS="$CFLAGS -posix"
199   AC_TRY_COMPILE([#include <dirent.h>], [DIR *dir;],
200     AC_MSG_RESULT(-posix),
201     AC_MSG_RESULT()
202     CFLAGS=$glib_save_CFLAGS
203     AC_MSG_WARN([Could not determine POSIX flag. (-posix didn't work.)])))
204
205 # Checks for header files.
206 AC_HEADER_STDC
207
208 # Checks for library functions.
209 AC_FUNC_VPRINTF
210
211 AC_CHECK_FUNCS(atexit on_exit)
212
213 AC_CHECK_SIZEOF(char)
214 AC_CHECK_SIZEOF(short)
215 AC_CHECK_SIZEOF(long)
216 AC_CHECK_SIZEOF(int)
217 AC_CHECK_SIZEOF(void *)
218 AC_CHECK_SIZEOF(long long)
219
220 if test x$ac_cv_sizeof_long_long = x8; then
221         # long long is a 64 bit integer.
222         AC_MSG_CHECKING(for format to printf and scanf a gint64)
223         AC_CACHE_VAL(glib_cv_long_long_format,[
224                 AC_TRY_RUN([#include <stdio.h>  
225                         int main()
226                         {
227                           long long b, a = -0x3AFAFAFAFAFAFAFALL;
228                           char buffer[1000];
229                           sprintf (buffer, "%llu", a);
230                           sscanf (buffer, "%llu", &b);
231                           exit (b!=a);
232                         }
233                         ],
234                         glib_cv_long_long_format=ll,
235                         glib_cv_long_long_format=q)])
236         AC_MSG_RESULT(%${glib_cv_long_long_format}i)
237 fi
238
239 dnl long doubles were not used, and a portability problem
240 dnl AC_C_LONG_DOUBLE
241 AC_C_CONST
242
243 dnl AC_C_INLINE is useless to us since it bails out too early, we need to
244 dnl truely know which ones of `inline', `__inline' and `__inline__' are
245 dnl actually supported.
246 AC_MSG_CHECKING(for __inline)
247 AC_CACHE_VAL(glib_cv_has__inline,[
248         AC_TRY_RUN([
249         __inline int foo () { return 0; }
250         int main () { return foo (); }
251         ],
252         glib_cv_has__inline=yes
253         ,
254         glib_cv_has__inline=no
255         ,)
256 ])
257 AC_MSG_RESULT($glib_cv_has__inline)
258 case x$glib_cv_has__inline in
259 xyes) AC_DEFINE(G_HAVE___INLINE)
260 esac
261 AC_MSG_CHECKING(for __inline__)
262 AC_CACHE_VAL(glib_cv_has__inline__,[
263         AC_TRY_RUN([
264         __inline__ int foo () { return 0; }
265         int main () { return foo (); }
266         ],
267         glib_cv_has__inline__=yes
268         ,
269         glib_cv_has__inline__=no
270         ,)
271 ])
272 AC_MSG_RESULT($glib_cv_has__inline__)
273 case x$glib_cv_has__inline__ in
274 xyes) AC_DEFINE(G_HAVE___INLINE__)
275 esac
276 AC_MSG_CHECKING(for inline)
277 AC_CACHE_VAL(glib_cv_hasinline,[
278         AC_TRY_RUN([
279         inline int foo () { return 0; }
280         int main () { return foo (); }
281         ],
282         glib_cv_hasinline=yes
283         ,
284         glib_cv_hasinline=no
285         ,)
286 ])
287 AC_MSG_RESULT($glib_cv_hasinline)
288 case x$glib_cv_hasinline in
289 xyes) AC_DEFINE(G_HAVE_INLINE)
290 esac
291
292 dnl for bytesex stuff
293 AC_C_BIGENDIAN
294
295 dnl header file checks
296 AC_CHECK_HEADERS(float.h, AC_DEFINE(HAVE_FLOAT_H))
297 AC_CHECK_HEADERS(limits.h, AC_DEFINE(HAVE_LIMITS_H))
298 AC_CHECK_HEADERS(pwd.h, AC_DEFINE(HAVE_PWD_H))
299 AC_CHECK_HEADERS(sys/param.h, AC_DEFINE(HAVE_SYS_PARAM_H))
300 AC_CHECK_HEADERS(sys/poll.h, AC_DEFINE(HAVE_SYS_POLL_H))
301 AC_CHECK_HEADERS(sys/select.h, AC_DEFINE(HAVE_SYS_SELECT_H))
302 AC_CHECK_HEADERS(sys/time.h, AC_DEFINE(HAVE_SYS_TIME_H))
303 AC_CHECK_HEADERS(sys/times.h, AC_DEFINE(HAVE_SYS_TIMES_H))
304 AC_CHECK_HEADERS(unistd.h, AC_DEFINE(HAVE_UNISTD_H))
305 AC_CHECK_HEADERS(values.h, AC_DEFINE(HAVE_VALUES_H))
306
307 # Check for some functions
308 AC_CHECK_FUNCS(lstat strerror strsignal memmove vsnprintf strcasecmp strncasecmp poll)
309
310 # Check if bcopy can be used for overlapping copies, if memmove isn't found.
311 # The check is borrowed from the PERL Configure script.
312 if test "$ac_cv_func_memmove" != "yes"; then
313   AC_CACHE_CHECK(whether bcopy can handle overlapping copies,
314     glib_cv_working_bcopy,[AC_TRY_RUN([
315       int main() {
316         char buf[128], abc[128], *b;
317         int len, off, align;
318         bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
319         for (align = 7; align >= 0; align--) {
320           for (len = 36; len; len--) {
321             b = buf+align; bcopy(abc, b, len);
322             for (off = 1; off <= len; off++) {
323               bcopy(b, b+off, len); bcopy(b+off, b, len);
324                 if (bcmp(b, abc, len)) return(1);
325             }
326           }
327         }
328         return(0);
329       }],glib_cv_working_bcopy=yes,glib_cv_working_bcopy=no)])
330   if test "$glib_cv_working_bcopy" == "yes"; then
331     AC_DEFINE(HAVE_WORKING_BCOPY)
332   fi
333 fi
334
335 # Check for sys_errlist
336 AC_MSG_CHECKING(for sys_errlist)
337 AC_TRY_LINK(, [
338 extern char *sys_errlist[];
339 extern int sys_nerr;
340 sys_errlist[sys_nerr-1][0] = 0;
341 ], glib_ok=yes, glib_ok=no)
342 AC_MSG_RESULT($glib_ok)
343 if test $glib_ok = no; then
344     AC_DEFINE(NO_SYS_ERRLIST)
345 fi
346
347 # Check for sys_siglist
348 AC_MSG_CHECKING(for sys_siglist)
349 AC_TRY_LINK(, [
350 extern char *sys_siglist[];
351 strlen (sys_siglist[0]);
352 ], glib_ok=yes, glib_ok=no)
353 AC_MSG_RESULT($glib_ok)
354 if test $glib_ok = no; then
355     AC_DEFINE(NO_SYS_SIGLIST)
356 fi
357
358 # Check for sys_siglist decl (see Tue Jan 19 00:44:24 1999 in changelog)
359 AC_MSG_CHECKING(for sys_siglist declaration)
360 AC_TRY_COMPILE([#include <signal.h>], [
361 strlen (sys_siglist[0]);
362 ], glib_ok=yes, glib_ok=no)
363 AC_MSG_RESULT($glib_ok)
364 if test $glib_ok = no; then
365     AC_DEFINE(NO_SYS_SIGLIST_DECL)
366 fi
367
368 # Check if <sys/select.h> needs to be included for fd_set
369 AC_MSG_CHECKING([for fd_set])
370 AC_TRY_COMPILE([#include <sys/types.h>],
371         [fd_set readMask, writeMask;], gtk_ok=yes, gtk_ok=no)
372 if test $gtk_ok = yes; then
373     AC_MSG_RESULT([yes, found in sys/types.h])
374 else
375     AC_HEADER_EGREP(fd_set, sys/select.h, gtk_ok=yes)
376     if test $gtk_ok = yes; then
377         AC_DEFINE(HAVE_SYS_SELECT_H)
378         AC_MSG_RESULT([yes, found in sys/select.h])
379     else
380         AC_DEFINE(NO_FD_SET)
381         AC_MSG_RESULT(no)
382     fi
383 fi
384
385 dnl *** check for sane realloc() ***
386 AC_MSG_CHECKING(whether realloc (NULL,) will work)
387 AC_CACHE_VAL(glib_cv_sane_realloc,[
388         AC_TRY_RUN([
389         #include <stdlib.h>
390         int main() {
391           return realloc (0, sizeof (int)) == 0;
392         }],
393         glib_cv_sane_realloc=yes
394         AC_DEFINE(REALLOC_0_WORKS)
395         ,
396         glib_cv_sane_realloc=no
397         ,)
398 ])
399 AC_MSG_RESULT($glib_cv_sane_realloc)
400
401
402 dnl **********************
403 dnl *** va_copy checks ***
404 dnl **********************
405 dnl we currently check for all three va_copy possibilities, so we get
406 dnl all results in config.log for bug reports.
407 AC_MSG_CHECKING(for an implementation of va_copy())
408 AC_CACHE_VAL(glib_cv_va_copy,[
409         AC_TRY_RUN([
410         #include <stdarg.h>
411         void f (int i, ...) {
412         va_list args1, args2;
413         va_start (args1, i);
414         va_copy (args2, args1);
415         if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
416           exit (1);
417         va_end (args1); va_end (args2);
418         }
419         int main() {
420           f (0, 42);
421           return 0;
422         }],
423         glib_cv_va_copy=yes
424         ,
425         glib_cv_va_copy=no
426         ,)
427 ])
428 AC_MSG_RESULT($glib_cv_va_copy)
429 AC_MSG_CHECKING(for an implementation of __va_copy())
430 AC_CACHE_VAL(glib_cv___va_copy,[
431         AC_TRY_RUN([
432         #include <stdarg.h>
433         void f (int i, ...) {
434         va_list args1, args2;
435         va_start (args1, i);
436         __va_copy (args2, args1);
437         if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
438           exit (1);
439         va_end (args1); va_end (args2);
440         }
441         int main() {
442           f (0, 42);
443           return 0;
444         }],
445         glib_cv___va_copy=yes
446         ,
447         glib_cv___va_copy=no
448         ,)
449 ])
450 AC_MSG_RESULT($glib_cv___va_copy)
451 AC_MSG_CHECKING(whether va_lists can be copied by value)
452 AC_CACHE_VAL(glib_cv_va_val_copy,[
453         AC_TRY_RUN([
454         #include <stdarg.h>
455         void f (int i, ...) {
456         va_list args1, args2;
457         va_start (args1, i);
458         args2 = args1;
459         if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
460           exit (1);
461         va_end (args1); va_end (args2);
462         }
463         int main() {
464           f (0, 42);
465           return 0;
466         }],
467         glib_cv_va_val_copy=yes
468         ,
469         glib_cv_va_val_copy=no
470         ,)
471 ])
472 if test "x$glib_cv_va_copy" = "xyes"; then
473   AC_DEFINE(G_VA_COPY, va_copy)
474 else if test "x$glib_cv___va_copy" = "xyes"; then
475   AC_DEFINE(G_VA_COPY, __va_copy)
476 fi
477 fi
478 if test "x$glib_cv_va_val_copy" = "xno"; then
479   AC_DEFINE(G_VA_COPY_AS_ARRAY)
480 fi
481 AC_MSG_RESULT($glib_cv_va_val_copy)
482
483
484 dnl ***********************
485 dnl *** g_module checks ***
486 dnl ***********************
487 G_MODULE_LIBS=
488 G_MODULE_LIBS_EXTRA=
489 G_MODULE_PLUGIN_LIBS=
490 G_MODULE_LDFLAGS=
491 dnl G_MODULE_IMPL= don't reset, so cmd-line can override
492 G_MODULE_NEED_USCORE=0
493 G_MODULE_HAVE_DLERROR=0
494 dnl *** dlopen() and dlsym() in system libraries
495 if test -z "$G_MODULE_IMPL"; then
496         AC_CHECK_FUNC(dlopen,
497                 AC_CHECK_FUNC(dlsym,
498                         G_MODULE_IMPL=G_MODULE_IMPL_DL
499                 ,)
500         ,)
501 fi
502 dnl *** load_image (BeOS)
503 if test -z "$G_MODULE_IMPL" -a "x$glib_native_beos" = "xyes"; then
504   AC_CHECK_LIB(root, load_image,
505       G_MODULE_LIBS="-lbe -lroot -lglib"
506       G_MODULE_LIBS_EXTRA="-L\$(top_builddir_full)/.libs"
507       G_MODULE_PLUGIN_LIBS="-L\$(top_builddir_full)/gmodule/.libs -lgmodule"
508       G_MODULE_IMPL=G_MODULE_IMPL_BEOS 
509 ,)
510 fi   
511 dnl *** dlopen() and dlsym() in libdl
512 if test -z "$G_MODULE_IMPL"; then
513         AC_CHECK_LIB(dl, dlopen,
514                 AC_CHECK_LIB(dl, dlsym,
515                         G_MODULE_LIBS=-ldl
516                         G_MODULE_IMPL=G_MODULE_IMPL_DL
517                 ,)
518         ,)
519 fi
520 dnl *** shl_load() in libdld (HP-UX)
521 if test -z "$G_MODULE_IMPL"; then
522         AC_MSG_CHECKING(how to export all symbols)
523         SAVED_LDFLAGS=$LDFLAGS
524         LDFLAGS="$LDFLAGS -Wl,-E"
525         AC_TRY_LINK(,[ return 0; ],
526                 [ G_MODULE_LDFLAGS="-Wl,-E" ],[
527                 LDFLAGS="$SAVED_LDFLAGS -bexpall"
528                 AC_TRY_LINK(,[ return 0; ],
529                         G_MODULE_LDFLAGS="-bexpall",
530                         G_MODULE_LDFLAGS="none"
531                 )
532         ])
533         LDFLAGS=$SAVED_LDFLAGS
534         AC_MSG_RESULT($G_MODULE_LDFLAGS)
535         if test "x$G_MODULE_LDFLAGS" = "xnone"; then
536                 G_MODULE_LDFLAGS=
537         fi
538         AC_CHECK_LIB(dld, shl_load,
539                 G_MODULE_LIBS=-ldld
540                 G_MODULE_IMPL=G_MODULE_IMPL_DLD
541         ,)
542 fi
543 dnl *** additional checks for G_MODULE_IMPL_DL
544 if test "$G_MODULE_IMPL" = "G_MODULE_IMPL_DL"; then
545         case "$host_os" in
546           linux*)
547             G_MODULE_LDFLAGS='-rdynamic'
548             ;;
549         esac
550         LIBS_orig="$LIBS"
551         LDFLAGS_orig="$LDFLAGS"
552         LIBS="$LIBS $G_MODULE_LIBS"
553         LDFLAGS="$LDFLAGS $G_MODULE_LDFLAGS"
554 dnl *** check whether we need preceeding underscores
555         AC_MSG_CHECKING(for preceeding underscore in symbols)
556         AC_CACHE_VAL(glib_cv_uscore,[
557                 AC_TRY_RUN([
558                 #include <dlfcn.h>
559                 int glib_underscore_test (void) { return 42; }
560                 int main() {
561                   void *f1 = (void*)0, *f2 = (void*)0, *handle;
562                   handle = dlopen ((void*)0, 0);
563                   if (handle) {
564                     f1 = dlsym (handle, "glib_underscore_test");
565                     f2 = dlsym (handle, "_glib_underscore_test");
566                   } return (!f2 || f1);
567                 }],
568                         glib_cv_uscore=yes,
569                         glib_cv_uscore=no,
570                 )
571                 rm -f plugin.c plugin.o plugin.lo
572         ])
573         AC_MSG_RESULT($glib_cv_uscore)
574         if test "x$glib_cv_uscore" = "xyes"; then
575                 G_MODULE_NEED_USCORE=1
576         else
577                 G_MODULE_NEED_USCORE=0
578         fi
579
580         LDFLAGS="$LDFLAGS_orig"
581 dnl *** check for having dlerror()
582         AC_CHECK_FUNC(dlerror,
583                 G_MODULE_HAVE_DLERROR=1,
584                 G_MODULE_HAVE_DLERROR=0)
585         LIBS="$LIBS_orig"
586 fi
587 dnl *** done, have e got an implementation?
588 if test -z "$G_MODULE_IMPL"; then
589         G_MODULE_IMPL=0
590 fi
591 AC_SUBST(G_MODULE_IMPL)
592 AC_SUBST(G_MODULE_LIBS)
593 AC_SUBST(G_MODULE_LIBS_EXTRA)
594 AC_SUBST(G_MODULE_PLUGIN_LIBS)
595 AC_SUBST(G_MODULE_LDFLAGS)
596 AC_SUBST(G_MODULE_HAVE_DLERROR)
597 AC_SUBST(G_MODULE_NEED_USCORE)
598 AC_SUBST(GLIB_DEBUG_FLAGS)
599
600
601 dnl ***********************
602 dnl *** g_thread checks ***
603 dnl ***********************
604
605 AC_ARG_WITH(threads, [  --with-threads=[none/posix/dce/solaris] specify a thread implementation to use],
606         if test "x$with_threads" = x; then
607                 want_threads=yes
608         else
609                 want_threads=$with_threads
610         fi,
611         want_threads=yes)
612 if test "x$enable_threads" = "xno"; then
613         want_threads=no
614 fi
615 if test "x$want_threads" = "xnone"; then
616         want_threads=no
617 fi
618
619 dnl error and warning message
620 dnl *************************
621
622 THREAD_NO_IMPLEMENTATION="You do not have any known thread system on your
623                 computer. GLib will not have a default thread implementation."
624
625 FLAG_DOES_NOT_WORK="I can't find the MACRO, that enables thread safety on your
626                 platform (normaly it's "_REENTRANT"). I'll not use any flag on
627                 compilation now, but then your programs might not work.
628                 Please provide information on how it is done on your system."
629
630 LIBS_NOT_FOUND_1="I can't find the libraries for the thread implementation
631                 "
632
633 LIBS_NOT_FOUND_2=". Please choose another thread implementation or
634                 provide information on your thread implementation.
635                 You can also run 'configure --disable-threads' 
636                 to compile without thread support."
637
638 FUNC_NO_GETPWUID_R="the 'g_get_(user_name|real_name|home_dir|tmp_dir)'
639                 functions will not be MT-safe during their first call because
640                 there is no working 'getpwuid_r' on your system."
641
642 FUNC_NO_LOCALTIME_R="the 'g_date_set_time' function will not be MT-safe
643                 because there is no 'localtime_r' on your system."
644
645 dnl determination of thread implementation
646 dnl ***************************************
647
648 have_threads=none
649 if test "x$want_threads" = xyes || test "x$want_threads" = xsolaris; then
650         case $host in
651                 *-*-solaris*)
652                 AC_CHECK_LIB(thread, cond_init, have_threads=solaris)
653                 ;;
654         esac
655 fi
656 if test "x$want_threads" = xyes || test "x$want_threads" = xposix \
657                                 || test "x$want_threads" = xdce; then
658         # -D_POSIX4A_DRAFT10_SOURCE is for DG/UX
659         # -U_OSF_SOURCE if for Digital UNIX 4.0d
660         GTHREAD_COMPILE_IMPL_DEFINES="-D_POSIX4A_DRAFT10_SOURCE -U_OSF_SOURCE"
661         glib_save_CPPFLAGS="$CPPFLAGS"
662         CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
663         if test "x$have_threads" = xnone; then
664                 AC_EGREP_HEADER([[^a-zA-Z_]pthread_attr_init[^a-zA-Z_]],
665                         pthread.h,
666                         have_threads=posix)
667         fi
668         if test "x$have_threads" = xnone; then
669                 AC_EGREP_HEADER([[^a-zA-Z_]pthread_attr_create[^a-zA-Z_]],
670                         pthread.h,
671                         have_threads=dce)
672         fi
673         CPPFLAGS="$glib_save_CPPFLAGS"
674 fi
675
676 AC_MSG_CHECKING(for thread implementation)
677
678 if test "x$have_threads" = xnone && test "x$want_threads" != xno; then
679         AC_MSG_RESULT(none available)
680         AC_MSG_WARN($THREAD_NO_IMPLEMENTATION)
681 else
682         AC_MSG_RESULT($have_threads)
683 fi
684
685
686 dnl determination of G_THREAD_LIBS
687 dnl ******************************
688
689 G_THREAD_LIBS=
690 G_THREAD_LIBS_EXTRA=
691 G_THREAD_CFLAGS=
692
693 mutex_has_default=no
694 case $have_threads in
695         posix|dce)
696                 G_THREAD_LIBS=error
697                 glib_save_LIBS="$LIBS"
698                 for thread_lib in "" pthread pthreads c_r thread dce; do
699                         # This is not AC_CHECK_LIB to also work with function
700                         # name mangling in header files.
701                         if test x"$thread_lib" = x; then
702                                 add_thread_lib=""
703                                 IN=""
704                         else
705                                 add_thread_lib="-l$thread_lib"
706                                 IN=" in -l$thread_lib"
707                         fi
708                         
709                         LIBS="$glib_save_LIBS $add_thread_lib"
710                         
711                         AC_MSG_CHECKING(for pthread_join$IN)
712                         AC_TRY_LINK([#include <pthread.h>],
713                                 [pthread_join(NULL,NULL)],
714                                 [AC_MSG_RESULT(yes)
715                                 G_THREAD_LIBS="$add_thread_lib"
716                                 break],
717                                 [AC_MSG_RESULT(no)])
718                 done
719                 LIBS="$glib_save_LIBS"
720                 mutex_has_default=yes
721                 mutex_default_type='pthread_mutex_t'
722                 mutex_default_init='PTHREAD_MUTEX_INITIALIZER'
723                 mutex_header_file='pthread.h'
724                 if test "x$have_threads" = "xposix"; then
725                         g_threads_impl="POSIX"
726                 else
727                         g_threads_impl="DCE"
728                         have_threads="posix"
729                 fi
730                 AC_SUBST(GTHREAD_COMPILE_IMPL_DEFINES)
731                 ;;
732         solaris)
733                 G_THREAD_LIBS=error
734                 AC_CHECK_LIB(thread, cond_init, G_THREAD_LIBS="-lthread")
735                 mutex_has_default=yes
736                 mutex_default_type='mutex_t'
737                 mutex_default_init="DEFAULTMUTEX"
738                 mutex_header_file='thread.h'
739                 g_threads_impl="SOLARIS"
740                 ;;
741         none)
742                 g_threads_impl="NONE"
743                 ;;
744         *)
745                 g_threads_impl="NONE"
746                 G_THREAD_LIBS=error
747                 ;;
748 esac
749
750 if test "x$G_THREAD_LIBS" = xerror; then
751         AC_MSG_ERROR($LIBS_NOT_FOUND_1$have_threads$LIBS_NOT_FOUND_2)
752 fi
753
754 case $host in
755   *-*-beos*)
756     G_THREAD_LIBS="-lbe -lroot -lglib "
757     G_THREAD_LIBS_EXTRA="-L\$(top_builddir_full)/.libs"
758     ;;
759   *)
760     ;;
761 esac
762
763
764 AC_MSG_CHECKING(thread related libraries)
765 AC_MSG_RESULT($G_THREAD_LIBS)
766
767 dnl determination of G_THREAD_CFLAGS
768 dnl ********************************
769
770 if test x"$enable_threads" = xyes; then
771
772     G_THREAD_CFLAGS="$G_THREAD_CFLAGS -D_REENTRANT" # good default guess
773
774     case $host in
775         *-aix*)
776                 G_THREAD_CFLAGS="$G_THREAD_CFLAGS -D_THREAD_SAFE"
777                 if test x"$GCC" = xyes; then
778                         G_THREAD_CFLAGS="$G_THREAD_CFLAGS -mthreads"
779                 fi
780                 ;;
781         *-freebsd2.2*)
782                 G_THREAD_CFLAGS="$G_THREAD_CFLAGS -D_THREAD_SAFE"
783
784                 # FreeBSD 2.2.x shiped with gcc 2.7.2.x, which doesn't support
785                 # -mthreads flag.
786                 ;;
787     esac
788
789     # if we are not finding the ctime_r function, then we probably are
790     # not using the proper multithread flag
791     old_CPPFLAGS=$CPPFLAGS
792     CPPFLAGS="$CPPFLAGS $G_THREAD_CFLAGS"
793     # Note: Digital UNIX 4.0d #defines ctime_r to _Pctime_r for gcc.
794     AC_EGREP_HEADER([[^a-zA-Z_](_P)?ctime_r[^a-zA-Z_]], time.h, ,
795     G_THREAD_CFLAGS=
796     AC_MSG_WARN($FLAG_DOES_NOT_WORK))
797     CPPFLAGS=$old_CPPFLAGS
798
799     AC_MSG_CHECKING(thread related cflags)
800
801     AC_MSG_RESULT($G_THREAD_CFLAGS)
802 else
803     G_THREAD_CFLAGS=
804 fi
805
806 dnl check for mt safe function variants and some posix functions
807 dnl ************************************************************
808
809 if test x"$enable_threads" = xyes; then
810         glib_save_LIBS="$LIBS"
811         glib_save_CFLAGS="$CFLAGS"
812         # we are not doing the following for now, as this might require glib 
813         # to always be linked with the thread libs on some platforms. 
814         # LIBS="$LIBS $G_THREAD_LIBS"
815         CFLAGS="$CFLAGS $G_THREAD_CFLAGS"
816         AC_CHECK_FUNCS(localtime_r)
817         if test "$ac_cv_header_pwd_h" = "yes"; then
818                 AC_MSG_CHECKING([for getpwuid_r])
819                 AC_CACHE_VAL(ac_cv_func_getpwuid_r,
820                         [AC_TRY_RUN([#include <errno.h>
821                                 int main () { char buffer[10000], *pointer; 
822                                 char getpwuid_r (long, void*, void*,
823                                         int, void*);
824                                 errno = 0;
825                                 getpwuid_r (0, &buffer, &buffer, 
826                                         sizeof (buffer), &pointer);
827                                 return errno == ENOSYS;}],
828                                 [ac_cv_func_getpwuid_r=yes],
829                                 [ac_cv_func_getpwuid_r=no])])
830                 if test "$ac_cv_func_getpwuid_r" = yes; then
831                         AC_MSG_RESULT(yes)
832                         AC_DEFINE(HAVE_GETPWUID_R)
833                 else
834                         AC_MSG_RESULT(no)
835                 fi
836                 if test "$ac_cv_func_getpwuid_r" = "yes"; then
837                         AC_MSG_CHECKING(whether getpwuid_r is posix like)
838                         # getpwuid_r(0, NULL, NULL, 0) is the signature on
839                         # solaris, if that is not found, the prog below won't 
840                         # compile, then the posix signature is assumed as 
841                         # the default.
842                         AC_TRY_COMPILE([#include <pwd.h>],
843                                 [getpwuid_r(0, NULL, NULL, 0);],
844                                 [AC_MSG_RESULT(no)],
845                                 [AC_MSG_RESULT(yes)
846                                 AC_DEFINE(HAVE_GETPWUID_R_POSIX)])
847                 fi
848         fi
849         LIBS="$LIBS $G_THREAD_LIBS"
850         if test x"$have_threads" = xposix; then
851                 GLIB_SIZEOF([#include <pthread.h>],
852                         pthread_t,
853                         pthread_t)
854                 # This is not AC_CHECK_FUNC to also work with function
855                 # name mangling in header files.
856                 AC_MSG_CHECKING(for pthread_attr_setstacksize)
857                 AC_TRY_LINK([#include <pthread.h>],
858                         [pthread_attr_setstacksize(NULL,0)],
859                         [AC_MSG_RESULT(yes)
860                         AC_DEFINE(HAVE_PTHREAD_ATTR_SETSTACKSIZE)],
861                         [AC_MSG_RESULT(no)])
862                 # If sched_get_priority_min(SCHED_OTHER) returns something 
863                 # negative, we ignore it. This happens on Solaris.
864                 AC_MSG_CHECKING(for minimal/maximal thread priority)
865                 AC_TRY_RUN([#include <pthread.h>
866                      int main () 
867                      { return sched_get_priority_min(SCHED_OTHER) < 0;}],
868                      [posix_priority_min="sched_get_priority_min(SCHED_OTHER)"
869                      posix_priority_max="sched_get_priority_max(SCHED_OTHER)"],
870                      [posix_priority_min=none])
871                 if test x"$posix_priority_min" = xnone; then
872                         AC_EGREP_CPP(PX_PRIO_MIN,[#include <pthread.h>
873                                 PX_PRIO_MIN],,[
874                                 posix_priority_min=PX_PRIO_MIN
875                                 posix_priority_max=PX_PRIO_MAX])
876                 fi
877                 if test x"$posix_priority_min" = xnone; then
878                         AC_EGREP_CPP(PRI_OTHER_MIN,[#include <pthread.h>
879                                 PRI_OTHER_MIN],,[
880                                 posix_priority_min=PRI_OTHER_MIN        
881                                 posix_priority_max=PRI_OTHER_MAX])
882                 fi
883                 if test x"$posix_priority_min" = xnone; then
884                         case $host in
885                                 *-*-solaris*)
886                                 posix_priority_min=1
887                                 posix_priority_max=127
888                                 ;;
889                         esac
890                 fi
891                 if test x"$posix_priority_min" = xnone; then
892                         AC_MSG_RESULT(none found)
893                         AC_MSG_WARN($POSIX_NO_PRIORITIES)
894                         posix_priority_min=1
895                         posix_priority_max=1
896                 else
897                         AC_MSG_RESULT($posix_priority_min/$posix_priority_max)
898                 fi
899                 AC_DEFINE_UNQUOTED(POSIX_MIN_PRIORITY,$posix_priority_min)
900                 AC_DEFINE_UNQUOTED(POSIX_MAX_PRIORITY,$posix_priority_max)
901                 posix_yield_func=none
902                 AC_MSG_CHECKING(for posix yield function)
903                 for yield_func in pthread_yield_np pthread_yield sched_yield \
904                                                         thr_yield; do
905                         AC_TRY_LINK([#include <pthread.h>],
906                                 [$yield_func()],
907                                 [posix_yield_func="$yield_func"
908                                 break])
909                 done            
910                 if test x"$posix_yield_func" = xnone; then
911                         AC_MSG_RESULT(none found)
912                         AC_MSG_WARN($POSIX_NO_YIELD)
913                         posix_yield_func="g_thread_sleep(1000)"
914                 else
915                         AC_MSG_RESULT($posix_yield_func)
916                         posix_yield_func="$posix_yield_func()"
917                 fi
918                 AC_DEFINE_UNQUOTED(POSIX_YIELD_FUNC,$posix_yield_func)
919         fi
920         LIBS="$glib_save_LIBS"
921         CFLAGS="$glib_save_CFLAGS"
922
923         # now spit out all the warnings.
924         if test "$ac_cv_func_getpwuid_r" != "yes"; then
925                 AC_MSG_WARN($FUNC_NO_GETPWUID_R)
926         fi
927         if test "$ac_cv_func_localtime_r" != "yes"; then
928                 AC_MSG_WARN($FUNC_NO_LOCALTIME_R)
929         fi
930 fi
931
932 AC_DEFINE_UNQUOTED(G_THREAD_SOURCE,"gthread-$have_threads.c")
933 AC_SUBST(G_THREAD_CFLAGS)
934 AC_SUBST(G_THREAD_LIBS)
935 AC_SUBST(G_THREAD_LIBS_EXTRA)
936
937 CFLAGS="$CFLAGS $G_THREAD_CFLAGS"
938
939 dnl **********************************************
940 dnl *** GDefaultMutex setup and initialization ***
941 dnl **********************************************
942 dnl
943 dnl if mutex_has_default = yes, we also got
944 dnl mutex_default_type, mutex_default_init and mutex_header_file
945 GLIB_IF_VAR_EQ(mutex_has_default, yes,
946         GLIB_SIZEOF([#include <$mutex_header_file>],
947                     $mutex_default_type,
948                     gmutex,
949                     )
950         GLIB_BYTE_CONTENTS([#include <$mutex_header_file>],
951                            $mutex_default_type,
952                            gmutex,
953                            $glib_cv_sizeof_gmutex,
954                            $mutex_default_init)
955         if test x"$have_threads" = xposix; then 
956                 GLIB_BYTE_CONTENTS([#define __USE_GNU
957 #include <$mutex_header_file>],
958                                    $mutex_default_type,
959                                    grecmutex,
960                                    $glib_cv_sizeof_gmutex,
961                                    PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP)
962         fi
963         ,
964 )
965
966
967 dnl ****************************************
968 dnl *** GLib POLL* compatibility defines ***
969 dnl ****************************************
970 GLIB_SYSDEFS(
971 [#include <sys/types.h>
972 #include <sys/poll.h>],
973         POLLIN:1 POLLOUT:4 POLLPRI:2 POLLERR:8 POLLHUP:16 POLLNVAL:32,
974         glibconfig-sysdefs.h,
975         =)
976
977
978 dnl ******************************
979 dnl *** output the whole stuff ***
980 dnl ******************************
981
982 AC_OUTPUT_COMMANDS([
983
984 ## Generate `glibconfig.h' in two cases
985 ## 1. `config.status' is run either explicitly, or via configure.
986 ##     Esp. not when it is run in `Makefile' to generate makefiles and
987 ##     config.h
988 ## 2. CONFIG_OTHER is set explicitly
989 ##
990 ## Case 1 is difficult.  We know that `automake' sets one of
991 ## CONFIG_FILES or CONFIG_HEADERS to empty.  This heuristic works
992 ## only when AM_CONFIG_HEADER is set, however.
993
994 if test -n "${CONFIG_FILES}" && test -n "${CONFIG_HEADERS}"; then
995   # Both CONFIG_FILES and CONFIG_HEADERS are non-empty ==> Case 1
996   CONFIG_OTHER=${CONFIG_OTHER:-glibconfig.h}
997 fi
998 case "$CONFIG_OTHER" in
999 *glibconfig.h*)
1000         echo creating glibconfig.h
1001         outfile=glibconfig.h-tmp
1002         cat > $outfile <<\_______EOF
1003 /* glibconfig.h
1004  *
1005  * This is a generated file.  Please modify `configure.in'
1006  */
1007
1008 #ifndef GLIBCONFIG_H
1009 #define GLIBCONFIG_H
1010
1011 #ifdef __cplusplus
1012 extern "C" {
1013 #endif /* __cplusplus */
1014
1015 _______EOF
1016
1017         if test x$glib_limits_h = xyes; then
1018           echo '#include <limits.h>' >> $outfile
1019         fi
1020         if test x$glib_float_h = xyes; then
1021           echo '#include <float.h>' >> $outfile
1022         fi
1023         if test x$glib_values_h = xyes; then
1024           echo '#include <values.h>' >> $outfile
1025         fi
1026         if test x$g_mutex_header_file != x; then
1027           echo '#include <'"$g_mutex_header_file"'>' >> $outfile
1028         fi
1029         if test x$glib_sys_poll_h = xyes; then
1030           echo '#define GLIB_HAVE_SYS_POLL_H' >> $outfile
1031         fi
1032
1033         cat >> $outfile <<_______EOF
1034
1035 #define G_MINFLOAT      $glib_mf
1036 #define G_MAXFLOAT      $glib_Mf
1037 #define G_MINDOUBLE     $glib_md
1038 #define G_MAXDOUBLE     $glib_Md
1039 #define G_MINSHORT      $glib_ms
1040 #define G_MAXSHORT      $glib_Ms
1041 #define G_MAXUSHORT     $glib_Mus
1042 #define G_MININT        $glib_mi
1043 #define G_MAXINT        $glib_Mi
1044 #define G_MAXUINT       $glib_Mui
1045 #define G_MINLONG       $glib_ml
1046 #define G_MAXLONG       $glib_Ml
1047 #define G_MAXULONG      $glib_Mul
1048
1049 _______EOF
1050
1051
1052         ### this should always be true in a modern C/C++ compiler
1053         cat >>$outfile <<_______EOF
1054 typedef signed char gint8;
1055 typedef unsigned char guint8;
1056 _______EOF
1057
1058
1059         if test -n "$gint16"; then
1060           cat >>$outfile <<_______EOF
1061 typedef signed $gint16 gint16;
1062 typedef unsigned $gint16 guint16;
1063 #define G_GINT16_FORMAT $gint16_format
1064 #define G_GUINT16_FORMAT $guint16_format
1065 _______EOF
1066         fi
1067
1068
1069         if test -n "$gint32"; then
1070           cat >>$outfile <<_______EOF
1071 typedef signed $gint32 gint32;
1072 typedef unsigned $gint32 guint32;
1073 #define G_GINT32_FORMAT $gint32_format
1074 #define G_GUINT32_FORMAT $guint32_format
1075 _______EOF
1076         fi
1077
1078
1079         if test -n "$gint64"; then
1080           cat >>$outfile <<_______EOF
1081 ${glib_warning_guard}#define G_HAVE_GINT64 1
1082
1083 ${glib_extension}typedef signed $gint64 gint64;
1084 ${glib_extension}typedef unsigned $gint64 guint64;
1085
1086 #define G_GINT64_FORMAT $gint64_format
1087 #define G_GUINT64_FORMAT $guint64_format
1088 #define G_GINT64_CONSTANT(val)  $gint64_constant
1089 _______EOF
1090         fi
1091
1092
1093         if test -z "$glib_unknown_void_p"; then
1094           cat >>$outfile <<_______EOF
1095
1096 #define GPOINTER_TO_INT(p)      ((gint)  ${glib_gpi_cast} (p))
1097 #define GPOINTER_TO_UINT(p)     ((guint) ${glib_gpui_cast} (p))
1098
1099 #define GINT_TO_POINTER(i)      ((gpointer) ${glib_gpi_cast} (i))
1100 #define GUINT_TO_POINTER(u)     ((gpointer) ${glib_gpui_cast} (u))
1101 _______EOF
1102         else
1103           echo '#error SIZEOF_VOID_P unknown - This should never happen' >>$outfile
1104         fi
1105
1106
1107
1108         cat >>$outfile <<_______EOF
1109 $glib_atexit
1110 $glib_memmove
1111 $glib_defines
1112
1113 $glib_vacopy
1114
1115 #ifdef  __cplusplus
1116 #define G_HAVE_INLINE   1
1117 #else   /* !__cplusplus */
1118 $glib_inline
1119 #endif  /* !__cplusplus */
1120 _______EOF
1121
1122         echo >>$outfile
1123         if test x$g_mutex_has_default = xyes; then
1124                 cat >>$outfile <<_______EOF
1125 $g_enable_threads_def G_THREADS_ENABLED
1126 #define G_THREADS_IMPL_$g_threads_impl_def
1127 typedef struct _GStaticMutex GStaticMutex;
1128 struct _GStaticMutex
1129 {
1130   struct _GMutex *runtime_mutex;
1131   union {
1132     char   pad[$g_mutex_sizeof];
1133     double dummy_double;
1134     void  *dummy_pointer;
1135     long   dummy_long;
1136   } aligned_pad_u;
1137 };
1138 #define G_STATIC_MUTEX_INIT     { NULL, { { $g_mutex_contents} } }
1139 #define g_static_mutex_get_mutex(mutex) \
1140   (g_thread_use_default_impl ? ((GMutex*) &((mutex)->aligned_pad_u)) : \
1141    g_static_mutex_get_mutex_impl (&((mutex)->runtime_mutex)))
1142 _______EOF
1143         else
1144                 cat >>$outfile <<_______EOF
1145 $g_enable_threads_def G_THREADS_ENABLED
1146 #define G_THREADS_IMPL_$g_threads_impl_def
1147 typedef struct _GMutex* GStaticMutex;
1148 #define G_STATIC_MUTEX_INIT NULL
1149 #define g_static_mutex_get_mutex(mutex) (g_static_mutex_get_mutex_impl (mutex))
1150 _______EOF
1151         fi
1152         if test x$g_recmutex_contents != xno -a \
1153                 x$g_recmutex_contents != x; then
1154                 # the definition of GStaticRecMutex is not done via 
1155                 # typedef GStaticMutex GStaticRecMutex to avoid silent
1156                 # compilation, when a GStaticRecMutex is used where a
1157                 # GStaticMutex should have been used and vice versa,
1158                 # because that micht fail on other platforms.
1159                 cat >>$outfile <<_______EOF
1160 typedef struct _GStaticRecMutex GStaticRecMutex;
1161 struct _GStaticRecMutex
1162 {
1163   struct _GMutex *runtime_mutex;
1164   union {
1165     char   pad[$g_mutex_sizeof];
1166     double dummy_double;
1167     void  *dummy_pointer;
1168     long   dummy_long;
1169   } aligned_pad_u;
1170 };
1171 #define G_STATIC_REC_MUTEX_INIT { NULL, { { $g_recmutex_contents} } }
1172 #define  g_static_rec_mutex_lock(mutex) g_static_mutex_lock (mutex)
1173 #define  g_static_rec_mutex_trylock(mutex) g_static_mutex_trylock (mutex)
1174 #define  g_static_rec_mutex_unlock(mutex) g_static_mutex_unlock (mutex)
1175 #define  g_static_rec_mutex_get_mutex(mutex) (mutex)
1176 _______EOF
1177         fi
1178
1179         echo >>$outfile
1180         g_bit_sizes="16 32"
1181         if test -n "$gint64"; then
1182           g_bit_sizes="$g_bit_sizes 64"
1183         fi
1184         for bits in $g_bit_sizes; do
1185           cat >>$outfile <<_______EOF
1186 #define GINT${bits}_TO_${g_bs_native}(val)      ((gint${bits}) (val))
1187 #define GUINT${bits}_TO_${g_bs_native}(val)     ((guint${bits}) (val))
1188 #define GINT${bits}_TO_${g_bs_alien}(val)       ((gint${bits}) GUINT${bits}_SWAP_LE_BE (val))
1189 #define GUINT${bits}_TO_${g_bs_alien}(val)      (GUINT${bits}_SWAP_LE_BE (val))
1190 _______EOF
1191         done
1192
1193         cat >>$outfile <<_______EOF
1194 #define GLONG_TO_LE(val)        ((glong) GINT${glongbits}_TO_LE (val))
1195 #define GULONG_TO_LE(val)       ((gulong) GUINT${glongbits}_TO_LE (val))
1196 #define GLONG_TO_BE(val)        ((glong) GINT${glongbits}_TO_BE (val))
1197 #define GULONG_TO_BE(val)       ((gulong) GUINT${glongbits}_TO_BE (val))
1198 #define GINT_TO_LE(val)         ((gint) GINT${gintbits}_TO_LE (val))
1199 #define GUINT_TO_LE(val)        ((guint) GUINT${gintbits}_TO_LE (val))
1200 #define GINT_TO_BE(val)         ((gint) GINT${gintbits}_TO_BE (val))
1201 #define GUINT_TO_BE(val)        ((guint) GUINT${gintbits}_TO_BE (val))
1202 #define G_BYTE_ORDER $g_byte_order
1203
1204 _______EOF
1205
1206         if test -r glibconfig-sysdefs.h; then
1207           cat glibconfig-sysdefs.h >>$outfile
1208         fi
1209
1210         cat >>$outfile <<_______EOF
1211 #ifdef __cplusplus
1212 }
1213 #endif /* __cplusplus */
1214
1215 #endif /* GLIBCONFIG_H */
1216 _______EOF
1217
1218
1219         if cmp -s $outfile glibconfig.h; then
1220           echo glibconfig.h is unchanged
1221           rm -f $outfile
1222         else
1223           mv $outfile glibconfig.h
1224         fi ;;
1225 esac
1226 ],[
1227
1228 # Note that if two cases are the same, case goes with the first one.
1229 # Note also that this is inside an AC_OUTPUT_COMMAND.  We do not depend
1230 # on variable expansion in case labels.  Look at the generated config.status
1231 # for a hint.
1232
1233 case xyes in
1234 x$ac_cv_header_float_h)
1235   glib_float_h=yes
1236   glib_mf=FLT_MIN glib_Mf=FLT_MAX
1237   glib_md=DBL_MIN glib_Md=DBL_MAX
1238   ;;
1239 x$ac_cv_header_values_h)
1240   glib_values_h=yes
1241   glib_mf=MINFLOAT  glib_Mf=MAXFLOAT
1242   glib_md=MINDOUBLE glib_Md=MAXDOUBLE
1243   ;;
1244 esac
1245
1246 case xyes in
1247 x$ac_cv_header_limits_h)
1248   glib_limits_h=yes
1249   glib_ms=SHRT_MIN glib_Ms=SHRT_MAX glib_Mus=USHRT_MAX
1250   glib_mi=INT_MIN  glib_Mi=INT_MAX  glib_Mui=UINT_MAX
1251   glib_ml=LONG_MIN glib_Ml=LONG_MAX glib_Mul=ULONG_MAX
1252   ;;
1253 x$ac_cv_header_values_h)
1254   glib_values_h=yes
1255   glib_ms=MINSHORT glib_Ms=MAXSHORT glib_Mus="(((gushort)G_MAXSHORT)*2+1)"
1256   glib_mi=MININT   glib_Mi=MAXINT   glib_Mui="(((guint)G_MAXINT)*2+1)"
1257   glib_ml=MINLONG  glib_Ml=MAXLONG  glib_Mul="(((gulong)G_MAXLONG)*2+1)"
1258   ;;
1259 esac
1260
1261 if test x$ac_cv_header_sys_poll_h = xyes ; then
1262   glib_sys_poll_h=yes
1263 fi
1264
1265 case 2 in
1266 $ac_cv_sizeof_short)            
1267   gint16=short
1268   gint16_format='"hi"'
1269   guint16_format='"hu"'
1270   ;;
1271 $ac_cv_sizeof_int)              
1272   gint16=int
1273   gint16_format='"i"'
1274   guint16_format='"u"'
1275   ;;
1276 esac
1277 case 4 in
1278 $ac_cv_sizeof_short)            
1279   gint32=short
1280   gint32_format='"hi"'
1281   guint32_format='"hu"'
1282   ;;
1283 $ac_cv_sizeof_int)              
1284   gint32=int
1285   gint32_format='"i"'
1286   guint32_format='"u"'
1287   ;;
1288 $ac_cv_sizeof_long)             
1289   gint32=long
1290   gint32_format='"li"'
1291   guint32_format='"lu"'
1292   ;;
1293 esac
1294 case 8 in
1295 $ac_cv_sizeof_int)
1296   gint64=int
1297   gint64_format='"i"'
1298   guint64_format='"u"'
1299   glib_extension=
1300   glib_warning_guard=
1301   gint64_constant='(val)'
1302   ;;
1303 $ac_cv_sizeof_long)
1304   gint64=long
1305   gint64_format='"li"'
1306   guint64_format='"lu"'
1307   glib_extension=
1308   glib_warning_guard=
1309   gint64_constant='(val##L)'
1310   ;;
1311 $ac_cv_sizeof_long_long)
1312   gint64='long long'
1313   gint64_format='"'$glib_cv_long_long_format'i"'
1314   guint64_format='"'$glib_cv_long_long_format'u"'
1315   glib_extension='G_GNUC_EXTENSION '
1316   glib_warning_guard="
1317 #if defined (__GNUC__) && __GNUC__ >= 2 && __GNUC_MINOR__ >= 8
1318 #  define G_GNUC_EXTENSION __extension__
1319 #else
1320 #  define G_GNUC_EXTENSION
1321 #endif
1322
1323 "
1324   gint64_constant='(G_GNUC_EXTENSION (val##LL))'
1325   ;;
1326 esac
1327
1328 gintbits=`expr $ac_cv_sizeof_int \* 8`
1329 glongbits=`expr $ac_cv_sizeof_long \* 8`
1330
1331
1332 case $ac_cv_sizeof_void_p in
1333 $ac_cv_sizeof_int)      glib_gpi_cast=''        glib_gpui_cast=''         ;;
1334 $ac_cv_sizeof_long)     glib_gpi_cast='(glong)' glib_gpui_cast='(gulong)' ;;
1335 *)                      glib_unknown_void_p=yes ;;
1336 esac
1337
1338
1339 case xyes in
1340 x$ac_cv_func_atexit)
1341   glib_atexit="
1342 #ifdef NeXT /* @#%@! NeXTStep */
1343 # define g_ATEXIT(proc) (!atexit (proc))
1344 #else
1345 # define g_ATEXIT(proc) (atexit (proc))
1346 #endif"
1347   ;;
1348 x$ac_cv_func_on_exit)
1349   glib_atexit="
1350 #define g_ATEXIT(proc)  (on_exit ((void (*)(int, void*))(proc), NULL))"
1351   ;;
1352 esac
1353
1354 case xyes in
1355 x$ac_cv_func_memmove)
1356   glib_memmove='
1357 #define g_memmove(d,s,n) G_STMT_START { memmove ((d), (s), (n)); } G_STMT_END'
1358   ;;
1359 x$glib_cv_working_bcopy)
1360   glib_memmove="
1361 /* memmove isn't available, but bcopy can copy overlapping memory regions */
1362 #define g_memmove(d,s,n) G_STMT_START { bcopy ((s), (d), (n)); } G_STMT_END"
1363   ;;
1364 *)  
1365   glib_memmove="
1366 /* memmove isn't found and bcopy can't copy overlapping memory regions, 
1367  * so we have to roll our own copy routine. */
1368 void g_memmove (void* dest, const void * src, unsigned long len);"
1369   ;;
1370 esac
1371
1372 glib_defines="
1373 #define GLIB_MAJOR_VERSION $GLIB_MAJOR_VERSION
1374 #define GLIB_MINOR_VERSION $GLIB_MINOR_VERSION
1375 #define GLIB_MICRO_VERSION $GLIB_MICRO_VERSION
1376 "
1377
1378 case xyes in
1379 x$glib_cv_va_copy)      glib_vacopy='#define G_VA_COPY  va_copy' ;;
1380 x$glib_cv___va_copy)    glib_vacopy='#define G_VA_COPY  __va_copy' ;;
1381 *)                      glib_vacopy=''
1382 esac
1383
1384 if test x$glib_cv_va_val_copy = xno; then
1385   glib_vacopy="\$glib_vacopy
1386 #define G_VA_COPY_AS_ARRAY 1"
1387 fi
1388
1389 if test x$glib_cv_hasinline = xyes; then
1390     glib_inline='#define G_HAVE_INLINE 1'
1391 fi
1392 if test x$glib_cv_has__inline = xyes; then
1393     glib_inline="\$glib_inline
1394 #define G_HAVE___INLINE 1"
1395 fi
1396 if test x$glib_cv_has__inline__ = xyes; then
1397     glib_inline="\$glib_inline
1398 #define G_HAVE___INLINE__ 1"
1399 fi
1400
1401 case xyes in
1402 x$ac_cv_c_bigendian)
1403   g_byte_order=G_BIG_ENDIAN
1404   g_bs_native=BE
1405   g_bs_alien=LE
1406   ;;
1407 *)
1408   g_byte_order=G_LITTLE_ENDIAN
1409   g_bs_native=LE
1410   g_bs_alien=BE
1411   ;;
1412 esac
1413
1414 case x$enable_threads in
1415 xyes)   g_enable_threads_def="#define";;
1416 *)      g_enable_threads_def="#undef ";;
1417 esac
1418
1419 g_threads_impl_def=$g_threads_impl
1420
1421 g_mutex_has_default="$mutex_has_default"
1422 g_mutex_sizeof="$glib_cv_sizeof_gmutex"
1423 g_mutex_contents="$glib_cv_byte_contents_gmutex"
1424 g_recmutex_contents="$glib_cv_byte_contents_grecmutex"
1425
1426 if test "x$glib_native_beos" = "xyes"; then
1427     glib_native_beos_def="\$glib_native_beos_def
1428 #define GLIB_NATIVE_BEOS 1"
1429 fi           
1430 ])
1431
1432 AC_OUTPUT([
1433 glib.spec
1434 Makefile
1435 glib-config
1436 gmodule/gmoduleconf.h
1437 gmodule/Makefile
1438 gthread/Makefile
1439 docs/Makefile
1440 tests/Makefile
1441 ],[case "$CONFIG_FILES" in
1442 *glib-config*)chmod +x glib-config;;
1443 esac
1444 echo ""
1445 echo " *** IMPORTANT *** "
1446 echo ""
1447 echo "This is a development version of GLib.  You should be using a stable"
1448 echo "version, which is available at ftp://ftp.gtk.org/pub/gtk/v1.2/.  The"
1449 echo "version you just configured is meant for developers of GLib only:"
1450 echo ""
1451 echo "  * You should not base stable software on this version of GLib."
1452 echo "  * GNOME developers should use a stable version of GLib."
1453 echo ""
1454 echo "Distributions should *NOT* ship a development package of this GLib."
1455 echo "Do not ship the headers and do not ship the glib-config script.  These"
1456 echo "things will conflict with the stable 1.2 series.  Package only enough"
1457 echo "to satisfy the requirements of some other package.  Package only the"
1458 echo "library itself.  Doing otherwise will do no favors to the community."
1459 echo ""
1460 echo "If you install this version of GLib, we strongly recommend that you"
1461 echo "install it in a different prefix than GLib 1.2.  Use --prefix as an"
1462 echo "argument to configure to do this.  Otherwise, you will not be able to"
1463 echo "do development with GLib 1.2 any longer."
1464 echo ""
1465 echo " *** You should be using GLib 1.2 instead. ***"
1466 ])
1467