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 GLIB_AC_DIVERT_BEFORE_HELP([
20 # The following version number definitions apply to GLib, GModule, GObject
21 # and GThread as a whole, so if changes occoured in any of them, they are all
22 # treated with the same interface and binary age.
25 # GLIB_MICRO_VERSION += 1;
26 # GLIB_INTERFACE_AGE += 1;
27 # GLIB_BINARY_AGE += 1;
28 # if any functions have been added, set GLIB_INTERFACE_AGE to 0.
29 # if backwards compatibility has been broken,
30 # set GLIB_BINARY_AGE _and_ GLIB_INTERFACE_AGE to 0.
37 GLIB_VERSION=$GLIB_MAJOR_VERSION.$GLIB_MINOR_VERSION.$GLIB_MICRO_VERSION
40 AC_SUBST(GLIB_MAJOR_VERSION)
41 AC_SUBST(GLIB_MINOR_VERSION)
42 AC_SUBST(GLIB_MICRO_VERSION)
43 AC_SUBST(GLIB_VERSION)
44 AC_SUBST(GLIB_INTERFACE_AGE)
45 AC_SUBST(GLIB_BINARY_AGE)
48 LT_RELEASE=$GLIB_MAJOR_VERSION.$GLIB_MINOR_VERSION
49 LT_CURRENT=`expr $GLIB_MICRO_VERSION - $GLIB_INTERFACE_AGE`
50 LT_REVISION=$GLIB_INTERFACE_AGE
51 LT_AGE=`expr $GLIB_BINARY_AGE - $GLIB_INTERFACE_AGE`
52 LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
57 AC_SUBST(LT_CURRENT_MINUS_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 [Define to the GLIB major version])
69 AC_DEFINE_UNQUOTED(GLIB_MINOR_VERSION, $GLIB_MINOR_VERSION,
70 [Define to the GLIB minor version])
71 AC_DEFINE_UNQUOTED(GLIB_MICRO_VERSION, $GLIB_MICRO_VERSION,
72 [Define to the GLIB micro version])
73 AC_DEFINE_UNQUOTED(GLIB_INTERFACE_AGE, $GLIB_INTERFACE_AGE,
74 [Define to the GLIB interface age])
75 AC_DEFINE_UNQUOTED(GLIB_BINARY_AGE, $GLIB_BINARY_AGE,
76 [Define to the GLIB binary age])
78 dnl Initialize maintainer mode
83 AC_MSG_CHECKING(for the BeOS)
86 glib_native_beos="yes"
92 AC_MSG_RESULT([$glib_native_beos])
96 GLIB_AC_DIVERT_BEFORE_HELP([
97 # figure debugging default, prior to $ac_help setup
98 case $GLIB_MINOR_VERSION in
99 *[[13579]]) debug_default=yes ;;
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(gc_friendly, [ --enable-gc-friendly turn on garbage collector friendliness [default=no]],,enable_gc_friendly=no)
107 AC_ARG_ENABLE(mem_pools, [ --disable-mem-pools disable all glib memory pools],,disable_mem_pools=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)
112 AC_ARG_ENABLE(rebuilds, [ --disable-rebuilds disable all source autogeneration rules],,enable_rebuilds=yes)
114 if test "x$enable_threads" != "xyes"; then
118 AC_DEFINE_UNQUOTED(G_COMPILED_WITH_DEBUGGING, "${enable_debug}",
119 [Whether glib was compiled with debugging enabled])
121 AC_MSG_CHECKING(whether to enable garbage collector friendliness)
122 if test "x$enable_gc_friendly" = "xyes"; then
123 AC_DEFINE(ENABLE_GC_FRIENDLY, 1, [Whether to enable GC friendliness])
124 AC_SUBST(ENABLE_GC_FRIENDLY)
130 AC_MSG_CHECKING(whether to disable memory pools)
131 if test "x$disable_mem_pools" = "xno"; then
134 AC_DEFINE(DISABLE_MEM_POOLS, 1, [Whether to disable memory pools])
135 AC_SUBST(DISABLE_MEM_POOLS)
139 dnl Checks for programs.
142 dnl Check for a working C++ compiler, but do not bail out, if none is found.
143 AC_CHECK_PROGS(CXX, $CCC c++ g++ gcc CC cxx cc++ cl, gcc)
146 AC_TRY_COMPILE(,[class a { int b; } c;], ,CXX=)
147 AM_CONDITIONAL(HAVE_CXX, test "$CXX" != "")
156 AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
157 if test x$PKG_CONFIG = xno ; then
158 AC_MSG_ERROR([*** pkg-config not found. See http://www.freedesktop.org/software/pkgconfig/])
161 if pkg-config --atleast-pkgconfig-version 0.5 ; then
164 AC_MSG_ERROR([*** pkg-config too old; version 0.5 or better required.])
167 if test "x$enable_debug" = "xyes"; then
168 if test x$cflags_set != xset ; then
170 *[[\ \ ]]-g[[\ \ ]]*) ;;
171 *) CFLAGS="$CFLAGS -g" ;;
175 GLIB_DEBUG_FLAGS="-DG_ENABLE_DEBUG"
177 if test "x$enable_debug" = "xno"; then
178 GLIB_DEBUG_FLAGS="-DG_DISABLE_ASSERT -DG_DISABLE_CHECKS"
185 # define a MAINT-like variable REBUILD which is set if Perl
186 # and awk are found, so autogenerated sources can be rebuilt
188 AC_CHECK_PROGS(PERL, perl5 perl)
189 # We would like indent, but don't require it.
190 AC_CHECK_PROG(INDENT, indent, indent)
192 if test "x$enable_rebuilds" = "xyes" && \
194 $PERL -e 'exit !($] >= 5.002)' > /dev/null 2>&1 && \
195 test -n "$AWK" ; then
205 ALL_LINGUAS="az ca de es eu fr nn no ru sk sl sv ta tr uk zh_TW"
208 if test "$gt_cv_func_dgettext_libc" = "yes" || test "$gt_cv_func_dgettext_libintl" = "yes"; then
212 *** You must have either have gettext support in your C library, or use the
213 *** GNU gettext library. (http://www.gnu.org/software/gettext/gettext.html
217 LIBS="$LIBS $INTLLIBS"
219 GETTEXT_PACKAGE=glib20
220 AC_SUBST(GETTEXT_PACKAGE)
221 AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE")
223 # AM_GLIB_GNU_GETTEXT above substs $DATADIRNAME
224 # this is the directory where the *.{mo,gmo} files are installed
225 GLIB_LOCALE_DIR="${prefix}/${DATADIRNAME}/locale"
226 AC_DEFINE_UNQUOTED(GLIB_LOCALE_DIR,"$GLIB_LOCALE_DIR")
228 dnl Initialize libtool
232 if test "x$GCC" = "xyes"; then
234 *[[\ \ ]]-Wall[[\ \ ]]*) ;;
235 *) CFLAGS="$CFLAGS -Wall" ;;
238 if test "x$enable_ansi" = "xyes"; then
240 *[[\ \ ]]-ansi[[\ \ ]]*) ;;
241 *) CFLAGS="$CFLAGS -ansi" ;;
245 *[[\ \ ]]-pedantic[[\ \ ]]*) ;;
246 *) CFLAGS="$CFLAGS -pedantic" ;;
251 dnl DU4 native cc currently needs -std1 for ANSI mode (instead of K&R)
252 AC_MSG_CHECKING([for extra flags to get ANSI library prototypes])
255 AC_TRY_RUN([#include <math.h>
256 int main (void) { return (log(1) != log(1.)); }],
257 AC_MSG_RESULT(none needed),
258 glib_save_CFLAGS=$CFLAGS
259 CFLAGS="$CFLAGS -std1"
260 AC_TRY_RUN([#include <math.h>
261 int main (void) { return (log(1) != log(1.)); }],
262 AC_MSG_RESULT(-std1),
264 CFLAGS=$glib_save_CFLAGS
266 [No ANSI prototypes found in library. (-std1 didn't work.)])
271 dnl NeXTStep cc seems to need this
272 AC_MSG_CHECKING([for extra flags for POSIX compliance])
273 AC_TRY_COMPILE([#include <dirent.h>], [DIR *dir;],
274 AC_MSG_RESULT(none needed),
275 glib_save_CFLAGS=$CFLAGS
276 CFLAGS="$CFLAGS -posix"
277 AC_TRY_COMPILE([#include <dirent.h>], [DIR *dir;],
278 AC_MSG_RESULT(-posix),
280 CFLAGS=$glib_save_CFLAGS
281 AC_MSG_WARN([Could not determine POSIX flag. (-posix didn't work.)])))
283 # Checks for header files.
286 # Checks for library functions.
291 AC_CHECK_FUNCS(atexit on_exit)
293 AC_CHECK_SIZEOF(char)
294 AC_CHECK_SIZEOF(short)
295 AC_CHECK_SIZEOF(long)
297 AC_CHECK_SIZEOF(void *)
298 AC_CHECK_SIZEOF(long long)
300 if test x$ac_cv_sizeof_long_long = x8; then
301 # long long is a 64 bit integer.
302 AC_MSG_CHECKING(for format to printf and scanf a gint64)
303 AC_CACHE_VAL(glib_cv_long_long_format,[
304 for format in ll q I64; do
305 AC_TRY_RUN([#include <stdio.h>
308 long long b, a = -0x3AFAFAFAFAFAFAFALL;
310 sprintf (buffer, "%${format}u", a);
311 sscanf (buffer, "%${format}u", &b);
315 glib_cv_long_long_format=${format}
318 if test -n "$glib_cv_long_long_format"; then
319 AC_MSG_RESULT(%${glib_cv_long_long_format}u)
325 dnl long doubles were not used, and a portability problem
329 dnl ok, here we try to check whether the systems prototypes for
330 dnl malloc and friends actually match the prototypes provided
331 dnl by gmem.h (keep in sync). i currently only know how to check
332 dnl this reliably with gcc (-Werror), improvements for other
333 dnl compilers are apprechiated.
334 SANE_MALLOC_PROTOS=no
335 AC_MSG_CHECKING([if malloc() and friends prototypes are gmem.h compatible])
336 glib_save_CFLAGS=$CFLAGS
337 if test "x$GCC" = "xyes"; then
338 CFLAGS="$CFLAGS -Werror"
339 AC_TRY_COMPILE([#include <stdlib.h>], [
340 void* (*my_calloc_p) (size_t, size_t) = calloc;
341 void* (*my_malloc_p) (size_t) = malloc;
342 void (*my_free_p) (void*) = free;
343 void* (*my_realloc_p) (void*, size_t) = realloc;
349 AC_DEFINE(SANE_MALLOC_PROTOS)
350 SANE_MALLOC_PROTOS=yes)
352 AC_MSG_RESULT($SANE_MALLOC_PROTOS)
353 CFLAGS=$glib_save_CFLAGS
356 dnl AC_C_INLINE is useless to us since it bails out too early, we need to
357 dnl truely know which ones of `inline', `__inline' and `__inline__' are
358 dnl actually supported.
359 AC_CACHE_CHECK([for __inline],glib_cv_has__inline,[
361 __inline int foo () { return 0; }
362 int main () { return foo (); }
364 glib_cv_has__inline=yes
366 glib_cv_has__inline=no
369 case x$glib_cv_has__inline in
370 xyes) AC_DEFINE(G_HAVE___INLINE,1,[Have __inline keyword])
372 AC_CACHE_CHECK([for __inline__],glib_cv_has__inline__,[
374 __inline__ int foo () { return 0; }
375 int main () { return foo (); }
377 glib_cv_has__inline__=yes
379 glib_cv_has__inline__=no
382 case x$glib_cv_has__inline__ in
383 xyes) AC_DEFINE(G_HAVE___INLINE__,1,[Have __inline__ keyword])
385 AC_CACHE_CHECK([for inline], glib_cv_hasinline,[
388 inline int foo () { return 0; }
389 int main () { return foo (); }
391 glib_cv_hasinline=yes
396 case x$glib_cv_hasinline in
397 xyes) AC_DEFINE(G_HAVE_INLINE,1,[Have inline keyword])
400 # check for flavours of varargs macros
401 AC_MSG_CHECKING(for ISO C99 varargs macros in C)
403 int a(int p1, int p2, int p3);
404 #define call_a(...) a(1,__VA_ARGS__)
406 ],g_have_iso_c_varargs=yes,g_have_iso_c_varargs=no)
407 AC_MSG_RESULT($g_have_iso_c_varargs)
409 AC_MSG_CHECKING(for ISO C99 varargs macros in C++)
410 if test "$CXX" = ""; then
412 g_have_iso_cxx_varargs=no
416 int a(int p1, int p2, int p3);
417 #define call_a(...) a(1,__VA_ARGS__)
419 ],g_have_iso_cxx_varargs=yes,g_have_iso_cxx_varargs=no)
422 AC_MSG_RESULT($g_have_iso_cxx_varargs)
424 AC_MSG_CHECKING(for GNUC varargs macros)
426 int a(int p1, int p2, int p3);
427 #define call_a(params...) a(1,params)
429 ],g_have_gnuc_varargs=yes,g_have_gnuc_varargs=no)
430 AC_MSG_RESULT($g_have_gnuc_varargs)
432 # check for bytesex stuff
435 # check for header files
436 AC_CHECK_HEADERS([float.h limits.h pwd.h sys/param.h sys/poll.h sys/select.h])
437 AC_CHECK_HEADERS([sys/time.h sys/times.h unistd.h values.h stdint.h sched.h])
439 AC_MSG_CHECKING(whether make is GNU Make)
442 if $ac_make --version 2>/dev/null | grep '^GNU Make ' >/dev/null ; then
443 STRIP_BEGIN='$(strip $(STRIP_DUMMY)'
450 AC_SUBST(STRIP_DUMMY)
451 AC_SUBST(STRIP_BEGIN)
454 # check additional type sizes
461 if test "x$ac_cv_header_stdint_h" = "xyes"; then
462 size_includes=["$size_includes
466 if test "x$ac_cv_header_unistd_h" = "xyes"; then
467 size_includes=["$size_includes
471 GLIB_SIZEOF([$size_includes], size_t, size_t)
472 GLIB_SIZEOF([$size_includes], ptrdiff_t, ptrdiff_t)
473 GLIB_SIZEOF([$size_includes], intmax_t, intmax_t)
475 # Check for some functions
476 AC_CHECK_FUNCS(lstat strerror strsignal memmove mkstemp vsnprintf stpcpy strcasecmp strncasecmp poll getcwd nanosleep vasprintf)
478 # Check if bcopy can be used for overlapping copies, if memmove isn't found.
479 # The check is borrowed from the PERL Configure script.
480 if test "$ac_cv_func_memmove" != "yes"; then
481 AC_CACHE_CHECK(whether bcopy can handle overlapping copies,
482 glib_cv_working_bcopy,[AC_TRY_RUN([
484 char buf[128], abc[128], *b;
486 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
487 for (align = 7; align >= 0; align--) {
488 for (len = 36; len; len--) {
489 b = buf+align; bcopy(abc, b, len);
490 for (off = 1; off <= len; off++) {
491 bcopy(b, b+off, len); bcopy(b+off, b, len);
492 if (bcmp(b, abc, len)) return(1);
497 }],glib_cv_working_bcopy=yes,glib_cv_working_bcopy=no)])
498 if test "$glib_cv_working_bcopy" = "yes"; then
499 AC_DEFINE(HAVE_WORKING_BCOPY,1,[Have a working bcopy])
503 # Check for sys_errlist
504 AC_MSG_CHECKING(for sys_errlist)
506 extern char *sys_errlist[];
508 sys_errlist[sys_nerr-1][0] = 0;
509 ], glib_ok=yes, glib_ok=no)
510 AC_MSG_RESULT($glib_ok)
511 if test $glib_ok = no; then
512 AC_DEFINE(NO_SYS_ERRLIST,1,[global 'sys_errlist' not found])
515 # Check for sys_siglist
516 AC_MSG_CHECKING(for sys_siglist)
518 extern char *sys_siglist[];
519 exit (sys_siglist[0]);
520 ], glib_ok=yes, glib_ok=no)
521 AC_MSG_RESULT($glib_ok)
522 if test $glib_ok = no; then
523 AC_DEFINE(NO_SYS_SIGLIST,1,[global 'sys_siglist' not found])
526 # Check for sys_siglist decl (see Tue Jan 19 00:44:24 1999 in changelog)
527 AC_MSG_CHECKING(for sys_siglist declaration)
528 AC_TRY_COMPILE([#include <signal.h>], [
529 strlen (sys_siglist[0]);
530 ], glib_ok=yes, glib_ok=no)
531 AC_MSG_RESULT($glib_ok)
532 if test $glib_ok = no; then
533 AC_DEFINE(NO_SYS_SIGLIST_DECL,1,[global 'sys_siglist' not declared])
536 # Check if <sys/select.h> needs to be included for fd_set
537 AC_MSG_CHECKING([for fd_set])
538 AC_TRY_COMPILE([#include <sys/types.h>],
539 [fd_set readMask, writeMask;], gtk_ok=yes, gtk_ok=no)
540 if test $gtk_ok = yes; then
541 AC_MSG_RESULT([yes, found in sys/types.h])
543 AC_EGREP_HEADER(fd_set, sys/select.h, gtk_ok=yes)
544 if test $gtk_ok = yes; then
545 # *** FIXME: give it a different name
546 AC_DEFINE(HAVE_SYS_SELECT_H,1,[found fd_set in sys/select.h])
547 AC_MSG_RESULT([yes, found in sys/select.h])
549 AC_DEFINE(NO_FD_SET,1,[didn't find fd_set])
554 dnl *** check for sane realloc() ***
555 AC_CACHE_CHECK([whether realloc (NULL,) will work],glib_cv_sane_realloc,[
559 return realloc (0, sizeof (int)) == 0;
561 [glib_cv_sane_realloc=yes],
562 [glib_cv_sane_realloc=no],
565 if test x$glib_cv_sane_realloc = xyes; then
566 AC_DEFINE(REALLOC_0_WORKS,1,[whether realloc (NULL,) works])
569 dnl Check for nl_langinfo and CODESET
571 AC_MSG_CHECKING([for nl_langinfo (CODESET)])
572 AC_TRY_COMPILE([#include <langinfo.h>],
573 [char *codeset = nl_langinfo (CODESET);],
574 AC_DEFINE(HAVE_CODESET,1,[Have nl_langinfo (CODESET)])
577 AC_MSG_RESULT($have_codeset)
580 dnl ****************************************
581 dnl *** strlcpy/strlcat ***
582 dnl ****************************************
584 AC_MSG_CHECKING(for strlcpy/strlcat)
585 AC_TRY_LINK([#include <stdlib.h>
586 #include <string.h>], [
587 char *p = malloc(10);
588 (void) strlcpy(p, "hi", 10);
589 (void) strlcat(p, "bye", 10);
590 ], glib_ok=yes, glib_ok=no)
591 AC_MSG_RESULT($glib_ok)
592 if test $glib_ok = yes; then
593 AC_DEFINE(HAVE_STRLCPY,1,[Have functions strlcpy and strlcat])
597 dnl **********************
598 dnl *** va_copy checks ***
599 dnl **********************
600 dnl we currently check for all three va_copy possibilities, so we get
601 dnl all results in config.log for bug reports.
602 AC_CACHE_CHECK([for an implementation of va_copy()],glib_cv_va_copy,[
605 void f (int i, ...) {
606 va_list args1, args2;
608 va_copy (args2, args1);
609 if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
611 va_end (args1); va_end (args2);
617 [glib_cv_va_copy=yes],
618 [glib_cv_va_copy=no],
621 AC_CACHE_CHECK([for an implementation of __va_copy()],glib_cv___va_copy,[
624 void f (int i, ...) {
625 va_list args1, args2;
627 __va_copy (args2, args1);
628 if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
630 va_end (args1); va_end (args2);
636 [glib_cv___va_copy=yes],
637 [glib_cv___va_copy=no],
641 if test "x$glib_cv_va_copy" = "xyes"; then
642 g_va_copy_func=va_copy
643 else if test "x$glib_cv___va_copy" = "xyes"; then
644 g_va_copy_func=__va_copy
648 if test -n "$g_va_copy_func"; then
649 AC_DEFINE_UNQUOTED(G_VA_COPY,$g_va_copy_func,[A 'va_copy' style function])
652 AC_CACHE_CHECK([whether va_lists can be copied by value],glib_cv_va_val_copy,[
655 void f (int i, ...) {
656 va_list args1, args2;
659 if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
661 va_end (args1); va_end (args2);
667 [glib_cv_va_val_copy=yes],
668 [glib_cv_va_val_copy=no],
672 if test "x$glib_cv_va_val_copy" = "xno"; then
673 AC_DEFINE(G_VA_COPY_AS_ARRAY,1, ['va_lists' cannot be copies as values])
676 dnl ***********************
677 dnl *** g_module checks ***
678 dnl ***********************
681 G_MODULE_PLUGIN_LIBS=
683 dnl G_MODULE_IMPL= don't reset, so cmd-line can override
684 G_MODULE_NEED_USCORE=0
685 G_MODULE_BROKEN_RTLD_GLOBAL=0
686 G_MODULE_HAVE_DLERROR=0
687 dnl *** force native WIN32 shared lib loader
688 if test -z "$G_MODULE_IMPL"; then
690 *-*-mingw*|*-*-cygwin*) G_MODULE_IMPL=G_MODULE_IMPL_WIN32 ;;
693 dnl *** dlopen() and dlsym() in system libraries
694 if test -z "$G_MODULE_IMPL"; then
695 AC_CHECK_FUNC(dlopen,
696 [AC_CHECK_FUNC(dlsym,
697 [G_MODULE_IMPL=G_MODULE_IMPL_DL],[])],
700 dnl *** load_image (BeOS)
701 if test -z "$G_MODULE_IMPL" -a "x$glib_native_beos" = "xyes"; then
702 AC_CHECK_LIB(root, load_image,
703 [G_MODULE_LIBS="-lbe -lroot -lglib"
704 G_MODULE_LIBS_EXTRA="-L\$(top_builddir_full)/.libs"
705 G_MODULE_PLUGIN_LIBS="-L\$(top_builddir_full)/gmodule/.libs -lgmodule"
706 G_MODULE_IMPL=G_MODULE_IMPL_BEOS],
709 dnl *** dlopen() and dlsym() in libdl
710 if test -z "$G_MODULE_IMPL"; then
711 AC_CHECK_LIB(dl, dlopen,
712 [AC_CHECK_LIB(dl, dlsym,
714 G_MODULE_IMPL=G_MODULE_IMPL_DL],[])],
717 dnl *** NSLinkModule (dyld) in system libraries (Darwin)
718 if test -z "$G_MODULE_IMPL"; then
719 AC_CHECK_FUNC(NSLinkModule,
720 [G_MODULE_IMPL=G_MODULE_IMPL_DYLD
721 G_MODULE_NEED_USCORE=1],
724 dnl *** shl_load() in libdld (HP-UX)
725 if test -z "$G_MODULE_IMPL"; then
726 AC_MSG_CHECKING(how to export all symbols)
727 SAVED_LDFLAGS=$LDFLAGS
728 LDFLAGS="$LDFLAGS -Wl,-E"
729 AC_TRY_LINK(,[ return 0; ],
730 [ G_MODULE_LDFLAGS="-Wl,-E" ],[
731 LDFLAGS="$SAVED_LDFLAGS -bexpall"
732 AC_TRY_LINK(,[ return 0; ],
733 [G_MODULE_LDFLAGS="-bexpall"],
734 [G_MODULE_LDFLAGS="none"])
736 LDFLAGS=$SAVED_LDFLAGS
737 AC_MSG_RESULT($G_MODULE_LDFLAGS)
738 if test "x$G_MODULE_LDFLAGS" = "xnone"; then
741 AC_CHECK_LIB(dld, shl_load,
743 G_MODULE_IMPL=G_MODULE_IMPL_DLD],
746 dnl *** additional checks for G_MODULE_IMPL_DL
747 if test "$G_MODULE_IMPL" = "G_MODULE_IMPL_DL"; then
750 G_MODULE_LDFLAGS='-rdynamic'
754 LDFLAGS_orig="$LDFLAGS"
755 LIBS="$LIBS $G_MODULE_LIBS"
756 LDFLAGS="$LDFLAGS $G_MODULE_LDFLAGS"
757 dnl *** check for OSF1/5.0 RTLD_GLOBAL brokenness
758 AC_CACHE_CHECK([for RTLD_GLOBAL brokenness],
759 glib_cv_rtldglobal_broken,[
763 #define RTLD_GLOBAL 0
770 void *handle, *global, *local;
771 global = &pthread_create;
772 handle = dlopen ("libpthread.so", RTLD_GLOBAL | RTLD_LAZY);
773 if (!handle) return 0;
774 local = dlsym (handle, "pthread_create");
775 return global == local;
777 [glib_cv_rtldglobal_broken=no],
778 [glib_cv_rtldglobal_broken=yes],
780 rm -f plugin.c plugin.o plugin.lo
782 if test "x$glib_cv_rtldglobal_broken" = "xyes"; then
783 G_MODULE_BROKEN_RTLD_GLOBAL=1
785 G_MODULE_BROKEN_RTLD_GLOBAL=0
787 dnl *** check whether we need preceeding underscores
788 AC_CACHE_CHECK([for preceeding underscore in symbols],
792 int glib_underscore_test (void) { return 42; }
794 void *f1 = (void*)0, *f2 = (void*)0, *handle;
795 handle = dlopen ((void*)0, 0);
797 f1 = dlsym (handle, "glib_underscore_test");
798 f2 = dlsym (handle, "_glib_underscore_test");
799 } return (!f2 || f1);
801 [glib_cv_uscore=yes],
804 rm -f plugin.c plugin.$ac_objext plugin.lo
806 if test "x$glib_cv_uscore" = "xyes"; then
807 G_MODULE_NEED_USCORE=1
809 G_MODULE_NEED_USCORE=0
812 LDFLAGS="$LDFLAGS_orig"
813 dnl *** check for having dlerror()
814 AC_CHECK_FUNC(dlerror,
815 [G_MODULE_HAVE_DLERROR=1],
816 [G_MODULE_HAVE_DLERROR=0])
819 dnl *** done, have we got an implementation?
820 if test -z "$G_MODULE_IMPL"; then
822 G_MODULE_SUPPORTED=false
824 G_MODULE_SUPPORTED=true
827 AC_MSG_CHECKING(for the suffix of shared libraries)
829 hpux9* | hpux10* | hpux11*) # taken from ltconfig
830 glib_gmodule_suffix='sl'
833 glib_gmodule_suffix='dll'
836 glib_gmodule_suffix='so'
839 AC_MSG_RESULT(.$glib_gmodule_suffix)
841 AC_SUBST(G_MODULE_SUPPORTED)
842 AC_SUBST(G_MODULE_IMPL)
843 AC_SUBST(G_MODULE_LIBS)
844 AC_SUBST(G_MODULE_LIBS_EXTRA)
845 AC_SUBST(G_MODULE_PLUGIN_LIBS)
846 AC_SUBST(G_MODULE_LDFLAGS)
847 AC_SUBST(G_MODULE_HAVE_DLERROR)
848 AC_SUBST(G_MODULE_BROKEN_RTLD_GLOBAL)
849 AC_SUBST(G_MODULE_NEED_USCORE)
850 AC_SUBST(GLIB_DEBUG_FLAGS)
852 dnl **********************
853 dnl *** g_spawn checks ***
854 dnl **********************
856 AC_MSG_CHECKING(for gspawn implementation)
859 GSPAWN=gspawn-win32.lo
865 AC_MSG_RESULT($GSPAWN)
868 dnl *************************
869 dnl *** GIOChannel checks ***
870 dnl *************************
872 AC_MSG_CHECKING(for GIOChannel implementation)
884 dnl ****************************************
885 dnl *** platform dependent source checks ***
886 dnl ****************************************
888 AC_MSG_CHECKING(for platform-dependent source)
890 *-*-cygwin*|*-*-mingw*)
891 PLATFORMDEP=gwin32.lo
897 AC_MSG_RESULT($PLATFORMDEP)
898 AC_SUBST(PLATFORMDEP)
900 AC_MSG_CHECKING([whether to compile timeloop])
902 *-*-cygwin*|*-*-mingw*)
909 AC_MSG_RESULT($enable_timeloop)
910 AM_CONDITIONAL(ENABLE_TIMELOOP, test x$enable_timeloop = xyes)
912 AC_MSG_CHECKING([if building for some Win32 platform])
914 *-*-mingw*|*-*-cygwin*)
921 AC_MSG_RESULT($platform_win32)
922 AM_CONDITIONAL(PLATFORM_WIN32, test x$platform_win32 = xyes)
924 AC_MSG_CHECKING([if building for pure Win32])
925 ms_linker_available=no
929 G_LIB_WIN32_RESOURCE=glib-win32res.lo
930 G_MODULE_WIN32_RESOURCE=gmodule-win32res.lo
931 G_OBJECT_WIN32_RESOURCE=gobject-win32res.lo
932 G_THREAD_WIN32_RESOURCE=gthread-win32res.lo
934 GMODULE_DEF=gmodule.def
935 GOBJECT_DEF=gobject.def
936 GTHREAD_DEF=gthread.def
937 TESTGMODULE_EXP=testgmodule.exp
941 G_LIB_WIN32_RESOURCE=
942 G_MODULE_WIN32_RESOURCE=
943 G_OBJECT_WIN32_RESOURCE=
944 G_THREAD_WIN32_RESOURCE=
952 AC_MSG_RESULT($os_win32)
953 AM_CONDITIONAL(OS_WIN32, test x$os_win32 = xyes)
954 AC_SUBST(G_LIB_WIN32_RESOURCE)
955 AC_SUBST(G_MODULE_WIN32_RESOURCE)
956 AC_SUBST(G_OBJECT_WIN32_RESOURCE)
957 AC_SUBST(G_THREAD_WIN32_RESOURCE)
959 AC_SUBST(GMODULE_DEF)
960 AC_SUBST(GOBJECT_DEF)
961 AC_SUBST(GTHREAD_DEF)
962 AC_SUBST(TESTGMODULE_EXP)
964 if test $os_win32 = yes; then
965 AC_CHECK_PROG(ms_librarian, lib.exe, yes, no)
966 AC_MSG_RESULT($ms_librarian)
968 AM_CONDITIONAL(MS_LIB_AVAILABLE, test $ms_librarian = yes)
970 dnl ***********************
971 dnl *** g_thread checks ***
972 dnl ***********************
974 AC_ARG_WITH(threads, [ --with-threads=[none/posix/dce/solaris/win32] specify a thread implementation to use],
975 if test "x$with_threads" = x; then
978 want_threads=$with_threads
981 if test "x$enable_threads" = "xno"; then
984 if test "x$want_threads" = "xnone"; then
988 dnl error and warning message
989 dnl *************************
991 THREAD_NO_IMPLEMENTATION="You do not have any known thread system on your
992 computer. GLib will not have a default thread implementation."
994 FLAG_DOES_NOT_WORK="I can't find the MACRO to enable thread safety on your
995 platform (normally it's "_REENTRANT"). I'll not use any flag on
996 compilation now, but then your programs might not work.
997 Please provide information on how it is done on your system."
999 LIBS_NOT_FOUND_1="I can't find the libraries for the thread implementation
1002 LIBS_NOT_FOUND_2=". Please choose another thread implementation or
1003 provide information on your thread implementation.
1004 You can also run 'configure --disable-threads'
1005 to compile without thread support."
1007 FUNC_NO_GETPWUID_R="the 'g_get_(user_name|real_name|home_dir|tmp_dir)'
1008 functions will not be MT-safe during their first call because
1009 there is no working 'getpwuid_r' on your system."
1011 FUNC_NO_LOCALTIME_R="the 'g_date_set_time' function will not be MT-safe
1012 because there is no 'localtime_r' on your system."
1014 POSIX_NO_YIELD="I can not find a yield functions for your platform. A rather
1015 crude surrogate will be used. If you happen to know a
1016 yield function for your system, please inform the GLib
1019 POSIX_NO_PRIORITIES="I can not find the minimal and maximal priorities for
1020 threads on your system. Thus threads can only have the default
1021 priority. If you happen to know these main/max
1022 priorities, please inform the GLib developers."
1025 dnl determination of thread implementation
1026 dnl ***************************************
1029 if test "x$want_threads" = xyes || test "x$want_threads" = xsolaris; then
1032 AC_CHECK_LIB(thread, cond_init, have_threads=solaris)
1036 if test "x$want_threads" = xyes || test "x$want_threads" = xposix \
1037 || test "x$want_threads" = xdce; then
1038 # -D_POSIX4_DRAFT_SOURCE -D_POSIX4A_DRAFT10_SOURCE is for DG/UX
1039 # -U_OSF_SOURCE is for Digital UNIX 4.0d
1040 GTHREAD_COMPILE_IMPL_DEFINES="-D_POSIX4_DRAFT_SOURCE -D_POSIX4A_DRAFT10_SOURCE -U_OSF_SOURCE"
1041 glib_save_CPPFLAGS="$CPPFLAGS"
1042 CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
1043 if test "x$have_threads" = xnone; then
1044 AC_TRY_COMPILE([#include <pthread.h>],
1045 [pthread_attr_t attr; pthread_attr_init(&attr);],
1048 if test "x$have_threads" = xnone; then
1049 AC_TRY_COMPILE([#include <pthread.h>],
1050 [pthread_attr_t attr; pthread_attr_create(&attr);],
1053 CPPFLAGS="$glib_save_CPPFLAGS"
1055 if test "x$want_threads" = xyes || test "x$want_threads" = xwin32; then
1057 *-*-mingw*|*-*-cygwin*)
1063 AC_MSG_CHECKING(for thread implementation)
1065 if test "x$have_threads" = xnone && test "x$want_threads" != xno; then
1066 AC_MSG_RESULT(none available)
1067 AC_MSG_WARN($THREAD_NO_IMPLEMENTATION)
1069 AC_MSG_RESULT($have_threads)
1073 dnl determination of G_THREAD_CFLAGS
1074 dnl ********************************
1077 G_THREAD_LIBS_EXTRA=
1080 if test x"$have_threads" != xnone; then
1082 G_THREAD_CFLAGS="-D_REENTRANT" # good default guess
1086 G_THREAD_CFLAGS="$G_THREAD_CFLAGS -D_THREAD_SAFE"
1087 if test x"$GCC" = xyes; then
1088 G_THREAD_CFLAGS="$G_THREAD_CFLAGS -mthreads"
1092 G_THREAD_CFLAGS="$G_THREAD_CFLAGS -D_THREAD_SAFE"
1094 # FreeBSD 2.2.x shiped with gcc 2.7.2.x, which doesn't support
1097 *-sysv5uw7*) # UnixWare 7
1098 if test "$GCC" != "yes"; then
1099 G_THREAD_CFLAGS="$G_THREAD_CFLAGS -Kthread"
1101 G_THREAD_CFLAGS="$G_THREAD_CFLAGS -pthread"
1105 G_THREAD_CFLAGS="$G_THREAD_CFLAGS -D_POSIX4A_DRAFT10_SOURCE"
1108 # if we are not finding the localtime_r function, then we probably are
1109 # not using the proper multithread flag
1111 glib_save_CPPFLAGS="$CPPFLAGS"
1112 CPPFLAGS="$CPPFLAGS $G_THREAD_CFLAGS"
1114 # First we test, whether localtime_r is declared in time.h
1115 # directly. Then we test whether a macro localtime_r exists, in
1116 # which case localtime_r in the test program is replaced and thus
1117 # if we still find localtime_r in the output, it is not defined as
1120 AC_EGREP_CPP([[^a-zA-Z1-9_]localtime_r[^a-zA-Z1-9_]], [#include <time.h>], ,
1121 [AC_EGREP_CPP([[^a-zA-Z1-9_]localtime_r[^a-zA-Z1-9_]], [#include <time.h>
1123 AC_MSG_WARN($FLAG_DOES_NOT_WORK))])
1125 CPPFLAGS="$glib_save_CPPFLAGS"
1127 AC_MSG_CHECKING(thread related cflags)
1128 AC_MSG_RESULT($G_THREAD_CFLAGS)
1129 CFLAGS="$CFLAGS $G_THREAD_CFLAGS"
1132 dnl determination of G_THREAD_LIBS
1133 dnl ******************************
1135 mutex_has_default=no
1136 case $have_threads in
1138 glib_save_CPPFLAGS="$CPPFLAGS"
1139 CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
1141 glib_save_LIBS="$LIBS"
1143 *-sysv5uw7*) # UnixWare 7
1144 if test "$GCC" != "yes"; then
1145 G_THREAD_LIBS="-Kthread"
1147 G_THREAD_LIBS="-pthread"
1151 for thread_lib in "" pthread pthread32 pthreads c_r thread dce; do
1152 if test x"$thread_lib" = x; then
1156 add_thread_lib="-l$thread_lib"
1157 IN=" in -l$thread_lib"
1159 if test x"$have_threads" = xposix; then
1162 defattr=pthread_attr_default
1165 LIBS="$glib_save_LIBS $add_thread_lib"
1167 AC_MSG_CHECKING(for pthread_create/pthread_join$IN)
1168 AC_TRY_RUN([#include <pthread.h>
1170 void* func(void* data) {check_me = 42;}
1174 pthread_create (&t, $defattr, func, 0);
1175 pthread_join (t, &ret);
1176 exit (check_me != 42);
1179 G_THREAD_LIBS="$add_thread_lib"
1181 [AC_MSG_RESULT(no)])
1183 if test "x$G_THREAD_LIBS" = xerror; then
1184 AC_MSG_ERROR($LIBS_NOT_FOUND_1$have_threads$LIBS_NOT_FOUND_2)
1186 for thread_lib in "" rt rte; do
1187 if test x"$thread_lib" = x; then
1191 add_thread_lib="-l$thread_lib"
1192 IN=" in -l$thread_lib"
1194 LIBS="$glib_save_LIBS $add_thread_lib"
1196 AC_MSG_CHECKING(for sched_get_priority_min$IN)
1197 AC_TRY_RUN([#include <sched.h>
1201 return sched_get_priority_min(SCHED_OTHER)==-1
1205 G_THREAD_LIBS="$G_THREAD_LIBS $add_thread_lib"
1206 posix_priority_min="sched_get_priority_min(SCHED_OTHER)"
1207 posix_priority_max="sched_get_priority_max(SCHED_OTHER)"
1209 [AC_MSG_RESULT(no)])
1211 LIBS="$glib_save_LIBS"
1214 mutex_has_default=yes
1215 mutex_default_type='pthread_mutex_t'
1216 mutex_default_init='PTHREAD_MUTEX_INITIALIZER'
1217 mutex_header_file='pthread.h'
1218 if test "x$have_threads" = "xposix"; then
1219 g_threads_impl="POSIX"
1221 g_threads_impl="DCE"
1222 have_threads="posix"
1224 AC_SUBST(GTHREAD_COMPILE_IMPL_DEFINES)
1225 CPPFLAGS="$glib_save_CPPFLAGS"
1229 AC_CHECK_LIB(thread, cond_init, G_THREAD_LIBS="-lthread")
1230 mutex_has_default=yes
1231 mutex_default_type='mutex_t'
1232 mutex_default_init="DEFAULTMUTEX"
1233 mutex_header_file='thread.h'
1234 g_threads_impl="SOLARIS"
1237 g_threads_impl="WIN32"
1241 g_threads_impl="NONE"
1244 g_threads_impl="NONE"
1249 if test "x$G_THREAD_LIBS" = xerror; then
1250 AC_MSG_ERROR($LIBS_NOT_FOUND_1$have_threads$LIBS_NOT_FOUND_2)
1255 G_THREAD_LIBS="-lbe -lroot -lglib "
1256 G_THREAD_LIBS_EXTRA="-L\$(top_builddir_full)/.libs"
1262 AC_MSG_CHECKING(thread related libraries)
1263 AC_MSG_RESULT($G_THREAD_LIBS)
1265 dnl check for mt safe function variants and some posix functions
1266 dnl ************************************************************
1268 if test x"$have_threads" != xnone; then
1269 glib_save_LIBS="$LIBS"
1270 # we are not doing the following for now, as this might require glib
1271 # to always be linked with the thread libs on some platforms.
1272 # LIBS="$LIBS $G_THREAD_LIBS"
1273 AC_CHECK_FUNCS(localtime_r)
1274 if test "$ac_cv_header_pwd_h" = "yes"; then
1275 AC_CACHE_CHECK([for posix getpwuid_r],
1276 ac_cv_func_posix_getpwuid_r,
1277 [AC_TRY_RUN([#include <errno.h>
1279 int main () { char buffer[10000];
1280 struct passwd pwd, *pwptr = &pwd;
1283 error = getpwuid_r (0, &pwd, buffer,
1284 sizeof (buffer), &pwptr);
1285 return (error < 0 && errno == ENOSYS)
1286 || error == ENOSYS; }],
1287 [ac_cv_func_posix_getpwuid_r=yes],
1288 [ac_cv_func_posix_getpwuid_r=no])])
1289 if test "$ac_cv_func_posix_getpwuid_r" = yes; then
1290 AC_DEFINE(HAVE_POSIX_GETPWUID_R,1,
1291 [Have POSIX function getpwuid_r])
1293 AC_CACHE_CHECK([for nonposix getpwuid_r],
1294 ac_cv_func_nonposix_getpwuid_r,
1295 [AC_TRY_LINK([#include <pwd.h>],
1296 [char buffer[10000];
1298 getpwuid_r (0, &pwd, buffer,
1300 [ac_cv_func_nonposix_getpwuid_r=yes],
1301 [ac_cv_func_nonposix_getpwuid_r=no])])
1302 if test "$ac_cv_func_nonposix_getpwuid_r" = yes; then
1303 AC_DEFINE(HAVE_NONPOSIX_GETPWUID_R,1,
1304 [Have non-POSIX function getpwuid_r])
1308 LIBS="$LIBS $G_THREAD_LIBS"
1309 if test x"$have_threads" = xposix; then
1310 glib_save_CPPFLAGS="$CPPFLAGS"
1311 CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
1312 dnl we might grow sizeof(pthread_t) later on, so use a dummy name here
1313 GLIB_SIZEOF([#include <pthread.h>], pthread_t, system_thread)
1314 # This is not AC_CHECK_FUNC to also work with function
1315 # name mangling in header files.
1316 AC_MSG_CHECKING(for pthread_attr_setstacksize)
1317 AC_TRY_LINK([#include <pthread.h>],
1318 [pthread_attr_t t; pthread_attr_setstacksize(&t,0)],
1320 AC_DEFINE(HAVE_PTHREAD_ATTR_SETSTACKSIZE,1,
1321 [Have function pthread_attr_setstacksize])],
1322 [AC_MSG_RESULT(no)])
1323 AC_MSG_CHECKING(for minimal/maximal thread priority)
1324 if test x"$posix_priority_min" = xnone; then
1325 AC_EGREP_CPP(PX_PRIO_MIN,[#include <pthread.h>
1327 posix_priority_min=PX_PRIO_MIN
1328 posix_priority_max=PX_PRIO_MAX])
1330 if test x"$posix_priority_min" = xnone; then
1331 AC_EGREP_CPP(PRI_OTHER_MIN,[#include <pthread.h>
1333 posix_priority_min=PRI_OTHER_MIN
1334 posix_priority_max=PRI_OTHER_MAX])
1336 if test x"$posix_priority_min" = x; then
1337 AC_MSG_RESULT(none found)
1338 AC_MSG_WARN($POSIX_NO_PRIORITIES)
1339 posix_priority_min=-1
1340 posix_priority_max=-1
1342 AC_MSG_RESULT($posix_priority_min/$posix_priority_max)
1343 AC_DEFINE_UNQUOTED(POSIX_MIN_PRIORITY,$posix_priority_min,[Minimum POSIX RT priority])
1344 AC_DEFINE_UNQUOTED(POSIX_MAX_PRIORITY,$posix_priority_max,[Maximum POSIX RT priority])
1346 posix_yield_func=none
1347 AC_MSG_CHECKING(for posix yield function)
1348 for yield_func in sched_yield pthread_yield_np pthread_yield \
1350 AC_TRY_LINK([#include <pthread.h>],
1352 [posix_yield_func="$yield_func"
1355 if test x"$posix_yield_func" = xnone; then
1356 AC_MSG_RESULT(none found)
1357 AC_MSG_WARN($POSIX_NO_YIELD)
1358 posix_yield_func="g_usleep(1000)"
1360 AC_MSG_RESULT($posix_yield_func)
1361 posix_yield_func="$posix_yield_func()"
1363 AC_DEFINE_UNQUOTED(POSIX_YIELD_FUNC,$posix_yield_func,[The POSIX RT yield function])
1364 CPPFLAGS="$glib_save_CPPFLAGS"
1366 AC_MSG_CHECKING(whether to use the PID niceness surrogate for thread priorities)
1367 AC_TRY_RUN([#include <pthread.h>
1368 #include <sys/types.h>
1370 pid_t other_pid = 0;
1372 void* func(void* data) {other_pid = getpid();}
1376 pthread_create (&t, $defattr, func, NULL);
1377 pthread_join (t, &ret);
1378 exit (getpid()==other_pid ||
1379 $posix_priority_min != $posix_priority_max);
1382 AC_DEFINE(G_THREAD_USE_PID_SURROGATE, 1, [whether to use the PID niceness surrogate for thread priorities])
1384 [AC_MSG_RESULT(no)])
1385 elif test x"$have_threads" = xwin32; then
1386 # It's a pointer to a private struct
1387 GLIB_SIZEOF(,struct _GThreadData *, system_thread)
1388 else # solaris threads
1389 GLIB_SIZEOF([#include <thread.h>], thread_t, system_thread)
1392 LIBS="$glib_save_LIBS"
1394 # now spit out all the warnings.
1395 if test "$ac_cv_func_posix_getpwuid_r" != "yes" &&
1396 test "$ac_cv_func_nonposix_getpwuid_r" != "yes"; then
1397 AC_MSG_WARN($FUNC_NO_GETPWUID_R)
1399 if test "$ac_cv_func_localtime_r" != "yes"; then
1400 AC_MSG_WARN($FUNC_NO_LOCALTIME_R)
1403 # If no thread implementation exists, we will provide enough
1404 # space for a pointer
1405 GLIB_SIZEOF(, void*, system_thread)
1408 AC_DEFINE_UNQUOTED(G_THREAD_SOURCE,"gthread-$have_threads.c",
1409 [Source file containing theread implementation])
1410 AC_SUBST(G_THREAD_CFLAGS)
1411 AC_SUBST(G_THREAD_LIBS)
1412 AC_SUBST(G_THREAD_LIBS_EXTRA)
1414 dnl **********************************************
1415 dnl *** GDefaultMutex setup and initialization ***
1416 dnl **********************************************
1418 dnl if mutex_has_default = yes, we also got
1419 dnl mutex_default_type, mutex_default_init and mutex_header_file
1420 GLIB_IF_VAR_EQ(mutex_has_default, yes,
1421 glib_save_CPPFLAGS="$CPPFLAGS"
1422 glib_save_LIBS="$LIBS"
1423 LIBS="$LIBS $G_THREAD_LIBS"
1424 CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
1425 GLIB_SIZEOF([#include <$mutex_header_file>],
1426 $mutex_default_type,
1429 GLIB_BYTE_CONTENTS([#include <$mutex_header_file>],
1430 $mutex_default_type,
1432 $glib_cv_sizeof_gmutex,
1433 $mutex_default_init)
1434 if test x"$glib_cv_byte_contents_gmutex" = xno; then
1435 mutex_has_default=no
1437 CPPFLAGS="$glib_save_CPPFLAGS"
1438 LIBS="$glib_save_LIBS"
1443 dnl ****************************************
1444 dnl *** GLib POLL* compatibility defines ***
1445 dnl ****************************************
1447 [#include <sys/types.h>
1448 #include <sys/poll.h>],
1449 POLLIN:1 POLLOUT:4 POLLPRI:2 POLLERR:8 POLLHUP:16 POLLNVAL:32,
1450 glibconfig-sysdefs.h,
1453 dnl **********************
1454 dnl *** Win32 API libs ***
1455 dnl **********************
1459 G_LIBS_EXTRA="-luser32 -lwsock32 -lkernel32"
1462 G_LIBS_EXTRA="-lwsock32"
1468 AC_SUBST(G_LIBS_EXTRA)
1470 dnl ***********************
1471 dnl *** Tests for iconv ***
1472 dnl ***********************
1474 AC_ARG_WITH(libiconv, [ --with-libiconv Use the libiconv library ],,with_libiconv=maybe)
1478 if test "x$with_libiconv" != "xyes" ; then
1480 # Check in the C library
1482 AC_CHECK_FUNC(iconv_open, with_libiconv=no; found_iconv=yes)
1485 if test "x$with_libiconv" != "xno" ; then
1487 # Check for libiconv
1489 AC_CHECK_LIB(iconv, libiconv_open, with_libiconv=yes; found_iconv=yes)
1492 if test "x$found_iconv" = "xno" ; then
1493 AC_MSG_ERROR([*** No iconv() implementation found in C library or libiconv])
1496 if test "x$with_libiconv" = "xyes" ; then
1497 ICONV_LIBS="-liconv"
1498 AC_DEFINE(USE_LIBICONV)
1500 AC_SUBST(ICONV_LIBS)
1502 dnl If the system doesn't define EILSEQ, we should define EILSEQ ourselves
1503 dnl since we need it for g_iconv()
1505 AC_MSG_CHECKING([for EILSEQ])
1511 ], have_eilseq=yes, have_eilseq=no);
1512 AC_MSG_RESULT($have_eilseq)
1514 dnl **************************
1515 dnl *** Checks for gtk-doc ***
1516 dnl **************************
1518 AC_ARG_WITH(html-dir, [ --with-html-dir=PATH path to installed docs])
1520 if test "x$with_html_dir" = "x" ; then
1521 HTML_DIR='${datadir}/gtk-doc/html'
1523 HTML_DIR=$with_html_dir
1528 AC_CHECK_PROG(GTKDOC, gtkdoc-mkdb, true, false)
1530 gtk_doc_min_version=0.6
1532 gtk_doc_version=`gtkdoc-mkdb --version`
1533 AC_MSG_CHECKING([gtk-doc version ($gtk_doc_version) >= $gtk_doc_min_version])
1534 if perl <<EOF ; then
1535 exit (("$gtk_doc_version" =~ /^[[0-9]]+\.[[0-9]]+$/) &&
1536 ("$gtk_doc_version" >= "$gtk_doc_min_version") ? 0 : 1);
1545 AM_CONDITIONAL(HAVE_GTK_DOC, $GTKDOC)
1546 AC_SUBST(HAVE_GTK_DOC)
1548 AC_CHECK_PROG(DB2HTML, db2html, true, false)
1549 AM_CONDITIONAL(HAVE_DOCBOOK, $DB2HTML)
1551 dnl Let people disable the gtk-doc stuff.
1552 AC_ARG_ENABLE(gtk-doc, [ --enable-gtk-doc use gtk-doc to build documentation [default=auto]], enable_gtk_doc="$enableval", enable_gtk_doc=auto)
1554 if test x$enable_gtk_doc = xauto ; then
1555 if test x$GTKDOC = xtrue ; then
1562 dnl NOTE: We need to use a separate automake conditional for this
1563 dnl to make this work with the tarballs.
1564 AM_CONDITIONAL(ENABLE_GTK_DOC, test x$enable_gtk_doc = xyes)
1566 dnl ******************************
1567 dnl *** output the whole stuff ***
1568 dnl ******************************
1570 AC_OUTPUT_COMMANDS([
1572 ## Generate `glibconfig.h' in two cases
1573 ## 1. `config.status' is run either explicitly, or via configure.
1574 ## Esp. not when it is run in `Makefile' to generate makefiles and
1576 ## 2. CONFIG_OTHER is set explicitly
1578 ## Case 1 is difficult. We know that `automake' sets one of
1579 ## CONFIG_FILES or CONFIG_HEADERS to empty. This heuristic works
1580 ## only when AM_CONFIG_HEADER is set, however.
1582 if test -n "${CONFIG_FILES}" && test -n "${CONFIG_HEADERS}"; then
1583 # Both CONFIG_FILES and CONFIG_HEADERS are non-empty ==> Case 1
1584 CONFIG_OTHER=${CONFIG_OTHER:-glibconfig.h}
1586 case "$CONFIG_OTHER" in
1588 echo creating glibconfig.h
1589 outfile=glibconfig.h-tmp
1590 cat > $outfile <<\_______EOF
1593 * This is a generated file. Please modify 'configure.in'
1596 #ifndef __G_LIBCONFIG_H__
1597 #define __G_LIBCONFIG_H__
1599 #include <glib/gmacros.h>
1603 if test x$glib_limits_h = xyes; then
1604 echo '#include <limits.h>' >> $outfile
1606 if test x$glib_float_h = xyes; then
1607 echo '#include <float.h>' >> $outfile
1609 if test x$glib_values_h = xyes; then
1610 echo '#include <values.h>' >> $outfile
1612 if test "$glib_header_alloca_h" = "yes"; then
1613 echo '#define GLIB_HAVE_ALLOCA_H' >> $outfile
1615 if test x$glib_sys_poll_h = xyes; then
1616 echo '#define GLIB_HAVE_SYS_POLL_H' >> $outfile
1619 cat >> $outfile <<_______EOF
1623 #define G_MINFLOAT $glib_mf
1624 #define G_MAXFLOAT $glib_Mf
1625 #define G_MINDOUBLE $glib_md
1626 #define G_MAXDOUBLE $glib_Md
1627 #define G_MINSHORT $glib_ms
1628 #define G_MAXSHORT $glib_Ms
1629 #define G_MAXUSHORT $glib_Mus
1630 #define G_MININT $glib_mi
1631 #define G_MAXINT $glib_Mi
1632 #define G_MAXUINT $glib_Mui
1633 #define G_MINLONG $glib_ml
1634 #define G_MAXLONG $glib_Ml
1635 #define G_MAXULONG $glib_Mul
1640 ### this should always be true in a modern C/C++ compiler
1641 cat >>$outfile <<_______EOF
1642 typedef signed char gint8;
1643 typedef unsigned char guint8;
1647 if test -n "$gint16"; then
1648 cat >>$outfile <<_______EOF
1649 typedef signed $gint16 gint16;
1650 typedef unsigned $gint16 guint16;
1651 #define G_GINT16_FORMAT $gint16_format
1652 #define G_GUINT16_FORMAT $guint16_format
1657 if test -n "$gint32"; then
1658 cat >>$outfile <<_______EOF
1659 typedef signed $gint32 gint32;
1660 typedef unsigned $gint32 guint32;
1661 #define G_GINT32_FORMAT $gint32_format
1662 #define G_GUINT32_FORMAT $guint32_format
1667 if test -n "$gint64"; then
1668 cat >>$outfile <<_______EOF
1669 #define G_HAVE_GINT64 1
1671 ${glib_extension}typedef signed $gint64 gint64;
1672 ${glib_extension}typedef unsigned $gint64 guint64;
1674 #define G_GINT64_CONSTANT(val) $gint64_constant
1676 if test -n "$gint64_format"; then
1677 cat >>$outfile <<_______EOF
1678 #define G_GINT64_FORMAT $gint64_format
1679 #define G_GUINT64_FORMAT $guint64_format
1684 cat >>$outfile <<_______EOF
1686 #define GLIB_SIZEOF_VOID_P $glib_void_p
1687 #define GLIB_SIZEOF_LONG $glib_long
1691 case x$glib_size_t in
1692 x2) echo "typedef gint16 gssize;" >> $outfile
1693 echo "typedef guint16 gsize;" >> $outfile
1695 x4) echo "typedef gint32 gssize;" >> $outfile
1696 echo "typedef guint32 gsize;" >> $outfile
1698 x8) echo "typedef gint64 gssize;" >> $outfile
1699 echo "typedef guint64 gsize;" >> $outfile
1701 *) echo "#error size of size_t is unknown" >> $outfile
1705 if test -z "$glib_unknown_void_p"; then
1706 cat >>$outfile <<_______EOF
1708 #define GPOINTER_TO_INT(p) ((gint) ${glib_gpi_cast} (p))
1709 #define GPOINTER_TO_UINT(p) ((guint) ${glib_gpui_cast} (p))
1711 #define GINT_TO_POINTER(i) ((gpointer) ${glib_gpi_cast} (i))
1712 #define GUINT_TO_POINTER(u) ((gpointer) ${glib_gpui_cast} (u))
1715 echo '#error SIZEOF_VOID_P unknown - This should never happen' >>$outfile
1720 cat >>$outfile <<_______EOF
1729 #define G_HAVE_INLINE 1
1730 #else /* !__cplusplus */
1732 #endif /* !__cplusplus */
1736 if test x$g_have_iso_c_varargs = xyes ; then
1737 cat >>$outfile <<_______EOF
1739 # define G_HAVE_ISO_VARARGS 1
1743 if test x$g_have_iso_cxx_varargs = xyes ; then
1744 cat >>$outfile <<_______EOF
1746 # define G_HAVE_ISO_VARARGS 1
1750 if test x$g_have_gnuc_varargs = xyes ; then
1751 cat >>$outfile <<_______EOF
1753 #define G_HAVE_GNUC_VARARGS 1
1758 if test x$g_have_eilseq = xno; then
1759 cat >>$outfile <<_______EOF
1761 /* On some systems, like SunOS and NetBSD, EILSEQ is not defined.
1762 * The correspondence between this and the corresponding definition
1763 * in libiconv is essential.
1765 # define EILSEQ ENOENT
1772 if test x$g_mutex_has_default = xyes; then
1773 cat >>$outfile <<_______EOF
1774 $g_enable_threads_def G_THREADS_ENABLED
1775 #define G_THREADS_IMPL_$g_threads_impl_def
1776 typedef struct _GStaticMutex GStaticMutex;
1777 struct _GStaticMutex
1779 struct _GMutex *runtime_mutex;
1781 char pad[$g_mutex_sizeof];
1782 double dummy_double;
1783 void *dummy_pointer;
1787 #define G_STATIC_MUTEX_INIT { NULL, { { $g_mutex_contents} } }
1788 #define g_static_mutex_get_mutex(mutex) \
1789 (g_thread_use_default_impl ? ((GMutex*) &((mutex)->static_mutex)) : \
1790 g_static_mutex_get_mutex_impl (&((mutex)->runtime_mutex)))
1793 cat >>$outfile <<_______EOF
1794 $g_enable_threads_def G_THREADS_ENABLED
1795 #define G_THREADS_IMPL_$g_threads_impl_def
1796 typedef struct _GMutex* GStaticMutex;
1797 #define G_STATIC_MUTEX_INIT NULL
1798 #define g_static_mutex_get_mutex(mutex) (g_static_mutex_get_mutex_impl (mutex))
1802 cat >>$outfile <<_______EOF
1803 /* This represents a system thread as used by the implementation. An
1804 * alien implementaion, as loaded by g_thread_init can only count on
1805 * "sizeof (gpointer)" bytes to store their info. We however need more
1806 * for some of our native implementations. */
1807 typedef union _GSystemThread GSystemThread;
1808 union _GSystemThread
1810 char data[$g_system_thread_sizeof];
1811 double dummy_double;
1812 void *dummy_pointer;
1819 if test -n "$gint64"; then
1820 g_bit_sizes="$g_bit_sizes 64"
1822 for bits in $g_bit_sizes; do
1823 cat >>$outfile <<_______EOF
1824 #define GINT${bits}_TO_${g_bs_native}(val) ((gint${bits}) (val))
1825 #define GUINT${bits}_TO_${g_bs_native}(val) ((guint${bits}) (val))
1826 #define GINT${bits}_TO_${g_bs_alien}(val) ((gint${bits}) GUINT${bits}_SWAP_LE_BE (val))
1827 #define GUINT${bits}_TO_${g_bs_alien}(val) (GUINT${bits}_SWAP_LE_BE (val))
1831 cat >>$outfile <<_______EOF
1832 #define GLONG_TO_LE(val) ((glong) GINT${glongbits}_TO_LE (val))
1833 #define GULONG_TO_LE(val) ((gulong) GUINT${glongbits}_TO_LE (val))
1834 #define GLONG_TO_BE(val) ((glong) GINT${glongbits}_TO_BE (val))
1835 #define GULONG_TO_BE(val) ((gulong) GUINT${glongbits}_TO_BE (val))
1836 #define GINT_TO_LE(val) ((gint) GINT${gintbits}_TO_LE (val))
1837 #define GUINT_TO_LE(val) ((guint) GUINT${gintbits}_TO_LE (val))
1838 #define GINT_TO_BE(val) ((gint) GINT${gintbits}_TO_BE (val))
1839 #define GUINT_TO_BE(val) ((guint) GUINT${gintbits}_TO_BE (val))
1840 #define G_BYTE_ORDER $g_byte_order
1844 if test -r glibconfig-sysdefs.h; then
1845 cat glibconfig-sysdefs.h >>$outfile
1848 cat >>$outfile <<_______EOF
1850 #define G_MODULE_SUFFIX "$g_module_suffix"
1854 #endif /* GLIBCONFIG_H */
1858 if cmp -s $outfile glibconfig.h; then
1859 echo glibconfig.h is unchanged
1862 mv $outfile glibconfig.h
1867 # Note that if two cases are the same, case goes with the first one.
1868 # Note also that this is inside an AC_OUTPUT_COMMAND. We do not depend
1869 # on variable expansion in case labels. Look at the generated config.status
1872 if test "x${ac_cv_working_alloca_h+set}" = xset ; then
1873 glib_header_alloca_h="$ac_cv_working_alloca_h"
1875 glib_header_alloca_h="$ac_cv_header_alloca_h"
1879 x$ac_cv_header_float_h)
1881 glib_mf=FLT_MIN glib_Mf=FLT_MAX
1882 glib_md=DBL_MIN glib_Md=DBL_MAX
1884 x$ac_cv_header_values_h)
1886 glib_mf=MINFLOAT glib_Mf=MAXFLOAT
1887 glib_md=MINDOUBLE glib_Md=MAXDOUBLE
1892 x$ac_cv_header_limits_h)
1894 glib_ms=SHRT_MIN glib_Ms=SHRT_MAX glib_Mus=USHRT_MAX
1895 glib_mi=INT_MIN glib_Mi=INT_MAX glib_Mui=UINT_MAX
1896 glib_ml=LONG_MIN glib_Ml=LONG_MAX glib_Mul=ULONG_MAX
1898 x$ac_cv_header_values_h)
1900 glib_ms=MINSHORT glib_Ms=MAXSHORT glib_Mus="(((gushort)G_MAXSHORT)*2+1)"
1901 glib_mi=MININT glib_Mi=MAXINT glib_Mui="(((guint)G_MAXINT)*2+1)"
1902 glib_ml=MINLONG glib_Ml=MAXLONG glib_Mul="(((gulong)G_MAXLONG)*2+1)"
1906 if test x$ac_cv_header_sys_poll_h = xyes ; then
1911 $ac_cv_sizeof_short)
1913 gint16_format='"hi"'
1914 guint16_format='"hu"'
1919 guint16_format='"u"'
1923 $ac_cv_sizeof_short)
1925 gint32_format='"hi"'
1926 guint32_format='"hu"'
1931 guint32_format='"u"'
1935 gint32_format='"li"'
1936 guint32_format='"lu"'
1943 guint64_format='"u"'
1945 gint64_constant='(val)'
1949 gint64_format='"li"'
1950 guint64_format='"lu"'
1952 gint64_constant='(val##L)'
1954 $ac_cv_sizeof_long_long)
1956 if test -n "$glib_cv_long_long_format"; then
1957 gint64_format='"'$glib_cv_long_long_format'i"'
1958 guint64_format='"'$glib_cv_long_long_format'u"'
1960 glib_extension='G_GNUC_EXTENSION '
1961 gint64_constant='(G_GNUC_EXTENSION (val##LL))'
1964 glib_size_t=$glib_cv_sizeof_size_t
1965 glib_void_p=$ac_cv_sizeof_long
1966 glib_long=$ac_cv_sizeof_void_p
1968 gintbits=`expr $ac_cv_sizeof_int \* 8`
1969 glongbits=`expr $ac_cv_sizeof_long \* 8`
1972 case $ac_cv_sizeof_void_p in
1973 $ac_cv_sizeof_int) glib_gpi_cast='' glib_gpui_cast='' ;;
1974 $ac_cv_sizeof_long) glib_gpi_cast='(glong)' glib_gpui_cast='(gulong)' ;;
1975 *) glib_unknown_void_p=yes ;;
1980 x$ac_cv_func_atexit)
1982 #ifdef NeXT /* @#%@! NeXTStep */
1983 # define g_ATEXIT(proc) (!atexit (proc))
1985 # define g_ATEXIT(proc) (atexit (proc))
1988 x$ac_cv_func_on_exit)
1990 #define g_ATEXIT(proc) (on_exit ((void (*)(int, void*))(proc), NULL))"
1995 x$ac_cv_func_memmove)
1997 #define g_memmove(d,s,n) G_STMT_START { memmove ((d), (s), (n)); } G_STMT_END'
1999 x$glib_cv_working_bcopy)
2001 /* memmove isn't available, but bcopy can copy overlapping memory regions */
2002 #define g_memmove(d,s,n) G_STMT_START { bcopy ((s), (d), (n)); } G_STMT_END"
2006 /* memmove isn't found and bcopy can't copy overlapping memory regions,
2007 * so we have to roll our own copy routine. */
2008 void g_memmove (void* dest, const void * src, unsigned long len);"
2013 #define GLIB_MAJOR_VERSION $GLIB_MAJOR_VERSION
2014 #define GLIB_MINOR_VERSION $GLIB_MINOR_VERSION
2015 #define GLIB_MICRO_VERSION $GLIB_MICRO_VERSION
2019 x$glib_cv_va_copy) glib_vacopy='#define G_VA_COPY va_copy' ;;
2020 x$glib_cv___va_copy) glib_vacopy='#define G_VA_COPY __va_copy' ;;
2024 if test x$glib_cv_va_val_copy = xno; then
2025 glib_vacopy="\$glib_vacopy
2026 #define G_VA_COPY_AS_ARRAY 1"
2029 if test x$glib_cv_hasinline = xyes; then
2030 glib_inline='#define G_HAVE_INLINE 1'
2032 if test x$glib_cv_has__inline = xyes; then
2033 glib_inline="\$glib_inline
2034 #define G_HAVE___INLINE 1"
2036 if test x$glib_cv_has__inline__ = xyes; then
2037 glib_inline="\$glib_inline
2038 #define G_HAVE___INLINE__ 1"
2041 g_have_gnuc_varargs=$g_have_gnuc_varargs
2042 g_have_iso_c_varargs=$g_have_iso_c_varargs
2043 g_have_iso_cxx_varargs=$g_have_iso_cxx_varargs
2046 x$ac_cv_c_bigendian)
2047 g_byte_order=G_BIG_ENDIAN
2052 g_byte_order=G_LITTLE_ENDIAN
2058 g_have_eilseq=$have_eilseq
2060 case x$have_threads in
2061 xnone) g_enable_threads_def="#undef";;
2062 *) g_enable_threads_def="#define";;
2065 g_threads_impl_def=$g_threads_impl
2067 g_mutex_has_default="$mutex_has_default"
2068 g_mutex_sizeof="$glib_cv_sizeof_gmutex"
2069 g_system_thread_sizeof="$glib_cv_sizeof_system_thread"
2070 g_mutex_contents="$glib_cv_byte_contents_gmutex"
2072 g_module_suffix="$glib_gmodule_suffix"
2076 glib_os="#define G_OS_BEOS"
2079 glib_os="#define G_OS_UNIX
2080 #define G_PLATFORM_WIN32
2081 #define G_WITH_CYGWIN"
2084 glib_os="#define G_OS_WIN32
2085 #define G_PLATFORM_WIN32"
2088 glib_os="#define G_OS_UNIX"
2095 glib-2.0-uninstalled.pc
2097 gmodule-2.0-uninstalled.pc
2099 gthread-2.0-uninstalled.pc
2101 gobject-2.0-uninstalled.pc
2105 build/win32/Makefile
2107 gmodule/gmoduleconf.h
2113 docs/reference/Makefile
2114 docs/reference/glib/Makefile
2115 docs/reference/gobject/Makefile
2119 echo " *** IMPORTANT *** "
2121 echo "This is a development version of GLib. You should be using a stable"
2122 echo "version, which is available at ftp://ftp.gtk.org/pub/gtk/v1.2/. The"
2123 echo "version you just configured is meant for developers of GLib only:"
2125 echo " * You should not base stable software on this version of GLib."
2126 echo " * GNOME developers should use a stable version of GLib."
2128 echo " *** You should be using GLib 1.2 instead. ***"