configure.in 79.5 KB
Newer Older
1 2 3 4
# Process this file with autoconf to produce a configure script.
# require autoconf 2.54
AC_PREREQ(2.54)

5 6 7
dnl ***********************************
dnl *** include special GLib macros ***
dnl ***********************************
Owen Taylor's avatar
Owen Taylor committed
8

9 10 11 12 13
m4_define(glib_configure_in)
m4_include(acglib.m4)dnl
m4_include(glib/libcharset/codeset.m4)dnl
m4_include(glib/libcharset/glibc21.m4)dnl
m4_include(m4macros/glib-gettext.m4)dnl
Owen Taylor's avatar
Owen Taylor committed
14

15
#
16 17
# The following version number definitions apply to GLib, GModule, GObject 
# and GThread as a whole, so if changes occoured in any of them, they are all
18 19
# treated with the same interface and binary age.
#
Owen Taylor's avatar
Owen Taylor committed
20
# Making releases:
21 22 23 24
#   glib_micro_version += 1;
#   glib_interface_age += 1;
#   glib_binary_age += 1;
# if any functions have been added, set glib_interface_age to 0.
Owen Taylor's avatar
Owen Taylor committed
25
# if backwards compatibility has been broken,
26
# set glib_binary_age _and_ glib_interface_age to 0.
Owen Taylor's avatar
Owen Taylor committed
27
#
28
m4_define([glib_major_version], [2])
Matthias Clasen's avatar
Matthias Clasen committed
29 30 31
m4_define([glib_minor_version], [13])
m4_define([glib_micro_version], [0])
m4_define([glib_interface_age], [0])
32 33 34
m4_define([glib_binary_age],
          [m4_eval(100 * glib_minor_version + glib_micro_version)])
m4_define([glib_version],
Matthias Clasen's avatar
Matthias Clasen committed
35
          [glib_major_version.glib_minor_version.glib_micro_version])
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71

# libtool version related macros
m4_define([glib_lt_release], [glib_major_version.glib_minor_version])
m4_define([glib_lt_current],
          [m4_eval(100 * glib_minor_version + glib_micro_version - glib_interface_age)])
m4_define([glib_lt_revision], [glib_interface_age])
m4_define([glib_lt_age], [m4_eval(glib_binary_age - glib_interface_age)])
m4_define([glib_lt_current_minus_age],
          [m4_eval(glib_lt_current - glib_lt_age)])

# if the minor version number is odd, then we want debugging.  Otherwise
# we only want minimal debugging support.
m4_define([glib_debug_default],
          [m4_if(m4_eval(glib_minor_version % 2), [1], [yes], [minimum])])dnl


AC_INIT(glib, [glib_version],
        [http://bugzilla.gnome.org/enter_bug.cgi?product=glib])

AC_CONFIG_SRCDIR([glib/glib.h])

# Save this value here, since automake will set cflags later
cflags_set=${CFLAGS+set}

AM_INIT_AUTOMAKE([no-define])

# Specify a configuration file
AM_CONFIG_HEADER([config.h])


GLIB_MAJOR_VERSION=glib_major_version
GLIB_MINOR_VERSION=glib_minor_version
GLIB_MICRO_VERSION=glib_micro_version
GLIB_INTERFACE_AGE=glib_interface_age
GLIB_BINARY_AGE=glib_binary_age
GLIB_VERSION=glib_version
72

73 74
AC_SUBST(GLIB_MAJOR_VERSION)
AC_SUBST(GLIB_MINOR_VERSION)
75
AC_SUBST(GLIB_MICRO_VERSION)
Owen Taylor's avatar
Owen Taylor committed
76
AC_SUBST(GLIB_VERSION)
77 78
AC_SUBST(GLIB_INTERFACE_AGE)
AC_SUBST(GLIB_BINARY_AGE)
Owen Taylor's avatar
Owen Taylor committed
79

80 81 82 83 84 85 86 87 88 89 90
AC_DEFINE(GLIB_MAJOR_VERSION, [glib_major_version],
	  [Define to the GLIB major version])
AC_DEFINE(GLIB_MINOR_VERSION, [glib_minor_version],
	  [Define to the GLIB minor version])
AC_DEFINE(GLIB_MICRO_VERSION, [glib_micro_version],
	  [Define to the GLIB micro version])
AC_DEFINE(GLIB_INTERFACE_AGE, [glib_interface_age],
	  [Define to the GLIB interface age])
AC_DEFINE(GLIB_BINARY_AGE, [glib_binary_age],
	  [Define to the GLIB binary age])

Owen Taylor's avatar
Owen Taylor committed
91
# libtool versioning
92 93 94 95 96
LT_RELEASE=glib_lt_release
LT_CURRENT=glib_lt_current
LT_REVISION=glib_lt_revision
LT_AGE=glib_lt_age
LT_CURRENT_MINUS_AGE=glib_lt_current_minus_age
Owen Taylor's avatar
Owen Taylor committed
97 98 99 100
AC_SUBST(LT_RELEASE)
AC_SUBST(LT_CURRENT)
AC_SUBST(LT_REVISION)
AC_SUBST(LT_AGE)
101
AC_SUBST(LT_CURRENT_MINUS_AGE)
Owen Taylor's avatar
Owen Taylor committed
102 103 104 105 106 107

dnl Initialize maintainer mode
AM_MAINTAINER_MODE

AC_CANONICAL_HOST

108
AC_MSG_CHECKING([for the BeOS])
109 110 111 112
case $host in
  *-*-beos*)
    glib_native_beos="yes"
    ;;
113
  *)
114 115 116
    glib_native_beos="no"
    ;;
esac
117
AC_MSG_RESULT([$glib_native_beos])
118

119
dnl
120

121 122 123
AC_MSG_CHECKING([for Win32])
case "$host" in
  *-*-mingw*)
124
    glib_native_win32=yes
125 126 127 128 129
    GLIB_DEF=glib.def
    GMODULE_DEF=gmodule.def
    GOBJECT_DEF=gobject.def
    GTHREAD_DEF=gthread.def
    TESTGMODULE_EXP=testgmodule.exp
Owen Taylor's avatar
Owen Taylor committed
130
    glib_pid_type='void *'
131 132
    ;;
  *)
133
    glib_native_win32=no
134 135 136 137 138
    GLIB_DEF=
    GMODULE_DEF=
    GOBJECT_DEF=
    GTHREAD_DEF=
    TESTGMODULE_EXP=
139
    glib_pid_type=int
140 141
    ;;
esac
Matthias Clasen's avatar
Matthias Clasen committed
142 143 144 145 146 147 148
case $host in
  *-*-linux*)
    glib_os_linux=yes
    ;;
esac


149
AC_MSG_RESULT([$glib_native_win32])
150
AM_CONDITIONAL(OS_WIN32, [test "$glib_native_win32" = "yes"])
151
AM_CONDITIONAL(OS_UNIX, [test "$glib_native_win32" != "yes"])
Matthias Clasen's avatar
Matthias Clasen committed
152
AM_CONDITIONAL(OS_LINUX, [test "$glib_os_linux" = "yes"])
153 154 155 156 157 158
AC_SUBST(GLIB_DEF)
AC_SUBST(GMODULE_DEF)
AC_SUBST(GOBJECT_DEF)
AC_SUBST(GTHREAD_DEF)
AC_SUBST(TESTGMODULE_EXP)

159
if test "$glib_native_win32" = "yes"; then
160 161 162 163
  AC_CHECK_TOOL(WINDRES, windres, no)
  if test "$WINDRES" = no; then
    AC_MSG_ERROR([*** Could not find an implementation of windres in your PATH.])
  fi
164
  AC_CHECK_TOOL(NM, nm, no)
165
  if test "$NM" = no; then
166 167 168
    AC_MSG_ERROR([*** Could not find an implementation of nm in your PATH.])
  fi
  AC_CHECK_TOOL(RANLIB, ranlib, :)
169
  AC_CHECK_PROG(ms_librarian, [lib.exe], [yes], [no])
170
fi
171
AM_CONDITIONAL(MS_LIB_AVAILABLE, [test x$ms_librarian = xyes])
172

173 174 175 176 177 178 179 180 181 182
if test "$glib_native_win32" != yes; then
    # libtool option to control which symbols are exported
    # right now, symbols starting with _ are not exported
    LIBTOOL_EXPORT_OPTIONS='-export-symbols-regex "^[[^_]].*"'
else
    # We currently use .def files on Windows
    LIBTOOL_EXPORT_OPTIONS=
fi
AC_SUBST(LIBTOOL_EXPORT_OPTIONS)

183
dnl declare --enable-* args and collect ac_help strings
184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205
AC_ARG_ENABLE(debug,
              AC_HELP_STRING([--enable-debug=@<:@no/minimum/yes@:>@],
                             [turn on debugging @<:@default=glib_debug_default@:>@]),,
              enable_debug=glib_debug_default)

AC_ARG_ENABLE(gc_friendly,
              [AC_HELP_STRING([--enable-gc-friendly],
                              [turn on garbage collector friendliness [default=no]])],,
              [enable_gc_friendly=no])
AC_ARG_ENABLE(mem_pools,
              [AC_HELP_STRING([--disable-mem-pools],
			      [disable all glib memory pools])],,
	      [disable_mem_pools=no])
AC_ARG_ENABLE(threads,
              [AC_HELP_STRING([--enable-threads],
                              [turn on basic thread support [default=yes]
([=no] will override --with-threads)])],,
              [enable_threads=yes])
AC_ARG_ENABLE(rebuilds,
              [AC_HELP_STRING([--disable-rebuilds],
                              [disable all source autogeneration rules])],,
              [enable_rebuilds=yes])
206 207 208 209
AC_ARG_ENABLE(visibility,
              [AC_HELP_STRING([--disable-visibility],
                              [don't use ELF visibility attributes])],,
              [enable_visibility=yes])
210 211 212 213

if test "x$enable_threads" != "xyes"; then
  enable_threads=no
fi
Owen Taylor's avatar
Owen Taylor committed
214

215
AC_DEFINE_UNQUOTED(G_COMPILED_WITH_DEBUGGING, ["${enable_debug}"],
216
	[Whether glib was compiled with debugging enabled])
217

218
AC_MSG_CHECKING([whether to enable garbage collector friendliness])
219
if test "x$enable_gc_friendly" = "xyes"; then
220
  AC_DEFINE(ENABLE_GC_FRIENDLY_DEFAULT, 1, [Whether to enable GC friendliness by default])
221
  AC_MSG_RESULT([yes])
222
else
223
  AC_MSG_RESULT([no])
224
fi
225

226
AC_MSG_CHECKING([whether to disable memory pools])
227
if test "x$disable_mem_pools" = "xno"; then
228
  AC_MSG_RESULT([no])
229
else
230
  AC_DEFINE(DISABLE_MEM_POOLS, [1], [Whether to disable memory pools])
231
  AC_SUBST(DISABLE_MEM_POOLS)
232
  AC_MSG_RESULT([yes])
233 234
fi

235 236 237 238 239 240 241 242 243 244 245
if test "$glib_native_win32" = "yes"; then
  if test x$enable_static = xyes -o x$enable_static = x; then
    AC_MSG_WARN([Disabling static library build, must build as DLL on Windows.])
    enable_static=no
  fi
  if test x$enable_shared = xno; then
    AC_MSG_WARN([Enabling shared library build, must build as DLL on Windows.])
  fi
  enable_shared=yes
fi

Owen Taylor's avatar
Owen Taylor committed
246
dnl Checks for programs.
247
AC_PROG_CC
248 249

dnl Check for a working C++ compiler, but do not bail out, if none is found.
250
AC_CHECK_PROGS(CXX, [$CCC c++ g++ gcc CC cxx cc++ cl], [gcc])
251 252 253
AC_LANG_SAVE
AC_LANG_CPLUSPLUS
AC_TRY_COMPILE(,[class a { int b; } c;], ,CXX=)
254
AM_CONDITIONAL(HAVE_CXX, [test "$CXX" != ""])
255
AC_LANG_RESTORE
Owen Taylor's avatar
Owen Taylor committed
256

257 258 259
AM_PROG_CC_STDC
AC_PROG_INSTALL

Owen Taylor's avatar
Owen Taylor committed
260 261
AC_SYS_LARGEFILE

262 263 264
#
# Find pkg-config
#
265
AC_PATH_PROG(PKG_CONFIG, [pkg-config], [no])
266
if test x$PKG_CONFIG = xno ; then
267
  AC_MSG_ERROR([*** pkg-config not found. See http://www.freedesktop.org/software/pkgconfig/])
268 269
fi

270
if $PKG_CONFIG --atleast-pkgconfig-version 0.14 ; then
271 272
  :
else
273
  AC_MSG_ERROR([*** pkg-config too old; version 0.14 or better required.])
274 275
fi

276 277 278 279 280 281 282 283 284 285
if test "x$enable_debug" = "xyes"; then
  if test x$cflags_set != xset ; then
      case " $CFLAGS " in
      *[[\ \	]]-g[[\ \	]]*) ;;
      *) CFLAGS="$CFLAGS -g" ;;
      esac
  fi
	
  GLIB_DEBUG_FLAGS="-DG_ENABLE_DEBUG"
else
286 287
  GLIB_DEBUG_FLAGS="-DG_DISABLE_CAST_CHECKS"

288
  if test "x$enable_debug" = "xno"; then
289
    GLIB_DEBUG_FLAGS="$GLIB_DEBUG_FLAGS -DG_DISABLE_ASSERT -DG_DISABLE_CHECKS"
290 291 292
  fi
fi

293 294 295 296
if test "x$enable_visibility" = "xno"; then
  GLIB_DEBUG_FLAGS="$GLIB_DEBUG_FLAGS -DDISABLE_VISIBILITY"
fi

297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320
# Ensure MSVC-compatible struct packing convention is used when
# compiling for Win32 with gcc.
# What flag to depends on gcc version: gcc3 uses "-mms-bitfields", while
# gcc2 uses "-fnative-struct".
if test x"$glib_native_win32" = xyes; then
  if test x"$GCC" = xyes; then
    msnative_struct=''
    AC_MSG_CHECKING([how to get MSVC-compatible struct packing])
    if test -z "$ac_cv_prog_CC"; then
      our_gcc="$CC"
    else
      our_gcc="$ac_cv_prog_CC"
    fi
    case `$our_gcc --version | sed -e 's,\..*,.,' -e q` in
      2.)
	if $our_gcc -v --help 2>/dev/null | grep fnative-struct >/dev/null; then
	  msnative_struct='-fnative-struct'
	fi
	;;
      *)
	if $our_gcc -v --help 2>/dev/null | grep ms-bitfields >/dev/null; then
	  msnative_struct='-mms-bitfields'
	fi
	;;
321
    esac
322 323 324 325 326 327 328
    if test x"$msnative_struct" = x ; then
      AC_MSG_RESULT([no way])
      AC_MSG_WARN([produced libraries might be incompatible with MSVC-compiled code])
    else
      CFLAGS="$CFLAGS $msnative_struct"
      AC_MSG_RESULT([${msnative_struct}])
    fi
329 330 331
  fi
fi

332 333
AC_EXEEXT

334 335 336
# define a MAINT-like variable REBUILD which is set if Perl
# and awk are found, so autogenerated sources can be rebuilt
AC_PROG_AWK
337
AC_CHECK_PROGS(PERL, [perl5 perl])
338 339 340 341 342 343 344 345 346 347 348
# We would like indent, but don't require it.
AC_CHECK_PROG(INDENT, indent, indent)
REBUILD=\#
if test "x$enable_rebuilds" = "xyes" && \
     test -n "$PERL" && \
     $PERL -e 'exit !($] >= 5.002)' > /dev/null 2>&1 && \
     test -n "$AWK" ; then
  REBUILD=
fi
AC_SUBST(REBUILD)

349 350 351
# Need full path to Perl for glib-mkenums
#
if test "x$PERL" != x ; then
352
  AC_PATH_PROG(PERL_PATH, [$PERL])
353 354 355 356
else
  PERL_PATH="/usr/bin/env perl"
fi
AC_SUBST(PERL_PATH)
Owen Taylor's avatar
Owen Taylor committed
357

358 359 360 361 362 363
dnl ***********************
dnl *** Tests for iconv ***
dnl ***********************
dnl
dnl We do this before the gettext checks, to avoid distortion

364 365 366 367
AC_ARG_WITH(libiconv,
            [AC_HELP_STRING([--with-libiconv=@<:@no/gnu/native@:>@],
                            [use the libiconv library])],,
	    [with_libiconv=maybe])
368 369 370 371 372

found_iconv=no
case $with_libiconv in
  maybe)
    # Check in the C library first
373
    AC_CHECK_FUNC(iconv_open, [with_libiconv=no; found_iconv=yes])
374 375
    # Check if we have GNU libiconv
    if test $found_iconv = "no"; then
376
      AC_CHECK_LIB(iconv, libiconv_open, [with_libiconv=gnu; found_iconv=yes])
377 378 379
    fi
    # Check if we have a iconv in -liconv, possibly from vendor
    if test $found_iconv = "no"; then
380
      AC_CHECK_LIB(iconv, iconv_open, [with_libiconv=native; found_iconv=yes])
381 382 383
    fi
    ;;
  no)
384
    AC_CHECK_FUNC(iconv_open, [with_libiconv=no; found_iconv=yes])
385 386
    ;;
  gnu|yes)
387
    AC_CHECK_LIB(iconv, libiconv_open, [with_libiconv=gnu; found_iconv=yes])
388 389
    ;;
  native)
390
    AC_CHECK_LIB(iconv, iconv_open, [with_libiconv=native; found_iconv=yes])
391 392 393 394 395 396 397
    ;;
esac

if test "x$found_iconv" = "xno" ; then
   AC_MSG_ERROR([*** No iconv() implementation found in C library or libiconv])
fi

Matthias Clasen's avatar
Matthias Clasen committed
398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425
jm_GLIBC21
AC_ARG_ENABLE(iconv-cache, 
              [AC_HELP_STRING([--enable-iconv-cache=@<:@yes/no/auto@:>@],
                              [cache iconv descriptors [default=auto]])],,
              [enable_iconv_cache=auto])

AC_MSG_CHECKING([Whether to cache iconv descriptors])
case $enable_iconv_cache in
  auto)
    if test $ac_cv_gnu_library_2_1 = yes; then
      enable_iconv_cache=no
    else 
      enable_iconv_cache=yes
    fi
  ;;
  yes|no) 
  ;;
  *) AC_MSG_ERROR([Value given to --enable-iconv-cache must be one of yes, no or auto])
  ;;
esac

if test $enable_iconv_cache = yes; then
   AC_DEFINE(NEED_ICONV_CACHE,1,[Do we cache iconv descriptors])
fi

AC_MSG_RESULT($enable_iconv_cache)


Owen Taylor's avatar
Owen Taylor committed
426 427 428 429
dnl
dnl gettext support
dnl

Abel Cheung's avatar
Abel Cheung committed
430
ALL_LINGUAS="am ar az be bg bn bn_IN bs ca cs cy da de dz el en_CA en_GB eo es et eu fa fi fr ga gl gu he hi hr hu hy id is it ja ka ko ku lt lv mk ml mn ms nb ne nl nn or pa pl pt pt_BR ro ru rw sk sl sq sr sr@Latn sr@ije sv ta te th tl tr tt uk vi wa xh yi zh_CN zh_HK zh_TW"
Owen Taylor's avatar
Owen Taylor committed
431
GLIB_GNU_GETTEXT
432

Owen Taylor's avatar
Owen Taylor committed
433
if test "$gt_cv_have_gettext" != "yes" ; then
434 435 436 437 438 439
  AC_MSG_ERROR([
*** You must have either have gettext support in your C library, or use the 
*** GNU gettext library. (http://www.gnu.org/software/gettext/gettext.html
])
fi

Owen Taylor's avatar
Owen Taylor committed
440
LIBS="$INTLLIBS $LIBS"
Owen Taylor's avatar
Owen Taylor committed
441 442 443

GETTEXT_PACKAGE=glib20
AC_SUBST(GETTEXT_PACKAGE)
444
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, ["$GETTEXT_PACKAGE"], 
445
  [Define the gettext package to be used])
Owen Taylor's avatar
Owen Taylor committed
446

Owen Taylor's avatar
Owen Taylor committed
447
GLIB_DEFINE_LOCALEDIR(GLIB_LOCALE_DIR)
Owen Taylor's avatar
Owen Taylor committed
448

449 450 451 452
dnl
dnl Now we are done with gettext checks, figure out ICONV_LIBS
dnl

453
if test x$with_libiconv != xno ; then
454 455 456 457 458 459 460 461 462
  case " $INTLLIBS " in
  *[[\ \	]]-liconv[[\ \	]]*) ;;
  *) ICONV_LIBS="-liconv" ;;
  esac
fi
AC_SUBST(ICONV_LIBS)

case $with_libiconv in
  gnu)
463
    AC_DEFINE(USE_LIBICONV_GNU, 1, [Using GNU libiconv])
464 465
    ;;
  native)
466
    AC_DEFINE(USE_LIBICONV_NATIVE, 1, [Using a native implementation of iconv in a separate library])
467 468 469
    ;;
esac

470
dnl Initialize libtool
471
AM_DISABLE_STATIC
472
AC_LIBTOOL_WIN32_DLL
473 474
AM_PROG_LIBTOOL

475 476
if test "x$GCC" = "xyes"; then
  case " $CFLAGS " in
477
  *[[\ \	]]-Wall[[\ \	]]*) ;;
478 479 480 481
  *) CFLAGS="$CFLAGS -Wall" ;;
  esac
fi

482
dnl
483
dnl DU4 native cc currently needs -std1 for ANSI mode (instead of K&R)
484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504
dnl
if test $cross_compiling != yes ; then
    AC_MSG_CHECKING([for extra flags to get ANSI library prototypes])
    glib_save_LIBS=$LIBS
    LIBS="$LIBS -lm"
    AC_TRY_RUN([#include <math.h>
		 int main (void) { return (log(1) != log(1.)); }],
	 AC_MSG_RESULT(none needed),
	 glib_save_CFLAGS=$CFLAGS
	 CFLAGS="$CFLAGS -std1"
	 AC_TRY_RUN([#include <math.h>
		     int main (void) { return (log(1) != log(1.)); }],
	     AC_MSG_RESULT(-std1),
	     AC_MSG_RESULT()
	     CFLAGS=$glib_save_CFLAGS
	     AC_MSG_WARN(
		    [No ANSI prototypes found in library. (-std1 didn't work.)])
	 )
    )
    LIBS=$glib_save_LIBS
fi
505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522

dnl NeXTStep cc seems to need this
AC_MSG_CHECKING([for extra flags for POSIX compliance])
AC_TRY_COMPILE([#include <dirent.h>], [DIR *dir;],
  AC_MSG_RESULT(none needed),
  glib_save_CFLAGS=$CFLAGS
  CFLAGS="$CFLAGS -posix"
  AC_TRY_COMPILE([#include <dirent.h>], [DIR *dir;],
    AC_MSG_RESULT(-posix),
    AC_MSG_RESULT()
    CFLAGS=$glib_save_CFLAGS
    AC_MSG_WARN([Could not determine POSIX flag. (-posix didn't work.)])))

# Checks for header files.
AC_HEADER_STDC

# Checks for library functions.
AC_FUNC_VPRINTF
523
AC_FUNC_MMAP
524
AC_FUNC_ALLOCA
525 526 527
AC_CHECK_FUNCS(posix_memalign)
AC_CHECK_FUNCS(memalign)
AC_CHECK_FUNCS(valloc)
528

529 530
AC_CHECK_FUNCS(atexit on_exit)

Emmanuele Bassi's avatar
Emmanuele Bassi committed
531 532
AC_CHECK_FUNCS(timegm)

533 534 535 536 537 538
AC_CHECK_SIZEOF(char)
AC_CHECK_SIZEOF(short)
AC_CHECK_SIZEOF(long)
AC_CHECK_SIZEOF(int)
AC_CHECK_SIZEOF(void *)
AC_CHECK_SIZEOF(long long)
539
AC_CHECK_SIZEOF(__int64)
540

541
if test x$ac_cv_sizeof_long = x8 || test x$ac_cv_sizeof_long_long = x8 || test x$ac_cv_sizeof___int64 = x8 ; then
542 543 544 545 546 547 548 549
  :
else
  AC_MSG_ERROR([
*** GLib requires a 64 bit type. You might want to consider
*** using the GNU C compiler.
])
fi

550
if test x$glib_native_win32 != xyes && test x$ac_cv_sizeof_long_long = x8; then
551
	# long long is a 64 bit integer.
552
	AC_MSG_CHECKING(for format to printf and scanf a guint64)
553
	AC_CACHE_VAL(glib_cv_long_long_format,[
554
		for format in ll q I64; do
555
		  AC_TRY_RUN([#include <stdio.h>  
556 557 558 559
			int main()
			{
			  long long b, a = -0x3AFAFAFAFAFAFAFALL;
			  char buffer[1000];
560 561
			  sprintf (buffer, "%${format}u", a);
  			  sscanf (buffer, "%${format}u", &b);
562 563 564
			  exit (b!=a);
			}
			],
565 566 567
			[glib_cv_long_long_format=${format}
			break],
			[],[:])
568 569
		done])
	if test -n "$glib_cv_long_long_format"; then
570
	  AC_MSG_RESULT(%${glib_cv_long_long_format}u)
571
	  AC_DEFINE(HAVE_LONG_LONG_FORMAT,1,[define if system printf can print long long])
572 573 574
	  if test x"$glib_cv_long_long_format" = xI64; then
	    AC_DEFINE(HAVE_INT64_AND_I64,1,[define to support printing 64-bit integers with format I64])
	  fi
575 576 577
        else
	  AC_MSG_RESULT(none)
        fi
578 579
elif test x$ac_cv_sizeof___int64 = x8; then
	# __int64 is a 64 bit integer.
580
	AC_MSG_CHECKING(for format to printf and scanf a guint64)
581
	# We know this is MSVCRT.DLL, and what the formats are
582 583
	glib_cv_long_long_format=I64
	AC_MSG_RESULT(%${glib_cv_long_long_format}u)
584
        AC_DEFINE(HAVE_LONG_LONG_FORMAT,1,[define if system printf can print long long])
585
	AC_DEFINE(HAVE_INT64_AND_I64,1,[define to support printing 64-bit integers with format I64])
586 587 588 589 590 591
fi

dnl long doubles were not used, and a portability problem
dnl AC_C_LONG_DOUBLE
AC_C_CONST

592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611
dnl ok, here we try to check whether the systems prototypes for
dnl malloc and friends actually match the prototypes provided
dnl by gmem.h (keep in sync). i currently only know how to check
dnl this reliably with gcc (-Werror), improvements for other
dnl compilers are apprechiated.
SANE_MALLOC_PROTOS=no
AC_MSG_CHECKING([if malloc() and friends prototypes are gmem.h compatible])
glib_save_CFLAGS=$CFLAGS
if test "x$GCC" = "xyes"; then
  CFLAGS="$CFLAGS -Werror"
  AC_TRY_COMPILE([#include <stdlib.h>], [
    void* (*my_calloc_p)  (size_t, size_t) = calloc;
    void* (*my_malloc_p)  (size_t)         = malloc;
    void  (*my_free_p)    (void*)          = free;
    void* (*my_realloc_p) (void*, size_t)  = realloc;
    my_calloc_p = 0;
    my_malloc_p = 0;
    my_free_p = 0;
    my_realloc_p = 0;
  ],
612 613
    AC_DEFINE(SANE_MALLOC_PROTOS, 1, 
      [Define if you have correct malloc prototypes])
614 615 616 617 618
    SANE_MALLOC_PROTOS=yes)
fi
AC_MSG_RESULT($SANE_MALLOC_PROTOS)
CFLAGS=$glib_save_CFLAGS

619 620 621 622 623 624 625 626 627 628 629 630 631 632 633
dnl
dnl check in which direction the stack grows
dnl
AC_CACHE_CHECK([for growing stack pointer],glib_cv_stack_grows,[
        AC_TRY_RUN([
	volatile int *a = 0, *b = 0;
	void foo (void);
	int main () { volatile int y = 7; a = &y; foo (); return b > a; }
	void foo (void) { volatile int x = 5; b = &x; }
       	],
	glib_cv_stack_grows=no
        ,
	glib_cv_stack_grows=yes
        ,)
])
634

635 636 637
dnl AC_C_INLINE is useless to us since it bails out too early, we need to
dnl truely know which ones of `inline', `__inline' and `__inline__' are
dnl actually supported.
638
AC_CACHE_CHECK([for __inline],glib_cv_has__inline,[
639
        AC_COMPILE_IFELSE([
640 641 642 643 644 645 646 647 648
	__inline int foo () { return 0; }
	int main () { return foo (); }
       	],
	glib_cv_has__inline=yes
        ,
	glib_cv_has__inline=no
        ,)
])
case x$glib_cv_has__inline in
649
xyes) AC_DEFINE(G_HAVE___INLINE,1,[Have __inline keyword])
650
esac
651
AC_CACHE_CHECK([for __inline__],glib_cv_has__inline__,[
652
        AC_COMPILE_IFELSE([
653 654 655 656 657 658 659 660 661
	__inline__ int foo () { return 0; }
	int main () { return foo (); }
       	],
	glib_cv_has__inline__=yes
        ,
	glib_cv_has__inline__=no
        ,)
])
case x$glib_cv_has__inline__ in
662
xyes) AC_DEFINE(G_HAVE___INLINE__,1,[Have __inline__ keyword])
663
esac
664
AC_CACHE_CHECK([for inline], glib_cv_hasinline,[
665
        AC_COMPILE_IFELSE([
666
	#undef inline
667 668 669 670 671 672 673 674 675
	inline int foo () { return 0; }
	int main () { return foo (); }
       	],
	glib_cv_hasinline=yes
        ,
	glib_cv_hasinline=no
        ,)
])
case x$glib_cv_hasinline in
676
xyes) AC_DEFINE(G_HAVE_INLINE,1,[Have inline keyword])
677 678
esac

679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706
# if we can use inline functions in headers
AC_MSG_CHECKING(if inline functions in headers work)
AC_LINK_IFELSE([
#if defined (G_HAVE_INLINE) && defined (__GNUC__) && defined (__STRICT_ANSI__)
#  undef inline
#  define inline __inline__
#elif !defined (G_HAVE_INLINE)
#  undef inline
#  if defined (G_HAVE___INLINE__)
#    define inline __inline__
#  elif defined (G_HAVE___INLINE)
#    define inline __inline
#  endif
#endif

int glib_test_func2 (int);

static inline int
glib_test_func1 (void) {
  return glib_test_func2 (1);
}

int
main (void) {
  int i = 1;
}],[g_can_inline=yes],[g_can_inline=no])
AC_MSG_RESULT($g_can_inline)

707 708 709 710 711 712 713 714 715 716 717 718 719 720 721
dnl *** check for working do while(0) macros ***
AC_CACHE_CHECK([for working do while(0) macros], g_support_dowhile_macros, [
	AC_TRY_COMPILE([],[
	#define STMT_START do
	#define STMT_END while(0)
	#define STMT_TEST STMT_START { i = 0; } STMT_END
	int main(void) { int i = 1; STMT_TEST; return i; }],
	[g_support_dowhile_macros=yes],
	[g_support_dowhile_macros=no],
	[g_support_dowhile_macros=yes])
])
if test x$g_support_dowhile_macros = xyes; then
  AC_DEFINE(HAVE_DOWHILE_MACROS, 1, [define for working do while(0) macros])
fi

722
# check for flavours of varargs macros
723
AC_MSG_CHECKING(for ISO C99 varargs macros in C)
724 725 726 727
AC_TRY_COMPILE([],[
int a(int p1, int p2, int p3);
#define call_a(...) a(1,__VA_ARGS__)
call_a(2,3);
728 729 730 731
],g_have_iso_c_varargs=yes,g_have_iso_c_varargs=no)
AC_MSG_RESULT($g_have_iso_c_varargs)

AC_MSG_CHECKING(for ISO C99 varargs macros in C++)
732
if test "$CXX" = ""; then
733 734 735 736 737 738 739 740 741 742 743 744
dnl No C++ compiler
  g_have_iso_cxx_varargs=no
else
  AC_LANG_CPLUSPLUS
  AC_TRY_COMPILE([],[
int a(int p1, int p2, int p3);
#define call_a(...) a(1,__VA_ARGS__)
call_a(2,3);
],g_have_iso_cxx_varargs=yes,g_have_iso_cxx_varargs=no)
  AC_LANG_C
fi
AC_MSG_RESULT($g_have_iso_cxx_varargs)
745 746 747 748 749 750 751 752 753

AC_MSG_CHECKING(for GNUC varargs macros)
AC_TRY_COMPILE([],[
int a(int p1, int p2, int p3);
#define call_a(params...) a(1,params)
call_a(2,3);
],g_have_gnuc_varargs=yes,g_have_gnuc_varargs=no)
AC_MSG_RESULT($g_have_gnuc_varargs)

754 755 756 757 758
# check for GNUC visibility support
AC_MSG_CHECKING(for GNUC visibility attribute)
GLIB_CHECK_COMPILE_WARNINGS([
void
__attribute__ ((visibility ("hidden")))
759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774
     f_hidden (void)
{
}
void
__attribute__ ((visibility ("internal")))
     f_internal (void)
{
}
void
__attribute__ ((visibility ("protected")))
     f_protected (void)
{
}
void
__attribute__ ((visibility ("default")))
     f_default (void)
775 776 777 778
{
}
int main (int argc, char **argv)
{
779 780 781 782
	f_hidden();
	f_internal();
	f_protected();
	f_default();
783 784 785 786
	return 0;
}
],g_have_gnuc_visibility=yes,g_have_gnuc_visibility=no)
AC_MSG_RESULT($g_have_gnuc_visibility)
787
AM_CONDITIONAL(HAVE_GNUC_VISIBILITY, [test x$g_have_gnuc_visibility = xyes])
788

789 790 791
# check for bytesex stuff
AC_C_BIGENDIAN

Tim Janik's avatar
Tim Janik committed
792
# check for header files
793 794 795
AC_CHECK_HEADERS([dirent.h float.h limits.h pwd.h sys/param.h sys/poll.h])
AC_CHECK_HEADERS([sys/time.h sys/times.h sys/wait.h unistd.h values.h])
AC_CHECK_HEADERS([sys/select.h sys/types.h stdint.h sched.h malloc.h])
796

797 798 799 800 801 802
# Checks for libcharset
jm_LANGINFO_CODESET
jm_GLIBC21
AC_CHECK_HEADERS([stddef.h stdlib.h string.h])
AC_CHECK_FUNCS(setlocale)

803
# check additional type sizes
804
AC_CHECK_SIZEOF(size_t)
805

806 807 808
dnl Try to figure out whether gsize, gssize should be long or int
AC_MSG_CHECKING([for the appropriate definition for size_t])

809
case $ac_cv_sizeof_size_t in
810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826
  $ac_cv_sizeof_short) 
      glib_size_type=short
      ;;
  $ac_cv_sizeof_int) 
      glib_size_type=int
      ;;
  $ac_cv_sizeof_long) 
      glib_size_type=long
      ;;
  *)  AC_MSG_ERROR([No type matching size_t in size])
      ;;
esac

dnl If int/long are the same size, we see which one produces
dnl warnings when used in the location as size_t. (This matters
dnl on AIX with xlc)
dnl
827 828
if test $ac_cv_sizeof_size_t = $ac_cv_sizeof_int &&
   test $ac_cv_sizeof_size_t = $ac_cv_sizeof_long ; then
829
  GLIB_CHECK_COMPILE_WARNINGS([
830
#if defined(_AIX) && !defined(__GNUC__)
831 832
#pragma options langlvl=stdc89
#endif
833 834 835 836 837 838 839 840 841
#include <stddef.h> 
int main ()
{
  size_t s = 1;
  unsigned int *size_int = &s;
  return (int)*size_int;
}
    ],glib_size_type=int,
      [GLIB_CHECK_COMPILE_WARNINGS([
Matthias Clasen's avatar
Matthias Clasen committed
842
#if defined(_AIX) && !defined(__GNUC__)
843 844
#pragma options langlvl=stdc89
#endif
845 846 847 848 849 850 851 852 853 854 855 856
#include <stddef.h> 
int main ()
{
   size_t s = 1;
   unsigned long *size_long = &s;
   return (int)*size_long;
}
        ],glib_size_type=long)])
fi

AC_MSG_RESULT(unsigned $glib_size_type)

857
# Check for some functions
858
AC_CHECK_FUNCS(lstat strerror strsignal memmove vsnprintf stpcpy strcasecmp strncasecmp poll getcwd vasprintf setenv unsetenv getc_unlocked readlink symlink fdwalk)
859 860 861
# Check for high-resolution sleep functions
AC_CHECK_FUNCS(nanosleep nsleep)

862
AC_CHECK_HEADERS(crt_externs.h)
863
AC_CHECK_FUNCS(_NSGetEnviron)
864

865
AC_FUNC_VSNPRINTF_C99
866 867 868
AC_FUNC_PRINTF_UNIX98

#
869
# Check whether to use an included printf
870 871
#

872 873 874
AC_ARG_ENABLE(included-printf,
              [AC_HELP_STRING([--enable-included-printf],
                              [use included printf [default=auto]])],
875
              enable_included_printf="$enableval")
876

877 878 879
need_included_printf=no
if test "x$enable_included_printf" = "xyes" ; then
  need_included_printf=yes
880 881
fi
if test "$ac_cv_func_vsnprintf_c99" != "yes" ; then
882
  need_included_printf=yes
883 884
fi
if test "$ac_cv_func_printf_unix98" != "yes" ; then
885
  need_included_printf=yes
886
fi
887 888
if test "x$ac_cv_sizeof_long_long" = "x8" &&
   test -z "$glib_cv_long_long_format" ; then
889
  need_included_printf=yes
890 891
fi

892 893
if test "x$enable_included_printf" = "xno" && 
   test "x$need_included_printf" = "xyes" ; then
894
  AC_MSG_ERROR([
895
*** Your C library's printf doesn't appear to have the features that
896
*** GLib needs, but you specified --enable-included-printf=no.])
897 898
fi

899
enable_included_printf=$need_included_printf
900

901 902
AM_CONDITIONAL(HAVE_GOOD_PRINTF, test "$enable_included_printf" != "yes")
if test "$enable_included_printf" != "yes" ; then 
903
  AC_DEFINE(HAVE_GOOD_PRINTF,1,[define to use system printf])
904
else
905 906 907
  if test -z "$glib_cv_long_long_format" ; then
    glib_cv_long_long_format="ll"
  fi
908 909
  AC_DEFINE(HAVE_VASPRINTF,1)
fi
910 911 912 913 914 915 916 917 918 919

# Checks needed for gnulib vasnprintf
bh_C_SIGNED
jm_AC_TYPE_LONG_LONG
gt_TYPE_LONGDOUBLE
gt_TYPE_WCHAR_T
gt_TYPE_WINT_T
AC_TYPE_SIZE_T
AC_CHECK_TYPES(ptrdiff_t)
jm_AC_TYPE_INTMAX_T
Matthias Clasen's avatar
Matthias Clasen committed
920
AC_CHECK_FUNCS([snprintf wcslen])
921
AC_FUNC_SNPRINTF_C99
922

923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942
# Check if bcopy can be used for overlapping copies, if memmove isn't found.
# The check is borrowed from the PERL Configure script.
if test "$ac_cv_func_memmove" != "yes"; then
  AC_CACHE_CHECK(whether bcopy can handle overlapping copies,
    glib_cv_working_bcopy,[AC_TRY_RUN([
      int main() {
        char buf[128], abc[128], *b;
        int len, off, align;
        bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
        for (align = 7; align >= 0; align--) {
          for (len = 36; len; len--) {
            b = buf+align; bcopy(abc, b, len);
            for (off = 1; off <= len; off++) {
              bcopy(b, b+off, len); bcopy(b+off, b, len);
                if (bcmp(b, abc, len)) return(1);
            }
          }
        }
        return(0);
      }],glib_cv_working_bcopy=yes,glib_cv_working_bcopy=no)])
943 944

  GLIB_ASSERT_SET(glib_cv_working_bcopy)
945
  if test "$glib_cv_working_bcopy" = "yes"; then
946
    AC_DEFINE(HAVE_WORKING_BCOPY,1,[Have a working bcopy])
947 948 949 950 951 952 953 954 955 956 957
  fi
fi

# Check for sys_errlist
AC_MSG_CHECKING(for sys_errlist)
AC_TRY_LINK(, [
extern char *sys_errlist[];
extern int sys_nerr;
sys_errlist[sys_nerr-1][0] = 0;
], glib_ok=yes, glib_ok=no)
AC_MSG_RESULT($glib_ok)
958
if test "$glib_ok" = "no"; then
959
    AC_DEFINE(NO_SYS_ERRLIST,1,[global 'sys_errlist' not found])
960 961 962 963 964 965
fi

# Check for sys_siglist
AC_MSG_CHECKING(for sys_siglist)
AC_TRY_LINK(, [
extern char *sys_siglist[];
966
exit (sys_siglist[0]);
967 968
], glib_ok=yes, glib_ok=no)
AC_MSG_RESULT($glib_ok)
969
if test "$glib_ok" = "no"; then
970
    AC_DEFINE(NO_SYS_SIGLIST,1,[global 'sys_siglist' not found])
971 972 973 974 975 976 977 978
fi

# Check for sys_siglist decl (see Tue Jan 19 00:44:24 1999 in changelog)
AC_MSG_CHECKING(for sys_siglist declaration)
AC_TRY_COMPILE([#include <signal.h>], [
strlen (sys_siglist[0]);
], glib_ok=yes, glib_ok=no)
AC_MSG_RESULT($glib_ok)
979
if test "$glib_ok" = "no"; then
980
    AC_DEFINE(NO_SYS_SIGLIST_DECL,1,[global 'sys_siglist' not declared])
981 982 983 984 985 986
fi

# Check if <sys/select.h> needs to be included for fd_set
AC_MSG_CHECKING([for fd_set])
AC_TRY_COMPILE([#include <sys/types.h>],
        [fd_set readMask, writeMask;], gtk_ok=yes, gtk_ok=no)
987
if test "$gtk_ok" = "yes"; then
988 989
    AC_MSG_RESULT([yes, found in sys/types.h])
else
990
    AC_EGREP_HEADER(fd_set, sys/select.h, gtk_ok=yes)
991
    if test "$gtk_ok" = "yes"; then
992 993
	# *** FIXME: give it a different name
        AC_DEFINE(HAVE_SYS_SELECT_H,1,[found fd_set in sys/select.h])
994 995
        AC_MSG_RESULT([yes, found in sys/select.h])
    else
996
	AC_DEFINE(NO_FD_SET,1,[didn't find fd_set])
997 998 999 1000 1001
	AC_MSG_RESULT(no)
    fi
fi

dnl *** check for sane realloc() ***
1002
AC_CACHE_CHECK([whether realloc (NULL,) will work],glib_cv_sane_realloc,[
1003
        AC_TRY_RUN([#include <stdlib.h>
1004 1005 1006
        int main() {
          return realloc (0, sizeof (int)) == 0;
        }],
1007 1008
        [glib_cv_sane_realloc=yes],
        [glib_cv_sane_realloc=no],
1009
	[glib_cv_sane_realloc=yes])
1010
])
1011
if test x$glib_cv_sane_realloc = xyes; then
1012
  AC_DEFINE(REALLOC_0_WORKS,1,[whether realloc (NULL,) works])
1013
fi
1014

1015
dnl Check for nl_langinfo and CODESET
1016 1017 1018 1019 1020 1021 1022 1023
AC_CACHE_CHECK([for nl_langinfo (CODESET)],glib_cv_langinfo_codeset,[
        AC_TRY_COMPILE([#include <langinfo.h>],
                [char *codeset = nl_langinfo (CODESET);],
                [glib_cv_langinfo_codeset=yes],
                [glib_cv_langinfo_codeset=no])])
if test x$glib_cv_langinfo_codeset = xyes; then
  AC_DEFINE(HAVE_CODESET,1,[Have nl_langinfo (CODESET)])
fi
1024

1025 1026 1027 1028 1029 1030 1031 1032 1033
dnl ****************************************
dnl *** posix_memalign                   ***
dnl ****************************************
AC_MSG_CHECKING(for a compliant posix_memalign() implementation)
AC_CACHE_VAL(glib_cv_compliant_posix_memalign,[
    glib_cv_compliant_posix_memalign=0
    if test "$ac_cv_func_posix_memalign" = "yes" ; then
	AC_TRY_RUN([
                #define _XOPEN_SOURCE 600
1034 1035
                #include <stdlib.h> /* posix_memalign() should be defined here */
                /* some systems break if #include <malloc.h> used */
1036 1037 1038 1039
		static void test_memalign (size_t boundary, size_t size) {
		    void *mem = 0;
		    if (posix_memalign (&mem, boundary, size) != 0 || !mem)
			exit (1);
1040 1041
                    else
                      free (mem);
1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067
		}
		int main() {
		    test_memalign (  128,   128 - 2 * sizeof (void*));
		    test_memalign (  256,   256 - 2 * sizeof (void*));
		    test_memalign (  512,   512 - 2 * sizeof (void*));
		    test_memalign ( 1024,  1024 - 2 * sizeof (void*));
		    test_memalign ( 2048,  2048 - 2 * sizeof (void*));
		    test_memalign ( 4096,  4096 - 2 * sizeof (void*));
		    test_memalign ( 8192,  8192 - 2 * sizeof (void*));
		    test_memalign (16384, 16384 - 2 * sizeof (void*));
		    test_memalign (32768, 32768 - 2 * sizeof (void*));
		    exit (0); /* success */
		}
		],
	    [glib_cv_compliant_posix_memalign=1], [], [:])
      :
    fi
    ])
if test "$glib_cv_compliant_posix_memalign" = "1"; then
    AC_MSG_RESULT(yes)
    AC_DEFINE(POSIX_MEMALIGN_WITH_COMPLIANT_ALLOCS, 1, [define if posix_memalign() can allocate any size])
else
    AC_MSG_RESULT(no)
fi


1068 1069 1070 1071
dnl ****************************************
dnl *** strlcpy/strlcat                  ***
dnl ****************************************
# Check for strlcpy
1072 1073
AC_CACHE_CHECK([for OpenBSD strlcpy/strlcat],glib_cv_have_strlcpy,[
AC_TRY_RUN([#include <stdlib.h>
1074 1075
#include <string.h>
int main() {
1076
  char p[10];
1077 1078
  (void) strlcpy (p, "hi", 10);
  if (strlcat (p, "bye", 0) != 3) 
1079
    return 1;
1080
  return 0;
1081 1082 1083 1084
}], glib_cv_have_strlcpy=yes, 
    glib_cv_have_strlcpy=no,
    glib_cv_have_strlcpy=no)])
if test "$glib_cv_have_strlcpy" = "yes"; then
1085
    AC_DEFINE(HAVE_STRLCPY,1,[Have functions strlcpy and strlcat])
1086
fi
1087
  
1088 1089 1090 1091 1092 1093

dnl **********************
dnl *** va_copy checks ***
dnl **********************
dnl we currently check for all three va_copy possibilities, so we get
dnl all results in config.log for bug reports.
1094
AC_CACHE_CHECK([for an implementation of va_copy()],glib_cv_va_copy,[
1095
	AC_LINK_IFELSE([#include <stdarg.h>
1096
#include <stdlib.h>
1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108
	void f (int i, ...) {
	va_list args1, args2;
	va_start (args1, i);
	va_copy (args2, args1);
	if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
	  exit (1);
	va_end (args1); va_end (args2);
	}
	int main() {
	  f (0, 42);
	  return 0;
	}],
1109
	[glib_cv_va_copy=yes],
1110
	[glib_cv_va_copy=no])
1111
])
1112
AC_CACHE_CHECK([for an implementation of __va_copy()],glib_cv___va_copy,[
1113
	AC_LINK_IFELSE([#include <stdarg.h>
1114
#include <stdlib.h>
1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126
	void f (int i, ...) {
	va_list args1, args2;
	va_start (args1, i);
	__va_copy (args2, args1);
	if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
	  exit (1);
	va_end (args1); va_end (args2);
	}
	int main() {
	  f (0, 42);
	  return 0;
	}],
1127
	[glib_cv___va_copy=yes],
1128
	[glib_cv___va_copy=no])
1129
])
1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142

if test "x$glib_cv_va_copy" = "xyes"; then
  g_va_copy_func=va_copy
else if test "x$glib_cv___va_copy" = "xyes"; then
  g_va_copy_func=__va_copy
fi
fi

if test -n "$g_va_copy_func"; then
  AC_DEFINE_UNQUOTED(G_VA_COPY,$g_va_copy_func,[A 'va_copy' style function])
fi

AC_CACHE_CHECK([whether va_lists can be copied by value],glib_cv_va_val_copy,[
1143
	AC_TRY_RUN([#include <stdarg.h>
1144
#include <stdlib.h> 
1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156
	void f (int i, ...) {
	va_list args1, args2;
	va_start (args1, i);
	args2 = args1;
	if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
	  exit (1);
	va_end (args1); va_end (args2);
	}
	int main() {
	  f (0, 42);
	  return 0;
	}],
1157 1158
	[glib_cv_va_val_copy=yes],
	[glib_cv_va_val_copy=no],
1159
	[glib_cv_va_val_copy=yes])
1160
])
1161

1162
if test "x$glib_cv_va_val_copy" = "xno"; then
1163
  AC_DEFINE(G_VA_COPY_AS_ARRAY,1, ['va_lists' cannot be copies as values])
1164 1165 1166 1167 1168 1169 1170 1171
fi

dnl ***********************
dnl *** g_module checks ***
dnl ***********************
G_MODULE_LIBS=
G_MODULE_LIBS_EXTRA=
G_MODULE_PLUGIN_LIBS=
1172 1173 1174 1175
if test x"$glib_native_win32" = xyes; then
  dnl No use for this on Win32
  G_MODULE_LDFLAGS=
else
1176
  export SED
1177 1178
  G_MODULE_LDFLAGS=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
fi
1179 1180
dnl G_MODULE_IMPL= don't reset, so cmd-line can override
G_MODULE_NEED_USCORE=0
Tim Janik's avatar
Tim Janik committed
1181
G_MODULE_BROKEN_RTLD_GLOBAL=0
1182
G_MODULE_HAVE_DLERROR=0
1183 1184 1185 1186 1187 1188
dnl *** force native WIN32 shared lib loader 
if test -z "$G_MODULE_IMPL"; then
  case "$host" in
  *-*-mingw*|*-*-cygwin*) G_MODULE_IMPL=G_MODULE_IMPL_WIN32 ;;
  esac
fi
1189 1190 1191 1192 1193 1194 1195
dnl *** force native AIX library loader
dnl *** dlopen() filepath must be of the form /path/libname.a(libname.so)
if test -z "$G_MODULE_IMPL"; then
  case "$host" in
  *-*-aix*) G_MODULE_IMPL=G_MODULE_IMPL_AR ;;
  esac
fi
1196 1197 1198
dnl *** dlopen() and dlsym() in system libraries
if test -z "$G_MODULE_IMPL"; then
	AC_CHECK_FUNC(dlopen,
1199 1200 1201
		      [AC_CHECK_FUNC(dlsym,
			             [G_MODULE_IMPL=G_MODULE_IMPL_DL],[])],
		      [])
1202 1203
fi
dnl *** load_image (BeOS)
Raja R Harinath's avatar
Raja R Harinath committed
1204
if test -z "$G_MODULE_IMPL" && test "x$glib_native_beos" = "xyes"; then
1205
  AC_CHECK_LIB(root, load_image,
1206
      [G_MODULE_LIBS="-lbe -lroot -lglib-2.0 "
1207 1208
      G_MODULE_LIBS_EXTRA="-L\$(top_builddir_full)/.libs"
      G_MODULE_PLUGIN_LIBS="-L\$(top_builddir_full)/gmodule/.libs -lgmodule"
1209 1210
      G_MODULE_IMPL=G_MODULE_IMPL_BEOS],
      [])
1211
fi   
Owen Taylor's avatar
Owen Taylor committed
1212 1213 1214 1215 1216 1217 1218
dnl *** NSLinkModule (dyld) in system libraries (Darwin)
if test -z "$G_MODULE_IMPL"; then
 	AC_CHECK_FUNC(NSLinkModule,
		      [G_MODULE_IMPL=G_MODULE_IMPL_DYLD
		       G_MODULE_NEED_USCORE=1],
		      [])
fi
1219
dnl *** dlopen() and dlsym() in libdl
1220 1221
if test -z "$G_MODULE_IMPL"; then
	AC_CHECK_LIB(dl, dlopen,
1222 1223 1224 1225
		     [AC_CHECK_LIB(dl, dlsym,
			           [G_MODULE_LIBS=-ldl
		                   G_MODULE_IMPL=G_MODULE_IMPL_DL],[])],
		     [])
1226 1227 1228 1229
fi
dnl *** shl_load() in libdld (HP-UX)
if test -z "$G_MODULE_IMPL"; then
	AC_CHECK_LIB(dld, shl_load,
1230 1231 1232
		[G_MODULE_LIBS=-ldld
		G_MODULE_IMPL=G_MODULE_IMPL_DLD],
		[])
1233 1234 1235 1236 1237
fi
dnl *** additional checks for G_MODULE_IMPL_DL
if test "$G_MODULE_IMPL" = "G_MODULE_IMPL_DL"; then
	LIBS_orig="$LIBS"
	LDFLAGS_orig="$LDFLAGS"
Owen Taylor's avatar
Owen Taylor committed
1238
	LIBS="$G_MODULE_LIBS $LIBS"
1239
	LDFLAGS="$LDFLAGS $G_MODULE_LDFLAGS"
1240
dnl *** check for OSF1/5.0 RTLD_GLOBAL brokenness
1241 1242 1243
	echo "void glib_plugin_test(void) { }" > plugin.c
	${SHELL} ./libtool --mode=compile ${CC} -shared \
		-export-dynamic -o plugin.o plugin.c 2>&1 >/dev/null
1244 1245 1246
	AC_CACHE_CHECK([for RTLD_GLOBAL brokenness],
		glib_cv_rtldglobal_broken,[
		AC_TRY_RUN([
1247 1248 1249 1250 1251 1252 1253
#include <dlfcn.h>
#ifndef RTLD_GLOBAL
#  define RTLD_GLOBAL 0
#endif
#ifndef RTLD_LAZY
#  define RTLD_LAZY 0
#endif