*** empty log message ***
[platform/upstream/glib.git] / configure.in
1 dnl ***********************************
2 dnl *** include special GLib macros ***
3 dnl ***********************************
4 builtin(include, acglib.m4)dnl
5 builtin(include, glib/libcharset/codeset.m4)dnl
6 builtin(include, glib/libcharset/glibc21.m4)dnl
7
8 # require autoconf 2.52
9 AC_PREREQ(2.52)
10
11 # Process this file with autoconf to produce a configure script.
12 AC_INIT(glib/glib.h)
13
14 # Save this value here, since automake will set cflags later
15 cflags_set=${CFLAGS+set}
16
17 # we rewrite this file
18 rm -f glibconfig-sysdefs.h
19
20 GLIB_AC_DIVERT_BEFORE_HELP([
21 #
22 # The following version number definitions apply to GLib, GModule, GObject 
23 # and GThread as a whole, so if changes occoured in any of them, they are all
24 # treated with the same interface and binary age.
25 #
26 # Making releases:
27 #   GLIB_MICRO_VERSION += 1;
28 #   GLIB_INTERFACE_AGE += 1;
29 #   GLIB_BINARY_AGE += 1;
30 # if any functions have been added, set GLIB_INTERFACE_AGE to 0.
31 # if backwards compatibility has been broken,
32 # set GLIB_BINARY_AGE _and_ GLIB_INTERFACE_AGE to 0.
33 #
34 GLIB_MAJOR_VERSION=1
35 GLIB_MINOR_VERSION=3
36 GLIB_MICRO_VERSION=15
37 GLIB_INTERFACE_AGE=0
38 GLIB_BINARY_AGE=0
39 GLIB_VERSION=$GLIB_MAJOR_VERSION.$GLIB_MINOR_VERSION.$GLIB_MICRO_VERSION
40 ])dnl
41
42 AC_SUBST(GLIB_MAJOR_VERSION)
43 AC_SUBST(GLIB_MINOR_VERSION)
44 AC_SUBST(GLIB_MICRO_VERSION)
45 AC_SUBST(GLIB_VERSION)
46 AC_SUBST(GLIB_INTERFACE_AGE)
47 AC_SUBST(GLIB_BINARY_AGE)
48
49 # libtool versioning
50 LT_RELEASE=$GLIB_MAJOR_VERSION.$GLIB_MINOR_VERSION
51 LT_CURRENT=`expr $GLIB_MICRO_VERSION - $GLIB_INTERFACE_AGE`
52 LT_REVISION=$GLIB_INTERFACE_AGE
53 LT_AGE=`expr $GLIB_BINARY_AGE - $GLIB_INTERFACE_AGE`
54 LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
55 AC_SUBST(LT_RELEASE)
56 AC_SUBST(LT_CURRENT)
57 AC_SUBST(LT_REVISION)
58 AC_SUBST(LT_AGE)
59 AC_SUBST(LT_CURRENT_MINUS_AGE)
60
61 VERSION=$GLIB_VERSION
62 PACKAGE=glib
63
64 AM_INIT_AUTOMAKE($PACKAGE, $VERSION, no-define)
65
66 # Specify a configuration file
67 AM_CONFIG_HEADER(config.h)
68
69 AC_DEFINE_UNQUOTED(GLIB_MAJOR_VERSION, $GLIB_MAJOR_VERSION,
70                    [Define to the GLIB major version])
71 AC_DEFINE_UNQUOTED(GLIB_MINOR_VERSION, $GLIB_MINOR_VERSION,
72                    [Define to the GLIB minor version])
73 AC_DEFINE_UNQUOTED(GLIB_MICRO_VERSION, $GLIB_MICRO_VERSION,
74                    [Define to the GLIB micro version])
75 AC_DEFINE_UNQUOTED(GLIB_INTERFACE_AGE, $GLIB_INTERFACE_AGE,
76                    [Define to the GLIB interface age])
77 AC_DEFINE_UNQUOTED(GLIB_BINARY_AGE, $GLIB_BINARY_AGE,
78                    [Define to the GLIB binary age])
79
80 dnl Initialize maintainer mode
81 AM_MAINTAINER_MODE
82
83 AC_CANONICAL_HOST
84
85 AC_MSG_CHECKING(for the BeOS)
86 case $host in
87   *-*-beos*)
88     glib_native_beos="yes"
89     ;;
90   *)
91     glib_native_beos="no"
92     ;;
93 esac
94 AC_MSG_RESULT([$glib_native_beos])
95
96 dnl
97
98 AC_MSG_CHECKING([for Win32])
99 case "$host" in
100   *-*-mingw*)
101     glib_native_win32=yes
102     G_LIB_WIN32_RESOURCE=glib-win32res.lo
103     G_MODULE_WIN32_RESOURCE=gmodule-win32res.lo
104     G_OBJECT_WIN32_RESOURCE=gobject-win32res.lo
105     G_THREAD_WIN32_RESOURCE=gthread-win32res.lo
106     GLIB_DEF=glib.def
107     GMODULE_DEF=gmodule.def
108     GOBJECT_DEF=gobject.def
109     GTHREAD_DEF=gthread.def
110     TESTGMODULE_EXP=testgmodule.exp
111     ;;
112   *)
113     glib_native_win32=no
114     G_LIB_WIN32_RESOURCE=
115     G_MODULE_WIN32_RESOURCE=
116     G_OBJECT_WIN32_RESOURCE=
117     G_THREAD_WIN32_RESOURCE=
118     GLIB_DEF=
119     GMODULE_DEF=
120     GOBJECT_DEF=
121     GTHREAD_DEF=
122     TESTGMODULE_EXP=
123     ;;
124 esac
125 AC_MSG_RESULT([$glib_native_win32])
126 AM_CONDITIONAL(OS_WIN32, test "$glib_native_win32" = "yes")
127 AC_SUBST(G_LIB_WIN32_RESOURCE)
128 AC_SUBST(G_MODULE_WIN32_RESOURCE)
129 AC_SUBST(G_OBJECT_WIN32_RESOURCE)
130 AC_SUBST(G_THREAD_WIN32_RESOURCE)
131 AC_SUBST(GLIB_DEF)
132 AC_SUBST(GMODULE_DEF)
133 AC_SUBST(GOBJECT_DEF)
134 AC_SUBST(GTHREAD_DEF)
135 AC_SUBST(TESTGMODULE_EXP)
136
137 if test "$glib_native_win32" = "yes"; then
138   AC_CHECK_PROG(ms_librarian, lib.exe, yes, no)
139 fi
140 AM_CONDITIONAL(MS_LIB_AVAILABLE, test x$ms_librarian = xyes)
141
142 GLIB_AC_DIVERT_BEFORE_HELP([
143 # figure debugging default, prior to $ac_help setup
144 case $GLIB_MINOR_VERSION in
145 *[[13579]]) debug_default=yes ;;
146 *)          debug_default=minimum ;;
147 esac[]dnl
148 ])
149
150 dnl declare --enable-* args and collect ac_help strings
151 AC_ARG_ENABLE(debug, [  --enable-debug=[no/minimum/yes] turn on debugging [default=$debug_default]],,enable_debug=$debug_default)
152 AC_ARG_ENABLE(gc_friendly, [  --enable-gc-friendly    turn on garbage collector friendliness [default=no]],,enable_gc_friendly=no)
153 AC_ARG_ENABLE(mem_pools, [  --disable-mem-pools     disable all glib memory pools],,disable_mem_pools=no)
154 AC_ARG_ENABLE(ansi, [  --enable-ansi           turn on strict ansi [default=no]],
155                     , enable_ansi=no)
156 AC_ARG_ENABLE(threads, [  --enable-threads        turn on basic thread support [default=yes]
157                           ([=no] will override --with-threads)],,enable_threads=yes)
158 AC_ARG_ENABLE(rebuilds, [  --disable-rebuilds      disable all source autogeneration rules],,enable_rebuilds=yes)
159
160 if test "x$enable_threads" != "xyes"; then
161   enable_threads=no
162 fi
163
164 AC_DEFINE_UNQUOTED(G_COMPILED_WITH_DEBUGGING, "${enable_debug}",
165         [Whether glib was compiled with debugging enabled])
166
167 AC_MSG_CHECKING(whether to enable garbage collector friendliness)
168 if test "x$enable_gc_friendly" = "xyes"; then
169   AC_DEFINE(ENABLE_GC_FRIENDLY, 1, [Whether to enable GC friendliness])
170   AC_SUBST(ENABLE_GC_FRIENDLY)
171   AC_MSG_RESULT(yes)
172 else
173   AC_MSG_RESULT(no)
174 fi
175
176 AC_MSG_CHECKING(whether to disable memory pools)
177 if test "x$disable_mem_pools" = "xno"; then
178   AC_MSG_RESULT(no)
179 else
180   AC_DEFINE(DISABLE_MEM_POOLS, 1, [Whether to disable memory pools])
181   AC_SUBST(DISABLE_MEM_POOLS)
182   AC_MSG_RESULT(yes)
183 fi
184
185 dnl Checks for programs.
186 AC_PROG_CC
187
188 dnl Check for a working C++ compiler, but do not bail out, if none is found.
189 AC_CHECK_PROGS(CXX, $CCC c++ g++ gcc CC cxx cc++ cl, gcc)
190 AC_LANG_SAVE
191 AC_LANG_CPLUSPLUS
192 AC_TRY_COMPILE(,[class a { int b; } c;], ,CXX=)
193 AM_CONDITIONAL(HAVE_CXX, test "$CXX" != "")
194 AC_LANG_RESTORE
195
196 AM_PROG_CC_STDC
197 AC_PROG_INSTALL
198
199 AC_SYS_LARGEFILE
200
201 #
202 # Find pkg-config
203 #
204 AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
205 if test x$PKG_CONFIG = xno ; then
206   AC_MSG_ERROR([*** pkg-config not found. See http://www.freedesktop.org/software/pkgconfig/])
207 fi
208
209 if pkg-config --atleast-pkgconfig-version 0.5 ; then
210   :
211 else
212   AC_MSG_ERROR([*** pkg-config too old; version 0.5 or better required.])
213 fi
214
215 if test "x$enable_debug" = "xyes"; then
216   if test x$cflags_set != xset ; then
217       case " $CFLAGS " in
218       *[[\ \    ]]-g[[\ \       ]]*) ;;
219       *) CFLAGS="$CFLAGS -g" ;;
220       esac
221   fi
222         
223   GLIB_DEBUG_FLAGS="-DG_ENABLE_DEBUG"
224 else
225   if test "x$enable_debug" = "xno"; then
226     GLIB_DEBUG_FLAGS="-DG_DISABLE_ASSERT -DG_DISABLE_CHECKS"
227   fi
228 fi
229
230 # Ensure -fnative-struct is used when compiling for Win32
231 if test "x$glib_native_win32" = "xyes"; then
232   if test "x$GCC" = "xyes"; then
233     case " $CFLAGS " in
234     *[[\ \      ]]-fnative-struct[[\ \  ]]*) ;;
235     *) CFLAGS="$CFLAGS -fnative-struct" ;;
236     esac
237   fi
238 fi
239
240 AC_CYGWIN
241 AC_EXEEXT
242
243 # define a MAINT-like variable REBUILD which is set if Perl
244 # and awk are found, so autogenerated sources can be rebuilt
245 AC_PROG_AWK
246 AC_CHECK_PROGS(PERL, perl5 perl)
247 # We would like indent, but don't require it.
248 AC_CHECK_PROG(INDENT, indent, indent)
249 REBUILD=\#
250 if test "x$enable_rebuilds" = "xyes" && \
251      test -n "$PERL" && \
252      $PERL -e 'exit !($] >= 5.002)' > /dev/null 2>&1 && \
253      test -n "$AWK" ; then
254   REBUILD=
255 fi
256 AC_SUBST(REBUILD)
257
258 # Need full path to Perl for glib-mkenums
259 #
260 if test "x$PERL" != x ; then
261   AC_PATH_PROG(PERL_PATH, $PERL)
262 else
263   PERL_PATH="/usr/bin/env perl"
264 fi
265 AC_SUBST(PERL_PATH)
266
267 dnl
268 dnl gettext support
269 dnl
270
271 ALL_LINGUAS="az ca de el es eu fr gl ja ko nl nn no pl pt ro ru sk sl sv ta tr uk zh_CN zh_TW"
272 AM_GLIB_GNU_GETTEXT
273
274 if test "$gt_cv_func_dgettext_libc" = "yes" || test "$gt_cv_func_dgettext_libintl" = "yes"; then
275   :
276 else
277   AC_MSG_ERROR([
278 *** You must have either have gettext support in your C library, or use the 
279 *** GNU gettext library. (http://www.gnu.org/software/gettext/gettext.html
280 ])
281 fi
282
283 LIBS="$LIBS $INTLLIBS"
284
285 GETTEXT_PACKAGE=glib20
286 AC_SUBST(GETTEXT_PACKAGE)
287 AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE")
288
289 # AM_GLIB_GNU_GETTEXT above substs $DATADIRNAME
290 # this is the directory where the *.{mo,gmo} files are installed
291 GLIB_LOCALE_DIR="${prefix}/${DATADIRNAME}/locale"
292 AC_DEFINE_UNQUOTED(GLIB_LOCALE_DIR,"$GLIB_LOCALE_DIR")
293
294 dnl Initialize libtool
295 AC_LIBTOOL_WIN32_DLL
296 AM_PROG_LIBTOOL
297
298 if test "x$GCC" = "xyes"; then
299   case " $CFLAGS " in
300   *[[\ \        ]]-Wall[[\ \    ]]*) ;;
301   *) CFLAGS="$CFLAGS -Wall" ;;
302   esac
303
304   if test "x$enable_ansi" = "xyes"; then
305     case " $CFLAGS " in
306     *[[\ \      ]]-ansi[[\ \    ]]*) ;;
307     *) CFLAGS="$CFLAGS -ansi" ;;
308     esac
309
310     case " $CFLAGS " in
311     *[[\ \      ]]-pedantic[[\ \        ]]*) ;;
312     *) CFLAGS="$CFLAGS -pedantic" ;;
313     esac
314   fi
315 fi
316
317 dnl DU4 native cc currently needs -std1 for ANSI mode (instead of K&R)
318 AC_MSG_CHECKING([for extra flags to get ANSI library prototypes])
319 glib_save_LIBS=$LIBS
320 LIBS="$LIBS -lm"
321 AC_TRY_RUN([#include <math.h>
322              int main (void) { return (log(1) != log(1.)); }],
323      AC_MSG_RESULT(none needed),
324      glib_save_CFLAGS=$CFLAGS
325      CFLAGS="$CFLAGS -std1"
326      AC_TRY_RUN([#include <math.h>
327                  int main (void) { return (log(1) != log(1.)); }],
328          AC_MSG_RESULT(-std1),
329          AC_MSG_RESULT()
330          CFLAGS=$glib_save_CFLAGS
331          AC_MSG_WARN(
332                 [No ANSI prototypes found in library. (-std1 didn't work.)])
333      )
334 )
335 LIBS=$glib_save_LIBS
336
337 dnl NeXTStep cc seems to need this
338 AC_MSG_CHECKING([for extra flags for POSIX compliance])
339 AC_TRY_COMPILE([#include <dirent.h>], [DIR *dir;],
340   AC_MSG_RESULT(none needed),
341   glib_save_CFLAGS=$CFLAGS
342   CFLAGS="$CFLAGS -posix"
343   AC_TRY_COMPILE([#include <dirent.h>], [DIR *dir;],
344     AC_MSG_RESULT(-posix),
345     AC_MSG_RESULT()
346     CFLAGS=$glib_save_CFLAGS
347     AC_MSG_WARN([Could not determine POSIX flag. (-posix didn't work.)])))
348
349 # Checks for header files.
350 AC_HEADER_STDC
351
352 # Checks for library functions.
353 AC_FUNC_VPRINTF
354
355 AC_FUNC_ALLOCA
356
357 AC_CHECK_FUNCS(atexit on_exit)
358
359 AC_CHECK_SIZEOF(char)
360 AC_CHECK_SIZEOF(short)
361 AC_CHECK_SIZEOF(long)
362 AC_CHECK_SIZEOF(int)
363 AC_CHECK_SIZEOF(void *)
364 AC_CHECK_SIZEOF(long long)
365 AC_CHECK_SIZEOF(__int64)
366
367 if test x$ac_cv_sizeof_long = x8 || test x$ac_cv_sizeof_long_long = x8 || test x$ac_cv_sizeof___int64 = x8 ; then
368   :
369 else
370   AC_MSG_ERROR([
371 *** GLib requires a 64 bit type. You might want to consider
372 *** using the GNU C compiler.
373 ])
374 fi
375
376 if test x$ac_cv_sizeof_long_long = x8; then
377         # long long is a 64 bit integer.
378         AC_MSG_CHECKING(for format to printf and scanf a gint64)
379         AC_CACHE_VAL(glib_cv_long_long_format,[
380                 for format in ll q I64; do
381                   AC_TRY_RUN([#include <stdio.h>  
382                         int main()
383                         {
384                           long long b, a = -0x3AFAFAFAFAFAFAFALL;
385                           char buffer[1000];
386                           sprintf (buffer, "%${format}u", a);
387                           sscanf (buffer, "%${format}u", &b);
388                           exit (b!=a);
389                         }
390                         ],
391                         glib_cv_long_long_format=${format}
392                         break)
393                 done])
394         if test -n "$glib_cv_long_long_format"; then
395           AC_MSG_RESULT(%${glib_cv_long_long_format}u)
396         else
397           AC_MSG_RESULT(none)
398         fi
399 elif test x$ac_cv_sizeof___int64 = x8; then
400         # __int64 is a 64 bit integer.
401         AC_MSG_CHECKING(for format to printf and scanf a gint64)
402         # We know this is MSVC, and what the formats are
403         glib_cv_long_long_format=I64
404         AC_MSG_RESULT(%${glib_cv_long_long_format}u)
405 fi
406
407 dnl long doubles were not used, and a portability problem
408 dnl AC_C_LONG_DOUBLE
409 AC_C_CONST
410
411 dnl ok, here we try to check whether the systems prototypes for
412 dnl malloc and friends actually match the prototypes provided
413 dnl by gmem.h (keep in sync). i currently only know how to check
414 dnl this reliably with gcc (-Werror), improvements for other
415 dnl compilers are apprechiated.
416 SANE_MALLOC_PROTOS=no
417 AC_MSG_CHECKING([if malloc() and friends prototypes are gmem.h compatible])
418 glib_save_CFLAGS=$CFLAGS
419 if test "x$GCC" = "xyes"; then
420   CFLAGS="$CFLAGS -Werror"
421   AC_TRY_COMPILE([#include <stdlib.h>], [
422     void* (*my_calloc_p)  (size_t, size_t) = calloc;
423     void* (*my_malloc_p)  (size_t)         = malloc;
424     void  (*my_free_p)    (void*)          = free;
425     void* (*my_realloc_p) (void*, size_t)  = realloc;
426     my_calloc_p = 0;
427     my_malloc_p = 0;
428     my_free_p = 0;
429     my_realloc_p = 0;
430   ],
431     AC_DEFINE(SANE_MALLOC_PROTOS)
432     SANE_MALLOC_PROTOS=yes)
433 fi
434 AC_MSG_RESULT($SANE_MALLOC_PROTOS)
435 CFLAGS=$glib_save_CFLAGS
436
437 dnl
438 dnl check in which direction the stack grows
439 dnl
440 AC_CACHE_CHECK([for growing stack pointer],glib_cv_stack_grows,[
441         AC_TRY_RUN([
442         volatile int *a = 0, *b = 0;
443         void foo (void);
444         int main () { volatile int y = 7; a = &y; foo (); return b > a; }
445         void foo (void) { volatile int x = 5; b = &x; }
446         ],
447         glib_cv_stack_grows=no
448         ,
449         glib_cv_stack_grows=yes
450         ,)
451 ])
452
453 dnl AC_C_INLINE is useless to us since it bails out too early, we need to
454 dnl truely know which ones of `inline', `__inline' and `__inline__' are
455 dnl actually supported.
456 AC_CACHE_CHECK([for __inline],glib_cv_has__inline,[
457         AC_TRY_RUN([
458         __inline int foo () { return 0; }
459         int main () { return foo (); }
460         ],
461         glib_cv_has__inline=yes
462         ,
463         glib_cv_has__inline=no
464         ,)
465 ])
466 case x$glib_cv_has__inline in
467 xyes) AC_DEFINE(G_HAVE___INLINE,1,[Have __inline keyword])
468 esac
469 AC_CACHE_CHECK([for __inline__],glib_cv_has__inline__,[
470         AC_TRY_RUN([
471         __inline__ int foo () { return 0; }
472         int main () { return foo (); }
473         ],
474         glib_cv_has__inline__=yes
475         ,
476         glib_cv_has__inline__=no
477         ,)
478 ])
479 case x$glib_cv_has__inline__ in
480 xyes) AC_DEFINE(G_HAVE___INLINE__,1,[Have __inline__ keyword])
481 esac
482 AC_CACHE_CHECK([for inline], glib_cv_hasinline,[
483         AC_TRY_RUN([
484         #undef inline
485         inline int foo () { return 0; }
486         int main () { return foo (); }
487         ],
488         glib_cv_hasinline=yes
489         ,
490         glib_cv_hasinline=no
491         ,)
492 ])
493 case x$glib_cv_hasinline in
494 xyes) AC_DEFINE(G_HAVE_INLINE,1,[Have inline keyword])
495 esac
496
497 # check for flavours of varargs macros
498 AC_MSG_CHECKING(for ISO C99 varargs macros in C)
499 AC_TRY_COMPILE([],[
500 int a(int p1, int p2, int p3);
501 #define call_a(...) a(1,__VA_ARGS__)
502 call_a(2,3);
503 ],g_have_iso_c_varargs=yes,g_have_iso_c_varargs=no)
504 AC_MSG_RESULT($g_have_iso_c_varargs)
505
506 AC_MSG_CHECKING(for ISO C99 varargs macros in C++)
507 if test "$CXX" = ""; then
508 dnl No C++ compiler
509   g_have_iso_cxx_varargs=no
510 else
511   AC_LANG_CPLUSPLUS
512   AC_TRY_COMPILE([],[
513 int a(int p1, int p2, int p3);
514 #define call_a(...) a(1,__VA_ARGS__)
515 call_a(2,3);
516 ],g_have_iso_cxx_varargs=yes,g_have_iso_cxx_varargs=no)
517   AC_LANG_C
518 fi
519 AC_MSG_RESULT($g_have_iso_cxx_varargs)
520
521 AC_MSG_CHECKING(for GNUC varargs macros)
522 AC_TRY_COMPILE([],[
523 int a(int p1, int p2, int p3);
524 #define call_a(params...) a(1,params)
525 call_a(2,3);
526 ],g_have_gnuc_varargs=yes,g_have_gnuc_varargs=no)
527 AC_MSG_RESULT($g_have_gnuc_varargs)
528
529 # check for bytesex stuff
530 AC_C_BIGENDIAN
531
532 # check for header files
533 AC_CHECK_HEADERS([dirent.h float.h limits.h pwd.h sys/param.h sys/poll.h sys/select.h])
534 AC_CHECK_HEADERS([sys/time.h sys/times.h unistd.h values.h stdint.h sched.h])
535
536 # Checks for libcharset
537 jm_LANGINFO_CODESET
538 jm_GLIBC21
539 AC_CHECK_HEADERS([stddef.h stdlib.h string.h])
540 AC_CHECK_FUNCS(setlocale)
541
542 AC_MSG_CHECKING(whether make is GNU Make)
543 STRIP_BEGIN=
544 STRIP_END=
545 if $ac_make --version 2>/dev/null | grep '^GNU Make ' >/dev/null ; then
546         STRIP_BEGIN='$(strip $(STRIP_DUMMY)'
547         STRIP_END=')'
548         AC_MSG_RESULT(yes)
549 else
550         AC_MSG_RESULT(no)
551 fi
552 STRIP_DUMMY=
553 AC_SUBST(STRIP_DUMMY)
554 AC_SUBST(STRIP_BEGIN)
555 AC_SUBST(STRIP_END)
556
557 # check additional type sizes
558 size_includes=["
559 #include <stdarg.h>
560 #include <stdio.h>
561 #include <ctype.h>
562 #include <string.h>
563 "]
564 if test "x$ac_cv_header_stdint_h" = "xyes"; then
565   size_includes=["$size_includes
566 #include <stdint.h>
567 "]
568 fi
569 if test "x$ac_cv_header_unistd_h" = "xyes"; then
570   size_includes=["$size_includes
571 #include <unistd.h>
572 "]
573 fi
574 GLIB_SIZEOF([$size_includes], size_t, size_t)
575 GLIB_SIZEOF([$size_includes], ptrdiff_t, ptrdiff_t)
576 GLIB_SIZEOF([$size_includes], intmax_t, intmax_t)
577
578 # Check for some functions
579 AC_CHECK_FUNCS(lstat strerror strsignal memmove mkstemp vsnprintf stpcpy strcasecmp strncasecmp poll getcwd nanosleep vasprintf unsetenv)
580
581 AC_FUNC_VSNPRINTF_C99
582
583 # Check if bcopy can be used for overlapping copies, if memmove isn't found.
584 # The check is borrowed from the PERL Configure script.
585 if test "$ac_cv_func_memmove" != "yes"; then
586   AC_CACHE_CHECK(whether bcopy can handle overlapping copies,
587     glib_cv_working_bcopy,[AC_TRY_RUN([
588       int main() {
589         char buf[128], abc[128], *b;
590         int len, off, align;
591         bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
592         for (align = 7; align >= 0; align--) {
593           for (len = 36; len; len--) {
594             b = buf+align; bcopy(abc, b, len);
595             for (off = 1; off <= len; off++) {
596               bcopy(b, b+off, len); bcopy(b+off, b, len);
597                 if (bcmp(b, abc, len)) return(1);
598             }
599           }
600         }
601         return(0);
602       }],glib_cv_working_bcopy=yes,glib_cv_working_bcopy=no)])
603   if test "$glib_cv_working_bcopy" = "yes"; then
604     AC_DEFINE(HAVE_WORKING_BCOPY,1,[Have a working bcopy])
605   fi
606 fi
607
608 # Check for sys_errlist
609 AC_MSG_CHECKING(for sys_errlist)
610 AC_TRY_LINK(, [
611 extern char *sys_errlist[];
612 extern int sys_nerr;
613 sys_errlist[sys_nerr-1][0] = 0;
614 ], glib_ok=yes, glib_ok=no)
615 AC_MSG_RESULT($glib_ok)
616 if test "$glib_ok" = "no"; then
617     AC_DEFINE(NO_SYS_ERRLIST,1,[global 'sys_errlist' not found])
618 fi
619
620 # Check for sys_siglist
621 AC_MSG_CHECKING(for sys_siglist)
622 AC_TRY_LINK(, [
623 extern char *sys_siglist[];
624 exit (sys_siglist[0]);
625 ], glib_ok=yes, glib_ok=no)
626 AC_MSG_RESULT($glib_ok)
627 if test "$glib_ok" = "no"; then
628     AC_DEFINE(NO_SYS_SIGLIST,1,[global 'sys_siglist' not found])
629 fi
630
631 # Check for sys_siglist decl (see Tue Jan 19 00:44:24 1999 in changelog)
632 AC_MSG_CHECKING(for sys_siglist declaration)
633 AC_TRY_COMPILE([#include <signal.h>], [
634 strlen (sys_siglist[0]);
635 ], glib_ok=yes, glib_ok=no)
636 AC_MSG_RESULT($glib_ok)
637 if test "$glib_ok" = "no"; then
638     AC_DEFINE(NO_SYS_SIGLIST_DECL,1,[global 'sys_siglist' not declared])
639 fi
640
641 # Check if <sys/select.h> needs to be included for fd_set
642 AC_MSG_CHECKING([for fd_set])
643 AC_TRY_COMPILE([#include <sys/types.h>],
644         [fd_set readMask, writeMask;], gtk_ok=yes, gtk_ok=no)
645 if test "$gtk_ok" = "yes"; then
646     AC_MSG_RESULT([yes, found in sys/types.h])
647 else
648     AC_EGREP_HEADER(fd_set, sys/select.h, gtk_ok=yes)
649     if test "$gtk_ok" = "yes"; then
650         # *** FIXME: give it a different name
651         AC_DEFINE(HAVE_SYS_SELECT_H,1,[found fd_set in sys/select.h])
652         AC_MSG_RESULT([yes, found in sys/select.h])
653     else
654         AC_DEFINE(NO_FD_SET,1,[didn't find fd_set])
655         AC_MSG_RESULT(no)
656     fi
657 fi
658
659 dnl *** check for sane realloc() ***
660 AC_CACHE_CHECK([whether realloc (NULL,) will work],glib_cv_sane_realloc,[
661         AC_TRY_RUN([
662         #include <stdlib.h>
663         int main() {
664           return realloc (0, sizeof (int)) == 0;
665         }],
666         [glib_cv_sane_realloc=yes],
667         [glib_cv_sane_realloc=no],
668         [])
669 ])
670 if test x$glib_cv_sane_realloc = xyes; then
671   AC_DEFINE(REALLOC_0_WORKS,1,[whether realloc (NULL,) works])
672 fi
673
674 dnl Check for nl_langinfo and CODESET
675
676 AC_MSG_CHECKING([for nl_langinfo (CODESET)])
677 AC_TRY_COMPILE([#include <langinfo.h>],
678         [char *codeset = nl_langinfo (CODESET);],
679    AC_DEFINE(HAVE_CODESET,1,[Have nl_langinfo (CODESET)])
680    have_codeset=yes,
681    have_codeset=no)
682 AC_MSG_RESULT($have_codeset)
683
684
685 dnl ****************************************
686 dnl *** strlcpy/strlcat                  ***
687 dnl ****************************************
688 # Check for strlcpy
689 AC_MSG_CHECKING(for strlcpy/strlcat)
690 AC_TRY_LINK([#include <stdlib.h>
691 #include <string.h>], [
692 char *p = malloc(10);
693 (void) strlcpy(p, "hi", 10);
694 (void) strlcat(p, "bye", 10);
695 ], glib_ok=yes, glib_ok=no)
696 AC_MSG_RESULT($glib_ok)
697 if test "$glib_ok" = "yes"; then
698     AC_DEFINE(HAVE_STRLCPY,1,[Have functions strlcpy and strlcat])
699 fi
700   
701
702 dnl **********************
703 dnl *** va_copy checks ***
704 dnl **********************
705 dnl we currently check for all three va_copy possibilities, so we get
706 dnl all results in config.log for bug reports.
707 AC_CACHE_CHECK([for an implementation of va_copy()],glib_cv_va_copy,[
708         AC_TRY_RUN([
709         #include <stdarg.h>
710         void f (int i, ...) {
711         va_list args1, args2;
712         va_start (args1, i);
713         va_copy (args2, args1);
714         if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
715           exit (1);
716         va_end (args1); va_end (args2);
717         }
718         int main() {
719           f (0, 42);
720           return 0;
721         }],
722         [glib_cv_va_copy=yes],
723         [glib_cv_va_copy=no],
724         [])
725 ])
726 AC_CACHE_CHECK([for an implementation of __va_copy()],glib_cv___va_copy,[
727         AC_TRY_RUN([
728         #include <stdarg.h>
729         void f (int i, ...) {
730         va_list args1, args2;
731         va_start (args1, i);
732         __va_copy (args2, args1);
733         if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
734           exit (1);
735         va_end (args1); va_end (args2);
736         }
737         int main() {
738           f (0, 42);
739           return 0;
740         }],
741         [glib_cv___va_copy=yes],
742         [glib_cv___va_copy=no],
743         [])
744 ])
745
746 if test "x$glib_cv_va_copy" = "xyes"; then
747   g_va_copy_func=va_copy
748 else if test "x$glib_cv___va_copy" = "xyes"; then
749   g_va_copy_func=__va_copy
750 fi
751 fi
752
753 if test -n "$g_va_copy_func"; then
754   AC_DEFINE_UNQUOTED(G_VA_COPY,$g_va_copy_func,[A 'va_copy' style function])
755 fi
756
757 AC_CACHE_CHECK([whether va_lists can be copied by value],glib_cv_va_val_copy,[
758         AC_TRY_RUN([
759         #include <stdarg.h>
760         void f (int i, ...) {
761         va_list args1, args2;
762         va_start (args1, i);
763         args2 = args1;
764         if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
765           exit (1);
766         va_end (args1); va_end (args2);
767         }
768         int main() {
769           f (0, 42);
770           return 0;
771         }],
772         [glib_cv_va_val_copy=yes],
773         [glib_cv_va_val_copy=no],
774         [])
775 ])
776
777 if test "x$glib_cv_va_val_copy" = "xno"; then
778   AC_DEFINE(G_VA_COPY_AS_ARRAY,1, ['va_lists' cannot be copies as values])
779 fi
780
781 dnl ***********************
782 dnl *** g_module checks ***
783 dnl ***********************
784 G_MODULE_LIBS=
785 G_MODULE_LIBS_EXTRA=
786 G_MODULE_PLUGIN_LIBS=
787 G_MODULE_LDFLAGS=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
788 dnl G_MODULE_IMPL= don't reset, so cmd-line can override
789 G_MODULE_NEED_USCORE=0
790 G_MODULE_BROKEN_RTLD_GLOBAL=0
791 G_MODULE_HAVE_DLERROR=0
792 dnl *** force native WIN32 shared lib loader 
793 if test -z "$G_MODULE_IMPL"; then
794   case "$host" in
795   *-*-mingw*|*-*-cygwin*) G_MODULE_IMPL=G_MODULE_IMPL_WIN32 ;;
796   esac
797 fi
798 dnl *** dlopen() and dlsym() in system libraries
799 if test -z "$G_MODULE_IMPL"; then
800         AC_CHECK_FUNC(dlopen,
801                       [AC_CHECK_FUNC(dlsym,
802                                      [G_MODULE_IMPL=G_MODULE_IMPL_DL],[])],
803                       [])
804 fi
805 dnl *** load_image (BeOS)
806 if test -z "$G_MODULE_IMPL" && test "x$glib_native_beos" = "xyes"; then
807   AC_CHECK_LIB(root, load_image,
808       [G_MODULE_LIBS="-lbe -lroot -lglib"
809       G_MODULE_LIBS_EXTRA="-L\$(top_builddir_full)/.libs"
810       G_MODULE_PLUGIN_LIBS="-L\$(top_builddir_full)/gmodule/.libs -lgmodule"
811       G_MODULE_IMPL=G_MODULE_IMPL_BEOS],
812       [])
813 fi   
814 dnl *** dlopen() and dlsym() in libdl
815 if test -z "$G_MODULE_IMPL"; then
816         AC_CHECK_LIB(dl, dlopen,
817                      [AC_CHECK_LIB(dl, dlsym,
818                                    [G_MODULE_LIBS=-ldl
819                                    G_MODULE_IMPL=G_MODULE_IMPL_DL],[])],
820                      [])
821 fi
822 dnl *** NSLinkModule (dyld) in system libraries (Darwin)
823 if test -z "$G_MODULE_IMPL"; then
824         AC_CHECK_FUNC(NSLinkModule,
825                       [G_MODULE_IMPL=G_MODULE_IMPL_DYLD
826                        G_MODULE_NEED_USCORE=1],
827                       [])
828 fi
829 dnl *** shl_load() in libdld (HP-UX)
830 if test -z "$G_MODULE_IMPL"; then
831         AC_CHECK_LIB(dld, shl_load,
832                 [G_MODULE_LIBS=-ldld
833                 G_MODULE_IMPL=G_MODULE_IMPL_DLD],
834                 [])
835 fi
836 dnl *** additional checks for G_MODULE_IMPL_DL
837 if test "$G_MODULE_IMPL" = "G_MODULE_IMPL_DL"; then
838         LIBS_orig="$LIBS"
839         LDFLAGS_orig="$LDFLAGS"
840         LIBS="$LIBS $G_MODULE_LIBS"
841         LDFLAGS="$LDFLAGS $G_MODULE_LDFLAGS"
842 dnl *** check for OSF1/5.0 RTLD_GLOBAL brokenness
843         AC_CACHE_CHECK([for RTLD_GLOBAL brokenness],
844                 glib_cv_rtldglobal_broken,[
845                 AC_TRY_RUN([
846                 #include <dlfcn.h>
847                 #ifndef RTLD_GLOBAL
848                 #define RTLD_GLOBAL 0
849                 #endif
850                 #ifndef RTLD_LAZY
851                 #define RTLD_LAZY 0
852                 #endif
853                 int pthread_create;
854                 int main () {
855                 void *handle, *global, *local;
856                 global = &pthread_create;
857                 handle = dlopen ("libpthread.so", RTLD_GLOBAL | RTLD_LAZY);
858                 if (!handle) return 0;
859                 local = dlsym (handle, "pthread_create");
860                 return global == local;
861                 }],
862                         [glib_cv_rtldglobal_broken=no],
863                         [glib_cv_rtldglobal_broken=yes],
864                         [])
865                 rm -f plugin.c plugin.o plugin.lo
866         ])
867         if test "x$glib_cv_rtldglobal_broken" = "xyes"; then
868                 G_MODULE_BROKEN_RTLD_GLOBAL=1
869         else
870                 G_MODULE_BROKEN_RTLD_GLOBAL=0
871         fi
872 dnl *** check whether we need preceeding underscores
873         AC_CACHE_CHECK([for preceeding underscore in symbols],
874                 glib_cv_uscore,[
875                 AC_TRY_RUN([
876                 #include <dlfcn.h>
877                 int glib_underscore_test (void) { return 42; }
878                 int main() {
879                   void *f1 = (void*)0, *f2 = (void*)0, *handle;
880                   handle = dlopen ((void*)0, 0);
881                   if (handle) {
882                     f1 = dlsym (handle, "glib_underscore_test");
883                     f2 = dlsym (handle, "_glib_underscore_test");
884                   } return (!f2 || f1);
885                 }],
886                         [glib_cv_uscore=yes],
887                         [glib_cv_uscore=no],
888                         [])
889                 rm -f plugin.c plugin.$ac_objext plugin.lo
890         ])
891         if test "x$glib_cv_uscore" = "xyes"; then
892                 G_MODULE_NEED_USCORE=1
893         else
894                 G_MODULE_NEED_USCORE=0
895         fi
896
897         LDFLAGS="$LDFLAGS_orig"
898 dnl *** check for having dlerror()
899         AC_CHECK_FUNC(dlerror,
900                 [G_MODULE_HAVE_DLERROR=1],
901                 [G_MODULE_HAVE_DLERROR=0])
902         LIBS="$LIBS_orig"
903 fi
904 dnl *** done, have we got an implementation?
905 if test -z "$G_MODULE_IMPL"; then
906         G_MODULE_IMPL=0
907         G_MODULE_SUPPORTED=false
908 else
909         G_MODULE_SUPPORTED=true
910 fi
911
912 AC_MSG_CHECKING(for the suffix of shared libraries)
913 case "$host_os" in
914   hpux9* | hpux10* | hpux11*)  # taken from ltconfig
915     glib_gmodule_suffix='sl'
916     ;;
917   cygwin* | mingw*)
918     glib_gmodule_suffix='dll'
919     ;;
920   *)
921     glib_gmodule_suffix='so'    
922     ;;
923 esac
924 AC_MSG_RESULT(.$glib_gmodule_suffix)
925  
926 AC_SUBST(G_MODULE_SUPPORTED)
927 AC_SUBST(G_MODULE_IMPL)
928 AC_SUBST(G_MODULE_LIBS)
929 AC_SUBST(G_MODULE_LIBS_EXTRA)
930 AC_SUBST(G_MODULE_PLUGIN_LIBS)
931 AC_SUBST(G_MODULE_LDFLAGS)
932 AC_SUBST(G_MODULE_HAVE_DLERROR)
933 AC_SUBST(G_MODULE_BROKEN_RTLD_GLOBAL)
934 AC_SUBST(G_MODULE_NEED_USCORE)
935 AC_SUBST(GLIB_DEBUG_FLAGS)
936
937 dnl **********************
938 dnl *** g_spawn checks ***
939 dnl **********************
940
941 AC_MSG_CHECKING(for gspawn implementation)
942 case "$host" in
943   *-*-mingw*)
944     GSPAWN=gspawn-win32.lo
945     ;;
946   *)
947     GSPAWN=gspawn.lo
948     ;;    
949 esac
950 AC_MSG_RESULT($GSPAWN)
951 AC_SUBST(GSPAWN)
952
953 dnl *************************
954 dnl *** GIOChannel checks ***
955 dnl *************************
956
957 AC_MSG_CHECKING(for GIOChannel implementation)
958 case "$host" in
959   *-*-mingw*)
960     GIO=giowin32.lo
961     ;;
962   *)
963     GIO=giounix.lo
964     ;;    
965 esac
966 AC_MSG_RESULT($GIO)
967 AC_SUBST(GIO)
968
969 dnl ****************************************
970 dnl *** platform dependent source checks ***
971 dnl ****************************************
972
973 AC_MSG_CHECKING(for platform-dependent source)
974 case "$host" in
975   *-*-cygwin*|*-*-mingw*)
976     PLATFORMDEP=gwin32.lo
977     ;;
978   *)
979     PLATFORMDEP=
980     ;;    
981 esac
982 AC_MSG_RESULT($PLATFORMDEP)
983 AC_SUBST(PLATFORMDEP)
984
985 AC_MSG_CHECKING([whether to compile timeloop])
986 case "$host" in
987   *-*-cygwin*|*-*-mingw*)
988     enable_timeloop=no
989     ;;
990   *)
991     enable_timeloop=yes
992     ;;    
993 esac
994 AC_MSG_RESULT($enable_timeloop)
995 AM_CONDITIONAL(ENABLE_TIMELOOP, test x$enable_timeloop = xyes)
996
997 AC_MSG_CHECKING([if building for some Win32 platform])
998 case "$host" in
999   *-*-mingw*|*-*-cygwin*)
1000     platform_win32=yes
1001     ;;
1002   *)
1003     platform_win32=no
1004     ;;
1005 esac
1006 AC_MSG_RESULT($platform_win32)
1007 AM_CONDITIONAL(PLATFORM_WIN32, test x$platform_win32 = xyes)
1008
1009 dnl ***********************
1010 dnl *** g_thread checks ***
1011 dnl ***********************
1012
1013 AC_ARG_WITH(threads, [  --with-threads=[none/posix/dce/solaris/win32] specify a thread implementation to use],
1014         if test "x$with_threads" = x; then
1015                 want_threads=yes
1016         else
1017                 want_threads=$with_threads
1018         fi,
1019         want_threads=yes)
1020 if test "x$enable_threads" = "xno"; then
1021         want_threads=no
1022 fi
1023
1024 dnl error and warning message
1025 dnl *************************
1026
1027 THREAD_NO_IMPLEMENTATION="You do not have any known thread system on your
1028                 computer. GLib will not have a default thread implementation."
1029
1030 FLAG_DOES_NOT_WORK="I can't find the MACRO to enable thread safety on your
1031                 platform (normally it's "_REENTRANT"). I'll not use any flag on
1032                 compilation now, but then your programs might not work.
1033                 Please provide information on how it is done on your system."
1034
1035 LIBS_NOT_FOUND_1="I can't find the libraries for the thread implementation
1036                 "
1037
1038 LIBS_NOT_FOUND_2=". Please choose another thread implementation or
1039                 provide information on your thread implementation.
1040                 You can also run 'configure --disable-threads' 
1041                 to compile without thread support."
1042
1043 FUNC_NO_GETPWUID_R="the 'g_get_(user_name|real_name|home_dir|tmp_dir)'
1044                 functions will not be MT-safe during their first call because
1045                 there is no working 'getpwuid_r' on your system."
1046
1047 FUNC_NO_LOCALTIME_R="the 'g_date_set_time' function will not be MT-safe
1048                 because there is no 'localtime_r' on your system."
1049
1050 POSIX_NO_YIELD="I can not find a yield functions for your platform. A rather
1051                 crude surrogate will be used. If you happen to know a 
1052                 yield function for your system, please inform the GLib 
1053                 developers."
1054
1055 POSIX_NO_PRIORITIES="I can not find the minimal and maximal priorities for 
1056                 threads on your system. Thus threads can only have the default 
1057                 priority. If you happen to know these main/max
1058                 priorities, please inform the GLib developers."
1059
1060
1061 dnl determination of thread implementation
1062 dnl ***************************************
1063
1064 # have_threads=no   means no thread support
1065 # have_threads=none means no default thread implementation
1066
1067 have_threads=no
1068 if test "x$want_threads" = xyes || test "x$want_threads" = xsolaris; then
1069         case $host in
1070                 *-*-solaris*)
1071                 AC_CHECK_LIB(thread, cond_init, have_threads=solaris)
1072                 ;;
1073         esac
1074 fi
1075 if test "x$want_threads" = xyes || test "x$want_threads" = xposix \
1076                                 || test "x$want_threads" = xdce; then
1077         # -D_POSIX4_DRAFT_SOURCE -D_POSIX4A_DRAFT10_SOURCE is for DG/UX
1078         # -U_OSF_SOURCE is for Digital UNIX 4.0d
1079         GTHREAD_COMPILE_IMPL_DEFINES="-D_POSIX4_DRAFT_SOURCE -D_POSIX4A_DRAFT10_SOURCE -U_OSF_SOURCE"
1080         glib_save_CPPFLAGS="$CPPFLAGS"
1081         CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
1082         if test "x$have_threads" = xno; then
1083                 AC_TRY_COMPILE([#include <pthread.h>],
1084                         [pthread_attr_t attr; pthread_attr_init(&attr);],
1085                         have_threads=posix)
1086         fi
1087         if test "x$have_threads" = xno; then
1088                 AC_TRY_COMPILE([#include <pthread.h>],
1089                         [pthread_attr_t attr; pthread_attr_create(&attr);],
1090                         have_threads=posix)
1091         fi
1092         CPPFLAGS="$glib_save_CPPFLAGS"
1093 fi
1094 if test "x$want_threads" = xyes || test "x$want_threads" = xwin32; then
1095         case $host in
1096                 *-*-mingw*)
1097                 have_threads=win32
1098                 ;;
1099         esac
1100 fi
1101 if test "x$want_threads" = xnone; then
1102         have_threads=none
1103 fi
1104
1105 AC_MSG_CHECKING(for thread implementation)
1106
1107 if test "x$have_threads" = xno && test "x$want_threads" != xno; then
1108         AC_MSG_RESULT(none available)
1109         AC_MSG_WARN($THREAD_NO_IMPLEMENTATION)
1110 else
1111         AC_MSG_RESULT($have_threads)
1112 fi
1113
1114
1115 dnl determination of G_THREAD_CFLAGS
1116 dnl ********************************
1117
1118 G_THREAD_LIBS=
1119 G_THREAD_LIBS_EXTRA=
1120 G_THREAD_CFLAGS=
1121
1122 if test x"$have_threads" != xno; then
1123
1124     G_THREAD_CFLAGS="-D_REENTRANT" # good default guess
1125
1126     case $host in
1127         *-aix*)
1128                 G_THREAD_CFLAGS="$G_THREAD_CFLAGS -D_THREAD_SAFE"
1129                 if test x"$GCC" = xyes; then
1130                         # GCC 3.0 and above needs -pthread
1131                         # GCC 2.x and below needs -mthreads
1132                         AC_TRY_COMPILE(,[#if __GNUC__ <= 2
1133                                         bail out here
1134                                         #endif],
1135                                 G_THREAD_CFLAGS="$G_THREAD_CFLAGS -pthread", 
1136                                 G_THREAD_CFLAGS="$G_THREAD_CFLAGS -mthreads")
1137                 fi
1138                 ;;
1139         *-freebsd2.2*)
1140                 G_THREAD_CFLAGS="$G_THREAD_CFLAGS -D_THREAD_SAFE"
1141
1142                 # FreeBSD 2.2.x shiped with gcc 2.7.2.x, which doesn't support
1143                 # -mthreads flag.
1144                 ;;      
1145         *-sysv5uw7*)  # UnixWare 7 
1146                 if test "$GCC" != "yes"; then
1147                         G_THREAD_CFLAGS="$G_THREAD_CFLAGS -Kthread"
1148                 else    
1149                         G_THREAD_CFLAGS="$G_THREAD_CFLAGS -pthread"
1150                 fi      
1151                 ;;
1152         *-dg-dgux*)  # DG/UX
1153                 G_THREAD_CFLAGS="$G_THREAD_CFLAGS -D_POSIX4A_DRAFT10_SOURCE"
1154     esac
1155
1156     # if we are not finding the localtime_r function, then we probably are
1157     # not using the proper multithread flag
1158
1159     glib_save_CPPFLAGS="$CPPFLAGS"
1160     CPPFLAGS="$CPPFLAGS $G_THREAD_CFLAGS"
1161
1162     # First we test, whether localtime_r is declared in time.h
1163     # directly. Then we test whether a macro localtime_r exists, in
1164     # which case localtime_r in the test program is replaced and thus
1165     # if we still find localtime_r in the output, it is not defined as 
1166     # a macro.
1167
1168     AC_EGREP_CPP([[^a-zA-Z1-9_]localtime_r[^a-zA-Z1-9_]], [#include <time.h>], ,
1169       [AC_EGREP_CPP([[^a-zA-Z1-9_]localtime_r[^a-zA-Z1-9_]], [#include <time.h> 
1170                                                            localtime_r(a,b)],
1171                    AC_MSG_WARN($FLAG_DOES_NOT_WORK))])
1172
1173     CPPFLAGS="$glib_save_CPPFLAGS"
1174
1175     AC_MSG_CHECKING(thread related cflags)
1176     AC_MSG_RESULT($G_THREAD_CFLAGS)
1177     CFLAGS="$CFLAGS $G_THREAD_CFLAGS"
1178 fi
1179
1180 dnl determination of G_THREAD_LIBS
1181 dnl ******************************
1182
1183 mutex_has_default=no
1184 case $have_threads in
1185         posix|dce)
1186            glib_save_CPPFLAGS="$CPPFLAGS"
1187            CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
1188            G_THREAD_LIBS=error
1189            glib_save_LIBS="$LIBS"
1190            case $host in
1191              *-sysv5uw7*) # UnixWare 7 
1192                 if test "$GCC" != "yes"; then
1193                         G_THREAD_LIBS="-Kthread"
1194                 else    
1195                         G_THREAD_LIBS="-pthread"
1196                 fi      
1197                 ;;
1198              *)
1199                 for thread_lib in "" pthread pthread32 pthreads c_r thread dce; do
1200                         if test x"$thread_lib" = x; then
1201                                 add_thread_lib=""
1202                                 IN=""
1203                         else
1204                                 add_thread_lib="-l$thread_lib"
1205                                 IN=" in -l$thread_lib"
1206                         fi
1207                         if test x"$have_threads" = xposix; then
1208                                 defattr=0
1209                         else
1210                                 defattr=pthread_attr_default
1211                         fi
1212                         
1213                         LIBS="$glib_save_LIBS $add_thread_lib"
1214                         
1215                         AC_MSG_CHECKING(for pthread_create/pthread_join$IN)
1216                         AC_TRY_RUN([#include <pthread.h> 
1217                                 int check_me = 0;
1218                                 void* func(void* data) {check_me = 42;}
1219                                 main()
1220                                 { pthread_t t; 
1221                                   void *ret;
1222                                   pthread_create (&t, $defattr, func, 0);
1223                                   pthread_join (t, &ret);
1224                                   exit (check_me != 42);
1225                                 }],
1226                                 [AC_MSG_RESULT(yes)
1227                                 G_THREAD_LIBS="$add_thread_lib"
1228                                 break],
1229                                 [AC_MSG_RESULT(no)])
1230                 done
1231                 if test "x$G_THREAD_LIBS" = xerror; then
1232                   AC_MSG_ERROR($LIBS_NOT_FOUND_1$have_threads$LIBS_NOT_FOUND_2)
1233                 fi
1234                 for thread_lib in "" rt rte; do
1235                         if test x"$thread_lib" = x; then
1236                                 add_thread_lib=""
1237                                 IN=""
1238                         else
1239                                 add_thread_lib="-l$thread_lib"
1240                                 IN=" in -l$thread_lib"
1241                         fi
1242                         LIBS="$glib_save_LIBS $add_thread_lib"
1243                         
1244                         AC_MSG_CHECKING(for sched_get_priority_min$IN)
1245                         AC_TRY_RUN([#include <sched.h>
1246                                 #include <errno.h>
1247                                 int main() {
1248                                 errno = 0;
1249                                 return sched_get_priority_min(SCHED_OTHER)==-1
1250                                         && errno != 0;
1251                                 }],
1252                                 [AC_MSG_RESULT(yes)
1253                                 G_THREAD_LIBS="$G_THREAD_LIBS $add_thread_lib"
1254                                 posix_priority_min="sched_get_priority_min(SCHED_OTHER)"
1255                                 posix_priority_max="sched_get_priority_max(SCHED_OTHER)"
1256                                 break],
1257                                 [AC_MSG_RESULT(no)])
1258                 done
1259                 LIBS="$glib_save_LIBS"
1260                 ;;
1261            esac 
1262            mutex_has_default=yes
1263            mutex_default_type='pthread_mutex_t'
1264            mutex_default_init='PTHREAD_MUTEX_INITIALIZER'
1265            mutex_header_file='pthread.h'
1266            if test "x$have_threads" = "xposix"; then
1267              g_threads_impl="POSIX"
1268            else
1269              g_threads_impl="DCE"
1270              have_threads="posix"
1271            fi
1272            AC_SUBST(GTHREAD_COMPILE_IMPL_DEFINES)
1273            CPPFLAGS="$glib_save_CPPFLAGS"
1274            ;;
1275         solaris)
1276            G_THREAD_LIBS=error
1277            AC_CHECK_LIB(thread, cond_init, G_THREAD_LIBS="-lthread")
1278            mutex_has_default=yes
1279            mutex_default_type='mutex_t'
1280            mutex_default_init="DEFAULTMUTEX"
1281            mutex_header_file='thread.h'
1282            g_threads_impl="SOLARIS"
1283            ;;
1284         win32)
1285            g_threads_impl="WIN32"
1286            G_THREAD_LIBS=""
1287            ;;
1288         none|no)
1289            g_threads_impl="NONE"
1290            ;;
1291         *)
1292            g_threads_impl="NONE"
1293            G_THREAD_LIBS=error
1294            ;;
1295 esac
1296
1297 if test "x$G_THREAD_LIBS" = xerror; then
1298         AC_MSG_ERROR($LIBS_NOT_FOUND_1$have_threads$LIBS_NOT_FOUND_2)
1299 fi
1300
1301 case $host in
1302   *-*-beos*)
1303     G_THREAD_LIBS="-lbe -lroot -lglib "
1304     G_THREAD_LIBS_EXTRA="-L\$(top_builddir_full)/.libs"
1305     ;;
1306   *)
1307     ;;
1308 esac
1309
1310 AC_MSG_CHECKING(thread related libraries)
1311 AC_MSG_RESULT($G_THREAD_LIBS)
1312
1313 dnl check for mt safe function variants and some posix functions
1314 dnl ************************************************************
1315
1316 if test x"$have_threads" != xno; then
1317         glib_save_LIBS="$LIBS"
1318         # we are not doing the following for now, as this might require glib 
1319         # to always be linked with the thread libs on some platforms. 
1320         # LIBS="$LIBS $G_THREAD_LIBS"
1321         AC_CHECK_FUNCS(localtime_r)
1322         if test "$ac_cv_header_pwd_h" = "yes"; then
1323                 AC_CACHE_CHECK([for posix getpwuid_r],
1324                         ac_cv_func_posix_getpwuid_r,
1325                         [AC_TRY_RUN([#include <errno.h>
1326                                 #include <pwd.h>
1327                                 int main () { char buffer[10000];
1328                                 struct passwd pwd, *pwptr = &pwd;
1329                                 int error;
1330                                 errno = 0;
1331                                 error = getpwuid_r (0, &pwd, buffer, 
1332                                         sizeof (buffer), &pwptr);
1333                                 return (error < 0 && errno == ENOSYS) 
1334                                         || error == ENOSYS; }],
1335                                 [ac_cv_func_posix_getpwuid_r=yes],
1336                                 [ac_cv_func_posix_getpwuid_r=no])])
1337                 if test "$ac_cv_func_posix_getpwuid_r" = yes; then
1338                         AC_DEFINE(HAVE_POSIX_GETPWUID_R,1,
1339                                 [Have POSIX function getpwuid_r])
1340                 else
1341                         AC_CACHE_CHECK([for nonposix getpwuid_r],
1342                                 ac_cv_func_nonposix_getpwuid_r,
1343                                 [AC_TRY_LINK([#include <pwd.h>],
1344                                         [char buffer[10000];
1345                                         struct passwd pwd;
1346                                         getpwuid_r (0, &pwd, buffer, 
1347                                                         sizeof (buffer));],
1348                                         [ac_cv_func_nonposix_getpwuid_r=yes],
1349                                         [ac_cv_func_nonposix_getpwuid_r=no])])
1350                         if test "$ac_cv_func_nonposix_getpwuid_r" = yes; then
1351                                 AC_DEFINE(HAVE_NONPOSIX_GETPWUID_R,1,
1352                                         [Have non-POSIX function getpwuid_r])
1353                         fi
1354                 fi
1355         fi
1356         LIBS="$LIBS $G_THREAD_LIBS"
1357         if test x"$have_threads" = xposix; then
1358                 glib_save_CPPFLAGS="$CPPFLAGS"
1359                 CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
1360                 dnl we might grow sizeof(pthread_t) later on, so use a dummy name here
1361                 GLIB_SIZEOF([#include <pthread.h>], pthread_t, system_thread)
1362                 # This is not AC_CHECK_FUNC to also work with function
1363                 # name mangling in header files.
1364                 AC_MSG_CHECKING(for pthread_attr_setstacksize)
1365                 AC_TRY_LINK([#include <pthread.h>],
1366                         [pthread_attr_t t; pthread_attr_setstacksize(&t,0)],
1367                         [AC_MSG_RESULT(yes)
1368                         AC_DEFINE(HAVE_PTHREAD_ATTR_SETSTACKSIZE,1,
1369                                   [Have function pthread_attr_setstacksize])],
1370                         [AC_MSG_RESULT(no)])
1371                 AC_MSG_CHECKING(for minimal/maximal thread priority)
1372                 if test x"$posix_priority_min" = xnone; then
1373                         AC_EGREP_CPP(PX_PRIO_MIN,[#include <pthread.h>
1374                                 PX_PRIO_MIN],,[
1375                                 posix_priority_min=PX_PRIO_MIN
1376                                 posix_priority_max=PX_PRIO_MAX])
1377                 fi
1378                 if test x"$posix_priority_min" = xnone; then
1379                         AC_EGREP_CPP(PRI_OTHER_MIN,[#include <pthread.h>
1380                                 PRI_OTHER_MIN],,[
1381                                 posix_priority_min=PRI_OTHER_MIN        
1382                                 posix_priority_max=PRI_OTHER_MAX])
1383                 fi
1384                 if test x"$posix_priority_min" = x; then
1385                         AC_MSG_RESULT(none found)
1386                         AC_MSG_WARN($POSIX_NO_PRIORITIES)
1387                         posix_priority_min=-1
1388                         posix_priority_max=-1
1389                 else
1390                         AC_MSG_RESULT($posix_priority_min/$posix_priority_max)
1391                         AC_DEFINE_UNQUOTED(POSIX_MIN_PRIORITY,$posix_priority_min,[Minimum POSIX RT priority])
1392                         AC_DEFINE_UNQUOTED(POSIX_MAX_PRIORITY,$posix_priority_max,[Maximum POSIX RT priority])
1393                 fi
1394                 posix_yield_func=none
1395                 AC_MSG_CHECKING(for posix yield function)
1396                 for yield_func in sched_yield pthread_yield_np pthread_yield \
1397                                                         thr_yield; do
1398                         AC_TRY_LINK([#include <pthread.h>],
1399                                 [$yield_func()],
1400                                 [posix_yield_func="$yield_func"
1401                                 break])
1402                 done            
1403                 if test x"$posix_yield_func" = xnone; then
1404                         AC_MSG_RESULT(none found)
1405                         AC_MSG_WARN($POSIX_NO_YIELD)
1406                         posix_yield_func="g_usleep(1000)"
1407                 else
1408                         AC_MSG_RESULT($posix_yield_func)
1409                         posix_yield_func="$posix_yield_func()"
1410                 fi
1411                 AC_DEFINE_UNQUOTED(POSIX_YIELD_FUNC,$posix_yield_func,[The POSIX RT yield function])
1412                 CPPFLAGS="$glib_save_CPPFLAGS"
1413
1414                 AC_MSG_CHECKING(whether to use the PID niceness surrogate for thread priorities)
1415                 AC_TRY_RUN([#include <pthread.h> 
1416                         #include <sys/types.h>
1417                         #include <unistd.h>
1418                         pid_t other_pid = 0;
1419
1420                         void* func(void* data) {other_pid = getpid();}
1421                         main()
1422                         { pthread_t t; 
1423                           void *ret;
1424                           pthread_create (&t, $defattr, func, NULL);
1425                           pthread_join (t, &ret);
1426                           exit (getpid()==other_pid || 
1427                                 $posix_priority_min != $posix_priority_max);
1428                         }],
1429                         [AC_MSG_RESULT(yes)
1430                           AC_DEFINE(G_THREAD_USE_PID_SURROGATE, 1, [whether to use the PID niceness surrogate for thread priorities])
1431                         ],
1432                         [AC_MSG_RESULT(no)])
1433         elif test x"$have_threads" = xwin32; then
1434                 # It's a pointer to a private struct
1435                 GLIB_SIZEOF(,struct _GThreadData *, system_thread)
1436         elif test x"$have_threads" = xsolaris; then 
1437                 GLIB_SIZEOF([#include <thread.h>], thread_t, system_thread)
1438         fi
1439
1440         LIBS="$glib_save_LIBS"
1441
1442         # now spit out all the warnings.
1443         if test "$ac_cv_func_posix_getpwuid_r" != "yes" && 
1444            test "$ac_cv_func_nonposix_getpwuid_r" != "yes"; then
1445                 AC_MSG_WARN($FUNC_NO_GETPWUID_R)
1446         fi
1447         if test "$ac_cv_func_localtime_r" != "yes"; then
1448                 AC_MSG_WARN($FUNC_NO_LOCALTIME_R)
1449         fi
1450 fi      
1451
1452 if test x"$glib_cv_sizeof_system_thread" = x; then
1453    # use a pointer as a fallback.
1454    GLIB_SIZEOF(,void *, system_thread)
1455 fi
1456
1457 AC_DEFINE_UNQUOTED(G_THREAD_SOURCE,"gthread-$have_threads.c",
1458                    [Source file containing theread implementation])
1459 AC_SUBST(G_THREAD_CFLAGS)
1460 AC_SUBST(G_THREAD_LIBS)
1461 AC_SUBST(G_THREAD_LIBS_EXTRA)
1462
1463 dnl **********************************************
1464 dnl *** GDefaultMutex setup and initialization ***
1465 dnl **********************************************
1466 dnl
1467 dnl if mutex_has_default = yes, we also got
1468 dnl mutex_default_type, mutex_default_init and mutex_header_file
1469 GLIB_IF_VAR_EQ(mutex_has_default, yes,
1470         glib_save_CPPFLAGS="$CPPFLAGS"
1471         glib_save_LIBS="$LIBS"
1472         LIBS="$LIBS $G_THREAD_LIBS"
1473         CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
1474         GLIB_SIZEOF([#include <$mutex_header_file>],
1475                     $mutex_default_type,
1476                     gmutex,
1477                     )
1478         GLIB_BYTE_CONTENTS([#include <$mutex_header_file>],
1479                            $mutex_default_type,
1480                            gmutex,
1481                            $glib_cv_sizeof_gmutex,
1482                            $mutex_default_init)
1483         if test x"$glib_cv_byte_contents_gmutex" = xno; then
1484                 mutex_has_default=no
1485         fi
1486         CPPFLAGS="$glib_save_CPPFLAGS"
1487         LIBS="$glib_save_LIBS"
1488         ,
1489 )
1490
1491
1492 dnl ****************************************
1493 dnl *** GLib POLL* compatibility defines ***
1494 dnl ****************************************
1495 GLIB_SYSDEFS(
1496 [#include <sys/types.h>
1497 #include <sys/poll.h>],
1498         POLLIN:1 POLLOUT:4 POLLPRI:2 POLLERR:8 POLLHUP:16 POLLNVAL:32,
1499         glibconfig-sysdefs.h,
1500         =)
1501
1502 dnl **********************
1503 dnl *** Win32 API libs ***
1504 dnl **********************
1505
1506 case $host in
1507   *-*-cygwin*)
1508         G_LIBS_EXTRA="-luser32 -lwsock32 -lkernel32"
1509     ;;
1510   *-*-mingw*)
1511         G_LIBS_EXTRA="-lwsock32"
1512     ;;
1513   *)
1514         G_LIBS_EXTRA=""
1515     ;;
1516 esac
1517 AC_SUBST(G_LIBS_EXTRA)
1518
1519 dnl ***********************
1520 dnl *** Tests for iconv ***
1521 dnl ***********************
1522
1523 AC_ARG_WITH(libiconv, [  --with-libiconv=[no/gnu/native] use the libiconv library ],,with_libiconv=maybe)
1524
1525 found_iconv=no
1526 case $with_libiconv in
1527   maybe)
1528     # Check in the C library first
1529     AC_CHECK_FUNC(iconv_open, with_libiconv=no; found_iconv=yes)
1530     # Check if we have GNU libiconv
1531     if test $found_iconv = "no"; then
1532       AC_CHECK_LIB(iconv, libiconv_open, with_libiconv=gnu; found_iconv=yes)
1533     fi
1534     # Check if we have a iconv in -liconv, possibly from vendor
1535     if test $found_iconv = "no"; then
1536       AC_CHECK_LIB(iconv, iconv_open, with_libiconv=native; found_iconv=yes)
1537     fi
1538     ;;
1539   no)
1540     AC_CHECK_FUNC(iconv_open, with_libiconv=no; found_iconv=yes)
1541     ;;
1542   gnu|yes)
1543     AC_CHECK_LIB(iconv, libiconv_open, with_libiconv=gnu; found_iconv=yes)
1544     ;;
1545   native)
1546     AC_CHECK_LIB(iconv, iconv_open, with_libiconv=native; found_iconv=yes)
1547     ;;
1548 esac
1549
1550 if test "x$found_iconv" = "xno" ; then
1551    AC_MSG_ERROR([*** No iconv() implementation found in C library or libiconv])
1552 fi
1553
1554 case $with_libiconv in
1555   gnu)
1556     ICONV_LIBS="-liconv"
1557     AC_DEFINE(USE_LIBICONV_GNU, [Using GNU libiconv])
1558     ;;
1559   native)
1560     ICONV_LIBS="-liconv"
1561     AC_DEFINE(USE_LIBICONV_NATIVE, [Using a native implementation of iconv in a separate library])
1562     ;;
1563 esac
1564 AC_SUBST(ICONV_LIBS)
1565
1566 dnl If the system doesn't define EILSEQ, we should define EILSEQ ourselves
1567 dnl since we need it for g_iconv()
1568
1569 AC_MSG_CHECKING([for EILSEQ])
1570 AC_TRY_COMPILE([
1571 #include <errno.h>
1572 ],
1573 [
1574 int error = EILSEQ;
1575 ], have_eilseq=yes, have_eilseq=no);
1576 AC_MSG_RESULT($have_eilseq)
1577
1578 dnl **************************
1579 dnl *** Checks for gtk-doc ***
1580 dnl **************************
1581
1582 AC_ARG_WITH(html-dir, [  --with-html-dir=PATH    path to installed docs])
1583
1584 if test "x$with_html_dir" = "x" ; then
1585   HTML_DIR='${datadir}/gtk-doc/html'
1586 else
1587   HTML_DIR=$with_html_dir
1588 fi
1589
1590 AC_SUBST(HTML_DIR)
1591
1592 AC_CHECK_PROG(GTKDOC, gtkdoc-mkdb, true, false)
1593
1594 gtk_doc_min_version=0.6
1595 if $GTKDOC ; then 
1596     gtk_doc_version=`gtkdoc-mkdb --version`
1597     AC_MSG_CHECKING([gtk-doc version ($gtk_doc_version) >= $gtk_doc_min_version])
1598     if perl <<EOF ; then
1599       exit (("$gtk_doc_version" =~ /^[[0-9]]+\.[[0-9]]+$/) &&
1600             ("$gtk_doc_version" >= "$gtk_doc_min_version") ? 0 : 1);
1601 EOF
1602       AC_MSG_RESULT(yes)
1603    else
1604       AC_MSG_RESULT(no)
1605       GTKDOC=false
1606    fi
1607 fi
1608
1609 AM_CONDITIONAL(HAVE_GTK_DOC, $GTKDOC)
1610 AC_SUBST(HAVE_GTK_DOC)
1611
1612 AC_CHECK_PROG(DB2HTML, db2html, true, false)
1613 AM_CONDITIONAL(HAVE_DOCBOOK, $DB2HTML)
1614
1615 dnl Let people disable the gtk-doc stuff.
1616 AC_ARG_ENABLE(gtk-doc, [  --enable-gtk-doc        use gtk-doc to build documentation [default=auto]], enable_gtk_doc="$enableval", enable_gtk_doc=auto)
1617
1618 if test x$enable_gtk_doc = xauto ; then
1619   if test x$GTKDOC = xtrue ; then
1620     enable_gtk_doc=yes
1621   else
1622     enable_gtk_doc=no 
1623   fi
1624 fi
1625
1626 dnl NOTE: We need to use a separate automake conditional for this
1627 dnl       to make this work with the tarballs.
1628 AM_CONDITIONAL(ENABLE_GTK_DOC, test x$enable_gtk_doc = xyes)
1629
1630 dnl ******************************
1631 dnl *** output the whole stuff ***
1632 dnl ******************************
1633
1634 AC_OUTPUT_COMMANDS([
1635
1636 ## Generate `glibconfig.h' in two cases
1637 ## 1. `config.status' is run either explicitly, or via configure.
1638 ##     Esp. not when it is run in `Makefile' to generate makefiles and
1639 ##     config.h
1640 ## 2. CONFIG_OTHER is set explicitly
1641 ##
1642 ## Case 1 is difficult.  We know that `automake' sets one of
1643 ## CONFIG_FILES or CONFIG_HEADERS to empty.  This heuristic works
1644 ## only when AM_CONFIG_HEADER is set, however.
1645
1646 if test -n "${CONFIG_FILES}" && test -n "${CONFIG_HEADERS}"; then
1647   # Both CONFIG_FILES and CONFIG_HEADERS are non-empty ==> Case 1
1648   CONFIG_OTHER=${CONFIG_OTHER:-glibconfig.h}
1649 fi
1650 case "$CONFIG_OTHER" in
1651 *glibconfig.h*)
1652         echo creating glibconfig.h
1653         outfile=glibconfig.h-tmp
1654         cat > $outfile <<\_______EOF
1655 /* glibconfig.h
1656  *
1657  * This is a generated file.  Please modify 'configure.in'
1658  */
1659
1660 #ifndef __G_LIBCONFIG_H__
1661 #define __G_LIBCONFIG_H__
1662
1663 #include <glib/gmacros.h>
1664
1665 _______EOF
1666
1667         if test x$glib_limits_h = xyes; then
1668           echo '#include <limits.h>' >> $outfile
1669         fi
1670         if test x$glib_float_h = xyes; then
1671           echo '#include <float.h>' >> $outfile
1672         fi
1673         if test x$glib_values_h = xyes; then
1674           echo '#include <values.h>' >> $outfile
1675         fi
1676         if test "$glib_header_alloca_h" = "yes"; then
1677           echo '#define GLIB_HAVE_ALLOCA_H' >> $outfile
1678         fi
1679         if test x$glib_sys_poll_h = xyes; then
1680           echo '#define GLIB_HAVE_SYS_POLL_H' >> $outfile
1681         fi
1682
1683         cat >> $outfile <<_______EOF
1684
1685 G_BEGIN_DECLS
1686
1687 #define G_MINFLOAT      $glib_mf
1688 #define G_MAXFLOAT      $glib_Mf
1689 #define G_MINDOUBLE     $glib_md
1690 #define G_MAXDOUBLE     $glib_Md
1691 #define G_MINSHORT      $glib_ms
1692 #define G_MAXSHORT      $glib_Ms
1693 #define G_MAXUSHORT     $glib_Mus
1694 #define G_MININT        $glib_mi
1695 #define G_MAXINT        $glib_Mi
1696 #define G_MAXUINT       $glib_Mui
1697 #define G_MINLONG       $glib_ml
1698 #define G_MAXLONG       $glib_Ml
1699 #define G_MAXULONG      $glib_Mul
1700
1701 #define G_MININT64      ((gint64)  0x8000000000000000)
1702 #define G_MAXINT64      ((gint64)  0x7fffffffffffffff)
1703 #define G_MAXUINT64     ((guint64) 0xffffffffffffffff)
1704
1705 _______EOF
1706
1707
1708         ### this should always be true in a modern C/C++ compiler
1709         cat >>$outfile <<_______EOF
1710 typedef signed char gint8;
1711 typedef unsigned char guint8;
1712 _______EOF
1713
1714
1715         if test -n "$gint16"; then
1716           cat >>$outfile <<_______EOF
1717 typedef signed $gint16 gint16;
1718 typedef unsigned $gint16 guint16;
1719 #define G_GINT16_FORMAT $gint16_format
1720 #define G_GUINT16_FORMAT $guint16_format
1721 _______EOF
1722         fi
1723
1724
1725         if test -n "$gint32"; then
1726           cat >>$outfile <<_______EOF
1727 typedef signed $gint32 gint32;
1728 typedef unsigned $gint32 guint32;
1729 #define G_GINT32_FORMAT $gint32_format
1730 #define G_GUINT32_FORMAT $guint32_format
1731 _______EOF
1732         fi
1733
1734         cat >>$outfile <<_______EOF
1735 #define G_HAVE_GINT64 1          /* deprecated, always true */
1736
1737 ${glib_extension}typedef signed $gint64 gint64;
1738 ${glib_extension}typedef unsigned $gint64 guint64;
1739
1740 #define G_GINT64_CONSTANT(val)  $gint64_constant
1741 _______EOF
1742
1743         if test x$gint64_format != x ; then
1744           cat >>$outfile <<_______EOF
1745 #define G_GINT64_FORMAT $gint64_format
1746 #define G_GUINT64_FORMAT $guint64_format
1747 _______EOF
1748         else
1749           cat >>$outfile <<_______EOF
1750 #undef G_GINT64_FORMAT
1751 #undef G_GUINT64_FORMAT
1752 _______EOF
1753         fi           
1754
1755         cat >>$outfile <<_______EOF
1756
1757 #define GLIB_SIZEOF_VOID_P $glib_void_p
1758 #define GLIB_SIZEOF_LONG   $glib_long
1759 #define GLIB_SIZEOF_SIZE_T $glib_size_t
1760
1761 _______EOF
1762
1763         case x$glib_size_t in
1764         x2) echo "typedef gint16  gssize;" >> $outfile
1765             echo "typedef guint16 gsize;"  >> $outfile
1766             ;;
1767         x4) echo "typedef gint32  gssize;" >> $outfile
1768             echo "typedef guint32 gsize;"  >> $outfile
1769             ;;
1770         x8) echo "typedef gint64  gssize;" >> $outfile
1771             echo "typedef guint64 gsize;"  >> $outfile
1772             ;;
1773         *)  echo "#error size of size_t is unknown" >> $outfile
1774             ;;
1775         esac
1776
1777         if test -z "$glib_unknown_void_p"; then
1778           cat >>$outfile <<_______EOF
1779
1780 #define GPOINTER_TO_INT(p)      ((gint)  ${glib_gpi_cast} (p))
1781 #define GPOINTER_TO_UINT(p)     ((guint) ${glib_gpui_cast} (p))
1782
1783 #define GINT_TO_POINTER(i)      ((gpointer) ${glib_gpi_cast} (i))
1784 #define GUINT_TO_POINTER(u)     ((gpointer) ${glib_gpui_cast} (u))
1785 _______EOF
1786         else
1787           echo '#error SIZEOF_VOID_P unknown - This should never happen' >>$outfile
1788         fi
1789
1790
1791
1792         cat >>$outfile <<_______EOF
1793 $glib_atexit
1794 $glib_memmove
1795 $glib_defines
1796 $glib_os
1797
1798 $glib_vacopy
1799
1800 #ifdef  __cplusplus
1801 #define G_HAVE_INLINE   1
1802 #else   /* !__cplusplus */
1803 $glib_inline
1804 #endif  /* !__cplusplus */
1805
1806 _______EOF
1807
1808         if test x$g_have_iso_c_varargs = xyes ; then
1809                 cat >>$outfile <<_______EOF
1810 #ifndef __cplusplus
1811 # define G_HAVE_ISO_VARARGS 1
1812 #endif
1813 _______EOF
1814         fi
1815         if test x$g_have_iso_cxx_varargs = xyes ; then
1816                 cat >>$outfile <<_______EOF
1817 #ifdef __cplusplus
1818 # define G_HAVE_ISO_VARARGS 1
1819 #endif
1820 _______EOF
1821         fi
1822         if test x$g_have_gnuc_varargs = xyes ; then
1823                 cat >>$outfile <<_______EOF
1824
1825 /* gcc-2.95.x supports both gnu style and ISO varargs, but if -ansi
1826  * is passed ISO vararg support is turned off, and there is no work
1827  * around to turn it on, so we unconditionally turn it off.
1828  */
1829 #if __GNUC__ == 2 && __GNUC_MINOR__ == 95
1830 #  undef G_HAVE_ISO_VARARGS
1831 #endif
1832
1833 #define G_HAVE_GNUC_VARARGS 1
1834 _______EOF
1835         fi
1836
1837         case x$g_stack_grows in
1838         xyes) echo "#define G_HAVE_GROWING_STACK 1" >>$outfile ;;
1839         *)    echo "#define G_HAVE_GROWING_STACK 0" >>$outfile ;;
1840         esac
1841
1842
1843         echo >>$outfile
1844         if test x$g_have_eilseq = xno; then
1845                 cat >>$outfile <<_______EOF
1846 #ifndef EILSEQ
1847 /* On some systems, like SunOS and NetBSD, EILSEQ is not defined.
1848  * The correspondence between this and the corresponding definition
1849  * in libiconv is essential.
1850  */
1851 #  define EILSEQ ENOENT
1852 #endif
1853 _______EOF
1854
1855         fi
1856
1857         echo >>$outfile
1858         if test x$g_mutex_has_default = xyes; then
1859                 cat >>$outfile <<_______EOF
1860 $g_enable_threads_def G_THREADS_ENABLED
1861 #define G_THREADS_IMPL_$g_threads_impl_def
1862 typedef struct _GStaticMutex GStaticMutex;
1863 struct _GStaticMutex
1864 {
1865   struct _GMutex *runtime_mutex;
1866   union {
1867     char   pad[$g_mutex_sizeof];
1868     double dummy_double;
1869     void  *dummy_pointer;
1870     long   dummy_long;
1871   } static_mutex;
1872 };
1873 #define G_STATIC_MUTEX_INIT     { NULL, { { $g_mutex_contents} } }
1874 #define g_static_mutex_get_mutex(mutex) \
1875   (g_thread_use_default_impl ? ((GMutex*) &((mutex)->static_mutex)) : \
1876    g_static_mutex_get_mutex_impl (&((mutex)->runtime_mutex)))
1877 _______EOF
1878         else
1879                 cat >>$outfile <<_______EOF
1880 $g_enable_threads_def G_THREADS_ENABLED
1881 #define G_THREADS_IMPL_$g_threads_impl_def
1882 typedef struct _GMutex* GStaticMutex;
1883 #define G_STATIC_MUTEX_INIT NULL
1884 #define g_static_mutex_get_mutex(mutex) (g_static_mutex_get_mutex_impl (mutex))
1885 _______EOF
1886         fi
1887
1888         cat >>$outfile <<_______EOF
1889 /* This represents a system thread as used by the implementation. An
1890  * alien implementaion, as loaded by g_thread_init can only count on
1891  * "sizeof (gpointer)" bytes to store their info. We however need more
1892  * for some of our native implementations. */
1893 typedef union _GSystemThread GSystemThread;
1894 union _GSystemThread
1895 {
1896   char   data[$g_system_thread_sizeof];
1897   double dummy_double;
1898   void  *dummy_pointer;
1899   long   dummy_long;
1900 };
1901 _______EOF
1902
1903         echo >>$outfile
1904         g_bit_sizes="16 32 64"
1905         for bits in $g_bit_sizes; do
1906           cat >>$outfile <<_______EOF
1907 #define GINT${bits}_TO_${g_bs_native}(val)      ((gint${bits}) (val))
1908 #define GUINT${bits}_TO_${g_bs_native}(val)     ((guint${bits}) (val))
1909 #define GINT${bits}_TO_${g_bs_alien}(val)       ((gint${bits}) GUINT${bits}_SWAP_LE_BE (val))
1910 #define GUINT${bits}_TO_${g_bs_alien}(val)      (GUINT${bits}_SWAP_LE_BE (val))
1911 _______EOF
1912         done
1913
1914         cat >>$outfile <<_______EOF
1915 #define GLONG_TO_LE(val)        ((glong) GINT${glongbits}_TO_LE (val))
1916 #define GULONG_TO_LE(val)       ((gulong) GUINT${glongbits}_TO_LE (val))
1917 #define GLONG_TO_BE(val)        ((glong) GINT${glongbits}_TO_BE (val))
1918 #define GULONG_TO_BE(val)       ((gulong) GUINT${glongbits}_TO_BE (val))
1919 #define GINT_TO_LE(val)         ((gint) GINT${gintbits}_TO_LE (val))
1920 #define GUINT_TO_LE(val)        ((guint) GUINT${gintbits}_TO_LE (val))
1921 #define GINT_TO_BE(val)         ((gint) GINT${gintbits}_TO_BE (val))
1922 #define GUINT_TO_BE(val)        ((guint) GUINT${gintbits}_TO_BE (val))
1923 #define G_BYTE_ORDER $g_byte_order
1924
1925 _______EOF
1926
1927         if test -r glibconfig-sysdefs.h; then
1928           cat glibconfig-sysdefs.h >>$outfile
1929         fi
1930
1931         cat >>$outfile <<_______EOF
1932
1933 #define G_MODULE_SUFFIX "$g_module_suffix"
1934
1935 G_END_DECLS
1936
1937 #endif /* GLIBCONFIG_H */
1938 _______EOF
1939
1940
1941         if cmp -s $outfile glibconfig.h; then
1942           echo glibconfig.h is unchanged
1943           rm -f $outfile
1944         else
1945           mv $outfile glibconfig.h
1946         fi ;;
1947 esac
1948 ],[
1949
1950 # Note that if two cases are the same, case goes with the first one.
1951 # Note also that this is inside an AC_OUTPUT_COMMAND.  We do not depend
1952 # on variable expansion in case labels.  Look at the generated config.status
1953 # for a hint.
1954
1955 if test "x${ac_cv_working_alloca_h+set}" = xset ; then
1956   glib_header_alloca_h="$ac_cv_working_alloca_h"
1957 else
1958   glib_header_alloca_h="$ac_cv_header_alloca_h"
1959 fi
1960
1961 case xyes in
1962 x$ac_cv_header_float_h)
1963   glib_float_h=yes
1964   glib_mf=FLT_MIN glib_Mf=FLT_MAX
1965   glib_md=DBL_MIN glib_Md=DBL_MAX
1966   ;;
1967 x$ac_cv_header_values_h)
1968   glib_values_h=yes
1969   glib_mf=MINFLOAT  glib_Mf=MAXFLOAT
1970   glib_md=MINDOUBLE glib_Md=MAXDOUBLE
1971   ;;
1972 esac
1973
1974 case xyes in
1975 x$ac_cv_header_limits_h)
1976   glib_limits_h=yes
1977   glib_ms=SHRT_MIN glib_Ms=SHRT_MAX glib_Mus=USHRT_MAX
1978   glib_mi=INT_MIN  glib_Mi=INT_MAX  glib_Mui=UINT_MAX
1979   glib_ml=LONG_MIN glib_Ml=LONG_MAX glib_Mul=ULONG_MAX
1980   ;;
1981 x$ac_cv_header_values_h)
1982   glib_values_h=yes
1983   glib_ms=MINSHORT glib_Ms=MAXSHORT glib_Mus="(((gushort)G_MAXSHORT)*2+1)"
1984   glib_mi=MININT   glib_Mi=MAXINT   glib_Mui="(((guint)G_MAXINT)*2+1)"
1985   glib_ml=MINLONG  glib_Ml=MAXLONG  glib_Mul="(((gulong)G_MAXLONG)*2+1)"
1986   ;;
1987 esac
1988
1989 if test x$ac_cv_header_sys_poll_h = xyes ; then
1990   glib_sys_poll_h=yes
1991 fi
1992
1993 case 2 in
1994 $ac_cv_sizeof_short)            
1995   gint16=short
1996   gint16_format='"hi"'
1997   guint16_format='"hu"'
1998   ;;
1999 $ac_cv_sizeof_int)              
2000   gint16=int
2001   gint16_format='"i"'
2002   guint16_format='"u"'
2003   ;;
2004 esac
2005 case 4 in
2006 $ac_cv_sizeof_short)            
2007   gint32=short
2008   gint32_format='"hi"'
2009   guint32_format='"hu"'
2010   ;;
2011 $ac_cv_sizeof_int)              
2012   gint32=int
2013   gint32_format='"i"'
2014   guint32_format='"u"'
2015   ;;
2016 $ac_cv_sizeof_long)             
2017   gint32=long
2018   gint32_format='"li"'
2019   guint32_format='"lu"'
2020   ;;
2021 esac
2022 case 8 in
2023 $ac_cv_sizeof_int)
2024   gint64=int
2025   gint64_format='"i"'
2026   guint64_format='"u"'
2027   glib_extension=
2028   gint64_constant='(val)'
2029   ;;
2030 $ac_cv_sizeof_long)
2031   gint64=long
2032   gint64_format='"li"'
2033   guint64_format='"lu"'
2034   glib_extension=
2035   gint64_constant='(val##L)'
2036   ;;
2037 $ac_cv_sizeof_long_long)
2038   gint64='long long'
2039   if test -n "$glib_cv_long_long_format"; then
2040     gint64_format='"'$glib_cv_long_long_format'i"'
2041     guint64_format='"'$glib_cv_long_long_format'u"'
2042   fi
2043   glib_extension='G_GNUC_EXTENSION '
2044   gint64_constant='(G_GNUC_EXTENSION (val##LL))'
2045   ;;
2046 $ac_cv_sizeof___int64)
2047   gint64='__int64'
2048   if test -n "$glib_cv_long_long_format"; then
2049     gint64_format='"'$glib_cv_long_long_format'i"'
2050     guint64_format='"'$glib_cv_long_long_format'u"'
2051   fi
2052   glib_extension=
2053   gint64_constant='(val##i64)'
2054   ;;
2055 esac
2056 glib_size_t=$glib_cv_sizeof_size_t
2057 glib_void_p=$ac_cv_sizeof_long
2058 glib_long=$ac_cv_sizeof_void_p
2059
2060 gintbits=`expr $ac_cv_sizeof_int \* 8`
2061 glongbits=`expr $ac_cv_sizeof_long \* 8`
2062
2063
2064 case $ac_cv_sizeof_void_p in
2065 $ac_cv_sizeof_int)      glib_gpi_cast=''        glib_gpui_cast=''         ;;
2066 $ac_cv_sizeof_long)     glib_gpi_cast='(glong)' glib_gpui_cast='(gulong)' ;;
2067 *)                      glib_unknown_void_p=yes ;;
2068 esac
2069
2070
2071 case xyes in
2072 x$ac_cv_func_atexit)
2073   glib_atexit="
2074 #ifdef NeXT /* @#%@! NeXTStep */
2075 # define g_ATEXIT(proc) (!atexit (proc))
2076 #else
2077 # define g_ATEXIT(proc) (atexit (proc))
2078 #endif"
2079   ;;
2080 x$ac_cv_func_on_exit)
2081   glib_atexit="
2082 #define g_ATEXIT(proc)  (on_exit ((void (*)(int, void*))(proc), NULL))"
2083   ;;
2084 esac
2085
2086 case xyes in
2087 x$ac_cv_func_memmove)
2088   glib_memmove='
2089 #define g_memmove(d,s,n) G_STMT_START { memmove ((d), (s), (n)); } G_STMT_END'
2090   ;;
2091 x$glib_cv_working_bcopy)
2092   glib_memmove="
2093 /* memmove isn't available, but bcopy can copy overlapping memory regions */
2094 #define g_memmove(d,s,n) G_STMT_START { bcopy ((s), (d), (n)); } G_STMT_END"
2095   ;;
2096 *)  
2097   glib_memmove="
2098 /* memmove isn't found and bcopy can't copy overlapping memory regions, 
2099  * so we have to roll our own copy routine. */
2100 void g_memmove (void* dest, const void * src, unsigned long len);"
2101   ;;
2102 esac
2103
2104 glib_defines="
2105 #define GLIB_MAJOR_VERSION $GLIB_MAJOR_VERSION
2106 #define GLIB_MINOR_VERSION $GLIB_MINOR_VERSION
2107 #define GLIB_MICRO_VERSION $GLIB_MICRO_VERSION
2108 "
2109
2110 case xyes in
2111 x$glib_cv_va_copy)      glib_vacopy='#define G_VA_COPY  va_copy' ;;
2112 x$glib_cv___va_copy)    glib_vacopy='#define G_VA_COPY  __va_copy' ;;
2113 *)                      glib_vacopy=''
2114 esac
2115
2116 if test x$glib_cv_va_val_copy = xno; then
2117   glib_vacopy="\$glib_vacopy
2118 #define G_VA_COPY_AS_ARRAY 1"
2119 fi
2120
2121 if test x$glib_cv_hasinline = xyes; then
2122     glib_inline='#define G_HAVE_INLINE 1'
2123 fi
2124 if test x$glib_cv_has__inline = xyes; then
2125     glib_inline="\$glib_inline
2126 #define G_HAVE___INLINE 1"
2127 fi
2128 if test x$glib_cv_has__inline__ = xyes; then
2129     glib_inline="\$glib_inline
2130 #define G_HAVE___INLINE__ 1"
2131 fi
2132
2133 g_have_gnuc_varargs=$g_have_gnuc_varargs
2134 g_have_iso_c_varargs=$g_have_iso_c_varargs
2135 g_have_iso_cxx_varargs=$g_have_iso_cxx_varargs
2136
2137 case xyes in
2138 x$ac_cv_c_bigendian)
2139   g_byte_order=G_BIG_ENDIAN
2140   g_bs_native=BE
2141   g_bs_alien=LE
2142   ;;
2143 *)
2144   g_byte_order=G_LITTLE_ENDIAN
2145   g_bs_native=LE
2146   g_bs_alien=BE
2147   ;;
2148 esac
2149
2150 g_stack_grows=$glib_cv_stack_grows
2151
2152 g_have_eilseq=$have_eilseq
2153
2154 case x$have_threads in
2155 xno)    g_enable_threads_def="#undef";;
2156 *)      g_enable_threads_def="#define";;
2157 esac
2158
2159 g_threads_impl_def=$g_threads_impl
2160
2161 g_mutex_has_default="$mutex_has_default"
2162 g_mutex_sizeof="$glib_cv_sizeof_gmutex"
2163 g_system_thread_sizeof="$glib_cv_sizeof_system_thread"
2164 g_mutex_contents="$glib_cv_byte_contents_gmutex"
2165
2166 g_module_suffix="$glib_gmodule_suffix"
2167
2168 case $host in
2169   *-*-beos*)
2170     glib_os="#define G_OS_BEOS"
2171     ;;
2172   *-*-cygwin*)
2173     glib_os="#define G_OS_UNIX
2174 #define G_PLATFORM_WIN32
2175 #define G_WITH_CYGWIN"
2176     ;;
2177   *-*-mingw*)
2178     glib_os="#define G_OS_WIN32
2179 #define G_PLATFORM_WIN32"
2180     ;;
2181   *)
2182     glib_os="#define G_OS_UNIX"
2183     ;;
2184 esac
2185 ])
2186
2187 AC_OUTPUT([
2188 glib-2.0.pc
2189 glib-2.0-uninstalled.pc
2190 gmodule-2.0.pc
2191 gmodule-2.0-uninstalled.pc
2192 gthread-2.0.pc
2193 gthread-2.0-uninstalled.pc
2194 gobject-2.0.pc
2195 gobject-2.0-uninstalled.pc
2196 glib.spec
2197 glib-zip
2198 glib-gettextize
2199 Makefile
2200 build/Makefile
2201 build/win32/Makefile
2202 build/win32/dirent/Makefile
2203 glib/Makefile
2204 glib/libcharset/Makefile
2205 gmodule/gmoduleconf.h
2206 gmodule/Makefile
2207 gobject/Makefile
2208 gobject/glib-mkenums
2209 gthread/Makefile
2210 po/Makefile.in
2211 docs/Makefile
2212 docs/reference/Makefile
2213 docs/reference/glib/Makefile
2214 docs/reference/gobject/Makefile
2215 tests/Makefile
2216 m4macros/Makefile
2217 ])