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