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