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