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