* transcode.c (transcode_restartable): my_transcoder argument removed.
[ruby-svn.git] / configure.in
blob47dadcac36c4a817f08e40d7d97c77adf23ed5dc
1 dnl Process this file with autoconf to produce a configure script.
2 AC_INIT()
4 AC_PREREQ(2.60)
6 AC_ARG_WITH(baseruby,
7         [  --with-baseruby=RUBY use RUBY as baseruby; RUBY is the pathname of ruby],
8         [
9                 case "$withval" in
10                 *ruby*)
11                         BASERUBY=$withval
12                         ;;
13                 *)
14                         AC_MSG_ERROR(need ruby)
15                         ;;
16                 esac
17         ],
18         [
19                 BASERUBY="ruby"
20         ])
21 test "`$BASERUBY -e 'p 42' 2>/dev/null`" = 42 ||
22     BASERUBY="echo executable host ruby is required.  use --with-baseruby option.; false"
23 AC_SUBST(BASERUBY)
25 AC_DEFUN([RUBY_MINGW32],
26 [case "$host_os" in
27 cygwin*)
28 AC_CACHE_CHECK(for mingw32 environment, rb_cv_mingw32,
29 [AC_TRY_CPP([
30 #ifndef __MINGW32__
31 # error
32 #endif
33 ], rb_cv_mingw32=yes,rb_cv_mingw32=no)
34 rm -f conftest*])
35 test "$rb_cv_mingw32" = yes && target_os="mingw32"
36   ;;
37 esac])
39 AC_DEFUN([RUBY_CPPOUTFILE],
40 [AC_CACHE_CHECK(whether ${CPP} accepts -o, rb_cv_cppoutfile,
41 [cppflags=$CPPFLAGS
42 CPPFLAGS='-o conftest.i'
43 AC_TRY_CPP([], rb_cv_cppoutfile=yes, rb_cv_cppoutfile=no)
44 CPPFLAGS=$cppflags
45 rm -f conftest*])
46 if test "$rb_cv_cppoutfile" = yes; then
47   CPPOUTFILE='-o conftest.i'
48 elif test "$rb_cv_cppoutfile" = no; then
49   CPPOUTFILE='> conftest.i'
50 elif test -n "$rb_cv_cppoutfile"; then
51   CPPOUTFILE="$rb_cv_cppoutfile"
53 AC_SUBST(CPPOUTFILE)])
55 AC_DEFUN([RUBY_PROG_GNU_LD],
56 [AC_CACHE_CHECK(whether the linker is GNU ld, rb_cv_prog_gnu_ld,
57 [if `$CC $CFLAGS $CPPFLAGS $LDFLAGS --print-prog-name=ld 2>&1` -v 2>&1 | grep "GNU ld" > /dev/null; then
58   rb_cv_prog_gnu_ld=yes
59 else
60   rb_cv_prog_gnu_ld=no
63 GNU_LD=$rb_cv_prog_gnu_ld
64 AC_SUBST(GNU_LD)])
66 unset GREP_OPTIONS
67 rb_version=`grep RUBY_VERSION $srcdir/version.h`
68 MAJOR=`expr "$rb_version" : '#define RUBY_VERSION "\([0-9][0-9]*\)\.[0-9][0-9]*\.[0-9][0-9]*"'`
69 MINOR=`expr "$rb_version" : '#define RUBY_VERSION "[0-9][0-9]*\.\([0-9][0-9]*\)\.[0-9][0-9]*"'`
70 TEENY=`expr "$rb_version" : '#define RUBY_VERSION "[0-9][0-9]*\.[0-9][0-9]*\.\([0-9][0-9]*\)"'`
71 if test "$MAJOR" = ""; then
72   AC_MSG_ERROR(could not determine MAJOR number from version.h)
74 if test "$MINOR" = ""; then
75   AC_MSG_ERROR(could not determine MINOR number from version.h)
77 if test "$TEENY" = ""; then
78   AC_MSG_ERROR(could not determine TEENY number from version.h)
80 AC_SUBST(MAJOR)
81 AC_SUBST(MINOR)
82 AC_SUBST(TEENY)
83 dnl checks for alternative programs
84 AC_ARG_WITH(gcc, [  --without-gcc           never use gcc], [
85         case $withval in
86         no)     : ${CC=cc}
87                 ;;
88         yes)    : ${CC=gcc}
89                 ;;
90         *)      CC=$withval
91                 ;;
92         esac])
93 dnl If the user switches compilers, we can't believe the cache
94 if test ! -z "$ac_cv_prog_CC" -a ! -z "$CC" -a "$CC" != "$ac_cv_prog_CC"
95 then
96   AC_MSG_ERROR(cached CC is different -- throw away $cache_file
97 (it is also a good idea to do 'make clean' before compiling))
100 if test "$program_prefix" = NONE; then
101   program_prefix=
104 AC_CANONICAL_TARGET
105 target_os=`echo $target_os | sed 's/linux-gnu$/linux/;s/linux-gnu/linux-/'`
106 ac_install_sh='' # unusable for extension libraries.
108 ifelse(currently,disabled, [
109 dnl checks for fat-binary
110 AC_ARG_ENABLE(fat-binary,
111        [  --enable-fat-binary=ARCHS
112                           build an Apple/NeXT Multi Architecture Binary (MAB);
113                           ARCHS is a comma-delimited list of architectures for
114                           which to build; if ARCHS is omitted, then the package
115                           will be built for all architectures supported by the
116                           platform ("ppc" for MacOS/X and Darwin; "ppc,i386"
117                           for Rhapsody; "m68k,i386,sparc" for OpenStep;
118                           "m68k,i386,sparc,hppa" for NextStep); if this option
119                           is disabled or omitted entirely, then the package
120                           will be built only for the target platform],
121        [fat_binary=$enableval], [fat_binary=no])
122 if test "$fat_binary" != no; then
124     AC_MSG_CHECKING([target architectures])
126     # Respect TARGET_ARCHS setting from environment if available.
127     if test -z "$TARGET_ARCHS"; then
128         # Respect ARCH given to --enable-fat-binary if present.
129         if test "$fat_binary" != yes; then
130             TARGET_ARCHS=`echo "$fat_binary" | tr ',' ' '`
131         else
132             # Choose a default set of architectures based upon platform.
133             case "$target_os" in
134             darwin*)
135                 TARGET_ARCHS="ppc"
136                 ;;
137             rhapsody*)
138                 TARGET_ARCHS="ppc i386"
139                 ;;
140             openstep*)
141                 TARGET_ARCHS="m68k i386 sparc"
142                 ;;
143             nextstep*)
144                 TARGET_ARCHS="m68k i386 sparc hppa"
145                 ;;
146             *)
147                 TARGET_ARCHS=`arch`
148             esac
149         fi
150     fi
152     AC_MSG_RESULT([$TARGET_ARCHS])
154     # /usr/lib/arch_tool -archify_list $TARGET_ARCHS
155     ARCH_FLAG=
156     for archs in $TARGET_ARCHS 
157     do
158         ARCH_FLAG="$ARCH_FLAG -arch $archs"
159     done
160     AC_DEFINE(NEXT_FAT_BINARY)
162 ], [fat_binary=no])
164 case $target_cpu in
165   i?86) frame_address=yes;;
166   *)    frame_address=no;;
167 esac
168 AC_ARG_ENABLE(frame-address,
169        [  --enable-frame-address  use GCC __builtin_frame_address(). ],
170        [frame_address=$enableval])
171 if test $frame_address = yes; then
172     AC_DEFINE(USE_BUILTIN_FRAME_ADDRESS)
175 AC_ARG_PROGRAM
177 dnl Checks for programs.
179 : ${CFLAGS=} ${cflags='${optflags} ${debugflags} ${warnflags}'}
180 : ${CXXFLAGS=} ${cxxflags='${optflags} ${debugflags} ${warnflags}'}
181 if test x"${build}" != x"${host}"; then
182   AC_CHECK_TOOL(CC, gcc)
184 AC_PROG_CC
185 AC_PROG_CXX
186 AC_PROG_GCC_TRADITIONAL
187 test $ac_cv_prog_cc_g = yes && : ${debugflags=-g}
188 if test "$GCC" = yes; then
189     linker_flag=-Wl,
190     : ${optflags=-O2} ${warnflags="-Wall -Wno-parentheses"}
191 else
192     linker_flag=
194 CFLAGS="${CFLAGS} `eval echo $cflags`"
195 CXXFLAGS="${CXXFLAGS} `eval echo $cxxflags`"
197 RUBY_PROG_GNU_LD
198 RUBY_CPPOUTFILE
200 : ${OUTFLAG='-o '}
201 : ${COUTFLAG=${OUTFLAG}}
202 AC_SUBST(OUTFLAG)
203 AC_SUBST(COUTFLAG)
205 RUBY_MINGW32
207 AC_CHECK_TOOL(RANLIB, ranlib, :)
208 AC_CHECK_TOOL(AR, ar)
209 if test -z "$AR"; then
210   AC_CHECK_PROGS(AR, aal, ar)
213 AC_CHECK_TOOL(AS, as)
214 ASFLAGS=$ASFLAGS
215 AC_SUBST(ASFLAGS)
217 case "$target_os" in
218 cygwin*|mingw*)
219     AC_CHECK_TOOL(NM, nm)
220     AC_CHECK_TOOL(WINDRES, windres)
221     AC_CHECK_TOOL(DLLWRAP, dllwrap)
222     target_cpu=`echo $target_cpu | sed s/i.86/i386/`
223     case "$target_os" in
224     mingw*)
225         test "$rb_cv_msvcrt" = "" && unset rb_cv_msvcrt
226         AC_CHECK_TOOL(OBJDUMP, objdump)
227         AC_CACHE_CHECK(for mingw32 runtime DLL, rb_cv_msvcrt, [
228         AC_TRY_LINK([#include <stdio.h>],
229                     [FILE* volatile f = stdin; return 0;],
230                     [rb_cv_msvcrt=`$OBJDUMP -p conftest$ac_exeext |
231                                    tr A-Z a-z |
232                                    sed -n '/^[[         ]]*dll name: \(msvc.*\)\.dll$/{s//\1/p;q;}'`],
233                     [rb_cv_msvcrt=msvcrt])
234         test "$rb_cv_msvcrt" = "" && rb_cv_msvcrt=msvcrt])
235     esac
236     : ${enable_shared=yes}
237     ;;
238 aix*)
239     AC_CHECK_TOOL(NM, nm, /usr/ccs/bin/nm, /usr/ccs/bin:$PATH)
240     ;;
241 hiuxmpp*)
242     # by TOYODA Eizi <toyoda@npd.kishou.go.jp>
243     AC_DEFINE(__HIUX_MPP__)
244     ;;
245 esac
247 AC_PROG_LN_S
248 AC_PROG_MAKE_SET
249 AC_PROG_INSTALL
251 # checks for UNIX variants that set C preprocessor variables
252 AC_USE_SYSTEM_EXTENSIONS
254 AC_SUBST(RM, ['rm -f'])
255 AC_SUBST(CP, ['cp'])
256 if $as_mkdir_p; then
257   MAKEDIRS='mkdir -p'
258 else
259   MAKEDIRS='install -d'
261 AC_SUBST(MAKEDIRS)
263 dnl check for large file stuff
264 mv confdefs.h confdefs1.h
265 : > confdefs.h
266 AC_SYS_LARGEFILE
267 mv confdefs.h largefile.h
268 mv confdefs1.h confdefs.h
269 cat largefile.h >> confdefs.h
271 case "$target_os" in
272 mingw*)
273         ac_cv_type_off_t=yes
274         ac_cv_sizeof_off_t=8
275         ;;
276 esac
278 AC_CHECK_TYPES([long long, off_t])
280 AC_CHECK_SIZEOF(int, 4)
281 AC_CHECK_SIZEOF(short, 2)
282 AC_CHECK_SIZEOF(long, 4)
283 AC_CHECK_SIZEOF(long long, 0)
284 AC_CHECK_SIZEOF(__int64, 0)
285 AC_CHECK_SIZEOF(off_t, 0)
286 AC_CHECK_SIZEOF(void*, 4)
287 AC_CHECK_SIZEOF(float, 4)
288 AC_CHECK_SIZEOF(double, 8)
289 AC_CHECK_SIZEOF(time_t, 0)
291 dnl RUBY_REPLACE_TYPE [typename] [default type] [macro type] [included]
292 AC_DEFUN([RUBY_REPLACE_TYPE], [dnl
293     AC_CHECK_TYPE([$1],
294         [AC_DEFINE_UNQUOTED(rb_[$1], [$1])],
295         [AC_DEFINE_UNQUOTED(rb_[$1], [$2])],
296         [$4])
297     AC_CACHE_CHECK([for convertible type of [$1]], rb_cv_[$1]_convertible, [
298         u= t=
299         AC_COMPILE_IFELSE(
300             [AC_LANG_BOOL_COMPILE_TRY([AC_INCLUDES_DEFAULT]
301                                       [$4], [(rb_[$1])-1 > 0])],
302             [u=U])
303         if test x"$t" = x; then
304             AC_COMPILE_IFELSE(
305                 [AC_LANG_BOOL_COMPILE_TRY([AC_INCLUDES_DEFAULT]
306                                           [$4], [sizeof(rb_[$1]) > sizeof(long)])],
307                 [t=LL])
308         fi
309         if test x"$t" = x; then
310             AC_COMPILE_IFELSE(
311                 [AC_LANG_BOOL_COMPILE_TRY([AC_INCLUDES_DEFAULT]
312                                           [$4], [sizeof(rb_[$1]) == sizeof(long)])],
313                 [t=LONG])
314         fi
315         if test x"$t" = x; then
316             t=INT
317         fi
318         rb_cv_[$1]_convertible=${u}${t}])
319     AC_DEFINE_UNQUOTED([$3]2NUM[(v)], [${rb_cv_[$1]_convertible}2NUM(v)])
320     AC_DEFINE_UNQUOTED(NUM2[$3][(v)], [NUM2${rb_cv_[$1]_convertible}(v)])
322 RUBY_REPLACE_TYPE(pid_t, int, PIDT)
323 RUBY_REPLACE_TYPE(uid_t, int, UIDT)
324 RUBY_REPLACE_TYPE(gid_t, int, GIDT)
326 AC_CACHE_CHECK(for prototypes, rb_cv_have_prototypes,
327   [AC_TRY_COMPILE([int foo(int x) { return 0; }], [return foo(10);],
328         rb_cv_have_prototypes=yes,
329         rb_cv_have_prototypes=no)])
330 if test "$rb_cv_have_prototypes" = yes; then
331   AC_DEFINE(HAVE_PROTOTYPES)
334 AC_CACHE_CHECK(token paste string, rb_cv_tokenpaste,
335   [AC_TRY_COMPILE([#define paste(a,b) a##b],
336                   [int xy = 1; return paste(x,y);],
337                   rb_cv_tokenpaste=ansi,
338                   rb_cv_tokenpaste=knr)])
339 if test "$rb_cv_tokenpaste" = ansi; then
340   AC_DEFINE(TOKEN_PASTE(x,y),[x##y])
341 else
342   AC_DEFINE(TOKEN_PASTE(x,y),[x/**/y])
345 AC_CACHE_CHECK(stringization, rb_cv_stringization, [
346   rb_cv_stringization=no
347   for string in "#expr" '"expr"'; do
348     AC_COMPILE_IFELSE([
349       AC_LANG_BOOL_COMPILE_TRY([
350 #define STRINGIZE0(expr) $string
351 #define STRINGIZE(expr) STRINGIZE0(expr)
352 #undef real_test_for_stringization
353 #define test_for_stringization -.real_test_for_stringization.-
354 const char stringized[[]] = STRINGIZE(test_for_stringization);
355 ], [sizeof(stringized) == 32])],
356       [rb_cv_stringization="$string"; break],
357       [rb_cv_stringization=no])
358   done]
360 AC_DEFINE(STRINGIZE(expr),STRINGIZE0(expr))
361 if test x"$rb_cv_stringization" != xno -a "$rb_cv_stringization" != "#expr"; then
362   AC_DEFINE_UNQUOTED(STRINGIZE0(expr),$rb_cv_stringization)
363   AC_DEFINE(OLD_FASHIONED_STRINGIZATION,1)
366 AC_CACHE_CHECK([string literal concatenation],
367   rb_cv_string_literal_concatenation, [
368   AC_COMPILE_IFELSE([
369     AC_LANG_BOOL_COMPILE_TRY([
370 const char concatenated_literal[[]] = "literals" "to"
371   "be" "concatenated.";
372 ], [sizeof(concatenated_literal) == 26])],
373     [rb_cv_string_literal_concatenation=yes],
374     [rb_cv_string_literal_concatenation=no])]
376 if test "$rb_cv_string_literal_concatenation" = no; then
377   AC_DEFINE(NO_STRING_LITERAL_CONCATENATION,1)
380 AC_CACHE_CHECK(for variable length prototypes and stdarg.h, rb_cv_stdarg,
381   [AC_TRY_COMPILE([
382 #include <stdarg.h>
383 int foo(int x, ...) {
384         va_list va;
385         va_start(va, x);
386         va_arg(va, int);
387         va_arg(va, char *);
388         va_arg(va, double);
389         return 0;
391 ], [return foo(10, "", 3.14);],
392         rb_cv_stdarg=yes,
393         rb_cv_stdarg=no)])
394 if test "$rb_cv_stdarg" = yes; then
395   AC_DEFINE(HAVE_STDARG_PROTOTYPES)
398 AC_CACHE_CHECK(for variable length macro, rb_cv_va_args_macro,
399   [AC_TRY_COMPILE([@%:@define FOO(a, ...) foo(a, @%:@@%:@__VA_ARGS__)],
400   [FOO(1);FOO(1,2);FOO(1,2,3);],
401   rb_cv_va_args_macro=yes,
402   rb_cv_va_args_macro=no)])
403 if test "$rb_cv_va_args_macro" = yes; then
404   AC_DEFINE(HAVE_VA_ARGS_MACRO)
407 AC_DEFUN([RUBY_FUNC_ATTRIBUTE], [dnl
408 m4_ifval([$2], dnl
409   [AS_VAR_PUSHDEF([attrib],[$2])], dnl
410   [AS_VAR_PUSHDEF([attrib],[FUNC_]AS_TR_CPP($1))] dnl
411 )dnl
412 m4_ifval([$3], dnl
413   [AS_VAR_PUSHDEF([rbcv],[$3])], dnl
414   [AS_VAR_PUSHDEF([rbcv],[rb_cv_func_][$1])]dnl
415 )dnl
416 AC_CACHE_CHECK(for [$1] function attribute, rbcv,
417 [rbcv=x
418 if test "${ac_c_werror_flag+set}"; then
419   rb_c_werror_flag="$ac_c_werror_flag"
420 else
421   unset rb_c_werror_flag
423 ac_c_werror_flag=yes
424 for mac in "__attribute__ (($1)) x" "x __attribute__ (($1))" "__declspec($1) x" x; do
425   AC_TRY_COMPILE(
426     [#define ]attrib[(x) $mac
427     ]attrib[(void conftest_attribute_check(void));], [],
428     [rbcv="$mac"; break])
429 done
430 if test "${rb_c_werror_flag+set}"; then
431   ac_c_werror_flag="$rb_c_werror_flag"
432 else
433   unset ac_c_werror_flag
436 AC_DEFINE_UNQUOTED(attrib[(x)], $rbcv)
437 AS_VAR_POPDEF([attrib])
438 AS_VAR_POPDEF([rbcv])
441 RUBY_FUNC_ATTRIBUTE(noreturn, NORETURN)
442 RUBY_FUNC_ATTRIBUTE(deprecated, DEPRECATED)
443 RUBY_FUNC_ATTRIBUTE(noinline, NOINLINE)
444 RUBY_FUNC_ATTRIBUTE(stdcall)
445 RUBY_FUNC_ATTRIBUTE(cdecl)
446 RUBY_FUNC_ATTRIBUTE(fastcall)
448 AC_CACHE_CHECK([for RUBY_EXTERN], rb_cv_ruby_extern,
449 [rb_cv_ruby_extern=no
450 for mac in "__attribute__((dllimport))" "__declspec(dllimport)"; do
451   AC_TRY_COMPILE(
452     [extern $mac void conftest(void);],
453     [rb_cv_ruby_extern="extern $mac"; break])
454 done])
455 test "x$rb_cv_ruby_extern" = xno || AC_DEFINE_UNQUOTED(RUBY_EXTERN, $rb_cv_ruby_extern)
457 XCFLAGS="$XCFLAGS -DRUBY_EXPORT"
459 dnl Check whether we need to define sys_nerr locally
460 AC_CHECK_DECLS([sys_nerr], [], [], [$ac_includes_default
461 #include <errno.h>])
463 case "$target_os" in
464 freebsd*)
465   AC_CACHE_CHECK([whether pthread should be enabled by default],
466     rb_cv_enable_pthread_default,
467     [AC_TRY_CPP([
468 #include <osreldate.h>
469 #if __FreeBSD_version < 502102
470 #error pthread should be disabled on this platform
471 #endif
472       ],
473       rb_cv_enable_pthread_default=yes,
474       rb_cv_enable_pthread_default=no)])
475   enable_pthread_default=$rb_cv_enable_pthread_default
476   ;;
477 mingw*)
478   enable_pthread_default=no
479   ;;
481   enable_pthread_default=yes
482   ;;
483 esac
485 AC_ARG_ENABLE(pthread,
486        [  --enable-pthread        use pthread library.],
487        [enable_pthread=$enableval], [enable_pthread=$enable_pthread_default])
489 dnl Checks for libraries.
490 case "$target_os" in
491 nextstep*)      ;;
492 openstep*)      ;;
493 rhapsody*)      ;;
494 darwin*)        LIBS="-lobjc $LIBS"
495                 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE"
496                 AC_TRY_CPP([#include <AvailabilityMacros.h>
497                     #if MAC_OS_X_VERSION_MAX_ALLOWED <= 1040
498                     #error pre OS X 10.4
499                     [!<===== pre OS X 10.4 =====>]
500                     #endif
501                     ],
502                     [
503                     test "x$target_cpu" = xppc && ac_cv_header_ucontext_h=no
504                     ],
505                     [
506                     AC_DEFINE(BROKEN_SETREUID, 1)
507                     AC_DEFINE(BROKEN_SETREGID, 1)
508                     ])
509                 ;;
510 hpux*)          LIBS="-lm $LIBS"
511                 ac_cv_c_inline=no;;
512 human*)         ac_cv_func_getpgrp_void=yes
513                 ac_cv_func_setitimer=no
514                 ;;
515 beos*|haiku*)   ac_cv_func_link=no
516                 ac_cv_func_sched_yield=no
517                 ac_cv_func_pthread_attr_setinheritsched=no
518                 case "$target_os" in
519                 beos*) ac_cv_header_net_socket_h=yes;;
520                 haiku*) ac_cv_func_shutdown=no;;
521                 esac
522                 LIBS="$LIBS" # m lib is include in root under BeOS/Haiku
523                 ;;
524 cygwin*)        ;;
525 mingw*)         LIBS="-lshell32 -lws2_32 $LIBS"
526                 ac_cv_header_a_out_h=no
527                 ac_cv_header_pwd_h=no
528                 ac_cv_header_utime_h=no
529                 ac_cv_header_sys_ioctl_h=no
530                 ac_cv_header_sys_param_h=no
531                 ac_cv_header_sys_resource_h=no
532                 ac_cv_header_sys_select_h=no
533                 ac_cv_header_sys_time_h=no
534                 ac_cv_header_sys_times_h=no
535                 ac_cv_header_sys_socket_h=no
536                 ac_cv_func_times=yes
537                 ac_cv_func_waitpid=yes
538                 ac_cv_func_fsync=yes
539                 ac_cv_func_snprintf=yes
540                 ac_cv_func_vsnprintf=yes
541                 ac_cv_func_seekdir=yes
542                 ac_cv_func_telldir=yes
543                 ac_cv_func_isinf=yes
544                 ac_cv_func_isnan=yes
545                 ac_cv_func_finite=yes
546                 ac_cv_func_link=yes
547                 ac_cv_func_truncate=yes
548                 ac_cv_func_fseeko=yes
549                 ac_cv_func_ftello=yes
550                 ac_cv_lib_crypt_crypt=no
551                 ac_cv_func_getpgrp_void=no
552                 ac_cv_func_setpgrp_void=yes
553                 ac_cv_func_memcmp_working=yes
554                 ac_cv_lib_dl_dlopen=no
555                 rb_cv_binary_elf=no
556                 rb_cv_negative_time_t=no
557                 ac_cv_func_fcntl=yes
558                 ;;
559 os2-emx*)       LIBS="-lm $LIBS"
560                 ac_cv_lib_dir_opendir=no;;
561 msdosdjgpp*)    LIBS="-lm $LIBS"
562                 ac_cv_func_getpgrp_void=yes
563                 ac_cv_func_setitimer=no
564                 ac_cv_sizeof_rlim_t=4
565                 ac_cv_func_fork=no
566                 ac_cv_func_setrlimit=no
567                 ac_cv_header_sys_socket_h=no
568                 ;;
569 bsdi*)          LIBS="-lm $LIBS"
570                 AC_DEFINE(BROKEN_SETREUID, 1)
571                 AC_DEFINE(BROKEN_SETREGID, 1)
572                 ac_cv_sizeof_rlim_t=8;;
573 freebsd*)       LIBS="-lm $LIBS"
574                 AC_CACHE_CHECK([whether -lxpg4 has to be linked],
575                   rb_cv_lib_xpg4_needed,
576                   [AC_TRY_CPP([
577 #include <osreldate.h>
578 #if __FreeBSD_version < 400020 || \
579    (__FreeBSD_version >= 500000 && __FreeBSD_version < 500005)
580 #error needs libxpg4
581 #endif
582                    ],
583                    rb_cv_lib_xpg4_needed=no,
584                    rb_cv_lib_xpg4_needed=yes,
585                    rb_cv_lib_xpg4_needed=yes)])
586                 if test "$rb_cv_lib_xpg4_needed" = yes; then
587                         AC_CHECK_LIB(xpg4, setlocale)
588                 fi
589                 ;;
590 dragonfly*)     LIBS="-lm $LIBS"
591                 ;;
592 bow)            ac_cv_func_setitimer=no
593                 ;;
594 superux*)     ac_cv_func_setitimer=no
595               ;;
596 *) LIBS="-lm $LIBS";;
597 esac
598 AC_CHECK_LIB(crypt, crypt)
599 AC_CHECK_LIB(dl, dlopen)        # Dynamic linking for SunOS/Solaris and SYSV
600 AC_CHECK_LIB(dld, shl_load)     # Dynamic linking for HP-UX
601 AC_CHECK_LIB(socket, socketpair)        # SunOS/Solaris
602 AC_CHECK_LIB(rt, clock_gettime) # GNU/Linux
604 case "$target_cpu" in
605 alpha*)         case "$target_os"::"$GCC" in
606                 *::yes) CFLAGS="-mieee $CFLAGS" ;;   # gcc
607                 osf*)   CFLAGS="-ieee $CFLAGS" ;;    # ccc
608                 esac ;;
609 esac
611 ac_cv_header_net_socket_h=${ac_cv_header_net_socket_h=no}
612 if test "$ac_cv_header_net_socket_h" = yes; then
613     ac_cv_header_sys_socket_h=${ac_cv_header_sys_socket_h=no}
614 else
615     ac_cv_header_sys_socket_h=${ac_cv_header_sys_socket_h=yes}
618 dnl Checks for header files.
619 AC_HEADER_DIRENT
620 AC_HEADER_STDC
621 AC_HEADER_SYS_WAIT
622 AC_CHECK_HEADERS(stdlib.h string.h unistd.h limits.h sys/file.h sys/ioctl.h sys/syscall.h\
623                  fcntl.h sys/fcntl.h sys/select.h sys/time.h sys/times.h sys/param.h\
624                  syscall.h pwd.h grp.h a.out.h utime.h memory.h direct.h sys/resource.h \
625                  sys/mkdev.h sys/utime.h xti.h netinet/in_systm.h float.h ieeefp.h pthread.h \
626                  ucontext.h intrinsics.h langinfo.h locale.h sys/sendfile.h time.h \
627                  net/socket.h sys/socket.h)
629 dnl Check additional types.
630 AC_CHECK_SIZEOF(rlim_t, 0, [
631   #ifdef HAVE_SYS_TYPES_H
632   # include <sys/types.h>
633   #endif
634   #ifdef HAVE_SYS_TIME_H
635   # include <sys/time.h>
636   #endif
637   #ifdef HAVE_SYS_RESOURCE_H
638   # include <sys/resource.h>
639   #endif
640   #ifdef HAVE_UNISTD_H
641   # include <unistd.h>
642   #endif
643   #include <stdio.h>
646 dnl Checks for typedefs, structures, and compiler characteristics.
647 AC_TYPE_SIZE_T
648 AC_CHECK_SIZEOF(size_t, 0)
649 AC_CHECK_SIZEOF(ptrdiff_t, $ac_cv_sizeof_size_t)
650 AC_STRUCT_ST_BLKSIZE
651 AC_STRUCT_ST_BLOCKS
652 AC_STRUCT_ST_RDEV
653 AC_CHECK_MEMBERS([struct stat.st_atim])
654 AC_CHECK_MEMBERS([struct stat.st_atimespec])
655 AC_CHECK_MEMBERS([struct stat.st_atimensec])
656 AC_CHECK_MEMBERS([struct stat.st_mtim])
657 AC_CHECK_MEMBERS([struct stat.st_mtimespec])
658 AC_CHECK_MEMBERS([struct stat.st_mtimensec])
659 AC_CHECK_MEMBERS([struct stat.st_ctim])
660 AC_CHECK_MEMBERS([struct stat.st_ctimespec])
661 AC_CHECK_MEMBERS([struct stat.st_ctimensec])
663 AC_CHECK_TYPES([struct timespec], [], [], [@%:@ifdef HAVE_TIME_H
664 @%:@include <time.h>
665 @%:@endif])
667 AC_CHECK_TYPE(fd_mask, [AC_DEFINE(HAVE_RB_FD_INIT, 1)])
669 dnl RUBY_DEFINT TYPENAME, SIZE, [SIGNED-OR-UNSIGNED], [INCLUDES = DEFAULT-INCLUDES]
670 AC_DEFUN([RUBY_DEFINT], [dnl
671 AC_CACHE_CHECK([for $1], [rb_cv_type_$1],
672 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT([$4])
673 typedef $1 t; int s = sizeof(t) == 42;])],
674    [rb_cv_type_$1=yes],
675    [case m4_bmatch([$2], [^[1-9][0-9]*$], $2, [$ac_cv_sizeof_]AS_TR_SH($2)) in
676     "1") rb_cv_type_$1="m4_if([$3], [], [signed ], [$3 ])char";;
677     "$ac_cv_sizeof_short") rb_cv_type_$1="m4_if([$3], [], [], [$3 ])short";;
678     "$ac_cv_sizeof_int") rb_cv_type_$1="m4_if([$3], [], [], [$3 ])int";;
679     "$ac_cv_sizeof_long") rb_cv_type_$1="m4_if([$3], [], [], [$3 ])long";;
680     "$ac_cv_sizeof_long_long") rb_cv_type_$1="m4_if([$3], [], [], [$3 ])long long";;
681     "$ac_cv_sizeof___int64") rb_cv_type_$1="m4_if([$3], [], [], [$3 ])__int64";;
682     *) rb_cv_type_$1=no;;
683     esac])])
684 if test "${rb_cv_type_$1}" != no; then
685     AC_DEFINE([HAVE_]AS_TR_CPP($1), 1)
686     test "${rb_cv_type_$1}" = yes || AC_DEFINE_UNQUOTED($1, [$rb_cv_type_$1])
690 RUBY_DEFINT(int8_t, 1)
691 RUBY_DEFINT(uint8_t, 1, unsigned)
692 RUBY_DEFINT(int16_t, 2)
693 RUBY_DEFINT(uint16_t, 2, unsigned)
694 RUBY_DEFINT(int32_t, 4)
695 RUBY_DEFINT(uint32_t, 4, unsigned)
696 RUBY_DEFINT(int64_t, 8)
697 RUBY_DEFINT(uint64_t, 8, unsigned)
698 RUBY_DEFINT(int128_t, 16)
699 RUBY_DEFINT(uint128_t, 16, unsigned)
700 RUBY_DEFINT(intptr_t, void*)
701 RUBY_DEFINT(uintptr_t, void*, unsigned)
702 RUBY_DEFINT(ssize_t, size_t)    dnl may differ from int, so not use AC_TYPE_SSIZE_T.
704 AC_CACHE_CHECK(for stack end address, rb_cv_stack_end_address,
705 [rb_cv_stack_end_address=no
706 for addr in __libc_stack_end _SEND; do
707   AC_TRY_LINK(
708     [extern void *$addr;],
709     [if (!$addr) return 1;],
710     [rb_cv_stack_end_address="$addr"; break])
711 done])
712 if test $rb_cv_stack_end_address != no; then
713   AC_DEFINE_UNQUOTED(STACK_END_ADDRESS, $rb_cv_stack_end_address)
716 dnl Checks for library functions.
717 AC_TYPE_GETGROUPS
718 AC_TYPE_SIGNAL
719 case "${target_cpu}-${target_os}" in
720 powerpc-darwin*)
721   AC_LIBSOURCES(alloca.c)
722   AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.${ac_objext}])
723   AC_DEFINE(C_ALLOCA)
724   AC_DEFINE_UNQUOTED(alloca, alloca)
725   ;;
727   AC_FUNC_ALLOCA
728   ;;
729 esac
730 AC_FUNC_MEMCMP
732 # http://sources.redhat.com/ml/libc-hacker/2005-08/msg00008.html
733 # Debian GNU/Linux Etch's libc6.1 2.3.6.ds1-13etch5 has this problem.
734 # Debian GNU/Linux Lenny's libc6.1 2.7-10 has no problem.
735 AC_CACHE_CHECK(for broken erfc of glibc-2.3.6 on IA64, rb_broken_glibc_ia64_erfc,
736   [AC_TRY_RUN([
737 #include <math.h>
739 main()
741    erfc(10000.0);
742    return 0;
745         rb_broken_glibc_ia64_erfc=no,
746         rb_broken_glibc_ia64_erfc=yes,
747         rb_broken_glibc_ia64_erfc=no)])
748 case $rb_broken_glibc_ia64_erfc in
749   yes) ac_cv_func_erf=no;;
750 esac
752 AC_REPLACE_FUNCS(dup2 memmove strerror strftime\
753                  strchr strstr crypt flock vsnprintf\
754                  isnan finite isinf hypot acosh erf tgamma lgamma_r cbrt \
755                  strlcpy strlcat)
756 AC_CHECK_FUNCS(fmod killpg wait4 waitpid fork spawnv syscall chroot fsync getcwd eaccess\
757               truncate ftruncate chsize times utimes utimensat fcntl lockf lstat\
758               link symlink readlink\
759               setitimer setruid seteuid setreuid setresuid setproctitle socketpair\
760               setrgid setegid setregid setresgid issetugid pause lchown lchmod\
761               getpgrp setpgrp getpgid setpgid initgroups getgroups setgroups\
762               getpriority getrlimit setrlimit sysconf group_member\
763               dlopen sigprocmask sigaction sigsetjmp _setjmp _longjmp vsnprintf snprintf\
764               setsid telldir seekdir fchmod cosh sinh tanh log2 round signbit\
765               setuid setgid daemon select_large_fdset setenv unsetenv\
766               mktime timegm clock_gettime gettimeofday\
767               pread sendfile shutdown)
769 AC_CACHE_CHECK(for __builtin_setjmp, ac_cv_func___builtin_setjmp,
770 [AC_TRY_LINK([@%:@include <setjmp.h>
771     jmp_buf jb; void t(v) int v; {__builtin_longjmp(jb, v);}],
772     [__builtin_setjmp(jb);],
773     [ac_cv_func___builtin_setjmp=yes],
774     [ac_cv_func___builtin_setjmp=no])
777 test x$ac_cv_func__longjmp = xno && ac_cv_func__setjmp=no
779 AC_MSG_CHECKING(for setjmp type)
780 AC_ARG_WITH(setjmp-type, 
781         [  --with-setjmp-type      select setjmp type], [
782         case $withval in
783         __builtin_setjmp) setjmp_prefix=__builtin_;;
784         _setjmp) setjmp_prefix=_;;
785         sigsetjmp) setjmp_prefix=sig;;
786         setjmp) setjmp_prefix=;;
787         '') unset setjmp_prefix;;
788         *)   AC_MSG_ERROR(invalid setjmp type: $withval);;
789         esac], [unset setjmp_prefix])
790 if test ${setjmp_prefix+set}; then
791     if test "${setjmp_prefix}" && eval test '$ac_cv_func_'${setjmp_prefix}setjmp = no; then
792         AC_MSG_ERROR(${setjmp_prefix}setjmp is not available)
793     fi
794 elif test "$ac_cv_func___builtin_setjmp" = yes; then
795     setjmp_prefix=__builtin_
796 elif test "$ac_cv_func__setjmp" = yes; then
797     setjmp_prefix=_
798 elif test "$ac_cv_func_sigsetjmp" = yes; then
799     case $target_os in
800     solaris*|cygwin*)
801         setjmp_prefix=;;
802     *)
803         setjmp_prefix=sig;;
804     esac
805 else
806     setjmp_prefix=
808 if test x$setjmp_prefix = xsig; then
809     setjmp_sigmask=yes
810 else
811     unset setjmp_sigmask
813 AC_MSG_RESULT(${setjmp_prefix}setjmp)
814 AC_DEFINE_UNQUOTED([RUBY_SETJMP(env)], [${setjmp_prefix}setjmp(env${setjmp_sigmask+,0})])
815 AC_DEFINE_UNQUOTED([RUBY_LONGJMP(env,val)], [${setjmp_prefix}longjmp(env,val)])
816 AC_DEFINE_UNQUOTED(RUBY_JMP_BUF, ${setjmp_sigmask+${setjmp_prefix}}jmp_buf)
818 AC_ARG_ENABLE(setreuid,
819        [  --enable-setreuid       use setreuid()/setregid() according to need even if obsolete.],
820        [use_setreuid=$enableval])
821 if test "$use_setreuid" = yes; then
822     AC_DEFINE(USE_SETREUID)
823     AC_DEFINE(USE_SETREGID)
825 AC_STRUCT_TIMEZONE
826 AC_CACHE_CHECK(for struct tm.tm_gmtoff, rb_cv_member_struct_tm_tm_gmtoff,
827   [AC_TRY_COMPILE([#include <time.h>],
828     [struct tm t; t.tm_gmtoff = 3600;],
829   [rb_cv_member_struct_tm_tm_gmtoff=yes],
830   [rb_cv_member_struct_tm_tm_gmtoff=no])])
831 if test "$rb_cv_member_struct_tm_tm_gmtoff" = yes; then
832   AC_DEFINE(HAVE_STRUCT_TM_TM_GMTOFF)
834 AC_CACHE_CHECK(for external int daylight, rb_cv_have_daylight,
835   [AC_TRY_LINK([#include <time.h>
836   int i;],
837         [i = daylight;],
838         rb_cv_have_daylight=yes,
839         rb_cv_have_daylight=no)])
840 if test "$rb_cv_have_daylight" = yes; then
841   AC_DEFINE(HAVE_DAYLIGHT)
843 AC_DEFUN([RUBY_CHECK_VARTYPE], [dnl
844 AC_CACHE_CHECK([for external $1], rb_cv_var_$1,
845   [rb_cv_var_$1=no
846   AC_TRY_COMPILE([
847 #ifndef _XOPEN_SOURCE
848 #define _XOPEN_SOURCE 1
849 #endif
852 const volatile void *volatile t;],
853     [t = &(&$1)[0];],
854     [for t in $3; do
855       AC_TRY_COMPILE([
856 #ifndef _XOPEN_SOURCE
857 #define _XOPEN_SOURCE 1
858 #endif
861 extern $t $1;
862 const volatile void *volatile t;],
863         [t = &(&$1)[0];],
864         [rb_cv_var_$1=$t; break])
865     done])])
866 if test "[$rb_cv_var_]$1" != no; then
867   AC_DEFINE([HAVE_VAR_]m4_toupper($1))
868   AC_DEFINE_UNQUOTED([TYPEOF_VAR_]m4_toupper($1), $rb_cv_var_$1)
869 fi])
870 RUBY_CHECK_VARTYPE(timezone, [@%:@include <time.h>], [long int])
871 RUBY_CHECK_VARTYPE(altzone, [@%:@include <time.h>], [long int])
872 if test "$rb_cv_var_timezone" = no; then
873   AC_CHECK_FUNCS(timezone)
874   if test "$ac_cv_func_timezone" = yes; then
875     AC_CACHE_CHECK([whether timezone requires zero arguments], rb_cv_func_timezone_void,
876       [AC_TRY_COMPILE([@%:@include <time.h>],
877         [(void)timezone(0, 0);],
878         [rb_cv_func_timezone_void=no],
879         [rb_cv_func_timezone_void=yes])]
880     )
881     if test $rb_cv_func_timezone_void = yes; then
882       AC_DEFINE(TIMEZONE_VOID)
883     fi
884   fi
887 AC_CACHE_CHECK(for negative time_t for gmtime(3), rb_cv_negative_time_t,
888   [AC_TRY_RUN([
889 #include <time.h>
891 void
892 check(tm, y, m, d, h, s)
893     struct tm *tm;
894     int y, m, d, h, s;
896     if (!tm ||
897         tm->tm_year != y ||
898         tm->tm_mon  != m-1 ||
899         tm->tm_mday != d ||
900         tm->tm_hour != h ||
901         tm->tm_sec  != s) {
902         exit(1);
903     }
907 main()
909    time_t t = -1;
910    struct tm *tm;
912    check(gmtime(&t), 69, 12, 31, 23, 59);
913    t = ~(time_t)0 << 31;
914    check(gmtime(&t), 1, 12, 13, 20, 52);
915    return 0;
918         rb_cv_negative_time_t=yes,
919         rb_cv_negative_time_t=no,
920         rb_cv_negative_time_t=yes)])
921 if test "$rb_cv_negative_time_t" = yes; then
922   AC_DEFINE(NEGATIVE_TIME_T)
925 if test "$ac_cv_func_sigprocmask" = yes && test "$ac_cv_func_sigaction" = yes; then
926    AC_DEFINE(POSIX_SIGNAL)
927 else
928   AC_CHECK_FUNCS(sigsetmask)
929   AC_CACHE_CHECK(for BSD signal semantics, rb_cv_bsd_signal,
930     [AC_TRY_RUN([
931 #include <stdio.h>
932 #include <signal.h>
934 void
935 sig_handler(dummy)
936      int dummy;
941 main()
943   signal(SIGINT, sig_handler);
944   kill(getpid(), SIGINT);
945   kill(getpid(), SIGINT);
946   return 0;
949         rb_cv_bsd_signal=yes,
950         rb_cv_bsd_signal=no,
951         rb_cv_bsd_signal=$ac_cv_func_sigsetmask)])
952   if test "$rb_cv_bsd_signal" = yes; then
953     AC_DEFINE(BSD_SIGNAL)
954   fi
957 AC_FUNC_GETPGRP
958 AC_FUNC_SETPGRP  
960 AC_C_BIGENDIAN
961 AC_C_CONST
962 AC_C_CHAR_UNSIGNED
963 AC_C_INLINE
964 AC_C_VOLATILE
966 if test x"$target_cpu" = xia64; then
967     AC_LIBOBJ([ia64])
968     AC_CACHE_CHECK(for __libc_ia64_register_backing_store_base,
969                    rb_cv___libc_ia64_register_backing_store_base,
970     [rb_cv___libc_ia64_register_backing_store_base=no
971     AC_TRY_LINK(
972       [extern unsigned long __libc_ia64_register_backing_store_base;],
973       [unsigned long p = __libc_ia64_register_backing_store_base;
974        printf("%ld\n", p);],
975       [rb_cv___libc_ia64_register_backing_store_base=yes])])
976     if test $rb_cv___libc_ia64_register_backing_store_base = yes; then
977       AC_DEFINE(HAVE___LIBC_IA64_REGISTER_BACKING_STORE_BASE)
978     fi
981 AC_CACHE_CHECK(whether right shift preserve sign bit, rb_cv_rshift_sign,
982     [AC_TRY_RUN([
984 main()
986   if (-1==(-1>>1))
987     return 0;
988   return 1;
991         rb_cv_rshift_sign=yes,
992         rb_cv_rshift_sign=no,
993         rb_cv_rshift_sign=yes)])
994 if test "$rb_cv_rshift_sign" = yes; then
995   AC_DEFINE(RSHIFT(x,y), ((x)>>(int)y))
996 else
997   AC_DEFINE(RSHIFT(x,y), (((x)<0) ? ~((~(x))>>y) : (x)>>y))
1000 AC_MSG_CHECKING(read count field in FILE structures)
1001 AC_CACHE_VAL(rb_cv_fcnt,
1002 [for fcnt in    dnl
1003      _cnt       dnl
1004      __cnt      dnl
1005      _r         dnl
1006      readCount  dnl
1007      _rcount    dnl for emx0.9c
1008 ; do
1009     AC_TRY_COMPILE([#include <stdio.h>
1011         [FILE *f = stdin; f->$fcnt = 0;],
1012         rb_cv_fcnt="$fcnt"; break,
1013         rb_cv_fcnt="not found")
1014 done])
1015 if test "$rb_cv_fcnt" = "not found"; then
1016   AC_MSG_RESULT([not found(OK if using GNU libc)])
1017 else
1018   AC_MSG_RESULT($rb_cv_fcnt)
1019   AC_DEFINE_UNQUOTED(FILE_COUNT, $rb_cv_fcnt)
1022 AC_MSG_CHECKING(read buffer ptr field in FILE structures)
1023 AC_CACHE_VAL(rb_cv_frptr,
1024 [for frptr in   dnl
1025      _IO_read_ptr dnl
1026      _ptr       dnl
1027      __ptr      dnl
1028      bufpos     dnl
1029      _p dnl
1030 ; do
1031     AC_TRY_COMPILE([#include <stdio.h>
1033         [FILE *f = stdin; char buf[256]; f->$frptr = buf;],
1034         rb_cv_frptr="$frptr"; break,
1035         rb_cv_frptr="not found")
1036 done])
1037 if test "$rb_cv_frptr" = "not found"; then
1038   AC_MSG_RESULT([not found])
1039 else
1040   AC_MSG_RESULT($rb_cv_frptr)
1041   AC_DEFINE_UNQUOTED(FILE_READPTR, $rb_cv_frptr)
1043   if test "$rb_cv_fcnt" = "not found"; then
1044     AC_MSG_CHECKING(read buffer end field in FILE structures)
1045     AC_CACHE_VAL(rb_cv_frend,
1046     [for frend in       dnl
1047          _IO_read_end   dnl
1048          bufread        dnl
1049     ; do
1050         AC_TRY_COMPILE([#include <stdio.h>
1051     ],
1052         [FILE *f = stdin; char buf[256]; f->$frend = buf;],
1053         rb_cv_frend="$frend"; break,
1054         rb_cv_frend="not found")
1055     done])
1056     if test "$rb_cv_frend" = "not found"; then
1057       AC_MSG_RESULT([not found])
1058     else
1059       AC_MSG_RESULT($rb_cv_frend)
1060       AC_DEFINE_UNQUOTED(FILE_READEND, $rb_cv_frend)
1061     fi
1062   fi
1065 AC_CACHE_CHECK([whether st_ino is huge], rb_cv_huge_st_ino,
1066 [AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([
1067 #include <sys/stat.h>
1068 struct stat test_stat;
1069 ], [sizeof(test_stat.st_ino)>sizeof(long)])],
1070 rb_cv_huge_st_ino=yes,
1071 rb_cv_huge_st_ino=no)
1073 if test $rb_cv_huge_st_ino = yes; then
1074   AC_DEFINE(HUGE_ST_INO)
1077 if test "$ac_cv_func_sysconf" = yes; then
1078   AC_DEFUN([RUBY_CHECK_SYSCONF], [dnl
1079   AC_CACHE_CHECK([whether _SC_$1 is supported], rb_cv_have_sc_[]m4_tolower($1),
1080     [AC_TRY_COMPILE([#include <unistd.h>
1081       ],
1082       [_SC_$1 >= 0],
1083       rb_cv_have_sc_[]m4_tolower($1)=yes,
1084       rb_cv_have_sc_[]m4_tolower($1)=no)
1085     ])
1086   if test "$rb_cv_have_sc_[]m4_tolower($1)" = yes; then
1087     AC_DEFINE(HAVE__SC_$1)
1088   fi
1089   ])
1090   RUBY_CHECK_SYSCONF(CLK_TCK)
1093 case "$target_cpu" in
1094 m68*|i?86|ia64|sparc*|alpha*) rb_cv_stack_grow_dir=-1;;
1095 hppa*) rb_cv_stack_grow_dir=+1;;
1096 esac
1097 AC_CACHE_CHECK(stack growing direction, rb_cv_stack_grow_dir,
1098   [AC_TRY_RUN([
1099 /* recurse to get rid of inlining */
1100 static int
1101 stack_growup_p(addr, n)
1102     volatile int *addr, n;
1104     volatile int end;
1105     if (n > 0)
1106         return *addr = stack_growup_p(addr, n - 1);
1107     else
1108         return (&end > addr);
1110 int main()
1112     int x;
1113     return stack_growup_p(&x, 10);
1115 ], rb_cv_stack_grow_dir=-1, rb_cv_stack_grow_dir=+1, rb_cv_stack_grow_dir=0)])
1116 AC_DEFINE_UNQUOTED(STACK_GROW_DIRECTION, $rb_cv_stack_grow_dir)
1118 if test x"$enable_pthread" = xyes; then
1119     for pthread_lib in thr pthread pthreads c c_r root; do
1120         AC_CHECK_LIB($pthread_lib, pthread_kill,
1121                      rb_with_pthread=yes, rb_with_pthread=no)
1122         if test "$rb_with_pthread" = "yes"; then break; fi
1123     done
1124     if test x"$rb_with_pthread" = xyes; then
1125         AC_DEFINE(_REENTRANT)
1126         AC_DEFINE(_THREAD_SAFE)
1127         AC_DEFINE(HAVE_LIBPTHREAD)
1128         case $pthread_lib in
1129         c)
1130             ;;
1131         root)
1132                 ;;
1133         c_r)
1134             MAINLIBS="-pthread $MAINLIBS"
1135             ;;
1136         *)
1137             LIBS="-l$pthread_lib $LIBS"
1138             ;;
1139         esac
1140     else
1141         AC_MSG_WARN("Don't know how to find pthread library on your system -- thread support disabled")
1142     fi
1143     AC_CHECK_FUNCS(nanosleep sched_yield pthread_attr_setinheritsched)
1144     if test x"$ac_cv_func_nanosleep" = xno; then
1145        AC_CHECK_LIB(rt, nanosleep)
1146        if test x"$ac_cv_lib_rt_nanosleep" = xyes; then
1147            AC_DEFINE(HAVE_NANOSLEEP)
1148        fi
1149     fi
1151 if test x"$ac_cv_header_ucontext_h" = xyes; then
1152     if test x"$rb_with_pthread" = xyes; then
1153         AC_CHECK_FUNCS(getcontext setcontext)
1154     fi
1157 if test "$ac_cv_func_fork" = "yes" -a "$rb_with_pthread" = "yes"; then
1158     AC_CACHE_CHECK([if fork works with pthread], rb_cv_fork_with_pthread,
1159         [AC_TRY_RUN([
1160 #include <stdlib.h>
1161 #include <unistd.h>
1162 #include <pthread.h>
1163 #include <stdio.h>
1164 #include <sys/types.h>
1165 #include <sys/wait.h>
1166 #include <signal.h>
1167 #ifndef EXIT_SUCCESS
1168 #define EXIT_SUCCESS 0
1169 #endif
1170 #ifndef EXIT_FAILURE
1171 #define EXIT_FAILURE 1
1172 #endif
1174 void *
1175 thread_func(void *dmy)
1177     return dmy;
1181 use_threads(void)
1183     pthread_t tid;
1184     if (pthread_create(&tid, 0, thread_func, 0) != 0) {
1185         return -1;
1186     }
1187     if (pthread_join(tid, 0) != 0) {
1188         return -1;
1189     }
1190     return 0;
1194 main(int argc, char *argv[])
1196     pid_t pid;
1197     if (use_threads()) return EXIT_FAILURE;
1198     pid = fork();
1200     if (pid) {
1201         int loc;
1202         sleep(1);
1203         if (waitpid(pid, &loc, WNOHANG) == 0) {
1204             kill(pid, SIGKILL);
1205             return EXIT_FAILURE;
1206         }
1207     }
1208     else {
1209         if (use_threads()) return EXIT_FAILURE;
1210     }
1212     return EXIT_SUCCESS;
1214         rb_cv_fork_with_pthread=yes,
1215         rb_cv_fork_with_pthread=no,
1216         rb_cv_fork_with_pthread=yes)])
1217     test x$rb_cv_fork_with_pthread = xyes || AC_DEFINE(CANNOT_FORK_WITH_PTHREAD)
1220 AC_CHECK_FUNCS(backtrace)
1222 AC_ARG_WITH(valgrind,
1223         [  --with-valgrind         enable valgrind memcheck support.],
1224         [AC_CHECK_HEADERS(valgrind/memcheck.h)])
1226 dnl wheather use dln_a_out or not
1227 AC_ARG_WITH(dln-a-out, 
1228         [  --with-dln-a-out        use dln_a_out if possible], [
1229         case $withval in
1230         yes) with_dln_a_out=yes;;
1231         *)   with_dln_a_out=no;;
1232         esac], [with_dln_a_out=no])
1234 AC_CACHE_CHECK(whether ELF binaries are produced, rb_cv_binary_elf,
1235 [AC_TRY_RUN([
1236 /* Test for whether ELF binaries are produced */
1237 #include <fcntl.h>
1238 #include <stdlib.h>
1239 main() {
1240         char buffer[4];
1241         int i=open("conftest",O_RDONLY);
1242         if(i==-1)
1243                 exit(1); /* fail */
1244         if(read(i,&buffer[0],4)<4)
1245                 exit(1); /* fail */
1246         if(buffer[0] != 127 || buffer[1] != 'E' ||
1247            buffer[2] != 'L' || buffer[3] != 'F')
1248                 exit(1); /* fail */
1249         exit(0); /* succeed (yes, it's ELF) */
1252 rb_cv_binary_elf=yes,
1253 rb_cv_binary_elf=no,
1254 rb_cv_binary_elf=yes)])
1256 if test "$rb_cv_binary_elf" = yes; then
1257   AC_DEFINE(USE_ELF)
1260 case "$target_os" in
1261 linux* | gnu* | k*bsd*-gnu | bsdi*)
1262     if test "$rb_cv_binary_elf" = no; then
1263         with_dln_a_out=yes
1264     else
1265         LDFLAGS="$LDFLAGS -rdynamic"
1266     fi;;
1267 esac
1268 LIBEXT=a
1270 AC_SUBST(DLDFLAGS)dnl
1271 AC_SUBST(ARCH_FLAG)dnl
1273 AC_SUBST(STATIC)dnl
1274 AC_SUBST(CCDLFLAGS)dnl
1275 AC_SUBST(LDSHARED)dnl
1276 AC_SUBST(LDSHAREDXX)dnl
1277 AC_SUBST(DLEXT)dnl
1278 AC_SUBST(DLEXT2)dnl
1279 AC_SUBST(LIBEXT)dnl
1281 STATIC=
1282 : ${LIBPATHFLAG=' -L%s'}
1283 : ${PATHFLAG=''}
1285 if test "$with_dln_a_out" != yes; then
1286   rb_cv_dlopen=unknown
1287   AC_MSG_CHECKING(whether OS depend dynamic link works)
1288   if test "$GCC" = yes; then
1289     case "$target_os" in
1290     nextstep*)  CCDLFLAGS="$CCDLFLAGS -fno-common";;
1291     openstep*)  CCDLFLAGS="$CCDLFLAGS -fno-common";;
1292     rhapsody*)  CCDLFLAGS="$CCDLFLAGS -fno-common";;
1293     darwin*)    CCDLFLAGS="$CCDLFLAGS -fno-common";;
1294     human*|bsdi*|beos*|haiku*|cygwin*|mingw*|aix*|interix*) ;;
1295     *) CCDLFLAGS="$CCDLFLAGS -fPIC";;
1296     esac
1297   else
1298     case "$target_os" in
1299         hpux*)          CCDLFLAGS="$CCDLFLAGS +Z";;
1300         solaris*|irix*) CCDLFLAGS="$CCDLFLAGS -KPIC" ;;
1301         sunos*)         CCDLFLAGS="$CCDLFLAGS -PIC" ;;
1302         esix*|uxpds*)   CCDLFLAGS="$CCDLFLAGS -KPIC" ;;
1303         *)              : ${CCDLFLAGS=""} ;;
1304     esac
1305   fi
1308   AC_ARG_ENABLE(rpath,
1309        [  --disable-rpath         embed run path into extension libraries.],
1310        [enable_rpath=$enableval], [enable_rpath="$rb_cv_binary_elf"])
1311   if test "$enable_rpath" = yes; then
1312     LIBPATHFLAG=" -L%1\$-s"
1313     RPATHFLAG=" ${linker_flag}-R%1\$-s"
1314   fi
1316   case "$target_os" in
1317         hpux*)          DLDFLAGS="$DLDFLAGS -E"
1318                         : ${LDSHARED='ld -b'}
1319                         XLDFLAGS="$XLDFLAGS -Wl,-E"
1320                         : ${LIBPATHENV=SHLIB_PATH}
1321                         if test "$rb_cv_prog_gnu_ld" = no; then
1322                             RPATHFLAG=' +b %1$-s'
1323                         fi
1324                         rb_cv_dlopen=yes;;
1325         solaris*)       if test "$GCC" = yes; then
1326                           : ${LDSHARED='$(CC) -shared'}
1327                            if test "$rb_cv_prog_gnu_ld" = yes; then
1328                                LDFLAGS="$LDFLAGS -Wl,-E"
1329                            fi
1330                         else
1331                            : ${LDSHARED='ld -G'}
1332                         fi
1333                         rb_cv_dlopen=yes;;
1334         sunos*)         : ${LDSHARED='ld -assert nodefinitions'}
1335                         rb_cv_dlopen=yes;;
1336         irix*)          : ${LDSHARED='ld -shared'}
1337                         rb_cv_dlopen=yes;;
1338         sysv4*)         : ${LDSHARED='ld -G'}
1339                         rb_cv_dlopen=yes;;
1340         nto-qnx*)       : ${LDSHARED="qcc -shared"}
1341                         rb_cv_dlopen=yes ;;
1342         esix*|uxpds*)   : ${LDSHARED="ld -G"}
1343                         rb_cv_dlopen=yes ;;
1344         osf*)           : ${LDSHARED="ld -shared -expect_unresolved \"*\""}
1345                         rb_cv_dlopen=yes ;;
1346         bsdi3*)         case "$CC" in
1347                         *shlicc*)       : ${LDSHARED="$CC -r"}
1348                                         rb_cv_dlopen=yes ;;
1349                         esac ;;
1350         linux* | gnu* | k*bsd*-gnu | netbsd* | bsdi*)
1351                         : ${LDSHARED='${CC} -shared'}
1352                         if test "$rb_cv_binary_elf" = yes; then
1353                             LDFLAGS="$LDFLAGS -Wl,-export-dynamic"
1354                         fi
1355                         rb_cv_dlopen=yes ;;
1356         interix*)       : ${LDSHARED="$CC -shared"}
1357                         XLDFLAGS="$XLDFLAGS -Wl,-E"
1358                         LIBPATHFLAG=" -L%1\$-s"
1359                         rb_cv_dlopen=yes ;;
1360         freebsd*|dragonfly*)       : ${LDSHARED="$CC -shared"}
1361                         if test "$rb_cv_binary_elf" = yes; then
1362                             LDFLAGS="$LDFLAGS -rdynamic"
1363                             DLDFLAGS="$DLDFLAGS "'-Wl,-soname,$(.TARGET)'
1364                         else
1365                           test "$GCC" = yes && test "$rb_cv_prog_gnu_ld" = yes || LDSHARED="ld -Bshareable"
1366                         fi
1367                         rb_cv_dlopen=yes ;;
1368         openbsd*)       : ${LDSHARED="\$(CC) -shared ${CCDLFLAGS}"}
1369                         if test "$rb_cv_binary_elf" = yes; then
1370                             LDFLAGS="$LDFLAGS -Wl,-E"
1371                         fi
1372                         rb_cv_dlopen=yes ;;
1373         nextstep*)      : ${LDSHARED='cc -r -nostdlib'}
1374                         LDFLAGS="$LDFLAGS -u libsys_s"
1375                         rb_cv_dlopen=yes ;;
1376         openstep*)      : ${LDSHARED='cc -dynamic -bundle -undefined suppress'}
1377                         : ${LDFLAGS=""}
1378                         rb_cv_dlopen=yes ;;
1379         rhapsody*)      : ${LDSHARED='cc -dynamic -bundle -undefined suppress'}
1380                         : ${LDFLAGS=""}
1381                         rb_cv_dlopen=yes ;;
1382         darwin*)        : ${LDSHARED='cc -dynamic -bundle -undefined suppress -flat_namespace'}
1383                         : ${LDFLAGS=""}
1384                         : ${LIBPATHENV=DYLD_LIBRARY_PATH}
1385                         rb_cv_dlopen=yes ;;
1386         aix*)           if test "$GCC" = yes; then
1387                             : ${LDSHARED='$(CC) -shared'}
1388                         else
1389                             : ${LDSHARED='$(CC)'}
1390                         fi
1391                         LDSHARED="$LDSHARED ${linker_flag}-G"
1392                         DLDFLAGS='-eInit_$(TARGET)'
1393                         XLDFLAGS="${linker_flag}-bE:ruby.imp ${linker_flag}-brtl"
1394                         : ${ARCHFILE="ruby.imp"}
1395                         TRY_LINK='$(CC) $(LDFLAGS) -oconftest $(INCFLAGS) -I$(hdrdir) $(CPPFLAGS)'
1396                         TRY_LINK="$TRY_LINK"' $(CFLAGS) $(src) $(LIBPATH) $(LOCAL_LIBS) $(LIBS)'
1397                         : ${LIBPATHENV=SHLIB_PATH}
1398                         rb_cv_dlopen=yes ;;
1399         human*)         : ${DLDFLAGS=''}
1400                         : ${LDSHARED=''}
1401                         : ${LDFLAGS=''}
1402                         : ${LINK_SO='ar cru $@ $(OBJS)'}
1403                         rb_cv_dlopen=yes ;;
1404         beos*)          case "$target_cpu" in
1405                           powerpc*)
1406                             : ${LDSHARED="ld -xms"}
1407                             DLDFLAGS="$DLDFLAGS "'-export Init_$(TARGET) -lbe -lroot glue-noinit.a init_term_dyn.o start_dyn.o'
1408                             ;;
1409                           i586*)
1410                             : ${LDSHARED="ld -shared"}
1411                             DLDFLAGS="$DLDFLAGS -L/boot/develop/lib/x86 -lbe -lroot"
1412                             ;;
1413                         esac
1414                         : ${LIBPATHENV=LIBRARY_PATH}
1415                         rb_cv_dlopen=yes ;;
1416         haiku*)                 case "$target_cpu" in
1417                           powerpc*)
1418                             : ${LDSHARED="ld -xms"}
1419                             DLDFLAGS="$DLDFLAGS "'-export Init_$(TARGET) -lbe -lroot glue-noinit.a init_term_dyn.o start_dyn.o'
1420                             ;;
1421                           i586*)
1422                             : ${LDSHARED="ld -shared"}
1423                             DLDFLAGS="$DLDFLAGS -L/boot/develop/lib/x86 -lbe -lroot"
1424                             ;;
1425                         esac
1426                         : ${LIBPATHENV=LIBRARY_PATH}
1427                         rb_cv_dlopen=yes ;;
1428         nto-qnx*)       DLDFLAGS="$DLDFLAGS -L/lib -L/usr/lib -L/usr/local/lib"
1429                         : ${LDSHARED='ld -Bshareable -x'}
1430                         LDFLAGS="$LDFLAGS -L/lib -L/usr/lib -L/usr/local/lib"
1431                         rb_cv_dlopen=yes;;
1432         cygwin*|mingw*) : ${LDSHARED="${CC} -shared -s"}
1433                         XLDFLAGS="$XLDFLAGS -Wl,--stack,0x00200000"
1434                         DLDFLAGS="${DLDFLAGS} -Wl,--enable-auto-image-base,--enable-auto-import,--export-all"
1435                         : ${LIBPATHENV=""}
1436                         rb_cv_dlopen=yes ;;
1437         hiuxmpp)        : ${LDSHARED='ld -r'} ;;
1438         atheos*)        : ${LDSHARED="$CC -shared"}
1439                         rb_cv_dlopen=yes ;;
1440         os2-emx*)       LDFLAGS="$LDFLAGS -Zbsd-signals"
1441                         ;;
1442         *)              : ${LDSHARED='ld'} ;;
1443   esac
1444   AC_MSG_RESULT($rb_cv_dlopen)
1446 if test "${LDSHAREDXX}" = ""; then
1447     case "${LDSHARED}" in
1448         *'$(CC)'*)
1449             LDSHAREDXX=`echo "${LDSHARED}" | sed 's/\$(CC)/$(CXX)/'`
1450             ;;
1451         *'${CC}'*)
1452             LDSHAREDXX=`echo "${LDSHARED}" | sed 's/\${CC}/${CXX}/'`
1453             ;;
1454         *$CC*)
1455             LDSHAREDXX=`echo "${LDSHARED}" | sed "s|$CC|$CXX|"`
1456             ;;
1457         ld" "*)
1458             ;;
1459     esac
1462 AC_SUBST(LINK_SO)
1463 AC_SUBST(LIBPATHFLAG)
1464 AC_SUBST(RPATHFLAG)
1465 AC_SUBST(LIBPATHENV, "${LIBPATHENV-LD_LIBRARY_PATH}")
1466 AC_SUBST(TRY_LINK)
1468 dln_a_out_works=no
1469 if test "$ac_cv_header_a_out_h" = yes; then
1470   if test "$with_dln_a_out" = yes || test "$rb_cv_dlopen" = unknown; then
1471     cat confdefs.h > config.h
1472     AC_CACHE_CHECK(whether matz's dln works, rb_cv_dln_a_out,
1473     [AC_TRY_COMPILE([
1474 #define USE_DLN_A_OUT
1475 #include "dln.c"
1477         [], 
1478         rb_cv_dln_a_out=yes,
1479         rb_cv_dln_a_out=no)])
1480     if test "$rb_cv_dln_a_out" = yes; then
1481       dln_a_out_works=yes
1482       AC_DEFINE(USE_DLN_A_OUT)
1483     fi
1484   fi
1487 if test "$dln_a_out_works" = yes; then
1488   if test "$GCC" = yes; then
1489     STATIC=-static
1490   else
1491     STATIC=-Bstatic
1492   fi
1493   DLEXT=so
1494   CCDLFLAGS=
1495 else
1496   case "$target_os" in
1497     hpux*)      DLEXT=sl;;
1498     nextstep*)  DLEXT=bundle;;
1499     openstep*)  DLEXT=bundle;;
1500     rhapsody*)  DLEXT=bundle;;
1501     darwin*)    DLEXT=bundle;;
1502     os2-emx*)   DLEXT=dll;;
1503     cygwin*|mingw*)     DLEXT=so;;
1504     *)          DLEXT=so;;
1505   esac
1507 len=2 # .rb
1508 n=`expr "$DLEXT"  : '.*'`; test "$n" -gt "$len" && len=$n
1509 n=`expr "$DLEXT2" : '.*'`; test "$n" -gt "$len" && len=$n
1510 AC_DEFINE_UNQUOTED(DLEXT_MAXLEN, `expr $len + 1`)
1511 test ".$DLEXT"  = "." || AC_DEFINE_UNQUOTED(DLEXT,  ".$DLEXT")
1512 test ".$DLEXT2" = "." || AC_DEFINE_UNQUOTED(DLEXT2, ".$DLEXT2")
1513 AC_SUBST(DLEXT)
1515 AC_SUBST(STRIP)dnl
1516 if test "$with_dln_a_out" = yes; then
1517   STRIP=true
1518 else
1519   STRIP=strip
1522 case "$target_os" in
1523   linux* | gnu* | k*bsd*-gnu)
1524         STRIP='strip -S -x';;
1525   nextstep*)
1526         STRIP='strip -A -n';;
1527   openstep*)
1528         STRIP='strip -A -n';;
1529   rhapsody*)
1530         STRIP='strip -A -n';;
1531   darwin*)
1532         STRIP='strip -A -n';;
1533 esac
1535 EXTSTATIC=
1536 AC_SUBST(EXTSTATIC)dnl
1537 AC_ARG_WITH(static-linked-ext,
1538             [  --with-static-linked-ext link external modules statically],
1539             [case $withval in
1540              yes) STATIC=
1541                   EXTSTATIC=static;;
1542              *) ;;
1543              esac])
1545 case "$target_os" in
1546   human*)
1547     AC_CHECK_LIB(signal, _harderr)
1548     AC_CHECK_LIB(hmem, hmemset)
1549     AC_CHECK_FUNCS(select)
1550     AC_CACHE_CHECK(whether PD libc _dtos18 fail to convert big number,
1551                    rb_cv_missing__dtos18,
1552     [AC_TRY_RUN(
1553 changequote(<<, >>)dnl
1555 #include <stdio.h>
1556 main ()
1558    char buf[256];
1559    sprintf (buf, "%g", 1e+300);
1560    exit (strcmp (buf, "1e+300") ? 0 : 1);
1563 changequote([, ])dnl
1564 rb_cv_missing__dtos18=yes, rb_cv_missing__dtos18=no, rb_cv_missing__dtos18=no)])
1565     if test "$rb_cv_missing__dtos18" = yes; then
1566       AC_DEFINE(MISSING__DTOS18)
1567     fi
1568     AC_CACHE_CHECK(whether PD libc fconvert fail to round,
1569                    rb_cv_missing_fconvert,
1570     [AC_TRY_RUN(
1571 changequote(<<, >>)dnl
1573 #include <stdio.h>
1574 #include <math.h>
1575 main ()
1577   char buf[256];
1578   sprintf (buf, "%f", log(exp(1.0)));
1579   exit (strcmp (buf, "1.000000") ? 0 : 1);
1582 changequote([, ])dnl
1583 rb_cv_missing_fconvert=yes, rb_cv_missing_fconvert=no, rb_cv_missing_fconvert=no)])
1584     if test "$rb_cv_missing_fconvert" = yes; then
1585       AC_DEFINE(MISSING_FCONVERT)
1586     fi
1587     AC_LIBOBJ([x68.o])
1588     CFLAGS="$CFLAGS -fansi-only"
1589     XCFLAGS="$XCFLAGS -cc1-stack=262144 -cpp-stack=2694144"
1590     EXEEXT=.x
1591     OBJEXT=o
1592     setup=Setup.x68
1593     ;;
1594   dnl OS/2 environment w/ Autoconf 2.1x for EMX
1595   os2-emx)
1596     AC_LIBOBJ([os2])
1597     setup=Setup.emx
1598     ;;
1599   *djgpp*)
1600     setup=Setup.dj
1601     ;;
1602   *)
1603     setup=Setup
1604     ;;
1605 esac
1607 AC_SUBST(setup)
1609 if test "$prefix" = NONE; then
1610   prefix=$ac_default_prefix
1613 #if test "$fat_binary" != no ; then
1614 #  CFLAGS="$CFLAGS $ARCH_FLAG"
1617 if test x"$cross_compiling" = xyes; then
1618   test x"$MINIRUBY" = x && MINIRUBY="${RUBY-ruby} -I`pwd` -rfake"
1619   PREP=fake.rb
1620   RUNRUBY='$(MINIRUBY) -I`cd $(srcdir)/lib; pwd`'
1621 else
1622   MINIRUBY='./miniruby$(EXEEXT) -I$(srcdir)/lib'
1623   MINIRUBY="$MINIRUBY"' -I$(EXTOUT)/common -I./- -r$(srcdir)/ext/purelib.rb'
1624   PREP='miniruby$(EXEEXT)'
1625   RUNRUBY='$(MINIRUBY) $(srcdir)/runruby.rb --extout=$(EXTOUT)'
1627 AC_SUBST(MINIRUBY)
1628 AC_SUBST(PREP)
1629 AC_SUBST(RUNRUBY)
1630 AC_SUBST(EXTOUT, [${EXTOUT=.ext}])
1632 FIRSTMAKEFILE=""
1633 LIBRUBY_A='lib$(RUBY_SO_NAME)-static.a'
1634 LIBRUBY='$(LIBRUBY_A)'
1635 LIBRUBYARG_STATIC='-l$(RUBY_SO_NAME)-static'
1636 LIBRUBYARG='$(LIBRUBYARG_STATIC)'
1637 SOLIBS=
1639 case "$target_os" in
1640   cygwin*|mingw*|beos*|haiku*|openstep*|nextstep*|rhapsody*|darwin*|os2-emx*)
1641     : ${DLDLIBS=""}
1642     ;;
1643   *)
1644     DLDLIBS="$DLDLIBS -lc"
1645     ;;
1646 esac
1648 RUBY_SO_NAME='$(RUBY_INSTALL_NAME)'
1649 LIBRUBY_LDSHARED=$LDSHARED
1650 LIBRUBY_DLDFLAGS=$DLDFLAGS
1651 LIBRUBY_SO='lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR).$(TEENY)'
1652 LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so'
1653 ENABLE_SHARED=no
1655 AC_ARG_ENABLE(shared,
1656        [  --enable-shared         build a shared library for Ruby. ],
1657        [enable_shared=$enableval])
1658 if test "$enable_shared" = 'yes'; then
1659   LIBRUBY='$(LIBRUBY_SO)'
1660   LIBRUBYARG_SHARED='-l$(RUBY_SO_NAME)'
1661   LIBRUBYARG='$(LIBRUBYARG_SHARED)'
1662   CFLAGS="$CFLAGS $CCDLFLAGS"
1663   ENABLE_SHARED=yes
1664   if test "$rb_cv_binary_elf" = yes; then
1665     SOLIBS='$(LIBS)'
1666   fi
1667   case "$target_os" in
1668     sunos4*)
1669         LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR) lib$(RUBY_SO_NAME).so'
1670         ;;
1671     linux* | gnu* | k*bsd*-gnu | atheos*)
1672         LIBRUBY_DLDFLAGS='-Wl,-soname,lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR)'
1673         LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR) lib$(RUBY_SO_NAME).so'
1674         ;;
1675     freebsd*|dragonfly*)
1676         SOLIBS='$(LIBS)'
1677         LIBRUBY_SO='lib$(RUBY_SO_NAME).so.$(MAJOR)$(MINOR)'
1678         if test "$rb_cv_binary_elf" != "yes" ; then
1679             LIBRUBY_SO="$LIBRUBY_SO.\$(TEENY)"
1680             LIBRUBY_ALIASES=''
1681         fi
1682         ;;
1683     netbsd*)
1684         SOLIBS='$(LIBS)'
1685         LIBRUBY_SO='lib$(RUBY_SO_NAME).so.$(MAJOR)$(MINOR).$(TEENY)'
1686         LIBRUBY_DLDFLAGS='-Wl,-soname,lib$(RUBY_SO_NAME).so.$(MAJOR)$(MINOR)'
1687         if test "$rb_cv_binary_elf" = yes; then # ELF platforms
1688            LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so.$(MAJOR)$(MINOR) lib$(RUBY_SO_NAME).so'
1689         else    # a.out platforms
1690            LIBRUBY_ALIASES=""
1691         fi
1692         ;;
1693     openbsd*)
1694         SOLIBS='$(LIBS)'
1695         LIBRUBY_SO='lib$(RUBY_INSTALL_NAME).so.$(MAJOR).'`expr ${MINOR} \* 10 + ${TEENY}`
1696         ;;
1697     solaris*)
1698         SOLIBS='$(LIBS)'
1699         LIBRUBY_SO='lib$(RUBY_SO_NAME).so.$(MAJOR)'
1700         LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR).$(TEENY) lib$(RUBY_SO_NAME).so'
1701         if test "$GCC" = yes; then
1702             LIBRUBY_DLDFLAGS="$DLDFLAGS "'-Wl,-h,$(@F)'
1703         fi
1704         XLDFLAGS="$XLDFLAGS "'-R${libdir}'
1705         ;;
1706     hpux*)
1707         XLDFLAGS="$XLDFLAGS "'-Wl,+s,+b,$(libdir)'
1708         LIBRUBY_SO='lib$(RUBY_SO_NAME).sl.$(MAJOR).$(MINOR).$(TEENY)'
1709         LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).sl.$(MAJOR).$(MINOR) lib$(RUBY_SO_NAME).sl'
1710         ;;
1711     aix*)
1712         LIBRUBY_DLDFLAGS="${linker_flag}-bnoentry $XLDFLAGS"
1713         LIBRUBYARG_SHARED='-L${libdir} -l${RUBY_SO_NAME}'
1714         SOLIBS='-lm -lc'
1715         ;;
1716     beos*)
1717         case "$target_cpu" in
1718         powerpc*)
1719             LIBRUBY_DLDFLAGS='-f ruby.exp -lnet -lbe -lroot glue-noinit.a init_term_dyn.o start_dyn.o'
1720             ;;
1721         esac
1722         ;;
1723     darwin*)
1724         LIBRUBY_SO='lib$(RUBY_SO_NAME).$(MAJOR).$(MINOR).$(TEENY).dylib'
1725         LIBRUBY_LDSHARED='cc -dynamiclib -undefined suppress -flat_namespace'
1726         LIBRUBY_DLDFLAGS='-install_name $(libdir)/lib$(RUBY_SO_NAME).dylib -current_version $(MAJOR).$(MINOR).$(TEENY) -compatibility_version $(MAJOR).$(MINOR)'
1727         LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).$(MAJOR).$(MINOR).dylib lib$(RUBY_SO_NAME).dylib'
1728         ;;
1729     interix*)
1730         LIBRUBYARG_SHARED='-L. -L${libdir} -l$(RUBY_SO_NAME)'
1731         ;;
1732     *)
1733         ;;
1734   esac
1736 if test "$enable_rpath" = yes; then
1737     LIBRUBYARG_SHARED="${linker_flag}-R ${linker_flag}\$(libdir) -L\$(libdir) $LIBRUBYARG_SHARED"
1740 LDFLAGS="-L. $LDFLAGS"
1741 AC_SUBST(ARCHFILE)
1743 dnl build rdoc index if requested
1744 RDOCTARGET=""
1745 AC_ARG_ENABLE(install-doc,
1746        [  --disable-install-doc    do not install rdoc indexes during install ],
1747        [install_doc=$enableval], [install_doc=yes])
1748 if test "$install_doc" != no; then
1749    RDOCTARGET="install-doc"
1751 AC_SUBST(RDOCTARGET)
1753 if test "$rb_with_pthread" = "yes"; then
1754     THREAD_MODEL=pthread
1756 MINIDLNOBJ=dln.o
1757 case "$target_os" in
1758     linux*)
1759         ;;
1760     netbsd*)
1761         CFLAGS="$CFLAGS -pipe"
1762         ;;
1763     nextstep*|openstep*)
1764         # The -fno-common is needed if we wish to embed the Ruby interpreter
1765         # into a plugin module of some project (as opposed to embedding it
1766         # within the project's application).  The -I/usr/local/include is
1767         # needed because CPP as discovered by configure (cc -E -traditional)
1768         # fails to consult /usr/local/include by default.  This causes
1769         # mkmf.rb's have_header() to fail if the desired resource happens to be
1770         # installed in the /usr/local tree.
1771         CFLAGS="$CFLAGS -pipe -fno-common"
1772         CPPFLAGS="$CPPFLAGS -I/usr/local/include"
1773         ;;
1774     rhapsody*)
1775         CFLAGS="$CFLAGS -pipe -no-precomp -fno-common"
1776         ;;
1777     darwin*)
1778         CFLAGS="$CFLAGS -pipe -fno-common"
1779         MINIDLNOBJ=dmydln.o
1780         ;;
1781     os2-emx)
1782         CFLAGS="$CFLAGS -DOS2 -Zmts"
1783         LIBRUBY_A=`echo $LIBRUBY_A | sed 's/^lib//'`
1784         LIBRUBY_SO=`echo $LIBRUBY_SO | sed 's/^lib//'`
1785         LIBRUBY_ALIASES=`for i in $LIBRUBY_ALIASES; do echo "$i"; done | sed 's/^lib//'`
1786         ;;
1787     osf*)
1788         if test "$GCC" != "yes" ; then
1789           # compile something small: taint.c is fine for this.
1790           # the main point is the '-v' flag of 'cc'.
1791           case "`cc -v -I. -c main.c -o /tmp/main.o 2>&1`" in
1792           */gemc_cc*)   # we have the new DEC GEM CC
1793                         CFLAGS="$CFLAGS -oldc"
1794                         ;;
1795           *)            # we have the old MIPS CC
1796                         ;;
1797           esac
1798           # cleanup
1799           rm -f /tmp/main.o
1800           CFLAGS="$CFLAGS -std"
1801         fi
1802         ;;
1803     beos*)
1804         case "$target_cpu" in
1805         powerpc*)
1806             CFLAGS="$CFLAGS -relax_pointers"
1807             ;;
1808         esac
1809         ;;
1810     cygwin*|mingw*)
1811         LIBRUBY_DLDFLAGS="${DLDFLAGS}"' -Wl,--out-implib=$(LIBRUBY)'
1812         case "$target_os" in
1813         cygwin*)
1814             if test x"$enable_shared" = xyes; then
1815                 LIBRUBY_SO='cyg$(RUBY_SO_NAME)'${MAJOR}${MINOR}${TEENY}.dll
1816             fi
1817             ;;
1818         mingw*)
1819             RUBY_SO_NAME=${rb_cv_msvcrt}-'$(RUBY_INSTALL_NAME)'${MAJOR}${MINOR}${TEENY}
1820             if test x"$enable_shared" = xyes; then
1821                 LIBRUBY_SO='$(RUBY_SO_NAME)'.dll
1822                 LIBRUBY_DLDFLAGS="${LIBRUBY_DLDFLAGS}"' $(RUBYDEF)'
1823             fi
1824             AC_LIBOBJ([win32])
1825             COMMON_LIBS=m
1826 #           COMMON_MACROS="WIN32_LEAN_AND_MEAN="
1827             COMMON_HEADERS="winsock2.h windows.h"
1828             THREAD_MODEL=win32
1829             ;;
1830         esac
1831         LIBRUBY_ALIASES=''
1832         FIRSTMAKEFILE=GNUmakefile:cygwin/GNUmakefile.in
1833         SOLIBS='$(LIBS)'
1834         if test x"$enable_shared" = xyes; then
1835             LIBRUBY='lib$(RUBY_SO_NAME).dll.a'
1836         else
1837             LIBRUBY_SO=dummy
1838             LIBRUBY='lib$(RUBY_SO_NAME).a'
1839             LIBRUBYARG='-l$(RUBY_SO_NAME)'
1840         fi
1841         MINIDLNOBJ=dmydln.o
1842         ;;
1843     hpux*)
1844         case "$YACC" in
1845           *yacc*)
1846             XCFLAGS="$XCFLAGS -DYYMAXDEPTH=300"
1847             YACC="$YACC -Nl40000 -Nm40000"
1848             ;;
1849         esac
1850         MINIDLNOBJ=dmydln.o
1851         ;;
1852     *)
1853         ;;
1854 esac
1855 MINIOBJS="$MINIDLNOBJ"
1857 case "$build_os" in
1858   *msdosdjgpp*) FIRSTMAKEFILE=GNUmakefile:djgpp/GNUmakefile.in;;
1859 esac
1861 CPPFLAGS="$CPPFLAGS "'$(DEFS)'
1862 test -z "$CPPFLAGS" || CPPFLAGS="$CPPFLAGS "; CPPFLAGS="$CPPFLAGS"'${cppflags}'
1863 cflagspat=`eval echo '"'"${cflags}"'"' | sed 's/[][|.*]/\\&/g'`
1864 CFLAGS=`echo "$CFLAGS" | sed "s|$cflagspat"'|${cflags}|'`
1865 cxxflagspat=`eval echo '"'"${cxxflags}"'"' | sed 's/[][|.*]/\\&/g'`
1866 CXXFLAGS=`echo "$CXXFLAGS" | sed "s|$cxxflagspat"'|${cxxflags}|'`
1867 AC_SUBST(cppflags, [])dnl
1868 AC_SUBST(cflags, ['${optflags} ${debugflags} ${warnflags}'])dnl
1869 AC_SUBST(optflags)dnl
1870 AC_SUBST(debugflags)dnl
1871 AC_SUBST(warnflags)dnl
1872 AC_SUBST(XCFLAGS)dnl
1873 AC_SUBST(XLDFLAGS)dnl
1874 AC_SUBST(LIBRUBY_LDSHARED)
1875 AC_SUBST(LIBRUBY_DLDFLAGS)
1876 AC_SUBST(RUBY_INSTALL_NAME)
1877 AC_SUBST(rubyw_install_name)
1878 AC_SUBST(RUBYW_INSTALL_NAME)
1879 AC_SUBST(RUBY_SO_NAME)
1880 AC_SUBST(LIBRUBY_A)
1881 AC_SUBST(LIBRUBY_SO)
1882 AC_SUBST(LIBRUBY_ALIASES)
1883 AC_SUBST(LIBRUBY)
1884 AC_SUBST(LIBRUBYARG)
1885 AC_SUBST(LIBRUBYARG_STATIC)
1886 AC_SUBST(LIBRUBYARG_SHARED)
1887 AC_SUBST(SOLIBS)
1888 AC_SUBST(DLDLIBS)
1889 AC_SUBST(ENABLE_SHARED)
1890 AC_SUBST(MAINLIBS)
1891 AC_SUBST(COMMON_LIBS)
1892 AC_SUBST(COMMON_MACROS)
1893 AC_SUBST(COMMON_HEADERS)
1894 AC_SUBST(EXPORT_PREFIX)
1895 AC_SUBST(MINIOBJS)
1896 AC_SUBST(THREAD_MODEL)
1898 MAKEFILES="Makefile `echo $FIRSTMAKEFILE | sed 's/:.*//'`"
1899 MAKEFILES="`echo $MAKEFILES`"
1900 AC_SUBST(MAKEFILES)
1902 ri_prefix=
1903 test "$program_prefix" != NONE &&
1904   ri_prefix=$program_prefix
1906 ri_suffix=
1907 test "$program_suffix" != NONE &&
1908   ri_suffix=$program_suffix
1910 RUBY_INSTALL_NAME="${ri_prefix}ruby${ri_suffix}"
1911 case "$target_os" in
1912   cygwin*|mingw*)
1913     RUBYW_INSTALL_NAME="${ri_prefix}rubyw${ri_suffix}"
1914     rubyw_install_name="$RUBYW_INSTALL_NAME"
1915     ;;
1916 esac
1917 RUBY_LIB_PREFIX=`eval echo \\"${libdir}/ruby\\"`
1919 AC_ARG_WITH(ruby-version,
1920             [  --with-ruby-version=STR ruby version string for version specific directories [[full]] (full|minor|STR)],
1921             [ruby_version=$withval],
1922             [ruby_version=full])
1923 case "$ruby_version" in
1924   full)
1925     ruby_version="${MAJOR}.${MINOR}.${TEENY}"
1926     ;;
1927   minor)
1928     ruby_version="${MAJOR}.${MINOR}"
1929     ;;
1930 esac
1932 AC_ARG_WITH(sitedir,
1933             [  --with-sitedir=DIR      site libraries in DIR [[LIBDIR/ruby/site_ruby]]],
1934             [sitedir=$withval],
1935             [sitedir='${libdir}/ruby/site_ruby'])
1936 SITE_DIR=`eval echo \\"${sitedir}\\"`
1938 AC_ARG_WITH(vendordir,
1939             [  --with-vendordir=DIR    vendor libraries in DIR [[LIBDIR/ruby/vendor_ruby]]],
1940             [vendordir=$withval],
1941             [vendordir='${libdir}/ruby/vendor_ruby'])
1942 VENDOR_DIR=`eval echo \\"${vendordir}\\"`
1944 case "$target_os" in
1945   cygwin*|mingw*|*djgpp*|os2-emx*)
1946     RUBY_LIB_PREFIX="`eval echo "$RUBY_LIB_PREFIX" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`"
1947     RUBY_SITE_LIB_PATH="`eval echo "$SITE_DIR" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`"
1948     RUBY_VENDOR_LIB_PATH="`eval echo "$VENDOR_DIR" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`"
1949     ;;
1950   *)
1951     RUBY_LIB_PREFIX="`eval echo \\"$RUBY_LIB_PREFIX\\" | sed 's|^NONE/|'"$prefix"'/|'`"
1952     RUBY_SITE_LIB_PATH="`eval echo \\"$SITE_DIR\\" | sed 's|^NONE/|'"$prefix"'/|'`"
1953     RUBY_VENDOR_LIB_PATH="`eval echo \\"$VENDOR_DIR\\" | sed 's|^NONE/|'"$prefix"'/|'`"
1954     ;;
1955 esac
1956 RUBY_LIB_PATH="${RUBY_LIB_PREFIX}/${ruby_version}"
1957 RUBY_SITE_LIB_PATH2="${RUBY_SITE_LIB_PATH}/${ruby_version}"
1958 RUBY_VENDOR_LIB_PATH2="${RUBY_VENDOR_LIB_PATH}/${ruby_version}"
1960 AC_DEFINE_UNQUOTED(RUBY_LIB, "${RUBY_LIB_PATH}")
1961 AC_DEFINE_UNQUOTED(RUBY_SITE_LIB, "${RUBY_SITE_LIB_PATH}")
1962 AC_DEFINE_UNQUOTED(RUBY_SITE_LIB2, "${RUBY_SITE_LIB_PATH2}")
1963 AC_DEFINE_UNQUOTED(RUBY_VENDOR_LIB, "${RUBY_VENDOR_LIB_PATH}")
1964 AC_DEFINE_UNQUOTED(RUBY_VENDOR_LIB2, "${RUBY_VENDOR_LIB_PATH2}")
1966 AC_SUBST(arch)dnl
1967 AC_SUBST(sitearch)dnl
1968 AC_SUBST(ruby_version)dnl
1969 AC_SUBST(sitedir)dnl
1970 AC_SUBST(vendordir)dnl
1972 configure_args=$ac_configure_args
1973 AC_SUBST(configure_args)dnl
1975 if test "$fat_binary" != no ; then
1976     arch="fat-${target_os}"
1978     AC_DEFINE_UNQUOTED(RUBY_THIN_ARCHLIB,
1979                  "${RUBY_LIB_PATH}/" __ARCHITECTURE__ "-${target_os}")
1981     AC_DEFINE_UNQUOTED(RUBY_SITE_THIN_ARCHLIB,
1982                  "${RUBY_SITE_LIB_PATH}/" __ARCHITECTURE__ "-${target_os}")
1983     AC_DEFINE_UNQUOTED(RUBY_VENDOR_THIN_ARCHLIB,
1984                  "${RUBY_VENDOR_LIB_PATH}/" __ARCHITECTURE__ "-${target_os}")
1985     AC_DEFINE_UNQUOTED(RUBY_PLATFORM, __ARCHITECTURE__ "-${target_os}")
1986 else
1987     arch="${target_cpu}-${target_os}"
1988     AC_DEFINE_UNQUOTED(RUBY_PLATFORM, "${arch}")
1991 case "$target_os" in
1992   mingw*) sitearch="$target_cpu-$rb_cv_msvcrt" ;;
1993   *) sitearch="${arch}" ;;
1994 esac
1996 AC_DEFINE_UNQUOTED(RUBY_ARCHLIB, "${RUBY_LIB_PATH}/${arch}")
1997 AC_DEFINE_UNQUOTED(RUBY_SITE_ARCHLIB, "${RUBY_SITE_LIB_PATH2}/${sitearch}")
1998 AC_DEFINE_UNQUOTED(RUBY_VENDOR_ARCHLIB, "${RUBY_VENDOR_LIB_PATH2}/${sitearch}")
2000 AC_ARG_WITH(search-path,
2001                 [  --with-search-path=DIR specify the additional search path],
2002                 [search_path=$withval])
2003 if test "$search_path" != ""; then
2004     AC_DEFINE_UNQUOTED(RUBY_SEARCH_PATH,"$search_path")
2007 AC_ARG_WITH(rubyhdrdir,
2008             [  --with-ruby-hdrdir=DIR  core headers in DIR [INCLUDEDIR]],
2009             [rubyhdrdir=$withval],
2010             [rubyhdrdir='${includedir}/ruby-${ruby_version}'])
2012 AC_ARG_WITH(sitehdrdir,
2013             [  --with-site-hdrdir=DIR  core headers in DIR [INCLUDEDIR]],
2014             [sitehdrdir=$withval],
2015             [sitehdrdir='${rubyhdrdir}/site_ruby'])
2017 AC_ARG_WITH(vendorhdrdir,
2018             [  --with-vendor-hdrdir=DIR core headers in DIR [INCLUDEDIR]],
2019             [vendorhdrdir=$withval],
2020             [vendorhdrdir='${rubyhdrdir}/vendor_ruby'])
2022 AC_SUBST(rubyhdrdir)dnl
2023 AC_SUBST(sitehdrdir)dnl
2024 AC_SUBST(vendorhdrdir)dnl
2026 AC_ARG_WITH(mantype,
2027                 [  --with-mantype=TYPE specify man page type; TYPE is one of man and doc],
2028                 [
2029                         case "$withval" in
2030                         man|doc)
2031                                 MANTYPE=$withval
2032                                 ;;
2033                         *)
2034                                 AC_MSG_ERROR(invalid man type: $withval)
2035                                 ;;
2036                         esac
2037                 ])
2038 if test -z "$MANTYPE"; then
2039         AC_PATH_PROGS(NROFF, nroff awf, /bin/false, "/usr/bin:/usr/ucb")
2040         if ${NROFF} -mdoc ${srcdir}/ruby.1 >/dev/null 2>&1; then
2041                 MANTYPE=doc
2042         else
2043                 MANTYPE=man
2044         fi
2046 AC_SUBST(MANTYPE)
2048 arch_hdrdir="${EXTOUT}/include/${arch}/ruby"
2049 $MAKEDIRS "${arch_hdrdir}"
2050 config_h="${arch_hdrdir}/config.h"
2051 if test -f "${config_h}" && tr -d '\015' < confdefs.h | cmp -s "${config_h}" -; then
2052   echo "config.h unchanged"
2053 else
2054   echo "creating config.h"
2055   tr -d '\015' < confdefs.h > "${config_h}"
2057 tr -d '\015' < largefile.h > confdefs.h
2058 rm largefile.h
2060 BUILTIN_ENCS=["`sed -n -e '/^BUILTIN_ENCS[      ]*=/{' \
2061         -e s/// -e :l -e '/\\\\$/N' -e 's/\\\\\\n/ /' -e 't l' -e p \
2062         -e '}' "${srcdir}/enc/Makefile.in"`"]
2063 BUILTIN_ENCOBJS=
2064 for e in $BUILTIN_ENCS; do BUILTIN_ENCOBJS="$BUILTIN_ENCOBJS `basename $e .c`"'.$(OBJEXT)'; done
2065 AC_SUBST(BUILTIN_ENCOBJS)
2067 AC_CONFIG_FILES($FIRSTMAKEFILE)
2068 AC_CONFIG_FILES(Makefile, [{
2069         sed '/^MISSING/s/\$U\././g' Makefile
2070         echo; test x"$EXEEXT" = x || echo 'miniruby: miniruby$(EXEEXT)'
2071         test "$RUBY_INSTALL_NAME$EXEEXT" = ruby || echo 'ruby: $(PROGRAM);'
2072         sed ['s/{\$([^(){}]*)[^{}]*}//g'] ${srcdir}/common.mk
2073       } >> confmk$$.tmp && mv -f confmk$$.tmp Makefile],
2074 [RUBY_INSTALL_NAME=$RUBY_INSTALL_NAME EXEEXT=$EXEEXT])
2075 AC_OUTPUT