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