1 dnl ***********************************
2 dnl *** include special GLib macros ***
3 dnl ***********************************
4 builtin(include, acglib.m4)dnl
5 builtin(include, glib/libcharset/codeset.m4)dnl
6 builtin(include, glib/libcharset/glibc21.m4)dnl
8 # require autoconf 2.13
11 # Process this file with autoconf to produce a configure script.
14 # Save this value here, since automake will set cflags later
15 cflags_set=${CFLAGS+set}
17 # we rewrite this file
18 rm -f glibconfig-sysdefs.h
20 GLIB_AC_DIVERT_BEFORE_HELP([
22 # The following version number definitions apply to GLib, GModule, GObject
23 # and GThread as a whole, so if changes occoured in any of them, they are all
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
42 AC_SUBST(GLIB_MAJOR_VERSION)
43 AC_SUBST(GLIB_MINOR_VERSION)
44 AC_SUBST(GLIB_MICRO_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`
54 LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
59 AC_SUBST(LT_CURRENT_MINUS_AGE)
64 AM_INIT_AUTOMAKE($PACKAGE, $VERSION, no-define)
66 # Specify a configuration file
67 AM_CONFIG_HEADER(config.h)
69 AC_DEFINE_UNQUOTED(GLIB_MAJOR_VERSION, $GLIB_MAJOR_VERSION,
70 [Define to the GLIB major version])
71 AC_DEFINE_UNQUOTED(GLIB_MINOR_VERSION, $GLIB_MINOR_VERSION,
72 [Define to the GLIB minor version])
73 AC_DEFINE_UNQUOTED(GLIB_MICRO_VERSION, $GLIB_MICRO_VERSION,
74 [Define to the GLIB micro version])
75 AC_DEFINE_UNQUOTED(GLIB_INTERFACE_AGE, $GLIB_INTERFACE_AGE,
76 [Define to the GLIB interface age])
77 AC_DEFINE_UNQUOTED(GLIB_BINARY_AGE, $GLIB_BINARY_AGE,
78 [Define to the GLIB binary age])
80 dnl Initialize maintainer mode
85 AC_MSG_CHECKING(for the BeOS)
88 glib_native_beos="yes"
94 AC_MSG_RESULT([$glib_native_beos])
98 AC_MSG_CHECKING([for Win32])
101 glib_native_win32=yes
102 G_LIB_WIN32_RESOURCE=glib-win32res.lo
103 G_MODULE_WIN32_RESOURCE=gmodule-win32res.lo
104 G_OBJECT_WIN32_RESOURCE=gobject-win32res.lo
105 G_THREAD_WIN32_RESOURCE=gthread-win32res.lo
107 GMODULE_DEF=gmodule.def
108 GOBJECT_DEF=gobject.def
109 GTHREAD_DEF=gthread.def
110 TESTGMODULE_EXP=testgmodule.exp
114 G_LIB_WIN32_RESOURCE=
115 G_MODULE_WIN32_RESOURCE=
116 G_OBJECT_WIN32_RESOURCE=
117 G_THREAD_WIN32_RESOURCE=
125 AC_MSG_RESULT([$glib_native_win32])
126 AM_CONDITIONAL(OS_WIN32, test "$glib_native_win32" = "yes")
127 AC_SUBST(G_LIB_WIN32_RESOURCE)
128 AC_SUBST(G_MODULE_WIN32_RESOURCE)
129 AC_SUBST(G_OBJECT_WIN32_RESOURCE)
130 AC_SUBST(G_THREAD_WIN32_RESOURCE)
132 AC_SUBST(GMODULE_DEF)
133 AC_SUBST(GOBJECT_DEF)
134 AC_SUBST(GTHREAD_DEF)
135 AC_SUBST(TESTGMODULE_EXP)
138 if test "$glib_native_win32" = "yes"; then
139 AC_CHECK_PROG(ms_librarian, lib.exe, yes, no)
141 AM_CONDITIONAL(MS_LIB_AVAILABLE, test x$ms_librarian = xyes)
143 GLIB_AC_DIVERT_BEFORE_HELP([
144 # figure debugging default, prior to $ac_help setup
145 case $GLIB_MINOR_VERSION in
146 *[[13579]]) debug_default=yes ;;
147 *) debug_default=minimum ;;
151 dnl declare --enable-* args and collect ac_help strings
152 AC_ARG_ENABLE(debug, [ --enable-debug=[no/minimum/yes] turn on debugging [default=$debug_default]],,enable_debug=$debug_default)
153 AC_ARG_ENABLE(gc_friendly, [ --enable-gc-friendly turn on garbage collector friendliness [default=no]],,enable_gc_friendly=no)
154 AC_ARG_ENABLE(mem_pools, [ --disable-mem-pools disable all glib memory pools],,disable_mem_pools=no)
155 AC_ARG_ENABLE(ansi, [ --enable-ansi turn on strict ansi [default=no]],
157 AC_ARG_ENABLE(threads, [ --enable-threads turn on basic thread support [default=yes]
158 ([=no] will override --with-threads)],,enable_threads=yes)
159 AC_ARG_ENABLE(rebuilds, [ --disable-rebuilds disable all source autogeneration rules],,enable_rebuilds=yes)
161 if test "x$enable_threads" != "xyes"; then
165 AC_DEFINE_UNQUOTED(G_COMPILED_WITH_DEBUGGING, "${enable_debug}",
166 [Whether glib was compiled with debugging enabled])
168 AC_MSG_CHECKING(whether to enable garbage collector friendliness)
169 if test "x$enable_gc_friendly" = "xyes"; then
170 AC_DEFINE(ENABLE_GC_FRIENDLY, 1, [Whether to enable GC friendliness])
171 AC_SUBST(ENABLE_GC_FRIENDLY)
177 AC_MSG_CHECKING(whether to disable memory pools)
178 if test "x$disable_mem_pools" = "xno"; then
181 AC_DEFINE(DISABLE_MEM_POOLS, 1, [Whether to disable memory pools])
182 AC_SUBST(DISABLE_MEM_POOLS)
186 dnl Checks for programs.
189 dnl Check for a working C++ compiler, but do not bail out, if none is found.
190 AC_CHECK_PROGS(CXX, $CCC c++ g++ gcc CC cxx cc++ cl, gcc)
193 AC_TRY_COMPILE(,[class a { int b; } c;], ,CXX=)
194 AM_CONDITIONAL(HAVE_CXX, test "$CXX" != "")
203 AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
204 if test x$PKG_CONFIG = xno ; then
205 AC_MSG_ERROR([*** pkg-config not found. See http://www.freedesktop.org/software/pkgconfig/])
208 if pkg-config --atleast-pkgconfig-version 0.5 ; then
211 AC_MSG_ERROR([*** pkg-config too old; version 0.5 or better required.])
214 if test "x$enable_debug" = "xyes"; then
215 if test x$cflags_set != xset ; then
217 *[[\ \ ]]-g[[\ \ ]]*) ;;
218 *) CFLAGS="$CFLAGS -g" ;;
222 GLIB_DEBUG_FLAGS="-DG_ENABLE_DEBUG"
224 if test "x$enable_debug" = "xno"; then
225 GLIB_DEBUG_FLAGS="-DG_DISABLE_ASSERT -DG_DISABLE_CHECKS"
229 # Ensure -fnative-struct is used when compiling for Win32
230 if test "x$glib_native_win32" = "xyes"; then
231 if test "x$GCC" = "xyes"; then
233 *[[\ \ ]]-fnative-struct[[\ \ ]]*) ;;
234 *) CFLAGS="$CFLAGS -fnative-struct" ;;
242 # define a MAINT-like variable REBUILD which is set if Perl
243 # and awk are found, so autogenerated sources can be rebuilt
245 AC_CHECK_PROGS(PERL, perl5 perl)
246 # We would like indent, but don't require it.
247 AC_CHECK_PROG(INDENT, indent, indent)
249 if test "x$enable_rebuilds" = "xyes" && \
251 $PERL -e 'exit !($] >= 5.002)' > /dev/null 2>&1 && \
252 test -n "$AWK" ; then
262 ALL_LINGUAS="az ca de es eu fr nn no ru sk sl sv ta tr uk zh_TW"
265 if test "$gt_cv_func_dgettext_libc" = "yes" || test "$gt_cv_func_dgettext_libintl" = "yes"; then
269 *** You must have either have gettext support in your C library, or use the
270 *** GNU gettext library. (http://www.gnu.org/software/gettext/gettext.html
274 LIBS="$LIBS $INTLLIBS"
276 GETTEXT_PACKAGE=glib20
277 AC_SUBST(GETTEXT_PACKAGE)
278 AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE")
280 # AM_GLIB_GNU_GETTEXT above substs $DATADIRNAME
281 # this is the directory where the *.{mo,gmo} files are installed
282 GLIB_LOCALE_DIR="${prefix}/${DATADIRNAME}/locale"
283 AC_DEFINE_UNQUOTED(GLIB_LOCALE_DIR,"$GLIB_LOCALE_DIR")
285 dnl Initialize libtool
289 if test "x$GCC" = "xyes"; then
291 *[[\ \ ]]-Wall[[\ \ ]]*) ;;
292 *) CFLAGS="$CFLAGS -Wall" ;;
295 if test "x$enable_ansi" = "xyes"; then
297 *[[\ \ ]]-ansi[[\ \ ]]*) ;;
298 *) CFLAGS="$CFLAGS -ansi" ;;
302 *[[\ \ ]]-pedantic[[\ \ ]]*) ;;
303 *) CFLAGS="$CFLAGS -pedantic" ;;
308 dnl DU4 native cc currently needs -std1 for ANSI mode (instead of K&R)
309 AC_MSG_CHECKING([for extra flags to get ANSI library prototypes])
312 AC_TRY_RUN([#include <math.h>
313 int main (void) { return (log(1) != log(1.)); }],
314 AC_MSG_RESULT(none needed),
315 glib_save_CFLAGS=$CFLAGS
316 CFLAGS="$CFLAGS -std1"
317 AC_TRY_RUN([#include <math.h>
318 int main (void) { return (log(1) != log(1.)); }],
319 AC_MSG_RESULT(-std1),
321 CFLAGS=$glib_save_CFLAGS
323 [No ANSI prototypes found in library. (-std1 didn't work.)])
328 dnl NeXTStep cc seems to need this
329 AC_MSG_CHECKING([for extra flags for POSIX compliance])
330 AC_TRY_COMPILE([#include <dirent.h>], [DIR *dir;],
331 AC_MSG_RESULT(none needed),
332 glib_save_CFLAGS=$CFLAGS
333 CFLAGS="$CFLAGS -posix"
334 AC_TRY_COMPILE([#include <dirent.h>], [DIR *dir;],
335 AC_MSG_RESULT(-posix),
337 CFLAGS=$glib_save_CFLAGS
338 AC_MSG_WARN([Could not determine POSIX flag. (-posix didn't work.)])))
340 # Checks for header files.
343 # Checks for library functions.
348 AC_CHECK_FUNCS(atexit on_exit)
350 AC_CHECK_SIZEOF(char)
351 AC_CHECK_SIZEOF(short)
352 AC_CHECK_SIZEOF(long)
354 AC_CHECK_SIZEOF(void *)
355 AC_CHECK_SIZEOF(long long)
356 AC_CHECK_SIZEOF(__int64)
358 if test x$ac_cv_sizeof_long_long = x8; then
359 # long long is a 64 bit integer.
360 AC_MSG_CHECKING(for format to printf and scanf a gint64)
361 AC_CACHE_VAL(glib_cv_long_long_format,[
362 for format in ll q I64; do
363 AC_TRY_RUN([#include <stdio.h>
366 long long b, a = -0x3AFAFAFAFAFAFAFALL;
368 sprintf (buffer, "%${format}u", a);
369 sscanf (buffer, "%${format}u", &b);
373 glib_cv_long_long_format=${format}
376 if test -n "$glib_cv_long_long_format"; then
377 AC_MSG_RESULT(%${glib_cv_long_long_format}u)
381 elif test x$ac_cv_sizeof___int64 = x8; then
382 # __int64 is a 64 bit integer.
383 AC_MSG_CHECKING(for format to printf and scanf a gint64)
384 # We know this is MSVC, and what the formats are
385 glib_cv_long_long_format=I64
386 AC_MSG_RESULT(%${glib_cv_long_long_format}u)
389 dnl long doubles were not used, and a portability problem
393 dnl ok, here we try to check whether the systems prototypes for
394 dnl malloc and friends actually match the prototypes provided
395 dnl by gmem.h (keep in sync). i currently only know how to check
396 dnl this reliably with gcc (-Werror), improvements for other
397 dnl compilers are apprechiated.
398 SANE_MALLOC_PROTOS=no
399 AC_MSG_CHECKING([if malloc() and friends prototypes are gmem.h compatible])
400 glib_save_CFLAGS=$CFLAGS
401 if test "x$GCC" = "xyes"; then
402 CFLAGS="$CFLAGS -Werror"
403 AC_TRY_COMPILE([#include <stdlib.h>], [
404 void* (*my_calloc_p) (size_t, size_t) = calloc;
405 void* (*my_malloc_p) (size_t) = malloc;
406 void (*my_free_p) (void*) = free;
407 void* (*my_realloc_p) (void*, size_t) = realloc;
413 AC_DEFINE(SANE_MALLOC_PROTOS)
414 SANE_MALLOC_PROTOS=yes)
416 AC_MSG_RESULT($SANE_MALLOC_PROTOS)
417 CFLAGS=$glib_save_CFLAGS
420 dnl AC_C_INLINE is useless to us since it bails out too early, we need to
421 dnl truely know which ones of `inline', `__inline' and `__inline__' are
422 dnl actually supported.
423 AC_CACHE_CHECK([for __inline],glib_cv_has__inline,[
425 __inline int foo () { return 0; }
426 int main () { return foo (); }
428 glib_cv_has__inline=yes
430 glib_cv_has__inline=no
433 case x$glib_cv_has__inline in
434 xyes) AC_DEFINE(G_HAVE___INLINE,1,[Have __inline keyword])
436 AC_CACHE_CHECK([for __inline__],glib_cv_has__inline__,[
438 __inline__ int foo () { return 0; }
439 int main () { return foo (); }
441 glib_cv_has__inline__=yes
443 glib_cv_has__inline__=no
446 case x$glib_cv_has__inline__ in
447 xyes) AC_DEFINE(G_HAVE___INLINE__,1,[Have __inline__ keyword])
449 AC_CACHE_CHECK([for inline], glib_cv_hasinline,[
452 inline int foo () { return 0; }
453 int main () { return foo (); }
455 glib_cv_hasinline=yes
460 case x$glib_cv_hasinline in
461 xyes) AC_DEFINE(G_HAVE_INLINE,1,[Have inline keyword])
464 # check for flavours of varargs macros
465 AC_MSG_CHECKING(for ISO C99 varargs macros in C)
467 int a(int p1, int p2, int p3);
468 #define call_a(...) a(1,__VA_ARGS__)
470 ],g_have_iso_c_varargs=yes,g_have_iso_c_varargs=no)
471 AC_MSG_RESULT($g_have_iso_c_varargs)
473 AC_MSG_CHECKING(for ISO C99 varargs macros in C++)
474 if test "$CXX" = ""; then
476 g_have_iso_cxx_varargs=no
480 int a(int p1, int p2, int p3);
481 #define call_a(...) a(1,__VA_ARGS__)
483 ],g_have_iso_cxx_varargs=yes,g_have_iso_cxx_varargs=no)
486 AC_MSG_RESULT($g_have_iso_cxx_varargs)
488 AC_MSG_CHECKING(for GNUC varargs macros)
490 int a(int p1, int p2, int p3);
491 #define call_a(params...) a(1,params)
493 ],g_have_gnuc_varargs=yes,g_have_gnuc_varargs=no)
494 AC_MSG_RESULT($g_have_gnuc_varargs)
496 # check for bytesex stuff
499 # check for header files
500 AC_CHECK_HEADERS([float.h limits.h pwd.h sys/param.h sys/poll.h sys/select.h])
501 AC_CHECK_HEADERS([sys/time.h sys/times.h unistd.h values.h stdint.h sched.h])
503 # Checks for libcharset
506 AC_CHECK_HEADERS([stddef.h stdlib.h string.h])
507 AC_CHECK_FUNCS(setlocale)
509 AC_MSG_CHECKING(whether make is GNU Make)
512 if $ac_make --version 2>/dev/null | grep '^GNU Make ' >/dev/null ; then
513 STRIP_BEGIN='$(strip $(STRIP_DUMMY)'
520 AC_SUBST(STRIP_DUMMY)
521 AC_SUBST(STRIP_BEGIN)
524 # check additional type sizes
531 if test "x$ac_cv_header_stdint_h" = "xyes"; then
532 size_includes=["$size_includes
536 if test "x$ac_cv_header_unistd_h" = "xyes"; then
537 size_includes=["$size_includes
541 GLIB_SIZEOF([$size_includes], size_t, size_t)
542 GLIB_SIZEOF([$size_includes], ptrdiff_t, ptrdiff_t)
543 GLIB_SIZEOF([$size_includes], intmax_t, intmax_t)
545 # Check for some functions
546 AC_CHECK_FUNCS(lstat strerror strsignal memmove mkstemp vsnprintf stpcpy strcasecmp strncasecmp poll getcwd nanosleep vasprintf)
548 # Check if bcopy can be used for overlapping copies, if memmove isn't found.
549 # The check is borrowed from the PERL Configure script.
550 if test "$ac_cv_func_memmove" != "yes"; then
551 AC_CACHE_CHECK(whether bcopy can handle overlapping copies,
552 glib_cv_working_bcopy,[AC_TRY_RUN([
554 char buf[128], abc[128], *b;
556 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
557 for (align = 7; align >= 0; align--) {
558 for (len = 36; len; len--) {
559 b = buf+align; bcopy(abc, b, len);
560 for (off = 1; off <= len; off++) {
561 bcopy(b, b+off, len); bcopy(b+off, b, len);
562 if (bcmp(b, abc, len)) return(1);
567 }],glib_cv_working_bcopy=yes,glib_cv_working_bcopy=no)])
568 if test "$glib_cv_working_bcopy" = "yes"; then
569 AC_DEFINE(HAVE_WORKING_BCOPY,1,[Have a working bcopy])
573 # Check for sys_errlist
574 AC_MSG_CHECKING(for sys_errlist)
576 extern char *sys_errlist[];
578 sys_errlist[sys_nerr-1][0] = 0;
579 ], glib_ok=yes, glib_ok=no)
580 AC_MSG_RESULT($glib_ok)
581 if test "$glib_ok" = "no"; then
582 AC_DEFINE(NO_SYS_ERRLIST,1,[global 'sys_errlist' not found])
585 # Check for sys_siglist
586 AC_MSG_CHECKING(for sys_siglist)
588 extern char *sys_siglist[];
589 exit (sys_siglist[0]);
590 ], glib_ok=yes, glib_ok=no)
591 AC_MSG_RESULT($glib_ok)
592 if test "$glib_ok" = "no"; then
593 AC_DEFINE(NO_SYS_SIGLIST,1,[global 'sys_siglist' not found])
596 # Check for sys_siglist decl (see Tue Jan 19 00:44:24 1999 in changelog)
597 AC_MSG_CHECKING(for sys_siglist declaration)
598 AC_TRY_COMPILE([#include <signal.h>], [
599 strlen (sys_siglist[0]);
600 ], glib_ok=yes, glib_ok=no)
601 AC_MSG_RESULT($glib_ok)
602 if test "$glib_ok" = "no"; then
603 AC_DEFINE(NO_SYS_SIGLIST_DECL,1,[global 'sys_siglist' not declared])
606 # Check if <sys/select.h> needs to be included for fd_set
607 AC_MSG_CHECKING([for fd_set])
608 AC_TRY_COMPILE([#include <sys/types.h>],
609 [fd_set readMask, writeMask;], gtk_ok=yes, gtk_ok=no)
610 if test "$gtk_ok" = "yes"; then
611 AC_MSG_RESULT([yes, found in sys/types.h])
613 AC_EGREP_HEADER(fd_set, sys/select.h, gtk_ok=yes)
614 if test "$gtk_ok" = "yes"; then
615 # *** FIXME: give it a different name
616 AC_DEFINE(HAVE_SYS_SELECT_H,1,[found fd_set in sys/select.h])
617 AC_MSG_RESULT([yes, found in sys/select.h])
619 AC_DEFINE(NO_FD_SET,1,[didn't find fd_set])
624 dnl *** check for sane realloc() ***
625 AC_CACHE_CHECK([whether realloc (NULL,) will work],glib_cv_sane_realloc,[
629 return realloc (0, sizeof (int)) == 0;
631 [glib_cv_sane_realloc=yes],
632 [glib_cv_sane_realloc=no],
635 if test x$glib_cv_sane_realloc = xyes; then
636 AC_DEFINE(REALLOC_0_WORKS,1,[whether realloc (NULL,) works])
639 dnl Check for nl_langinfo and CODESET
641 AC_MSG_CHECKING([for nl_langinfo (CODESET)])
642 AC_TRY_COMPILE([#include <langinfo.h>],
643 [char *codeset = nl_langinfo (CODESET);],
644 AC_DEFINE(HAVE_CODESET,1,[Have nl_langinfo (CODESET)])
647 AC_MSG_RESULT($have_codeset)
650 dnl ****************************************
651 dnl *** strlcpy/strlcat ***
652 dnl ****************************************
654 AC_MSG_CHECKING(for strlcpy/strlcat)
655 AC_TRY_LINK([#include <stdlib.h>
656 #include <string.h>], [
657 char *p = malloc(10);
658 (void) strlcpy(p, "hi", 10);
659 (void) strlcat(p, "bye", 10);
660 ], glib_ok=yes, glib_ok=no)
661 AC_MSG_RESULT($glib_ok)
662 if test "$glib_ok" = "yes"; then
663 AC_DEFINE(HAVE_STRLCPY,1,[Have functions strlcpy and strlcat])
667 dnl **********************
668 dnl *** va_copy checks ***
669 dnl **********************
670 dnl we currently check for all three va_copy possibilities, so we get
671 dnl all results in config.log for bug reports.
672 AC_CACHE_CHECK([for an implementation of va_copy()],glib_cv_va_copy,[
675 void f (int i, ...) {
676 va_list args1, args2;
678 va_copy (args2, args1);
679 if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
681 va_end (args1); va_end (args2);
687 [glib_cv_va_copy=yes],
688 [glib_cv_va_copy=no],
691 AC_CACHE_CHECK([for an implementation of __va_copy()],glib_cv___va_copy,[
694 void f (int i, ...) {
695 va_list args1, args2;
697 __va_copy (args2, args1);
698 if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
700 va_end (args1); va_end (args2);
706 [glib_cv___va_copy=yes],
707 [glib_cv___va_copy=no],
711 if test "x$glib_cv_va_copy" = "xyes"; then
712 g_va_copy_func=va_copy
713 else if test "x$glib_cv___va_copy" = "xyes"; then
714 g_va_copy_func=__va_copy
718 if test -n "$g_va_copy_func"; then
719 AC_DEFINE_UNQUOTED(G_VA_COPY,$g_va_copy_func,[A 'va_copy' style function])
722 AC_CACHE_CHECK([whether va_lists can be copied by value],glib_cv_va_val_copy,[
725 void f (int i, ...) {
726 va_list args1, args2;
729 if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
731 va_end (args1); va_end (args2);
737 [glib_cv_va_val_copy=yes],
738 [glib_cv_va_val_copy=no],
742 if test "x$glib_cv_va_val_copy" = "xno"; then
743 AC_DEFINE(G_VA_COPY_AS_ARRAY,1, ['va_lists' cannot be copies as values])
746 dnl ***********************
747 dnl *** g_module checks ***
748 dnl ***********************
751 G_MODULE_PLUGIN_LIBS=
753 dnl G_MODULE_IMPL= don't reset, so cmd-line can override
754 G_MODULE_NEED_USCORE=0
755 G_MODULE_BROKEN_RTLD_GLOBAL=0
756 G_MODULE_HAVE_DLERROR=0
757 dnl *** force native WIN32 shared lib loader
758 if test -z "$G_MODULE_IMPL"; then
760 *-*-mingw*|*-*-cygwin*) G_MODULE_IMPL=G_MODULE_IMPL_WIN32 ;;
763 dnl *** dlopen() and dlsym() in system libraries
764 if test -z "$G_MODULE_IMPL"; then
765 AC_CHECK_FUNC(dlopen,
766 [AC_CHECK_FUNC(dlsym,
767 [G_MODULE_IMPL=G_MODULE_IMPL_DL],[])],
770 dnl *** load_image (BeOS)
771 if test -z "$G_MODULE_IMPL" -a "x$glib_native_beos" = "xyes"; then
772 AC_CHECK_LIB(root, load_image,
773 [G_MODULE_LIBS="-lbe -lroot -lglib"
774 G_MODULE_LIBS_EXTRA="-L\$(top_builddir_full)/.libs"
775 G_MODULE_PLUGIN_LIBS="-L\$(top_builddir_full)/gmodule/.libs -lgmodule"
776 G_MODULE_IMPL=G_MODULE_IMPL_BEOS],
779 dnl *** dlopen() and dlsym() in libdl
780 if test -z "$G_MODULE_IMPL"; then
781 AC_CHECK_LIB(dl, dlopen,
782 [AC_CHECK_LIB(dl, dlsym,
784 G_MODULE_IMPL=G_MODULE_IMPL_DL],[])],
787 dnl *** NSLinkModule (dyld) in system libraries (Darwin)
788 if test -z "$G_MODULE_IMPL"; then
789 AC_CHECK_FUNC(NSLinkModule,
790 [G_MODULE_IMPL=G_MODULE_IMPL_DYLD
791 G_MODULE_NEED_USCORE=1],
794 dnl *** shl_load() in libdld (HP-UX)
795 if test -z "$G_MODULE_IMPL"; then
796 AC_MSG_CHECKING(how to export all symbols)
797 SAVED_LDFLAGS=$LDFLAGS
798 LDFLAGS="$LDFLAGS -Wl,-E"
799 AC_TRY_LINK(,[ return 0; ],
800 [ G_MODULE_LDFLAGS="-Wl,-E" ],[
801 LDFLAGS="$SAVED_LDFLAGS -bexpall"
802 AC_TRY_LINK(,[ return 0; ],
803 [G_MODULE_LDFLAGS="-bexpall"],
804 [G_MODULE_LDFLAGS="none"])
806 LDFLAGS=$SAVED_LDFLAGS
807 AC_MSG_RESULT($G_MODULE_LDFLAGS)
808 if test "x$G_MODULE_LDFLAGS" = "xnone"; then
811 AC_CHECK_LIB(dld, shl_load,
813 G_MODULE_IMPL=G_MODULE_IMPL_DLD],
816 dnl *** additional checks for G_MODULE_IMPL_DL
817 if test "$G_MODULE_IMPL" = "G_MODULE_IMPL_DL"; then
820 G_MODULE_LDFLAGS='-rdynamic'
824 LDFLAGS_orig="$LDFLAGS"
825 LIBS="$LIBS $G_MODULE_LIBS"
826 LDFLAGS="$LDFLAGS $G_MODULE_LDFLAGS"
827 dnl *** check for OSF1/5.0 RTLD_GLOBAL brokenness
828 AC_CACHE_CHECK([for RTLD_GLOBAL brokenness],
829 glib_cv_rtldglobal_broken,[
833 #define RTLD_GLOBAL 0
840 void *handle, *global, *local;
841 global = &pthread_create;
842 handle = dlopen ("libpthread.so", RTLD_GLOBAL | RTLD_LAZY);
843 if (!handle) return 0;
844 local = dlsym (handle, "pthread_create");
845 return global == local;
847 [glib_cv_rtldglobal_broken=no],
848 [glib_cv_rtldglobal_broken=yes],
850 rm -f plugin.c plugin.o plugin.lo
852 if test "x$glib_cv_rtldglobal_broken" = "xyes"; then
853 G_MODULE_BROKEN_RTLD_GLOBAL=1
855 G_MODULE_BROKEN_RTLD_GLOBAL=0
857 dnl *** check whether we need preceeding underscores
858 AC_CACHE_CHECK([for preceeding underscore in symbols],
862 int glib_underscore_test (void) { return 42; }
864 void *f1 = (void*)0, *f2 = (void*)0, *handle;
865 handle = dlopen ((void*)0, 0);
867 f1 = dlsym (handle, "glib_underscore_test");
868 f2 = dlsym (handle, "_glib_underscore_test");
869 } return (!f2 || f1);
871 [glib_cv_uscore=yes],
874 rm -f plugin.c plugin.$ac_objext plugin.lo
876 if test "x$glib_cv_uscore" = "xyes"; then
877 G_MODULE_NEED_USCORE=1
879 G_MODULE_NEED_USCORE=0
882 LDFLAGS="$LDFLAGS_orig"
883 dnl *** check for having dlerror()
884 AC_CHECK_FUNC(dlerror,
885 [G_MODULE_HAVE_DLERROR=1],
886 [G_MODULE_HAVE_DLERROR=0])
889 dnl *** done, have we got an implementation?
890 if test -z "$G_MODULE_IMPL"; then
892 G_MODULE_SUPPORTED=false
894 G_MODULE_SUPPORTED=true
897 AC_MSG_CHECKING(for the suffix of shared libraries)
899 hpux9* | hpux10* | hpux11*) # taken from ltconfig
900 glib_gmodule_suffix='sl'
903 glib_gmodule_suffix='dll'
906 glib_gmodule_suffix='so'
909 AC_MSG_RESULT(.$glib_gmodule_suffix)
911 AC_SUBST(G_MODULE_SUPPORTED)
912 AC_SUBST(G_MODULE_IMPL)
913 AC_SUBST(G_MODULE_LIBS)
914 AC_SUBST(G_MODULE_LIBS_EXTRA)
915 AC_SUBST(G_MODULE_PLUGIN_LIBS)
916 AC_SUBST(G_MODULE_LDFLAGS)
917 AC_SUBST(G_MODULE_HAVE_DLERROR)
918 AC_SUBST(G_MODULE_BROKEN_RTLD_GLOBAL)
919 AC_SUBST(G_MODULE_NEED_USCORE)
920 AC_SUBST(GLIB_DEBUG_FLAGS)
922 dnl **********************
923 dnl *** g_spawn checks ***
924 dnl **********************
926 AC_MSG_CHECKING(for gspawn implementation)
929 GSPAWN=gspawn-win32.lo
935 AC_MSG_RESULT($GSPAWN)
938 dnl *************************
939 dnl *** GIOChannel checks ***
940 dnl *************************
942 AC_MSG_CHECKING(for GIOChannel implementation)
954 dnl ****************************************
955 dnl *** platform dependent source checks ***
956 dnl ****************************************
958 AC_MSG_CHECKING(for platform-dependent source)
960 *-*-cygwin*|*-*-mingw*)
961 PLATFORMDEP=gwin32.lo
967 AC_MSG_RESULT($PLATFORMDEP)
968 AC_SUBST(PLATFORMDEP)
970 AC_MSG_CHECKING([whether to compile timeloop])
972 *-*-cygwin*|*-*-mingw*)
979 AC_MSG_RESULT($enable_timeloop)
980 AM_CONDITIONAL(ENABLE_TIMELOOP, test x$enable_timeloop = xyes)
982 AC_MSG_CHECKING([if building for some Win32 platform])
984 *-*-mingw*|*-*-cygwin*)
991 AC_MSG_RESULT($platform_win32)
992 AM_CONDITIONAL(PLATFORM_WIN32, test x$platform_win32 = xyes)
994 dnl ***********************
995 dnl *** g_thread checks ***
996 dnl ***********************
998 AC_ARG_WITH(threads, [ --with-threads=[none/posix/dce/solaris/win32] specify a thread implementation to use],
999 if test "x$with_threads" = x; then
1002 want_threads=$with_threads
1005 if test "x$enable_threads" = "xno"; then
1008 if test "x$want_threads" = "xnone"; then
1012 dnl error and warning message
1013 dnl *************************
1015 THREAD_NO_IMPLEMENTATION="You do not have any known thread system on your
1016 computer. GLib will not have a default thread implementation."
1018 FLAG_DOES_NOT_WORK="I can't find the MACRO to enable thread safety on your
1019 platform (normally it's "_REENTRANT"). I'll not use any flag on
1020 compilation now, but then your programs might not work.
1021 Please provide information on how it is done on your system."
1023 LIBS_NOT_FOUND_1="I can't find the libraries for the thread implementation
1026 LIBS_NOT_FOUND_2=". Please choose another thread implementation or
1027 provide information on your thread implementation.
1028 You can also run 'configure --disable-threads'
1029 to compile without thread support."
1031 FUNC_NO_GETPWUID_R="the 'g_get_(user_name|real_name|home_dir|tmp_dir)'
1032 functions will not be MT-safe during their first call because
1033 there is no working 'getpwuid_r' on your system."
1035 FUNC_NO_LOCALTIME_R="the 'g_date_set_time' function will not be MT-safe
1036 because there is no 'localtime_r' on your system."
1038 POSIX_NO_YIELD="I can not find a yield functions for your platform. A rather
1039 crude surrogate will be used. If you happen to know a
1040 yield function for your system, please inform the GLib
1043 POSIX_NO_PRIORITIES="I can not find the minimal and maximal priorities for
1044 threads on your system. Thus threads can only have the default
1045 priority. If you happen to know these main/max
1046 priorities, please inform the GLib developers."
1049 dnl determination of thread implementation
1050 dnl ***************************************
1053 if test "x$want_threads" = xyes || test "x$want_threads" = xsolaris; then
1056 AC_CHECK_LIB(thread, cond_init, have_threads=solaris)
1060 if test "x$want_threads" = xyes || test "x$want_threads" = xposix \
1061 || test "x$want_threads" = xdce; then
1062 # -D_POSIX4_DRAFT_SOURCE -D_POSIX4A_DRAFT10_SOURCE is for DG/UX
1063 # -U_OSF_SOURCE is for Digital UNIX 4.0d
1064 GTHREAD_COMPILE_IMPL_DEFINES="-D_POSIX4_DRAFT_SOURCE -D_POSIX4A_DRAFT10_SOURCE -U_OSF_SOURCE"
1065 glib_save_CPPFLAGS="$CPPFLAGS"
1066 CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
1067 if test "x$have_threads" = xnone; then
1068 AC_TRY_COMPILE([#include <pthread.h>],
1069 [pthread_attr_t attr; pthread_attr_init(&attr);],
1072 if test "x$have_threads" = xnone; then
1073 AC_TRY_COMPILE([#include <pthread.h>],
1074 [pthread_attr_t attr; pthread_attr_create(&attr);],
1077 CPPFLAGS="$glib_save_CPPFLAGS"
1079 if test "x$want_threads" = xyes || test "x$want_threads" = xwin32; then
1081 *-*-mingw*|*-*-cygwin*)
1087 AC_MSG_CHECKING(for thread implementation)
1089 if test "x$have_threads" = xnone && test "x$want_threads" != xno; then
1090 AC_MSG_RESULT(none available)
1091 AC_MSG_WARN($THREAD_NO_IMPLEMENTATION)
1093 AC_MSG_RESULT($have_threads)
1097 dnl determination of G_THREAD_CFLAGS
1098 dnl ********************************
1101 G_THREAD_LIBS_EXTRA=
1104 if test x"$have_threads" != xnone; then
1106 G_THREAD_CFLAGS="-D_REENTRANT" # good default guess
1110 G_THREAD_CFLAGS="$G_THREAD_CFLAGS -D_THREAD_SAFE"
1111 if test x"$GCC" = xyes; then
1112 G_THREAD_CFLAGS="$G_THREAD_CFLAGS -mthreads"
1116 G_THREAD_CFLAGS="$G_THREAD_CFLAGS -D_THREAD_SAFE"
1118 # FreeBSD 2.2.x shiped with gcc 2.7.2.x, which doesn't support
1121 *-sysv5uw7*) # UnixWare 7
1122 if test "$GCC" != "yes"; then
1123 G_THREAD_CFLAGS="$G_THREAD_CFLAGS -Kthread"
1125 G_THREAD_CFLAGS="$G_THREAD_CFLAGS -pthread"
1129 G_THREAD_CFLAGS="$G_THREAD_CFLAGS -D_POSIX4A_DRAFT10_SOURCE"
1132 # if we are not finding the localtime_r function, then we probably are
1133 # not using the proper multithread flag
1135 glib_save_CPPFLAGS="$CPPFLAGS"
1136 CPPFLAGS="$CPPFLAGS $G_THREAD_CFLAGS"
1138 # First we test, whether localtime_r is declared in time.h
1139 # directly. Then we test whether a macro localtime_r exists, in
1140 # which case localtime_r in the test program is replaced and thus
1141 # if we still find localtime_r in the output, it is not defined as
1144 AC_EGREP_CPP([[^a-zA-Z1-9_]localtime_r[^a-zA-Z1-9_]], [#include <time.h>], ,
1145 [AC_EGREP_CPP([[^a-zA-Z1-9_]localtime_r[^a-zA-Z1-9_]], [#include <time.h>
1147 AC_MSG_WARN($FLAG_DOES_NOT_WORK))])
1149 CPPFLAGS="$glib_save_CPPFLAGS"
1151 AC_MSG_CHECKING(thread related cflags)
1152 AC_MSG_RESULT($G_THREAD_CFLAGS)
1153 CFLAGS="$CFLAGS $G_THREAD_CFLAGS"
1156 dnl determination of G_THREAD_LIBS
1157 dnl ******************************
1159 mutex_has_default=no
1160 case $have_threads in
1162 glib_save_CPPFLAGS="$CPPFLAGS"
1163 CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
1165 glib_save_LIBS="$LIBS"
1167 *-sysv5uw7*) # UnixWare 7
1168 if test "$GCC" != "yes"; then
1169 G_THREAD_LIBS="-Kthread"
1171 G_THREAD_LIBS="-pthread"
1175 for thread_lib in "" pthread pthread32 pthreads c_r thread dce; do
1176 if test x"$thread_lib" = x; then
1180 add_thread_lib="-l$thread_lib"
1181 IN=" in -l$thread_lib"
1183 if test x"$have_threads" = xposix; then
1186 defattr=pthread_attr_default
1189 LIBS="$glib_save_LIBS $add_thread_lib"
1191 AC_MSG_CHECKING(for pthread_create/pthread_join$IN)
1192 AC_TRY_RUN([#include <pthread.h>
1194 void* func(void* data) {check_me = 42;}
1198 pthread_create (&t, $defattr, func, 0);
1199 pthread_join (t, &ret);
1200 exit (check_me != 42);
1203 G_THREAD_LIBS="$add_thread_lib"
1205 [AC_MSG_RESULT(no)])
1207 if test "x$G_THREAD_LIBS" = xerror; then
1208 AC_MSG_ERROR($LIBS_NOT_FOUND_1$have_threads$LIBS_NOT_FOUND_2)
1210 for thread_lib in "" rt rte; do
1211 if test x"$thread_lib" = x; then
1215 add_thread_lib="-l$thread_lib"
1216 IN=" in -l$thread_lib"
1218 LIBS="$glib_save_LIBS $add_thread_lib"
1220 AC_MSG_CHECKING(for sched_get_priority_min$IN)
1221 AC_TRY_RUN([#include <sched.h>
1225 return sched_get_priority_min(SCHED_OTHER)==-1
1229 G_THREAD_LIBS="$G_THREAD_LIBS $add_thread_lib"
1230 posix_priority_min="sched_get_priority_min(SCHED_OTHER)"
1231 posix_priority_max="sched_get_priority_max(SCHED_OTHER)"
1233 [AC_MSG_RESULT(no)])
1235 LIBS="$glib_save_LIBS"
1238 mutex_has_default=yes
1239 mutex_default_type='pthread_mutex_t'
1240 mutex_default_init='PTHREAD_MUTEX_INITIALIZER'
1241 mutex_header_file='pthread.h'
1242 if test "x$have_threads" = "xposix"; then
1243 g_threads_impl="POSIX"
1245 g_threads_impl="DCE"
1246 have_threads="posix"
1248 AC_SUBST(GTHREAD_COMPILE_IMPL_DEFINES)
1249 CPPFLAGS="$glib_save_CPPFLAGS"
1253 AC_CHECK_LIB(thread, cond_init, G_THREAD_LIBS="-lthread")
1254 mutex_has_default=yes
1255 mutex_default_type='mutex_t'
1256 mutex_default_init="DEFAULTMUTEX"
1257 mutex_header_file='thread.h'
1258 g_threads_impl="SOLARIS"
1261 g_threads_impl="WIN32"
1265 g_threads_impl="NONE"
1268 g_threads_impl="NONE"
1273 if test "x$G_THREAD_LIBS" = xerror; then
1274 AC_MSG_ERROR($LIBS_NOT_FOUND_1$have_threads$LIBS_NOT_FOUND_2)
1279 G_THREAD_LIBS="-lbe -lroot -lglib "
1280 G_THREAD_LIBS_EXTRA="-L\$(top_builddir_full)/.libs"
1286 AC_MSG_CHECKING(thread related libraries)
1287 AC_MSG_RESULT($G_THREAD_LIBS)
1289 dnl check for mt safe function variants and some posix functions
1290 dnl ************************************************************
1292 if test x"$have_threads" != xnone; then
1293 glib_save_LIBS="$LIBS"
1294 # we are not doing the following for now, as this might require glib
1295 # to always be linked with the thread libs on some platforms.
1296 # LIBS="$LIBS $G_THREAD_LIBS"
1297 AC_CHECK_FUNCS(localtime_r)
1298 if test "$ac_cv_header_pwd_h" = "yes"; then
1299 AC_CACHE_CHECK([for posix getpwuid_r],
1300 ac_cv_func_posix_getpwuid_r,
1301 [AC_TRY_RUN([#include <errno.h>
1303 int main () { char buffer[10000];
1304 struct passwd pwd, *pwptr = &pwd;
1307 error = getpwuid_r (0, &pwd, buffer,
1308 sizeof (buffer), &pwptr);
1309 return (error < 0 && errno == ENOSYS)
1310 || error == ENOSYS; }],
1311 [ac_cv_func_posix_getpwuid_r=yes],
1312 [ac_cv_func_posix_getpwuid_r=no])])
1313 if test "$ac_cv_func_posix_getpwuid_r" = yes; then
1314 AC_DEFINE(HAVE_POSIX_GETPWUID_R,1,
1315 [Have POSIX function getpwuid_r])
1317 AC_CACHE_CHECK([for nonposix getpwuid_r],
1318 ac_cv_func_nonposix_getpwuid_r,
1319 [AC_TRY_LINK([#include <pwd.h>],
1320 [char buffer[10000];
1322 getpwuid_r (0, &pwd, buffer,
1324 [ac_cv_func_nonposix_getpwuid_r=yes],
1325 [ac_cv_func_nonposix_getpwuid_r=no])])
1326 if test "$ac_cv_func_nonposix_getpwuid_r" = yes; then
1327 AC_DEFINE(HAVE_NONPOSIX_GETPWUID_R,1,
1328 [Have non-POSIX function getpwuid_r])
1332 LIBS="$LIBS $G_THREAD_LIBS"
1333 if test x"$have_threads" = xposix; then
1334 glib_save_CPPFLAGS="$CPPFLAGS"
1335 CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
1336 dnl we might grow sizeof(pthread_t) later on, so use a dummy name here
1337 GLIB_SIZEOF([#include <pthread.h>], pthread_t, system_thread)
1338 # This is not AC_CHECK_FUNC to also work with function
1339 # name mangling in header files.
1340 AC_MSG_CHECKING(for pthread_attr_setstacksize)
1341 AC_TRY_LINK([#include <pthread.h>],
1342 [pthread_attr_t t; pthread_attr_setstacksize(&t,0)],
1344 AC_DEFINE(HAVE_PTHREAD_ATTR_SETSTACKSIZE,1,
1345 [Have function pthread_attr_setstacksize])],
1346 [AC_MSG_RESULT(no)])
1347 AC_MSG_CHECKING(for minimal/maximal thread priority)
1348 if test x"$posix_priority_min" = xnone; then
1349 AC_EGREP_CPP(PX_PRIO_MIN,[#include <pthread.h>
1351 posix_priority_min=PX_PRIO_MIN
1352 posix_priority_max=PX_PRIO_MAX])
1354 if test x"$posix_priority_min" = xnone; then
1355 AC_EGREP_CPP(PRI_OTHER_MIN,[#include <pthread.h>
1357 posix_priority_min=PRI_OTHER_MIN
1358 posix_priority_max=PRI_OTHER_MAX])
1360 if test x"$posix_priority_min" = x; then
1361 AC_MSG_RESULT(none found)
1362 AC_MSG_WARN($POSIX_NO_PRIORITIES)
1363 posix_priority_min=-1
1364 posix_priority_max=-1
1366 AC_MSG_RESULT($posix_priority_min/$posix_priority_max)
1367 AC_DEFINE_UNQUOTED(POSIX_MIN_PRIORITY,$posix_priority_min,[Minimum POSIX RT priority])
1368 AC_DEFINE_UNQUOTED(POSIX_MAX_PRIORITY,$posix_priority_max,[Maximum POSIX RT priority])
1370 posix_yield_func=none
1371 AC_MSG_CHECKING(for posix yield function)
1372 for yield_func in sched_yield pthread_yield_np pthread_yield \
1374 AC_TRY_LINK([#include <pthread.h>],
1376 [posix_yield_func="$yield_func"
1379 if test x"$posix_yield_func" = xnone; then
1380 AC_MSG_RESULT(none found)
1381 AC_MSG_WARN($POSIX_NO_YIELD)
1382 posix_yield_func="g_usleep(1000)"
1384 AC_MSG_RESULT($posix_yield_func)
1385 posix_yield_func="$posix_yield_func()"
1387 AC_DEFINE_UNQUOTED(POSIX_YIELD_FUNC,$posix_yield_func,[The POSIX RT yield function])
1388 CPPFLAGS="$glib_save_CPPFLAGS"
1390 AC_MSG_CHECKING(whether to use the PID niceness surrogate for thread priorities)
1391 AC_TRY_RUN([#include <pthread.h>
1392 #include <sys/types.h>
1394 pid_t other_pid = 0;
1396 void* func(void* data) {other_pid = getpid();}
1400 pthread_create (&t, $defattr, func, NULL);
1401 pthread_join (t, &ret);
1402 exit (getpid()==other_pid ||
1403 $posix_priority_min != $posix_priority_max);
1406 AC_DEFINE(G_THREAD_USE_PID_SURROGATE, 1, [whether to use the PID niceness surrogate for thread priorities])
1408 [AC_MSG_RESULT(no)])
1409 elif test x"$have_threads" = xwin32; then
1410 # It's a pointer to a private struct
1411 GLIB_SIZEOF(,struct _GThreadData *, system_thread)
1412 else # solaris threads
1413 GLIB_SIZEOF([#include <thread.h>], thread_t, system_thread)
1416 LIBS="$glib_save_LIBS"
1418 # now spit out all the warnings.
1419 if test "$ac_cv_func_posix_getpwuid_r" != "yes" &&
1420 test "$ac_cv_func_nonposix_getpwuid_r" != "yes"; then
1421 AC_MSG_WARN($FUNC_NO_GETPWUID_R)
1423 if test "$ac_cv_func_localtime_r" != "yes"; then
1424 AC_MSG_WARN($FUNC_NO_LOCALTIME_R)
1427 # If no thread implementation exists, we will provide enough
1428 # space for a pointer
1429 GLIB_SIZEOF(, void*, system_thread)
1432 AC_DEFINE_UNQUOTED(G_THREAD_SOURCE,"gthread-$have_threads.c",
1433 [Source file containing theread implementation])
1434 AC_SUBST(G_THREAD_CFLAGS)
1435 AC_SUBST(G_THREAD_LIBS)
1436 AC_SUBST(G_THREAD_LIBS_EXTRA)
1438 dnl **********************************************
1439 dnl *** GDefaultMutex setup and initialization ***
1440 dnl **********************************************
1442 dnl if mutex_has_default = yes, we also got
1443 dnl mutex_default_type, mutex_default_init and mutex_header_file
1444 GLIB_IF_VAR_EQ(mutex_has_default, yes,
1445 glib_save_CPPFLAGS="$CPPFLAGS"
1446 glib_save_LIBS="$LIBS"
1447 LIBS="$LIBS $G_THREAD_LIBS"
1448 CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
1449 GLIB_SIZEOF([#include <$mutex_header_file>],
1450 $mutex_default_type,
1453 GLIB_BYTE_CONTENTS([#include <$mutex_header_file>],
1454 $mutex_default_type,
1456 $glib_cv_sizeof_gmutex,
1457 $mutex_default_init)
1458 if test x"$glib_cv_byte_contents_gmutex" = xno; then
1459 mutex_has_default=no
1461 CPPFLAGS="$glib_save_CPPFLAGS"
1462 LIBS="$glib_save_LIBS"
1467 dnl ****************************************
1468 dnl *** GLib POLL* compatibility defines ***
1469 dnl ****************************************
1471 [#include <sys/types.h>
1472 #include <sys/poll.h>],
1473 POLLIN:1 POLLOUT:4 POLLPRI:2 POLLERR:8 POLLHUP:16 POLLNVAL:32,
1474 glibconfig-sysdefs.h,
1477 dnl **********************
1478 dnl *** Win32 API libs ***
1479 dnl **********************
1483 G_LIBS_EXTRA="-luser32 -lwsock32 -lkernel32"
1486 G_LIBS_EXTRA="-lwsock32"
1492 AC_SUBST(G_LIBS_EXTRA)
1494 dnl ***********************
1495 dnl *** Tests for iconv ***
1496 dnl ***********************
1498 AC_ARG_WITH(libiconv, [ --with-libiconv Use the libiconv library ],,with_libiconv=maybe)
1502 if test "x$with_libiconv" != "xyes" ; then
1504 # Check in the C library
1506 AC_CHECK_FUNC(iconv_open, with_libiconv=no; found_iconv=yes)
1509 if test "x$with_libiconv" != "xno" ; then
1511 # Check for libiconv
1513 AC_CHECK_LIB(iconv, libiconv_open, with_libiconv=yes; found_iconv=yes)
1516 if test "x$found_iconv" = "xno" ; then
1517 AC_MSG_ERROR([*** No iconv() implementation found in C library or libiconv])
1520 if test "x$with_libiconv" = "xyes" ; then
1521 ICONV_LIBS="-liconv"
1522 AC_DEFINE(USE_LIBICONV)
1524 AC_SUBST(ICONV_LIBS)
1526 dnl If the system doesn't define EILSEQ, we should define EILSEQ ourselves
1527 dnl since we need it for g_iconv()
1529 AC_MSG_CHECKING([for EILSEQ])
1535 ], have_eilseq=yes, have_eilseq=no);
1536 AC_MSG_RESULT($have_eilseq)
1538 dnl **************************
1539 dnl *** Checks for gtk-doc ***
1540 dnl **************************
1542 AC_ARG_WITH(html-dir, [ --with-html-dir=PATH path to installed docs])
1544 if test "x$with_html_dir" = "x" ; then
1545 HTML_DIR='${datadir}/gtk-doc/html'
1547 HTML_DIR=$with_html_dir
1552 AC_CHECK_PROG(GTKDOC, gtkdoc-mkdb, true, false)
1554 gtk_doc_min_version=0.6
1556 gtk_doc_version=`gtkdoc-mkdb --version`
1557 AC_MSG_CHECKING([gtk-doc version ($gtk_doc_version) >= $gtk_doc_min_version])
1558 if perl <<EOF ; then
1559 exit (("$gtk_doc_version" =~ /^[[0-9]]+\.[[0-9]]+$/) &&
1560 ("$gtk_doc_version" >= "$gtk_doc_min_version") ? 0 : 1);
1569 AM_CONDITIONAL(HAVE_GTK_DOC, $GTKDOC)
1570 AC_SUBST(HAVE_GTK_DOC)
1572 AC_CHECK_PROG(DB2HTML, db2html, true, false)
1573 AM_CONDITIONAL(HAVE_DOCBOOK, $DB2HTML)
1575 dnl Let people disable the gtk-doc stuff.
1576 AC_ARG_ENABLE(gtk-doc, [ --enable-gtk-doc use gtk-doc to build documentation [default=auto]], enable_gtk_doc="$enableval", enable_gtk_doc=auto)
1578 if test x$enable_gtk_doc = xauto ; then
1579 if test x$GTKDOC = xtrue ; then
1586 dnl NOTE: We need to use a separate automake conditional for this
1587 dnl to make this work with the tarballs.
1588 AM_CONDITIONAL(ENABLE_GTK_DOC, test x$enable_gtk_doc = xyes)
1590 dnl ******************************
1591 dnl *** output the whole stuff ***
1592 dnl ******************************
1594 AC_OUTPUT_COMMANDS([
1596 ## Generate `glibconfig.h' in two cases
1597 ## 1. `config.status' is run either explicitly, or via configure.
1598 ## Esp. not when it is run in `Makefile' to generate makefiles and
1600 ## 2. CONFIG_OTHER is set explicitly
1602 ## Case 1 is difficult. We know that `automake' sets one of
1603 ## CONFIG_FILES or CONFIG_HEADERS to empty. This heuristic works
1604 ## only when AM_CONFIG_HEADER is set, however.
1606 if test -n "${CONFIG_FILES}" && test -n "${CONFIG_HEADERS}"; then
1607 # Both CONFIG_FILES and CONFIG_HEADERS are non-empty ==> Case 1
1608 CONFIG_OTHER=${CONFIG_OTHER:-glibconfig.h}
1610 case "$CONFIG_OTHER" in
1612 echo creating glibconfig.h
1613 outfile=glibconfig.h-tmp
1614 cat > $outfile <<\_______EOF
1617 * This is a generated file. Please modify 'configure.in'
1620 #ifndef __G_LIBCONFIG_H__
1621 #define __G_LIBCONFIG_H__
1623 #include <glib/gmacros.h>
1627 if test x$glib_limits_h = xyes; then
1628 echo '#include <limits.h>' >> $outfile
1630 if test x$glib_float_h = xyes; then
1631 echo '#include <float.h>' >> $outfile
1633 if test x$glib_values_h = xyes; then
1634 echo '#include <values.h>' >> $outfile
1636 if test "$glib_header_alloca_h" = "yes"; then
1637 echo '#define GLIB_HAVE_ALLOCA_H' >> $outfile
1639 if test x$glib_sys_poll_h = xyes; then
1640 echo '#define GLIB_HAVE_SYS_POLL_H' >> $outfile
1643 cat >> $outfile <<_______EOF
1647 #define G_MINFLOAT $glib_mf
1648 #define G_MAXFLOAT $glib_Mf
1649 #define G_MINDOUBLE $glib_md
1650 #define G_MAXDOUBLE $glib_Md
1651 #define G_MINSHORT $glib_ms
1652 #define G_MAXSHORT $glib_Ms
1653 #define G_MAXUSHORT $glib_Mus
1654 #define G_MININT $glib_mi
1655 #define G_MAXINT $glib_Mi
1656 #define G_MAXUINT $glib_Mui
1657 #define G_MINLONG $glib_ml
1658 #define G_MAXLONG $glib_Ml
1659 #define G_MAXULONG $glib_Mul
1664 ### this should always be true in a modern C/C++ compiler
1665 cat >>$outfile <<_______EOF
1666 typedef signed char gint8;
1667 typedef unsigned char guint8;
1671 if test -n "$gint16"; then
1672 cat >>$outfile <<_______EOF
1673 typedef signed $gint16 gint16;
1674 typedef unsigned $gint16 guint16;
1675 #define G_GINT16_FORMAT $gint16_format
1676 #define G_GUINT16_FORMAT $guint16_format
1681 if test -n "$gint32"; then
1682 cat >>$outfile <<_______EOF
1683 typedef signed $gint32 gint32;
1684 typedef unsigned $gint32 guint32;
1685 #define G_GINT32_FORMAT $gint32_format
1686 #define G_GUINT32_FORMAT $guint32_format
1691 if test -n "$gint64"; then
1692 cat >>$outfile <<_______EOF
1693 #define G_HAVE_GINT64 1
1695 ${glib_extension}typedef signed $gint64 gint64;
1696 ${glib_extension}typedef unsigned $gint64 guint64;
1698 #define G_GINT64_CONSTANT(val) $gint64_constant
1700 if test -n "$gint64_format"; then
1701 cat >>$outfile <<_______EOF
1702 #define G_GINT64_FORMAT $gint64_format
1703 #define G_GUINT64_FORMAT $guint64_format
1708 cat >>$outfile <<_______EOF
1710 #define GLIB_SIZEOF_VOID_P $glib_void_p
1711 #define GLIB_SIZEOF_LONG $glib_long
1715 case x$glib_size_t in
1716 x2) echo "typedef gint16 gssize;" >> $outfile
1717 echo "typedef guint16 gsize;" >> $outfile
1719 x4) echo "typedef gint32 gssize;" >> $outfile
1720 echo "typedef guint32 gsize;" >> $outfile
1722 x8) echo "typedef gint64 gssize;" >> $outfile
1723 echo "typedef guint64 gsize;" >> $outfile
1725 *) echo "#error size of size_t is unknown" >> $outfile
1729 if test -z "$glib_unknown_void_p"; then
1730 cat >>$outfile <<_______EOF
1732 #define GPOINTER_TO_INT(p) ((gint) ${glib_gpi_cast} (p))
1733 #define GPOINTER_TO_UINT(p) ((guint) ${glib_gpui_cast} (p))
1735 #define GINT_TO_POINTER(i) ((gpointer) ${glib_gpi_cast} (i))
1736 #define GUINT_TO_POINTER(u) ((gpointer) ${glib_gpui_cast} (u))
1739 echo '#error SIZEOF_VOID_P unknown - This should never happen' >>$outfile
1744 cat >>$outfile <<_______EOF
1753 #define G_HAVE_INLINE 1
1754 #else /* !__cplusplus */
1756 #endif /* !__cplusplus */
1760 if test x$g_have_iso_c_varargs = xyes ; then
1761 cat >>$outfile <<_______EOF
1763 # define G_HAVE_ISO_VARARGS 1
1767 if test x$g_have_iso_cxx_varargs = xyes ; then
1768 cat >>$outfile <<_______EOF
1770 # define G_HAVE_ISO_VARARGS 1
1774 if test x$g_have_gnuc_varargs = xyes ; then
1775 cat >>$outfile <<_______EOF
1777 #define G_HAVE_GNUC_VARARGS 1
1782 if test x$g_have_eilseq = xno; then
1783 cat >>$outfile <<_______EOF
1785 /* On some systems, like SunOS and NetBSD, EILSEQ is not defined.
1786 * The correspondence between this and the corresponding definition
1787 * in libiconv is essential.
1789 # define EILSEQ ENOENT
1796 if test x$g_mutex_has_default = xyes; then
1797 cat >>$outfile <<_______EOF
1798 $g_enable_threads_def G_THREADS_ENABLED
1799 #define G_THREADS_IMPL_$g_threads_impl_def
1800 typedef struct _GStaticMutex GStaticMutex;
1801 struct _GStaticMutex
1803 struct _GMutex *runtime_mutex;
1805 char pad[$g_mutex_sizeof];
1806 double dummy_double;
1807 void *dummy_pointer;
1811 #define G_STATIC_MUTEX_INIT { NULL, { { $g_mutex_contents} } }
1812 #define g_static_mutex_get_mutex(mutex) \
1813 (g_thread_use_default_impl ? ((GMutex*) &((mutex)->static_mutex)) : \
1814 g_static_mutex_get_mutex_impl (&((mutex)->runtime_mutex)))
1817 cat >>$outfile <<_______EOF
1818 $g_enable_threads_def G_THREADS_ENABLED
1819 #define G_THREADS_IMPL_$g_threads_impl_def
1820 typedef struct _GMutex* GStaticMutex;
1821 #define G_STATIC_MUTEX_INIT NULL
1822 #define g_static_mutex_get_mutex(mutex) (g_static_mutex_get_mutex_impl (mutex))
1826 cat >>$outfile <<_______EOF
1827 /* This represents a system thread as used by the implementation. An
1828 * alien implementaion, as loaded by g_thread_init can only count on
1829 * "sizeof (gpointer)" bytes to store their info. We however need more
1830 * for some of our native implementations. */
1831 typedef union _GSystemThread GSystemThread;
1832 union _GSystemThread
1834 char data[$g_system_thread_sizeof];
1835 double dummy_double;
1836 void *dummy_pointer;
1843 if test -n "$gint64"; then
1844 g_bit_sizes="$g_bit_sizes 64"
1846 for bits in $g_bit_sizes; do
1847 cat >>$outfile <<_______EOF
1848 #define GINT${bits}_TO_${g_bs_native}(val) ((gint${bits}) (val))
1849 #define GUINT${bits}_TO_${g_bs_native}(val) ((guint${bits}) (val))
1850 #define GINT${bits}_TO_${g_bs_alien}(val) ((gint${bits}) GUINT${bits}_SWAP_LE_BE (val))
1851 #define GUINT${bits}_TO_${g_bs_alien}(val) (GUINT${bits}_SWAP_LE_BE (val))
1855 cat >>$outfile <<_______EOF
1856 #define GLONG_TO_LE(val) ((glong) GINT${glongbits}_TO_LE (val))
1857 #define GULONG_TO_LE(val) ((gulong) GUINT${glongbits}_TO_LE (val))
1858 #define GLONG_TO_BE(val) ((glong) GINT${glongbits}_TO_BE (val))
1859 #define GULONG_TO_BE(val) ((gulong) GUINT${glongbits}_TO_BE (val))
1860 #define GINT_TO_LE(val) ((gint) GINT${gintbits}_TO_LE (val))
1861 #define GUINT_TO_LE(val) ((guint) GUINT${gintbits}_TO_LE (val))
1862 #define GINT_TO_BE(val) ((gint) GINT${gintbits}_TO_BE (val))
1863 #define GUINT_TO_BE(val) ((guint) GUINT${gintbits}_TO_BE (val))
1864 #define G_BYTE_ORDER $g_byte_order
1868 if test -r glibconfig-sysdefs.h; then
1869 cat glibconfig-sysdefs.h >>$outfile
1872 cat >>$outfile <<_______EOF
1874 #define G_MODULE_SUFFIX "$g_module_suffix"
1878 #endif /* GLIBCONFIG_H */
1882 if cmp -s $outfile glibconfig.h; then
1883 echo glibconfig.h is unchanged
1886 mv $outfile glibconfig.h
1891 # Note that if two cases are the same, case goes with the first one.
1892 # Note also that this is inside an AC_OUTPUT_COMMAND. We do not depend
1893 # on variable expansion in case labels. Look at the generated config.status
1896 if test "x${ac_cv_working_alloca_h+set}" = xset ; then
1897 glib_header_alloca_h="$ac_cv_working_alloca_h"
1899 glib_header_alloca_h="$ac_cv_header_alloca_h"
1903 x$ac_cv_header_float_h)
1905 glib_mf=FLT_MIN glib_Mf=FLT_MAX
1906 glib_md=DBL_MIN glib_Md=DBL_MAX
1908 x$ac_cv_header_values_h)
1910 glib_mf=MINFLOAT glib_Mf=MAXFLOAT
1911 glib_md=MINDOUBLE glib_Md=MAXDOUBLE
1916 x$ac_cv_header_limits_h)
1918 glib_ms=SHRT_MIN glib_Ms=SHRT_MAX glib_Mus=USHRT_MAX
1919 glib_mi=INT_MIN glib_Mi=INT_MAX glib_Mui=UINT_MAX
1920 glib_ml=LONG_MIN glib_Ml=LONG_MAX glib_Mul=ULONG_MAX
1922 x$ac_cv_header_values_h)
1924 glib_ms=MINSHORT glib_Ms=MAXSHORT glib_Mus="(((gushort)G_MAXSHORT)*2+1)"
1925 glib_mi=MININT glib_Mi=MAXINT glib_Mui="(((guint)G_MAXINT)*2+1)"
1926 glib_ml=MINLONG glib_Ml=MAXLONG glib_Mul="(((gulong)G_MAXLONG)*2+1)"
1930 if test x$ac_cv_header_sys_poll_h = xyes ; then
1935 $ac_cv_sizeof_short)
1937 gint16_format='"hi"'
1938 guint16_format='"hu"'
1943 guint16_format='"u"'
1947 $ac_cv_sizeof_short)
1949 gint32_format='"hi"'
1950 guint32_format='"hu"'
1955 guint32_format='"u"'
1959 gint32_format='"li"'
1960 guint32_format='"lu"'
1967 guint64_format='"u"'
1969 gint64_constant='(val)'
1973 gint64_format='"li"'
1974 guint64_format='"lu"'
1976 gint64_constant='(val##L)'
1978 $ac_cv_sizeof_long_long)
1980 if test -n "$glib_cv_long_long_format"; then
1981 gint64_format='"'$glib_cv_long_long_format'i"'
1982 guint64_format='"'$glib_cv_long_long_format'u"'
1984 glib_extension='G_GNUC_EXTENSION '
1985 gint64_constant='(G_GNUC_EXTENSION (val##LL))'
1987 $ac_cv_sizeof___int64)
1989 if test -n "$glib_cv_long_long_format"; then
1990 gint64_format='"'$glib_cv_long_long_format'i"'
1991 guint64_format='"'$glib_cv_long_long_format'u"'
1994 gint64_constant='(val##i64)'
1997 glib_size_t=$glib_cv_sizeof_size_t
1998 glib_void_p=$ac_cv_sizeof_long
1999 glib_long=$ac_cv_sizeof_void_p
2001 gintbits=`expr $ac_cv_sizeof_int \* 8`
2002 glongbits=`expr $ac_cv_sizeof_long \* 8`
2005 case $ac_cv_sizeof_void_p in
2006 $ac_cv_sizeof_int) glib_gpi_cast='' glib_gpui_cast='' ;;
2007 $ac_cv_sizeof_long) glib_gpi_cast='(glong)' glib_gpui_cast='(gulong)' ;;
2008 *) glib_unknown_void_p=yes ;;
2013 x$ac_cv_func_atexit)
2015 #ifdef NeXT /* @#%@! NeXTStep */
2016 # define g_ATEXIT(proc) (!atexit (proc))
2018 # define g_ATEXIT(proc) (atexit (proc))
2021 x$ac_cv_func_on_exit)
2023 #define g_ATEXIT(proc) (on_exit ((void (*)(int, void*))(proc), NULL))"
2028 x$ac_cv_func_memmove)
2030 #define g_memmove(d,s,n) G_STMT_START { memmove ((d), (s), (n)); } G_STMT_END'
2032 x$glib_cv_working_bcopy)
2034 /* memmove isn't available, but bcopy can copy overlapping memory regions */
2035 #define g_memmove(d,s,n) G_STMT_START { bcopy ((s), (d), (n)); } G_STMT_END"
2039 /* memmove isn't found and bcopy can't copy overlapping memory regions,
2040 * so we have to roll our own copy routine. */
2041 void g_memmove (void* dest, const void * src, unsigned long len);"
2046 #define GLIB_MAJOR_VERSION $GLIB_MAJOR_VERSION
2047 #define GLIB_MINOR_VERSION $GLIB_MINOR_VERSION
2048 #define GLIB_MICRO_VERSION $GLIB_MICRO_VERSION
2052 x$glib_cv_va_copy) glib_vacopy='#define G_VA_COPY va_copy' ;;
2053 x$glib_cv___va_copy) glib_vacopy='#define G_VA_COPY __va_copy' ;;
2057 if test x$glib_cv_va_val_copy = xno; then
2058 glib_vacopy="\$glib_vacopy
2059 #define G_VA_COPY_AS_ARRAY 1"
2062 if test x$glib_cv_hasinline = xyes; then
2063 glib_inline='#define G_HAVE_INLINE 1'
2065 if test x$glib_cv_has__inline = xyes; then
2066 glib_inline="\$glib_inline
2067 #define G_HAVE___INLINE 1"
2069 if test x$glib_cv_has__inline__ = xyes; then
2070 glib_inline="\$glib_inline
2071 #define G_HAVE___INLINE__ 1"
2074 g_have_gnuc_varargs=$g_have_gnuc_varargs
2075 g_have_iso_c_varargs=$g_have_iso_c_varargs
2076 g_have_iso_cxx_varargs=$g_have_iso_cxx_varargs
2079 x$ac_cv_c_bigendian)
2080 g_byte_order=G_BIG_ENDIAN
2085 g_byte_order=G_LITTLE_ENDIAN
2091 g_have_eilseq=$have_eilseq
2093 case x$have_threads in
2094 xnone) g_enable_threads_def="#undef";;
2095 *) g_enable_threads_def="#define";;
2098 g_threads_impl_def=$g_threads_impl
2100 g_mutex_has_default="$mutex_has_default"
2101 g_mutex_sizeof="$glib_cv_sizeof_gmutex"
2102 g_system_thread_sizeof="$glib_cv_sizeof_system_thread"
2103 g_mutex_contents="$glib_cv_byte_contents_gmutex"
2105 g_module_suffix="$glib_gmodule_suffix"
2109 glib_os="#define G_OS_BEOS"
2112 glib_os="#define G_OS_UNIX
2113 #define G_PLATFORM_WIN32
2114 #define G_WITH_CYGWIN"
2117 glib_os="#define G_OS_WIN32
2118 #define G_PLATFORM_WIN32"
2121 glib_os="#define G_OS_UNIX"
2128 glib-2.0-uninstalled.pc
2130 gmodule-2.0-uninstalled.pc
2132 gthread-2.0-uninstalled.pc
2134 gobject-2.0-uninstalled.pc
2138 build/win32/Makefile
2140 glib/libcharset/Makefile
2141 gmodule/gmoduleconf.h
2147 docs/reference/Makefile
2148 docs/reference/glib/Makefile
2149 docs/reference/gobject/Makefile
2153 echo " *** IMPORTANT *** "
2155 echo "This is a development version of GLib. You should be using a stable"
2156 echo "version, which is available at ftp://ftp.gtk.org/pub/gtk/v1.2/. The"
2157 echo "version you just configured is meant for developers of GLib only:"
2159 echo " * You should not base stable software on this version of GLib."
2160 echo " * GNOME developers should use a stable version of GLib."
2162 echo " *** You should be using GLib 1.2 instead. ***"