ed Feb 20 22:35:42 2002 Owen Taylor <otaylor@redhat.com>
[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=14
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          use the libiconv library ],,with_libiconv=maybe)
1524
1525 found_iconv=no
1526
1527 if test "x$with_libiconv" != "xyes" ; then
1528    # 
1529    # Check in the C library 
1530    #
1531    AC_CHECK_FUNC(iconv_open, with_libiconv=no; found_iconv=yes)
1532 fi
1533
1534 if test "x$with_libiconv" != "xno" ; then
1535    #
1536    # Check for libiconv
1537    #
1538    AC_CHECK_LIB(iconv, libiconv_open, with_libiconv=yes; found_iconv=yes)
1539 fi
1540
1541 if test "x$found_iconv" = "xno" ; then
1542    AC_MSG_ERROR([*** No iconv() implementation found in C library or libiconv])
1543 fi
1544
1545 if test "x$with_libiconv" = "xyes" ; then
1546   ICONV_LIBS="-liconv"
1547   AC_DEFINE(USE_LIBICONV)
1548 fi
1549 AC_SUBST(ICONV_LIBS)
1550
1551 dnl If the system doesn't define EILSEQ, we should define EILSEQ ourselves
1552 dnl since we need it for g_iconv()
1553
1554 AC_MSG_CHECKING([for EILSEQ])
1555 AC_TRY_COMPILE([
1556 #include <errno.h>
1557 ],
1558 [
1559 int error = EILSEQ;
1560 ], have_eilseq=yes, have_eilseq=no);
1561 AC_MSG_RESULT($have_eilseq)
1562
1563 dnl **************************
1564 dnl *** Checks for gtk-doc ***
1565 dnl **************************
1566
1567 AC_ARG_WITH(html-dir, [  --with-html-dir=PATH    path to installed docs])
1568
1569 if test "x$with_html_dir" = "x" ; then
1570   HTML_DIR='${datadir}/gtk-doc/html'
1571 else
1572   HTML_DIR=$with_html_dir
1573 fi
1574
1575 AC_SUBST(HTML_DIR)
1576
1577 AC_CHECK_PROG(GTKDOC, gtkdoc-mkdb, true, false)
1578
1579 gtk_doc_min_version=0.6
1580 if $GTKDOC ; then 
1581     gtk_doc_version=`gtkdoc-mkdb --version`
1582     AC_MSG_CHECKING([gtk-doc version ($gtk_doc_version) >= $gtk_doc_min_version])
1583     if perl <<EOF ; then
1584       exit (("$gtk_doc_version" =~ /^[[0-9]]+\.[[0-9]]+$/) &&
1585             ("$gtk_doc_version" >= "$gtk_doc_min_version") ? 0 : 1);
1586 EOF
1587       AC_MSG_RESULT(yes)
1588    else
1589       AC_MSG_RESULT(no)
1590       GTKDOC=false
1591    fi
1592 fi
1593
1594 AM_CONDITIONAL(HAVE_GTK_DOC, $GTKDOC)
1595 AC_SUBST(HAVE_GTK_DOC)
1596
1597 AC_CHECK_PROG(DB2HTML, db2html, true, false)
1598 AM_CONDITIONAL(HAVE_DOCBOOK, $DB2HTML)
1599
1600 dnl Let people disable the gtk-doc stuff.
1601 AC_ARG_ENABLE(gtk-doc, [  --enable-gtk-doc        use gtk-doc to build documentation [default=auto]], enable_gtk_doc="$enableval", enable_gtk_doc=auto)
1602
1603 if test x$enable_gtk_doc = xauto ; then
1604   if test x$GTKDOC = xtrue ; then
1605     enable_gtk_doc=yes
1606   else
1607     enable_gtk_doc=no 
1608   fi
1609 fi
1610
1611 dnl NOTE: We need to use a separate automake conditional for this
1612 dnl       to make this work with the tarballs.
1613 AM_CONDITIONAL(ENABLE_GTK_DOC, test x$enable_gtk_doc = xyes)
1614
1615 dnl ******************************
1616 dnl *** output the whole stuff ***
1617 dnl ******************************
1618
1619 AC_OUTPUT_COMMANDS([
1620
1621 ## Generate `glibconfig.h' in two cases
1622 ## 1. `config.status' is run either explicitly, or via configure.
1623 ##     Esp. not when it is run in `Makefile' to generate makefiles and
1624 ##     config.h
1625 ## 2. CONFIG_OTHER is set explicitly
1626 ##
1627 ## Case 1 is difficult.  We know that `automake' sets one of
1628 ## CONFIG_FILES or CONFIG_HEADERS to empty.  This heuristic works
1629 ## only when AM_CONFIG_HEADER is set, however.
1630
1631 if test -n "${CONFIG_FILES}" && test -n "${CONFIG_HEADERS}"; then
1632   # Both CONFIG_FILES and CONFIG_HEADERS are non-empty ==> Case 1
1633   CONFIG_OTHER=${CONFIG_OTHER:-glibconfig.h}
1634 fi
1635 case "$CONFIG_OTHER" in
1636 *glibconfig.h*)
1637         echo creating glibconfig.h
1638         outfile=glibconfig.h-tmp
1639         cat > $outfile <<\_______EOF
1640 /* glibconfig.h
1641  *
1642  * This is a generated file.  Please modify 'configure.in'
1643  */
1644
1645 #ifndef __G_LIBCONFIG_H__
1646 #define __G_LIBCONFIG_H__
1647
1648 #include <glib/gmacros.h>
1649
1650 _______EOF
1651
1652         if test x$glib_limits_h = xyes; then
1653           echo '#include <limits.h>' >> $outfile
1654         fi
1655         if test x$glib_float_h = xyes; then
1656           echo '#include <float.h>' >> $outfile
1657         fi
1658         if test x$glib_values_h = xyes; then
1659           echo '#include <values.h>' >> $outfile
1660         fi
1661         if test "$glib_header_alloca_h" = "yes"; then
1662           echo '#define GLIB_HAVE_ALLOCA_H' >> $outfile
1663         fi
1664         if test x$glib_sys_poll_h = xyes; then
1665           echo '#define GLIB_HAVE_SYS_POLL_H' >> $outfile
1666         fi
1667
1668         cat >> $outfile <<_______EOF
1669
1670 G_BEGIN_DECLS
1671
1672 #define G_MINFLOAT      $glib_mf
1673 #define G_MAXFLOAT      $glib_Mf
1674 #define G_MINDOUBLE     $glib_md
1675 #define G_MAXDOUBLE     $glib_Md
1676 #define G_MINSHORT      $glib_ms
1677 #define G_MAXSHORT      $glib_Ms
1678 #define G_MAXUSHORT     $glib_Mus
1679 #define G_MININT        $glib_mi
1680 #define G_MAXINT        $glib_Mi
1681 #define G_MAXUINT       $glib_Mui
1682 #define G_MINLONG       $glib_ml
1683 #define G_MAXLONG       $glib_Ml
1684 #define G_MAXULONG      $glib_Mul
1685
1686 #define G_MININT64      ((gint64)  0x8000000000000000)
1687 #define G_MAXINT64      ((gint64)  0x7fffffffffffffff)
1688 #define G_MAXUINT64     ((guint64) 0xffffffffffffffff)
1689
1690 _______EOF
1691
1692
1693         ### this should always be true in a modern C/C++ compiler
1694         cat >>$outfile <<_______EOF
1695 typedef signed char gint8;
1696 typedef unsigned char guint8;
1697 _______EOF
1698
1699
1700         if test -n "$gint16"; then
1701           cat >>$outfile <<_______EOF
1702 typedef signed $gint16 gint16;
1703 typedef unsigned $gint16 guint16;
1704 #define G_GINT16_FORMAT $gint16_format
1705 #define G_GUINT16_FORMAT $guint16_format
1706 _______EOF
1707         fi
1708
1709
1710         if test -n "$gint32"; then
1711           cat >>$outfile <<_______EOF
1712 typedef signed $gint32 gint32;
1713 typedef unsigned $gint32 guint32;
1714 #define G_GINT32_FORMAT $gint32_format
1715 #define G_GUINT32_FORMAT $guint32_format
1716 _______EOF
1717         fi
1718
1719         cat >>$outfile <<_______EOF
1720 #define G_HAVE_GINT64 1          /* deprecated, always true */
1721
1722 ${glib_extension}typedef signed $gint64 gint64;
1723 ${glib_extension}typedef unsigned $gint64 guint64;
1724
1725 #define G_GINT64_CONSTANT(val)  $gint64_constant
1726 _______EOF
1727
1728         if test x$gint64_format != x ; then
1729           cat >>$outfile <<_______EOF
1730 #define G_GINT64_FORMAT $gint64_format
1731 #define G_GUINT64_FORMAT $guint64_format
1732 _______EOF
1733         else
1734           cat >>$outfile <<_______EOF
1735 #undef G_GINT64_FORMAT
1736 #undef G_GUINT64_FORMAT
1737 _______EOF
1738         fi           
1739
1740         cat >>$outfile <<_______EOF
1741
1742 #define GLIB_SIZEOF_VOID_P $glib_void_p
1743 #define GLIB_SIZEOF_LONG   $glib_long
1744 #define GLIB_SIZEOF_SIZE_T $glib_size_t
1745
1746 _______EOF
1747
1748         case x$glib_size_t in
1749         x2) echo "typedef gint16  gssize;" >> $outfile
1750             echo "typedef guint16 gsize;"  >> $outfile
1751             ;;
1752         x4) echo "typedef gint32  gssize;" >> $outfile
1753             echo "typedef guint32 gsize;"  >> $outfile
1754             ;;
1755         x8) echo "typedef gint64  gssize;" >> $outfile
1756             echo "typedef guint64 gsize;"  >> $outfile
1757             ;;
1758         *)  echo "#error size of size_t is unknown" >> $outfile
1759             ;;
1760         esac
1761
1762         if test -z "$glib_unknown_void_p"; then
1763           cat >>$outfile <<_______EOF
1764
1765 #define GPOINTER_TO_INT(p)      ((gint)  ${glib_gpi_cast} (p))
1766 #define GPOINTER_TO_UINT(p)     ((guint) ${glib_gpui_cast} (p))
1767
1768 #define GINT_TO_POINTER(i)      ((gpointer) ${glib_gpi_cast} (i))
1769 #define GUINT_TO_POINTER(u)     ((gpointer) ${glib_gpui_cast} (u))
1770 _______EOF
1771         else
1772           echo '#error SIZEOF_VOID_P unknown - This should never happen' >>$outfile
1773         fi
1774
1775
1776
1777         cat >>$outfile <<_______EOF
1778 $glib_atexit
1779 $glib_memmove
1780 $glib_defines
1781 $glib_os
1782
1783 $glib_vacopy
1784
1785 #ifdef  __cplusplus
1786 #define G_HAVE_INLINE   1
1787 #else   /* !__cplusplus */
1788 $glib_inline
1789 #endif  /* !__cplusplus */
1790
1791 _______EOF
1792
1793         if test x$g_have_iso_c_varargs = xyes ; then
1794                 cat >>$outfile <<_______EOF
1795 #ifndef __cplusplus
1796 # define G_HAVE_ISO_VARARGS 1
1797 #endif
1798 _______EOF
1799         fi
1800         if test x$g_have_iso_cxx_varargs = xyes ; then
1801                 cat >>$outfile <<_______EOF
1802 #ifdef __cplusplus
1803 # define G_HAVE_ISO_VARARGS 1
1804 #endif
1805 _______EOF
1806         fi
1807         if test x$g_have_gnuc_varargs = xyes ; then
1808                 cat >>$outfile <<_______EOF
1809
1810 /* gcc-2.95.x supports both gnu style and ISO varargs, but if -ansi
1811  * is passed ISO vararg support is turned off, and there is no work
1812  * around to turn it on, so we unconditionally turn it off.
1813  */
1814 #if __GNUC__ == 2 && __GNUC_MINOR__ == 95
1815 #  undef G_HAVE_ISO_VARARGS
1816 #endif
1817
1818 #define G_HAVE_GNUC_VARARGS 1
1819 _______EOF
1820         fi
1821
1822         case x$g_stack_grows in
1823         xyes) echo "#define G_HAVE_GROWING_STACK 1" >>$outfile ;;
1824         *)    echo "#define G_HAVE_GROWING_STACK 0" >>$outfile ;;
1825         esac
1826
1827
1828         echo >>$outfile
1829         if test x$g_have_eilseq = xno; then
1830                 cat >>$outfile <<_______EOF
1831 #ifndef EILSEQ
1832 /* On some systems, like SunOS and NetBSD, EILSEQ is not defined.
1833  * The correspondence between this and the corresponding definition
1834  * in libiconv is essential.
1835  */
1836 #  define EILSEQ ENOENT
1837 #endif
1838 _______EOF
1839
1840         fi
1841
1842         echo >>$outfile
1843         if test x$g_mutex_has_default = xyes; then
1844                 cat >>$outfile <<_______EOF
1845 $g_enable_threads_def G_THREADS_ENABLED
1846 #define G_THREADS_IMPL_$g_threads_impl_def
1847 typedef struct _GStaticMutex GStaticMutex;
1848 struct _GStaticMutex
1849 {
1850   struct _GMutex *runtime_mutex;
1851   union {
1852     char   pad[$g_mutex_sizeof];
1853     double dummy_double;
1854     void  *dummy_pointer;
1855     long   dummy_long;
1856   } static_mutex;
1857 };
1858 #define G_STATIC_MUTEX_INIT     { NULL, { { $g_mutex_contents} } }
1859 #define g_static_mutex_get_mutex(mutex) \
1860   (g_thread_use_default_impl ? ((GMutex*) &((mutex)->static_mutex)) : \
1861    g_static_mutex_get_mutex_impl (&((mutex)->runtime_mutex)))
1862 _______EOF
1863         else
1864                 cat >>$outfile <<_______EOF
1865 $g_enable_threads_def G_THREADS_ENABLED
1866 #define G_THREADS_IMPL_$g_threads_impl_def
1867 typedef struct _GMutex* GStaticMutex;
1868 #define G_STATIC_MUTEX_INIT NULL
1869 #define g_static_mutex_get_mutex(mutex) (g_static_mutex_get_mutex_impl (mutex))
1870 _______EOF
1871         fi
1872
1873         cat >>$outfile <<_______EOF
1874 /* This represents a system thread as used by the implementation. An
1875  * alien implementaion, as loaded by g_thread_init can only count on
1876  * "sizeof (gpointer)" bytes to store their info. We however need more
1877  * for some of our native implementations. */
1878 typedef union _GSystemThread GSystemThread;
1879 union _GSystemThread
1880 {
1881   char   data[$g_system_thread_sizeof];
1882   double dummy_double;
1883   void  *dummy_pointer;
1884   long   dummy_long;
1885 };
1886 _______EOF
1887
1888         echo >>$outfile
1889         g_bit_sizes="16 32 64"
1890         for bits in $g_bit_sizes; do
1891           cat >>$outfile <<_______EOF
1892 #define GINT${bits}_TO_${g_bs_native}(val)      ((gint${bits}) (val))
1893 #define GUINT${bits}_TO_${g_bs_native}(val)     ((guint${bits}) (val))
1894 #define GINT${bits}_TO_${g_bs_alien}(val)       ((gint${bits}) GUINT${bits}_SWAP_LE_BE (val))
1895 #define GUINT${bits}_TO_${g_bs_alien}(val)      (GUINT${bits}_SWAP_LE_BE (val))
1896 _______EOF
1897         done
1898
1899         cat >>$outfile <<_______EOF
1900 #define GLONG_TO_LE(val)        ((glong) GINT${glongbits}_TO_LE (val))
1901 #define GULONG_TO_LE(val)       ((gulong) GUINT${glongbits}_TO_LE (val))
1902 #define GLONG_TO_BE(val)        ((glong) GINT${glongbits}_TO_BE (val))
1903 #define GULONG_TO_BE(val)       ((gulong) GUINT${glongbits}_TO_BE (val))
1904 #define GINT_TO_LE(val)         ((gint) GINT${gintbits}_TO_LE (val))
1905 #define GUINT_TO_LE(val)        ((guint) GUINT${gintbits}_TO_LE (val))
1906 #define GINT_TO_BE(val)         ((gint) GINT${gintbits}_TO_BE (val))
1907 #define GUINT_TO_BE(val)        ((guint) GUINT${gintbits}_TO_BE (val))
1908 #define G_BYTE_ORDER $g_byte_order
1909
1910 _______EOF
1911
1912         if test -r glibconfig-sysdefs.h; then
1913           cat glibconfig-sysdefs.h >>$outfile
1914         fi
1915
1916         cat >>$outfile <<_______EOF
1917
1918 #define G_MODULE_SUFFIX "$g_module_suffix"
1919
1920 G_END_DECLS
1921
1922 #endif /* GLIBCONFIG_H */
1923 _______EOF
1924
1925
1926         if cmp -s $outfile glibconfig.h; then
1927           echo glibconfig.h is unchanged
1928           rm -f $outfile
1929         else
1930           mv $outfile glibconfig.h
1931         fi ;;
1932 esac
1933 ],[
1934
1935 # Note that if two cases are the same, case goes with the first one.
1936 # Note also that this is inside an AC_OUTPUT_COMMAND.  We do not depend
1937 # on variable expansion in case labels.  Look at the generated config.status
1938 # for a hint.
1939
1940 if test "x${ac_cv_working_alloca_h+set}" = xset ; then
1941   glib_header_alloca_h="$ac_cv_working_alloca_h"
1942 else
1943   glib_header_alloca_h="$ac_cv_header_alloca_h"
1944 fi
1945
1946 case xyes in
1947 x$ac_cv_header_float_h)
1948   glib_float_h=yes
1949   glib_mf=FLT_MIN glib_Mf=FLT_MAX
1950   glib_md=DBL_MIN glib_Md=DBL_MAX
1951   ;;
1952 x$ac_cv_header_values_h)
1953   glib_values_h=yes
1954   glib_mf=MINFLOAT  glib_Mf=MAXFLOAT
1955   glib_md=MINDOUBLE glib_Md=MAXDOUBLE
1956   ;;
1957 esac
1958
1959 case xyes in
1960 x$ac_cv_header_limits_h)
1961   glib_limits_h=yes
1962   glib_ms=SHRT_MIN glib_Ms=SHRT_MAX glib_Mus=USHRT_MAX
1963   glib_mi=INT_MIN  glib_Mi=INT_MAX  glib_Mui=UINT_MAX
1964   glib_ml=LONG_MIN glib_Ml=LONG_MAX glib_Mul=ULONG_MAX
1965   ;;
1966 x$ac_cv_header_values_h)
1967   glib_values_h=yes
1968   glib_ms=MINSHORT glib_Ms=MAXSHORT glib_Mus="(((gushort)G_MAXSHORT)*2+1)"
1969   glib_mi=MININT   glib_Mi=MAXINT   glib_Mui="(((guint)G_MAXINT)*2+1)"
1970   glib_ml=MINLONG  glib_Ml=MAXLONG  glib_Mul="(((gulong)G_MAXLONG)*2+1)"
1971   ;;
1972 esac
1973
1974 if test x$ac_cv_header_sys_poll_h = xyes ; then
1975   glib_sys_poll_h=yes
1976 fi
1977
1978 case 2 in
1979 $ac_cv_sizeof_short)            
1980   gint16=short
1981   gint16_format='"hi"'
1982   guint16_format='"hu"'
1983   ;;
1984 $ac_cv_sizeof_int)              
1985   gint16=int
1986   gint16_format='"i"'
1987   guint16_format='"u"'
1988   ;;
1989 esac
1990 case 4 in
1991 $ac_cv_sizeof_short)            
1992   gint32=short
1993   gint32_format='"hi"'
1994   guint32_format='"hu"'
1995   ;;
1996 $ac_cv_sizeof_int)              
1997   gint32=int
1998   gint32_format='"i"'
1999   guint32_format='"u"'
2000   ;;
2001 $ac_cv_sizeof_long)             
2002   gint32=long
2003   gint32_format='"li"'
2004   guint32_format='"lu"'
2005   ;;
2006 esac
2007 case 8 in
2008 $ac_cv_sizeof_int)
2009   gint64=int
2010   gint64_format='"i"'
2011   guint64_format='"u"'
2012   glib_extension=
2013   gint64_constant='(val)'
2014   ;;
2015 $ac_cv_sizeof_long)
2016   gint64=long
2017   gint64_format='"li"'
2018   guint64_format='"lu"'
2019   glib_extension=
2020   gint64_constant='(val##L)'
2021   ;;
2022 $ac_cv_sizeof_long_long)
2023   gint64='long long'
2024   if test -n "$glib_cv_long_long_format"; then
2025     gint64_format='"'$glib_cv_long_long_format'i"'
2026     guint64_format='"'$glib_cv_long_long_format'u"'
2027   fi
2028   glib_extension='G_GNUC_EXTENSION '
2029   gint64_constant='(G_GNUC_EXTENSION (val##LL))'
2030   ;;
2031 $ac_cv_sizeof___int64)
2032   gint64='__int64'
2033   if test -n "$glib_cv_long_long_format"; then
2034     gint64_format='"'$glib_cv_long_long_format'i"'
2035     guint64_format='"'$glib_cv_long_long_format'u"'
2036   fi
2037   glib_extension=
2038   gint64_constant='(val##i64)'
2039   ;;
2040 esac
2041 glib_size_t=$glib_cv_sizeof_size_t
2042 glib_void_p=$ac_cv_sizeof_long
2043 glib_long=$ac_cv_sizeof_void_p
2044
2045 gintbits=`expr $ac_cv_sizeof_int \* 8`
2046 glongbits=`expr $ac_cv_sizeof_long \* 8`
2047
2048
2049 case $ac_cv_sizeof_void_p in
2050 $ac_cv_sizeof_int)      glib_gpi_cast=''        glib_gpui_cast=''         ;;
2051 $ac_cv_sizeof_long)     glib_gpi_cast='(glong)' glib_gpui_cast='(gulong)' ;;
2052 *)                      glib_unknown_void_p=yes ;;
2053 esac
2054
2055
2056 case xyes in
2057 x$ac_cv_func_atexit)
2058   glib_atexit="
2059 #ifdef NeXT /* @#%@! NeXTStep */
2060 # define g_ATEXIT(proc) (!atexit (proc))
2061 #else
2062 # define g_ATEXIT(proc) (atexit (proc))
2063 #endif"
2064   ;;
2065 x$ac_cv_func_on_exit)
2066   glib_atexit="
2067 #define g_ATEXIT(proc)  (on_exit ((void (*)(int, void*))(proc), NULL))"
2068   ;;
2069 esac
2070
2071 case xyes in
2072 x$ac_cv_func_memmove)
2073   glib_memmove='
2074 #define g_memmove(d,s,n) G_STMT_START { memmove ((d), (s), (n)); } G_STMT_END'
2075   ;;
2076 x$glib_cv_working_bcopy)
2077   glib_memmove="
2078 /* memmove isn't available, but bcopy can copy overlapping memory regions */
2079 #define g_memmove(d,s,n) G_STMT_START { bcopy ((s), (d), (n)); } G_STMT_END"
2080   ;;
2081 *)  
2082   glib_memmove="
2083 /* memmove isn't found and bcopy can't copy overlapping memory regions, 
2084  * so we have to roll our own copy routine. */
2085 void g_memmove (void* dest, const void * src, unsigned long len);"
2086   ;;
2087 esac
2088
2089 glib_defines="
2090 #define GLIB_MAJOR_VERSION $GLIB_MAJOR_VERSION
2091 #define GLIB_MINOR_VERSION $GLIB_MINOR_VERSION
2092 #define GLIB_MICRO_VERSION $GLIB_MICRO_VERSION
2093 "
2094
2095 case xyes in
2096 x$glib_cv_va_copy)      glib_vacopy='#define G_VA_COPY  va_copy' ;;
2097 x$glib_cv___va_copy)    glib_vacopy='#define G_VA_COPY  __va_copy' ;;
2098 *)                      glib_vacopy=''
2099 esac
2100
2101 if test x$glib_cv_va_val_copy = xno; then
2102   glib_vacopy="\$glib_vacopy
2103 #define G_VA_COPY_AS_ARRAY 1"
2104 fi
2105
2106 if test x$glib_cv_hasinline = xyes; then
2107     glib_inline='#define G_HAVE_INLINE 1'
2108 fi
2109 if test x$glib_cv_has__inline = xyes; then
2110     glib_inline="\$glib_inline
2111 #define G_HAVE___INLINE 1"
2112 fi
2113 if test x$glib_cv_has__inline__ = xyes; then
2114     glib_inline="\$glib_inline
2115 #define G_HAVE___INLINE__ 1"
2116 fi
2117
2118 g_have_gnuc_varargs=$g_have_gnuc_varargs
2119 g_have_iso_c_varargs=$g_have_iso_c_varargs
2120 g_have_iso_cxx_varargs=$g_have_iso_cxx_varargs
2121
2122 case xyes in
2123 x$ac_cv_c_bigendian)
2124   g_byte_order=G_BIG_ENDIAN
2125   g_bs_native=BE
2126   g_bs_alien=LE
2127   ;;
2128 *)
2129   g_byte_order=G_LITTLE_ENDIAN
2130   g_bs_native=LE
2131   g_bs_alien=BE
2132   ;;
2133 esac
2134
2135 g_stack_grows=$glib_cv_stack_grows
2136
2137 g_have_eilseq=$have_eilseq
2138
2139 case x$have_threads in
2140 xno)    g_enable_threads_def="#undef";;
2141 *)      g_enable_threads_def="#define";;
2142 esac
2143
2144 g_threads_impl_def=$g_threads_impl
2145
2146 g_mutex_has_default="$mutex_has_default"
2147 g_mutex_sizeof="$glib_cv_sizeof_gmutex"
2148 g_system_thread_sizeof="$glib_cv_sizeof_system_thread"
2149 g_mutex_contents="$glib_cv_byte_contents_gmutex"
2150
2151 g_module_suffix="$glib_gmodule_suffix"
2152
2153 case $host in
2154   *-*-beos*)
2155     glib_os="#define G_OS_BEOS"
2156     ;;
2157   *-*-cygwin*)
2158     glib_os="#define G_OS_UNIX
2159 #define G_PLATFORM_WIN32
2160 #define G_WITH_CYGWIN"
2161     ;;
2162   *-*-mingw*)
2163     glib_os="#define G_OS_WIN32
2164 #define G_PLATFORM_WIN32"
2165     ;;
2166   *)
2167     glib_os="#define G_OS_UNIX"
2168     ;;
2169 esac
2170 ])
2171
2172 AC_OUTPUT([
2173 glib-2.0.pc
2174 glib-2.0-uninstalled.pc
2175 gmodule-2.0.pc
2176 gmodule-2.0-uninstalled.pc
2177 gthread-2.0.pc
2178 gthread-2.0-uninstalled.pc
2179 gobject-2.0.pc
2180 gobject-2.0-uninstalled.pc
2181 glib.spec
2182 glib-zip
2183 glib-gettextize
2184 Makefile
2185 build/Makefile
2186 build/win32/Makefile
2187 build/win32/dirent/Makefile
2188 glib/Makefile
2189 glib/libcharset/Makefile
2190 gmodule/gmoduleconf.h
2191 gmodule/Makefile
2192 gobject/Makefile
2193 gobject/glib-mkenums
2194 gthread/Makefile
2195 po/Makefile.in
2196 docs/Makefile
2197 docs/reference/Makefile
2198 docs/reference/glib/Makefile
2199 docs/reference/gobject/Makefile
2200 tests/Makefile
2201 m4macros/Makefile
2202 ])