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 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])
928 G_LIB_WIN32_RESOURCE=glib-win32res.lo
929 G_MODULE_WIN32_RESOURCE=gmodule-win32res.lo
930 G_OBJECT_WIN32_RESOURCE=gobject-win32res.lo
931 G_THREAD_WIN32_RESOURCE=gthread-win32res.lo
935 G_LIB_WIN32_RESOURCE=
936 G_MODULE_WIN32_RESOURCE=
937 G_OBJECT_WIN32_RESOURCE=
938 G_THREAD_WIN32_RESOURCE=
941 AC_MSG_RESULT($os_win32)
942 AM_CONDITIONAL(OS_WIN32, test x$os_win32 = xyes)
943 AC_SUBST(G_LIB_WIN32_RESOURCE)
944 AC_SUBST(G_MODULE_WIN32_RESOURCE)
945 AC_SUBST(G_OBJECT_WIN32_RESOURCE)
946 AC_SUBST(G_THREAD_WIN32_RESOURCE)
948 dnl ***********************
949 dnl *** g_thread checks ***
950 dnl ***********************
952 AC_ARG_WITH(threads, [ --with-threads=[none/posix/dce/solaris/win32] specify a thread implementation to use],
953 if test "x$with_threads" = x; then
956 want_threads=$with_threads
959 if test "x$enable_threads" = "xno"; then
962 if test "x$want_threads" = "xnone"; then
966 dnl error and warning message
967 dnl *************************
969 THREAD_NO_IMPLEMENTATION="You do not have any known thread system on your
970 computer. GLib will not have a default thread implementation."
972 FLAG_DOES_NOT_WORK="I can't find the MACRO to enable thread safety on your
973 platform (normally it's "_REENTRANT"). I'll not use any flag on
974 compilation now, but then your programs might not work.
975 Please provide information on how it is done on your system."
977 LIBS_NOT_FOUND_1="I can't find the libraries for the thread implementation
980 LIBS_NOT_FOUND_2=". Please choose another thread implementation or
981 provide information on your thread implementation.
982 You can also run 'configure --disable-threads'
983 to compile without thread support."
985 FUNC_NO_GETPWUID_R="the 'g_get_(user_name|real_name|home_dir|tmp_dir)'
986 functions will not be MT-safe during their first call because
987 there is no working 'getpwuid_r' on your system."
989 FUNC_NO_LOCALTIME_R="the 'g_date_set_time' function will not be MT-safe
990 because there is no 'localtime_r' on your system."
992 POSIX_NO_YIELD="I can not find a yield functions for your platform. A rather
993 crude surrogate will be used. If you happen to know a
994 yield function for your system, please inform the GLib
997 POSIX_NO_PRIORITIES="I can not find the minimal and maximal priorities for
998 threads on your system. Thus threads can only have the default
999 priority. If you happen to know these main/max
1000 priorities, please inform the GLib developers."
1003 dnl determination of thread implementation
1004 dnl ***************************************
1007 if test "x$want_threads" = xyes || test "x$want_threads" = xsolaris; then
1010 AC_CHECK_LIB(thread, cond_init, have_threads=solaris)
1014 if test "x$want_threads" = xyes || test "x$want_threads" = xposix \
1015 || test "x$want_threads" = xdce; then
1016 # -D_POSIX4_DRAFT_SOURCE -D_POSIX4A_DRAFT10_SOURCE is for DG/UX
1017 # -U_OSF_SOURCE is for Digital UNIX 4.0d
1018 GTHREAD_COMPILE_IMPL_DEFINES="-D_POSIX4_DRAFT_SOURCE -D_POSIX4A_DRAFT10_SOURCE -U_OSF_SOURCE"
1019 glib_save_CPPFLAGS="$CPPFLAGS"
1020 CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
1021 if test "x$have_threads" = xnone; then
1022 AC_TRY_COMPILE([#include <pthread.h>],
1023 [pthread_attr_t attr; pthread_attr_init(&attr);],
1026 if test "x$have_threads" = xnone; then
1027 AC_TRY_COMPILE([#include <pthread.h>],
1028 [pthread_attr_t attr; pthread_attr_create(&attr);],
1031 CPPFLAGS="$glib_save_CPPFLAGS"
1033 if test "x$want_threads" = xyes || test "x$want_threads" = xwin32; then
1035 *-*-mingw*|*-*-cygwin*)
1041 AC_MSG_CHECKING(for thread implementation)
1043 if test "x$have_threads" = xnone && test "x$want_threads" != xno; then
1044 AC_MSG_RESULT(none available)
1045 AC_MSG_WARN($THREAD_NO_IMPLEMENTATION)
1047 AC_MSG_RESULT($have_threads)
1051 dnl determination of G_THREAD_CFLAGS
1052 dnl ********************************
1055 G_THREAD_LIBS_EXTRA=
1058 if test x"$have_threads" != xnone; then
1060 G_THREAD_CFLAGS="-D_REENTRANT" # good default guess
1064 G_THREAD_CFLAGS="$G_THREAD_CFLAGS -D_THREAD_SAFE"
1065 if test x"$GCC" = xyes; then
1066 G_THREAD_CFLAGS="$G_THREAD_CFLAGS -mthreads"
1070 G_THREAD_CFLAGS="$G_THREAD_CFLAGS -D_THREAD_SAFE"
1072 # FreeBSD 2.2.x shiped with gcc 2.7.2.x, which doesn't support
1075 *-sysv5uw7*) # UnixWare 7
1076 if test "$GCC" != "yes"; then
1077 G_THREAD_CFLAGS="$G_THREAD_CFLAGS -Kthread"
1079 G_THREAD_CFLAGS="$G_THREAD_CFLAGS -pthread"
1083 G_THREAD_CFLAGS="$G_THREAD_CFLAGS -D_POSIX4A_DRAFT10_SOURCE"
1086 # if we are not finding the localtime_r function, then we probably are
1087 # not using the proper multithread flag
1089 glib_save_CPPFLAGS="$CPPFLAGS"
1090 CPPFLAGS="$CPPFLAGS $G_THREAD_CFLAGS"
1092 # First we test, whether localtime_r is declared in time.h
1093 # directly. Then we test whether a macro localtime_r exists, in
1094 # which case localtime_r in the test program is replaced and thus
1095 # if we still find localtime_r in the output, it is not defined as
1098 AC_EGREP_CPP([[^a-zA-Z1-9_]localtime_r[^a-zA-Z1-9_]], [#include <time.h>], ,
1099 [AC_EGREP_CPP([[^a-zA-Z1-9_]localtime_r[^a-zA-Z1-9_]], [#include <time.h>
1101 AC_MSG_WARN($FLAG_DOES_NOT_WORK))])
1103 CPPFLAGS="$glib_save_CPPFLAGS"
1105 AC_MSG_CHECKING(thread related cflags)
1106 AC_MSG_RESULT($G_THREAD_CFLAGS)
1107 CFLAGS="$CFLAGS $G_THREAD_CFLAGS"
1110 dnl determination of G_THREAD_LIBS
1111 dnl ******************************
1113 mutex_has_default=no
1114 case $have_threads in
1116 glib_save_CPPFLAGS="$CPPFLAGS"
1117 CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
1119 glib_save_LIBS="$LIBS"
1121 *-sysv5uw7*) # UnixWare 7
1122 if test "$GCC" != "yes"; then
1123 G_THREAD_LIBS="-Kthread"
1125 G_THREAD_LIBS="-pthread"
1129 for thread_lib in "" pthread pthread32 pthreads c_r thread dce; do
1130 if test x"$thread_lib" = x; then
1134 add_thread_lib="-l$thread_lib"
1135 IN=" in -l$thread_lib"
1137 if test x"$have_threads" = xposix; then
1140 defattr=pthread_attr_default
1143 LIBS="$glib_save_LIBS $add_thread_lib"
1145 AC_MSG_CHECKING(for pthread_create/pthread_join$IN)
1146 AC_TRY_RUN([#include <pthread.h>
1148 void* func(void* data) {check_me = 42;}
1152 pthread_create (&t, $defattr, func, 0);
1153 pthread_join (t, &ret);
1154 exit (check_me != 42);
1157 G_THREAD_LIBS="$add_thread_lib"
1159 [AC_MSG_RESULT(no)])
1161 if test "x$G_THREAD_LIBS" = xerror; then
1162 AC_MSG_ERROR($LIBS_NOT_FOUND_1$have_threads$LIBS_NOT_FOUND_2)
1164 for thread_lib in "" rt rte; do
1165 if test x"$thread_lib" = x; then
1169 add_thread_lib="-l$thread_lib"
1170 IN=" in -l$thread_lib"
1172 LIBS="$glib_save_LIBS $add_thread_lib"
1174 AC_MSG_CHECKING(for sched_get_priority_min$IN)
1175 AC_TRY_RUN([#include <sched.h>
1179 return sched_get_priority_min(SCHED_OTHER)==-1
1183 G_THREAD_LIBS="$G_THREAD_LIBS $add_thread_lib"
1184 posix_priority_min="sched_get_priority_min(SCHED_OTHER)"
1185 posix_priority_max="sched_get_priority_max(SCHED_OTHER)"
1187 [AC_MSG_RESULT(no)])
1189 LIBS="$glib_save_LIBS"
1192 mutex_has_default=yes
1193 mutex_default_type='pthread_mutex_t'
1194 mutex_default_init='PTHREAD_MUTEX_INITIALIZER'
1195 mutex_header_file='pthread.h'
1196 if test "x$have_threads" = "xposix"; then
1197 g_threads_impl="POSIX"
1199 g_threads_impl="DCE"
1200 have_threads="posix"
1202 AC_SUBST(GTHREAD_COMPILE_IMPL_DEFINES)
1203 CPPFLAGS="$glib_save_CPPFLAGS"
1207 AC_CHECK_LIB(thread, cond_init, G_THREAD_LIBS="-lthread")
1208 mutex_has_default=yes
1209 mutex_default_type='mutex_t'
1210 mutex_default_init="DEFAULTMUTEX"
1211 mutex_header_file='thread.h'
1212 g_threads_impl="SOLARIS"
1215 g_threads_impl="WIN32"
1219 g_threads_impl="NONE"
1222 g_threads_impl="NONE"
1227 if test "x$G_THREAD_LIBS" = xerror; then
1228 AC_MSG_ERROR($LIBS_NOT_FOUND_1$have_threads$LIBS_NOT_FOUND_2)
1233 G_THREAD_LIBS="-lbe -lroot -lglib "
1234 G_THREAD_LIBS_EXTRA="-L\$(top_builddir_full)/.libs"
1240 AC_MSG_CHECKING(thread related libraries)
1241 AC_MSG_RESULT($G_THREAD_LIBS)
1243 dnl check for mt safe function variants and some posix functions
1244 dnl ************************************************************
1246 if test x"$have_threads" != xnone; then
1247 glib_save_LIBS="$LIBS"
1248 # we are not doing the following for now, as this might require glib
1249 # to always be linked with the thread libs on some platforms.
1250 # LIBS="$LIBS $G_THREAD_LIBS"
1251 AC_CHECK_FUNCS(localtime_r)
1252 if test "$ac_cv_header_pwd_h" = "yes"; then
1253 AC_CACHE_CHECK([for posix getpwuid_r],
1254 ac_cv_func_posix_getpwuid_r,
1255 [AC_TRY_RUN([#include <errno.h>
1257 int main () { char buffer[10000];
1258 struct passwd pwd, *pwptr = &pwd;
1261 error = getpwuid_r (0, &pwd, buffer,
1262 sizeof (buffer), &pwptr);
1263 return (error < 0 && errno == ENOSYS)
1264 || error == ENOSYS; }],
1265 [ac_cv_func_posix_getpwuid_r=yes],
1266 [ac_cv_func_posix_getpwuid_r=no])])
1267 if test "$ac_cv_func_posix_getpwuid_r" = yes; then
1268 AC_DEFINE(HAVE_POSIX_GETPWUID_R,1,
1269 [Have POSIX function getpwuid_r])
1271 AC_CACHE_CHECK([for nonposix getpwuid_r],
1272 ac_cv_func_nonposix_getpwuid_r,
1273 [AC_TRY_LINK([#include <pwd.h>],
1274 [char buffer[10000];
1276 getpwuid_r (0, &pwd, buffer,
1278 [ac_cv_func_nonposix_getpwuid_r=yes],
1279 [ac_cv_func_nonposix_getpwuid_r=no])])
1280 if test "$ac_cv_func_nonposix_getpwuid_r" = yes; then
1281 AC_DEFINE(HAVE_NONPOSIX_GETPWUID_R,1,
1282 [Have non-POSIX function getpwuid_r])
1286 LIBS="$LIBS $G_THREAD_LIBS"
1287 if test x"$have_threads" = xposix; then
1288 glib_save_CPPFLAGS="$CPPFLAGS"
1289 CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
1290 dnl we might grow sizeof(pthread_t) later on, so use a dummy name here
1291 GLIB_SIZEOF([#include <pthread.h>], pthread_t, system_thread)
1292 # This is not AC_CHECK_FUNC to also work with function
1293 # name mangling in header files.
1294 AC_MSG_CHECKING(for pthread_attr_setstacksize)
1295 AC_TRY_LINK([#include <pthread.h>],
1296 [pthread_attr_t t; pthread_attr_setstacksize(&t,0)],
1298 AC_DEFINE(HAVE_PTHREAD_ATTR_SETSTACKSIZE,1,
1299 [Have function pthread_attr_setstacksize])],
1300 [AC_MSG_RESULT(no)])
1301 AC_MSG_CHECKING(for minimal/maximal thread priority)
1302 if test x"$posix_priority_min" = xnone; then
1303 AC_EGREP_CPP(PX_PRIO_MIN,[#include <pthread.h>
1305 posix_priority_min=PX_PRIO_MIN
1306 posix_priority_max=PX_PRIO_MAX])
1308 if test x"$posix_priority_min" = xnone; then
1309 AC_EGREP_CPP(PRI_OTHER_MIN,[#include <pthread.h>
1311 posix_priority_min=PRI_OTHER_MIN
1312 posix_priority_max=PRI_OTHER_MAX])
1314 if test x"$posix_priority_min" = x; then
1315 AC_MSG_RESULT(none found)
1316 AC_MSG_WARN($POSIX_NO_PRIORITIES)
1317 posix_priority_min=-1
1318 posix_priority_max=-1
1320 AC_MSG_RESULT($posix_priority_min/$posix_priority_max)
1321 AC_DEFINE_UNQUOTED(POSIX_MIN_PRIORITY,$posix_priority_min,[Minimum POSIX RT priority])
1322 AC_DEFINE_UNQUOTED(POSIX_MAX_PRIORITY,$posix_priority_max,[Maximum POSIX RT priority])
1324 posix_yield_func=none
1325 AC_MSG_CHECKING(for posix yield function)
1326 for yield_func in sched_yield pthread_yield_np pthread_yield \
1328 AC_TRY_LINK([#include <pthread.h>],
1330 [posix_yield_func="$yield_func"
1333 if test x"$posix_yield_func" = xnone; then
1334 AC_MSG_RESULT(none found)
1335 AC_MSG_WARN($POSIX_NO_YIELD)
1336 posix_yield_func="g_usleep(1000)"
1338 AC_MSG_RESULT($posix_yield_func)
1339 posix_yield_func="$posix_yield_func()"
1341 AC_DEFINE_UNQUOTED(POSIX_YIELD_FUNC,$posix_yield_func,[The POSIX RT yield function])
1342 CPPFLAGS="$glib_save_CPPFLAGS"
1344 AC_MSG_CHECKING(whether to use the PID niceness surrogate for thread priorities)
1345 AC_TRY_RUN([#include <pthread.h>
1346 #include <sys/types.h>
1348 pid_t other_pid = 0;
1350 void* func(void* data) {other_pid = getpid();}
1354 pthread_create (&t, $defattr, func, NULL);
1355 pthread_join (t, &ret);
1356 exit (getpid()==other_pid ||
1357 $posix_priority_min != $posix_priority_max);
1360 AC_DEFINE(G_THREAD_USE_PID_SURROGATE, 1, [whether to use the PID niceness surrogate for thread priorities])
1362 [AC_MSG_RESULT(no)])
1363 elif test x"$have_threads" = xwin32; then
1364 # It's a pointer to a private struct
1365 GLIB_SIZEOF(,struct _GThreadData *, system_thread)
1366 else # solaris threads
1367 GLIB_SIZEOF([#include <thread.h>], thread_t, system_thread)
1370 LIBS="$glib_save_LIBS"
1372 # now spit out all the warnings.
1373 if test "$ac_cv_func_posix_getpwuid_r" != "yes" &&
1374 test "$ac_cv_func_nonposix_getpwuid_r" != "yes"; then
1375 AC_MSG_WARN($FUNC_NO_GETPWUID_R)
1377 if test "$ac_cv_func_localtime_r" != "yes"; then
1378 AC_MSG_WARN($FUNC_NO_LOCALTIME_R)
1381 # If no thread implementation exists, we will provide enough
1382 # space for a pointer
1383 GLIB_SIZEOF(, void*, system_thread)
1386 AC_DEFINE_UNQUOTED(G_THREAD_SOURCE,"gthread-$have_threads.c",
1387 [Source file containing theread implementation])
1388 AC_SUBST(G_THREAD_CFLAGS)
1389 AC_SUBST(G_THREAD_LIBS)
1390 AC_SUBST(G_THREAD_LIBS_EXTRA)
1392 dnl **********************************************
1393 dnl *** GDefaultMutex setup and initialization ***
1394 dnl **********************************************
1396 dnl if mutex_has_default = yes, we also got
1397 dnl mutex_default_type, mutex_default_init and mutex_header_file
1398 GLIB_IF_VAR_EQ(mutex_has_default, yes,
1399 glib_save_CPPFLAGS="$CPPFLAGS"
1400 glib_save_LIBS="$LIBS"
1401 LIBS="$LIBS $G_THREAD_LIBS"
1402 CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
1403 GLIB_SIZEOF([#include <$mutex_header_file>],
1404 $mutex_default_type,
1407 GLIB_BYTE_CONTENTS([#include <$mutex_header_file>],
1408 $mutex_default_type,
1410 $glib_cv_sizeof_gmutex,
1411 $mutex_default_init)
1412 if test x"$glib_cv_byte_contents_gmutex" = xno; then
1413 mutex_has_default=no
1415 CPPFLAGS="$glib_save_CPPFLAGS"
1416 LIBS="$glib_save_LIBS"
1421 dnl ****************************************
1422 dnl *** GLib POLL* compatibility defines ***
1423 dnl ****************************************
1425 [#include <sys/types.h>
1426 #include <sys/poll.h>],
1427 POLLIN:1 POLLOUT:4 POLLPRI:2 POLLERR:8 POLLHUP:16 POLLNVAL:32,
1428 glibconfig-sysdefs.h,
1431 dnl **********************
1432 dnl *** Win32 API libs ***
1433 dnl **********************
1437 G_LIBS_EXTRA="-luser32 -lwsock32 -lkernel32"
1440 G_LIBS_EXTRA="-lwsock32"
1446 AC_SUBST(G_LIBS_EXTRA)
1448 dnl ***********************
1449 dnl *** Tests for iconv ***
1450 dnl ***********************
1452 AC_ARG_WITH(libiconv, [ --with-libiconv Use the libiconv library ],,with_libiconv=maybe)
1456 if test "x$with_libiconv" != "xyes" ; then
1458 # Check in the C library
1460 AC_CHECK_FUNC(iconv_open, with_libiconv=no; found_iconv=yes)
1463 if test "x$with_libiconv" != "xno" ; then
1465 # Check for libiconv
1467 AC_CHECK_LIB(iconv, libiconv_open, with_libiconv=yes; found_iconv=yes)
1470 if test "x$found_iconv" = "xno" ; then
1471 AC_MSG_ERROR([*** No iconv() implementation found in C library or libiconv])
1474 if test "x$with_libiconv" = "xyes" ; then
1475 ICONV_LIBS="-liconv"
1476 AC_DEFINE(USE_LIBICONV)
1478 AC_SUBST(ICONV_LIBS)
1480 dnl If the system doesn't define EILSEQ, we should define EILSEQ ourselves
1481 dnl since we need it for g_iconv()
1483 AC_MSG_CHECKING([for EILSEQ])
1489 ], have_eilseq=yes, have_eilseq=no);
1490 AC_MSG_RESULT($have_eilseq)
1492 dnl **************************
1493 dnl *** Checks for gtk-doc ***
1494 dnl **************************
1496 AC_ARG_WITH(html-dir, [ --with-html-dir=PATH path to installed docs])
1498 if test "x$with_html_dir" = "x" ; then
1499 HTML_DIR='${datadir}/gtk-doc/html'
1501 HTML_DIR=$with_html_dir
1506 AC_CHECK_PROG(GTKDOC, gtkdoc-mkdb, true, false)
1508 gtk_doc_min_version=0.6
1510 gtk_doc_version=`gtkdoc-mkdb --version`
1511 AC_MSG_CHECKING([gtk-doc version ($gtk_doc_version) >= $gtk_doc_min_version])
1512 if perl <<EOF ; then
1513 exit (("$gtk_doc_version" =~ /^[[0-9]]+\.[[0-9]]+$/) &&
1514 ("$gtk_doc_version" >= "$gtk_doc_min_version") ? 0 : 1);
1523 AM_CONDITIONAL(HAVE_GTK_DOC, $GTKDOC)
1524 AC_SUBST(HAVE_GTK_DOC)
1526 AC_CHECK_PROG(DB2HTML, db2html, true, false)
1527 AM_CONDITIONAL(HAVE_DOCBOOK, $DB2HTML)
1529 dnl Let people disable the gtk-doc stuff.
1530 AC_ARG_ENABLE(gtk-doc, [ --enable-gtk-doc use gtk-doc to build documentation [default=auto]], enable_gtk_doc="$enableval", enable_gtk_doc=auto)
1532 if test x$enable_gtk_doc = xauto ; then
1533 if test x$GTKDOC = xtrue ; then
1540 dnl NOTE: We need to use a separate automake conditional for this
1541 dnl to make this work with the tarballs.
1542 AM_CONDITIONAL(ENABLE_GTK_DOC, test x$enable_gtk_doc = xyes)
1544 dnl ******************************
1545 dnl *** output the whole stuff ***
1546 dnl ******************************
1548 AC_OUTPUT_COMMANDS([
1550 ## Generate `glibconfig.h' in two cases
1551 ## 1. `config.status' is run either explicitly, or via configure.
1552 ## Esp. not when it is run in `Makefile' to generate makefiles and
1554 ## 2. CONFIG_OTHER is set explicitly
1556 ## Case 1 is difficult. We know that `automake' sets one of
1557 ## CONFIG_FILES or CONFIG_HEADERS to empty. This heuristic works
1558 ## only when AM_CONFIG_HEADER is set, however.
1560 if test -n "${CONFIG_FILES}" && test -n "${CONFIG_HEADERS}"; then
1561 # Both CONFIG_FILES and CONFIG_HEADERS are non-empty ==> Case 1
1562 CONFIG_OTHER=${CONFIG_OTHER:-glibconfig.h}
1564 case "$CONFIG_OTHER" in
1566 echo creating glibconfig.h
1567 outfile=glibconfig.h-tmp
1568 cat > $outfile <<\_______EOF
1571 * This is a generated file. Please modify 'configure.in'
1574 #ifndef __G_LIBCONFIG_H__
1575 #define __G_LIBCONFIG_H__
1577 #include <glib/gmacros.h>
1581 if test x$glib_limits_h = xyes; then
1582 echo '#include <limits.h>' >> $outfile
1584 if test x$glib_float_h = xyes; then
1585 echo '#include <float.h>' >> $outfile
1587 if test x$glib_values_h = xyes; then
1588 echo '#include <values.h>' >> $outfile
1590 if test "$glib_header_alloca_h" = "yes"; then
1591 echo '#define GLIB_HAVE_ALLOCA_H' >> $outfile
1593 if test x$glib_sys_poll_h = xyes; then
1594 echo '#define GLIB_HAVE_SYS_POLL_H' >> $outfile
1597 cat >> $outfile <<_______EOF
1601 #define G_MINFLOAT $glib_mf
1602 #define G_MAXFLOAT $glib_Mf
1603 #define G_MINDOUBLE $glib_md
1604 #define G_MAXDOUBLE $glib_Md
1605 #define G_MINSHORT $glib_ms
1606 #define G_MAXSHORT $glib_Ms
1607 #define G_MAXUSHORT $glib_Mus
1608 #define G_MININT $glib_mi
1609 #define G_MAXINT $glib_Mi
1610 #define G_MAXUINT $glib_Mui
1611 #define G_MINLONG $glib_ml
1612 #define G_MAXLONG $glib_Ml
1613 #define G_MAXULONG $glib_Mul
1618 ### this should always be true in a modern C/C++ compiler
1619 cat >>$outfile <<_______EOF
1620 typedef signed char gint8;
1621 typedef unsigned char guint8;
1625 if test -n "$gint16"; then
1626 cat >>$outfile <<_______EOF
1627 typedef signed $gint16 gint16;
1628 typedef unsigned $gint16 guint16;
1629 #define G_GINT16_FORMAT $gint16_format
1630 #define G_GUINT16_FORMAT $guint16_format
1635 if test -n "$gint32"; then
1636 cat >>$outfile <<_______EOF
1637 typedef signed $gint32 gint32;
1638 typedef unsigned $gint32 guint32;
1639 #define G_GINT32_FORMAT $gint32_format
1640 #define G_GUINT32_FORMAT $guint32_format
1645 if test -n "$gint64"; then
1646 cat >>$outfile <<_______EOF
1647 #define G_HAVE_GINT64 1
1649 ${glib_extension}typedef signed $gint64 gint64;
1650 ${glib_extension}typedef unsigned $gint64 guint64;
1652 #define G_GINT64_CONSTANT(val) $gint64_constant
1654 if test -n "$gint64_format"; then
1655 cat >>$outfile <<_______EOF
1656 #define G_GINT64_FORMAT $gint64_format
1657 #define G_GUINT64_FORMAT $guint64_format
1662 cat >>$outfile <<_______EOF
1664 #define GLIB_SIZEOF_VOID_P $glib_void_p
1665 #define GLIB_SIZEOF_LONG $glib_long
1669 case x$glib_size_t in
1670 x2) echo "typedef gint16 gssize;" >> $outfile
1671 echo "typedef guint16 gsize;" >> $outfile
1673 x4) echo "typedef gint32 gssize;" >> $outfile
1674 echo "typedef guint32 gsize;" >> $outfile
1676 x8) echo "typedef gint64 gssize;" >> $outfile
1677 echo "typedef guint64 gsize;" >> $outfile
1679 *) echo "#error size of size_t is unknown" >> $outfile
1683 if test -z "$glib_unknown_void_p"; then
1684 cat >>$outfile <<_______EOF
1686 #define GPOINTER_TO_INT(p) ((gint) ${glib_gpi_cast} (p))
1687 #define GPOINTER_TO_UINT(p) ((guint) ${glib_gpui_cast} (p))
1689 #define GINT_TO_POINTER(i) ((gpointer) ${glib_gpi_cast} (i))
1690 #define GUINT_TO_POINTER(u) ((gpointer) ${glib_gpui_cast} (u))
1693 echo '#error SIZEOF_VOID_P unknown - This should never happen' >>$outfile
1698 cat >>$outfile <<_______EOF
1707 #define G_HAVE_INLINE 1
1708 #else /* !__cplusplus */
1710 #endif /* !__cplusplus */
1714 if test x$g_have_iso_c_varargs = xyes ; then
1715 cat >>$outfile <<_______EOF
1717 # define G_HAVE_ISO_VARARGS 1
1721 if test x$g_have_iso_cxx_varargs = xyes ; then
1722 cat >>$outfile <<_______EOF
1724 # define G_HAVE_ISO_VARARGS 1
1728 if test x$g_have_gnuc_varargs = xyes ; then
1729 cat >>$outfile <<_______EOF
1731 #define G_HAVE_GNUC_VARARGS 1
1736 if test x$g_have_eilseq = xno; then
1737 cat >>$outfile <<_______EOF
1739 /* On some systems, like SunOS and NetBSD, EILSEQ is not defined.
1740 * The correspondence between this and the corresponding definition
1741 * in libiconv is essential.
1743 # define EILSEQ ENOENT
1750 if test x$g_mutex_has_default = xyes; then
1751 cat >>$outfile <<_______EOF
1752 $g_enable_threads_def G_THREADS_ENABLED
1753 #define G_THREADS_IMPL_$g_threads_impl_def
1754 typedef struct _GStaticMutex GStaticMutex;
1755 struct _GStaticMutex
1757 struct _GMutex *runtime_mutex;
1759 char pad[$g_mutex_sizeof];
1760 double dummy_double;
1761 void *dummy_pointer;
1765 #define G_STATIC_MUTEX_INIT { NULL, { { $g_mutex_contents} } }
1766 #define g_static_mutex_get_mutex(mutex) \
1767 (g_thread_use_default_impl ? ((GMutex*) &((mutex)->static_mutex)) : \
1768 g_static_mutex_get_mutex_impl (&((mutex)->runtime_mutex)))
1771 cat >>$outfile <<_______EOF
1772 $g_enable_threads_def G_THREADS_ENABLED
1773 #define G_THREADS_IMPL_$g_threads_impl_def
1774 typedef struct _GMutex* GStaticMutex;
1775 #define G_STATIC_MUTEX_INIT NULL
1776 #define g_static_mutex_get_mutex(mutex) (g_static_mutex_get_mutex_impl (mutex))
1780 cat >>$outfile <<_______EOF
1781 /* This represents a system thread as used by the implementation. An
1782 * alien implementaion, as loaded by g_thread_init can only count on
1783 * "sizeof (gpointer)" bytes to store their info. We however need more
1784 * for some of our native implementations. */
1785 typedef union _GSystemThread GSystemThread;
1786 union _GSystemThread
1788 char data[$g_system_thread_sizeof];
1789 double dummy_double;
1790 void *dummy_pointer;
1797 if test -n "$gint64"; then
1798 g_bit_sizes="$g_bit_sizes 64"
1800 for bits in $g_bit_sizes; do
1801 cat >>$outfile <<_______EOF
1802 #define GINT${bits}_TO_${g_bs_native}(val) ((gint${bits}) (val))
1803 #define GUINT${bits}_TO_${g_bs_native}(val) ((guint${bits}) (val))
1804 #define GINT${bits}_TO_${g_bs_alien}(val) ((gint${bits}) GUINT${bits}_SWAP_LE_BE (val))
1805 #define GUINT${bits}_TO_${g_bs_alien}(val) (GUINT${bits}_SWAP_LE_BE (val))
1809 cat >>$outfile <<_______EOF
1810 #define GLONG_TO_LE(val) ((glong) GINT${glongbits}_TO_LE (val))
1811 #define GULONG_TO_LE(val) ((gulong) GUINT${glongbits}_TO_LE (val))
1812 #define GLONG_TO_BE(val) ((glong) GINT${glongbits}_TO_BE (val))
1813 #define GULONG_TO_BE(val) ((gulong) GUINT${glongbits}_TO_BE (val))
1814 #define GINT_TO_LE(val) ((gint) GINT${gintbits}_TO_LE (val))
1815 #define GUINT_TO_LE(val) ((guint) GUINT${gintbits}_TO_LE (val))
1816 #define GINT_TO_BE(val) ((gint) GINT${gintbits}_TO_BE (val))
1817 #define GUINT_TO_BE(val) ((guint) GUINT${gintbits}_TO_BE (val))
1818 #define G_BYTE_ORDER $g_byte_order
1822 if test -r glibconfig-sysdefs.h; then
1823 cat glibconfig-sysdefs.h >>$outfile
1826 cat >>$outfile <<_______EOF
1828 #define G_MODULE_SUFFIX "$g_module_suffix"
1832 #endif /* GLIBCONFIG_H */
1836 if cmp -s $outfile glibconfig.h; then
1837 echo glibconfig.h is unchanged
1840 mv $outfile glibconfig.h
1845 # Note that if two cases are the same, case goes with the first one.
1846 # Note also that this is inside an AC_OUTPUT_COMMAND. We do not depend
1847 # on variable expansion in case labels. Look at the generated config.status
1850 if test "x${ac_cv_working_alloca_h+set}" = xset ; then
1851 glib_header_alloca_h="$ac_cv_working_alloca_h"
1853 glib_header_alloca_h="$ac_cv_header_alloca_h"
1857 x$ac_cv_header_float_h)
1859 glib_mf=FLT_MIN glib_Mf=FLT_MAX
1860 glib_md=DBL_MIN glib_Md=DBL_MAX
1862 x$ac_cv_header_values_h)
1864 glib_mf=MINFLOAT glib_Mf=MAXFLOAT
1865 glib_md=MINDOUBLE glib_Md=MAXDOUBLE
1870 x$ac_cv_header_limits_h)
1872 glib_ms=SHRT_MIN glib_Ms=SHRT_MAX glib_Mus=USHRT_MAX
1873 glib_mi=INT_MIN glib_Mi=INT_MAX glib_Mui=UINT_MAX
1874 glib_ml=LONG_MIN glib_Ml=LONG_MAX glib_Mul=ULONG_MAX
1876 x$ac_cv_header_values_h)
1878 glib_ms=MINSHORT glib_Ms=MAXSHORT glib_Mus="(((gushort)G_MAXSHORT)*2+1)"
1879 glib_mi=MININT glib_Mi=MAXINT glib_Mui="(((guint)G_MAXINT)*2+1)"
1880 glib_ml=MINLONG glib_Ml=MAXLONG glib_Mul="(((gulong)G_MAXLONG)*2+1)"
1884 if test x$ac_cv_header_sys_poll_h = xyes ; then
1889 $ac_cv_sizeof_short)
1891 gint16_format='"hi"'
1892 guint16_format='"hu"'
1897 guint16_format='"u"'
1901 $ac_cv_sizeof_short)
1903 gint32_format='"hi"'
1904 guint32_format='"hu"'
1909 guint32_format='"u"'
1913 gint32_format='"li"'
1914 guint32_format='"lu"'
1921 guint64_format='"u"'
1923 gint64_constant='(val)'
1927 gint64_format='"li"'
1928 guint64_format='"lu"'
1930 gint64_constant='(val##L)'
1932 $ac_cv_sizeof_long_long)
1934 if test -n "$glib_cv_long_long_format"; then
1935 gint64_format='"'$glib_cv_long_long_format'i"'
1936 guint64_format='"'$glib_cv_long_long_format'u"'
1938 glib_extension='G_GNUC_EXTENSION '
1939 gint64_constant='(G_GNUC_EXTENSION (val##LL))'
1942 glib_size_t=$glib_cv_sizeof_size_t
1943 glib_void_p=$ac_cv_sizeof_long
1944 glib_long=$ac_cv_sizeof_void_p
1946 gintbits=`expr $ac_cv_sizeof_int \* 8`
1947 glongbits=`expr $ac_cv_sizeof_long \* 8`
1950 case $ac_cv_sizeof_void_p in
1951 $ac_cv_sizeof_int) glib_gpi_cast='' glib_gpui_cast='' ;;
1952 $ac_cv_sizeof_long) glib_gpi_cast='(glong)' glib_gpui_cast='(gulong)' ;;
1953 *) glib_unknown_void_p=yes ;;
1958 x$ac_cv_func_atexit)
1960 #ifdef NeXT /* @#%@! NeXTStep */
1961 # define g_ATEXIT(proc) (!atexit (proc))
1963 # define g_ATEXIT(proc) (atexit (proc))
1966 x$ac_cv_func_on_exit)
1968 #define g_ATEXIT(proc) (on_exit ((void (*)(int, void*))(proc), NULL))"
1973 x$ac_cv_func_memmove)
1975 #define g_memmove(d,s,n) G_STMT_START { memmove ((d), (s), (n)); } G_STMT_END'
1977 x$glib_cv_working_bcopy)
1979 /* memmove isn't available, but bcopy can copy overlapping memory regions */
1980 #define g_memmove(d,s,n) G_STMT_START { bcopy ((s), (d), (n)); } G_STMT_END"
1984 /* memmove isn't found and bcopy can't copy overlapping memory regions,
1985 * so we have to roll our own copy routine. */
1986 void g_memmove (void* dest, const void * src, unsigned long len);"
1991 #define GLIB_MAJOR_VERSION $GLIB_MAJOR_VERSION
1992 #define GLIB_MINOR_VERSION $GLIB_MINOR_VERSION
1993 #define GLIB_MICRO_VERSION $GLIB_MICRO_VERSION
1997 x$glib_cv_va_copy) glib_vacopy='#define G_VA_COPY va_copy' ;;
1998 x$glib_cv___va_copy) glib_vacopy='#define G_VA_COPY __va_copy' ;;
2002 if test x$glib_cv_va_val_copy = xno; then
2003 glib_vacopy="\$glib_vacopy
2004 #define G_VA_COPY_AS_ARRAY 1"
2007 if test x$glib_cv_hasinline = xyes; then
2008 glib_inline='#define G_HAVE_INLINE 1'
2010 if test x$glib_cv_has__inline = xyes; then
2011 glib_inline="\$glib_inline
2012 #define G_HAVE___INLINE 1"
2014 if test x$glib_cv_has__inline__ = xyes; then
2015 glib_inline="\$glib_inline
2016 #define G_HAVE___INLINE__ 1"
2019 g_have_gnuc_varargs=$g_have_gnuc_varargs
2020 g_have_iso_c_varargs=$g_have_iso_c_varargs
2021 g_have_iso_cxx_varargs=$g_have_iso_cxx_varargs
2024 x$ac_cv_c_bigendian)
2025 g_byte_order=G_BIG_ENDIAN
2030 g_byte_order=G_LITTLE_ENDIAN
2036 g_have_eilseq=$have_eilseq
2038 case x$have_threads in
2039 xnone) g_enable_threads_def="#undef";;
2040 *) g_enable_threads_def="#define";;
2043 g_threads_impl_def=$g_threads_impl
2045 g_mutex_has_default="$mutex_has_default"
2046 g_mutex_sizeof="$glib_cv_sizeof_gmutex"
2047 g_system_thread_sizeof="$glib_cv_sizeof_system_thread"
2048 g_mutex_contents="$glib_cv_byte_contents_gmutex"
2050 g_module_suffix="$glib_gmodule_suffix"
2054 glib_os="#define G_OS_BEOS"
2057 glib_os="#define G_OS_UNIX
2058 #define G_PLATFORM_WIN32
2059 #define G_WITH_CYGWIN"
2062 glib_os="#define G_OS_WIN32
2063 #define G_PLATFORM_WIN32"
2066 glib_os="#define G_OS_UNIX"
2073 glib-2.0-uninstalled.pc
2075 gmodule-2.0-uninstalled.pc
2077 gthread-2.0-uninstalled.pc
2079 gobject-2.0-uninstalled.pc
2083 build/win32/Makefile
2085 gmodule/gmoduleconf.h
2091 docs/reference/Makefile
2092 docs/reference/glib/Makefile
2093 docs/reference/gobject/Makefile
2097 echo " *** IMPORTANT *** "
2099 echo "This is a development version of GLib. You should be using a stable"
2100 echo "version, which is available at ftp://ftp.gtk.org/pub/gtk/v1.2/. The"
2101 echo "version you just configured is meant for developers of GLib only:"
2103 echo " * You should not base stable software on this version of GLib."
2104 echo " * GNOME developers should use a stable version of GLib."
2106 echo " *** You should be using GLib 1.2 instead. ***"