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