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