1 dnl ***********************************
2 dnl *** include special GLib macros ***
3 dnl ***********************************
4 builtin(include, acglib.m4)dnl
6 # require autoconf 2.13
9 # Process this file with autoconf to produce a configure script.
12 # Save this value here, since automake will set cflags later
13 cflags_set=${CFLAGS+set}
15 # we rewrite this file
16 rm -f glibconfig-sysdefs.h
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
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.
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.
39 GLIB_VERSION=$GLIB_MAJOR_VERSION.$GLIB_MINOR_VERSION.$GLIB_MICRO_VERSION
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)
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`
62 AM_INIT_AUTOMAKE($PACKAGE, $VERSION, no-define)
64 # Specify a configuration file
65 AM_CONFIG_HEADER(config.h)
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)
73 dnl Initialize libtool
76 dnl Initialize maintainer mode
81 AC_MSG_CHECKING(for the BeOS)
84 AC_DEFINE(GLIB_NATIVE_BEOS, 1)
85 glib_native_beos="yes"
86 AC_MSG_RESULT([$glib_native_beos])
90 AC_MSG_RESULT($glib_native_beos)
94 dnl figure debugging default, prior to $ac_help setup
96 AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)dnl
97 if test `expr $GLIB_MINOR_VERSION \% 2` = 1 ; then
100 debug_default=minimum
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]],
110 AC_ARG_ENABLE(threads, [ --enable-threads turn on basic thread support [default=yes]
111 ([=no] will override --with-threads)],,enable_threads=yes)
113 if test "x$enable_threads" != "xyes"; then
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)
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)
135 if test "x$enable_debug" = "xyes"; then
136 test "$cflags_set" = set || CFLAGS="$CFLAGS -g"
137 GLIB_DEBUG_FLAGS="-DG_ENABLE_DEBUG"
139 if test "x$enable_debug" = "xno"; then
140 GLIB_DEBUG_FLAGS="-DG_DISABLE_ASSERT -DG_DISABLE_CHECKS"
144 AC_DEFINE_UNQUOTED(G_COMPILED_WITH_DEBUGGING, "${enable_debug}")
146 # Checks for programs.
152 if test "x$GCC" = "xyes"; then
154 *[\ \ ]-Wall[\ \ ]*) ;;
155 *) CFLAGS="$CFLAGS -Wall" ;;
158 if test "x$enable_ansi" = "xyes"; then
160 *[\ \ ]-ansi[\ \ ]*) ;;
161 *) CFLAGS="$CFLAGS -ansi" ;;
165 *[\ \ ]-pedantic[\ \ ]*) ;;
166 *) CFLAGS="$CFLAGS -pedantic" ;;
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])
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),
185 CFLAGS=$glib_save_CFLAGS
187 [No ANSI prototypes found in library. (-std1 didn't work.)])
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),
201 CFLAGS=$glib_save_CFLAGS
202 AC_MSG_WARN([Could not determine POSIX flag. (-posix didn't work.)])))
204 # Checks for header files.
207 # Checks for library functions.
210 AC_CHECK_FUNCS(atexit on_exit)
212 AC_CHECK_SIZEOF(char)
213 AC_CHECK_SIZEOF(short)
214 AC_CHECK_SIZEOF(long)
216 AC_CHECK_SIZEOF(void *)
217 AC_CHECK_SIZEOF(long long)
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>
226 long long b, a = -0x3AFAFAFAFAFAFAFALL;
228 sprintf (buffer, "%llu", a);
229 sscanf (buffer, "%llu", &b);
233 glib_cv_long_long_format=ll,
234 glib_cv_long_long_format=q)])
235 AC_MSG_RESULT(%${glib_cv_long_long_format}i)
238 dnl long doubles were not used, and a portability problem
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,[
248 __inline int foo () { return 0; }
249 int main () { return foo (); }
251 glib_cv_has__inline=yes
253 glib_cv_has__inline=no
256 AC_MSG_RESULT($glib_cv_has__inline)
257 case x$glib_cv_has__inline in
258 xyes) AC_DEFINE(G_HAVE___INLINE)
260 AC_MSG_CHECKING(for __inline__)
261 AC_CACHE_VAL(glib_cv_has__inline__,[
263 __inline__ int foo () { return 0; }
264 int main () { return foo (); }
266 glib_cv_has__inline__=yes
268 glib_cv_has__inline__=no
271 AC_MSG_RESULT($glib_cv_has__inline__)
272 case x$glib_cv_has__inline__ in
273 xyes) AC_DEFINE(G_HAVE___INLINE__)
275 AC_MSG_CHECKING(for inline)
276 AC_CACHE_VAL(glib_cv_hasinline,[
278 inline int foo () { return 0; }
279 int main () { return foo (); }
281 glib_cv_hasinline=yes
286 AC_MSG_RESULT($glib_cv_hasinline)
287 case x$glib_cv_hasinline in
288 xyes) AC_DEFINE(G_HAVE_INLINE)
291 dnl for bytesex stuff
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))
306 # Check for some functions
307 AC_CHECK_FUNCS(lstat strerror strsignal memmove vsnprintf strcasecmp strncasecmp poll)
309 # Check for sys_errlist
310 AC_MSG_CHECKING(for sys_errlist)
312 extern char *sys_errlist[];
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)
321 # Check for sys_siglist
322 AC_MSG_CHECKING(for sys_siglist)
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)
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)
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])
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])
359 dnl *** check for sane realloc() ***
360 AC_MSG_CHECKING(whether realloc (NULL,) will work)
361 AC_CACHE_VAL(glib_cv_sane_realloc,[
365 return realloc (0, sizeof (int)) == 0;
367 glib_cv_sane_realloc=yes
368 AC_DEFINE(REALLOC_0_WORKS)
370 glib_cv_sane_realloc=no
373 AC_MSG_RESULT($glib_cv_sane_realloc)
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,[
385 void f (int i, ...) {
386 va_list args1, args2;
388 va_copy (args2, args1);
389 if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
391 va_end (args1); va_end (args2);
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,[
407 void f (int i, ...) {
408 va_list args1, args2;
410 __va_copy (args2, args1);
411 if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
413 va_end (args1); va_end (args2);
419 glib_cv___va_copy=yes
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,[
429 void f (int i, ...) {
430 va_list args1, args2;
433 if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
435 va_end (args1); va_end (args2);
441 glib_cv_va_val_copy=yes
443 glib_cv_va_val_copy=no
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)
452 if test "x$glib_cv_va_val_copy" = "xno"; then
453 AC_DEFINE(G_VA_COPY_AS_ARRAY)
455 AC_MSG_RESULT($glib_cv_va_val_copy)
458 dnl ***********************
459 dnl *** g_module checks ***
460 dnl ***********************
463 G_MODULE_PLUGIN_LIBS=
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,
472 G_MODULE_IMPL=G_MODULE_IMPL_DL
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
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,
490 G_MODULE_IMPL=G_MODULE_IMPL_DL
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"
507 LDFLAGS=$SAVED_LDFLAGS
508 AC_MSG_RESULT($G_MODULE_LDFLAGS)
509 if test "x$G_MODULE_LDFLAGS" = "xnone"; then
512 AC_CHECK_LIB(dld, shl_load,
514 G_MODULE_IMPL=G_MODULE_IMPL_DLD
517 dnl *** additional checks for G_MODULE_IMPL_DL
518 if test "$G_MODULE_IMPL" = "G_MODULE_IMPL_DL"; then
521 G_MODULE_LDFLAGS='-rdynamic'
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,[
533 int glib_underscore_test (void) { return 42; }
535 void *f1 = (void*)0, *f2 = (void*)0, *handle;
536 handle = dlopen ((void*)0, 0);
538 f1 = dlsym (handle, "glib_underscore_test");
539 f2 = dlsym (handle, "_glib_underscore_test");
540 } return (!f2 || f1);
545 rm -f plugin.c plugin.o plugin.lo
547 AC_MSG_RESULT($glib_cv_uscore)
548 if test "x$glib_cv_uscore" = "xyes"; then
549 G_MODULE_NEED_USCORE=1
551 G_MODULE_NEED_USCORE=0
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)
561 dnl *** done, have e got an implementation?
562 if test -z "$G_MODULE_IMPL"; then
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)
575 dnl ***********************
576 dnl *** g_thread checks ***
577 dnl ***********************
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
583 want_threads=$with_threads
586 if test "x$enable_threads" = "xno"; then
589 if test "x$want_threads" = "xnone"; then
593 dnl error and warning message
594 dnl *************************
596 THREAD_NO_IMPLEMENTATION="You do not have any known thread system on your
597 computer. GLib will not have a default thread implementation."
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."
604 LIBS_NOT_FOUND_1="I can't find the libraries for the thread implementation
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."
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."
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."
619 dnl determination of thread implementation
620 dnl ***************************************
623 if test "x$want_threads" = xyes || test "x$want_threads" = xsolaris; then
626 AC_CHECK_LIB(thread, cond_init, have_threads=solaris)
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_]],
642 if test "x$have_threads" = xnone; then
643 AC_EGREP_HEADER([[^a-zA-Z_]pthread_attr_create[^a-zA-Z_]],
647 CPPFLAGS="$glib_save_CPPFLAGS"
650 AC_MSG_CHECKING(for thread implementation)
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)
656 AC_MSG_RESULT($have_threads)
660 dnl determination of G_THREAD_LIBS
661 dnl ******************************
668 case $have_threads in
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
679 add_thread_lib="-l$thread_lib"
680 IN=" in -l$thread_lib"
683 LIBS="$glib_save_LIBS $add_thread_lib"
685 AC_MSG_CHECKING(for pthread_create$IN)
686 AC_TRY_LINK([#include <pthread.h>],
687 [pthread_create(NULL,NULL,NULL,NULL)],
689 G_THREAD_LIBS="$add_thread_lib"
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"
704 AC_SUBST(GTHREAD_COMPILE_IMPL_DEFINES)
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"
716 g_threads_impl="NONE"
719 g_threads_impl="NONE"
724 if test "x$G_THREAD_LIBS" = xerror; then
725 AC_MSG_ERROR($LIBS_NOT_FOUND_1$have_threads$LIBS_NOT_FOUND_2)
730 G_THREAD_LIBS="-lbe -lroot -lglib "
731 G_THREAD_LIBS_EXTRA="-L\$(top_builddir_full)/.libs"
738 AC_MSG_CHECKING(thread related libraries)
739 AC_MSG_RESULT($G_THREAD_LIBS)
741 dnl determination of G_THREAD_CFLAGS
742 dnl ********************************
744 if test x"$enable_threads" = xyes; then
746 G_THREAD_CFLAGS="$G_THREAD_CFLAGS -D_REENTRANT" # good default guess
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"
756 G_THREAD_CFLAGS="$G_THREAD_CFLAGS -D_THREAD_SAFE"
758 # FreeBSD 2.2.x shiped with gcc 2.7.2.x, which doesn't support
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, ,
770 AC_MSG_WARN($FLAG_DOES_NOT_WORK))
771 CPPFLAGS=$old_CPPFLAGS
773 AC_MSG_CHECKING(thread related cflags)
775 AC_MSG_RESULT($G_THREAD_CFLAGS)
780 dnl check for mt safe function variants and some posix functions
781 dnl ************************************************************
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*,
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
806 AC_DEFINE(HAVE_GETPWUID_R)
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
816 AC_TRY_COMPILE([#include <pwd.h>],
817 [getpwuid_r(0, NULL, NULL, 0);],
820 AC_DEFINE(HAVE_GETPWUID_R_POSIX)])
823 LIBS="$LIBS $G_THREAD_LIBS"
824 if test x"$have_threads" = xposix; then
825 GLIB_SIZEOF([#include <pthread.h>],
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)],
834 AC_DEFINE(HAVE_PTHREAD_ATTR_SETSTACKSIZE)],
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>
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>
848 posix_priority_min=PX_PRIO_MIN
849 posix_priority_max=PX_PRIO_MAX])
851 if test x"$posix_priority_min" = xnone; then
852 AC_EGREP_CPP(PRI_OTHER_MIN,[#include <pthread.h>
854 posix_priority_min=PRI_OTHER_MIN
855 posix_priority_max=PRI_OTHER_MAX])
857 if test x"$posix_priority_min" = xnone; then
861 posix_priority_max=127
865 if test x"$posix_priority_min" = xnone; then
866 AC_MSG_RESULT(none found)
867 AC_MSG_WARN($POSIX_NO_PRIORITIES)
871 AC_MSG_RESULT($posix_priority_min/$posix_priority_max)
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 \
879 AC_TRY_LINK([#include <pthread.h>],
881 [posix_yield_func="$yield_func"
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)"
889 AC_MSG_RESULT($posix_yield_func)
890 posix_yield_func="$posix_yield_func()"
892 AC_DEFINE_UNQUOTED(POSIX_YIELD_FUNC,$posix_yield_func)
894 LIBS="$glib_save_LIBS"
895 CFLAGS="$glib_save_CFLAGS"
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)
901 if test "$ac_cv_func_localtime_r" != "yes"; then
902 AC_MSG_WARN($FUNC_NO_LOCALTIME_R)
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)
911 CFLAGS="$CFLAGS $G_THREAD_CFLAGS"
913 dnl **********************************************
914 dnl *** GDefaultMutex setup and initialization ***
915 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>],
924 GLIB_BYTE_CONTENTS([#include <$mutex_header_file>],
927 $glib_cv_sizeof_gmutex,
929 if test x"$have_threads" = xposix; then
930 GLIB_BYTE_CONTENTS([#define __USE_GNU
931 #include <$mutex_header_file>],
934 $glib_cv_sizeof_gmutex,
935 PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP)
941 dnl ****************************************
942 dnl *** GLib POLL* compatibility defines ***
943 dnl ****************************************
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,
952 dnl ******************************
953 dnl *** output the whole stuff ***
954 dnl ******************************
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
962 ## 2. CONFIG_OTHER is set explicitly
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.
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}
972 case "$CONFIG_OTHER" in
974 echo creating glibconfig.h
975 outfile=glibconfig.h-tmp
976 cat > $outfile <<\_______EOF
979 * This is a generated file. Please modify `configure.in'
987 #endif /* __cplusplus */
991 if test x$glib_limits_h = xyes; then
992 echo '#include <limits.h>' >> $outfile
994 if test x$glib_float_h = xyes; then
995 echo '#include <float.h>' >> $outfile
997 if test x$glib_values_h = xyes; then
998 echo '#include <values.h>' >> $outfile
1000 if test x$g_mutex_header_file != x; then
1001 echo '#include <'"$g_mutex_header_file"'>' >> $outfile
1003 if test x$glib_sys_poll_h = xyes; then
1004 echo '#define GLIB_HAVE_SYS_POLL_H' >> $outfile
1007 cat >> $outfile <<_______EOF
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
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;
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
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
1053 if test -n "$gint64"; then
1054 cat >>$outfile <<_______EOF
1055 ${glib_warning_guard}#define G_HAVE_GINT64 1
1057 ${glib_extension}typedef signed $gint64 gint64;
1058 ${glib_extension}typedef unsigned $gint64 guint64;
1060 #define G_GINT64_FORMAT $gint64_format
1061 #define G_GUINT64_FORMAT $guint64_format
1062 #define G_GINT64_CONSTANT(val) $gint64_constant
1067 if test -z "$glib_unknown_void_p"; then
1068 cat >>$outfile <<_______EOF
1070 #define GPOINTER_TO_INT(p) ((gint) ${glib_gpi_cast} (p))
1071 #define GPOINTER_TO_UINT(p) ((guint) ${glib_gpui_cast} (p))
1073 #define GINT_TO_POINTER(i) ((gpointer) ${glib_gpi_cast} (i))
1074 #define GUINT_TO_POINTER(u) ((gpointer) ${glib_gpui_cast} (u))
1077 echo '#error SIZEOF_VOID_P unknown - This should never happen' >>$outfile
1082 cat >>$outfile <<_______EOF
1090 #define G_HAVE_INLINE 1
1091 #else /* !__cplusplus */
1093 #endif /* !__cplusplus */
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
1104 struct _GMutex *runtime_mutex;
1106 char pad[$g_mutex_sizeof];
1107 double dummy_double;
1108 void *dummy_pointer;
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)))
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))
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
1137 struct _GMutex *runtime_mutex;
1139 char pad[$g_mutex_sizeof];
1140 double dummy_double;
1141 void *dummy_pointer;
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)
1155 if test -n "$gint64"; then
1156 g_bit_sizes="$g_bit_sizes 64"
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))
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
1180 if test -r glibconfig-sysdefs.h; then
1181 cat glibconfig-sysdefs.h >>$outfile
1184 cat >>$outfile <<_______EOF
1187 #endif /* __cplusplus */
1189 #endif /* GLIBCONFIG_H */
1193 if cmp -s $outfile glibconfig.h; then
1194 echo glibconfig.h is unchanged
1197 mv $outfile glibconfig.h
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
1208 x$ac_cv_header_float_h)
1210 glib_mf=FLT_MIN glib_Mf=FLT_MAX
1211 glib_md=DBL_MIN glib_Md=DBL_MAX
1213 x$ac_cv_header_values_h)
1215 glib_mf=MINFLOAT glib_Mf=MAXFLOAT
1216 glib_md=MINDOUBLE glib_Md=MAXDOUBLE
1221 x$ac_cv_header_limits_h)
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
1227 x$ac_cv_header_values_h)
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)"
1235 if test x$ac_cv_header_sys_poll_h = xyes ; then
1240 $ac_cv_sizeof_short)
1242 gint16_format='"hi"'
1243 guint16_format='"hu"'
1248 guint16_format='"u"'
1252 $ac_cv_sizeof_short)
1254 gint32_format='"hi"'
1255 guint32_format='"hu"'
1260 guint32_format='"u"'
1264 gint32_format='"li"'
1265 guint32_format='"lu"'
1272 guint64_format='"u"'
1275 gint64_constant='(val)'
1279 gint64_format='"li"'
1280 guint64_format='"lu"'
1283 gint64_constant='(val##L)'
1285 $ac_cv_sizeof_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__
1294 # define G_GNUC_EXTENSION
1298 gint64_constant='(G_GNUC_EXTENSION (val##LL))'
1302 gintbits=`expr $ac_cv_sizeof_int \* 8`
1303 glongbits=`expr $ac_cv_sizeof_long \* 8`
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 ;;
1314 x$ac_cv_func_atexit)
1316 #ifdef NeXT /* @#%@! NeXTStep */
1317 # define g_ATEXIT(proc) (!atexit (proc))
1319 # define g_ATEXIT(proc) (atexit (proc))
1322 x$ac_cv_func_on_exit)
1324 #define g_ATEXIT(proc) (on_exit ((void (*)(int, void*))(proc), NULL))"
1329 x$ac_cv_func_memmove)
1331 #define g_memmove(d,s,n) G_STMT_START { memmove ((d), (s), (n)); } G_STMT_END'
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"
1343 #define GLIB_MAJOR_VERSION $GLIB_MAJOR_VERSION
1344 #define GLIB_MINOR_VERSION $GLIB_MINOR_VERSION
1345 #define GLIB_MICRO_VERSION $GLIB_MICRO_VERSION
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' ;;
1354 if test x$glib_cv_va_val_copy = xno; then
1355 glib_vacopy="\$glib_vacopy
1356 #define G_VA_COPY_AS_ARRAY 1"
1359 if test x$glib_cv_hasinline = xyes; then
1360 glib_inline='#define G_HAVE_INLINE 1'
1362 if test x$glib_cv_has__inline = xyes; then
1363 glib_inline="\$glib_inline
1364 #define G_HAVE___INLINE 1"
1366 if test x$glib_cv_has__inline__ = xyes; then
1367 glib_inline="\$glib_inline
1368 #define G_HAVE___INLINE__ 1"
1372 x$ac_cv_c_bigendian)
1373 g_byte_order=G_BIG_ENDIAN
1378 g_byte_order=G_LITTLE_ENDIAN
1384 case x$enable_threads in
1385 xyes) g_enable_threads_def="#define";;
1386 *) g_enable_threads_def="#undef ";;
1389 g_threads_impl_def=$g_threads_impl
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"
1396 if test "x$glib_native_beos" = "xyes"; then
1397 glib_native_beos_def="\$glib_native_beos_def
1398 #define GLIB_NATIVE_BEOS 1"
1406 gmodule/gmoduleconf.h
1411 ],[case "$CONFIG_FILES" in
1412 *glib-config*)chmod +x glib-config;;
1415 echo " *** IMPORTANT *** "
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:"
1421 echo " * You should not base stable software on this version of GLib."
1422 echo " * GNOME developers should use a stable version of GLib."
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."
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."
1435 echo " *** You should be using GLib 1.2 instead. ***"