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