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