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