• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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