X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=configure.in;h=6c3f3143b359a17762b0e59f9f3a8bf733fb5bce;hb=e2600b0476761b7d87bf5dd7d328edb094059a0e;hp=768717c43a11c5589a553ce4752f98a429cb0ad6;hpb=427345f568237ec7e2701d38b60cf1df82694d5f;p=platform%2Fupstream%2Fglib.git diff --git a/configure.in b/configure.in index 768717c..6c3f314 100644 --- a/configure.in +++ b/configure.in @@ -15,8 +15,12 @@ cflags_set=${CFLAGS+set} # we rewrite this file rm -f glibconfig-sysdefs.h -# The following version number definitions apply to GLib and GModule -# as a whole, so if changes occoured in either of them, they are both +dnl we need to AC_DIVERT_PUSH/AC_DIVERT_POP these variable definitions so they +dnl are available for $ac_help expansion (don't we all *love* autoconf?) +AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)dnl +# +# The following version number definitions apply to GLib, GModule, GObject and GThread +# as a whole, so if changes occoured in any of them, they are all # treated with the same interface and binary age. # # Making releases: @@ -25,15 +29,23 @@ rm -f glibconfig-sysdefs.h # GLIB_BINARY_AGE += 1; # if any functions have been added, set GLIB_INTERFACE_AGE to 0. # if backwards compatibility has been broken, -# set GLIB_BINARY_AGE and GLIB_INTERFACE_AGE to 0. +# set GLIB_BINARY_AGE _and_ GLIB_INTERFACE_AGE to 0. # GLIB_MAJOR_VERSION=1 -GLIB_MINOR_VERSION=1 -GLIB_MICRO_VERSION=13 +GLIB_MINOR_VERSION=3 +GLIB_MICRO_VERSION=1 GLIB_INTERFACE_AGE=0 GLIB_BINARY_AGE=0 GLIB_VERSION=$GLIB_MAJOR_VERSION.$GLIB_MINOR_VERSION.$GLIB_MICRO_VERSION +dnl +AC_DIVERT_POP()dnl + +AC_SUBST(GLIB_MAJOR_VERSION) +AC_SUBST(GLIB_MINOR_VERSION) +AC_SUBST(GLIB_MICRO_VERSION) AC_SUBST(GLIB_VERSION) +AC_SUBST(GLIB_INTERFACE_AGE) +AC_SUBST(GLIB_BINARY_AGE) # libtool versioning LT_RELEASE=$GLIB_MAJOR_VERSION.$GLIB_MINOR_VERSION @@ -60,16 +72,40 @@ AC_DEFINE_UNQUOTED(GLIB_INTERFACE_AGE, $GLIB_INTERFACE_AGE) AC_DEFINE_UNQUOTED(GLIB_BINARY_AGE, $GLIB_BINARY_AGE) dnl Initialize libtool -AM_PROG_LIBTOOL +AC_PROG_LIBTOOL dnl Initialize maintainer mode AM_MAINTAINER_MODE AC_CANONICAL_HOST -AC_ARG_ENABLE(debug, [ --enable-debug=[no/minimum/yes] turn on debugging [default=minimum]],,enable_debug=minimum) +AC_MSG_CHECKING(for the BeOS) +case $host in + *-*-beos*) + glib_native_beos="yes" + ;; + *) + glib_native_beos="no" + ;; +esac +AC_MSG_RESULT([$glib_native_beos]) + +dnl figure debugging default, prior to $ac_help setup +dnl +AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)dnl +if test `expr $GLIB_MINOR_VERSION \% 2` = 1 ; then + debug_default=yes +else + debug_default=minimum +fi +AC_DIVERT_POP()dnl + +dnl declare --enable-* args and collect ac_help strings +AC_ARG_ENABLE(debug, [ --enable-debug=[no/minimum/yes] turn on debugging [default=$debug_default]],,enable_debug=$debug_default) +AC_ARG_ENABLE(msg-prefix, [ --enable-msg-prefix turn on program name and PID prefixing of messages and warnings],,enable_msg_prefix=no) AC_ARG_ENABLE(mem_check, [ --enable-mem-check turn on malloc/free sanity checking [default=no]],,enable_mem_check=no) AC_ARG_ENABLE(mem_profile, [ --enable-mem-profile turn on malloc profiling atexit [default=no]],,enable_mem_profile=no) +AC_ARG_ENABLE(gc_friendly, [ --enable-gc-friendly turn on garbage collector friendliness [default=no]],,enable_gc_friendly=no) AC_ARG_ENABLE(ansi, [ --enable-ansi turn on strict ansi [default=no]], , enable_ansi=no) AC_ARG_ENABLE(threads, [ --enable-threads turn on basic thread support [default=yes] @@ -97,6 +133,15 @@ else AC_MSG_RESULT(no) fi +AC_MSG_CHECKING(whether to enable garbage collector friendliness) +if test "x$enable_gc_friendly" = "xyes"; then + AC_DEFINE(ENABLE_GC_FRIENDLY, 1) + AC_SUBST(ENABLE_GC_FRIENDLY) + AC_MSG_RESULT(yes) +else + AC_MSG_RESULT(no) +fi + if test "x$enable_debug" = "xyes"; then test "$cflags_set" = set || CFLAGS="$CFLAGS -g" GLIB_DEBUG_FLAGS="-DG_ENABLE_DEBUG" @@ -108,6 +153,10 @@ fi AC_DEFINE_UNQUOTED(G_COMPILED_WITH_DEBUGGING, "${enable_debug}") +if test "x$enable_msg_prefix" = "xyes"; then + AC_DEFINE_UNQUOTED(G_ENABLE_MSG_PREFIX, 1) +fi + # Checks for programs. AC_PROG_CC AM_PROG_CC_STDC @@ -172,6 +221,8 @@ AC_HEADER_STDC # Checks for library functions. AC_FUNC_VPRINTF +AC_FUNC_ALLOCA + AC_CHECK_FUNCS(atexit on_exit) AC_CHECK_SIZEOF(char) @@ -181,6 +232,25 @@ AC_CHECK_SIZEOF(int) AC_CHECK_SIZEOF(void *) AC_CHECK_SIZEOF(long long) +if test x$ac_cv_sizeof_long_long = x8; then + # long long is a 64 bit integer. + AC_MSG_CHECKING(for format to printf and scanf a gint64) + AC_CACHE_VAL(glib_cv_long_long_format,[ + AC_TRY_RUN([#include + int main() + { + long long b, a = -0x3AFAFAFAFAFAFAFALL; + char buffer[1000]; + sprintf (buffer, "%llu", a); + sscanf (buffer, "%llu", &b); + exit (b!=a); + } + ], + glib_cv_long_long_format=ll, + glib_cv_long_long_format=q)]) + AC_MSG_RESULT(%${glib_cv_long_long_format}i) +fi + dnl long doubles were not used, and a portability problem dnl AC_C_LONG_DOUBLE AC_C_CONST @@ -234,10 +304,10 @@ case x$glib_cv_hasinline in xyes) AC_DEFINE(G_HAVE_INLINE) esac -dnl for bytesex stuff +# check for bytesex stuff AC_C_BIGENDIAN -dnl header file checks +# check for header files AC_CHECK_HEADERS(float.h, AC_DEFINE(HAVE_FLOAT_H)) AC_CHECK_HEADERS(limits.h, AC_DEFINE(HAVE_LIMITS_H)) AC_CHECK_HEADERS(pwd.h, AC_DEFINE(HAVE_PWD_H)) @@ -248,9 +318,71 @@ AC_CHECK_HEADERS(sys/time.h, AC_DEFINE(HAVE_SYS_TIME_H)) AC_CHECK_HEADERS(sys/times.h, AC_DEFINE(HAVE_SYS_TIMES_H)) AC_CHECK_HEADERS(unistd.h, AC_DEFINE(HAVE_UNISTD_H)) AC_CHECK_HEADERS(values.h, AC_DEFINE(HAVE_VALUES_H)) +AC_CHECK_HEADERS(stdint.h, AC_DEFINE(HAVE_VALUES_H)) + +AC_MSG_CHECKING(whether make is GNU Make) +STRIP_BEGIN= +STRIP_END= +if $ac_make --version 2>/dev/null | grep '^GNU Make ' >/dev/null ; then + STRIP_BEGIN='$(strip $(STRIP_DUMMY)' + STRIP_END=')' + AC_MSG_RESULT(yes) +else + AC_MSG_RESULT(no) +fi +STRIP_DUMMY= +AC_SUBST(STRIP_DUMMY) +AC_SUBST(STRIP_BEGIN) +AC_SUBST(STRIP_END) + +# check additional type sizes +size_includes=[" +#include +#include +#include +#include +"] +if test "x$ac_cv_header_stdint_h" = "xyes"; then + size_includes=["$size_includes +#include +"] +fi +if test "x$ac_cv_header_unistd_h" = "xyes"; then + size_includes=["$size_includes +#include +"] +fi +GLIB_SIZEOF([$size_includes], size_t, size_t) +GLIB_SIZEOF([$size_includes], ptrdiff_t, ptrdiff_t) +GLIB_SIZEOF([$size_includes], intmax_t, intmax_t) # Check for some functions -AC_CHECK_FUNCS(lstat strerror strsignal memmove vsnprintf strcasecmp strncasecmp poll) +AC_CHECK_FUNCS(lstat strerror strsignal memmove vsnprintf strcasecmp strncasecmp poll getcwd) + +# Check if bcopy can be used for overlapping copies, if memmove isn't found. +# The check is borrowed from the PERL Configure script. +if test "$ac_cv_func_memmove" != "yes"; then + AC_CACHE_CHECK(whether bcopy can handle overlapping copies, + glib_cv_working_bcopy,[AC_TRY_RUN([ + int main() { + char buf[128], abc[128], *b; + int len, off, align; + bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36); + for (align = 7; align >= 0; align--) { + for (len = 36; len; len--) { + b = buf+align; bcopy(abc, b, len); + for (off = 1; off <= len; off++) { + bcopy(b, b+off, len); bcopy(b+off, b, len); + if (bcmp(b, abc, len)) return(1); + } + } + } + return(0); + }],glib_cv_working_bcopy=yes,glib_cv_working_bcopy=no)]) + if test "$glib_cv_working_bcopy" == "yes"; then + AC_DEFINE(HAVE_WORKING_BCOPY) + fi +fi # Check for sys_errlist AC_MSG_CHECKING(for sys_errlist) @@ -268,7 +400,7 @@ fi AC_MSG_CHECKING(for sys_siglist) AC_TRY_LINK(, [ extern char *sys_siglist[]; -strlen (sys_siglist[0]); +exit (sys_siglist[0]); ], glib_ok=yes, glib_ok=no) AC_MSG_RESULT($glib_ok) if test $glib_ok = no; then @@ -292,7 +424,7 @@ AC_TRY_COMPILE([#include ], if test $gtk_ok = yes; then AC_MSG_RESULT([yes, found in sys/types.h]) else - AC_HEADER_EGREP(fd_mask, sys/select.h, gtk_ok=yes) + AC_HEADER_EGREP(fd_set, sys/select.h, gtk_ok=yes) if test $gtk_ok = yes; then AC_DEFINE(HAVE_SYS_SELECT_H) AC_MSG_RESULT([yes, found in sys/select.h]) @@ -302,56 +434,49 @@ else fi fi -# These are used only in GDK (gdki18n.h) -# This stuff is here only so that we can define these -# things in glibconfig.h. If gtk+ started using an installed -# gdkconfig.h file, then the definitions would belong there. +dnl *** check for sane realloc() *** +AC_MSG_CHECKING(whether realloc (NULL,) will work) +AC_CACHE_VAL(glib_cv_sane_realloc,[ + AC_TRY_RUN([ + #include + int main() { + return realloc (0, sizeof (int)) == 0; + }], + glib_cv_sane_realloc=yes + AC_DEFINE(REALLOC_0_WORKS) + , + glib_cv_sane_realloc=no + ,) +]) +AC_MSG_RESULT($glib_cv_sane_realloc) -# Check for wchar.h +dnl Check for nl_langinfo and CODESET -AC_MSG_CHECKING(for wchar.h) -AC_TRY_CPP([#include ], glib_wchar_h=yes, glib_wchar_h=no) -if test $glib_wchar_h = yes; then - AC_DEFINE(HAVE_WCHAR_H) -fi -AC_MSG_RESULT($glib_wchar_h) +AC_MSG_CHECKING([for nl_langinfo (CODESET)]) +AC_TRY_COMPILE([#include ], + [char *codeset = nl_langinfo (CODESET);], + AC_DEFINE(HAVE_CODESET) + have_codeset=yes, + have_codeset=no) +AC_MSG_RESULT($have_codeset) -# Check for wctype.h (for iswalnum) -AC_MSG_CHECKING(for wctype.h) -AC_TRY_CPP([#include ], glib_wctype_h=yes, glib_wctype_h=no) -if test $glib_wctype_h = yes; then - AC_DEFINE(HAVE_WCTYPE_H) -fi -AC_MSG_RESULT($glib_wctype_h) - -oLIBS="$LIBS" -# in Solaris 2.5, `iswalnum' is in -lw -AC_CHECK_FUNC(iswalnum,,[AC_CHECK_LIB(w,iswalnum)]) - -# The following is necessary for Linux libc-5.4.38 -AC_MSG_CHECKING(if iswalnum() and friends are properly defined) -AC_TRY_LINK([#include ],[ -#if (defined(HAVE_WCTYPE_H) || defined(HAVE_WCHAR_H)) -# ifdef HAVE_WCTYPE_H -# include -# else -# ifdef HAVE_WCHAR_H -# include -# endif -# endif -#else -# define iswalnum(c) ((wchar_t)(c) <= 0xFF && isalnum(c)) -#endif -iswalnum((wchar_t) 0); -], glib_working_wctype=yes, glib_working_wctype=no) -LIBS="$oLIBS" - -if test $glib_working_wctype = no; then - AC_DEFINE(HAVE_BROKEN_WCTYPE) +dnl **************************************** +dnl *** strlcpy/strlcat *** +dnl **************************************** +# Check for strlcpy +AC_MSG_CHECKING(for strlcpy/strlcat) +AC_TRY_LINK([#include +#include ], [ +char *p = malloc(10); +(void) strlcpy(p, "hi", 10); +(void) strlcat(p, "bye", 10); +], glib_ok=yes, glib_ok=no) +AC_MSG_RESULT($glib_ok) +if test $glib_ok = yes; then + AC_DEFINE(HAVE_STRLCPY) fi -AC_MSG_RESULT($glib_working_wctype) - + dnl ********************** dnl *** va_copy checks *** @@ -439,21 +564,36 @@ dnl *********************** dnl *** g_module checks *** dnl *********************** G_MODULE_LIBS= +G_MODULE_LIBS_EXTRA= +G_MODULE_PLUGIN_LIBS= G_MODULE_LDFLAGS= -G_MODULE_IMPL= +dnl G_MODULE_IMPL= don't reset, so cmd-line can override G_MODULE_NEED_USCORE=0 G_MODULE_HAVE_DLERROR=0 -dnl *** dlopen() in system libraries +dnl *** dlopen() and dlsym() in system libraries if test -z "$G_MODULE_IMPL"; then AC_CHECK_FUNC(dlopen, - G_MODULE_IMPL=G_MODULE_IMPL_DL + AC_CHECK_FUNC(dlsym, + G_MODULE_IMPL=G_MODULE_IMPL_DL + ,) ,) fi -dnl *** dlopen() in libdl +dnl *** load_image (BeOS) +if test -z "$G_MODULE_IMPL" -a "x$glib_native_beos" = "xyes"; then + AC_CHECK_LIB(root, load_image, + G_MODULE_LIBS="-lbe -lroot -lglib" + G_MODULE_LIBS_EXTRA="-L\$(top_builddir_full)/.libs" + G_MODULE_PLUGIN_LIBS="-L\$(top_builddir_full)/gmodule/.libs -lgmodule" + G_MODULE_IMPL=G_MODULE_IMPL_BEOS +,) +fi +dnl *** dlopen() and dlsym() in libdl if test -z "$G_MODULE_IMPL"; then AC_CHECK_LIB(dl, dlopen, - G_MODULE_LIBS=-ldl - G_MODULE_IMPL=G_MODULE_IMPL_DL + AC_CHECK_LIB(dl, dlsym, + G_MODULE_LIBS=-ldl + G_MODULE_IMPL=G_MODULE_IMPL_DL + ,) ,) fi dnl *** shl_load() in libdld (HP-UX) @@ -529,6 +669,8 @@ if test -z "$G_MODULE_IMPL"; then fi AC_SUBST(G_MODULE_IMPL) AC_SUBST(G_MODULE_LIBS) +AC_SUBST(G_MODULE_LIBS_EXTRA) +AC_SUBST(G_MODULE_PLUGIN_LIBS) AC_SUBST(G_MODULE_LDFLAGS) AC_SUBST(G_MODULE_HAVE_DLERROR) AC_SUBST(G_MODULE_NEED_USCORE) @@ -539,7 +681,7 @@ dnl *********************** dnl *** g_thread checks *** dnl *********************** -AC_ARG_WITH(threads, [ --with-threads=[none/posix/solaris/nspr] specify a thread implementation to use], +AC_ARG_WITH(threads, [ --with-threads=[none/posix/dce/solaris] specify a thread implementation to use], if test "x$with_threads" = x; then want_threads=yes else @@ -557,9 +699,9 @@ dnl error and warning message dnl ************************* THREAD_NO_IMPLEMENTATION="You do not have any known thread system on your - computer. glib will not be thread safe on your computer." + computer. GLib will not have a default thread implementation." -FLAG_DOES_NOT_WORK="I can't find the MACRO, that enables thread safety on your +FLAG_DOES_NOT_WORK="I can't find the MACRO to enable thread safety on your platform (normaly it's "_REENTRANT"). I'll not use any flag on compilation now, but then your programs might not work. Please provide information on how it is done on your system." @@ -568,11 +710,27 @@ LIBS_NOT_FOUND_1="I can't find the libraries for the thread implementation " LIBS_NOT_FOUND_2=". Please choose another thread implementation or - provide informationon your thread implementation." + provide information on your thread implementation. + You can also run 'configure --disable-threads' + to compile without thread support." FUNC_NO_GETPWUID_R="the 'g_get_(user_name|real_name|home_dir|tmp_dir)' functions will not be MT-safe during their first call because - there is no 'getpwuid_r' on your system." + there is no working 'getpwuid_r' on your system." + +FUNC_NO_LOCALTIME_R="the 'g_date_set_time' function will not be MT-safe + because there is no 'localtime_r' on your system." + +POSIX_NO_YIELD="I can not find a yield functions for your platform. A rather + crude surrogate will be used. If you happen to know a + yield function for your system, please inform the GLib + developers." + +POSIX_NO_PRIORITIES="I can not find the minimal and maximal priorities for + threads on your system. Thus threads can only have the default + priority. If you happen to know these main/max + priorities, please inform the GLib developers." + dnl determination of thread implementation dnl *************************************** @@ -585,29 +743,24 @@ if test "x$want_threads" = xyes || test "x$want_threads" = xsolaris; then ;; esac fi -if test "x$want_threads" = xyes || test "x$want_threads" = xposix; then - if test "x$have_threads" = xnone; then - AC_CHECK_LIB(pthread, pthread_attr_init, have_threads=posix) - fi - if test "x$have_threads" = xnone; then - AC_CHECK_LIB(pthreads, pthread_attr_init, have_threads=posix) - fi +if test "x$want_threads" = xyes || test "x$want_threads" = xposix \ + || test "x$want_threads" = xdce; then + # -D_POSIX4A_DRAFT10_SOURCE is for DG/UX + # -U_OSF_SOURCE is for Digital UNIX 4.0d + GTHREAD_COMPILE_IMPL_DEFINES="-D_POSIX4A_DRAFT10_SOURCE -U_OSF_SOURCE" + glib_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES" if test "x$have_threads" = xnone; then - AC_CHECK_LIB(c_r, pthread_attr_init, have_threads=posix) - fi - if test "x$have_threads" = xnone; then - AC_CHECK_FUNC(pthread_attr_init, have_threads=posix) - fi - dnl ********** DG/UX ************ - if test "x$have_threads" = xnone; then - AC_CHECK_LIB(thread, __d10_pthread_attr_init, + AC_EGREP_HEADER([(^|[^a-zA-Z_])pthread_attr_init[^a-zA-Z_]], + pthread.h, have_threads=posix) fi -fi -if test "x$want_threads" = xyes || test "x$want_threads" = xnspr; then if test "x$have_threads" = xnone; then - AC_CHECK_LIB(nspr21, PRP_NewNakedCondVar, have_threads=nspr) - fi + AC_EGREP_HEADER([(^|[^a-zA-Z_])pthread_attr_create[^a-zA-Z_]], + pthread.h, + have_threads=dce) + fi + CPPFLAGS="$glib_save_CPPFLAGS" fi AC_MSG_CHECKING(for thread implementation) @@ -624,36 +777,83 @@ dnl determination of G_THREAD_LIBS dnl ****************************** G_THREAD_LIBS= +G_THREAD_LIBS_EXTRA= G_THREAD_CFLAGS= mutex_has_default=no case $have_threads in - posix) + posix|dce) G_THREAD_LIBS=error - AC_CHECK_LIB(pthread, pthread_attr_init, - G_THREAD_LIBS="-lpthread") - if test "x$G_THREAD_LIBS" = xerror; then - AC_CHECK_LIB(pthreads, pthread_attr_init, - G_THREAD_LIBS="-lpthreads") - fi - if test "x$G_THREAD_LIBS" = xerror; then - AC_CHECK_LIB(c_r, pthread_attr_init, - G_THREAD_LIBS="-lc_r") - fi - if test "x$G_THREAD_LIBS" = xerror; then - AC_CHECK_FUNC(pthread_attr_init, G_THREAD_LIBS="") - fi - dnl ********** DG/UX ************ - if test "x$G_THREAD_LIBS" = xerror; then - AC_CHECK_LIB(thread, __d10_pthread_attr_init, - G_THREAD_LIBS="-lthread" - G_THREAD_CFLAGS="-D_POSIX4A_DRAFT10_SOURCE") - fi + glib_save_LIBS="$LIBS" + for thread_lib in "" pthread pthreads c_r thread dce; do + if test x"$thread_lib" = x; then + add_thread_lib="" + IN="" + else + add_thread_lib="-l$thread_lib" + IN=" in -l$thread_lib" + fi + if test x"$have_threads" = xposix; then + defattr=NULL + else + defattr=pthread_attr_default + fi + + LIBS="$glib_save_LIBS $add_thread_lib" + + AC_MSG_CHECKING(for pthread_create/pthread_join$IN) + AC_TRY_RUN([#include + int check_me = 0; + void* func(void* data) {check_me = 42;} + main() + { pthread_t t; + void *ret; + pthread_create (&t, $defattr, func, NULL); + pthread_join (t, &ret); + exit (check_me != 42); + }], + [AC_MSG_RESULT(yes) + G_THREAD_LIBS="$add_thread_lib" + break], + [AC_MSG_RESULT(no)]) + done + for thread_lib in "" rt; do + if test x"$thread_lib" = x; then + add_thread_lib="" + IN="" + else + add_thread_lib="-l$thread_lib" + IN=" in -l$thread_lib" + fi + LIBS="$glib_save_LIBS $add_thread_lib" + + AC_MSG_CHECKING(for sched_get_priority_min$IN) + AC_TRY_RUN([#include + #include + int main() { + errno = 0; + return sched_get_priority_min(SCHED_OTHER)==-1 + && errno != 0; + }], + [AC_MSG_RESULT(yes) + G_THREAD_LIBS="$G_THREAD_LIBS $add_thread_lib" + posix_priority_min="sched_get_priority_min(SCHED_OTHER)" + posix_priority_max="sched_get_priority_max(SCHED_OTHER)" + break], + [AC_MSG_RESULT(no)]) + done + LIBS="$glib_save_LIBS" mutex_has_default=yes mutex_default_type='pthread_mutex_t' mutex_default_init='PTHREAD_MUTEX_INITIALIZER' mutex_header_file='pthread.h' - g_threads_impl="POSIX" + if test "x$have_threads" = "xposix"; then + g_threads_impl="POSIX" + else + g_threads_impl="DCE" + have_threads="posix" + fi + AC_SUBST(GTHREAD_COMPILE_IMPL_DEFINES) ;; solaris) G_THREAD_LIBS=error @@ -664,11 +864,6 @@ case $have_threads in mutex_header_file='thread.h' g_threads_impl="SOLARIS" ;; - nspr) - AC_CHECK_LIB(nspr21, PRP_NewNakedCondVar, - G_THREAD_LIBS="-lnspr21") - g_threads_impl="NSPR" - ;; none) g_threads_impl="NONE" ;; @@ -682,47 +877,24 @@ if test "x$G_THREAD_LIBS" = xerror; then AC_MSG_ERROR($LIBS_NOT_FOUND_1$have_threads$LIBS_NOT_FOUND_2) fi -AC_MSG_CHECKING(necessary linker options) -AC_MSG_RESULT($G_THREAD_LIBS) - -dnl check for mt safe function variants -dnl *********************************** - -if test x"$have_threads" != xnone; then - glib_save_LIBS="$LIBS" - # we are not doing the following for now, as this might require glib - # to always be linked with the thread libs on some platforms. - # LIBS="$LIBS $G_THREAD_LIBS" - AC_CHECK_FUNCS(localtime_r rand_r) - if test "$ac_cv_header_pwd_h" = "yes"; then - AC_CHECK_FUNCS(getpwuid_r) - if test "$ac_cv_func_getpwuid_r" = "yes"; then - AC_MSG_CHECKING(whether getpwuid_r is posix like) - # getpwuid_r(0, NULL, NULL, 0) is the signature on - # solaris, if that is not found, the prog below won't - # compile, then the posix signature is assumed as - # the default. - AC_TRY_COMPILE([#include ], - [getpwuid_r(0, NULL, NULL, 0);], - [AC_MSG_RESULT(no)], - [AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_GETPWUID_R_POSIX)]) - fi - fi - LIBS="$glib_save_LIBS" -fi +case $host in + *-*-beos*) + G_THREAD_LIBS="-lbe -lroot -lglib " + G_THREAD_LIBS_EXTRA="-L\$(top_builddir_full)/.libs" + ;; + *) + ;; +esac -if test "x$enable_threads" = "xyes"; then - if test "$ac_cv_func_getpwuid_r" != "yes"; then - AC_MSG_WARN($FUNC_NO_GETPWUID_R) - fi -fi +AC_MSG_CHECKING(thread related libraries) +AC_MSG_RESULT($G_THREAD_LIBS) dnl determination of G_THREAD_CFLAGS dnl ******************************** -if test x"$have_threads" != xnone; then -G_THREAD_CFLAGS="$G_THREAD_CFLAGS -D_REENTRANT" # good default guess +if test x"$enable_threads" = xyes; then + + G_THREAD_CFLAGS="$G_THREAD_CFLAGS -D_REENTRANT" # good default guess case $host in *-aix*) @@ -743,21 +915,145 @@ G_THREAD_CFLAGS="$G_THREAD_CFLAGS -D_REENTRANT" # good default guess # not using the proper multithread flag old_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS $G_THREAD_CFLAGS" - AC_EGREP_HEADER([[^a-zA-Z_]ctime_r[^a-zA-Z_]], time.h, , + # Note: Digital UNIX 4.0d #defines ctime_r to _Pctime_r for gcc. + AC_EGREP_HEADER([[^a-zA-Z_](_P)?ctime_r[^a-zA-Z_]], time.h, , G_THREAD_CFLAGS= AC_MSG_WARN($FLAG_DOES_NOT_WORK)) CPPFLAGS=$old_CPPFLAGS - AC_MSG_CHECKING(necessary compiler options) + AC_MSG_CHECKING(thread related cflags) AC_MSG_RESULT($G_THREAD_CFLAGS) else G_THREAD_CFLAGS= fi +dnl check for mt safe function variants and some posix functions +dnl ************************************************************ + +if test x"$enable_threads" = xyes; then + glib_save_LIBS="$LIBS" + glib_save_CFLAGS="$CFLAGS" + # we are not doing the following for now, as this might require glib + # to always be linked with the thread libs on some platforms. + # LIBS="$LIBS $G_THREAD_LIBS" + CFLAGS="$CFLAGS $G_THREAD_CFLAGS" + AC_CHECK_FUNCS(localtime_r) + if test "$ac_cv_header_pwd_h" = "yes"; then + AC_MSG_CHECKING([for getpwuid_r]) + AC_CACHE_VAL(ac_cv_func_getpwuid_r, + [AC_TRY_RUN([#include + int main () { char buffer[10000], *pointer; + char getpwuid_r (long, void*, void*, + int, void*); + errno = 0; + getpwuid_r (0, &buffer, &buffer, + sizeof (buffer), &pointer); + return errno == ENOSYS;}], + [ac_cv_func_getpwuid_r=yes], + [ac_cv_func_getpwuid_r=no])]) + if test "$ac_cv_func_getpwuid_r" = yes; then + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_GETPWUID_R) + else + AC_MSG_RESULT(no) + fi + if test "$ac_cv_func_getpwuid_r" = "yes"; then + AC_MSG_CHECKING(whether getpwuid_r is posix like) + # The signature for the POSIX version is: + # int getpwuid_r(uid_t, struct passwd *, char *, size_t, struct passwd **) + AC_TRY_COMPILE([#include + #include + #include ], + [getpwuid_r((uid_t)0, NULL, NULL, (size_t)0, NULL);], + [AC_DEFINE(HAVE_GETPWUID_R_POSIX) + AC_MSG_RESULT(yes)], + [AC_MSG_RESULT(no)]) + fi + fi + LIBS="$LIBS $G_THREAD_LIBS" + if test x"$have_threads" = xposix; then + glib_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES" + GLIB_SIZEOF([#include ], + pthread_t, + system_thread) + # This is not AC_CHECK_FUNC to also work with function + # name mangling in header files. + AC_MSG_CHECKING(for pthread_attr_setstacksize) + AC_TRY_LINK([#include ], + [pthread_attr_t t; pthread_attr_setstacksize(&t,0)], + [AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_PTHREAD_ATTR_SETSTACKSIZE)], + [AC_MSG_RESULT(no)]) + AC_MSG_CHECKING(for minimal/maximal thread priority) + if test x"$posix_priority_min" = xnone; then + AC_EGREP_CPP(PX_PRIO_MIN,[#include + PX_PRIO_MIN],,[ + posix_priority_min=PX_PRIO_MIN + posix_priority_max=PX_PRIO_MAX]) + fi + if test x"$posix_priority_min" = xnone; then + AC_EGREP_CPP(PRI_OTHER_MIN,[#include + PRI_OTHER_MIN],,[ + posix_priority_min=PRI_OTHER_MIN + posix_priority_max=PRI_OTHER_MAX]) + fi + if test x"$posix_priority_min" = x; then + AC_MSG_RESULT(none found) + AC_MSG_WARN($POSIX_NO_PRIORITIES) + posix_priority_min=-1 + posix_priority_max=-1 + else + AC_MSG_RESULT($posix_priority_min/$posix_priority_max) + AC_DEFINE_UNQUOTED(POSIX_MIN_PRIORITY,$posix_priority_min) + AC_DEFINE_UNQUOTED(POSIX_MAX_PRIORITY,$posix_priority_max) + fi + posix_yield_func=none + AC_MSG_CHECKING(for posix yield function) + for yield_func in sched_yield pthread_yield_np pthread_yield \ + thr_yield; do + AC_TRY_LINK([#include ], + [$yield_func()], + [posix_yield_func="$yield_func" + break]) + done + if test x"$posix_yield_func" = xnone; then + AC_MSG_RESULT(none found) + AC_MSG_WARN($POSIX_NO_YIELD) + posix_yield_func="g_usleep(1000)" + else + AC_MSG_RESULT($posix_yield_func) + posix_yield_func="$posix_yield_func()" + fi + AC_DEFINE_UNQUOTED(POSIX_YIELD_FUNC,$posix_yield_func) + CPPFLAGS="$glib_save_CPPFLAGS" + else # solaris threads + GLIB_SIZEOF([#include ], + thread_t, + system_thread) + fi + + LIBS="$glib_save_LIBS" + CFLAGS="$glib_save_CFLAGS" + + # now spit out all the warnings. + if test "$ac_cv_func_getpwuid_r" != "yes"; then + AC_MSG_WARN($FUNC_NO_GETPWUID_R) + fi + if test "$ac_cv_func_localtime_r" != "yes"; then + AC_MSG_WARN($FUNC_NO_LOCALTIME_R) + fi +else + # If no thread implementation exists, we will provide enough + # space for a pointer + GLIB_SIZEOF(, void*, system_thread) +fi + AC_DEFINE_UNQUOTED(G_THREAD_SOURCE,"gthread-$have_threads.c") AC_SUBST(G_THREAD_CFLAGS) AC_SUBST(G_THREAD_LIBS) +AC_SUBST(G_THREAD_LIBS_EXTRA) CFLAGS="$CFLAGS $G_THREAD_CFLAGS" @@ -768,6 +1064,10 @@ dnl dnl if mutex_has_default = yes, we also got dnl mutex_default_type, mutex_default_init and mutex_header_file GLIB_IF_VAR_EQ(mutex_has_default, yes, + glib_save_CPPFLAGS="$CPPFLAGS" + glib_save_LIBS="$LIBS" + LIBS="$LIBS $G_THREAD_LIBS" + CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES" GLIB_SIZEOF([#include <$mutex_header_file>], $mutex_default_type, gmutex, @@ -777,6 +1077,11 @@ GLIB_IF_VAR_EQ(mutex_has_default, yes, gmutex, $glib_cv_sizeof_gmutex, $mutex_default_init) + if test x"$glib_cv_byte_contents_gmutex" = xno; then + mutex_has_default=no + fi + CPPFLAGS="$glib_save_CPPFLAGS" + LIBS="$glib_save_LIBS" , ) @@ -791,6 +1096,42 @@ GLIB_SYSDEFS( glibconfig-sysdefs.h, =) +dnl ************************** +dnl *** Checks for gtk-doc *** +dnl ************************** + +AC_ARG_WITH(html-dir, [ --with-html-dir=PATH path to installed docs ]) + +if test "x$with_html_dir" = "x" ; then + HTML_DIR='${datadir}/gtk-doc/html' +else + HTML_DIR=$with_html_dir +fi + +AC_SUBST(HTML_DIR) + + +AC_CHECK_PROG(GTKDOC, gtkdoc-mkdb, true, false) +AM_CONDITIONAL(HAVE_GTK_DOC, $GTKDOC) +AC_SUBST(HAVE_GTK_DOC) + +AC_CHECK_PROG(DB2HTML, db2html, true, false) +AM_CONDITIONAL(HAVE_DOCBOOK, $DB2HTML) + +dnl Let people disable the gtk-doc stuff. +AC_ARG_ENABLE(gtk-doc, [ --enable-gtk-doc Use gtk-doc to build documentation [default=auto]], enable_gtk_doc="$enableval", enable_gtk_doc=auto) + +if test x$enable_gtk_doc = xauto ; then + if test x$GTKDOC = xtrue ; then + enable_gtk_doc=yes + else + enable_gtk_doc=no + fi +fi + +dnl NOTE: We need to use a separate automake conditional for this +dnl to make this work with the tarballs. +AM_CONDITIONAL(ENABLE_GTK_DOC, test x$enable_gtk_doc = xyes) dnl ****************************** dnl *** output the whole stuff *** @@ -825,10 +1166,6 @@ case "$CONFIG_OTHER" in #ifndef GLIBCONFIG_H #define GLIBCONFIG_H -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - _______EOF if test x$glib_limits_h = xyes; then @@ -843,22 +1180,32 @@ _______EOF if test x$g_mutex_header_file != x; then echo '#include <'"$g_mutex_header_file"'>' >> $outfile fi + if test "$glib_header_alloca_h" = "yes"; then + echo '#include ' >> $outfile + fi if test x$glib_sys_poll_h = xyes; then echo '#define GLIB_HAVE_SYS_POLL_H' >> $outfile fi cat >> $outfile <<_______EOF +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + #define G_MINFLOAT $glib_mf #define G_MAXFLOAT $glib_Mf #define G_MINDOUBLE $glib_md #define G_MAXDOUBLE $glib_Md #define G_MINSHORT $glib_ms #define G_MAXSHORT $glib_Ms +#define G_MAXUSHORT $glib_Mus #define G_MININT $glib_mi #define G_MAXINT $glib_Mi +#define G_MAXUINT $glib_Mui #define G_MINLONG $glib_ml #define G_MAXLONG $glib_Ml +#define G_MAXULONG $glib_Mul _______EOF @@ -874,6 +1221,8 @@ _______EOF cat >>$outfile <<_______EOF typedef signed $gint16 gint16; typedef unsigned $gint16 guint16; +#define G_GINT16_FORMAT $gint16_format +#define G_GUINT16_FORMAT $guint16_format _______EOF fi @@ -882,21 +1231,39 @@ _______EOF cat >>$outfile <<_______EOF typedef signed $gint32 gint32; typedef unsigned $gint32 guint32; +#define G_GINT32_FORMAT $gint32_format +#define G_GUINT32_FORMAT $guint32_format _______EOF fi if test -n "$gint64"; then cat >>$outfile <<_______EOF -${glib_warning_guard}#define G_HAVE_GINT64 1 +#define G_HAVE_GINT64 1 ${glib_extension}typedef signed $gint64 gint64; ${glib_extension}typedef unsigned $gint64 guint64; +#define G_GINT64_FORMAT $gint64_format +#define G_GUINT64_FORMAT $guint64_format #define G_GINT64_CONSTANT(val) $gint64_constant + _______EOF fi + case x$glib_size_t in + x2) echo "typedef gint16 gssize;" >> $outfile + echo "typedef guint16 gsize;" >> $outfile + ;; + x4) echo "typedef gint32 gssize;" >> $outfile + echo "typedef guint32 gsize;" >> $outfile + ;; + x8) echo "typedef gint64 gssize;" >> $outfile + echo "typedef guint64 gsize;" >> $outfile + ;; + *) echo "#error size of size_t is unknown" >> $outfile + ;; + esac if test -z "$glib_unknown_void_p"; then cat >>$outfile <<_______EOF @@ -917,6 +1284,7 @@ _______EOF $glib_atexit $glib_memmove $glib_defines +$glib_os $glib_vacopy @@ -945,8 +1313,8 @@ struct _GStaticMutex }; #define G_STATIC_MUTEX_INIT { NULL, { { $g_mutex_contents} } } #define g_static_mutex_get_mutex(mutex) \ - (g_thread_use_default_impl ? ((GMutex*) &(mutex).aligned_pad_u) : \ - g_static_mutex_get_mutex_impl (&(mutex).runtime_mutex)) + (g_thread_use_default_impl ? ((GMutex*) &((mutex)->aligned_pad_u)) : \ + g_static_mutex_get_mutex_impl (&((mutex)->runtime_mutex))) _______EOF else cat >>$outfile <<_______EOF @@ -954,10 +1322,25 @@ $g_enable_threads_def G_THREADS_ENABLED #define G_THREADS_IMPL_$g_threads_impl_def typedef struct _GMutex* GStaticMutex; #define G_STATIC_MUTEX_INIT NULL -#define g_static_mutex_get_mutex(mutex) (g_static_mutex_get_mutex_impl (&(mutex))) +#define g_static_mutex_get_mutex(mutex) (g_static_mutex_get_mutex_impl (mutex)) _______EOF fi + cat >>$outfile <<_______EOF +/* This represents a system thread as used by the implementation. An + * alien implementaion, as loaded by g_thread_init can only count on + * "sizeof (gpointer)" bytes to store their info. We however need more + * for some of our native implementations. */ +typedef union _GSystemThread GSystemThread; +union _GSystemThread +{ + char data[$g_system_thread_sizeof]; + double dummy_double; + void *dummy_pointer; + long dummy_long; +}; +_______EOF + echo >>$outfile g_bit_sizes="16 32" if test -n "$gint64"; then @@ -989,12 +1372,8 @@ _______EOF cat glibconfig-sysdefs.h >>$outfile fi - cat >>$outfile <<_______EOF -$glib_wc - - #ifdef __cplusplus } #endif /* __cplusplus */ @@ -1017,6 +1396,8 @@ esac # on variable expansion in case labels. Look at the generated config.status # for a hint. +glib_header_alloca_h="$ac_cv_header_alloca_h" + case xyes in x$ac_cv_header_float_h) glib_float_h=yes @@ -1033,15 +1414,15 @@ esac case xyes in x$ac_cv_header_limits_h) glib_limits_h=yes - glib_ms=SHRT_MIN glib_Ms=SHRT_MAX - glib_mi=INT_MIN glib_Mi=INT_MAX - glib_ml=LONG_MIN glib_Ml=LONG_MAX + glib_ms=SHRT_MIN glib_Ms=SHRT_MAX glib_Mus=USHRT_MAX + glib_mi=INT_MIN glib_Mi=INT_MAX glib_Mui=UINT_MAX + glib_ml=LONG_MIN glib_Ml=LONG_MAX glib_Mul=ULONG_MAX ;; x$ac_cv_header_values_h) glib_values_h=yes - glib_ms=MINSHORT glib_Ms=MAXSHORT - glib_mi=MININT glib_Mi=MAXINT - glib_ml=MINLONG glib_Ml=MAXLONG + glib_ms=MINSHORT glib_Ms=MAXSHORT glib_Mus="(((gushort)G_MAXSHORT)*2+1)" + glib_mi=MININT glib_Mi=MAXINT glib_Mui="(((guint)G_MAXINT)*2+1)" + glib_ml=MINLONG glib_Ml=MAXLONG glib_Mul="(((gulong)G_MAXLONG)*2+1)" ;; esac @@ -1050,41 +1431,58 @@ if test x$ac_cv_header_sys_poll_h = xyes ; then fi case 2 in -$ac_cv_sizeof_short) gint16=short;; -$ac_cv_sizeof_int) gint16=int;; +$ac_cv_sizeof_short) + gint16=short + gint16_format='"hi"' + guint16_format='"hu"' + ;; +$ac_cv_sizeof_int) + gint16=int + gint16_format='"i"' + guint16_format='"u"' + ;; esac case 4 in -$ac_cv_sizeof_short) gint32=short;; -$ac_cv_sizeof_int) gint32=int;; -$ac_cv_sizeof_long) gint32=long;; +$ac_cv_sizeof_short) + gint32=short + gint32_format='"hi"' + guint32_format='"hu"' + ;; +$ac_cv_sizeof_int) + gint32=int + gint32_format='"i"' + guint32_format='"u"' + ;; +$ac_cv_sizeof_long) + gint32=long + gint32_format='"li"' + guint32_format='"lu"' + ;; esac case 8 in $ac_cv_sizeof_int) gint64=int + gint64_format='"i"' + guint64_format='"u"' glib_extension= - glib_warning_guard= gint64_constant='(val)' ;; $ac_cv_sizeof_long) gint64=long + gint64_format='"li"' + guint64_format='"lu"' glib_extension= - glib_warning_guard= gint64_constant='(val##L)' ;; $ac_cv_sizeof_long_long) gint64='long long' + gint64_format='"'$glib_cv_long_long_format'i"' + guint64_format='"'$glib_cv_long_long_format'u"' glib_extension='G_GNUC_EXTENSION ' - glib_warning_guard=" -#if defined (__GNUC__) && __GNUC__ >= 2 && __GNUC_MINOR__ >= 8 -# define G_GNUC_EXTENSION __extension__ -#else -# define G_GNUC_EXTENSION -#endif - -" gint64_constant='(G_GNUC_EXTENSION (val##LL))' ;; esac +glib_size_t=$glib_cv_sizeof_size_t gintbits=`expr $ac_cv_sizeof_int \* 8` glongbits=`expr $ac_cv_sizeof_long \* 8` @@ -1117,13 +1515,17 @@ x$ac_cv_func_memmove) glib_memmove=' #define g_memmove(d,s,n) G_STMT_START { memmove ((d), (s), (n)); } G_STMT_END' ;; -*) +x$glib_cv_working_bcopy) glib_memmove=" -/* We make the assumption that if memmove isn't available, then - * bcopy will do the job. This isn't safe everywhere. (bcopy can't - * necessarily handle overlapping copies) */ +/* memmove isn't available, but bcopy can copy overlapping memory regions */ #define g_memmove(d,s,n) G_STMT_START { bcopy ((s), (d), (n)); } G_STMT_END" ;; +*) + glib_memmove=" +/* memmove isn't found and bcopy can't copy overlapping memory regions, + * so we have to roll our own copy routine. */ +void g_memmove (void* dest, const void * src, unsigned long len);" + ;; esac glib_defines=" @@ -1168,19 +1570,6 @@ x$ac_cv_c_bigendian) ;; esac -if test x$glib_wchar_h = xyes; then - glib_wc=' -#define G_HAVE_WCHAR_H 1' -fi -if test x$glib_wctype_h = xyes; then - glib_wc="\$glib_wc -#define G_HAVE_WCTYPE_H 1" -fi -if test x$glib_working_wctype = xno; then - glib_wc="\$glib_wc -#define G_HAVE_BROKEN_WCTYPE 1" -fi - case x$enable_threads in xyes) g_enable_threads_def="#define";; *) g_enable_threads_def="#undef ";; @@ -1190,17 +1579,61 @@ g_threads_impl_def=$g_threads_impl g_mutex_has_default="$mutex_has_default" g_mutex_sizeof="$glib_cv_sizeof_gmutex" +g_system_thread_sizeof="$glib_cv_sizeof_system_thread" g_mutex_contents="$glib_cv_byte_contents_gmutex" + +case $host in + *-*-beos*) + glib_os="#define G_OS_BEOS" + ;; + *-*-cygwin*) + glib_os="#define G_OS_UNIX +#define G_WITH_CYGWIN" +v ;; + *) + glib_os="#define G_OS_UNIX" + ;; +esac ]) AC_OUTPUT([ +glib-2.0.pc +gmodule-2.0.pc +gthread-2.0.pc +gobject-2.0.pc +glib.spec Makefile -glib-config +glib-config-2.0 +build/Makefile +build/win32/Makefile gmodule/gmoduleconf.h gmodule/Makefile +gobject/Makefile gthread/Makefile docs/Makefile +docs/glib-config.1 +docs/reference/Makefile +docs/reference/glib/Makefile +docs/reference/gobject/Makefile tests/Makefile ],[case "$CONFIG_FILES" in -*glib-config*)chmod +x glib-config;; -esac]) +*glib-config-2.0*)chmod +x glib-config-2.0;; +esac +echo "" +echo " *** IMPORTANT *** " +echo "" +echo "This is a development version of GLib. You should be using a stable" +echo "version, which is available at ftp://ftp.gtk.org/pub/gtk/v1.2/. The" +echo "version you just configured is meant for developers of GLib only:" +echo "" +echo " * You should not base stable software on this version of GLib." +echo " * GNOME developers should use a stable version of GLib." +echo "" +echo "If you install this version of GLib, we strongly recommend that you" +echo "install it in a different prefix than GLib 1.2. Use --prefix as an" +echo "argument to configure to do this. Otherwise, you will not be able to" +echo "do development with GLib 1.2 any longer." +echo "" +echo " *** You should be using GLib 1.2 instead. ***" +]) +