1# Process this file with autoconf to produce a configure script. 2# require autoconf 2.54 3AC_PREREQ(2.54) 4 5dnl *********************************** 6dnl *** include special GLib macros *** 7dnl *********************************** 8 9m4_define(glib_configure_in) 10 11# 12# The following version number definitions apply to GLib, GModule, GObject, 13# GThread and GIO as a whole, so if changes occurred in any of them, they are 14# all treated with the same interface and binary age. 15# 16# Making releases: 17# glib_micro_version += 1; 18# glib_interface_age += 1; 19# glib_binary_age += 1; 20# if any functions have been added, set glib_interface_age to 0. 21# if backwards compatibility has been broken, 22# set glib_binary_age _and_ glib_interface_age to 0. 23# 24m4_define([glib_major_version], [2]) 25m4_define([glib_minor_version], [20]) 26m4_define([glib_micro_version], [3]) 27m4_define([glib_interface_age], [3]) 28m4_define([glib_binary_age], 29 [m4_eval(100 * glib_minor_version + glib_micro_version)]) 30m4_define([glib_version], 31 [glib_major_version.glib_minor_version.glib_micro_version]) 32 33# libtool version related macros 34m4_define([glib_lt_release], [glib_major_version.glib_minor_version]) 35m4_define([glib_lt_current], 36 [m4_eval(100 * glib_minor_version + glib_micro_version - glib_interface_age)]) 37m4_define([glib_lt_revision], [glib_interface_age]) 38m4_define([glib_lt_age], [m4_eval(glib_binary_age - glib_interface_age)]) 39m4_define([glib_lt_current_minus_age], 40 [m4_eval(glib_lt_current - glib_lt_age)]) 41 42# if the minor version number is odd, then we want debugging. Otherwise 43# we only want minimal debugging support. 44m4_define([glib_debug_default], 45 [m4_if(m4_eval(glib_minor_version % 2), [1], [yes], [minimum])])dnl 46 47 48AC_INIT(glib, [glib_version], 49 [http://bugzilla.gnome.org/enter_bug.cgi?product=glib]) 50 51AC_CONFIG_SRCDIR([glib/glib.h]) 52 53# Save this value here, since automake will set cflags later 54cflags_set=${CFLAGS+set} 55 56AM_INIT_AUTOMAKE([no-define]) 57 58# Specify a configuration file 59AM_CONFIG_HEADER([config.h]) 60 61 62GLIB_MAJOR_VERSION=glib_major_version 63GLIB_MINOR_VERSION=glib_minor_version 64GLIB_MICRO_VERSION=glib_micro_version 65GLIB_INTERFACE_AGE=glib_interface_age 66GLIB_BINARY_AGE=glib_binary_age 67GLIB_VERSION=glib_version 68 69AC_SUBST(GLIB_MAJOR_VERSION) 70AC_SUBST(GLIB_MINOR_VERSION) 71AC_SUBST(GLIB_MICRO_VERSION) 72AC_SUBST(GLIB_VERSION) 73AC_SUBST(GLIB_INTERFACE_AGE) 74AC_SUBST(GLIB_BINARY_AGE) 75 76AC_DEFINE(GLIB_MAJOR_VERSION, [glib_major_version], 77 [Define to the GLIB major version]) 78AC_DEFINE(GLIB_MINOR_VERSION, [glib_minor_version], 79 [Define to the GLIB minor version]) 80AC_DEFINE(GLIB_MICRO_VERSION, [glib_micro_version], 81 [Define to the GLIB micro version]) 82AC_DEFINE(GLIB_INTERFACE_AGE, [glib_interface_age], 83 [Define to the GLIB interface age]) 84AC_DEFINE(GLIB_BINARY_AGE, [glib_binary_age], 85 [Define to the GLIB binary age]) 86 87# libtool versioning 88LT_RELEASE=glib_lt_release 89LT_CURRENT=glib_lt_current 90LT_REVISION=glib_lt_revision 91LT_AGE=glib_lt_age 92LT_CURRENT_MINUS_AGE=glib_lt_current_minus_age 93AC_SUBST(LT_RELEASE) 94AC_SUBST(LT_CURRENT) 95AC_SUBST(LT_REVISION) 96AC_SUBST(LT_AGE) 97AC_SUBST(LT_CURRENT_MINUS_AGE) 98 99dnl Initialize maintainer mode 100AM_MAINTAINER_MODE 101 102AC_CANONICAL_HOST 103 104AC_MSG_CHECKING([for the BeOS]) 105case $host in 106 *-*-beos*) 107 glib_native_beos="yes" 108 ;; 109 *) 110 glib_native_beos="no" 111 ;; 112esac 113AC_MSG_RESULT([$glib_native_beos]) 114 115dnl 116 117AC_MSG_CHECKING([for Win32]) 118LIB_EXE_MACHINE_FLAG=X86 119case "$host" in 120 *-*-mingw*) 121 glib_native_win32=yes 122 glib_pid_type='void *' 123 glib_cv_stack_grows=no 124 # Unfortunately the mingw implementations of C99-style snprintf and vsnprintf 125 # don't seem to be quite good enough, at least not in mingw-runtime-3.14. 126 # (Sorry, I don't know exactly what is the problem, but it is related to 127 # floating point formatting and decimal point vs. comma.) 128 # The simple tests in AC_FUNC_VSNPRINTF_C99 and AC_FUNC_SNPRINTF_C99 aren't 129 # rigorous enough to notice, though. 130 # So preset the autoconf cache variables. 131 ac_cv_func_vsnprintf_c99=no 132 ac_cv_func_snprintf_c99=no 133 case "$host" in 134 x86_64-*-*) 135 LIB_EXE_MACHINE_FLAG=X64 136 ;; 137 esac 138 ;; 139 *) 140 glib_native_win32=no 141 glib_pid_type=int 142 ;; 143esac 144case $host in 145 *-*-linux*) 146 glib_os_linux=yes 147 ;; 148esac 149 150AC_MSG_RESULT([$glib_native_win32]) 151 152AC_SUBST(LIB_EXE_MACHINE_FLAG) 153 154glib_have_carbon=no 155AC_MSG_CHECKING([for Mac OS X Carbon support]) 156AC_TRY_CPP([ 157#include <Carbon/Carbon.h> 158#include <CoreServices/CoreServices.h> 159], glib_have_carbon=yes) 160 161AC_MSG_RESULT([$glib_have_carbon]) 162 163AM_CONDITIONAL(OS_WIN32, [test "$glib_native_win32" = "yes"]) 164AM_CONDITIONAL(OS_WIN32_X64, [test "$LIB_EXE_MACHINE_FLAG" = "X64"]) 165AM_CONDITIONAL(OS_UNIX, [test "$glib_native_win32" != "yes"]) 166AM_CONDITIONAL(OS_LINUX, [test "$glib_os_linux" = "yes"]) 167AM_CONDITIONAL(OS_CARBON, [test "$glib_have_carbon" = "yes"]) 168 169if test "$glib_native_win32" = "yes"; then 170 AC_CHECK_TOOL(WINDRES, windres, no) 171 if test "$WINDRES" = no; then 172 AC_MSG_ERROR([*** Could not find an implementation of windres in your PATH.]) 173 fi 174 AC_CHECK_TOOL(NM, nm, no) 175 if test "$NM" = no; then 176 AC_MSG_ERROR([*** Could not find an implementation of nm in your PATH.]) 177 fi 178 AC_CHECK_TOOL(RANLIB, ranlib, :) 179 AC_CHECK_PROG(ms_librarian, [lib.exe], [yes], [no]) 180fi 181AM_CONDITIONAL(MS_LIB_AVAILABLE, [test x$ms_librarian = xyes]) 182 183if test "$glib_native_win32" != yes; then 184 # libtool option to control which symbols are exported 185 # right now, symbols starting with _ are not exported 186 LIBTOOL_EXPORT_OPTIONS='-export-symbols-regex "^g.*"' 187else 188 # We currently use .def files on Windows 189 LIBTOOL_EXPORT_OPTIONS= 190fi 191AC_SUBST(LIBTOOL_EXPORT_OPTIONS) 192 193if test "x$glib_have_carbon" = "xyes"; then 194 AC_DEFINE(HAVE_CARBON, 1, [define to 1 if Carbon is available]) 195 LDFLAGS="$LDFLAGS -framework Carbon" 196fi 197 198 199dnl declare --enable-* args and collect ac_help strings 200AC_ARG_ENABLE(debug, 201 AC_HELP_STRING([--enable-debug=@<:@no/minimum/yes@:>@], 202 [turn on debugging @<:@default=glib_debug_default@:>@]),, 203 enable_debug=glib_debug_default) 204 205AC_ARG_ENABLE(gc_friendly, 206 [AC_HELP_STRING([--enable-gc-friendly], 207 [turn on garbage collector friendliness [default=no]])],, 208 [enable_gc_friendly=no]) 209AC_ARG_ENABLE(mem_pools, 210 [AC_HELP_STRING([--disable-mem-pools], 211 [disable all glib memory pools])],, 212 [disable_mem_pools=no]) 213AC_ARG_ENABLE(threads, 214 [AC_HELP_STRING([--enable-threads], 215 [turn on basic thread support [default=yes] 216([=no] will override --with-threads)])],, 217 [enable_threads=yes]) 218AC_ARG_ENABLE(rebuilds, 219 [AC_HELP_STRING([--disable-rebuilds], 220 [disable all source autogeneration rules])],, 221 [enable_rebuilds=yes]) 222AC_ARG_ENABLE(visibility, 223 [AC_HELP_STRING([--disable-visibility], 224 [don't use ELF visibility attributes])],, 225 [enable_visibility=yes]) 226 227if test "x$enable_threads" != "xyes"; then 228 enable_threads=no 229fi 230 231AC_MSG_CHECKING([whether to enable garbage collector friendliness]) 232if test "x$enable_gc_friendly" = "xyes"; then 233 AC_DEFINE(ENABLE_GC_FRIENDLY_DEFAULT, 1, [Whether to enable GC friendliness by default]) 234 AC_MSG_RESULT([yes]) 235else 236 AC_MSG_RESULT([no]) 237fi 238 239AC_MSG_CHECKING([whether to disable memory pools]) 240if test "x$disable_mem_pools" = "xno"; then 241 AC_MSG_RESULT([no]) 242else 243 AC_DEFINE(DISABLE_MEM_POOLS, [1], [Whether to disable memory pools]) 244 AC_SUBST(DISABLE_MEM_POOLS) 245 AC_MSG_RESULT([yes]) 246fi 247 248dnl Checks for programs. 249AC_PROG_CC 250AC_PROG_CPP 251 252dnl Check for a working C++ compiler, but do not bail out, if none is found. 253AC_CHECK_PROGS(CXX, [$CCC c++ g++ gcc CC cxx cc++ cl], [gcc]) 254AC_LANG_SAVE 255AC_LANG_CPLUSPLUS 256AC_TRY_COMPILE(,[class a { int b; } c;], ,CXX=) 257AM_CONDITIONAL(HAVE_CXX, [test "$CXX" != ""]) 258AC_LANG_RESTORE 259 260AM_PROG_CC_STDC 261AM_PROG_CC_C_O 262AC_PROG_INSTALL 263 264AC_SYS_LARGEFILE 265 266# 267# Find pkg-config 268# 269AC_PATH_PROG(PKG_CONFIG, [pkg-config], [no]) 270if test x$PKG_CONFIG = xno ; then 271 AC_MSG_ERROR([*** pkg-config not found. See http://www.freedesktop.org/software/pkgconfig/]) 272fi 273 274if $PKG_CONFIG --atleast-pkgconfig-version 0.16 ; then 275 : 276else 277 AC_MSG_ERROR([*** pkg-config too old; version 0.16 or better required.]) 278fi 279 280if test "x$enable_debug" = "xyes"; then 281 if test x$cflags_set != xset ; then 282 case " $CFLAGS " in 283 *[[\ \ ]]-g[[\ \ ]]*) ;; 284 *) CFLAGS="$CFLAGS -g" ;; 285 esac 286 fi 287 288 GLIB_DEBUG_FLAGS="-DG_ENABLE_DEBUG" 289else 290 GLIB_DEBUG_FLAGS="-DG_DISABLE_CAST_CHECKS" 291 292 if test "x$enable_debug" = "xno"; then 293 GLIB_DEBUG_FLAGS="$GLIB_DEBUG_FLAGS -DG_DISABLE_ASSERT -DG_DISABLE_CHECKS" 294 fi 295fi 296 297if test "x$enable_visibility" = "xno"; then 298 GLIB_DEBUG_FLAGS="$GLIB_DEBUG_FLAGS -DDISABLE_VISIBILITY" 299fi 300 301# Ensure MSVC-compatible struct packing convention is used when 302# compiling for Win32 with gcc. 303# What flag to depends on gcc version: gcc3 uses "-mms-bitfields", while 304# gcc2 uses "-fnative-struct". 305if test x"$glib_native_win32" = xyes; then 306 if test x"$GCC" = xyes; then 307 msnative_struct='' 308 AC_MSG_CHECKING([how to get MSVC-compatible struct packing]) 309 if test -z "$ac_cv_prog_CC"; then 310 our_gcc="$CC" 311 else 312 our_gcc="$ac_cv_prog_CC" 313 fi 314 case `$our_gcc --version | sed -e 's,\..*,.,' -e q` in 315 2.) 316 if $our_gcc -v --help 2>/dev/null | grep fnative-struct >/dev/null; then 317 msnative_struct='-fnative-struct' 318 fi 319 ;; 320 *) 321 if $our_gcc -v --help 2>/dev/null | grep ms-bitfields >/dev/null; then 322 msnative_struct='-mms-bitfields' 323 fi 324 ;; 325 esac 326 if test x"$msnative_struct" = x ; then 327 AC_MSG_RESULT([no way]) 328 AC_MSG_WARN([produced libraries might be incompatible with MSVC-compiled code]) 329 else 330 CFLAGS="$CFLAGS $msnative_struct" 331 AC_MSG_RESULT([${msnative_struct}]) 332 fi 333 fi 334fi 335GLIB_EXTRA_CFLAGS="${msnative_struct}" 336AC_SUBST(GLIB_EXTRA_CFLAGS) 337 338AC_EXEEXT 339 340# define a MAINT-like variable REBUILD which is set if Perl 341# and awk are found, so autogenerated sources can be rebuilt 342AC_PROG_AWK 343AC_CHECK_PROGS(PERL, [perl5 perl]) 344# We would like indent, but don't require it. 345AC_CHECK_PROG(INDENT, indent, indent) 346REBUILD=\# 347if test "x$enable_rebuilds" = "xyes" && \ 348 test -n "$PERL" && \ 349 $PERL -e 'exit !($] >= 5.002)' > /dev/null 2>&1 && \ 350 test -n "$AWK" ; then 351 REBUILD= 352fi 353AC_SUBST(REBUILD) 354 355# Need full path to Perl for glib-mkenums 356# 357if test "x$PERL" != x ; then 358 AC_PATH_PROG(PERL_PATH, [$PERL]) 359fi 360if test "x$PERL_PATH" = x ; then 361 PERL_PATH="/usr/bin/env perl" 362fi 363AC_SUBST(PERL_PATH) 364 365# Need suitable python path for greport 366AM_PATH_PYTHON(2.4,,PYTHON="/usr/bin/env python2.4") 367 368 369dnl *********************** 370dnl *** Tests for iconv *** 371dnl *********************** 372dnl 373dnl We do this before the gettext checks, to avoid distortion 374 375dnl On Windows we use a native implementation 376 377if test x"$glib_native_win32" = xyes; then 378 with_libiconv=native 379else 380 AC_ARG_WITH(libiconv, 381 [AC_HELP_STRING([--with-libiconv=@<:@no/gnu/native@:>@], 382 [use the libiconv library])],, 383 [with_libiconv=maybe]) 384 385 found_iconv=no 386 case $with_libiconv in 387 maybe) 388 # Check in the C library first 389 AC_CHECK_FUNC(iconv_open, [with_libiconv=no; found_iconv=yes]) 390 # Check if we have GNU libiconv 391 if test $found_iconv = "no"; then 392 AC_CHECK_LIB(iconv, libiconv_open, [with_libiconv=gnu; found_iconv=yes]) 393 fi 394 # Check if we have a iconv in -liconv, possibly from vendor 395 if test $found_iconv = "no"; then 396 AC_CHECK_LIB(iconv, iconv_open, [with_libiconv=native; found_iconv=yes]) 397 fi 398 ;; 399 no) 400 AC_CHECK_FUNC(iconv_open, [with_libiconv=no; found_iconv=yes]) 401 ;; 402 gnu|yes) 403 AC_CHECK_LIB(iconv, libiconv_open, [with_libiconv=gnu; found_iconv=yes]) 404 ;; 405 native) 406 AC_CHECK_LIB(iconv, iconv_open, [with_libiconv=native; found_iconv=yes]) 407 ;; 408 esac 409 410 if test "x$found_iconv" = "xno" ; then 411 AC_MSG_ERROR([*** No iconv() implementation found in C library or libiconv]) 412 fi 413fi 414 415gl_GLIBC21 416AC_ARG_ENABLE(iconv-cache, 417 [AC_HELP_STRING([--enable-iconv-cache=@<:@yes/no/auto@:>@], 418 [cache iconv descriptors [default=auto]])],, 419 [enable_iconv_cache=auto]) 420 421AC_MSG_CHECKING([Whether to cache iconv descriptors]) 422case $enable_iconv_cache in 423 auto) 424 if test $ac_cv_gnu_library_2_1 = yes; then 425 enable_iconv_cache=no 426 else 427 enable_iconv_cache=yes 428 fi 429 ;; 430 yes|no) 431 ;; 432 *) AC_MSG_ERROR([Value given to --enable-iconv-cache must be one of yes, no or auto]) 433 ;; 434esac 435 436if test $enable_iconv_cache = yes; then 437 AC_DEFINE(NEED_ICONV_CACHE,1,[Do we cache iconv descriptors]) 438fi 439 440AC_MSG_RESULT($enable_iconv_cache) 441 442 443dnl 444dnl gettext support 445dnl 446 447ALL_LINGUAS="`grep -v '^#' "$srcdir/po/LINGUAS" | tr '\n' ' '`" 448AC_SUBST([CONFIG_STATUS_DEPENDENCIES],['$(top_srcdir)/po/LINGUAS']) 449GLIB_GNU_GETTEXT 450 451if test "$gt_cv_have_gettext" != "yes" ; then 452 AC_MSG_ERROR([ 453*** You must have either have gettext support in your C library, or use the 454*** GNU gettext library. (http://www.gnu.org/software/gettext/gettext.html 455]) 456fi 457 458LIBS="$INTLLIBS $LIBS" 459 460GETTEXT_PACKAGE=glib20 461AC_SUBST(GETTEXT_PACKAGE) 462AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, ["$GETTEXT_PACKAGE"], 463 [Define the gettext package to be used]) 464 465GLIB_DEFINE_LOCALEDIR(GLIB_LOCALE_DIR) 466 467dnl 468dnl Now we are done with gettext checks, figure out ICONV_LIBS 469dnl 470 471if test x"$glib_native_win32" != xyes; then 472 if test x$with_libiconv != xno ; then 473 case " $INTLLIBS " in 474 *[[\ \ ]]-liconv[[\ \ ]]*) ;; 475 *) ICONV_LIBS="-liconv" ;; 476 esac 477 fi 478fi 479AC_SUBST(ICONV_LIBS) 480 481case $with_libiconv in 482 gnu) 483 AC_DEFINE(USE_LIBICONV_GNU, 1, [Using GNU libiconv]) 484 ;; 485 native) 486 AC_DEFINE(USE_LIBICONV_NATIVE, 1, [Using a native implementation of iconv in a separate library]) 487 ;; 488esac 489 490dnl Initialize libtool 491AM_DISABLE_STATIC 492AC_LIBTOOL_WIN32_DLL 493AM_PROG_LIBTOOL 494dnl when using libtool 2.x create libtool early, because it's used in configure 495m4_ifdef([LT_OUTPUT], [LT_OUTPUT]) 496 497 498if test "x$GCC" = "xyes"; then 499 case " $CFLAGS " in 500 *[[\ \ ]]-Wall[[\ \ ]]*) ;; 501 *) CFLAGS="$CFLAGS -Wall" ;; 502 esac 503fi 504 505CPPFLAGS="$CPPFLAGS -DG_DISABLE_SINGLE_INCLUDES" 506 507if test "$glib_native_win32" = "yes"; then 508 if test x$enable_static = xyes -a x$enable_shared = xyes; then 509 AC_MSG_ERROR([Can not build both shared and static at the same time on Windows.]) 510 fi 511 if test x$enable_static = xyes; then 512 glib_win32_static_compilation=yes 513 GLIB_WIN32_STATIC_COMPILATION_DEFINE="#define GLIB_STATIC_COMPILATION 1 514#define GOBJECT_STATIC_COMPILATION 1" 515 AC_SUBST(GLIB_WIN32_STATIC_COMPILATION_DEFINE) 516 fi 517fi 518AM_CONDITIONAL(OS_WIN32_AND_DLL_COMPILATION, [test x$glib_native_win32 = xyes -a x$glib_win32_static_compilation != xyes]) 519 520dnl 521dnl DU4 native cc currently needs -std1 for ANSI mode (instead of K&R) 522dnl 523if test $cross_compiling != yes ; then 524 AC_MSG_CHECKING([for extra flags to get ANSI library prototypes]) 525 glib_save_LIBS=$LIBS 526 LIBS="$LIBS -lm" 527 AC_TRY_RUN([#include <math.h> 528 int main (void) { return (log(1) != log(1.)); }], 529 AC_MSG_RESULT(none needed), 530 glib_save_CFLAGS=$CFLAGS 531 CFLAGS="$CFLAGS -std1" 532 AC_TRY_RUN([#include <math.h> 533 int main (void) { return (log(1) != log(1.)); }], 534 AC_MSG_RESULT(-std1), 535 AC_MSG_RESULT() 536 CFLAGS=$glib_save_CFLAGS 537 AC_MSG_WARN( 538 [No ANSI prototypes found in library. (-std1 didn't work.)]) 539 ) 540 ) 541 LIBS=$glib_save_LIBS 542fi 543 544dnl NeXTStep cc seems to need this 545AC_MSG_CHECKING([for extra flags for POSIX compliance]) 546AC_TRY_COMPILE([#include <dirent.h>], [DIR *dir;], 547 AC_MSG_RESULT(none needed), 548 glib_save_CFLAGS=$CFLAGS 549 CFLAGS="$CFLAGS -posix" 550 AC_TRY_COMPILE([#include <dirent.h>], [DIR *dir;], 551 AC_MSG_RESULT(-posix), 552 AC_MSG_RESULT() 553 CFLAGS=$glib_save_CFLAGS 554 AC_MSG_WARN([Could not determine POSIX flag. (-posix didn't work.)]))) 555 556# Checks for header files. 557AC_HEADER_STDC 558 559# Checks for library functions. 560AC_FUNC_VPRINTF 561AC_FUNC_ALLOCA 562AC_CHECK_FUNCS(mmap) 563AC_CHECK_FUNCS(posix_memalign) 564AC_CHECK_FUNCS(memalign) 565AC_CHECK_FUNCS(valloc) 566AC_CHECK_FUNCS(fsync) 567 568AC_CHECK_FUNCS(atexit on_exit) 569 570AC_CHECK_FUNCS(timegm gmtime_r) 571 572AC_CHECK_SIZEOF(char) 573AC_CHECK_SIZEOF(short) 574AC_CHECK_SIZEOF(long) 575AC_CHECK_SIZEOF(int) 576AC_CHECK_SIZEOF(void *) 577AC_CHECK_SIZEOF(long long) 578AC_CHECK_SIZEOF(__int64) 579 580if test x$ac_cv_sizeof_long = x8 || test x$ac_cv_sizeof_long_long = x8 || test x$ac_cv_sizeof___int64 = x8 ; then 581 : 582else 583 AC_MSG_ERROR([ 584*** GLib requires a 64 bit type. You might want to consider 585*** using the GNU C compiler. 586]) 587fi 588 589if test x$glib_native_win32 != xyes && test x$ac_cv_sizeof_long_long = x8; then 590 # long long is a 64 bit integer. 591 AC_MSG_CHECKING(for format to printf and scanf a guint64) 592 AC_CACHE_VAL(glib_cv_long_long_format,[ 593 for format in ll q I64; do 594 AC_TRY_RUN([#include <stdio.h> 595 int main() 596 { 597 long long b, a = -0x3AFAFAFAFAFAFAFALL; 598 char buffer[1000]; 599 sprintf (buffer, "%${format}u", a); 600 sscanf (buffer, "%${format}u", &b); 601 exit (b!=a); 602 } 603 ], 604 [glib_cv_long_long_format=${format} 605 break], 606 [],[:]) 607 done]) 608 if test -n "$glib_cv_long_long_format"; then 609 AC_MSG_RESULT(%${glib_cv_long_long_format}u) 610 AC_DEFINE(HAVE_LONG_LONG_FORMAT,1,[define if system printf can print long long]) 611 if test x"$glib_cv_long_long_format" = xI64; then 612 AC_DEFINE(HAVE_INT64_AND_I64,1,[define to support printing 64-bit integers with format I64]) 613 fi 614 else 615 AC_MSG_RESULT(none) 616 fi 617elif test x$ac_cv_sizeof___int64 = x8; then 618 # __int64 is a 64 bit integer. 619 AC_MSG_CHECKING(for format to printf and scanf a guint64) 620 # We know this is MSVCRT.DLL, and what the formats are 621 glib_cv_long_long_format=I64 622 AC_MSG_RESULT(%${glib_cv_long_long_format}u) 623 AC_DEFINE(HAVE_LONG_LONG_FORMAT,1,[define if system printf can print long long]) 624 AC_DEFINE(HAVE_INT64_AND_I64,1,[define to support printing 64-bit integers with format I64]) 625fi 626 627dnl long doubles were not used, and a portability problem 628dnl AC_C_LONG_DOUBLE 629AC_C_CONST 630 631dnl ok, here we try to check whether the systems prototypes for 632dnl malloc and friends actually match the prototypes provided 633dnl by gmem.h (keep in sync). i currently only know how to check 634dnl this reliably with gcc (-Werror), improvements for other 635dnl compilers are apprechiated. 636SANE_MALLOC_PROTOS=no 637AC_MSG_CHECKING([if malloc() and friends prototypes are gmem.h compatible]) 638glib_save_CFLAGS=$CFLAGS 639if test "x$GCC" = "xyes"; then 640 CFLAGS="$CFLAGS -Werror" 641 AC_TRY_COMPILE([#include <stdlib.h>], [ 642 void* (*my_calloc_p) (size_t, size_t) = calloc; 643 void* (*my_malloc_p) (size_t) = malloc; 644 void (*my_free_p) (void*) = free; 645 void* (*my_realloc_p) (void*, size_t) = realloc; 646 my_calloc_p = 0; 647 my_malloc_p = 0; 648 my_free_p = 0; 649 my_realloc_p = 0; 650 ], 651 AC_DEFINE(SANE_MALLOC_PROTOS, 1, 652 [Define if you have correct malloc prototypes]) 653 SANE_MALLOC_PROTOS=yes) 654fi 655AC_MSG_RESULT($SANE_MALLOC_PROTOS) 656CFLAGS=$glib_save_CFLAGS 657 658dnl 659dnl check in which direction the stack grows 660dnl 661AC_CACHE_CHECK([for growing stack pointer],glib_cv_stack_grows,[ 662 AC_TRY_RUN([ 663 volatile int *a = 0, *b = 0; 664 void foo (void); 665 int main () { volatile int y = 7; a = &y; foo (); return b > a; } 666 void foo (void) { volatile int x = 5; b = &x; } 667 ], 668 glib_cv_stack_grows=no 669 , 670 glib_cv_stack_grows=yes 671 ,) 672]) 673 674dnl AC_C_INLINE is useless to us since it bails out too early, we need to 675dnl truely know which ones of `inline', `__inline' and `__inline__' are 676dnl actually supported. 677AC_CACHE_CHECK([for __inline],glib_cv_has__inline,[ 678 AC_COMPILE_IFELSE([ 679 __inline int foo () { return 0; } 680 int main () { return foo (); } 681 ], 682 glib_cv_has__inline=yes 683 , 684 glib_cv_has__inline=no 685 ,) 686]) 687case x$glib_cv_has__inline in 688xyes) AC_DEFINE(G_HAVE___INLINE,1,[Have __inline keyword]) 689esac 690AC_CACHE_CHECK([for __inline__],glib_cv_has__inline__,[ 691 AC_COMPILE_IFELSE([ 692 __inline__ int foo () { return 0; } 693 int main () { return foo (); } 694 ], 695 glib_cv_has__inline__=yes 696 , 697 glib_cv_has__inline__=no 698 ,) 699]) 700case x$glib_cv_has__inline__ in 701xyes) AC_DEFINE(G_HAVE___INLINE__,1,[Have __inline__ keyword]) 702esac 703AC_CACHE_CHECK([for inline], glib_cv_hasinline,[ 704 AC_COMPILE_IFELSE([ 705 #undef inline 706 inline int foo () { return 0; } 707 int main () { return foo (); } 708 ], 709 glib_cv_hasinline=yes 710 , 711 glib_cv_hasinline=no 712 ,) 713]) 714case x$glib_cv_hasinline in 715xyes) AC_DEFINE(G_HAVE_INLINE,1,[Have inline keyword]) 716esac 717 718# if we can use inline functions in headers 719AC_MSG_CHECKING(if inline functions in headers work) 720AC_LINK_IFELSE([ 721#if defined (G_HAVE_INLINE) && defined (__GNUC__) && defined (__STRICT_ANSI__) 722# undef inline 723# define inline __inline__ 724#elif !defined (G_HAVE_INLINE) 725# undef inline 726# if defined (G_HAVE___INLINE__) 727# define inline __inline__ 728# elif defined (G_HAVE___INLINE) 729# define inline __inline 730# endif 731#endif 732 733int glib_test_func2 (int); 734 735static inline int 736glib_test_func1 (void) { 737 return glib_test_func2 (1); 738} 739 740int 741main (void) { 742 int i = 1; 743}],[g_can_inline=yes],[g_can_inline=no]) 744AC_MSG_RESULT($g_can_inline) 745 746dnl *** check for working do while(0) macros *** 747AC_CACHE_CHECK([for working do while(0) macros], g_cv_support_dowhile_macros, [ 748 AC_TRY_COMPILE([],[ 749 #define STMT_START do 750 #define STMT_END while(0) 751 #define STMT_TEST STMT_START { i = 0; } STMT_END 752 int main(void) { int i = 1; STMT_TEST; return i; }], 753 [g_cv_support_dowhile_macros=yes], 754 [g_cv_support_dowhile_macros=no], 755 [g_cv_support_dowhile_macros=yes]) 756]) 757if test x$g_cv_support_dowhile_macros = xyes; then 758 AC_DEFINE(HAVE_DOWHILE_MACROS, 1, [define for working do while(0) macros]) 759fi 760 761# check for flavours of varargs macros 762AC_MSG_CHECKING(for ISO C99 varargs macros in C) 763AC_TRY_COMPILE([],[ 764int a(int p1, int p2, int p3); 765#define call_a(...) a(1,__VA_ARGS__) 766call_a(2,3); 767],g_have_iso_c_varargs=yes,g_have_iso_c_varargs=no) 768AC_MSG_RESULT($g_have_iso_c_varargs) 769 770AC_MSG_CHECKING(for ISO C99 varargs macros in C++) 771if test "$CXX" = ""; then 772dnl No C++ compiler 773 g_have_iso_cxx_varargs=no 774else 775 AC_LANG_CPLUSPLUS 776 AC_TRY_COMPILE([],[ 777int a(int p1, int p2, int p3); 778#define call_a(...) a(1,__VA_ARGS__) 779call_a(2,3); 780],g_have_iso_cxx_varargs=yes,g_have_iso_cxx_varargs=no) 781 AC_LANG_C 782fi 783AC_MSG_RESULT($g_have_iso_cxx_varargs) 784 785AC_MSG_CHECKING(for GNUC varargs macros) 786AC_TRY_COMPILE([],[ 787int a(int p1, int p2, int p3); 788#define call_a(params...) a(1,params) 789call_a(2,3); 790],g_have_gnuc_varargs=yes,g_have_gnuc_varargs=no) 791AC_MSG_RESULT($g_have_gnuc_varargs) 792 793# check for GNUC visibility support 794AC_MSG_CHECKING(for GNUC visibility attribute) 795GLIB_CHECK_COMPILE_WARNINGS([ 796void 797__attribute__ ((visibility ("hidden"))) 798 f_hidden (void) 799{ 800} 801void 802__attribute__ ((visibility ("internal"))) 803 f_internal (void) 804{ 805} 806void 807__attribute__ ((visibility ("protected"))) 808 f_protected (void) 809{ 810} 811void 812__attribute__ ((visibility ("default"))) 813 f_default (void) 814{ 815} 816int main (int argc, char **argv) 817{ 818 f_hidden(); 819 f_internal(); 820 f_protected(); 821 f_default(); 822 return 0; 823} 824],g_have_gnuc_visibility=yes,g_have_gnuc_visibility=no) 825AC_MSG_RESULT($g_have_gnuc_visibility) 826AM_CONDITIONAL(HAVE_GNUC_VISIBILITY, [test x$g_have_gnuc_visibility = xyes]) 827 828AC_MSG_CHECKING([whether using Sun Studio C compiler]) 829AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#if defined(__SUNPRO_C) || (__SUNPRO_C >= 0x550) 830#else 831# include "error: this is not Sun Studio." 832#endif 833]], [[]])], [ g_have_sunstudio_visibility=yes ], [ g_have_sunstudio_visibility=no ]) 834AC_MSG_RESULT($g_have_sunstudio_visibility) 835AM_CONDITIONAL(HAVE_SUNSTUDIO_VISIBILITY, [test x$g_have_sunstudio_visibility = xyes]) 836 837# check for bytesex stuff 838AC_C_BIGENDIAN 839if test x$ac_cv_c_bigendian = xuniversal ; then 840AC_TRY_COMPILE([#include <endian.h>], [#if __BYTE_ORDER == __BIG_ENDIAN 841#else 842#error Not a big endian. 843#endif], 844 ac_cv_c_bigendian=yes 845 ,AC_TRY_COMPILE([#include <endian.h>], [#if __BYTE_ORDER == __LITTLE_ENDIAN 846#else 847#error Not a little endian. 848#endif], 849 ac_cv_c_bigendian=no 850 ,AC_MSG_WARN([Could not determine endianness.]))) 851fi 852 853 854# check for header files 855AC_CHECK_HEADERS([dirent.h float.h limits.h pwd.h grp.h sys/param.h sys/poll.h sys/resource.h]) 856AC_CHECK_HEADERS([sys/time.h sys/times.h sys/wait.h unistd.h values.h]) 857AC_CHECK_HEADERS([sys/select.h sys/types.h stdint.h sched.h malloc.h]) 858AC_CHECK_HEADERS([sys/vfs.h sys/mount.h sys/vmount.h sys/statfs.h sys/statvfs.h]) 859AC_CHECK_HEADERS([mntent.h sys/mnttab.h sys/vfstab.h sys/mntctl.h sys/sysctl.h fstab.h]) 860 861# check for structure fields 862AC_CHECK_MEMBERS([struct stat.st_mtimensec, struct stat.st_mtim.tv_nsec, struct stat.st_atimensec, struct stat.st_atim.tv_nsec, struct stat.st_ctimensec, struct stat.st_ctim.tv_nsec]) 863AC_CHECK_MEMBERS([struct stat.st_blksize, struct stat.st_blocks, struct statfs.f_fstypename, struct statfs.f_bavail],,, [#include <sys/types.h> 864#include <sys/stat.h> 865#include <unistd.h> 866#ifdef HAVE_SYS_STATFS_H 867#include <sys/statfs.h> 868#endif 869#ifdef HAVE_SYS_PARAM_H 870#include <sys/param.h> 871#endif 872#ifdef HAVE_SYS_MOUNT_H 873#include <sys/mount.h> 874#endif]) 875# struct statvfs.f_basetype is available on Solaris but not for Linux. 876AC_CHECK_MEMBERS([struct statvfs.f_basetype],,, [#include <sys/statvfs.h>]) 877 878# Checks for libcharset 879AM_LANGINFO_CODESET 880gl_GLIBC21 881AC_CHECK_HEADERS([stddef.h stdlib.h string.h]) 882AC_CHECK_FUNCS(setlocale) 883 884# check additional type sizes 885AC_CHECK_SIZEOF(size_t) 886 887dnl Try to figure out whether gsize, gssize should be long or int 888AC_MSG_CHECKING([for the appropriate definition for size_t]) 889 890case $ac_cv_sizeof_size_t in 891 $ac_cv_sizeof_short) 892 glib_size_type=short 893 ;; 894 $ac_cv_sizeof_int) 895 glib_size_type=int 896 ;; 897 $ac_cv_sizeof_long) 898 glib_size_type=long 899 ;; 900 $ac_cv_sizeof_long_long) 901 glib_size_type='long long' 902 ;; 903 $ac_cv_sizeof__int64) 904 glib_size_type='__int64' 905 ;; 906 *) AC_MSG_ERROR([No type matching size_t in size]) 907 ;; 908esac 909 910dnl If int/long are the same size, we see which one produces 911dnl warnings when used in the location as size_t. (This matters 912dnl on AIX with xlc) 913dnl 914if test $ac_cv_sizeof_size_t = $ac_cv_sizeof_int && 915 test $ac_cv_sizeof_size_t = $ac_cv_sizeof_long ; then 916 GLIB_CHECK_COMPILE_WARNINGS([ 917#if defined(_AIX) && !defined(__GNUC__) 918#pragma options langlvl=stdc89 919#endif 920#include <stddef.h> 921int main () 922{ 923 size_t s = 1; 924 unsigned int *size_int = &s; 925 return (int)*size_int; 926} 927 ],glib_size_type=int, 928 [GLIB_CHECK_COMPILE_WARNINGS([ 929#if defined(_AIX) && !defined(__GNUC__) 930#pragma options langlvl=stdc89 931#endif 932#include <stddef.h> 933int main () 934{ 935 size_t s = 1; 936 unsigned long *size_long = &s; 937 return (int)*size_long; 938} 939 ],glib_size_type=long)]) 940fi 941 942AC_MSG_RESULT(unsigned $glib_size_type) 943 944# Check for some functions 945AC_CHECK_FUNCS(lstat strerror strsignal memmove vsnprintf stpcpy strcasecmp strncasecmp poll getcwd vasprintf setenv unsetenv getc_unlocked readlink symlink fdwalk) 946AC_CHECK_FUNCS(chown lchown fchmod fchown link statvfs statfs utimes getgrgid getpwuid) 947AC_CHECK_FUNCS(getmntent_r setmntent endmntent hasmntopt getmntinfo) 948# Check for high-resolution sleep functions 949AC_CHECK_FUNCS(nanosleep nsleep) 950 951AC_CHECK_HEADERS(crt_externs.h) 952AC_CHECK_FUNCS(_NSGetEnviron) 953 954AC_FUNC_VSNPRINTF_C99 955AC_FUNC_PRINTF_UNIX98 956 957dnl 958dnl if statfs() takes 2 arguments (Posix) or 4 (Solaris) 959dnl 960if test "$ac_cv_func_statfs" = yes ; then 961 AC_MSG_CHECKING([number of arguments to statfs()]) 962 AC_TRY_COMPILE([#include <unistd.h> 963 #ifdef HAVE_SYS_PARAM_H 964 #include <sys/param.h> 965 #endif 966 #ifdef HAVE_SYS_VFS_H 967 #include <sys/vfs.h> 968 #endif 969 #ifdef HAVE_SYS_MOUNT_H 970 #include <sys/mount.h> 971 #endif 972 #ifdef HAVE_SYS_STATFS_H 973 #include <sys/statfs.h> 974 #endif], [struct statfs st; 975 statfs(NULL, &st);],[ 976 AC_MSG_RESULT([2]) 977 AC_DEFINE(STATFS_ARGS, 2, [Number of arguments to statfs()])],[ 978 AC_TRY_COMPILE([#include <unistd.h> 979 #ifdef HAVE_SYS_PARAM_H 980 #include <sys/param.h> 981 #endif 982 #ifdef HAVE_SYS_VFS_H 983 #include <sys/vfs.h> 984 #endif 985 #ifdef HAVE_SYS_MOUNT_H 986 #include <sys/mount.h> 987 #endif 988 #ifdef HAVE_SYS_STATFS_H 989 #include <sys/statfs.h> 990 #endif], [struct statfs st; 991 statfs(NULL, &st, sizeof (st), 0);],[ 992 AC_MSG_RESULT([4]) 993 AC_DEFINE(STATFS_ARGS, 4, [Number of arguments to statfs()])],[ 994 AC_MSG_RESULT(unknown) 995 AC_MSG_ERROR([unable to determine number of arguments to statfs()])])]) 996fi 997 998# 999# Check whether to use an included printf 1000# 1001 1002AC_ARG_ENABLE(included-printf, 1003 [AC_HELP_STRING([--enable-included-printf], 1004 [use included printf [default=auto]])], 1005 enable_included_printf="$enableval") 1006 1007need_included_printf=no 1008if test "x$enable_included_printf" = "xyes" ; then 1009 need_included_printf=yes 1010fi 1011if test "$ac_cv_func_vsnprintf_c99" != "yes" ; then 1012 need_included_printf=yes 1013fi 1014if test "$ac_cv_func_printf_unix98" != "yes" ; then 1015 need_included_printf=yes 1016fi 1017if test "x$ac_cv_sizeof_long_long" = "x8" && 1018 test -z "$glib_cv_long_long_format" ; then 1019 need_included_printf=yes 1020fi 1021 1022if test "x$enable_included_printf" = "xno" && 1023 test "x$need_included_printf" = "xyes" ; then 1024 AC_MSG_ERROR([ 1025*** Your C library's printf doesn't appear to have the features that 1026*** GLib needs, but you specified --enable-included-printf=no.]) 1027fi 1028 1029enable_included_printf=$need_included_printf 1030 1031AM_CONDITIONAL(HAVE_GOOD_PRINTF, test "$enable_included_printf" != "yes") 1032if test "$enable_included_printf" != "yes" ; then 1033 AC_DEFINE(HAVE_GOOD_PRINTF,1,[define to use system printf]) 1034else 1035 if test -z "$glib_cv_long_long_format" ; then 1036 glib_cv_long_long_format="ll" 1037 fi 1038 AC_DEFINE(HAVE_VASPRINTF,1) 1039fi 1040 1041# Checks needed for gnulib vasnprintf 1042bh_C_SIGNED 1043jm_AC_TYPE_LONG_LONG 1044gt_TYPE_LONGDOUBLE 1045gt_TYPE_WCHAR_T 1046gt_TYPE_WINT_T 1047AC_TYPE_SIZE_T 1048AC_CHECK_TYPES(ptrdiff_t) 1049jm_AC_TYPE_INTMAX_T 1050AC_CHECK_FUNCS([snprintf wcslen]) 1051AC_FUNC_SNPRINTF_C99 1052 1053# Check if bcopy can be used for overlapping copies, if memmove isn't found. 1054# The check is borrowed from the PERL Configure script. 1055if test "$ac_cv_func_memmove" != "yes"; then 1056 AC_CACHE_CHECK(whether bcopy can handle overlapping copies, 1057 glib_cv_working_bcopy,[AC_TRY_RUN([ 1058 int main() { 1059 char buf[128], abc[128], *b; 1060 int len, off, align; 1061 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36); 1062 for (align = 7; align >= 0; align--) { 1063 for (len = 36; len; len--) { 1064 b = buf+align; bcopy(abc, b, len); 1065 for (off = 1; off <= len; off++) { 1066 bcopy(b, b+off, len); bcopy(b+off, b, len); 1067 if (bcmp(b, abc, len)) return(1); 1068 } 1069 } 1070 } 1071 return(0); 1072 }],glib_cv_working_bcopy=yes,glib_cv_working_bcopy=no)]) 1073 1074 GLIB_ASSERT_SET(glib_cv_working_bcopy) 1075 if test "$glib_cv_working_bcopy" = "yes"; then 1076 AC_DEFINE(HAVE_WORKING_BCOPY,1,[Have a working bcopy]) 1077 fi 1078fi 1079 1080# Check for sys_errlist 1081AC_MSG_CHECKING(for sys_errlist) 1082AC_TRY_LINK(, [ 1083extern char *sys_errlist[]; 1084extern int sys_nerr; 1085sys_errlist[sys_nerr-1][0] = 0; 1086], glib_ok=yes, glib_ok=no) 1087AC_MSG_RESULT($glib_ok) 1088if test "$glib_ok" = "no"; then 1089 AC_DEFINE(NO_SYS_ERRLIST,1,[global 'sys_errlist' not found]) 1090fi 1091 1092# Check for sys_siglist 1093AC_MSG_CHECKING(for sys_siglist) 1094AC_TRY_LINK(, [ 1095extern char *sys_siglist[]; 1096exit (sys_siglist[0]); 1097], glib_ok=yes, glib_ok=no) 1098AC_MSG_RESULT($glib_ok) 1099if test "$glib_ok" = "no"; then 1100 AC_DEFINE(NO_SYS_SIGLIST,1,[global 'sys_siglist' not found]) 1101fi 1102 1103# Check for sys_siglist decl (see Tue Jan 19 00:44:24 1999 in changelog) 1104AC_MSG_CHECKING(for sys_siglist declaration) 1105AC_TRY_COMPILE([#include <signal.h>], [ 1106strlen (sys_siglist[0]); 1107], glib_ok=yes, glib_ok=no) 1108AC_MSG_RESULT($glib_ok) 1109if test "$glib_ok" = "no"; then 1110 AC_DEFINE(NO_SYS_SIGLIST_DECL,1,[global 'sys_siglist' not declared]) 1111fi 1112 1113# Check if <sys/select.h> needs to be included for fd_set 1114AC_MSG_CHECKING([for fd_set]) 1115AC_TRY_COMPILE([#include <sys/types.h>], 1116 [fd_set readMask, writeMask;], gtk_ok=yes, gtk_ok=no) 1117if test "$gtk_ok" = "yes"; then 1118 AC_MSG_RESULT([yes, found in sys/types.h]) 1119else 1120 AC_EGREP_HEADER(fd_set, sys/select.h, gtk_ok=yes) 1121 if test "$gtk_ok" = "yes"; then 1122 # *** FIXME: give it a different name 1123 AC_DEFINE(HAVE_SYS_SELECT_H,1,[found fd_set in sys/select.h]) 1124 AC_MSG_RESULT([yes, found in sys/select.h]) 1125 else 1126 AC_DEFINE(NO_FD_SET,1,[didn't find fd_set]) 1127 AC_MSG_RESULT(no) 1128 fi 1129fi 1130 1131dnl *** check for sane realloc() *** 1132AC_CACHE_CHECK([whether realloc (NULL,) will work],glib_cv_sane_realloc,[ 1133 AC_TRY_RUN([#include <stdlib.h> 1134 int main() { 1135 return realloc (0, sizeof (int)) == 0; 1136 }], 1137 [glib_cv_sane_realloc=yes], 1138 [glib_cv_sane_realloc=no], 1139 [glib_cv_sane_realloc=yes]) 1140]) 1141if test x$glib_cv_sane_realloc = xyes; then 1142 AC_DEFINE(REALLOC_0_WORKS,1,[whether realloc (NULL,) works]) 1143fi 1144 1145dnl Check for nl_langinfo and CODESET 1146AC_CACHE_CHECK([for nl_langinfo (CODESET)],glib_cv_langinfo_codeset,[ 1147 AC_TRY_COMPILE([#include <langinfo.h>], 1148 [char *codeset = nl_langinfo (CODESET);], 1149 [glib_cv_langinfo_codeset=yes], 1150 [glib_cv_langinfo_codeset=no])]) 1151if test x$glib_cv_langinfo_codeset = xyes; then 1152 AC_DEFINE(HAVE_CODESET,1,[Have nl_langinfo (CODESET)]) 1153fi 1154 1155dnl **************************************** 1156dnl *** posix_memalign *** 1157dnl **************************************** 1158AC_MSG_CHECKING(for a compliant posix_memalign() implementation) 1159AC_CACHE_VAL(glib_cv_compliant_posix_memalign,[ 1160 glib_cv_compliant_posix_memalign=0 1161 if test "$ac_cv_func_posix_memalign" = "yes" ; then 1162 AC_TRY_RUN([ 1163 #define _XOPEN_SOURCE 600 1164 #include <stdlib.h> /* posix_memalign() should be defined here */ 1165 /* some systems break if #include <malloc.h> used */ 1166 static void test_memalign (size_t boundary, size_t size) { 1167 void *mem = 0; 1168 if (posix_memalign (&mem, boundary, size) != 0 || !mem) 1169 exit (1); 1170 else 1171 free (mem); 1172 } 1173 int main() { 1174 test_memalign ( 128, 128 - 2 * sizeof (void*)); 1175 test_memalign ( 256, 256 - 2 * sizeof (void*)); 1176 test_memalign ( 512, 512 - 2 * sizeof (void*)); 1177 test_memalign ( 1024, 1024 - 2 * sizeof (void*)); 1178 test_memalign ( 2048, 2048 - 2 * sizeof (void*)); 1179 test_memalign ( 4096, 4096 - 2 * sizeof (void*)); 1180 test_memalign ( 8192, 8192 - 2 * sizeof (void*)); 1181 test_memalign (16384, 16384 - 2 * sizeof (void*)); 1182 test_memalign (32768, 32768 - 2 * sizeof (void*)); 1183 exit (0); /* success */ 1184 } 1185 ], 1186 [glib_cv_compliant_posix_memalign=1], [], [:]) 1187 : 1188 fi 1189 ]) 1190if test "$glib_cv_compliant_posix_memalign" = "1"; then 1191 AC_MSG_RESULT(yes) 1192 AC_DEFINE(POSIX_MEMALIGN_WITH_COMPLIANT_ALLOCS, 1, [define if posix_memalign() can allocate any size]) 1193else 1194 AC_MSG_RESULT(no) 1195fi 1196 1197 1198dnl **************************************** 1199dnl *** strlcpy/strlcat *** 1200dnl **************************************** 1201# Check for strlcpy 1202AC_CACHE_CHECK([for OpenBSD strlcpy/strlcat],glib_cv_have_strlcpy,[ 1203AC_TRY_RUN([#include <stdlib.h> 1204#include <string.h> 1205int main() { 1206 char p[10]; 1207 (void) strlcpy (p, "hi", 10); 1208 if (strlcat (p, "bye", 0) != 3) 1209 return 1; 1210 return 0; 1211}], glib_cv_have_strlcpy=yes, 1212 glib_cv_have_strlcpy=no, 1213 glib_cv_have_strlcpy=no)]) 1214if test "$glib_cv_have_strlcpy" = "yes"; then 1215 AC_DEFINE(HAVE_STRLCPY,1,[Have functions strlcpy and strlcat]) 1216fi 1217 1218 1219dnl ********************** 1220dnl *** va_copy checks *** 1221dnl ********************** 1222dnl we currently check for all three va_copy possibilities, so we get 1223dnl all results in config.log for bug reports. 1224AC_CACHE_CHECK([for an implementation of va_copy()],glib_cv_va_copy,[ 1225 AC_LINK_IFELSE([#include <stdarg.h> 1226#include <stdlib.h> 1227 void f (int i, ...) { 1228 va_list args1, args2; 1229 va_start (args1, i); 1230 va_copy (args2, args1); 1231 if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42) 1232 exit (1); 1233 va_end (args1); va_end (args2); 1234 } 1235 int main() { 1236 f (0, 42); 1237 return 0; 1238 }], 1239 [glib_cv_va_copy=yes], 1240 [glib_cv_va_copy=no]) 1241]) 1242AC_CACHE_CHECK([for an implementation of __va_copy()],glib_cv___va_copy,[ 1243 AC_LINK_IFELSE([#include <stdarg.h> 1244#include <stdlib.h> 1245 void f (int i, ...) { 1246 va_list args1, args2; 1247 va_start (args1, i); 1248 __va_copy (args2, args1); 1249 if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42) 1250 exit (1); 1251 va_end (args1); va_end (args2); 1252 } 1253 int main() { 1254 f (0, 42); 1255 return 0; 1256 }], 1257 [glib_cv___va_copy=yes], 1258 [glib_cv___va_copy=no]) 1259]) 1260 1261if test "x$glib_cv_va_copy" = "xyes"; then 1262 g_va_copy_func=va_copy 1263else if test "x$glib_cv___va_copy" = "xyes"; then 1264 g_va_copy_func=__va_copy 1265fi 1266fi 1267 1268if test -n "$g_va_copy_func"; then 1269 AC_DEFINE_UNQUOTED(G_VA_COPY,$g_va_copy_func,[A 'va_copy' style function]) 1270fi 1271 1272AC_CACHE_CHECK([whether va_lists can be copied by value],glib_cv_va_val_copy,[ 1273 AC_TRY_RUN([#include <stdarg.h> 1274#include <stdlib.h> 1275 void f (int i, ...) { 1276 va_list args1, args2; 1277 va_start (args1, i); 1278 args2 = args1; 1279 if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42) 1280 exit (1); 1281 va_end (args1); va_end (args2); 1282 } 1283 int main() { 1284 f (0, 42); 1285 return 0; 1286 }], 1287 [glib_cv_va_val_copy=yes], 1288 [glib_cv_va_val_copy=no], 1289 [glib_cv_va_val_copy=yes]) 1290]) 1291 1292if test "x$glib_cv_va_val_copy" = "xno"; then 1293 AC_DEFINE(G_VA_COPY_AS_ARRAY,1, ['va_lists' cannot be copies as values]) 1294fi 1295 1296dnl *********************** 1297dnl *** g_module checks *** 1298dnl *********************** 1299G_MODULE_LIBS= 1300G_MODULE_LIBS_EXTRA= 1301G_MODULE_PLUGIN_LIBS= 1302if test x"$glib_native_win32" = xyes; then 1303 dnl No use for this on Win32 1304 G_MODULE_LDFLAGS= 1305else 1306 export SED 1307 G_MODULE_LDFLAGS=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh` 1308fi 1309dnl G_MODULE_IMPL= don't reset, so cmd-line can override 1310G_MODULE_NEED_USCORE=0 1311G_MODULE_BROKEN_RTLD_GLOBAL=0 1312G_MODULE_HAVE_DLERROR=0 1313dnl *** force native WIN32 shared lib loader 1314if test -z "$G_MODULE_IMPL"; then 1315 case "$host" in 1316 *-*-mingw*|*-*-cygwin*) G_MODULE_IMPL=G_MODULE_IMPL_WIN32 ;; 1317 esac 1318fi 1319dnl *** force native AIX library loader 1320dnl *** dlopen() filepath must be of the form /path/libname.a(libname.so) 1321if test -z "$G_MODULE_IMPL"; then 1322 case "$host" in 1323 *-*-aix*) G_MODULE_IMPL=G_MODULE_IMPL_AR ;; 1324 esac 1325fi 1326dnl *** dlopen() and dlsym() in system libraries 1327if test -z "$G_MODULE_IMPL"; then 1328 AC_CHECK_FUNC(dlopen, 1329 [AC_CHECK_FUNC(dlsym, 1330 [G_MODULE_IMPL=G_MODULE_IMPL_DL],[])], 1331 []) 1332fi 1333dnl *** load_image (BeOS) 1334if test -z "$G_MODULE_IMPL" && test "x$glib_native_beos" = "xyes"; then 1335 AC_CHECK_LIB(root, load_image, 1336 [G_MODULE_LIBS="-lbe -lroot -lglib-2.0 " 1337 G_MODULE_LIBS_EXTRA="-L\$(top_builddir_full)/.libs" 1338 G_MODULE_PLUGIN_LIBS="-L\$(top_builddir_full)/gmodule/.libs -lgmodule" 1339 G_MODULE_IMPL=G_MODULE_IMPL_BEOS], 1340 []) 1341fi 1342dnl *** NSLinkModule (dyld) in system libraries (Darwin) 1343if test -z "$G_MODULE_IMPL"; then 1344 AC_CHECK_FUNC(NSLinkModule, 1345 [G_MODULE_IMPL=G_MODULE_IMPL_DYLD 1346 G_MODULE_NEED_USCORE=1], 1347 []) 1348fi 1349dnl *** dlopen() and dlsym() in libdl 1350if test -z "$G_MODULE_IMPL"; then 1351 AC_CHECK_LIB(dl, dlopen, 1352 [AC_CHECK_LIB(dl, dlsym, 1353 [G_MODULE_LIBS=-ldl 1354 G_MODULE_IMPL=G_MODULE_IMPL_DL],[])], 1355 []) 1356fi 1357dnl *** shl_load() in libdld (HP-UX) 1358if test -z "$G_MODULE_IMPL"; then 1359 AC_CHECK_LIB(dld, shl_load, 1360 [G_MODULE_LIBS=-ldld 1361 G_MODULE_IMPL=G_MODULE_IMPL_DLD], 1362 []) 1363fi 1364dnl *** additional checks for G_MODULE_IMPL_DL 1365if test "$G_MODULE_IMPL" = "G_MODULE_IMPL_DL"; then 1366 LIBS_orig="$LIBS" 1367 LDFLAGS_orig="$LDFLAGS" 1368 LIBS="$G_MODULE_LIBS $LIBS" 1369 LDFLAGS="$LDFLAGS $G_MODULE_LDFLAGS" 1370dnl *** check for OSF1/5.0 RTLD_GLOBAL brokenness 1371 echo "void glib_plugin_test(void) { }" > plugin.c 1372 ${SHELL} ./libtool --mode=compile ${CC} -shared \ 1373 -export-dynamic -o plugin.o plugin.c 2>&1 >/dev/null 1374 AC_CACHE_CHECK([for RTLD_GLOBAL brokenness], 1375 glib_cv_rtldglobal_broken,[ 1376 AC_TRY_RUN([ 1377#include <dlfcn.h> 1378#ifndef RTLD_GLOBAL 1379# define RTLD_GLOBAL 0 1380#endif 1381#ifndef RTLD_LAZY 1382# define RTLD_LAZY 0 1383#endif 1384int glib_plugin_test; 1385int main () { 1386 void *handle, *global, *local; 1387 global = &glib_plugin_test; 1388 handle = dlopen ("./.libs/plugin.o", RTLD_GLOBAL | RTLD_LAZY); 1389 if (!handle) return 0; 1390 local = dlsym (handle, "glib_plugin_test"); 1391 return global == local; 1392} ], 1393 [glib_cv_rtldglobal_broken=no], 1394 [glib_cv_rtldglobal_broken=yes], 1395 [glib_cv_rtldglobal_broken=no]) 1396 rm -f plugin.c plugin.o plugin.lo .libs/plugin.o 1397 rmdir .libs 2>/dev/null 1398 ]) 1399 if test "x$glib_cv_rtldglobal_broken" = "xyes"; then 1400 G_MODULE_BROKEN_RTLD_GLOBAL=1 1401 else 1402 G_MODULE_BROKEN_RTLD_GLOBAL=0 1403 fi 1404dnl *** check whether we need preceeding underscores 1405 AC_CACHE_CHECK([for preceeding underscore in symbols], 1406 glib_cv_uscore,[ 1407 AC_TRY_RUN([#include <dlfcn.h> 1408 int glib_underscore_test (void) { return 42; } 1409 int main() { 1410 void *f1 = (void*)0, *f2 = (void*)0, *handle; 1411 handle = dlopen ((void*)0, 0); 1412 if (handle) { 1413 f1 = dlsym (handle, "glib_underscore_test"); 1414 f2 = dlsym (handle, "_glib_underscore_test"); 1415 } return (!f2 || f1); 1416 }], 1417 [glib_cv_uscore=yes], 1418 [glib_cv_uscore=no], 1419 []) 1420 rm -f plugin.c plugin.$ac_objext plugin.lo 1421 ]) 1422 GLIB_ASSERT_SET(glib_cv_uscore) 1423 if test "x$glib_cv_uscore" = "xyes"; then 1424 G_MODULE_NEED_USCORE=1 1425 else 1426 G_MODULE_NEED_USCORE=0 1427 fi 1428 1429 LDFLAGS="$LDFLAGS_orig" 1430dnl *** check for having dlerror() 1431 AC_CHECK_FUNC(dlerror, 1432 [G_MODULE_HAVE_DLERROR=1], 1433 [G_MODULE_HAVE_DLERROR=0]) 1434 LIBS="$LIBS_orig" 1435fi 1436dnl *** done, have we got an implementation? 1437if test -z "$G_MODULE_IMPL"; then 1438 G_MODULE_IMPL=0 1439 G_MODULE_SUPPORTED=false 1440else 1441 G_MODULE_SUPPORTED=true 1442fi 1443 1444AC_MSG_CHECKING(for the suffix of module shared libraries) 1445export SED 1446shrext_cmds=`./libtool --config | grep '^shrext_cmds='` 1447eval $shrext_cmds 1448module=yes eval std_shrext=$shrext_cmds 1449# chop the initial dot 1450glib_gmodule_suffix=`echo $std_shrext | sed 's/^\.//'` 1451AC_MSG_RESULT(.$glib_gmodule_suffix) 1452# any reason it may fail? 1453if test "x$glib_gmodule_suffix" = x; then 1454 AC_MSG_ERROR(Cannot determine shared library suffix from libtool) 1455fi 1456 1457AC_SUBST(G_MODULE_SUPPORTED) 1458AC_SUBST(G_MODULE_IMPL) 1459AC_SUBST(G_MODULE_LIBS) 1460AC_SUBST(G_MODULE_LIBS_EXTRA) 1461AC_SUBST(G_MODULE_PLUGIN_LIBS) 1462AC_SUBST(G_MODULE_LDFLAGS) 1463AC_SUBST(G_MODULE_HAVE_DLERROR) 1464AC_SUBST(G_MODULE_BROKEN_RTLD_GLOBAL) 1465AC_SUBST(G_MODULE_NEED_USCORE) 1466AC_SUBST(GLIB_DEBUG_FLAGS) 1467 1468dnl ********************** 1469dnl *** g_spawn checks *** 1470dnl ********************** 1471 1472AC_MSG_CHECKING(for gspawn implementation) 1473case "$host" in 1474 *-*-mingw*) 1475 GSPAWN=gspawn-win32.lo 1476 ;; 1477 *) 1478 GSPAWN=gspawn.lo 1479 ;; 1480esac 1481AC_MSG_RESULT($GSPAWN) 1482AC_SUBST(GSPAWN) 1483 1484dnl ************************* 1485dnl *** GIOChannel checks *** 1486dnl ************************* 1487 1488AC_MSG_CHECKING(for GIOChannel implementation) 1489case "$host" in 1490 *-*-mingw*) 1491 GIO=giowin32.lo 1492 ;; 1493 *) 1494 GIO=giounix.lo 1495 ;; 1496esac 1497AC_MSG_RESULT($GIO) 1498AC_SUBST(GIO) 1499 1500dnl ********************************* 1501dnl *** Directory for GIO modules *** 1502dnl ********************************* 1503 1504AC_ARG_WITH(gio-module-dir, 1505 [AC_HELP_STRING([--with-gio-module-dir=PATH], 1506 [Load gio modules from this directory [LIBDIR/gio/modules]])], 1507 [], 1508 [with_gio_module_dir='${libdir}/gio/modules']) 1509GIO_MODULE_DIR=$with_gio_module_dir 1510AC_SUBST(GIO_MODULE_DIR) 1511 1512dnl ********************************** 1513dnl *** Check for libselinux (GIO) *** 1514dnl ********************************** 1515AC_ARG_ENABLE(selinux, [ --disable-selinux build without selinux support]) 1516msg_selinux=no 1517SELINUX_LIBS= 1518if test "x$enable_selinux" != "xno"; then 1519 1520 AC_CHECK_LIB(selinux, is_selinux_enabled, 1521 [AC_CHECK_HEADERS(selinux/selinux.h, 1522 [AC_CHECK_LIB(selinux, lgetfilecon_raw, 1523 [AC_DEFINE(HAVE_SELINUX, 1, [Define to 1 if libselinux is available]) 1524 SELINUX_LIBS="-lselinux" 1525 msg_selinux=yes]) 1526 ]) 1527 ]) 1528fi 1529AC_SUBST(SELINUX_LIBS) 1530 1531dnl ***************************** 1532dnl ** Check for inotify (GIO) ** 1533dnl ***************************** 1534inotify_support=no 1535AC_CHECK_HEADERS([sys/inotify.h], 1536[ 1537 inotify_support=yes 1538]) 1539 1540AM_CONDITIONAL(HAVE_INOTIFY, [test "$inotify_support" = "yes"]) 1541 1542dnl ********************************* 1543dnl ** Check for Solaris FEN (GIO) ** 1544dnl ********************************* 1545fen_support=no 1546AC_COMPILE_IFELSE([ 1547#include <port.h> 1548#ifndef PORT_SOURCE_FILE 1549#error "Please upgrade to Nevada 72 or above to suppoert FEN" 1550#endif 1551int main() { return 0; } ], 1552[ 1553 fen_support=yes 1554],) 1555 1556AM_CONDITIONAL(HAVE_FEN, [test "$fen_support" = "yes"]) 1557 1558dnl **************************** 1559dnl *** Checks for FAM (GIO) *** 1560dnl **************************** 1561 1562should_disable_fam=no 1563 1564AC_ARG_ENABLE(fam, [ --disable-fam build without enabling fam for file system monitoring], 1565 [ 1566 if test "x$enable_fam" = "xno"; then 1567 should_disable_fam=yes 1568 echo "Not building FAM support" 1569 fi 1570 ] 1571 ) 1572fam_support=no 1573FAM_LIBS= 1574if test "x$should_disable_fam" = "xno"; then 1575AC_CHECK_LIB(fam, FAMOpen, 1576 [AC_CHECK_HEADERS(fam.h, 1577 [AC_DEFINE(HAVE_FAM, [], [Define if we have FAM]) 1578 AC_CHECK_LIB(fam, FAMNoExists, 1579 AC_DEFINE(HAVE_FAM_NO_EXISTS, [], [Define if we have FAMNoExists in fam])) 1580 FAM_LIBS="-lfam"] 1581 fam_support=yes, 1582 AC_MSG_WARN(*** FAM support will not be built (header files not found) ***))], 1583 AC_MSG_WARN(*** FAM support will not be built (FAM library not found) ***)) 1584AC_SUBST(FAM_LIBS) 1585fi 1586AM_CONDITIONAL(HAVE_FAM, [test "$fam_support" = "yes"]) 1587 1588 1589dnl ***************************** 1590dnl *** Check for xattr (GIO) *** 1591dnl ***************************** 1592AC_ARG_ENABLE(xattr, [ --disable-xattr build without xattr support]) 1593msg_xattr=no 1594XATTR_LIBS= 1595if test "x$enable_xattr" != "xno"; then 1596 1597dnl either glibc or libattr can provide xattr support 1598 1599dnl for both of them, we check for getxattr being in 1600dnl the library and a valid xattr header. 1601 1602dnl try glibc 1603 AC_CHECK_LIB(c, getxattr, 1604 [AC_CHECK_HEADERS(sys/xattr.h, 1605 [AC_DEFINE(HAVE_XATTR, 1, [Define to 1 if xattr is available]) 1606 msg_xattr=yes]) 1607 ]) 1608 1609 if test "x$msg_xattr" != "xyes"; then 1610dnl failure. try libattr 1611 AC_CHECK_LIB(attr, getxattr, 1612 [AC_CHECK_HEADERS(attr/xattr.h, 1613 [AC_DEFINE(HAVE_XATTR, 1, [Define to 1 if xattr is available]) 1614 XATTR_LIBS="-lattr" 1615 msg_xattr=yes]) 1616 ]) 1617 fi 1618 1619 if test "x$msg_xattr" = "xyes"; then 1620 AC_MSG_CHECKING([for XATTR_NOFOLLOW]) 1621 AC_TRY_COMPILE([ 1622 #include <stdio.h> 1623 #ifdef HAVE_SYS_TYPES_H 1624 #include <sys/types.h> 1625 #endif 1626 #ifdef HAVE_SYS_XATTR_H 1627 #include <sys/xattr.h> 1628 #elif HAVE_ATTR_XATTR_H 1629 #include <attr/xattr.h> 1630 #endif 1631 ], 1632 [ssize_t len = getxattr("", "", NULL, 0, 0, XATTR_NOFOLLOW);], 1633 [ 1634 AC_DEFINE([HAVE_XATTR_NOFOLLOW], [1], [Define to 1 if xattr API uses XATTR_NOFOLLOW]) 1635 AC_MSG_RESULT([yes]) 1636 ], 1637 [AC_MSG_RESULT([no])] 1638 ) 1639 fi 1640 1641fi 1642AC_SUBST(XATTR_LIBS) 1643 1644dnl **************************************** 1645dnl *** platform dependent source checks *** 1646dnl **************************************** 1647 1648AC_MSG_CHECKING(for platform-dependent source) 1649case "$host" in 1650 *-*-cygwin*|*-*-mingw*) 1651 PLATFORMDEP=gwin32.lo 1652 ;; 1653 *) 1654 PLATFORMDEP= 1655 ;; 1656esac 1657AC_MSG_RESULT($PLATFORMDEP) 1658AC_SUBST(PLATFORMDEP) 1659 1660AC_MSG_CHECKING([whether to compile timeloop]) 1661case "$host" in 1662 *-*-cygwin*|*-*-mingw*|*-*-minix) 1663 enable_timeloop=no 1664 ;; 1665 *) 1666 enable_timeloop=yes 1667 ;; 1668esac 1669AC_MSG_RESULT($enable_timeloop) 1670AM_CONDITIONAL(ENABLE_TIMELOOP, test x$enable_timeloop = xyes) 1671 1672AC_MSG_CHECKING([if building for some Win32 platform]) 1673case "$host" in 1674 *-*-mingw*|*-*-cygwin*) 1675 platform_win32=yes 1676 ;; 1677 *) 1678 platform_win32=no 1679 ;; 1680esac 1681AC_MSG_RESULT($platform_win32) 1682AM_CONDITIONAL(PLATFORM_WIN32, test x$platform_win32 = xyes) 1683 1684dnl *********************** 1685dnl *** g_thread checks *** 1686dnl *********************** 1687 1688AC_ARG_WITH(threads, 1689 [AC_HELP_STRING([--with-threads=@<:@none/posix/dce/win32@:>@], 1690 [specify a thread implementation to use])], 1691 [if test "x$with_threads" = x; then 1692 want_threads=yes 1693 else 1694 want_threads=$with_threads 1695 fi], 1696 [want_threads=yes]) 1697if test "x$enable_threads" = "xno"; then 1698 want_threads=no 1699fi 1700 1701dnl error and warning message 1702dnl ************************* 1703 1704THREAD_NO_IMPLEMENTATION="You do not have any known thread system on your 1705 computer. GLib will not have a default thread implementation." 1706 1707FLAG_DOES_NOT_WORK="I can't find the MACRO to enable thread safety on your 1708 platform (normally it's "_REENTRANT"). I'll not use any flag on 1709 compilation now, but then your programs might not work. 1710 Please provide information on how it is done on your system." 1711 1712LIBS_NOT_FOUND_1="I can't find the libraries for the thread implementation 1713 " 1714 1715LIBS_NOT_FOUND_2=". Please choose another thread implementation or 1716 provide information on your thread implementation. 1717 You can also run 'configure --disable-threads' 1718 to compile without thread support." 1719 1720FUNC_NO_GETPWUID_R="the 'g_get_(user_name|real_name|home_dir|tmp_dir)' 1721 functions will not be MT-safe during their first call because 1722 there is no working 'getpwuid_r' on your system." 1723 1724FUNC_NO_LOCALTIME_R="the 'g_date_set_time' function will not be MT-safe 1725 because there is no 'localtime_r' on your system." 1726 1727POSIX_NO_YIELD="I can not find a yield functions for your platform. A rather 1728 crude surrogate will be used. If you happen to know a 1729 yield function for your system, please inform the GLib 1730 developers." 1731 1732POSIX_NO_PRIORITIES="I can not find the minimal and maximal priorities for 1733 threads on your system. Thus threads can only have the default 1734 priority. If you happen to know these main/max 1735 priorities, please inform the GLib developers." 1736 1737AIX_COMPILE_INFO="AIX's C compiler needs to be called by a different name, when 1738 linking threaded applications. As GLib cannot do that 1739 automatically, you will get an linkg error everytime you are 1740 not using the right compiler. In that case you have to relink 1741 with the right compiler. Ususally just '_r' is appended 1742 to the compiler name." 1743 1744dnl determination of thread implementation 1745dnl *************************************** 1746 1747# have_threads=no means no thread support 1748# have_threads=none means no default thread implementation 1749 1750have_threads=no 1751if test "x$want_threads" = xyes || test "x$want_threads" = xposix \ 1752 || test "x$want_threads" = xdce; then 1753 # -D_POSIX4_DRAFT_SOURCE -D_POSIX4A_DRAFT10_SOURCE is for DG/UX 1754 # -U_OSF_SOURCE is for Digital UNIX 4.0d 1755 GTHREAD_COMPILE_IMPL_DEFINES="-D_POSIX4_DRAFT_SOURCE -D_POSIX4A_DRAFT10_SOURCE -U_OSF_SOURCE" 1756 glib_save_CPPFLAGS="$CPPFLAGS" 1757 CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES" 1758 if test "x$have_threads" = xno; then 1759 AC_TRY_COMPILE([#include <pthread.h>], 1760 [pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;], 1761 have_threads=posix) 1762 fi 1763 if test "x$have_threads" = xno; then 1764 AC_TRY_COMPILE([#include <pthread.h>], 1765 [pthread_mutex_t m; 1766 pthread_mutex_init (&m, pthread_mutexattr_default);], 1767 have_threads=dce) 1768 fi 1769 # Tru64Unix requires -pthread to find pthread.h. See #103020 1770 CPPFLAGS="$CPPFLAGS -pthread" 1771 if test "x$have_threads" = xno; then 1772 AC_TRY_COMPILE([#include <pthread.h>], 1773 [pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;], 1774 have_threads=posix) 1775 fi 1776 CPPFLAGS="$glib_save_CPPFLAGS" 1777fi 1778if test "x$want_threads" = xyes || test "x$want_threads" = xwin32; then 1779 case $host in 1780 *-*-mingw*) 1781 have_threads=win32 1782 ;; 1783 esac 1784fi 1785if test "x$want_threads" = xnone; then 1786 have_threads=none 1787fi 1788 1789AC_MSG_CHECKING(for thread implementation) 1790 1791if test "x$have_threads" = xno && test "x$want_threads" != xno; then 1792 AC_MSG_RESULT(none available) 1793 AC_MSG_WARN($THREAD_NO_IMPLEMENTATION) 1794else 1795 AC_MSG_RESULT($have_threads) 1796fi 1797 1798 1799dnl determination of G_THREAD_CFLAGS 1800dnl ******************************** 1801 1802G_THREAD_LIBS= 1803G_THREAD_LIBS_EXTRA= 1804G_THREAD_CFLAGS= 1805 1806dnl 1807dnl Test program for basic POSIX threads functionality 1808dnl 1809m4_define([glib_thread_test],[ 1810#include <pthread.h> 1811int check_me = 0; 1812void* func(void* data) {check_me = 42; return &check_me;} 1813int main() 1814 { pthread_t t; 1815 void *ret; 1816 pthread_create (&t, $1, func, 0); 1817 pthread_join (t, &ret); 1818 return (check_me != 42 || ret != &check_me); 1819}]) 1820 1821dnl 1822dnl Test program for sched_get_priority_min() 1823dnl 1824m4_define([glib_sched_priority_test],[ 1825#include <sched.h> 1826#include <errno.h> 1827int main() { 1828 errno = 0; 1829 return sched_get_priority_min(SCHED_OTHER)==-1 1830 && errno != 0; 1831}]) 1832 1833if test x"$have_threads" != xno; then 1834 1835 if test x"$have_threads" = xposix; then 1836 # First we test for posix, whether -pthread or -pthreads do the trick as 1837 # both CPPFLAG and LIBS. 1838 # One of them does for most gcc versions and some other platforms/compilers 1839 # too and could be considered as the canonical way to go. 1840 case $host in 1841 *-*-cygwin*|*-*-darwin*) 1842 # skip cygwin and darwin -pthread or -pthreads test 1843 ;; 1844 *-solaris*) 1845 # These compiler/linker flags work with both Sun Studio and gcc 1846 # Sun Studio expands -mt to -D_REENTRANT and -lthread 1847 # gcc expands -pthreads to -D_REENTRANT -D_PTHREADS -lpthread 1848 G_THREAD_CFLAGS="-D_REENTRANT -D_PTHREADS" 1849 G_THREAD_LIBS="-lpthread -lthread" 1850 ;; 1851 *) 1852 for flag in pthread pthreads mt; do 1853 glib_save_CFLAGS="$CFLAGS" 1854 CFLAGS="$CFLAGS -$flag" 1855 AC_TRY_RUN(glib_thread_test(0), 1856 glib_flag_works=yes, 1857 glib_flag_works=no, 1858 [AC_LINK_IFELSE(glib_thread_test(0), 1859 glib_flag_works=yes, 1860 glib_flag_works=no)]) 1861 CFLAGS="$glib_save_CFLAGS" 1862 if test $glib_flag_works = yes ; then 1863 G_THREAD_CFLAGS=-$flag 1864 G_THREAD_LIBS=-$flag 1865 break; 1866 fi 1867 done 1868 ;; 1869 esac 1870 fi 1871 1872 if test x"$G_THREAD_CFLAGS" = x; then 1873 1874 # The canonical -pthread[s] does not work. Try something different. 1875 1876 case $host in 1877 *-aix*) 1878 if test x"$GCC" = xyes; then 1879 # GCC 3.0 and above needs -pthread. 1880 # Should be coverd by the case above. 1881 # GCC 2.x and below needs -mthreads 1882 G_THREAD_CFLAGS="-mthreads" 1883 G_THREAD_LIBS=$G_THREAD_CFLAGS 1884 else 1885 # We are probably using the aix compiler. Normaly a 1886 # program would have to be compiled with the _r variant 1887 # of the corresponding compiler, but we as GLib cannot 1888 # do that: but the good news is that for compiling the 1889 # only difference is the added -D_THREAD_SAFE compile 1890 # option. This is according to the "C for AIX User's 1891 # Guide". 1892 G_THREAD_CFLAGS="-D_THREAD_SAFE" 1893 fi 1894 ;; 1895 *-dg-dgux*) # DG/UX 1896 G_THREAD_CFLAGS="-D_REENTRANT -D_POSIX4A_DRAFT10_SOURCE" 1897 ;; 1898 *-osf*) 1899 # So we are using dce threads. posix threads are already 1900 # catched above. 1901 G_THREAD_CFLAGS="-threads" 1902 G_THREAD_LIBS=$G_THREAD_CFLAGS 1903 ;; 1904 *-sysv5uw7*) # UnixWare 7 1905 # We are not using gcc with -pthread. Catched above. 1906 G_THREAD_CFLAGS="-Kthread" 1907 G_THREAD_LIBS=$G_THREAD_CFLAGS 1908 ;; 1909 *-mingw*) 1910 # No flag needed when using MSVCRT.DLL 1911 G_THREAD_CFLAGS="" 1912 ;; 1913 *) 1914 G_THREAD_CFLAGS="-D_REENTRANT" # good default guess otherwise 1915 ;; 1916 esac 1917 1918 fi 1919 1920 # if we are not finding the localtime_r function, then we probably are 1921 # not using the proper multithread flag 1922 1923 glib_save_CPPFLAGS="$CPPFLAGS" 1924 CPPFLAGS="$CPPFLAGS $G_THREAD_CFLAGS" 1925 1926 # First we test, whether localtime_r is declared in time.h 1927 # directly. Then we test whether a macro localtime_r exists, in 1928 # which case localtime_r in the test program is replaced and thus 1929 # if we still find localtime_r in the output, it is not defined as 1930 # a macro. 1931 1932 AC_EGREP_CPP([[^a-zA-Z1-9_]localtime_r[^a-zA-Z1-9_]], [#include <time.h>], , 1933 [AC_EGREP_CPP([[^a-zA-Z1-9_]localtime_r[^a-zA-Z1-9_]], [#include <time.h> 1934 localtime_r(a,b)], 1935 AC_MSG_WARN($FLAG_DOES_NOT_WORK))]) 1936 1937 CPPFLAGS="$glib_save_CPPFLAGS" 1938 1939 AC_MSG_CHECKING(thread related cflags) 1940 AC_MSG_RESULT($G_THREAD_CFLAGS) 1941 CPPFLAGS="$CPPFLAGS $G_THREAD_CFLAGS" 1942fi 1943 1944dnl determination of G_THREAD_LIBS 1945dnl ****************************** 1946 1947mutex_has_default=no 1948case $have_threads in 1949 posix|dce) 1950 glib_save_CPPFLAGS="$CPPFLAGS" 1951 CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES" 1952 if test x"$G_THREAD_LIBS" = x; then 1953 case $host in 1954 *-aix*) 1955 # We are not using gcc (would have set G_THREAD_LIBS) and thus 1956 # probably using the aix compiler. 1957 AC_MSG_WARN($AIX_COMPILE_INFO) 1958 ;; 1959 *) 1960 G_THREAD_LIBS=error 1961 glib_save_LIBS="$LIBS" 1962 for thread_lib in "" pthread pthread32 pthreads thread dce; do 1963 if test x"$thread_lib" = x; then 1964 add_thread_lib="" 1965 IN="" 1966 else 1967 add_thread_lib="-l$thread_lib" 1968 IN=" in -l$thread_lib" 1969 fi 1970 if test x"$have_threads" = xposix; then 1971 defattr=0 1972 else 1973 defattr=pthread_attr_default 1974 fi 1975 1976 LIBS="$add_thread_lib $glib_save_LIBS" 1977 1978 AC_MSG_CHECKING(for pthread_create/pthread_join$IN) 1979 AC_TRY_RUN(glib_thread_test($defattr), 1980 glib_result=yes, 1981 glib_result=no, 1982 [AC_LINK_IFELSE(glib_thread_test($defattr), 1983 glib_result=yes, 1984 glib_result=no)]) 1985 AC_MSG_RESULT($glib_result) 1986 1987 if test "$glib_result" = "yes" ; then 1988 G_THREAD_LIBS="$add_thread_lib" 1989 break 1990 fi 1991 done 1992 if test "x$G_THREAD_LIBS" = xerror; then 1993 AC_MSG_ERROR($LIBS_NOT_FOUND_1$have_threads$LIBS_NOT_FOUND_2) 1994 fi 1995 LIBS="$glib_save_LIBS" 1996 ;; 1997 esac 1998 fi 1999 2000 glib_save_LIBS="$LIBS" 2001 for thread_lib in "" rt rte; do 2002 if test x"$thread_lib" = x; then 2003 add_thread_lib="" 2004 IN="" 2005 else 2006 add_thread_lib="-l$thread_lib" 2007 IN=" in -l$thread_lib" 2008 fi 2009 LIBS="$add_thread_lib $glib_save_LIBS" 2010 2011 AC_MSG_CHECKING(for sched_get_priority_min$IN) 2012 AC_TRY_RUN(glib_sched_priority_test, 2013 glib_result=yes, 2014 glib_result=no, 2015 [AC_LINK_IFELSE(glib_sched_priority_test, 2016 glib_result=yes, 2017 glib_result=no)]) 2018 AC_MSG_RESULT($glib_result) 2019 2020 if test "$glib_result" = "yes" ; then 2021 G_THREAD_LIBS="$G_THREAD_LIBS $add_thread_lib" 2022 posix_priority_min="sched_get_priority_min(SCHED_OTHER)" 2023 posix_priority_max="sched_get_priority_max(SCHED_OTHER)" 2024 break 2025 fi 2026 done 2027 LIBS="$glib_save_LIBS" 2028 mutex_has_default=yes 2029 mutex_default_type='pthread_mutex_t' 2030 mutex_default_init='PTHREAD_MUTEX_INITIALIZER' 2031 mutex_header_file='pthread.h' 2032 if test "x$have_threads" = "xposix"; then 2033 g_threads_impl="POSIX" 2034 else 2035 g_threads_impl="DCE" 2036 have_threads="posix" 2037 fi 2038 AC_SUBST(GTHREAD_COMPILE_IMPL_DEFINES) 2039 CPPFLAGS="$glib_save_CPPFLAGS" 2040 ;; 2041 win32) 2042 g_threads_impl="WIN32" 2043 ;; 2044 none|no) 2045 g_threads_impl="NONE" 2046 ;; 2047 *) 2048 g_threads_impl="NONE" 2049 G_THREAD_LIBS=error 2050 ;; 2051esac 2052 2053if test "x$G_THREAD_LIBS" = xerror; then 2054 AC_MSG_ERROR($LIBS_NOT_FOUND_1$have_threads$LIBS_NOT_FOUND_2) 2055fi 2056 2057case $host in 2058 *-*-beos*) 2059 G_THREAD_LIBS="-lbe -lroot -lglib-2.0 " 2060 G_THREAD_LIBS_EXTRA="-L\$(top_builddir_full)/.libs" 2061 ;; 2062 *) 2063 ;; 2064esac 2065 2066AC_MSG_CHECKING(thread related libraries) 2067AC_MSG_RESULT($G_THREAD_LIBS) 2068 2069dnl check for mt safe function variants and some posix functions 2070dnl ************************************************************ 2071 2072if test x"$have_threads" != xno; then 2073 glib_save_LIBS="$LIBS" 2074 # we are not doing the following for now, as this might require glib 2075 # to always be linked with the thread libs on some platforms. 2076 # LIBS="$LIBS $G_THREAD_LIBS" 2077 AC_CHECK_FUNCS(localtime_r gmtime_r) 2078 if test "$ac_cv_header_pwd_h" = "yes"; then 2079 AC_CACHE_CHECK([for posix getpwuid_r], 2080 ac_cv_func_posix_getpwuid_r, 2081 [AC_TRY_RUN([ 2082#include <errno.h> 2083#include <pwd.h> 2084int main () { 2085 char buffer[10000]; 2086 struct passwd pwd, *pwptr = &pwd; 2087 int error; 2088 errno = 0; 2089 error = getpwuid_r (0, &pwd, buffer, 2090 sizeof (buffer), &pwptr); 2091 return (error < 0 && errno == ENOSYS) 2092 || error == ENOSYS; 2093} ], 2094 [ac_cv_func_posix_getpwuid_r=yes], 2095 [ac_cv_func_posix_getpwuid_r=no])]) 2096 GLIB_ASSERT_SET(ac_cv_func_posix_getpwuid_r) 2097 if test "$ac_cv_func_posix_getpwuid_r" = yes; then 2098 AC_DEFINE(HAVE_POSIX_GETPWUID_R,1, 2099 [Have POSIX function getpwuid_r]) 2100 else 2101 AC_CACHE_CHECK([for nonposix getpwuid_r], 2102 ac_cv_func_nonposix_getpwuid_r, 2103 [AC_TRY_LINK([#include <pwd.h>], 2104 [char buffer[10000]; 2105 struct passwd pwd; 2106 getpwuid_r (0, &pwd, buffer, 2107 sizeof (buffer));], 2108 [ac_cv_func_nonposix_getpwuid_r=yes], 2109 [ac_cv_func_nonposix_getpwuid_r=no])]) 2110 GLIB_ASSERT_SET(ac_cv_func_nonposix_getpwuid_r) 2111 if test "$ac_cv_func_nonposix_getpwuid_r" = yes; then 2112 AC_DEFINE(HAVE_NONPOSIX_GETPWUID_R,1, 2113 [Have non-POSIX function getpwuid_r]) 2114 fi 2115 fi 2116 fi 2117 if test "$ac_cv_header_grp_h" = "yes"; then 2118 AC_CACHE_CHECK([for posix getgrgid_r], 2119 ac_cv_func_posix_getgrgid_r, 2120 [AC_TRY_RUN([ 2121#include <errno.h> 2122#include <grp.h> 2123int main () { 2124 char buffer[10000]; 2125 struct group grp, *grpptr = &grp; 2126 int error; 2127 errno = 0; 2128 error = getgrgid_r (0, &grp, buffer, 2129 sizeof (buffer), &grpptr); 2130 return (error < 0 && errno == ENOSYS) 2131 || error == ENOSYS; 2132} ], 2133 [ac_cv_func_posix_getgrgid_r=yes], 2134 [ac_cv_func_posix_getgrgid_r=no])]) 2135 GLIB_ASSERT_SET(ac_cv_func_posix_getgrgid_r) 2136 if test "$ac_cv_func_posix_getgrgid_r" = yes; then 2137 AC_DEFINE(HAVE_POSIX_GETGRGID_R,1, 2138 [Have POSIX function getgrgid_r]) 2139 else 2140 AC_CACHE_CHECK([for nonposix getgrgid_r], 2141 ac_cv_func_nonposix_getgrgid_r, 2142 [AC_TRY_LINK([#include <grp.h>], 2143 [char buffer[10000]; 2144 struct group grp; 2145 getgrgid_r (0, &grp, buffer, 2146 sizeof (buffer));], 2147 [ac_cv_func_nonposix_getgrgid_r=yes], 2148 [ac_cv_func_nonposix_getgrgid_r=no])]) 2149 GLIB_ASSERT_SET(ac_cv_func_nonposix_getgrgid_r) 2150 if test "$ac_cv_func_nonposix_getgrgid_r" = yes; then 2151 AC_DEFINE(HAVE_NONPOSIX_GETGRGID_R,1, 2152 [Have non-POSIX function getgrgid_r]) 2153 fi 2154 fi 2155 fi 2156 LIBS="$G_THREAD_LIBS $LIBS" 2157 if test x"$have_threads" = xposix; then 2158 glib_save_CPPFLAGS="$CPPFLAGS" 2159 CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES" 2160 dnl we might grow sizeof(pthread_t) later on, so use a dummy name here 2161 GLIB_SIZEOF([#include <pthread.h>], pthread_t, system_thread) 2162 # This is not AC_CHECK_FUNC to also work with function 2163 # name mangling in header files. 2164 AC_MSG_CHECKING(for pthread_attr_setstacksize) 2165 AC_TRY_LINK([#include <pthread.h>], 2166 [pthread_attr_t t; pthread_attr_setstacksize(&t,0)], 2167 [AC_MSG_RESULT(yes) 2168 AC_DEFINE(HAVE_PTHREAD_ATTR_SETSTACKSIZE,1, 2169 [Have function pthread_attr_setstacksize])], 2170 [AC_MSG_RESULT(no)]) 2171 AC_MSG_CHECKING(for minimal/maximal thread priority) 2172 if test x"$posix_priority_min" = x; then 2173 AC_EGREP_CPP(PX_PRIO_MIN,[#include <pthread.h> 2174 PX_PRIO_MIN],,[ 2175 posix_priority_min=PX_PRIO_MIN 2176 posix_priority_max=PX_PRIO_MAX]) 2177 fi 2178 if test x"$posix_priority_min" = x; then 2179 # AIX 2180 AC_EGREP_CPP(PTHREAD_PRIO_MIN,[#include <pthread.h> 2181 PTHREAD_PRIO_MIN],,[ 2182 posix_priority_min=PTHREAD_PRIO_MIN 2183 posix_priority_max=PTHREAD_PRIO_MAX]) 2184 fi 2185 if test x"$posix_priority_min" = x; then 2186 AC_EGREP_CPP(PRI_OTHER_MIN,[#include <pthread.h> 2187 PRI_OTHER_MIN],,[ 2188 posix_priority_min=PRI_OTHER_MIN 2189 posix_priority_max=PRI_OTHER_MAX]) 2190 fi 2191 if test x"$posix_priority_min" = x; then 2192 AC_MSG_RESULT(none found) 2193 AC_MSG_WARN($POSIX_NO_PRIORITIES) 2194 posix_priority_min=-1 2195 posix_priority_max=-1 2196 else 2197 AC_MSG_RESULT($posix_priority_min/$posix_priority_max) 2198 AC_MSG_CHECKING(for pthread_setschedparam) 2199 AC_TRY_LINK([#include <pthread.h>], 2200 [pthread_t t; pthread_setschedparam(t, 0, NULL)], 2201 [AC_MSG_RESULT(yes) 2202 AC_DEFINE_UNQUOTED(POSIX_MIN_PRIORITY,$posix_priority_min,[Minimum POSIX RT priority]) 2203 AC_DEFINE_UNQUOTED(POSIX_MAX_PRIORITY,$posix_priority_max,[Maximum POSIX RT priority])], 2204 [AC_MSG_RESULT(no) 2205 AC_MSG_WARN($POSIX_NO_PRIORITIES)]) 2206 fi 2207 posix_yield_func=none 2208 AC_MSG_CHECKING(for posix yield function) 2209 for yield_func in sched_yield pthread_yield_np pthread_yield \ 2210 thr_yield; do 2211 AC_TRY_LINK([#include <pthread.h>], 2212 [$yield_func()], 2213 [posix_yield_func="$yield_func" 2214 break]) 2215 done 2216 if test x"$posix_yield_func" = xnone; then 2217 AC_MSG_RESULT(none found) 2218 AC_MSG_WARN($POSIX_NO_YIELD) 2219 posix_yield_func="g_usleep(1000)" 2220 else 2221 AC_MSG_RESULT($posix_yield_func) 2222 posix_yield_func="$posix_yield_func()" 2223 fi 2224 AC_DEFINE_UNQUOTED(POSIX_YIELD_FUNC,$posix_yield_func,[The POSIX RT yield function]) 2225 CPPFLAGS="$glib_save_CPPFLAGS" 2226 2227 elif test x"$have_threads" = xwin32; then 2228 # It's a pointer to a private struct 2229 GLIB_SIZEOF(,struct _GThreadData *, system_thread) 2230 fi 2231 2232 LIBS="$glib_save_LIBS" 2233 2234 # now spit out all the warnings. 2235 if test "$ac_cv_func_posix_getpwuid_r" != "yes" && 2236 test "$ac_cv_func_nonposix_getpwuid_r" != "yes"; then 2237 AC_MSG_WARN($FUNC_NO_GETPWUID_R) 2238 fi 2239 if test "$ac_cv_func_localtime_r" != "yes"; then 2240 AC_MSG_WARN($FUNC_NO_LOCALTIME_R) 2241 fi 2242fi 2243 2244if test x"$glib_cv_sizeof_system_thread" = x; then 2245 # use a pointer as a fallback. 2246 GLIB_SIZEOF(,void *, system_thread) 2247fi 2248 2249# 2250# Hack to deal with: 2251# 2252# a) GCC < 3.3 for Linux doesn't include -lpthread when 2253# building shared libraries with linux. 2254# b) FreeBSD doesn't do this either. 2255# 2256case $host in 2257 *-*-freebsd*|*-*-linux*) 2258 G_THREAD_LIBS_FOR_GTHREAD="`echo $G_THREAD_LIBS | sed s/-pthread/-lpthread/`" 2259 ;; 2260 *) 2261 G_THREAD_LIBS_FOR_GTHREAD="$G_THREAD_LIBS" 2262 ;; 2263esac 2264 2265AC_DEFINE_UNQUOTED(G_THREAD_SOURCE,"gthread-$have_threads.c", 2266 [Source file containing theread implementation]) 2267AC_SUBST(G_THREAD_CFLAGS) 2268AC_SUBST(G_THREAD_LIBS) 2269AC_SUBST(G_THREAD_LIBS_FOR_GTHREAD) 2270AC_SUBST(G_THREAD_LIBS_EXTRA) 2271 2272dnl ********************************************** 2273dnl *** GDefaultMutex setup and initialization *** 2274dnl ********************************************** 2275dnl 2276dnl if mutex_has_default = yes, we also got 2277dnl mutex_default_type, mutex_default_init and mutex_header_file 2278if test $mutex_has_default = yes ; then 2279 glib_save_CPPFLAGS="$CPPFLAGS" 2280 glib_save_LIBS="$LIBS" 2281 LIBS="$G_THREAD_LIBS $LIBS" 2282 CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES" 2283 GLIB_SIZEOF([#include <$mutex_header_file>], 2284 $mutex_default_type, 2285 gmutex) 2286 GLIB_BYTE_CONTENTS([#include <$mutex_header_file>], 2287 $mutex_default_type, 2288 gmutex, 2289 $glib_cv_sizeof_gmutex, 2290 $mutex_default_init) 2291 if test x"$glib_cv_byte_contents_gmutex" = xno; then 2292 mutex_has_default=no 2293 fi 2294 CPPFLAGS="$glib_save_CPPFLAGS" 2295 LIBS="$glib_save_LIBS" 2296fi 2297 2298AC_CHECK_FUNCS(clock_gettime, [], [ 2299 AC_CHECK_LIB(rt, clock_gettime, [ 2300 AC_DEFINE(HAVE_CLOCK_GETTIME, 1) 2301 G_THREAD_LIBS="$G_THREAD_LIBS -lrt" 2302 G_THREAD_LIBS_FOR_GTHREAD="$G_THREAD_LIBS_FOR_GTHREAD -lrt" 2303 ]) 2304]) 2305 2306AC_CACHE_CHECK(for monotonic clocks, 2307 glib_cv_monotonic_clock,AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ 2308#include <time.h> 2309#include <unistd.h> 2310int main() { 2311#if !(defined(_POSIX_MONOTONIC_CLOCK) && _POSIX_MONOTONIC_CLOCK >= 0 && defined(CLOCK_MONOTONIC)) 2312 #error No monotonic clock 2313#endif 2314 return 0; 2315} 2316]])],glib_cv_monotonic_clock=yes,glib_cv_monotonic_clock=no)) 2317if test "$glib_cv_monotonic_clock" = "yes"; then 2318 AC_DEFINE(HAVE_MONOTONIC_CLOCK,1,[Have a monotonic clock]) 2319fi 2320 2321 2322dnl ******************************** 2323dnl *** g_atomic_* tests for gcc *** 2324dnl ******************************** 2325 2326AC_MSG_CHECKING([whether to use assembler code for atomic operations]) 2327 2328if test x"$GCC" = xyes; then 2329 case $host_cpu in 2330 i386) 2331 AC_MSG_RESULT([none]) 2332 glib_memory_barrier_needed=no 2333 ;; 2334 i?86) 2335 AC_MSG_RESULT([i486]) 2336 AC_DEFINE_UNQUOTED(G_ATOMIC_I486, 1, 2337 [i486 atomic implementation]) 2338 glib_memory_barrier_needed=no 2339 ;; 2340 sparc*) 2341 SPARCV9_WARNING="Try to rerun configure with CFLAGS='-mcpu=v9', 2342 when you are using a sparc with v9 instruction set (most 2343 sparcs nowadays). This will make the code for atomic 2344 operations much faster. The resulting code will not run 2345 on very old sparcs though." 2346 2347 AC_LINK_IFELSE([[ 2348 main () 2349 { 2350 int tmp1, tmp2, tmp3; 2351 __asm__ __volatile__("casx [%2], %0, %1" 2352 : "=&r" (tmp1), "=&r" (tmp2) : "r" (&tmp3)); 2353 }]], 2354 AC_MSG_RESULT([sparcv9]) 2355 AC_DEFINE_UNQUOTED(G_ATOMIC_SPARCV9, 1, 2356 [sparcv9 atomic implementation]), 2357 AC_MSG_RESULT([no]) 2358 AC_MSG_WARN([[$SPARCV9_WARNING]])) 2359 glib_memory_barrier_needed=yes 2360 ;; 2361 alpha*) 2362 AC_MSG_RESULT([alpha]) 2363 AC_DEFINE_UNQUOTED(G_ATOMIC_ALPHA, 1, 2364 [alpha atomic implementation]) 2365 glib_memory_barrier_needed=yes 2366 ;; 2367 x86_64) 2368 AC_MSG_RESULT([x86_64]) 2369 AC_DEFINE_UNQUOTED(G_ATOMIC_X86_64, 1, 2370 [x86_64 atomic implementation]) 2371 glib_memory_barrier_needed=no 2372 ;; 2373 powerpc*) 2374 AC_MSG_RESULT([powerpc]) 2375 AC_DEFINE_UNQUOTED(G_ATOMIC_POWERPC, 1, 2376 [powerpc atomic implementation]) 2377 glib_memory_barrier_needed=yes 2378 AC_MSG_CHECKING([whether asm supports numbered local labels]) 2379 AC_TRY_COMPILE( 2380 ,[ 2381 __asm__ __volatile__ ("1: nop\n" 2382 " bne- 1b") 2383 ],[ 2384 AC_DEFINE_UNQUOTED(ASM_NUMERIC_LABELS, 1, [define if asm blocks can use numeric local labels]) 2385 AC_MSG_RESULT([yes]) 2386 ],[ 2387 AC_MSG_RESULT([no]) 2388 ]) 2389 ;; 2390 ia64) 2391 AC_MSG_RESULT([ia64]) 2392 AC_DEFINE_UNQUOTED(G_ATOMIC_IA64, 1, 2393 [ia64 atomic implementation]) 2394 glib_memory_barrier_needed=yes 2395 ;; 2396 s390|s390x) 2397 AC_MSG_RESULT([s390]) 2398 AC_DEFINE_UNQUOTED(G_ATOMIC_S390, 1, 2399 [s390 atomic implementation]) 2400 glib_memory_barrier_needed=no 2401 ;; 2402 arm*) 2403 AC_MSG_RESULT([arm]) 2404 AC_DEFINE_UNQUOTED(G_ATOMIC_ARM, 1, 2405 [arm atomic implementation]) 2406 glib_memory_barrier_needed=no 2407 ;; 2408 crisv32*|etraxfs*) 2409 AC_MSG_RESULT([crisv32]) 2410 AC_DEFINE_UNQUOTED(G_ATOMIC_CRISV32, 1, 2411 [crisv32 atomic implementation]) 2412 glib_memory_barrier_needed=no 2413 ;; 2414 cris*|etrax*) 2415 AC_MSG_RESULT([cris]) 2416 AC_DEFINE_UNQUOTED(G_ATOMIC_CRIS, 1, 2417 [cris atomic implementation]) 2418 glib_memory_barrier_needed=no 2419 ;; 2420 *) 2421 AC_MSG_RESULT([none]) 2422 glib_memory_barrier_needed=yes 2423 ;; 2424 esac 2425else 2426 if test $glib_native_win32 = yes; then 2427 # For Windows but not using gcc. No barriers needed then either. 2428 glib_memory_barrier_needed=no 2429 fi 2430fi 2431 2432dnl **************************************** 2433dnl *** GLib POLL* compatibility defines *** 2434dnl **************************************** 2435 2436glib_poll_includes=[" 2437#include <sys/types.h> 2438#include <sys/poll.h> 2439"] 2440 2441if test $ac_cv_header_sys_types_h = yes && 2442 test $ac_cv_header_sys_poll_h = yes ; then 2443 glib_failed=false 2444 GLIB_CHECK_VALUE(POLLIN, $glib_poll_includes, glib_failed=true) 2445 GLIB_CHECK_VALUE(POLLOUT, $glib_poll_includes, glib_failed=true) 2446 GLIB_CHECK_VALUE(POLLPRI, $glib_poll_includes, glib_failed=true) 2447 GLIB_CHECK_VALUE(POLLERR, $glib_poll_includes, glib_failed=true) 2448 GLIB_CHECK_VALUE(POLLHUP, $glib_poll_includes, glib_failed=true) 2449 GLIB_CHECK_VALUE(POLLNVAL, $glib_poll_includes, glib_failed=true) 2450 if $glib_failed ; then 2451 AC_MSG_ERROR([Could not determine values for POLL* constants]) 2452 fi 2453else 2454 glib_cv_value_POLLIN=1 2455 glib_cv_value_POLLOUT=4 2456 glib_cv_value_POLLPRI=2 2457 glib_cv_value_POLLERR=8 2458 glib_cv_value_POLLHUP=16 2459 glib_cv_value_POLLNVAL=32 2460fi 2461 2462AC_MSG_CHECKING([for broken poll]) 2463AC_RUN_IFELSE([AC_LANG_SOURCE([[ 2464 #include <stdlib.h> 2465 #include <fcntl.h> 2466 #include <poll.h> 2467 #ifdef HAVE_SYS_POLL_H 2468 #include <sys/poll.h> 2469 #endif 2470 int main(void) { 2471 struct pollfd fds[1]; 2472 int fd; 2473 fd = open("/dev/null", 1); 2474 fds[0].fd = fd; 2475 fds[0].events = POLLIN; 2476 fds[0].revents = 0; 2477 if (poll(fds, 1, 0) < 0 || (fds[0].revents & POLLNVAL) != 0) { 2478 exit(1); /* Does not work for devices -- fail */ 2479 } 2480 exit(0); 2481 }]])], 2482 [broken_poll=no], 2483 [broken_poll=yes 2484 AC_DEFINE(BROKEN_POLL,1,[poll doesn't work on devices])], 2485 [broken_poll="no (cross compiling)"]) 2486AC_MSG_RESULT($broken_poll) 2487 2488dnl ********************* 2489dnl *** GRegex checks *** 2490dnl ********************* 2491PCRE_REQUIRED_VERSION=7.2 2492 2493# Check if we should compile GRegex 2494AC_ARG_ENABLE(regex, AC_HELP_STRING([--disable-regex], 2495 [disable the compilation of GRegex]), 2496[case "${enableval}" in 2497 yes) enable_regex=true ;; 2498 no) enable_regex=false ;; 2499 *) AC_MSG_ERROR(bad value ${enableval} for --enable-regex) ;; 2500esac], 2501[enable_regex=true]) 2502 2503AM_CONDITIONAL(ENABLE_REGEX, $enable_regex) 2504 2505if test x$enable_regex = xtrue; then 2506 AC_DEFINE(ENABLE_REGEX, [], [include GRegex]) 2507 # Check if we should use the internal or the system-supplied pcre 2508 AC_ARG_WITH(pcre, 2509 [AC_HELP_STRING([--with-pcre=@<:@internal/system@:>@], 2510 [specify whether to use the internal or the 2511 system-supplied PCRE library])]) 2512 2513 AM_CONDITIONAL(USE_SYSTEM_PCRE, [test "x$with_pcre" = xsystem]) 2514 2515 if test "x$with_pcre" = xsystem; then 2516 PKG_CHECK_MODULES(PCRE, 2517 libpcre >= $PCRE_REQUIRED_VERSION) 2518 AC_CACHE_CHECK([for Unicode support in PCRE],glib_cv_pcre_has_unicode,[ 2519 glib_save_CFLAGS="$CFLAGS" 2520 glib_save_LIBS="$LIBS" 2521 CFLAGS="$CFLAGS $PCRE_CFLAGS" LIBS="$PCRE_LIBS" 2522 AC_TRY_RUN([#include <pcre.h> 2523 int main () { 2524 int support; 2525 pcre_config (PCRE_CONFIG_UTF8, &support); 2526 if (!support) 2527 return 1; 2528 pcre_config (PCRE_CONFIG_UNICODE_PROPERTIES, &support); 2529 if (!support) 2530 return 1; 2531 return 0; 2532 }], 2533 glib_cv_pcre_has_unicode=yes, 2534 glib_cv_pcre_has_unicode=no, 2535 glib_cv_pcre_has_unicode=yes) 2536 CFLAGS="$glib_save_CFLAGS" 2537 LIBS="$glib_save_LIBS" 2538 ]) 2539 if test "$glib_cv_pcre_has_unicode" = "no"; then 2540 AC_MSG_ERROR([*** The system-supplied PCRE does not support Unicode properties or UTF-8.]) 2541 fi 2542 AC_SUBST(PCRE_CFLAGS) 2543 AC_SUBST(PCRE_LIBS) 2544 AC_DEFINE(USE_SYSTEM_PCRE, [], [using the system-supplied PCRE library]) 2545 PCRE_REQUIRES=libpcre 2546 AC_SUBST(PCRE_REQUIRES) 2547 else 2548 # If using gcc 4 pass -Wno-pointer-sign when compiling the internal PCRE 2549 if test x"$GCC" = xyes; then 2550 AC_MSG_CHECKING([whether compiler understands -Wno-pointer-sign]) 2551 save_CFLAGS="$CFLAGS" 2552 CFLAGS="$CFLAGS -Wno-pointer-sign" 2553 AC_TRY_COMPILE([],[],[PCRE_WARN_CFLAGS="$PCRE_WARN_CFLAGS -Wno-pointer-sign" 2554 AC_MSG_RESULT(yes)],[AC_MSG_RESULT(no)]) 2555 CFLAGS="$save_CFLAGS" 2556 fi 2557 fi 2558 AC_SUBST(PCRE_WARN_CFLAGS) 2559else 2560 AM_CONDITIONAL(USE_SYSTEM_PCRE, false]) 2561fi 2562 2563dnl ********************** 2564dnl *** Win32 API libs *** 2565dnl ********************** 2566 2567case $host in 2568 *-*-cygwin*) 2569 G_LIBS_EXTRA="-luser32 -lkernel32" 2570 ;; 2571 *-*-mingw*) 2572 G_LIBS_EXTRA="-lws2_32 -lole32" 2573 ;; 2574 *) 2575 G_LIBS_EXTRA="" 2576 ;; 2577esac 2578AC_SUBST(G_LIBS_EXTRA) 2579 2580dnl If the system doesn't define EILSEQ, we should define EILSEQ ourselves 2581dnl since we need it for g_iconv() 2582 2583AC_MSG_CHECKING([for EILSEQ]) 2584AC_TRY_COMPILE([ 2585#include <errno.h> 2586], 2587[ 2588int error = EILSEQ; 2589], have_eilseq=yes, have_eilseq=no); 2590AC_MSG_RESULT($have_eilseq) 2591 2592dnl ****************************************************************** 2593dnl *** Look for glib-genmarshal in PATH if we are cross-compiling *** 2594dnl ****************************************************************** 2595 2596AM_CONDITIONAL(CROSS_COMPILING, test $cross_compiling = yes) 2597 2598if test $cross_compiling = yes; then 2599 AC_PATH_PROG(GLIB_GENMARSHAL, glib-genmarshal, no) 2600 if test x$GLIB_GENMARSHAL = xno; then 2601 AC_MSG_ERROR(Could not find a glib-genmarshal in your PATH) 2602 fi 2603fi 2604 2605dnl ************************** 2606dnl *** Checks for gtk-doc *** 2607dnl ************************** 2608 2609GTK_DOC_CHECK([1.11]) 2610 2611AC_ARG_ENABLE(man, 2612 [AC_HELP_STRING([--enable-man], 2613 [regenerate man pages from Docbook [default=no]])],enable_man=yes, 2614 enable_man=no) 2615 2616if test "${enable_man}" != no; then 2617dnl 2618dnl Check for xsltproc 2619dnl 2620AC_PATH_PROG([XSLTPROC], [xsltproc]) 2621 if test -z "$XSLTPROC"; then 2622 enable_man=no 2623 fi 2624 2625 dnl check for DocBook DTD and stylesheets in the local catalog. 2626 JH_CHECK_XML_CATALOG([-//OASIS//DTD DocBook XML V4.1.2//EN], 2627 [DocBook XML DTD V4.1.2],,enable_man=no) 2628 JH_CHECK_XML_CATALOG([http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl], 2629 [DocBook XSL Stylesheets],,enable_man=no) 2630fi 2631 2632AM_CONDITIONAL(ENABLE_MAN, test x$enable_man != xno) 2633 2634dnl ****************************** 2635dnl *** output the whole stuff *** 2636dnl ****************************** 2637 2638dnl this section will only be run if config.status is invoked with no 2639dnl arguments, or with "glibconfig.h" as an argument. 2640AC_CONFIG_COMMANDS([glibconfig.h], 2641[ 2642 outfile=glibconfig.h-tmp 2643 cat > $outfile <<\_______EOF 2644/* glibconfig.h 2645 * 2646 * This is a generated file. Please modify 'configure.in' 2647 */ 2648 2649#ifndef __G_LIBCONFIG_H__ 2650#define __G_LIBCONFIG_H__ 2651 2652#include <glib/gmacros.h> 2653 2654_______EOF 2655 2656 if test x$glib_limits_h = xyes; then 2657 echo '#include <limits.h>' >> $outfile 2658 fi 2659 if test x$glib_float_h = xyes; then 2660 echo '#include <float.h>' >> $outfile 2661 fi 2662 if test x$glib_values_h = xyes; then 2663 echo '#include <values.h>' >> $outfile 2664 fi 2665 if test "$glib_header_alloca_h" = "yes"; then 2666 echo '#define GLIB_HAVE_ALLOCA_H' >> $outfile 2667 fi 2668 if test x$glib_sys_poll_h = xyes; then 2669 echo '#define GLIB_HAVE_SYS_POLL_H' >> $outfile 2670 fi 2671 if test x$glib_included_printf != xyes; then 2672 echo " 2673/* Specifies that GLib's g_print*() functions wrap the 2674 * system printf functions. This is useful to know, for example, 2675 * when using glibc's register_printf_function(). 2676 */" >> $outfile 2677 echo '#define GLIB_USING_SYSTEM_PRINTF' >> $outfile 2678 fi 2679 2680 cat >> $outfile <<_______EOF 2681 2682G_BEGIN_DECLS 2683 2684#define G_MINFLOAT $glib_mf 2685#define G_MAXFLOAT $glib_Mf 2686#define G_MINDOUBLE $glib_md 2687#define G_MAXDOUBLE $glib_Md 2688#define G_MINSHORT $glib_ms 2689#define G_MAXSHORT $glib_Ms 2690#define G_MAXUSHORT $glib_Mus 2691#define G_MININT $glib_mi 2692#define G_MAXINT $glib_Mi 2693#define G_MAXUINT $glib_Mui 2694#define G_MINLONG $glib_ml 2695#define G_MAXLONG $glib_Ml 2696#define G_MAXULONG $glib_Mul 2697 2698_______EOF 2699 2700 2701 ### this should always be true in a modern C/C++ compiler 2702 cat >>$outfile <<_______EOF 2703typedef signed char gint8; 2704typedef unsigned char guint8; 2705_______EOF 2706 2707 2708 if test -n "$gint16"; then 2709 cat >>$outfile <<_______EOF 2710typedef signed $gint16 gint16; 2711typedef unsigned $gint16 guint16; 2712#define G_GINT16_MODIFIER $gint16_modifier 2713#define G_GINT16_FORMAT $gint16_format 2714#define G_GUINT16_FORMAT $guint16_format 2715_______EOF 2716 fi 2717 2718 2719 if test -n "$gint32"; then 2720 cat >>$outfile <<_______EOF 2721typedef signed $gint32 gint32; 2722typedef unsigned $gint32 guint32; 2723#define G_GINT32_MODIFIER $gint32_modifier 2724#define G_GINT32_FORMAT $gint32_format 2725#define G_GUINT32_FORMAT $guint32_format 2726_______EOF 2727 fi 2728 2729 cat >>$outfile <<_______EOF 2730#define G_HAVE_GINT64 1 /* deprecated, always true */ 2731 2732${glib_extension}typedef signed $gint64 gint64; 2733${glib_extension}typedef unsigned $gint64 guint64; 2734 2735#define G_GINT64_CONSTANT(val) $gint64_constant 2736#define G_GUINT64_CONSTANT(val) $guint64_constant 2737_______EOF 2738 2739 if test x$gint64_format != x ; then 2740 cat >>$outfile <<_______EOF 2741#define G_GINT64_MODIFIER $gint64_modifier 2742#define G_GINT64_FORMAT $gint64_format 2743#define G_GUINT64_FORMAT $guint64_format 2744_______EOF 2745 else 2746 cat >>$outfile <<_______EOF 2747#undef G_GINT64_MODIFIER 2748#undef G_GINT64_FORMAT 2749#undef G_GUINT64_FORMAT 2750_______EOF 2751 fi 2752 2753 cat >>$outfile <<_______EOF 2754 2755#define GLIB_SIZEOF_VOID_P $glib_void_p 2756#define GLIB_SIZEOF_LONG $glib_long 2757#define GLIB_SIZEOF_SIZE_T $glib_size_t 2758 2759_______EOF 2760 2761 cat >>$outfile <<_______EOF 2762typedef signed $glib_size_type_define gssize; 2763typedef unsigned $glib_size_type_define gsize; 2764#define G_GSIZE_MODIFIER $gsize_modifier 2765#define G_GSSIZE_FORMAT $gssize_format 2766#define G_GSIZE_FORMAT $gsize_format 2767 2768#define G_MAXSIZE G_MAXU$glib_msize_type 2769#define G_MINSSIZE G_MIN$glib_msize_type 2770#define G_MAXSSIZE G_MAX$glib_msize_type 2771 2772typedef gint64 goffset; 2773#define G_MINOFFSET G_MININT64 2774#define G_MAXOFFSET G_MAXINT64 2775 2776#define G_GOFFSET_MODIFIER G_GINT64_MODIFIER 2777#define G_GOFFSET_FORMAT G_GINT64_FORMAT 2778#define G_GOFFSET_CONSTANT(val) G_GINT64_CONSTANT(val) 2779 2780_______EOF 2781 2782 if test -z "$glib_unknown_void_p"; then 2783 cat >>$outfile <<_______EOF 2784 2785#define GPOINTER_TO_INT(p) ((gint) ${glib_gpi_cast} (p)) 2786#define GPOINTER_TO_UINT(p) ((guint) ${glib_gpui_cast} (p)) 2787 2788#define GINT_TO_POINTER(i) ((gpointer) ${glib_gpi_cast} (i)) 2789#define GUINT_TO_POINTER(u) ((gpointer) ${glib_gpui_cast} (u)) 2790 2791typedef signed $glib_intptr_type_define gintptr; 2792typedef unsigned $glib_intptr_type_define guintptr; 2793_______EOF 2794 else 2795 echo '#error SIZEOF_VOID_P unknown - This should never happen' >>$outfile 2796 fi 2797 2798 2799 2800 cat >>$outfile <<_______EOF 2801$glib_atexit 2802$glib_memmove 2803$glib_defines 2804$glib_os 2805$glib_static_compilation 2806 2807$glib_vacopy 2808 2809#ifdef __cplusplus 2810#define G_HAVE_INLINE 1 2811#else /* !__cplusplus */ 2812$glib_inline 2813#endif /* !__cplusplus */ 2814 2815#ifdef __cplusplus 2816#define G_CAN_INLINE 1 2817_______EOF 2818 2819 if test x$g_can_inline = xyes ; then 2820 cat >>$outfile <<_______EOF 2821#else /* !__cplusplus */ 2822#define G_CAN_INLINE 1 2823_______EOF 2824 fi 2825 2826 cat >>$outfile <<_______EOF 2827#endif 2828 2829_______EOF 2830 2831 if test x$g_have_iso_c_varargs = xyes ; then 2832 cat >>$outfile <<_______EOF 2833#ifndef __cplusplus 2834# define G_HAVE_ISO_VARARGS 1 2835#endif 2836_______EOF 2837 fi 2838 if test x$g_have_iso_cxx_varargs = xyes ; then 2839 cat >>$outfile <<_______EOF 2840#ifdef __cplusplus 2841# define G_HAVE_ISO_VARARGS 1 2842#endif 2843_______EOF 2844 fi 2845 if test x$g_have_gnuc_varargs = xyes ; then 2846 cat >>$outfile <<_______EOF 2847 2848/* gcc-2.95.x supports both gnu style and ISO varargs, but if -ansi 2849 * is passed ISO vararg support is turned off, and there is no work 2850 * around to turn it on, so we unconditionally turn it off. 2851 */ 2852#if __GNUC__ == 2 && __GNUC_MINOR__ == 95 2853# undef G_HAVE_ISO_VARARGS 2854#endif 2855 2856#define G_HAVE_GNUC_VARARGS 1 2857_______EOF 2858 fi 2859 2860 case x$g_stack_grows in 2861 xyes) echo "#define G_HAVE_GROWING_STACK 1" >>$outfile ;; 2862 *) echo "#define G_HAVE_GROWING_STACK 0" >>$outfile ;; 2863 esac 2864 2865 2866 echo >>$outfile 2867 if test x$g_have_eilseq = xno; then 2868 cat >>$outfile <<_______EOF 2869#ifndef EILSEQ 2870/* On some systems, like SunOS and NetBSD, EILSEQ is not defined. 2871 * The correspondence between this and the corresponding definition 2872 * in libiconv is essential. 2873 */ 2874# define EILSEQ ENOENT 2875#endif 2876_______EOF 2877 2878 fi 2879 2880 if test x$g_have_gnuc_visibility = xyes; then 2881 cat >>$outfile <<_______EOF 2882#define G_HAVE_GNUC_VISIBILITY 1 2883_______EOF 2884 fi 2885 cat >>$outfile <<_______EOF 2886#if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590) 2887#define G_GNUC_INTERNAL __attribute__((visibility("hidden"))) 2888#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550) 2889#define G_GNUC_INTERNAL __hidden 2890#elif defined (__GNUC__) && defined (G_HAVE_GNUC_VISIBILITY) 2891#define G_GNUC_INTERNAL __attribute__((visibility("hidden"))) 2892#else 2893#define G_GNUC_INTERNAL 2894#endif 2895_______EOF 2896 2897 2898 echo >>$outfile 2899 if test x$g_mutex_has_default = xyes; then 2900 cat >>$outfile <<_______EOF 2901$g_enable_threads_def G_THREADS_ENABLED 2902#define G_THREADS_IMPL_$g_threads_impl_def 2903typedef struct _GStaticMutex GStaticMutex; 2904struct _GStaticMutex 2905{ 2906 struct _GMutex *runtime_mutex; 2907 union { 2908 char pad[[$g_mutex_sizeof]]; 2909 double dummy_double; 2910 void *dummy_pointer; 2911 long dummy_long; 2912 } static_mutex; 2913}; 2914#define G_STATIC_MUTEX_INIT { NULL, { { $g_mutex_contents} } } 2915#define g_static_mutex_get_mutex(mutex) \\ 2916 (g_thread_use_default_impl ? ((GMutex*)(gpointer) ((mutex)->static_mutex.pad)) : \\ 2917 g_static_mutex_get_mutex_impl_shortcut (&((mutex)->runtime_mutex))) 2918_______EOF 2919 else 2920 cat >>$outfile <<_______EOF 2921$g_enable_threads_def G_THREADS_ENABLED 2922#define G_THREADS_IMPL_$g_threads_impl_def 2923typedef struct _GMutex* GStaticMutex; 2924#define G_STATIC_MUTEX_INIT NULL 2925#define g_static_mutex_get_mutex(mutex) \\ 2926 (g_static_mutex_get_mutex_impl_shortcut (mutex)) 2927_______EOF 2928 fi 2929 2930 cat >>$outfile <<_______EOF 2931/* This represents a system thread as used by the implementation. An 2932 * alien implementaion, as loaded by g_thread_init can only count on 2933 * "sizeof (gpointer)" bytes to store their info. We however need more 2934 * for some of our native implementations. */ 2935typedef union _GSystemThread GSystemThread; 2936union _GSystemThread 2937{ 2938 char data[[$g_system_thread_sizeof]]; 2939 double dummy_double; 2940 void *dummy_pointer; 2941 long dummy_long; 2942}; 2943_______EOF 2944 if test x"$g_memory_barrier_needed" != xno; then 2945 echo >>$outfile 2946 echo "#define G_ATOMIC_OP_MEMORY_BARRIER_NEEDED 1" >>$outfile 2947 fi 2948 2949 echo >>$outfile 2950 g_bit_sizes="16 32 64" 2951 for bits in $g_bit_sizes; do 2952 cat >>$outfile <<_______EOF 2953#define GINT${bits}_TO_${g_bs_native}(val) ((gint${bits}) (val)) 2954#define GUINT${bits}_TO_${g_bs_native}(val) ((guint${bits}) (val)) 2955#define GINT${bits}_TO_${g_bs_alien}(val) ((gint${bits}) GUINT${bits}_SWAP_LE_BE (val)) 2956#define GUINT${bits}_TO_${g_bs_alien}(val) (GUINT${bits}_SWAP_LE_BE (val)) 2957_______EOF 2958 done 2959 2960 cat >>$outfile <<_______EOF 2961#define GLONG_TO_LE(val) ((glong) GINT${glongbits}_TO_LE (val)) 2962#define GULONG_TO_LE(val) ((gulong) GUINT${glongbits}_TO_LE (val)) 2963#define GLONG_TO_BE(val) ((glong) GINT${glongbits}_TO_BE (val)) 2964#define GULONG_TO_BE(val) ((gulong) GUINT${glongbits}_TO_BE (val)) 2965#define GINT_TO_LE(val) ((gint) GINT${gintbits}_TO_LE (val)) 2966#define GUINT_TO_LE(val) ((guint) GUINT${gintbits}_TO_LE (val)) 2967#define GINT_TO_BE(val) ((gint) GINT${gintbits}_TO_BE (val)) 2968#define GUINT_TO_BE(val) ((guint) GUINT${gintbits}_TO_BE (val)) 2969#define G_BYTE_ORDER $g_byte_order 2970 2971#define GLIB_SYSDEF_POLLIN =$g_pollin 2972#define GLIB_SYSDEF_POLLOUT =$g_pollout 2973#define GLIB_SYSDEF_POLLPRI =$g_pollpri 2974#define GLIB_SYSDEF_POLLHUP =$g_pollhup 2975#define GLIB_SYSDEF_POLLERR =$g_pollerr 2976#define GLIB_SYSDEF_POLLNVAL =$g_pollnval 2977 2978#define G_MODULE_SUFFIX "$g_module_suffix" 2979 2980/* A GPid is an abstraction for a process "handle". It is *not* an 2981 * abstraction for a process identifier in general. GPid is used in 2982 * GLib only for descendant processes spawned with the g_spawn* 2983 * functions. On POSIX there is no "process handle" concept as such, 2984 * but on Windows a GPid is a handle to a process, a kind of pointer, 2985 * not a process identifier. 2986 */ 2987typedef $g_pid_type GPid; 2988 2989G_END_DECLS 2990 2991#endif /* GLIBCONFIG_H */ 2992_______EOF 2993 2994 2995 if cmp -s $outfile glibconfig.h; then 2996 AC_MSG_NOTICE([glibconfig.h is unchanged]) 2997 rm -f $outfile 2998 else 2999 mv $outfile glibconfig.h 3000 fi 3001],[ 3002 3003# Note that if two cases are the same, case goes with the first one. 3004# Note also that this is inside an AC_OUTPUT_COMMAND. We do not depend 3005# on variable expansion in case labels. Look at the generated config.status 3006# for a hint. 3007 3008if test "x${ac_cv_working_alloca_h+set}" = xset ; then 3009 glib_header_alloca_h="$ac_cv_working_alloca_h" 3010else 3011 glib_header_alloca_h="$ac_cv_header_alloca_h" 3012fi 3013 3014case xyes in 3015x$ac_cv_header_float_h) 3016 glib_float_h=yes 3017 glib_mf=FLT_MIN glib_Mf=FLT_MAX 3018 glib_md=DBL_MIN glib_Md=DBL_MAX 3019 ;; 3020x$ac_cv_header_values_h) 3021 glib_values_h=yes 3022 glib_mf=MINFLOAT glib_Mf=MAXFLOAT 3023 glib_md=MINDOUBLE glib_Md=MAXDOUBLE 3024 ;; 3025esac 3026 3027case xyes in 3028x$ac_cv_header_limits_h) 3029 glib_limits_h=yes 3030 glib_ms=SHRT_MIN glib_Ms=SHRT_MAX glib_Mus=USHRT_MAX 3031 glib_mi=INT_MIN glib_Mi=INT_MAX glib_Mui=UINT_MAX 3032 glib_ml=LONG_MIN glib_Ml=LONG_MAX glib_Mul=ULONG_MAX 3033 ;; 3034x$ac_cv_header_values_h) 3035 glib_values_h=yes 3036 glib_ms=MINSHORT glib_Ms=MAXSHORT glib_Mus="(((gushort)G_MAXSHORT)*2+1)" 3037 glib_mi=MININT glib_Mi=MAXINT glib_Mui="(((guint)G_MAXINT)*2+1)" 3038 glib_ml=MINLONG glib_Ml=MAXLONG glib_Mul="(((gulong)G_MAXLONG)*2+1)" 3039 ;; 3040esac 3041 3042if test x$ac_cv_header_sys_poll_h = xyes ; then 3043 glib_sys_poll_h=yes 3044fi 3045 3046if test x$enable_included_printf = xyes ; then 3047 glib_included_printf=yes 3048fi 3049 3050case 2 in 3051$ac_cv_sizeof_short) 3052 gint16=short 3053 gint16_modifier='"h"' 3054 gint16_format='"hi"' 3055 guint16_format='"hu"' 3056 ;; 3057$ac_cv_sizeof_int) 3058 gint16=int 3059 gint16_modifier='""' 3060 gint16_format='"i"' 3061 guint16_format='"u"' 3062 ;; 3063esac 3064case 4 in 3065$ac_cv_sizeof_short) 3066 gint32=short 3067 gint32_modifier='"h"' 3068 gint32_format='"hi"' 3069 guint32_format='"hu"' 3070 ;; 3071$ac_cv_sizeof_int) 3072 gint32=int 3073 gint32_modifier='""' 3074 gint32_format='"i"' 3075 guint32_format='"u"' 3076 ;; 3077$ac_cv_sizeof_long) 3078 gint32=long 3079 gint32_modifier='"l"' 3080 gint32_format='"li"' 3081 guint32_format='"lu"' 3082 ;; 3083esac 3084case 8 in 3085$ac_cv_sizeof_int) 3086 gint64=int 3087 gint64_modifier='""' 3088 gint64_format='"i"' 3089 guint64_format='"u"' 3090 glib_extension= 3091 gint64_constant='(val)' 3092 guint64_constant='(val)' 3093 ;; 3094$ac_cv_sizeof_long) 3095 gint64=long 3096 gint64_modifier='"l"' 3097 gint64_format='"li"' 3098 guint64_format='"lu"' 3099 glib_extension= 3100 gint64_constant='(val##L)' 3101 guint64_constant='(val##UL)' 3102 ;; 3103$ac_cv_sizeof_long_long) 3104 gint64='long long' 3105 if test -n "$glib_cv_long_long_format"; then 3106 gint64_modifier='"'$glib_cv_long_long_format'"' 3107 gint64_format='"'$glib_cv_long_long_format'i"' 3108 guint64_format='"'$glib_cv_long_long_format'u"' 3109 fi 3110 glib_extension='G_GNUC_EXTENSION ' 3111 gint64_constant='(G_GNUC_EXTENSION (val##LL))' 3112 guint64_constant='(G_GNUC_EXTENSION (val##ULL))' 3113 ;; 3114$ac_cv_sizeof___int64) 3115 gint64='__int64' 3116 if test -n "$glib_cv_long_long_format"; then 3117 gint64_modifier='"'$glib_cv_long_long_format'"' 3118 gint64_format='"'$glib_cv_long_long_format'i"' 3119 guint64_format='"'$glib_cv_long_long_format'u"' 3120 fi 3121 glib_extension= 3122 gint64_constant='(val##i64)' 3123 guint64_constant='(val##ui64)' 3124 ;; 3125esac 3126glib_size_t=$ac_cv_sizeof_size_t 3127glib_size_type_define="$glib_size_type" 3128glib_void_p=$ac_cv_sizeof_void_p 3129glib_long=$ac_cv_sizeof_long 3130 3131case "$glib_size_type" in 3132short) 3133 gsize_modifier='"h"' 3134 gsize_format='"hu"' 3135 gssize_format='"hi"' 3136 glib_msize_type='SHRT' 3137 ;; 3138int) 3139 gsize_modifier='""' 3140 gsize_format='"u"' 3141 gssize_format='"i"' 3142 glib_msize_type='INT' 3143 ;; 3144long) 3145 gsize_modifier='"l"' 3146 gsize_format='"lu"' 3147 gssize_format='"li"' 3148 glib_msize_type='LONG' 3149 ;; 3150"long long"|__int64) 3151 gsize_modifier='"I64"' 3152 gsize_format='"I64u"' 3153 gssize_format='"I64i"' 3154 glib_msize_type='INT64' 3155 ;; 3156esac 3157 3158gintbits=`expr $ac_cv_sizeof_int \* 8` 3159glongbits=`expr $ac_cv_sizeof_long \* 8` 3160 3161case $ac_cv_sizeof_void_p in 3162$ac_cv_sizeof_int) 3163 glib_intptr_type_define=int 3164 glib_gpi_cast='' 3165 glib_gpui_cast='' 3166 ;; 3167$ac_cv_sizeof_long) 3168 glib_intptr_type_define=long 3169 glib_gpi_cast='(glong)' 3170 glib_gpui_cast='(gulong)' 3171 ;; 3172$ac_cv_sizeof_long_long) 3173 glib_intptr_type_define='long long' 3174 glib_gpi_cast='(gint64)' 3175 glib_gpui_cast='(guint64)' 3176 ;; 3177$ac_cv_sizeof___int64) 3178 glib_intptr_type_define=__int64 3179 glib_gpi_cast='(gint64)' 3180 glib_gpui_cast='(guint64)' 3181 ;; 3182*) 3183 glib_unknown_void_p=yes 3184 ;; 3185esac 3186 3187 3188case xyes in 3189x$ac_cv_func_atexit) 3190 glib_atexit=" 3191#ifdef NeXT /* @#%@! NeXTStep */ 3192# define g_ATEXIT(proc) (!atexit (proc)) 3193#else 3194# define g_ATEXIT(proc) (atexit (proc)) 3195#endif" 3196 ;; 3197x$ac_cv_func_on_exit) 3198 glib_atexit=" 3199#define g_ATEXIT(proc) (on_exit ((void (*)(int, void*))(proc), NULL))" 3200 ;; 3201esac 3202 3203case xyes in 3204x$ac_cv_func_memmove) 3205 glib_memmove=' 3206#define g_memmove(dest,src,len) G_STMT_START { memmove ((dest), (src), (len)); } G_STMT_END' 3207 ;; 3208x$glib_cv_working_bcopy) 3209 glib_memmove=" 3210/* memmove isn't available, but bcopy can copy overlapping memory regions */ 3211#define g_memmove(d,s,n) G_STMT_START { bcopy ((s), (d), (n)); } G_STMT_END" 3212 ;; 3213*) 3214 glib_memmove=" 3215/* memmove isn't found and bcopy can't copy overlapping memory regions, 3216 * so we have to roll our own copy routine. */ 3217void g_memmove (void* dest, const void * src, unsigned long len);" 3218 ;; 3219esac 3220 3221glib_defines=" 3222#define GLIB_MAJOR_VERSION $GLIB_MAJOR_VERSION 3223#define GLIB_MINOR_VERSION $GLIB_MINOR_VERSION 3224#define GLIB_MICRO_VERSION $GLIB_MICRO_VERSION 3225" 3226 3227case xyes in 3228x$glib_cv_va_copy) glib_vacopy='#define G_VA_COPY va_copy' ;; 3229x$glib_cv___va_copy) glib_vacopy='#define G_VA_COPY __va_copy' ;; 3230*) glib_vacopy='' 3231esac 3232 3233if test x$glib_cv_va_val_copy = xno; then 3234 glib_vacopy="\$glib_vacopy 3235#define G_VA_COPY_AS_ARRAY 1" 3236fi 3237 3238if test x$glib_cv_hasinline = xyes; then 3239 glib_inline='#define G_HAVE_INLINE 1' 3240fi 3241if test x$glib_cv_has__inline = xyes; then 3242 glib_inline="\$glib_inline 3243#define G_HAVE___INLINE 1" 3244fi 3245if test x$glib_cv_has__inline__ = xyes; then 3246 glib_inline="\$glib_inline 3247#define G_HAVE___INLINE__ 1" 3248fi 3249 3250g_have_gnuc_varargs=$g_have_gnuc_varargs 3251g_have_iso_c_varargs=$g_have_iso_c_varargs 3252g_have_iso_cxx_varargs=$g_have_iso_cxx_varargs 3253 3254g_can_inline=$g_can_inline 3255g_have_gnuc_visibility=$g_have_gnuc_visibility 3256g_have_sunstudio_visibility=$g_have_sunstudio_visibility 3257 3258if test x$ac_cv_c_bigendian = xyes; then 3259 g_byte_order=G_BIG_ENDIAN 3260 g_bs_native=BE 3261 g_bs_alien=LE 3262else 3263 g_byte_order=G_LITTLE_ENDIAN 3264 g_bs_native=LE 3265 g_bs_alien=BE 3266fi 3267 3268g_pollin=$glib_cv_value_POLLIN 3269g_pollout=$glib_cv_value_POLLOUT 3270g_pollpri=$glib_cv_value_POLLPRI 3271g_pollhup=$glib_cv_value_POLLHUP 3272g_pollerr=$glib_cv_value_POLLERR 3273g_pollnval=$glib_cv_value_POLLNVAL 3274 3275g_stack_grows=$glib_cv_stack_grows 3276 3277g_have_eilseq=$have_eilseq 3278 3279case x$have_threads in 3280xno) g_enable_threads_def="#undef";; 3281*) g_enable_threads_def="#define";; 3282esac 3283 3284g_threads_impl_def=$g_threads_impl 3285 3286g_mutex_has_default="$mutex_has_default" 3287g_mutex_sizeof="$glib_cv_sizeof_gmutex" 3288g_system_thread_sizeof="$glib_cv_sizeof_system_thread" 3289g_mutex_contents="$glib_cv_byte_contents_gmutex" 3290 3291g_memory_barrier_needed="$glib_memory_barrier_needed" 3292 3293g_module_suffix="$glib_gmodule_suffix" 3294 3295g_pid_type="$glib_pid_type" 3296case $host in 3297 *-*-beos*) 3298 glib_os="#define G_OS_BEOS" 3299 ;; 3300 *-*-cygwin*) 3301 glib_os="#define G_OS_UNIX 3302#define G_PLATFORM_WIN32 3303#define G_WITH_CYGWIN" 3304 ;; 3305 *-*-mingw*) 3306 glib_os="#define G_OS_WIN32 3307#define G_PLATFORM_WIN32" 3308 ;; 3309 *) 3310 glib_os="#define G_OS_UNIX" 3311 ;; 3312esac 3313glib_static_compilation="" 3314if test x$glib_win32_static_compilation = xyes; then 3315 glib_static_compilation="#define GLIB_STATIC_COMPILATION 1 3316#define GOBJECT_STATIC_COMPILATION 1" 3317fi 3318]) 3319 3320AC_CONFIG_FILES([ 3321glib-2.0.pc 3322glib-2.0-uninstalled.pc 3323gmodule-2.0.pc 3324gmodule-export-2.0.pc 3325gmodule-no-export-2.0.pc 3326gmodule-2.0-uninstalled.pc 3327gmodule-no-export-2.0-uninstalled.pc 3328gthread-2.0.pc 3329gthread-2.0-uninstalled.pc 3330gobject-2.0.pc 3331gobject-2.0-uninstalled.pc 3332gio-2.0.pc 3333gio-unix-2.0.pc 3334gio-2.0-uninstalled.pc 3335gio-unix-2.0-uninstalled.pc 3336glib-zip 3337glib-gettextize 3338Makefile 3339build/Makefile 3340build/win32/Makefile 3341build/win32/dirent/Makefile 3342build/win32/vs8/Makefile 3343build/win32/vs9/Makefile 3344glib/Makefile 3345glib/libcharset/Makefile 3346glib/gnulib/Makefile 3347glib/pcre/Makefile 3348glib/update-pcre/Makefile 3349glib/tests/Makefile 3350gmodule/Makefile 3351gmodule/gmoduleconf.h 3352gobject/Makefile 3353gobject/glib-mkenums 3354gobject/tests/Makefile 3355gthread/Makefile 3356gio/Makefile 3357gio/xdgmime/Makefile 3358gio/inotify/Makefile 3359gio/fen/Makefile 3360gio/fam/Makefile 3361gio/win32/Makefile 3362gio/tests/Makefile 3363po/Makefile.in 3364docs/Makefile 3365docs/reference/Makefile 3366docs/reference/glib/Makefile 3367docs/reference/glib/version.xml 3368docs/reference/gobject/Makefile 3369docs/reference/gobject/version.xml 3370docs/reference/gio/Makefile 3371docs/reference/gio/version.xml 3372tests/Makefile 3373tests/gobject/Makefile 3374tests/refcount/Makefile 3375m4macros/Makefile 3376]) 3377 3378AC_CONFIG_COMMANDS([chmod-scripts], 3379[chmod 0755 glib-zip 3380chmod 0755 glib-gettextize 3381chmod 0755 gobject/glib-mkenums]) 3382 3383# we want to invoke this macro solely so that the config.status script 3384# and automake generated makefiles know about these generated files. 3385# They are only needed to distcheck the package 3386if false; then 3387 AC_CONFIG_FILES([ 3388 INSTALL 3389 README 3390 config.h.win32 3391 glibconfig.h.win32 3392 glib/makefile.msc 3393 glib/glib.rc 3394 gmodule/makefile.msc 3395 gmodule/gmodule.rc 3396 gobject/makefile.msc 3397 gobject/gobject.rc 3398 gthread/makefile.msc 3399 gthread/gthread.rc 3400 tests/makefile.msc 3401 ]) 3402fi 3403 3404AC_OUTPUT 3405