dnl Process this file with autoconf to produce a configure script.
dnl {
AC_INIT()
AC_CONFIG_AUX_DIR(tool)

AC_PREREQ(2.60)

AC_DEFUN([RUBY_PREREQ_AC],
	[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]), [$1]), [-1],
		AC_MSG_ERROR([Autoconf version ]$1[ or higher is required]$2))])

dnl environment section {

AC_ARG_WITH(baseruby,
	AS_HELP_STRING([--with-baseruby=RUBY], [use RUBY as baseruby; RUBY is the pathname of ruby]),
	[
		AS_CASE(["$withval"],[*ruby*],[BASERUBY=$withval],[AC_MSG_ERROR(need ruby)])
	],
	[
		BASERUBY="ruby"
	])
test "`RUBYOPT=- $BASERUBY -e 'p 42' 2>/dev/null`" = 42 ||
    BASERUBY="echo executable host ruby is required.  use --with-baseruby option.; false"
AC_SUBST(BASERUBY)

AC_DEFUN([RUBY_MINGW32],
[AS_CASE(["$host_os"],
[cygwin*], [
AC_CACHE_CHECK(for mingw32 environment, rb_cv_mingw32,
[AC_TRY_CPP([
#ifndef __MINGW32__
# error
#endif
], rb_cv_mingw32=yes,rb_cv_mingw32=no)
rm -f conftest*])
test "$rb_cv_mingw32" = yes && target_os="mingw32"
  ])
AS_CASE(["$target_os"], [mingw*msvc], [
target_os="`echo ${target_os} | sed 's/msvc$//'`"
  ])])

AC_DEFUN([RUBY_CPPOUTFILE],
[AC_CACHE_CHECK(whether ${CPP} accepts -o, rb_cv_cppoutfile,
[cppflags=$CPPFLAGS
CPPFLAGS='-o conftest.i'
AC_TRY_CPP([], rb_cv_cppoutfile=yes, rb_cv_cppoutfile=no)
CPPFLAGS=$cppflags
rm -f conftest*])
if test "$rb_cv_cppoutfile" = yes; then
  CPPOUTFILE='-o conftest.i'
elif test "$rb_cv_cppoutfile" = no; then
  CPPOUTFILE='> conftest.i'
elif test -n "$rb_cv_cppoutfile"; then
  CPPOUTFILE="$rb_cv_cppoutfile"
fi
AC_SUBST(CPPOUTFILE)])

AC_DEFUN([RUBY_PROG_GNU_LD],
[AC_CACHE_CHECK(whether the linker is GNU ld, rb_cv_prog_gnu_ld,
[if `$CC $CFLAGS $CPPFLAGS $LDFLAGS --print-prog-name=ld 2>&1` -v 2>&1 | grep "GNU ld" > /dev/null; then
  rb_cv_prog_gnu_ld=yes
else
  rb_cv_prog_gnu_ld=no
fi
])
GNU_LD=$rb_cv_prog_gnu_ld
AC_SUBST(GNU_LD)])

eval `sed -n 's/^#define RUBY_VERSION_\([A-Z][A-Z_0-9]*\) \([0-9][0-9]*\)/\1=\2/p' $srcdir/version.h`
for v in MAJOR MINOR TEENY; do
    if eval "test \"\$$v\" = ''"; then
	AC_MSG_ERROR(could not determine $v number from version.h)
    fi
done
AC_SUBST(MAJOR)
AC_SUBST(MINOR)
AC_SUBST(TEENY)
RUBY_PROGRAM_VERSION=`sed -n 's/^#define RUBY_VERSION "\(.*\)"/\1/p' $srcdir/version.h`
AC_SUBST(RUBY_PROGRAM_VERSION)
RUBY_RELEASE_DATE=`sed -n 's/^#define RUBY_RELEASE_DATE "\(.*\)"/\1/p' $srcdir/version.h`
AC_SUBST(RUBY_RELEASE_DATE)
if test "$MAJOR" = "1"; then
  AC_DEFINE(CANONICALIZATION_FOR_MATHN)
fi
dnl checks for alternative programs
AC_ARG_WITH(gcc,
	AS_HELP_STRING([--without-gcc], [never use gcc]),
	[
	AS_CASE([$withval],
	    [no],  [: ${CC=cc}],
	    [yes], [: ${CC=gcc}],
	           [CC=$withval])])
dnl If the user switches compilers, we can't believe the cache
if test ! -z "$ac_cv_prog_CC" -a ! -z "$CC" -a "$CC" != "$ac_cv_prog_CC"
then
  AC_MSG_ERROR(cached CC is different -- throw away $cache_file
(it is also a good idea to do 'make clean' before compiling))
fi
test -z "$CC" || ac_cv_prog_CC="$CC"

if test "$program_prefix" = NONE; then
  program_prefix=
fi
RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"`
RUBYW_BASE_NAME=`echo rubyw | sed "$program_transform_name"`
AC_SUBST(RUBY_BASE_NAME)
AC_SUBST(RUBYW_BASE_NAME)

AC_CANONICAL_TARGET
target_os=`echo $target_os | sed 's/linux-gnu$/linux/;s/linux-gnu/linux-/'`
ac_install_sh='' # unusable for extension libraries.

AC_DEFUN([RUBY_APPEND_OPTION],
	[# RUBY_APPEND_OPTION($1, $2)
	AS_CASE([" [$]{$1-} "],
	[*' $2 '*], [], ['  '], [ $1="$2"], [ $1="[$]$1 $2"])])
AC_DEFUN([RUBY_APPEND_OPTIONS],
	[{ for rb_opt in $2; do # RUBY_APPEND_OPTIONS($1, $2)
	AS_CASE([" [$]{$1-} "],
	[*" [$]{rb_opt} "*], [], ['  '], [ $1="[$]{rb_opt}"], [ $1="[$]$1 [$]{rb_opt}"])
	done; }])
AC_DEFUN([RUBY_PREPEND_OPTION],
	[# RUBY_PREPEND_OPTION($1, $2)
	AS_CASE([" [$]{$1-} "],
	[*' $2 '*], [], ['  '], [ $1="$2"], [ $1="$2 [$]$1"])])
AC_DEFUN([RUBY_PREPEND_OPTIONS],
	[{ unset rb_opts; for rb_opt in $2; do # RUBY_PREPEND_OPTIONS($1, $2)
	AS_CASE([" [$]{rb_opts} [$]{$1-} "],
	[*" [$]{rb_opt} "*], [], ['  '], [ $1="[$]{rb_opt}"], [ rb_opts="[$]{rb_opts}[$]{rb_opt} "])
	done
	$1="[$]{rb_opts}[$]$1"; }])

AC_ARG_WITH(arch,
 	AS_HELP_STRING([--with-arch=ARCHS],
		       [build an Apple/NeXT Multi Architecture Binary (MAB);
                          ARCHS is a comma-delimited list of architectures for
                          which to build; if this option is disabled or omitted
			  entirely, then the package will be built only for the
			  target platform]),
       [target_archs="$withval"], [unset target_archs])

AC_DEFUN([RUBY_DEFAULT_ARCH], [
AC_MSG_CHECKING([arch option])
AS_CASE([$1],
	[*64],        [ARCH_FLAG=-m64],
	[[i[3-6]86]], [ARCH_FLAG=-m32],
	[AC_MSG_ERROR(unknown target architecture: $target_archs)]
	)
AC_MSG_RESULT([$ARCH_FLAG])
])

AC_DEFUN([RUBY_UNIVERSAL_ARCH], [
# RUBY_UNIVERSAL_ARCH begin
test ${CFLAGS+set} && CFLAGS=`echo "$CFLAGS" | sed -e 's/ *-arch  *[^ ]*//g' -e 's/ *-m32//g' -e 's/ *-m64//g'`
test ${LDFLAGS+set} && LDFLAGS=`echo "$LDFLAGS" | sed -e 's/ *-arch  *[^ ]*//g' -e 's/ *-m32//g' -e 's/ *-m64//g'`
unset ARCH_FLAG universal_binary universal_archnames
if test ${target_archs+set}; then
    AC_MSG_CHECKING([target architectures])
    target_archs=`echo $target_archs | tr , ' '`
    # /usr/lib/arch_tool -archify_list $TARGET_ARCHS
    for archs in $target_archs
    do
	AS_CASE([",$universal_binary,"],[*",$archs,"*], [],[
	    cpu=`$SHELL "$ac_aux_dir/config.sub" "${archs}-${target_os}" 2>&1` || {
	        AC_MSG_RESULT([failed])
		AC_MSG_ERROR([$cpu])
	    }
	    cpu=`echo $cpu | sed 's/-.*-.*//'`
	    universal_binary="${universal_binary+$universal_binary,}$cpu"
	    universal_archnames="${universal_archnames} ${archs}=${cpu}"
	    ARCH_FLAG="${ARCH_FLAG+$ARCH_FLAG }-arch $archs"
	    ])
    done
    target_archs="$universal_binary"
    unset universal_binary
    AS_CASE(["$target_archs"],
      [*,*], [universal_binary=yes],
             [unset universal_archnames])
    AC_MSG_RESULT([$target_archs])

    target=`echo $target | sed "s/^$target_cpu-/-/"`
    target_alias=`echo $target_alias | sed "s/^$target_cpu-/-/"`
    if test "${universal_binary-no}" = yes; then
	RUBY_PREREQ_AC(2.63, [ to compile universal binary])
	AC_SUBST(try_header,try_compile)
	target_cpu=universal
	real_cross_compiling=$cross_compiling
    else
	if test x"$target_cpu" != x"${target_archs}"; then
	    echo 'int main(){return 0;}' > conftest.c
	    if $CC $CFLAGS $ARCH_FLAG conftest.c > /dev/null 2>&1; then
		rm -f conftest.* a.out
	    else
		RUBY_DEFAULT_ARCH("$target_archs")
	    fi
	fi
	target_cpu=${target_archs}
    fi
    AS_CASE(["$target"], [-*], [ target="$target_cpu${target}"])
    AS_CASE(["$target_alias"], [-*], [ target_alias="$target_cpu${target_alias}"])
    CFLAGS="$CFLAGS ${ARCH_FLAG}"
    LDFLAGS="${LDFLAGS+$LDFLAGS }${ARCH_FLAG}"
else
    if test x"$target_alias" = x; then
	AS_CASE(["$target_os"],
	  [darwin*], [
	    AC_MSG_CHECKING([for real target cpu])
	    target=`echo $target | sed "s/^$target_cpu-/-/"`
	    target_cpu=`$CC -E - 2>/dev/null <<EOF |
#ifdef __x86_64__
"processor-name=x86_64"
#endif
#ifdef __i386__
"processor-name=i386"
#endif
#ifdef __ppc__
"processor-name=powerpc"
#endif
#ifdef __ppc64__
"processor-name=powerpc64"
#endif
EOF
	    sed -n 's/^"processor-name=\(.*\)"/\1/p'`
	    target="$target_cpu${target}"
	    AC_MSG_RESULT([$target_cpu])
	    ])
    fi
    target_archs="$target_cpu"
fi
if test "${target_archs}" != "${rb_cv_target_archs-${target_archs}}"; then
    AC_MSG_ERROR([target arch(s) has changed from ${rb_cv_target_archs-nothing} to ${target_archs}])
else
    rb_cv_target_archs=${target_archs}
fi
# RUBY_UNIVERSAL_ARCH end
])

AC_ARG_ENABLE(load-relative,
       AS_HELP_STRING([--enable-load-relative], [resolve load paths at run time]),
       [load_relative=$enableval])

AC_ARG_PROGRAM

dnl Checks for programs.

cflagspat=
test -z "$optflags" ||
    cflagspat="$cflagspat;s|"`eval echo '"'"${optflags}"'"' | sed 's/[[][|.*]]/\\&/g;s/^ */ /;s/ *$/ /'`'| |g'
test -z "$debugflags" ||
    cflagspat="$cflagspat;s|"`eval echo '"'"${debugflags}"'"' | sed 's/[[][|.*]]/\\&/g;s/^ */ /;s/ *$/ /'`'| |g'
test -z "warnflags" ||
    cflagspat="$cflagspat;s|"`eval echo '"'"${warnflags}"'"' | sed 's/[[][|.*]]/\\&/g;s/^ */ /;s/ *$/ /'`'| |g'
if test -z "${CFLAGS+set}"; then
    cflags=`echo " $cflags " | sed "$cflagspat;s/^ *//;s/ *$//"`
    orig_cflags="$cflags"
    cflags="$cflags "'${optflags} ${debugflags} ${warnflags}'
fi
if test -z "${CXXFLAGS+set}"; then
    cxxflags=`echo " $cxxflags " | sed "$cflagspat;s/^ *//;s/ *$//"`
    orig_cxxflags="$cxxflags"
    cxxflags="$cxxflags "'${optflags} ${debugflags} ${warnflags}'
fi

if test x"${build}" != x"${host}"; then
  AC_CHECK_TOOL(CC, gcc)
fi
AC_PROG_CC
AC_PROG_CXX
AC_PROG_GCC_TRADITIONAL
AC_SUBST(GCC)
if test "$GCC" = yes; then
    linker_flag=-Wl,
    : ${optflags=-O3}
    AS_CASE(["$target_os"], [linux*|darwin*], [: ${debugflags=-ggdb}])
else
    linker_flag=
fi
test $ac_cv_prog_cc_g = yes && : ${debugflags=-g}

RUBY_PROG_GNU_LD
RUBY_CPPOUTFILE

: ${OUTFLAG='-o '}
: ${COUTFLAG=${OUTFLAG}}
AC_SUBST(OUTFLAG)
AC_SUBST(COUTFLAG)

RUBY_MINGW32
RUBY_UNIVERSAL_ARCH
if test "$target_cpu" != "$host_cpu" -a "$GCC" = yes -a "$cross_compiling" = no -a "$universal_binary" = no; then
    RUBY_DEFAULT_ARCH("$target_cpu")
fi

AC_CHECK_TOOL(RANLIB, ranlib, :)
AC_CHECK_TOOL(AR, ar)
if test -z "$AR"; then
  AC_CHECK_PROGS(AR, aal, ar)
fi

AC_CHECK_TOOL(AS, as)
ASFLAGS=$ASFLAGS
AC_SUBST(ASFLAGS)

AS_CASE(["$target_os"],[cygwin*|mingw*], [ac_cv_prog_ac_ct_OBJCOPY=":"])

# BSD's ports and MacPorts prefix GNU binutils with 'g'
AC_CHECK_TOOLS(OBJDUMP, [objdump gobjdump])
AC_CHECK_TOOLS(OBJCOPY, [objcopy gobjcopy])

AS_CASE(["$target_os"],
[cygwin*|mingw*], [
    AC_CHECK_TOOL(NM, nm)
    AC_CHECK_TOOL(WINDRES, windres)
    AC_CHECK_TOOL(DLLWRAP, dllwrap)
    target=`echo $target | sed "s/^$target_cpu-/-/"`
    target_alias=`echo $target_alias | sed "s/^$target_cpu-/-/"`
    target_cpu=`echo $target_cpu | sed s/i.86/i386/`
    AS_CASE(["$target"], [-*], [ target="$target_cpu${target}"])
    AS_CASE(["$target_alias"], [-*], [ target_alias="$target_cpu${target_alias}"])
    AS_CASE(["$target_os"],
    [mingw*], [
	test "$rb_cv_msvcrt" = "" && unset rb_cv_msvcrt
	AC_CACHE_CHECK(for mingw32 runtime DLL, rb_cv_msvcrt, [
	AC_TRY_LINK([@%:@include <stdio.h>],
		    [FILE* volatile f = stdin; return 0;],
		    [rb_cv_msvcrt=`$OBJDUMP -p conftest$ac_exeext |
				   tr A-Z a-z |
				   sed -n '/^[[ 	]]*dll name: \(msvc.*\)\.dll$/{s//\1/p;q;}'`],
		    [rb_cv_msvcrt=msvcrt])
	test "$rb_cv_msvcrt" = "" && rb_cv_msvcrt=msvcrt])
    ])
    : ${enable_shared=yes}
    ],
[aix*],     [AC_CHECK_TOOL(NM, nm, /usr/ccs/bin/nm, /usr/ccs/bin:$PATH)],
[hiuxmpp*], [AC_DEFINE(__HIUX_MPP__)])    # by TOYODA Eizi <toyoda@npd.kishou.go.jp>

AC_PROG_LN_S
AC_PROG_MAKE_SET
AC_PROG_INSTALL
AC_PROG_MKDIR_P
if test "x$MKDIR_P" = "x -d"; then
  if test x"$as_mkdir_p" != xfalse; then
    MKDIR_P='mkdir -p'
    echo "use 'mkdir -p' as MKDIR_P"
  else
    AC_MSG_ERROR([mkdir -p is required])
  fi
fi
MAKEDIRS="$MKDIR_P"
AC_SUBST(MAKEDIRS)

AC_CHECK_TOOL(DOT, dot)
AC_CHECK_TOOL(DOXYGEN, doxygen)
if test x"$DOXYGEN" = x; then
    CAPITARGET=nodoc
else
    CAPITARGET=capi
fi
AC_SUBST(CAPITARGET)

# checks for UNIX variants that set C preprocessor variables
AC_USE_SYSTEM_EXTENSIONS

AC_SUBST(RM, ['rm -f'])
AC_SUBST(CP, ['cp'])
AC_SUBST(RMDIRS, ['$(top_srcdir)/tool/rmdirs'])
AC_SUBST(RMALL, ['rm -fr'])

AC_MSG_CHECKING([for cd using phisical directory])
rm -fr conf$$.dir
mkdir conf$$.dir &&
(cd conf$$.dir && mkdir src build && cd src &&
$as_ln_s ../build . > /dev/null 2>&1 && cd build &&
for chdir in 'cd -P' 'PWD= cd'; do
    /bin/sh -c "$chdir ../src && echo '$chdir' > cdcmd" 2> /dev/null && break
done)
if test -e conf$$.dir/src/cdcmd; then
    read CHDIR < conf$$.dir/src/cdcmd 2> /dev/null
else
    CHDIR=cd
fi
rm -fr conf$$.dir
AC_MSG_RESULT([$CHDIR])
AC_SUBST(CHDIR)

dnl }
dnl compiler section {

AC_DEFUN(RUBY_TRY_CFLAGS, [
    save_CFLAGS="$CFLAGS"
    CFLAGS="[$]CFLAGS $1"
    AC_MSG_CHECKING([whether ]$1[ is accepted])
    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])],
	[$2
	AC_MSG_RESULT(yes)],
	[$3
	AC_MSG_RESULT(no)])
    CFLAGS="$save_CFLAGS"
    save_CFLAGS=
])

AC_DEFUN(RUBY_TRY_LDFLAGS, [
    save_LDFLAGS="$LDFLAGS"
    LDFLAGS="[$]LDFLAGS $1"
    AC_MSG_CHECKING([whether $1 is accepted])
    AC_TRY_LINK([$4], [$5],
	[$2
	AC_MSG_RESULT(yes)],
	[$3
	AC_MSG_RESULT(no)])
    LDFLAGS="$save_LDFLAGS"
    save_LDFLAGS=
])

if test "$GCC:${warnflags+set}:no" = yes::no; then
    for wflag in -Wno-unused-parameter -Wno-parentheses -Wpointer-arith -Wwrite-strings \
		 -Wno-missing-field-initializers -Wshorten-64-to-32 -Wno-long-long; do
	RUBY_TRY_CFLAGS($wflag, [warnflags="${warnflags+$warnflags }$wflag"])
    done
    AS_CASE([" $warnflags "],[*" -Wno-missing-field-initializers "*], [wflag=-Wextra],
                             [wflag=-Wall])
    RUBY_TRY_CFLAGS($wflag, [warnflags="$wflag${warnflags+ $warnflags}"])
fi
if test "$GCC" = yes; then
    if test "$visibility_option" = yes; then
	RUBY_APPEND_OPTION(XCFLAGS, -fvisibility=hidden)
    else
	RUBY_TRY_LDFLAGS([-Wl,-unexported_symbol,_Init_*], [visibility_option=ld], [visibility_option=no])
    fi
    test "$visibility_option" = no || OBJCOPY=:
fi

test -z "${ac_env_CFLAGS_set}" -a -n "${cflags+set}" && eval CFLAGS="\"$cflags $ARCH_FLAG\""
test -z "${ac_env_CXXFLAGS_set}" -a -n "${cxxflags+set}" && eval CXXFLAGS="\"$cxxflags $ARCH_FLAG\""

dnl check for large file stuff
mv confdefs.h confdefs1.h
: > confdefs.h
AC_SYS_LARGEFILE
mv confdefs.h largefile.h
mv confdefs1.h confdefs.h
cat largefile.h >> confdefs.h

AS_CASE(["$target_os"],[mingw*], [ac_cv_type_off_t=yes;ac_cv_sizeof_off_t=8])

AC_CHECK_TYPES([long long, off_t])

AC_CACHE_CHECK([char bit], [rb_cv_char_bit],
    [test "$universal_binary" = yes && cross_compiling=yes
    AC_COMPUTE_INT([rb_cv_char_bit], [CHAR_BIT],
	[AC_INCLUDES_DEFAULT([@%:@include <limits.h>])], [rb_cv_char_bit=8])
    test "$universal_binary" = yes && cross_compiling=$real_cross_compiling])

dnl RUBY_CHECK_SIZEOF [typename], [maybe same size types], [macros], [include]
AC_DEFUN([RUBY_CHECK_SIZEOF],
[m4_bmatch([$1], [\.], [], [if test "$universal_binary" = yes; then])
AC_CACHE_CHECK([size of $1], [AS_TR_SH([ac_cv_sizeof_$1])], [
    unset AS_TR_SH(ac_cv_sizeof_$1)
    rbcv_var="
typedef m4_bpatsubst([$1], [\..*]) ac__type_sizeof_;
static ac__type_sizeof_ *rbcv_ptr;
@%:@define AS_TR_CPP(SIZEOF_$1) sizeof((*rbcv_ptr)[]m4_bmatch([$1], [\.], .m4_bpatsubst([$1], [^[^.]*\.])))
"
    m4_ifval([$2], [test -z "${AS_TR_SH(ac_cv_sizeof_$1)+set}" && {
    for t in $2; do
	AC_COMPILE_IFELSE(
	    [AC_LANG_BOOL_COMPILE_TRY(AC_INCLUDES_DEFAULT([$4]
		[$rbcv_var]),
		[AS_TR_CPP(SIZEOF_$1) == sizeof($t)])], [
		AS_TR_SH(ac_cv_sizeof_$1)=AS_TR_CPP([SIZEOF_]$t)
		break])
    done
    }])
    unset cond
    m4_ifval([$3], [test -z "${AS_TR_SH(ac_cv_sizeof_$1)+set}" && {
    for s in 32 64 128; do
	for t in $3; do
	    cond="${cond}
@%:@${cond+el}if defined(__${t}${s}__) || defined(__${t}${s}) || defined(_${t}${s}) || defined(${t}${s})"
	    hdr="AC_INCLUDES_DEFAULT([$4
@%:@if defined(__${t}${s}__) || defined(__${t}${s}) || defined(_${t}${s}) || defined(${t}${s})
@%:@ define AS_TR_CPP(HAVE_$1) 1
@%:@else
@%:@ define AS_TR_CPP(HAVE_$1) 0
@%:@endif])"
	    AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([$hdr], [!AS_TR_CPP(HAVE_$1)])], [continue])
	    AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([$hdr]
				[$rbcv_var],
				[AS_TR_CPP(HAVE_$1) == (AS_TR_CPP(SIZEOF_$1) == ([$[s / rb_cv_char_bit]]))])],
		[AS_TR_SH(ac_cv_sizeof_$1)="${AS_TR_SH(ac_cv_sizeof_$1)+${AS_TR_SH(ac_cv_sizeof_$1)-} }${t}${s}"])
	done
    done
    }])
    m4_ifval([$2][$3], [case "${AS_TR_SH(ac_cv_sizeof_$1)}" in
    #(
    [SIZEOF_*]);;
    #(
    *)])
    test "$universal_binary" = yes && cross_compiling=yes
    AC_COMPUTE_INT([t], AS_TR_CPP(SIZEOF_$1), [AC_INCLUDES_DEFAULT([$4])]
[${cond+$cond
@%:@else}
$rbcv_var
${cond+@%:@endif}
@%:@ifndef AS_TR_CPP(SIZEOF_$1)
@%:@define AS_TR_CPP(SIZEOF_$1) 0
@%:@endif], [t=0])
    test "$universal_binary" = yes && cross_compiling=$real_cross_compiling
    if test ${t-0} != 0; then
	AS_TR_SH(ac_cv_sizeof_$1)="${AS_TR_SH(ac_cv_sizeof_$1)+${AS_TR_SH(ac_cv_sizeof_$1)-} }${t}"
    fi
    m4_ifval([$2][$3], [;; esac])
    : ${AS_TR_SH(ac_cv_sizeof_$1)=0}
])
{
    unset cond
    for t in ${AS_TR_SH(ac_cv_sizeof_$1)-}; do
	AS_CASE(["$t"],
	[[[0-9]*|SIZEOF_*]], [
	    ${cond+echo "@%:@else"}
	    echo "[@%:@define ]AS_TR_CPP(SIZEOF_$1) [$t]"
	    break
	    ],
	[
	    s=`expr $t : ['.*[^0-9]\([0-9][0-9]*\)$']`
	    echo "@%:@${cond+el}if defined(__${t}__) || defined(__${t}) || defined(_${t}) || defined($t)"
	    echo "@%:@define AS_TR_CPP(SIZEOF_$1) [$[s / rb_cv_char_bit]]"
	    cond=1
	    ])
    done
    ${cond+echo "@%:@endif"}
} >> confdefs.h
m4_bmatch([$1], [\.], [], [else
AC_CHECK_SIZEOF([$1], 0, [$4])
fi])
])

RUBY_CHECK_SIZEOF(int, [], [ILP])
RUBY_CHECK_SIZEOF(short)
RUBY_CHECK_SIZEOF(long, [int], [ILP LP])
RUBY_CHECK_SIZEOF(long long)
RUBY_CHECK_SIZEOF(__int64)
RUBY_CHECK_SIZEOF(off_t)
RUBY_CHECK_SIZEOF(void*, [int long "long long"], [ILP LP LLP])
RUBY_CHECK_SIZEOF(float)
RUBY_CHECK_SIZEOF(double)
RUBY_CHECK_SIZEOF(time_t, [long "long long"], [], [@%:@include <time.h>])

dnl RUBY_REPLACE_TYPE [typename] [default type] [macro type] [included]
AC_DEFUN([RUBY_REPLACE_TYPE], [dnl
    AC_CHECK_TYPE([$1], [n=[$1]], [n=[$2]], [$4])
    AC_CACHE_CHECK([for convertible type of [$1]], rb_cv_[$1]_convertible, [
	u= t=
	AS_CASE(["$n "],
	  [*" signed "*], [ ],
	  [*" unsigned "*], [
	    u=U],
	  [
	    AC_COMPILE_IFELSE(
		[AC_LANG_BOOL_COMPILE_TRY([AC_INCLUDES_DEFAULT([$4])], [($n)-1 > 0])],
		[u=U])])
	if test x"$t" = x; then
	    for t in "long long" long int short; do
		test -n "$u" && t="unsigned $t"
		AC_COMPILE_IFELSE(
		    [AC_LANG_BOOL_COMPILE_TRY([AC_INCLUDES_DEFAULT([$4])]
			[typedef $n rbcv_conftest_target_type;
			typedef $t rbcv_conftest_replace_type;
			extern rbcv_conftest_target_type rbcv_conftest_var;
			extern rbcv_conftest_replace_type rbcv_conftest_var;
			extern rbcv_conftest_target_type rbcv_conftest_func(void);
			extern rbcv_conftest_replace_type rbcv_conftest_func(void);
			], [sizeof(rbcv_conftest_target_type) == sizeof(rbcv_conftest_replace_type)])],
		    [n="$t"; break])
	    done
	fi
	AS_CASE([" $n "],
	  [*" long long "*], [
	    t=LL],
	  [*" long "*], [
	    t=LONG],
	  [
	    t=INT])
	rb_cv_[$1]_convertible=${u}${t}])
    test "${AS_TR_SH(ac_cv_type_[$1])}" = "yes" && n="$1"
    AC_DEFINE_UNQUOTED(rb_[$1], $n)
    AC_DEFINE_UNQUOTED([$3]2NUM[(v)], [${rb_cv_[$1]_convertible}2NUM(v)])
    AC_DEFINE_UNQUOTED(NUM2[$3][(v)], [NUM2${rb_cv_[$1]_convertible}(v)])
    AC_DEFINE_UNQUOTED(PRI_[$3]_PREFIX,
	["`echo ${rb_cv_[$1]_convertible} | sed ['s/^U//;s/[^L].*//;y/L/l/']`"])
])
RUBY_REPLACE_TYPE(pid_t, int, PIDT)
RUBY_REPLACE_TYPE(uid_t, int, UIDT)
RUBY_REPLACE_TYPE(gid_t, int, GIDT)
RUBY_REPLACE_TYPE(time_t, [], TIMET, [@%:@include <time.h>])
RUBY_REPLACE_TYPE(dev_t, [int long "long long"], DEVT)

AC_CACHE_CHECK(for prototypes, rb_cv_have_prototypes,
  [AC_TRY_COMPILE([int foo(int x) { return 0; }], [return foo(10);],
	rb_cv_have_prototypes=yes,
	rb_cv_have_prototypes=no)])
if test "$rb_cv_have_prototypes" = yes; then
  AC_DEFINE(HAVE_PROTOTYPES)
fi

AC_CACHE_CHECK(token paste string, rb_cv_tokenpaste,
  [AC_TRY_COMPILE([#define paste(a,b) a##b],
		  [int xy = 1; return paste(x,y);],
		  rb_cv_tokenpaste=ansi,
		  rb_cv_tokenpaste=knr)])
if test "$rb_cv_tokenpaste" = ansi; then
  AC_DEFINE(TOKEN_PASTE(x,y),[x##y])
else
  AC_DEFINE(TOKEN_PASTE(x,y),[x/**/y])
fi

AC_CACHE_CHECK(stringization, rb_cv_stringization, [
  rb_cv_stringization=no
  for string in "#expr" '"expr"'; do
    AC_COMPILE_IFELSE([
      AC_LANG_BOOL_COMPILE_TRY([
#define STRINGIZE0(expr) $string
#define STRINGIZE(expr) STRINGIZE0(expr)
#undef real_test_for_stringization
#define test_for_stringization -.real_test_for_stringization.-
const char stringized[[]] = STRINGIZE(test_for_stringization);
], [sizeof(stringized) == 32])],
      [rb_cv_stringization="$string"; break],
      [rb_cv_stringization=no])
  done]
)
AC_DEFINE(STRINGIZE(expr),STRINGIZE0(expr))
if test x"$rb_cv_stringization" != xno -a "$rb_cv_stringization" != "#expr"; then
  AC_DEFINE_UNQUOTED(STRINGIZE0(expr),$rb_cv_stringization)
  AC_DEFINE(OLD_FASHIONED_STRINGIZATION,1)
fi

AC_CACHE_CHECK([string literal concatenation],
  rb_cv_string_literal_concatenation, [
  AC_COMPILE_IFELSE([
    AC_LANG_BOOL_COMPILE_TRY([
const char concatenated_literal[[]] = "literals" "to"
  "be" "concatenated.";
], [sizeof(concatenated_literal) == 26])],
    [rb_cv_string_literal_concatenation=yes],
    [rb_cv_string_literal_concatenation=no])]
)
if test "$rb_cv_string_literal_concatenation" = no; then
  AC_DEFINE(NO_STRING_LITERAL_CONCATENATION,1)
fi

AC_CACHE_CHECK(for variable length prototypes and stdarg.h, rb_cv_stdarg,
  [AC_TRY_COMPILE([
#include <stdarg.h>
int foo(int x, ...) {
	va_list va;
	va_start(va, x);
	va_arg(va, int);
	va_arg(va, char *);
	va_arg(va, double);
	return 0;
}
], [return foo(10, "", 3.14);],
	rb_cv_stdarg=yes,
	rb_cv_stdarg=no)])
if test "$rb_cv_stdarg" = yes; then
  AC_DEFINE(HAVE_STDARG_PROTOTYPES)
fi

AC_CACHE_CHECK(for variable length macro, rb_cv_va_args_macro,
  [AC_TRY_COMPILE([@%:@define FOO(a, ...) foo(a, @%:@@%:@__VA_ARGS__)],
  [FOO(1);FOO(1,2);FOO(1,2,3);],
  rb_cv_va_args_macro=yes,
  rb_cv_va_args_macro=no)])
if test "$rb_cv_va_args_macro" = yes; then
  AC_DEFINE(HAVE_VA_ARGS_MACRO)
fi

AC_DEFUN([RUBY_DEFINE_IF], [dnl
    m4_ifval([$1],[test "$1" && cat <<EOH >> confdefs.h
@%:@if $1
EOH
])dnl
AC_DEFINE_UNQUOTED($2, $3)
    m4_ifval([$1],[test "$1" && cat <<EOH >> confdefs.h
@%:@endif /* $1 */
EOH
])dnl
])dnl

AC_DEFUN([RUBY_FUNC_ATTRIBUTE], [dnl
m4_ifval([$2], dnl
  [AS_VAR_PUSHDEF([attrib],[$2])], dnl
  [AS_VAR_PUSHDEF([attrib],[FUNC_]AS_TR_CPP($1))] dnl
)dnl
m4_ifval([$3], dnl
  [AS_VAR_PUSHDEF([rbcv],[$3])], dnl
  [AS_VAR_PUSHDEF([rbcv],[rb_cv_func_][$1])]dnl
)dnl
m4_ifval([$4], [rbcv_cond=[$4]; test "$rbcv_cond" || unset rbcv_cond])
AC_CACHE_CHECK(for [$1] function attribute, rbcv,
[rbcv=x
if test "${ac_c_werror_flag+set}"; then
  rb_c_werror_flag="$ac_c_werror_flag"
else
  unset rb_c_werror_flag
fi
ac_c_werror_flag=yes
for mac in "__attribute__ (($1)) x" "x __attribute__ (($1))" "__declspec($1) x" x; do
  m4_ifval([$4],mac="$mac"${rbcv_cond+" /* only if $rbcv_cond */"})
  AC_TRY_COMPILE(
    m4_ifval([$4],${rbcv_cond+[@%:@if ]$rbcv_cond})
[@%:@define ]attrib[(x) $mac]
m4_ifval([$4],${rbcv_cond+[@%:@else]}
${rbcv_cond+[@%:@define ]attrib[(x) x]}
${rbcv_cond+[@%:@endif]})
    attrib[(void conftest_attribute_check(void));], [],
    [rbcv="$mac"; break])
done
if test "${rb_c_werror_flag+set}"; then
  ac_c_werror_flag="$rb_c_werror_flag"
else
  unset ac_c_werror_flag
fi
])
if test "$rbcv" != x; then
    RUBY_DEFINE_IF([${rbcv_cond}], attrib[(x)], $rbcv)
fi
AS_VAR_POPDEF([attrib])
AS_VAR_POPDEF([rbcv])
])

RUBY_FUNC_ATTRIBUTE(noreturn, NORETURN)
RUBY_FUNC_ATTRIBUTE(deprecated, DEPRECATED)
RUBY_FUNC_ATTRIBUTE(noinline, NOINLINE)

if_i386=${universal_binary+[defined __i386__]}
RUBY_FUNC_ATTRIBUTE(stdcall,  [], [], ${if_i386})
RUBY_FUNC_ATTRIBUTE(cdecl,    [], [], ${if_i386})
RUBY_FUNC_ATTRIBUTE(fastcall, [], [], ${if_i386})

if test "$GCC" = yes; then
    AC_CACHE_CHECK([for function alias], [rb_cv_gcc_function_alias],
	[rb_cv_gcc_function_alias=no
	for a in alias weak,alias; do
	    AC_TRY_LINK([void foo(void) {}
		void bar(void) __attribute__(($a("foo")));], [bar()],
		[rb_cv_gcc_function_alias=$a; break])
	done])
    if test "$rb_cv_gcc_function_alias" != no; then
	AC_DEFINE_UNQUOTED([RUBY_ALIAS_FUNCTION_TYPE(type, prot, name, args)],
			   [type prot __attribute__(($rb_cv_gcc_function_alias(@%:@name)));])
	AC_DEFINE_UNQUOTED([RUBY_ALIAS_FUNCTION_VOID(prot, name, args)],
			   [RUBY_ALIAS_FUNCTION_TYPE(void, prot, name, args)])
    fi
fi

AC_CACHE_CHECK([for RUBY_EXTERN], rb_cv_ruby_extern,
[rb_cv_ruby_extern=no
for mac in "__attribute__((dllimport))" "__declspec(dllimport)"; do
  AC_TRY_COMPILE(
    [extern $mac void conftest(void);],
    [rb_cv_ruby_extern="extern $mac"; break])
done])
test "x$rb_cv_ruby_extern" = xno || AC_DEFINE_UNQUOTED(RUBY_EXTERN, $rb_cv_ruby_extern)

RUBY_APPEND_OPTION(XCFLAGS, -DRUBY_EXPORT)

dnl }
dnl header and library section {

dnl Check whether we need to define sys_nerr locally
AC_CHECK_DECLS([sys_nerr], [], [], [$ac_includes_default
#include <errno.h>])

AC_ARG_ENABLE(win95,
	AS_HELP_STRING([--enable-win95], [enable Windows 95 series support]),
  [AS_CASE(["$enableval"],[yes|no],[enable_win95=$enableval],[unset enable_win95])])

AS_CASE(["$target_os"],
[freebsd*], [
  AC_CACHE_CHECK([whether pthread should be enabled by default],
    rb_cv_enable_pthread_default,
    [AC_TRY_CPP([
#include <osreldate.h>
#if __FreeBSD_version < 502102
#error pthread should be disabled on this platform
#endif
      ],
      rb_cv_enable_pthread_default=yes,
      rb_cv_enable_pthread_default=no)])
  enable_pthread=$rb_cv_enable_pthread_default
  ],
[mingw*], [
  enable_pthread=no
  ],
[
  enable_pthread=yes
  ])

AC_ARG_ENABLE(pthread,
       AS_HELP_STRING([--enable-pthread], [obsolete, and ignored]))

dnl Checks for libraries.
AS_CASE(["$target_os"],[*bsd*|dragonfly*],[],[ac_cv_func_daemon=no])

AS_CASE(["$target_os"],
[solaris*], [
		AC_DEFINE(SIZEOF_STRUCT_DIRENT_TOO_SMALL, 1)
		LIBS="-lm $LIBS"
		],
[nextstep*], [	],
[openstep*], [	],
[rhapsody*], [	],
[darwin*], [	RUBY_PREPEND_OPTION(LIBS, -lobjc)
		RUBY_APPEND_OPTIONS(CPPFLAGS, -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE)
		AC_MSG_CHECKING(whether Mac OS X 10.5 or later)
		AC_TRY_CPP([#include <AvailabilityMacros.h>
		    #if MAC_OS_X_VERSION_MAX_ALLOWED <= 1040
		    #error pre OS X 10.4
		    [!<===== pre OS X 10.4 =====>]
		    #endif
		    ],
		    [macosx_10_5=yes], [macosx_10_5=no])
		AC_MSG_RESULT($macosx_10_5)
		if test $macosx_10_5 = yes; then
		    ac_cv_header_ucontext_h=no
		else
		    AC_DEFINE(BROKEN_SETREUID, 1)
		    AC_DEFINE(BROKEN_SETREGID, 1)
		fi
		ac_cv_type_getgroups=gid_t # getgroups() on Rosetta fills garbage
		ac_cv_lib_crypt_crypt=no
                AC_CACHE_CHECK(for broken crypt with 8bit chars, rb_cv_broken_crypt,
                    [AC_TRY_RUN([
#include <stdio.h>
#include <unistd.h>
#include <string.h>

int
main()
{
    int i;
    for (i = 0; i < 128*128; i++) {
	char salt[2], buf[256], *s;
	salt[0] = 0x80 | (i & 0x7f);
	salt[1] = 0x80 | (i >> 7);
	strcpy(buf, crypt("", salt));
	if (strcmp(buf, s = crypt("", salt))) {
#if 0
	    printf("%.2x%.2x: %s -> %s\n", (unsigned char)salt[0], (unsigned char)salt[1],
		   buf+2, s+2);
#endif
	    return 1;
	}
    }
    return 0;
}
],
	            rb_cv_broken_crypt=no,
	            rb_cv_broken_crypt=yes,
	            rb_cv_broken_crypt=yes)])
                if test "$rb_cv_broken_crypt" = yes; then
                  AC_DEFINE(BROKEN_CRYPT, 1)
                fi
		],
[hpux*], [	LIBS="-lm $LIBS"
		ac_cv_c_inline=no],
[human*], [	ac_cv_func_getpgrp_void=yes
		ac_cv_func_setitimer=no
		AC_CHECK_LIB(signal, _harderr)
		AC_CHECK_LIB(hmem, hmemset)
		AC_CHECK_FUNCS(select)
		AC_CACHE_CHECK(whether PD libc _dtos18 fail to convert big number,
		   rb_cv_missing__dtos18,
		[AC_TRY_RUN([
#include <stdio.h>
int
main()
{
   char buf[256];
   sprintf(buf, "%g", 1e+300);
   return (strcmp (buf, "1e+300") ? 0 : 1);
}
],
		rb_cv_missing__dtos18=yes, rb_cv_missing__dtos18=no, rb_cv_missing__dtos18=no)])
		if test "$rb_cv_missing__dtos18" = yes; then
		    AC_DEFINE(MISSING__DTOS18)
		fi
		AC_CACHE_CHECK(whether PD libc fconvert fail to round,
			       rb_cv_missing_fconvert,
		[AC_TRY_RUN([
#include <stdio.h>
#include <math.h>
int
main()
{
  char buf[256];
  sprintf(buf, "%f", log(exp(1.0)));
  return (strcmp (buf, "1.000000") ? 0 : 1);
}
],
		rb_cv_missing_fconvert=yes, rb_cv_missing_fconvert=no, rb_cv_missing_fconvert=no)])
		if test "$rb_cv_missing_fconvert" = yes; then
		    AC_DEFINE(MISSING_FCONVERT)
		fi
		],
[beos*|haiku*], [
		ac_cv_func_link=no
		ac_cv_func_sched_yield=no
		ac_cv_func_pthread_attr_setinheritsched=no
		AS_CASE(["$target_os"],
		[beos*], [ ac_cv_header_net_socket_h=yes],
		[haiku*], [ ac_cv_func_shutdown=no])
		LIBS="$LIBS" # m lib is include in root under BeOS/Haiku
		],
[cygwin*], [	ac_cv_header_langinfo_h=yes
		AC_LIBOBJ([langinfo])
		],
[mingw*], [	LIBS="-lshell32 -lws2_32 $LIBS"
		ac_cv_header_a_out_h=no
		ac_cv_header_pwd_h=no
		ac_cv_header_utime_h=no
		ac_cv_header_sys_ioctl_h=no
		ac_cv_header_sys_param_h=no
		ac_cv_header_sys_resource_h=no
		ac_cv_header_sys_select_h=no
		ac_cv_header_sys_time_h=no
		ac_cv_header_sys_times_h=no
		ac_cv_header_sys_socket_h=no
		ac_cv_func_times=yes
		ac_cv_func_waitpid=yes
		ac_cv_func_fsync=yes
		ac_cv_func_seekdir=yes
		ac_cv_func_telldir=yes
		ac_cv_func_isinf=yes
		ac_cv_func_isnan=yes
		ac_cv_func_finite=yes
		ac_cv_func_link=yes
		ac_cv_func_truncate=yes
		ac_cv_func_fseeko=yes
		ac_cv_func_ftello=yes
		ac_cv_lib_crypt_crypt=no
		ac_cv_func_getpgrp_void=no
		ac_cv_func_setpgrp_void=yes
		ac_cv_func_memcmp_working=yes
		ac_cv_lib_dl_dlopen=no
		rb_cv_binary_elf=no
		rb_cv_negative_time_t=no
		ac_cv_func_fcntl=yes
		ac_cv_func_flock=yes
		rb_cv_large_fd_select=yes
		AC_LIBOBJ([langinfo])
		: ${enable_win95=maybe}
		],
[os2-emx*], [	LIBS="-lm $LIBS"
		ac_cv_lib_dir_opendir=no],
[msdosdjgpp*], [
		LIBS="-lm $LIBS"
		ac_cv_func_getpgrp_void=yes
		ac_cv_func_setitimer=no
		ac_cv_sizeof_rlim_t=4
		ac_cv_func_fork=no
		ac_cv_func_setrlimit=no
		ac_cv_header_sys_socket_h=no
		],
[bsdi*], [	LIBS="-lm $LIBS"
		AC_DEFINE(BROKEN_SETREUID, 1)
		AC_DEFINE(BROKEN_SETREGID, 1)
                ac_cv_sizeof_rlim_t=8],
[freebsd*], [	LIBS="-lm $LIBS"
		ac_cv_func_getpeername=no
		ac_cv_func_getsockname=no
		ac_cv_func_shutdown=no
		ac_cv_func_close=no
		],
[dragonfly*], [	LIBS="-lm $LIBS"
		],
[bow], [	ac_cv_func_setitimer=no
		],
[superux*], [	ac_cv_func_setitimer=no
		],
[	LIBS="-lm $LIBS"])
AC_CHECK_LIB(crypt, crypt)
AC_CHECK_LIB(dl, dlopen)	# Dynamic linking for SunOS/Solaris and SYSV
AC_CHECK_LIB(dld, shl_load)	# Dynamic linking for HP-UX
AC_CHECK_LIB(socket, socketpair)	# SunOS/Solaris
AC_CHECK_LIB(rt, clock_gettime)	# GNU/Linux
if test "${enable_win95}" = maybe; then
    AC_HAVE_LIBRARY(unicows, [enable_win95=yes], [enable_win95=no])
fi
if test "${enable_win95}" = yes; then
    AC_DEFINE(WIN95)
    LIBS="-lunicows $LIBS"
fi

AS_CASE(["$target_cpu"],
[alpha*], [AS_CASE(["$target_os"::"$GCC"],
		[*::yes],  # gcc
			[CFLAGS="-mieee $CFLAGS"],
		[osf*],    # ccc
			[CFLAGS="-ieee $CFLAGS"],
		)])

ac_cv_header_net_socket_h=${ac_cv_header_net_socket_h=no}
if test "$ac_cv_header_net_socket_h" = yes; then
    ac_cv_header_sys_socket_h=${ac_cv_header_sys_socket_h=no}
else
    ac_cv_header_sys_socket_h=${ac_cv_header_sys_socket_h=yes}
fi

dnl Checks for header files.
AC_HEADER_DIRENT
dnl AC_HEADER_STDC has been checked in AC_USE_SYSTEM_EXTENSIONS
AC_HEADER_STDBOOL
AC_HEADER_SYS_WAIT
AC_CHECK_HEADERS(limits.h sys/file.h sys/ioctl.h sys/syscall.h\
		 fcntl.h sys/fcntl.h sys/select.h sys/time.h sys/times.h sys/param.h\
		 syscall.h pwd.h grp.h a.out.h utime.h direct.h sys/resource.h \
		 sys/mkdev.h sys/utime.h xti.h netinet/in_systm.h float.h ieeefp.h \
		 ucontext.h intrinsics.h langinfo.h locale.h sys/sendfile.h time.h \
		 net/socket.h sys/socket.h)

dnl Check additional types.
RUBY_CHECK_SIZEOF(rlim_t, [int long "long long"], [], [
  #ifdef HAVE_SYS_TYPES_H
  # include <sys/types.h>
  #endif
  #ifdef HAVE_SYS_TIME_H
  # include <sys/time.h>
  #endif
  #ifdef HAVE_SYS_RESOURCE_H
  # include <sys/resource.h>
  #endif
  #ifdef HAVE_UNISTD_H
  # include <unistd.h>
  #endif
  #include <stdio.h>
])

AC_TYPE_SIZE_T
RUBY_CHECK_SIZEOF(size_t, [int long void*], [], [@%:@include <sys/types.h>])
RUBY_CHECK_SIZEOF(ptrdiff_t, size_t, [], [@%:@include <stddef.h>])
AC_STRUCT_ST_BLKSIZE
AC_STRUCT_ST_BLOCKS
AC_STRUCT_ST_RDEV
RUBY_CHECK_SIZEOF([struct stat.st_size], [int long "long long"], [], [@%:@include <sys/stat.h>])
if test "$ac_cv_member_struct_stat_st_blocks" = yes; then
    RUBY_CHECK_SIZEOF([struct stat.st_blocks], [int long "long long"], [], [@%:@include <sys/stat.h>])
fi
AC_CHECK_MEMBERS([struct stat.st_atim])
AC_CHECK_MEMBERS([struct stat.st_atimespec])
AC_CHECK_MEMBERS([struct stat.st_atimensec])
AC_CHECK_MEMBERS([struct stat.st_mtim])
AC_CHECK_MEMBERS([struct stat.st_mtimespec])
AC_CHECK_MEMBERS([struct stat.st_mtimensec])
AC_CHECK_MEMBERS([struct stat.st_ctim])
AC_CHECK_MEMBERS([struct stat.st_ctimespec])
AC_CHECK_MEMBERS([struct stat.st_ctimensec])

AC_CHECK_TYPES([struct timespec], [], [], [@%:@ifdef HAVE_TIME_H
@%:@include <time.h>
@%:@endif])

AC_CHECK_TYPES([struct timezone], [], [], [@%:@ifdef HAVE_TIME_H
@%:@ include <time.h>
@%:@endif
@%:@ifdef HAVE_SYS_TIME_H
@%:@ include <sys/time.h>
@%:@endif])

AC_CACHE_VAL([rb_cv_large_fd_select],
    [AC_CHECK_TYPE(fd_mask, [rb_cv_large_fd_select=yes], [rb_cv_large_fd_select=no])])
if test "$rb_cv_large_fd_select" = yes; then
    AC_DEFINE(HAVE_RB_FD_INIT, 1)
fi

dnl RUBY_DEFINT TYPENAME, SIZE, [SIGNED-OR-UNSIGNED], [INCLUDES = DEFAULT-INCLUDES]
AC_DEFUN([RUBY_DEFINT], [dnl
AC_CACHE_CHECK([for $1], [rb_cv_type_$1],
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT([$4])
typedef $1 t; int s = sizeof(t) == 42;])],
   [rb_cv_type_$1=yes],
   [AS_CASE([m4_bmatch([$2], [^[1-9][0-9]*$], $2, [$ac_cv_sizeof_]AS_TR_SH($2))],
    ["1"], [ rb_cv_type_$1="m4_if([$3], [], [signed ], [$3 ])char"],
    ["$ac_cv_sizeof_short"], [ rb_cv_type_$1="m4_if([$3], [], [], [$3 ])short"],
    ["$ac_cv_sizeof_int"], [ rb_cv_type_$1="m4_if([$3], [], [], [$3 ])int"],
    ["$ac_cv_sizeof_long"], [ rb_cv_type_$1="m4_if([$3], [], [], [$3 ])long"],
    ["$ac_cv_sizeof_long_long"], [ rb_cv_type_$1="m4_if([$3], [], [], [$3 ])long long"],
    ["$ac_cv_sizeof___int64"], [ rb_cv_type_$1="m4_if([$3], [], [], [$3 ])__int64"],
    [ rb_cv_type_$1=no])])])
if test "${rb_cv_type_$1}" != no; then
    AC_DEFINE([HAVE_]AS_TR_CPP($1), 1)
    if test "${rb_cv_type_$1}" = yes; then
	m4_bmatch([$2], [^[1-9][0-9]*$], [AC_CHECK_SIZEOF([$1], 0, [AC_INCLUDES_DEFAULT([$4])])],
			[RUBY_CHECK_SIZEOF([$1], [$2], [], [AC_INCLUDES_DEFAULT([$4])])])
    else
	AC_DEFINE_UNQUOTED($1, [$rb_cv_type_$1])
	AC_DEFINE_UNQUOTED([SIZEOF_]AS_TR_CPP($1), [SIZEOF_]AS_TR_CPP([$rb_cv_type_$1]))
    fi
fi
])

RUBY_DEFINT(int8_t, 1)
RUBY_DEFINT(uint8_t, 1, unsigned)
RUBY_DEFINT(int16_t, 2)
RUBY_DEFINT(uint16_t, 2, unsigned)
RUBY_DEFINT(int32_t, 4)
RUBY_DEFINT(uint32_t, 4, unsigned)
RUBY_DEFINT(int64_t, 8)
RUBY_DEFINT(uint64_t, 8, unsigned)
RUBY_DEFINT(int128_t, 16)
RUBY_DEFINT(uint128_t, 16, unsigned)
RUBY_DEFINT(intptr_t, void*)
RUBY_DEFINT(uintptr_t, void*, unsigned)
RUBY_DEFINT(ssize_t, size_t, [], [@%:@include <sys/types.h>])	dnl may differ from int, so not use AC_TYPE_SSIZE_T.

AC_CACHE_CHECK(for stack end address, rb_cv_stack_end_address,
[rb_cv_stack_end_address=no
for addr in __libc_stack_end _SEND; do
  AC_TRY_LINK(
    [extern void *$addr;],
    [if (!$addr) return 1;],
    [rb_cv_stack_end_address="$addr"; break])
done])
if test $rb_cv_stack_end_address != no; then
  AC_DEFINE_UNQUOTED(STACK_END_ADDRESS, $rb_cv_stack_end_address)
fi

dnl Checks for library functions.
AC_TYPE_GETGROUPS
AC_TYPE_SIGNAL
AS_CASE(["${target_cpu}-${target_os}:${target_archs}"],
[powerpc-darwin*], [
  AC_LIBSOURCES(alloca.c)
  AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.${ac_objext}])
  AC_DEFINE(C_ALLOCA)
  AC_DEFINE_UNQUOTED(alloca, alloca)
  ],
[universal-darwin*:*ppc*], [
  AC_LIBSOURCES(alloca.c)
  AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.${ac_objext}])
  RUBY_DEFINE_IF([defined __powerpc__], C_ALLOCA, 1)
  RUBY_DEFINE_IF([defined __powerpc__], alloca, alloca)
  ],
[
  AC_FUNC_ALLOCA
  ])
AC_FUNC_MEMCMP

# http://sources.redhat.com/ml/libc-hacker/2005-08/msg00008.html
# Debian GNU/Linux Etch's libc6.1 2.3.6.ds1-13etch5 has this problem.
# Debian GNU/Linux Lenny's libc6.1 2.7-10 has no problem.
AC_CACHE_CHECK(for broken erfc of glibc-2.3.6 on IA64, rb_cv_broken_glibc_ia64_erfc,
  [AC_TRY_RUN([
#include <math.h>
int
main()
{
   erfc(10000.0);
   return 0;
}
],
	rb_cv_broken_glibc_ia64_erfc=no,
	rb_cv_broken_glibc_ia64_erfc=yes,
	rb_cv_broken_glibc_ia64_erfc=no)])
AS_CASE([$rb_cv_broken_glibc_ia64_erfc],[yes],[ac_cv_func_erf=no])

AS_CASE(["$target_os"],[freebsd*],[
	 AC_DEFINE(BROKEN_CLOSE)
	 AC_REPLACE_FUNCS(close)
	 ])
AC_REPLACE_FUNCS(dup2 memmove strerror\
		 strchr strstr crypt flock\
		 isnan finite isinf hypot acosh erf tgamma lgamma_r cbrt \
                 strlcpy strlcat)
AC_CACHE_CHECK(for signbit, rb_cv_have_signbit,
  [AC_TRY_LINK([
#include <math.h>
], [int v = signbit(-0.0);],
	rb_cv_have_signbit=yes,
	rb_cv_have_signbit=no)])
if test "$rb_cv_have_signbit" = yes; then
  AC_DEFINE(HAVE_SIGNBIT)
else
  AC_LIBOBJ([signbit])
fi
AC_CHECK_FUNCS(fmod killpg wait4 waitpid fork spawnv syscall __syscall chroot getcwd eaccess\
	      truncate ftruncate chsize times utimes utimensat fcntl lockf lstat\
	      link symlink readlink readdir_r fsync fdatasync fchown\
	      setitimer setruid seteuid setreuid setresuid setproctitle socketpair\
	      setrgid setegid setregid setresgid issetugid pause lchown lchmod\
	      getpgrp setpgrp getpgid setpgid initgroups getgroups setgroups\
	      getpriority getrlimit setrlimit sysconf close\
	      dlopen sigprocmask sigaction sigsetjmp _setjmp _longjmp\
	      setsid telldir seekdir fchmod cosh sinh tanh log2 round\
	      setuid setgid daemon select_large_fdset setenv unsetenv\
              mktime timegm gmtime_r clock_gettime gettimeofday\
              pread sendfile shutdown sigaltstack)

AC_CACHE_CHECK(for unsetenv returns a value, rb_cv_unsetenv_return_value,
  [AC_TRY_COMPILE([
#include <stdlib.h>
], [int v = unsetenv("foo");],
	rb_cv_unsetenv_return_value=yes,
	rb_cv_unsetenv_return_value=no)])
if test "$rb_cv_unsetenv_return_value" = no; then
  AC_DEFINE(VOID_UNSETENV)
fi

AC_CACHE_CHECK(for __builtin_setjmp, ac_cv_func___builtin_setjmp,
[AC_TRY_LINK([@%:@include <setjmp.h>
    jmp_buf jb; void t(v) int v; {__builtin_longjmp(jb, v);}],
    [__builtin_setjmp(jb);],
    [ac_cv_func___builtin_setjmp=yes],
    [ac_cv_func___builtin_setjmp=no])
])

test x$ac_cv_func__longjmp = xno && ac_cv_func__setjmp=no

AC_MSG_CHECKING(for setjmp type)
AC_ARG_WITH(setjmp-type,
	AS_HELP_STRING([--with-setjmp-type], [select setjmp type]),
	[
	AS_CASE([$withval],
	[__builtin_setjmp], [ setjmp_prefix=__builtin_],
	[_setjmp], [ setjmp_prefix=_],
	[sigsetjmp], [ setjmp_prefix=sig],
	[setjmp], [ setjmp_prefix=],
	[''], [ unset setjmp_prefix],
	[   AC_MSG_ERROR(invalid setjmp type: $withval)])], [unset setjmp_prefix])
if test ${setjmp_prefix+set}; then
    if test "${setjmp_prefix}" && eval test '$ac_cv_func_'${setjmp_prefix}setjmp = no; then
	AC_MSG_ERROR(${setjmp_prefix}setjmp is not available)
    fi
elif test "$ac_cv_func___builtin_setjmp" = yes; then
    setjmp_prefix=__builtin_
elif test "$ac_cv_func__setjmp" = yes; then
    setjmp_prefix=_
elif test "$ac_cv_func_sigsetjmp" = yes; then
    AS_CASE([$target_os],[solaris*|cygwin*],[setjmp_prefix=],[setjmp_prefix=sig])
else
    setjmp_prefix=
fi
if test x$setjmp_prefix = xsig; then
    setjmp_sigmask=yes
else
    unset setjmp_sigmask
fi
AC_MSG_RESULT(${setjmp_prefix}setjmp)
AC_DEFINE_UNQUOTED([RUBY_SETJMP(env)], [${setjmp_prefix}setjmp(env${setjmp_sigmask+,0})])
AC_DEFINE_UNQUOTED([RUBY_LONGJMP(env,val)], [${setjmp_prefix}longjmp(env,val)])
AC_DEFINE_UNQUOTED(RUBY_JMP_BUF, ${setjmp_sigmask+${setjmp_prefix}}jmp_buf)

AC_ARG_ENABLE(setreuid,
       AS_HELP_STRING([--enable-setreuid], [use setreuid()/setregid() according to need even if obsolete]),
       [use_setreuid=$enableval])
if test "$use_setreuid" = yes; then
    AC_DEFINE(USE_SETREUID)
    AC_DEFINE(USE_SETREGID)
fi
AC_STRUCT_TIMEZONE
AC_CACHE_CHECK(for struct tm.tm_gmtoff, rb_cv_member_struct_tm_tm_gmtoff,
  [AC_TRY_COMPILE([#include <time.h>],
    [struct tm t; t.tm_gmtoff = 3600;],
  [rb_cv_member_struct_tm_tm_gmtoff=yes],
  [rb_cv_member_struct_tm_tm_gmtoff=no])])
if test "$rb_cv_member_struct_tm_tm_gmtoff" = yes; then
  AC_DEFINE(HAVE_STRUCT_TM_TM_GMTOFF)
fi
AC_CACHE_CHECK(for external int daylight, rb_cv_have_daylight,
  [AC_TRY_LINK([#include <time.h>
  int i;],
	[i = daylight;],
	rb_cv_have_daylight=yes,
	rb_cv_have_daylight=no)])
if test "$rb_cv_have_daylight" = yes; then
  AC_DEFINE(HAVE_DAYLIGHT)
fi
AC_DEFUN([RUBY_CHECK_VARTYPE], [dnl
AC_CACHE_CHECK([for external $1], AS_TR_SH(rb_cv_var_$1),
  [AS_TR_SH(rb_cv_var_$1)=no
  AC_TRY_COMPILE([
#ifndef _XOPEN_SOURCE
#define _XOPEN_SOURCE 1
#endif
$2
;
const volatile void *volatile t;],
    [t = &(&$1)[0];],
    [for t in $3; do
      AC_TRY_COMPILE([
#ifndef _XOPEN_SOURCE
#define _XOPEN_SOURCE 1
#endif
$2
;
extern $t $1;
const volatile void *volatile t;],
        [t = &(&$1)[0];],
        [AS_TR_SH(rb_cv_var_$1)=$t; break])
    done])])
if test "${AS_TR_SH(rb_cv_var_$1)}" != no; then
  AC_DEFINE(AS_TR_CPP(HAVE_VAR_$1))
  AC_DEFINE_UNQUOTED(AS_TR_CPP(TYPEOF_VAR_$1), ${AS_TR_SH(rb_cv_var_$1)})
fi])
RUBY_CHECK_VARTYPE(timezone, [@%:@include <time.h>], [long int])
RUBY_CHECK_VARTYPE(altzone, [@%:@include <time.h>], [long int])
AC_CHECK_FUNCS(timezone)
if test "$ac_cv_func_timezone" = yes; then
  AC_CACHE_CHECK([whether timezone requires zero arguments], rb_cv_func_timezone_void,
    [AC_TRY_COMPILE([@%:@include <time.h>],
      [(void)timezone(0, 0);],
      [rb_cv_func_timezone_void=no],
      [rb_cv_func_timezone_void=yes])]
  )
  if test $rb_cv_func_timezone_void = yes; then
    AC_DEFINE(TIMEZONE_VOID)
  fi
fi

AC_CACHE_CHECK(for negative time_t for gmtime(3), rb_cv_negative_time_t,
  [AC_TRY_RUN([
#include <time.h>

void
check(tm, y, m, d, h, s)
    struct tm *tm;
    int y, m, d, h, s;
{
    if (!tm ||
	tm->tm_year != y ||
	tm->tm_mon  != m-1 ||
	tm->tm_mday != d ||
	tm->tm_hour != h ||
	tm->tm_sec  != s) {
	exit(1);
    }
}

int
main()
{
   time_t t = -1;
   struct tm *tm;

   check(gmtime(&t), 69, 12, 31, 23, 59);
   t = ~(time_t)0 << 31;
   check(gmtime(&t), 1, 12, 13, 20, 52);
   return 0;
}
],
	rb_cv_negative_time_t=yes,
	rb_cv_negative_time_t=no,
	rb_cv_negative_time_t=yes)])
if test "$rb_cv_negative_time_t" = yes; then
  AC_DEFINE(NEGATIVE_TIME_T)
fi

# [ruby-dev:40910] overflow of time on FreeBSD
# http://www.freebsd.org/cgi/query-pr.cgi?pr=145341
AC_CACHE_CHECK(for localtime(3) overflow correctly, rb_cv_localtime_overflow,
  [AC_TRY_RUN([
#include <time.h>

void
check(time_t t1)
{
    struct tm *tm;
    time_t t2;
    tm = localtime(&t1);
    if (!tm)
	return; /* overflow detected.  ok. */
    t2 = mktime(tm);
    if (t1 == t2)
        return; /* round-trip.  ok. */
    exit(1);
}

int
main()
{
    time_t t;
    if (~(time_t)0 <= 0) {
        t = (((time_t)1) << (sizeof(time_t) * 8 - 2));
        t |= t - 1;
    }
    else {
        t = ~(time_t)0;
    }
    check(t);
    return 0;
}
],
	rb_cv_localtime_overflow=yes,
	rb_cv_localtime_overflow=no,
	rb_cv_localtime_overflow=yes)])
if test "$rb_cv_localtime_overflow" = no; then
  AC_DEFINE(LOCALTIME_OVERFLOW_PROBLEM)
fi

if test "$ac_cv_func_sigprocmask" = yes && test "$ac_cv_func_sigaction" = yes; then
   AC_DEFINE(POSIX_SIGNAL)
else
  AC_CHECK_FUNCS(sigsetmask)
  AC_CACHE_CHECK(for BSD signal semantics, rb_cv_bsd_signal,
    [AC_TRY_RUN([
#include <stdio.h>
#include <signal.h>

void
sig_handler(dummy)
     int dummy;
{
}

int
main()
{
  signal(SIGINT, sig_handler);
  kill(getpid(), SIGINT);
  kill(getpid(), SIGINT);
  return 0;
}
],
	rb_cv_bsd_signal=yes,
	rb_cv_bsd_signal=no,
	rb_cv_bsd_signal=$ac_cv_func_sigsetmask)])
  if test "$rb_cv_bsd_signal" = yes; then
    AC_DEFINE(BSD_SIGNAL)
  fi
fi

AC_FUNC_GETPGRP
AC_FUNC_SETPGRP

AC_C_BIGENDIAN
AC_C_CONST
AC_C_CHAR_UNSIGNED
AC_C_INLINE
AC_C_VOLATILE

if test x"$target_cpu" = xia64; then
    AC_LIBOBJ([ia64])
    AC_CACHE_CHECK(for __libc_ia64_register_backing_store_base,
                   rb_cv___libc_ia64_register_backing_store_base,
    [rb_cv___libc_ia64_register_backing_store_base=no
    AC_TRY_LINK(
      [extern unsigned long __libc_ia64_register_backing_store_base;],
      [unsigned long p = __libc_ia64_register_backing_store_base;
       printf("%ld\n", p);],
      [rb_cv___libc_ia64_register_backing_store_base=yes])])
    if test $rb_cv___libc_ia64_register_backing_store_base = yes; then
      AC_DEFINE(HAVE___LIBC_IA64_REGISTER_BACKING_STORE_BASE)
    fi
fi

AC_CACHE_CHECK(whether right shift preserve sign bit, rb_cv_rshift_sign,
    [AC_COMPILE_IFELSE(AC_LANG_BOOL_COMPILE_TRY([], [(-1==(-1>>1))]),
	rb_cv_rshift_sign=yes,
	rb_cv_rshift_sign=no)])
if test "$rb_cv_rshift_sign" = yes; then
  AC_DEFINE(RSHIFT(x,y), ((x)>>(int)(y)))
else
  AC_DEFINE(RSHIFT(x,y), (((x)<0) ? ~((~(x))>>(int)(y)) : (x)>>(int)(y)))
fi

test "$rb_cv_fcnt" = "not found" && rb_cv_fcnt="not found (OK if using GNU libc)"
AC_CACHE_CHECK([read count field in FILE structures], rb_cv_fcnt,
[rb_cv_fcnt="not found (OK if using GNU libc)"
for fcnt in	dnl
     _cnt	dnl
     __cnt	dnl
     _r		dnl
     readCount	dnl
     _rcount	dnl for emx0.9c
; do
    AC_TRY_COMPILE([#include <stdio.h>
],
	[FILE *f = stdin; f->$fcnt = 0;],
	[rb_cv_fcnt="$fcnt"; break])
done])
AS_CASE("$rb_cv_fcnt",
	["not found"*], [rb_cv_fcnt="not found"],
 	[AC_DEFINE_UNQUOTED(FILE_COUNT, $rb_cv_fcnt)])

AC_CACHE_CHECK([read buffer ptr field in FILE structures], rb_cv_frptr,
[for frptr in	dnl
     _IO_read_ptr dnl
     _ptr	dnl
     __ptr	dnl
     bufpos	dnl
     _p	dnl
     __bufpos	dnl
; do
    AC_TRY_COMPILE([#include <stdio.h>
],
	[FILE *f = stdin; char buf[256]; f->$frptr = buf;],
	rb_cv_frptr="$frptr"; break,
	rb_cv_frptr="not found")
done])
if test "$rb_cv_frptr" != "not found"; then
  AC_DEFINE_UNQUOTED(FILE_READPTR, $rb_cv_frptr)

  if test "$rb_cv_fcnt" = "not found"; then
    AC_CACHE_CHECK([read buffer end field in FILE structures], rb_cv_frend,
    [for frend in	dnl
         _IO_read_end	dnl
         bufread 	dnl
         __bufread 	dnl
    ; do
        AC_TRY_COMPILE([#include <stdio.h>
    ],
	[FILE *f = stdin; char buf[256]; f->$frend = buf;],
	rb_cv_frend="$frend"; break,
	rb_cv_frend="not found")
    done])
    if test "$rb_cv_frend" != "not found"; then
      AC_DEFINE_UNQUOTED(FILE_READEND, $rb_cv_frend)
    fi
  fi
fi

RUBY_CHECK_SIZEOF([struct stat.st_ino], [long "long long"], [], [@%:@include <sys/stat.h>])

if test "$ac_cv_func_sysconf" = yes; then
  AC_DEFUN([RUBY_CHECK_SYSCONF], [dnl
  AC_CACHE_CHECK([whether _SC_$1 is supported], rb_cv_have_sc_[]m4_tolower($1),
    [AC_TRY_COMPILE([#include <unistd.h>
      ],
      [_SC_$1 >= 0],
      rb_cv_have_sc_[]m4_tolower($1)=yes,
      rb_cv_have_sc_[]m4_tolower($1)=no)
    ])
  if test "$rb_cv_have_sc_[]m4_tolower($1)" = yes; then
    AC_DEFINE(HAVE__SC_$1)
  fi
  ])
  RUBY_CHECK_SYSCONF(CLK_TCK)
fi

AC_DEFUN(RUBY_STACK_GROW_DIRECTION, [
    AC_CACHE_CHECK(stack growing direction on $1, rb_cv_stack_grow_dir_$1, [
AS_CASE(["$1"],
[m68*|x86*|i?86|ia64|ppc*|sparc*|alpha*], [ $2=-1],
[hppa*], [ $2=+1],
[
  AC_TRY_RUN([
/* recurse to get rid of inlining */
static int
stack_growup_p(addr, n)
    volatile int *addr, n;
{
    volatile int end;
    if (n > 0)
	return *addr = stack_growup_p(addr, n - 1);
    else
	return (&end > addr);
}
int main()
{
    int x;
    return stack_growup_p(&x, 10);
}
], $2=-1, $2=+1, $2=0)
  ])
eval rb_cv_stack_grow_dir_$1=\$$2])
eval $2=\$rb_cv_stack_grow_dir_$1])
if test "${universal_binary-no}" = yes ; then
    archflagpat=`eval echo '"'"${ARCH_FLAG}"'"' | sed 's/[[][|.*]]/\\&/g'`
    save_CFLAGS="$CFLAGS" new_cflags=`echo "$CFLAGS" | sed "s|$archflagpat"'||'`
    save_LDFLAGS="$LDFLAGS" new_ldflags=`echo "$LDFLAGS" | sed "s|$archflagpat"'||'`
    stack_dir=
    for archs in ${universal_archnames}; do
	archs=`echo $archs | sed 's/=.*//'`
	CFLAGS="$new_cflags -arch $archs"
	LDFLAGS="$new_ldflags -arch $archs"
	RUBY_STACK_GROW_DIRECTION($archs, dir)
	if test x$stack_dir = x; then
	    stack_dir=$dir
	elif test x$stack_dir != x$dir; then
	    stack_dir=no
	fi
    done
    CFLAGS="$save_CFLAGS" LDFLAGS="$save_LDFLAGS"
    if test x$stack_dir = xno; then
	for archs in ${universal_archnames}; do
	    archs=`echo $archs | sed 's/=.*//'`
	    eval dir=\$rb_cv_stack_grow_dir_$archs
	    RUBY_DEFINE_IF([defined __${archs}__], STACK_GROW_DIRECTION, $dir)
	done
    else
	AC_DEFINE_UNQUOTED(STACK_GROW_DIRECTION, $stack_dir)
    fi
else
    RUBY_STACK_GROW_DIRECTION($target_cpu, dir)
    AC_DEFINE_UNQUOTED(STACK_GROW_DIRECTION, $dir)
fi

if test x"$enable_pthread" = xyes; then
    for pthread_lib in thr pthread pthreads c c_r root; do
	AC_CHECK_LIB($pthread_lib, pthread_kill,
		     rb_with_pthread=yes, rb_with_pthread=no)
	if test "$rb_with_pthread" = "yes"; then break; fi
    done
    if test x"$rb_with_pthread" = xyes; then
	AC_DEFINE(_REENTRANT)
	AC_DEFINE(_THREAD_SAFE)
	AC_DEFINE(HAVE_LIBPTHREAD)
	AC_CHECK_HEADERS(pthread_np.h)
	AS_CASE([$pthread_lib],
	[c],    [],
	[root], [],
	[c_r],  [MAINLIBS="-pthread $MAINLIBS"],
	        [LIBS="-l$pthread_lib $LIBS"])
    else
	AC_MSG_WARN("Don't know how to find pthread library on your system -- thread support disabled")
    fi
    AC_CHECK_FUNCS(nanosleep sched_yield pthread_attr_setinheritsched \
	pthread_getattr_np pthread_attr_get_np pthread_attr_getstack\
	pthread_get_stackaddr_np pthread_get_stacksize_np \
	thr_stksegment pthread_stackseg_np pthread_getthrds_np)
    if test x"$ac_cv_func_nanosleep" = xno; then
       AC_CHECK_LIB(rt, nanosleep)
       if test x"$ac_cv_lib_rt_nanosleep" = xyes; then
           AC_DEFINE(HAVE_NANOSLEEP)
       fi
    fi
fi
if test x"$ac_cv_header_ucontext_h" = xyes; then
    if test x"$rb_with_pthread" = xyes; then
	AC_CHECK_FUNCS(getcontext setcontext)
    fi
fi

if test "$ac_cv_func_fork" = "yes" -a "$rb_with_pthread" = "yes"; then
    AC_CACHE_CHECK([if fork works with pthread], rb_cv_fork_with_pthread,
	[AC_TRY_RUN([
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
#ifndef EXIT_SUCCESS
#define EXIT_SUCCESS 0
#endif
#ifndef EXIT_FAILURE
#define EXIT_FAILURE 1
#endif

void *
thread_func(void *dmy)
{
    return dmy;
}

int
use_threads(void)
{
    pthread_t tid;
    if (pthread_create(&tid, 0, thread_func, 0) != 0) {
	return -1;
    }
    if (pthread_join(tid, 0) != 0) {
	return -1;
    }
    return 0;
}

int
main(int argc, char *argv[])
{
    pid_t pid;
    if (use_threads()) return EXIT_FAILURE;
    pid = fork();

    if (pid) {
	int loc;
	sleep(1);
	if (waitpid(pid, &loc, WNOHANG) == 0) {
	    kill(pid, SIGKILL);
	    return EXIT_FAILURE;
	}
        if (!WIFEXITED(loc) || WEXITSTATUS(loc) != EXIT_SUCCESS)
           return EXIT_FAILURE;
    }
    else {
	if (use_threads()) return EXIT_FAILURE;
    }

    return EXIT_SUCCESS;
}],
	rb_cv_fork_with_pthread=yes,
	rb_cv_fork_with_pthread=no,
	rb_cv_fork_with_pthread=yes)])
    test x$rb_cv_fork_with_pthread = xyes || AC_DEFINE(CANNOT_FORK_WITH_PTHREAD)
fi

AC_CHECK_FUNCS(backtrace)

AC_ARG_WITH(valgrind,
        AS_HELP_STRING([--with-valgrind],[enable valgrind memcheck support]),
        [AC_CHECK_HEADERS(valgrind/memcheck.h)])

dnl }
dnl runtime section {

dnl wheather use dln_a_out or not
AC_ARG_WITH(dln-a-out,
	AS_HELP_STRING([--with-dln-a-out], [use dln_a_out if possible]),
	[
	AS_CASE([$withval],
	[yes], [
	    if test "$enable_shared" = yes; then
		AC_MSG_ERROR(dln_a_out can not make shared library)
	    fi
	    with_dln_a_out=yes],
	[
	    with_dln_a_out=no])], [with_dln_a_out=no])

AC_CACHE_CHECK(whether ELF binaries are produced, rb_cv_binary_elf,
[AC_TRY_LINK([],[], [
AS_CASE(["`head -1 conftest$EXEEXT | cat -e`"],
['^?ELF'*], [rb_cv_binary_elf=yes], [rb_cv_binary_elf=no])],
rb_cv_binary_elf=no)])

if test "$rb_cv_binary_elf" = yes; then
  AC_DEFINE(USE_ELF)
  if test "$with_dln_a_out" = yes; then
    AC_MSG_ERROR(dln_a_out does not work with ELF)
  fi
fi

AS_CASE(["$target_os"],
[linux* | gnu* | k*bsd*-gnu | bsdi* | kopensolaris*-gnu], [
    if test "$rb_cv_binary_elf" = no; then
	with_dln_a_out=yes
    else
	LDFLAGS="$LDFLAGS -rdynamic"
    fi])
LIBEXT=a

AC_SUBST(DLDFLAGS)dnl
AC_SUBST(ARCH_FLAG)dnl

AC_SUBST(STATIC)dnl
AC_SUBST(CCDLFLAGS)dnl
AC_SUBST(LDSHARED)dnl
AC_SUBST(LDSHAREDXX)dnl
AC_SUBST(DLEXT)dnl
AC_SUBST(DLEXT2)dnl
AC_SUBST(LIBEXT)dnl

STATIC=
: ${PATHFLAG=''}

if test "$with_dln_a_out" != yes; then
  rb_cv_dlopen=unknown
  AC_MSG_CHECKING(whether OS depend dynamic link works)
  if test "$GCC" = yes; then
    AS_CASE(["$target_os"],
    [nextstep*|openstep*|rhapsody*|darwin*], [
      # The -fno-common is needed if we wish to embed the Ruby interpreter
      # into a plugin module of some project (as opposed to embedding it
      # within the project's application).  The -I/usr/local/include is
      # needed because CPP as discovered by configure (cc -E -traditional)
      # fails to consult /usr/local/include by default.  This causes
      # mkmf.rb's have_header() to fail if the desired resource happens to be
      # installed in the /usr/local tree.
      RUBY_APPEND_OPTION(CCDLFLAGS, -fno-common)],
    [human*|bsdi*|beos*|haiku*|cygwin*|mingw*|aix*|interix*], [ ],
    [
      RUBY_APPEND_OPTION(CCDLFLAGS, -fPIC)])
  else
    AS_CASE(["$target_os"],
	[hpux*],          [CCDLFLAGS="$CCDLFLAGS +Z"],
	[solaris*|irix*], [CCDLFLAGS="$CCDLFLAGS -KPIC"],
	[sunos*],         [CCDLFLAGS="$CCDLFLAGS -PIC"],
	[esix*|uxpds*],   [CCDLFLAGS="$CCDLFLAGS -KPIC"],
	                  [: ${CCDLFLAGS=""}])
  fi


  AC_ARG_ENABLE(rpath,
       AS_HELP_STRING([--disable-rpath], [embed run path into extension libraries]),
       [enable_rpath=$enableval], [enable_rpath="$rb_cv_binary_elf"])
  if test "$enable_rpath" = yes; then
    RPATHFLAG=" ${linker_flag}-R%1\$-s"
  fi

  AS_CASE(["$target_os"],
	[hpux*], [	DLDFLAGS="$DLDFLAGS -E"
			: ${LDSHARED='ld -b'}
			XLDFLAGS="$XLDFLAGS -Wl,-E"
			: ${LIBPATHENV=SHLIB_PATH}
			if test "$rb_cv_prog_gnu_ld" = no; then
			    RPATHFLAG=' +b %1$-s'
			fi
			rb_cv_dlopen=yes],
	[solaris*], [ 	if test "$GCC" = yes; then
			    : ${LDSHARED='$(CC) -shared'}
			    if test "$rb_cv_prog_gnu_ld" = yes; then
				LDFLAGS="$LDFLAGS -Wl,-E"
			    fi
			else
			    : ${LDSHARED='ld -G'}
			fi
			rb_cv_dlopen=yes],
	[sunos*], [	: ${LDSHARED='ld -assert nodefinitions'}
			rb_cv_dlopen=yes],
	[irix*], [	: ${LDSHARED='ld -shared'}
			rb_cv_dlopen=yes],
	[sysv4*], [	: ${LDSHARED='ld -G'}
			rb_cv_dlopen=yes],
	[nto-qnx*], [	: ${LDSHARED='$(CC) -shared'}
			rb_cv_dlopen=yes],
	[esix*|uxpds*], [ : ${LDSHARED="ld -G"}
			rb_cv_dlopen=yes],
	[osf*], [	: ${LDSHARED="ld -shared -expect_unresolved \"*\""}
			rb_cv_dlopen=yes],
	[bsdi3*], [	AS_CASE(["$CC"],
			[*shlicc*], [	: ${LDSHARED='$(CC) -r'}
					rb_cv_dlopen=yes])],
	[linux* | gnu* | k*bsd*-gnu | netbsd* | bsdi* | kopensolaris*-gnu], [
			: ${LDSHARED='$(CC) -shared'}
			if test "$rb_cv_binary_elf" = yes; then
			    LDFLAGS="$LDFLAGS -Wl,-export-dynamic"
			fi
			rb_cv_dlopen=yes],
	[interix*], [	: ${LDSHARED='$(CC) -shared'}
			XLDFLAGS="$XLDFLAGS -Wl,-E"
			LIBPATHFLAG=" -L%1\$-s"
			rb_cv_dlopen=yes],
	[freebsd*|dragonfly*], [
			: ${LDSHARED='$(CC) -shared'}
			if test "$rb_cv_binary_elf" = yes; then
			    LDFLAGS="$LDFLAGS -rdynamic"
			    DLDFLAGS="$DLDFLAGS "'-Wl,-soname,$(.TARGET)'
			else
			  test "$GCC" = yes && test "$rb_cv_prog_gnu_ld" = yes || LDSHARED="ld -Bshareable"
			fi
			rb_cv_dlopen=yes],
	[openbsd*], [	: ${LDSHARED='$(CC) -shared ${CCDLFLAGS}'}
			if test "$rb_cv_binary_elf" = yes; then
			    LDFLAGS="$LDFLAGS -Wl,-E"
			fi
			rb_cv_dlopen=yes],
	[nextstep*], [	: ${LDSHARED='$(CC) -r -nostdlib'}
			LDFLAGS="$LDFLAGS -u libsys_s"
			rb_cv_dlopen=yes],
	[openstep*], [	: ${LDSHARED='$(CC) -dynamic -bundle -undefined suppress'}
			: ${LDFLAGS=""}
			rb_cv_dlopen=yes],
	[rhapsody*], [	: ${LDSHARED='$(CC) -dynamic -bundle -undefined suppress'}
			: ${LDFLAGS=""}
			rb_cv_dlopen=yes],
	[darwin*], [	: ${LDSHARED='$(CC) -dynamic -bundle'}
			: ${DLDFLAGS="${linker_flag}-undefined${linker_flag:+,}dynamic_lookup ${linker_flag}-multiply_defined${linker_flag:+,}suppress ${linker_flag}-flat_namespace"}
			: ${LDFLAGS=""}
			: ${LIBPATHENV=DYLD_LIBRARY_PATH}
			# /usr/local/include is always searched for
			# some reason, but /usr/local/lib is not.
			hdr=`find /usr/local/include -name \*.h -type f | sed 's:^/usr/local/include/::;q'`
			if test -n "$hdr" && $CC -E -include "$hdr" -xc /dev/null | fgrep -q "$hdr"; then
			    $CC -print-search-dirs | grep -q '^libraries:.*:/usr/local/lib/*' ||
			    echo " $LDFLAGS " | grep -q ' -L */usr/local/lib/* ' ||
			    LDFLAGS="${LDFLAGS:+$LDFLAGS }-L/usr/local/lib"
			fi
			rb_cv_dlopen=yes],
        [aix*], [	: ${LDSHARED='$(CC)'}
			LDSHARED="$LDSHARED ${linker_flag}-G"
			DLDFLAGS='-eInit_$(TARGET)'
			XLDFLAGS="${linker_flag}"'-bE:$(ARCHFILE)'" ${linker_flag}-brtl"
			XLDFLAGS="$XLDFLAGS ${linker_flag}-blibpath:${prefix}/lib:${LIBPATH:-/usr/lib:/lib}"
			: ${ARCHFILE="ruby.imp"}
                        TRY_LINK='$(CC) $(LDFLAGS) -oconftest $(INCFLAGS) -I$(hdrdir) $(CPPFLAGS)'
                        TRY_LINK="$TRY_LINK"' $(CFLAGS) $(src) $(LIBPATH) $(LOCAL_LIBS) $(LIBS)'
			: ${LIBPATHENV=SHLIB_PATH}
			RPATHFLAG=" ${linker_flag}-blibpath:%1\$-s:${prefix}/lib:${LIBPATH:-/usr/lib:/lib}"
			rb_cv_dlopen=yes],
	[human*], [	: ${DLDFLAGS=''}
			: ${LDSHARED=''}
			: ${LDFLAGS=''}
			: ${LINK_SO='ar cru $@ $(OBJS)'}
			rb_cv_dlopen=yes],
	[beos*], [	AS_CASE(["$target_cpu"],
			  [powerpc*], [
			    : ${LDSHARED="ld -xms"}
			    DLDFLAGS="$DLDFLAGS "'-export Init_$(TARGET) -lbe -lroot glue-noinit.a init_term_dyn.o start_dyn.o'
			    LDFLAGS="$LDFLAGS -L/boot/home/config/lib -lbe -lroot"
			    ],
			  [i586*], [
			    : ${LDSHARED="ld -shared"}
			    DLDFLAGS="$DLDFLAGS -L/boot/develop/lib/x86 -L/boot/home/config/lib \$(topdir)/_APP_ -lbe -lroot"
			    LDFLAGS="$LDFLAGS -L/boot/develop/lib/x86 -L/boot/home/config/lib -lbe -lroot"
			    ])
			: ${LIBPATHENV=LIBRARY_PATH}
			rb_cv_dlopen=yes],
	[haiku*], [	AS_CASE(["$target_cpu"],
			  [powerpc*], [
			    : ${LDSHARED="ld -xms"}
			    DLDFLAGS="$DLDFLAGS "'-export Init_$(TARGET) -lbe -lroot glue-noinit.a init_term_dyn.o start_dyn.o'
                            ],
			  [i586*], [
			    : ${LDSHARED="ld -shared"}
			    DLDFLAGS="$DLDFLAGS -L/boot/develop/lib/x86 -lbe -lroot"
			    ])
			: ${LIBPATHENV=LIBRARY_PATH}
			rb_cv_dlopen=yes ],
	[nto-qnx*], [	DLDFLAGS="$DLDFLAGS -L/lib -L/usr/lib -L/usr/local/lib"
			: ${LDSHARED='ld -Bshareable -x'}
			LDFLAGS="$LDFLAGS -L/lib -L/usr/lib -L/usr/local/lib"
			rb_cv_dlopen=yes],
	[cygwin*|mingw*], [
			: ${LDSHARED='$(CC) -shared $(if $(filter-out -g -g0,$(debugflags)),,-s)'}
			XLDFLAGS="$XLDFLAGS -Wl,--stack,0x00200000,--enable-auto-import"
			DLDFLAGS="${DLDFLAGS} -Wl,--enable-auto-image-base,--enable-auto-import"
			: ${LIBPATHENV=""}
			rb_cv_dlopen=yes],
	[hiuxmpp], [	: ${LDSHARED='ld -r'}],
	[atheos*], [	: ${LDSHARED='$(CC) -shared'}
			rb_cv_dlopen=yes],
	[os2-emx*], [	LDFLAGS="$LDFLAGS -Zomf"
			],
	[ 	: ${LDSHARED='ld'}])
  AC_MSG_RESULT($rb_cv_dlopen)
fi
if test "${LDSHAREDXX}" = ""; then
    AS_CASE(["${LDSHARED}"],
	[*'$(CC)'*], [
	    LDSHAREDXX=`echo "${LDSHARED}" | sed 's/\$(CC)/$(CXX)/'`
	    ],
	[*'${CC}'*], [
	    LDSHAREDXX=`echo "${LDSHARED}" | sed 's/\${CC}/${CXX}/'`
	    ],
	[*$CC*], [
	    LDSHAREDXX=`echo "${LDSHARED}" | sed "s|$CC|$CXX|"`
	    ],
	[ld" "*], [
	    ])
fi
AS_CASE([${RPATHFLAG}],[*'%1$'*],[: ${LIBPATHFLAG=' -L%1$-s'}],[: ${LIBPATHFLAG=' -L%s'}])

AC_SUBST(LINK_SO)
AC_SUBST(LIBPATHFLAG)
AC_SUBST(RPATHFLAG)
AC_SUBST(LIBPATHENV, "${LIBPATHENV-LD_LIBRARY_PATH}")
AC_SUBST(TRY_LINK)

dln_a_out_works=no
if test "$ac_cv_header_a_out_h" = yes; then
  if test "$with_dln_a_out" = yes || test "$rb_cv_dlopen" = unknown; then
    cat confdefs.h > config.h
    AC_CACHE_CHECK(whether matz's dln works, rb_cv_dln_a_out,
    [AC_TRY_COMPILE([
#define USE_DLN_A_OUT
#include "dln.c"
],
	[],
	rb_cv_dln_a_out=yes,
	rb_cv_dln_a_out=no)])
    if test "$rb_cv_dln_a_out" = yes; then
      dln_a_out_works=yes
      AC_DEFINE(USE_DLN_A_OUT)
    fi
  fi
fi

if test "$dln_a_out_works" = yes; then
  if test "$GCC" = yes; then
    STATIC=-static
  else
    STATIC=-Bstatic
  fi
  DLEXT=so
  CCDLFLAGS=
else
  AS_CASE(["$target_os"],
    [hpux*], [
	DLEXT=sl],
    [nextstep*|openstep*|rhapsody*|darwin*], [
	RUBY_APPEND_OPTION(XLDFLAGS, [-Wl,-u,_objc_msgSend])
	DLEXT=bundle],
    [os2-emx*], [
	LOAD_RELATIVE=1
	DLEXT=dll],
    [cygwin*|mingw*|*djgpp*], [
	LOAD_RELATIVE=1
	DLEXT=so],
    [
	DLEXT=so])
fi
if test "$rb_cv_dlopen:$load_relative" = yes:yes; then
    AC_CHECK_FUNCS(dladdr)
    if test "$ac_cv_func_dladdr" = yes; then
	LOAD_RELATIVE=1
    else
	unset load_relative
    fi
fi

len=2 # .rb
n=`expr "$DLEXT"  : '.*'`; test "$n" -gt "$len" && len=$n
n=`expr "$DLEXT2" : '.*'`; test "$n" -gt "$len" && len=$n
AC_DEFINE_UNQUOTED(DLEXT_MAXLEN, `expr $len + 1`)
test ".$DLEXT"  = "." || AC_DEFINE_UNQUOTED(DLEXT,  ".$DLEXT")
test ".$DLEXT2" = "." || AC_DEFINE_UNQUOTED(DLEXT2, ".$DLEXT2")
AC_SUBST(DLEXT)

AC_SUBST(STRIP)dnl
if test "$with_dln_a_out" = yes; then
  STRIP=true
else
  STRIP=strip
fi

AS_CASE(["$target_os"],
  [linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu], [
	STRIP='strip -S -x'],
  [nextstep* | openstep* | rhapsody* | darwin*], [
	STRIP='strip -A -n'])

AC_ARG_WITH(ext,
            AC_HELP_STRING([--with-ext=EXTS],
                           [pass to --with-ext option of extmk.rb]))
AC_ARG_WITH(out-ext,
            AC_HELP_STRING([--with-out-ext=EXTS],
                           [pass to --without-ext option of extmk.rb]))
EXTSTATIC=
AC_SUBST(EXTSTATIC)dnl
AC_ARG_WITH(static-linked-ext,
	    AS_HELP_STRING([--with-static-linked-ext], [link external modules statically]),
            [AS_CASE([$withval],[yes],[STATIC=;EXTSTATIC=static])])

AS_CASE(["$target_os"],
  [human*], [
    setup=Setup.x68
    ],
  dnl OS/2 environment w/ Autoconf 2.1x for EMX
  [os2-emx], [
    setup=Setup.emx
    ],
  [*djgpp*], [
    setup=Setup.dj
    ],
  [
    setup=Setup
    ])

AC_SUBST(setup)

if test "$prefix" = NONE; then
  prefix=$ac_default_prefix
fi

if test x"$cross_compiling" = xyes; then
  test x"$MINIRUBY" = x && MINIRUBY="${RUBY-$BASERUBY} -I`pwd` "-r'$(arch)-fake'
  PREP='$(arch)-fake.rb'
  RUNRUBY='$(MINIRUBY) -I`cd $(srcdir)/lib; pwd`'
  XRUBY='$(MINIRUBY)'
  TEST_RUNNABLE=no
else
  MINIRUBY='./miniruby$(EXEEXT) -I$(srcdir)/lib'
  MINIRUBY="$MINIRUBY"' -I$(EXTOUT)/common -I./- -r$(srcdir)/ext/purelib.rb'
  PREP='miniruby$(EXEEXT)'
  RUNRUBY='$(MINIRUBY) $(srcdir)/tool/runruby.rb --extout=$(EXTOUT)'
  XRUBY='$(RUNRUBY)'
  TEST_RUNNABLE=yes
fi
AC_SUBST(TEST_RUNNABLE)
AC_SUBST(MINIRUBY)
AC_SUBST(PREP)
AC_SUBST(RUNRUBY)
AC_SUBST(XRUBY)
AC_SUBST(EXTOUT, [${EXTOUT=.ext}])

FIRSTMAKEFILE=""
LIBRUBY_A='lib$(RUBY_SO_NAME)-static.a'
LIBRUBY='$(LIBRUBY_A)'
LIBRUBYARG_STATIC='-l$(RUBY_SO_NAME)-static'
LIBRUBYARG='$(LIBRUBYARG_STATIC)'
SOLIBS=

AS_CASE(["$target_os"],
  [cygwin*|mingw*|beos*|haiku*|openstep*|nextstep*|rhapsody*|darwin*|os2-emx*], [
    : ${DLDLIBS=""}
    ],
  [
    DLDLIBS="$DLDLIBS -lc"
    ])

AC_ARG_WITH(soname,
	AS_HELP_STRING([--with-soname=SONAME], [base name of shared library]),
	[RUBY_SO_NAME=$withval], [RUBY_SO_NAME='$(RUBY_BASE_NAME)'])

LIBRUBY_LDSHARED=$LDSHARED
LIBRUBY_DLDFLAGS=$DLDFLAGS
LIBRUBY_SO='lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR).$(TEENY)'
LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so'
ENABLE_SHARED=no

AC_ARG_ENABLE(shared,
       AS_HELP_STRING([--enable-shared], [build a shared library for Ruby]),
       [enable_shared=$enableval])
LIBRUBYARG_SHARED='-l$(RUBY_SO_NAME)'
if test "$enable_shared" = 'yes'; then
  LIBRUBY='$(LIBRUBY_SO)'
  LIBRUBYARG='$(LIBRUBYARG_SHARED)'
  test -z "$CCDLFLAGS" || CFLAGS="$CFLAGS $CCDLFLAGS"
  ENABLE_SHARED=yes
  if test "$rb_cv_binary_elf" = yes; then
    SOLIBS='$(LIBS)'
  fi
  AS_CASE(["$target_os"],
    [sunos4*], [
	LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR) lib$(RUBY_SO_NAME).so'
	],
    [linux* | gnu* | k*bsd*-gnu | atheos* | kopensolaris*-gnu], [
	LIBRUBY_DLDFLAGS='-Wl,-soname,lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR)'
	LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR) lib$(RUBY_SO_NAME).so'
	],
    [freebsd*|dragonfly*], [
	SOLIBS='$(LIBS)'
	LIBRUBY_SO='lib$(RUBY_SO_NAME).so.$(MAJOR)$(MINOR)'
	if test "$rb_cv_binary_elf" != "yes" ; then
	    LIBRUBY_SO="$LIBRUBY_SO.\$(TEENY)"
	    LIBRUBY_ALIASES=''
	fi
	],
    [netbsd*], [
	SOLIBS='$(LIBS)'
	LIBRUBY_SO='lib$(RUBY_SO_NAME).so.$(MAJOR)$(MINOR).$(TEENY)'
	LIBRUBY_DLDFLAGS='-Wl,-soname,lib$(RUBY_SO_NAME).so.$(MAJOR)$(MINOR)'
	if test "$rb_cv_binary_elf" = yes; then # ELF platforms
	   LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so.$(MAJOR)$(MINOR) lib$(RUBY_SO_NAME).so'
	else	# a.out platforms
	   LIBRUBY_ALIASES=""
	fi
	],
    [openbsd*], [
	SOLIBS='$(LIBS)'
	LIBRUBY_SO='lib$(RUBY_SO_NAME).so.$(MAJOR).'`expr ${MINOR} \* 10 + ${TEENY}`
	],
    [solaris*], [
	SOLIBS='$(LIBS)'
	LIBRUBY_SO='lib$(RUBY_SO_NAME).so.$(MAJOR)'
	LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR).$(TEENY) lib$(RUBY_SO_NAME).so'
	if test "$GCC" = yes; then
	    LIBRUBY_DLDFLAGS="$DLDFLAGS "'-Wl,-h,$(@F)'
	fi
	XLDFLAGS="$XLDFLAGS "'-R${libdir}'
	],
    [hpux*], [
	XLDFLAGS="$XLDFLAGS "'-Wl,+s,+b,$(libdir)'
	LIBRUBY_SO='lib$(RUBY_SO_NAME).sl.$(MAJOR).$(MINOR).$(TEENY)'
	LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).sl.$(MAJOR).$(MINOR) lib$(RUBY_SO_NAME).sl'
	],
    [aix*], [
	LIBRUBY_DLDFLAGS="${linker_flag}-bnoentry $XLDFLAGS"
	LIBRUBYARG_SHARED='-L${libdir} -l${RUBY_SO_NAME}'
	SOLIBS='-lm -lc'
	],
    [beos*], [
	AS_CASE(["$target_cpu"],
	[powerpc*], [
	    LIBRUBY_DLDFLAGS='-f ruby.exp -lnet -lbe -lroot glue-noinit.a init_term_dyn.o start_dyn.o'
	    ])
	],
    [darwin*], [
	RUBY_SO_NAME="$RUBY_SO_NAME"'.$(MAJOR).$(MINOR).$(TEENY)'
	LIBRUBY_LDSHARED='$(CC) -dynamiclib'
	if test "$load_relative" = yes; then
	    libprefix='@executable_path/../lib'
	else
	    libprefix='$(libdir)'
	fi
	LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-install_name '${libprefix}'/$(LIBRUBY_SO)'
	LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-current_version $(MAJOR).$(MINOR).$(TEENY)'
	LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-compatibility_version $(ruby_version)'
	if test "$visibility_option" = ld; then
	    LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-Wl,-unexported_symbol,_Init_*'
	    LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-Wl,-unexported_symbol,*_threadptr_*'
	fi
	LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "' $(XLDFLAGS)'
	LIBRUBY_SO='lib$(RUBY_SO_NAME).dylib'
	LIBRUBY_ALIASES='lib$(RUBY_BASE_NAME).$(MAJOR).$(MINOR).dylib lib$(RUBY_INSTALL_NAME).dylib'
	],
    [interix*], [
	LIBRUBYARG_SHARED='-L. -L${libdir} -l$(RUBY_SO_NAME)'
	])
fi
if test "$enable_rpath" = yes; then
    LIBRUBY_RPATHFLAGS="${linker_flag}-R ${linker_flag}\$(libdir) -L\$(libdir)"
    LIBRUBYARG_SHARED="$LIBRUBY_RPATHFLAGS $LIBRUBYARG_SHARED"
    LIBRUBYARG_STATIC="$LIBRUBY_RPATHFLAGS $LIBRUBYARG_STATIC"
fi

LDFLAGS="-L. $LDFLAGS"
AC_SUBST(ARCHFILE)

if test "$EXEEXT" = .exe; then
    EXECUTABLE_EXTS='".exe",".com",".cmd",".bat"'
    AC_DEFINE_UNQUOTED(EXECUTABLE_EXTS, $EXECUTABLE_EXTS)
    EXECUTABLE_EXTS=`echo $EXECUTABLE_EXTS | tr -d '"' | tr , ' '`
    AC_SUBST(EXECUTABLE_EXTS)
fi

dnl }
dnl build section {

dnl build rdoc index if requested
RDOCTARGET=""
AC_ARG_ENABLE(install-doc,
       AS_HELP_STRING([--disable-install-doc], [do not install rdoc indexes during install]),
       [install_doc=$enableval], [install_doc=yes])
if test "$install_doc" != no; then
    RDOCTARGET="rdoc"
else
    RDOCTARGET="nodoc"
    CAPITARGET="nodoc"
fi
AC_SUBST(RDOCTARGET)

AS_CASE(["$RDOCTARGET:$CAPITARGET"],[nodoc:nodoc],[INSTALLDOC=nodoc],[INSTALLDOC=all])
AC_SUBST(INSTALLDOC)

if test "$rb_with_pthread" = "yes"; then
    THREAD_MODEL=pthread
fi
MINIDLNOBJ=dmydln.o
AS_CASE(["$target_os"],
    [linux*], [
	],
    [netbsd*], [
	RUBY_APPEND_OPTION(CFLAGS, -pipe)
	],
    [nextstep*|openstep*], [
	RUBY_APPEND_OPTION(CPPFLAGS, -I/usr/local/include)
	],
    [rhapsody*], [
	RUBY_APPEND_OPTIONS(CFLAGS, -pipe -no-precomp)
	],
    [darwin*], [
	RUBY_APPEND_OPTION(CFLAGS, -pipe)
	],
    [human*], [
	AC_LIBOBJ([x68.o])
	CFLAGS="$CFLAGS -fansi-only"
	XCFLAGS="$XCFLAGS -cc1-stack=262144 -cpp-stack=2694144"
	EXEEXT=.x
	OBJEXT=o
	],
    [os2-emx], [
	AC_LIBOBJ([os2])
    	CFLAGS="$CFLAGS -DOS2"
	LIBRUBY_A=`echo $LIBRUBY_A | sed 's/^lib//'`
	LIBRUBY_SO=`echo $LIBRUBY_SO | sed 's/^lib//'`
	LIBRUBY_ALIASES=`for i in $LIBRUBY_ALIASES; do echo "$i"; done | sed 's/^lib//'`
	],
    [osf*], [
	if test "$GCC" != "yes" ; then
	  # compile something small: taint.c is fine for this.
	  # the main point is the '-v' flag of 'cc'.
	  AS_CASE(["`cc -v -I. -c main.c -o /tmp/main.o 2>&1`"],
	  [*/gemc_cc*], [   # we have the new DEC GEM CC
                        CFLAGS="$CFLAGS -oldc"
                        ],
          [            # we have the old MIPS CC
                        ])
	  # cleanup
	  rm -f /tmp/main.o
	  CFLAGS="$CFLAGS -std"
	fi
	],
    [beos*], [
	AS_CASE(["$target_cpu"],[powerpc*], [CFLAGS="$CFLAGS -relax_pointers"])
	CPPFLAGS="$CPPFLAGS -I/boot/home/config/include"
	],
    [cygwin*|mingw*], [
	RUBY_SO_NAME="${RUBY_SO_NAME}${MAJOR}${MINOR}${TEENY}"
	LIBRUBY_DLDFLAGS="${DLDFLAGS}"' -Wl,--out-implib=$(LIBRUBY)'
	AS_CASE(["$target_os"],
	[cygwin*], [
	    if test x"$enable_shared" = xyes; then
		LIBRUBY_SO='cyg$(RUBY_SO_NAME)'.dll
		LIBRUBY_DLDFLAGS="${LIBRUBY_DLDFLAGS}"' $(RUBYDEF)'
	    fi
	    ],
	[mingw*], [
	    RUBY_SO_NAME="${rb_cv_msvcrt}-${RUBY_SO_NAME}"
	    if test x"$enable_shared" = xyes; then
		LIBRUBY_SO='$(RUBY_SO_NAME)'.dll
		LIBRUBY_DLDFLAGS="${LIBRUBY_DLDFLAGS}"' $(RUBYDEF)'
	    fi
	    EXPORT_PREFIX=' '
	    DLDFLAGS="${DLDFLAGS}"' $(DEFFILE)'
	    AC_LIBOBJ([win32])
	    COMMON_LIBS=m
#	    COMMON_MACROS="WIN32_LEAN_AND_MEAN="
	    COMMON_HEADERS="winsock2.h windows.h"
	    THREAD_MODEL=win32
	    ])
	LIBRUBY_ALIASES=''
	FIRSTMAKEFILE=GNUmakefile:cygwin/GNUmakefile.in
	SOLIBS='$(LIBS)'
	if test x"$enable_shared" = xyes; then
	    LIBRUBY='lib$(RUBY_SO_NAME).dll.a'
	else
	    LIBRUBY_SO=dummy
	    LIBRUBY='lib$(RUBY_SO_NAME).a'
	    LIBRUBYARG='-l$(RUBY_SO_NAME)'
	fi
	],
    [hpux*], [
	AS_CASE(["$YACC"],[*yacc*], [
	    XCFLAGS="$XCFLAGS -DYYMAXDEPTH=300"
	    YACC="$YACC -Nl40000 -Nm40000"
	])],
    [*msdosdjgpp*], [
	FIRSTMAKEFILE=GNUmakefile:djgpp/GNUmakefile.in
	])
MINIOBJS="$MINIDLNOBJ"

AS_CASE(["$THREAD_MODEL"],
[pthread], [AC_CHECK_HEADERS(pthread.h)],
[win32],   [],
[""],      [AC_MSG_ERROR(thread model is missing)],
           [AC_MSG_ERROR(unknown thread model $THREAD_MODEL)])

AS_CASE(["$FIRSTMAKEFILE"], [*GNUmakefile:*], [gnumake=yes], [
    AC_MSG_CHECKING([for if ${MAKE-make} is GNU make])
    mkdir conftest.dir
    echo "all:; @echo yes" > conftest.dir/GNUmakefile
    echo "all:; @echo no" > conftest.dir/Makefile
    gnumake=`(cd conftest.dir; ${MAKE-make})`
    rm -fr conftest.dir
    AS_CASE(["$gnumake"],
    [*yes*], [
	echo "include Makefile" > GNUmakefile
	echo "-include uncommon.mk" >> GNUmakefile
	gnumake=yes],
    [
	gnumake=no])
    AC_MSG_RESULT($gnumake)
])

if test "${universal_binary-no}" = yes ; then
    AC_CACHE_CHECK([for architecture macros], rb_cv_architecture_macros, [
    mv confdefs.h confdefs1.h
    : > confdefs.h
    AC_TRY_COMPILE([@%:@if defined __`echo ${universal_archnames} |
    sed 's/=[^ ]*//g;s/ /__ || defined __/g'`__
@%:@else
@%:@error
>>>>>><<<<<<
@%:@endif], [],
[
    rb_cv_architecture_macros=yes
    mv -f confdefs1.h confdefs.h
], [
    rb_cv_architecture_macros=no
    archflagpat=`eval echo '"'"${ARCH_FLAG}"'"' | sed 's/[[][|.*]]/\\&/g'`
    new_cflags=`echo "$CFLAGS" | sed "s|$archflagpat"'||'`
    for archs in ${universal_archnames}; do
	cpu=${archs#*=}
	archs=${archs%=*}
	CFLAGS="$new_cflags -arch $archs"
	archs="__${archs}__"
	AC_MSG_CHECKING([for macro ${archs} on ${cpu}])
	AC_TRY_COMPILE([@%:@ifndef ${archs}
@%:@error
@%:@endif], [], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])])
    done
    mv -f confdefs1.h confdefs.h
    AC_MSG_ERROR([failed])
    ])])
fi

CPPFLAGS="$CPPFLAGS "'$(DEFS)'
test -z "$CPPFLAGS" || CPPFLAGS="$CPPFLAGS "; CPPFLAGS="$CPPFLAGS"'${cppflags}'
if test -n "${cflags+set}"; then
    cflagspat=`eval echo '"'"${cflags}"'"' | sed 's/[[][|.*]]/\\&/g;s/^  */ /;s/^  *$/ /'`
    CFLAGS=`echo " $CFLAGS " | sed "s|$cflagspat"'|${cflags}|;s/^ *//;s/ *$//'`
fi
if test -n "${cxxflags+set}"; then
    cxxflagspat=`eval echo '"'"${cxxflags}"'"' | sed 's/[[][|.*]]/\\&/g;s/^  */ /;s/^  *$/ /'`
    CXXFLAGS=`echo " $CXXFLAGS " | sed "s|$cxxflagspat"'|${cxxflags}|;s/^ *//;s/ *$//'`
fi
if test "${ARCH_FLAG}"; then
    archflagpat=`eval echo '"'"${ARCH_FLAG}"'"' | sed 's/[[][|.*]]/\\&/g'`
    CFLAGS=`echo "$CFLAGS" | sed "s|$archflagpat"'|$(ARCH_FLAG)|'`
    CXXFLAGS=`echo "$CXXFLAGS" | sed "s|$archflagpat"'|$(ARCH_FLAG)|'`
    LDFLAGS=`echo "$LDFLAGS" | sed "s|$archflagpat"'|$(ARCH_FLAG)|'`
fi
AC_SUBST(cppflags, [])dnl
AC_SUBST(cflags, ["$orig_cflags "'${optflags} ${debugflags} ${warnflags}'])dnl
AC_SUBST(cxxflags, ["$orig_cxxflags "'${optflags} ${debugflags} ${warnflags}'])dnl
AC_SUBST(optflags)dnl
AC_SUBST(debugflags)dnl
AC_SUBST(warnflags)dnl
AC_SUBST(XCFLAGS)dnl
AC_SUBST(XLDFLAGS)dnl
AC_SUBST(LIBRUBY_LDSHARED)
AC_SUBST(LIBRUBY_DLDFLAGS)
AC_SUBST(RUBY_INSTALL_NAME)
AC_SUBST(rubyw_install_name)
AC_SUBST(RUBYW_INSTALL_NAME)
AC_SUBST(RUBY_SO_NAME)
AC_SUBST(LIBRUBY_A)
AC_SUBST(LIBRUBY_SO)
AC_SUBST(LIBRUBY_ALIASES)
AC_SUBST(LIBRUBY)
AC_SUBST(LIBRUBYARG)
AC_SUBST(LIBRUBYARG_STATIC)
AC_SUBST(LIBRUBYARG_SHARED)
AC_SUBST(SOLIBS)
AC_SUBST(DLDLIBS)
AC_SUBST(ENABLE_SHARED)
AC_SUBST(MAINLIBS)
AC_SUBST(COMMON_LIBS)
AC_SUBST(COMMON_MACROS)
AC_SUBST(COMMON_HEADERS)
AC_SUBST(EXPORT_PREFIX)
AC_SUBST(MINIOBJS)
AC_SUBST(THREAD_MODEL)

MAKEFILES="Makefile `echo $FIRSTMAKEFILE | sed 's/:.*//'`"
MAKEFILES="`echo $MAKEFILES`"
AC_SUBST(MAKEFILES)

ri_prefix=
test "$program_prefix" != NONE &&
  ri_prefix=$program_prefix

ri_suffix=
test "$program_suffix" != NONE &&
  ri_suffix=$program_suffix

RUBY_INSTALL_NAME="${ri_prefix}"'$(RUBY_BASE_NAME)'"${ri_suffix}"
AS_CASE(["$target_os"],
  [cygwin*|mingw*], [
    RUBYW_INSTALL_NAME="${ri_prefix}"'$(RUBYW_BASE_NAME)'"${ri_suffix}"
    rubyw_install_name='$(RUBYW_INSTALL_NAME)'
    ])

rubylibprefix='${libdir}/${RUBY_BASE_NAME}'
AC_ARG_WITH(rubylibprefix,
	    AS_HELP_STRING([--with-rubylibprefix=DIR], [prefix for ruby libraries [[LIBDIR/RUBY_BASE_NAME]]]),
	    [rubylibprefix=$withval])
RUBY_LIB_PREFIX=`eval echo \\"${rubylibprefix}\\"`
AC_SUBST(rubylibprefix)

RI_BASE_NAME=`echo ${RUBY_BASE_NAME} | sed 's/ruby/ri/'`
ridir='${datarootdir}/${RI_BASE_NAME}'
AC_ARG_WITH(ridir,
	    AS_HELP_STRING([--with-ridir=DIR], [ri documentation [[DATAROOTDIR/ri]]]),
	    [ridir=$withval])
RIDIR=`eval echo \\"${ridir}\\"`
AC_SUBST(ridir)
AC_SUBST(RI_BASE_NAME)

AC_ARG_WITH(ruby-version,
	    AS_HELP_STRING([--with-ruby-version=STR], [ruby version string for version specific directories [[full]] (full|minor|STR)]),
            [ruby_version=$withval],
            [ruby_version=full])
unset RUBY_LIB_VERSION
unset RUBY_LIB_VERSION_STYLE
AS_CASE(["$ruby_version"],
  [full],  [RUBY_LIB_VERSION_STYLE='3	/* full */'],
  [minor], [RUBY_LIB_VERSION_STYLE='2	/* minor */'])
if test ${RUBY_LIB_VERSION_STYLE+set}; then
    {
    echo "#define RUBY_LIB_VERSION_STYLE $RUBY_LIB_VERSION_STYLE"
    echo '#define STRINGIZE(x) x'
    test -f revision.h -o -f "${srcdir}/revision.h" || echo '#define RUBY_REVISION 0'
    echo '#include "version.h"'
    echo 'ruby_version=RUBY_LIB_VERSION'
    } > conftest.c
    ruby_version="`$CPP -I"${srcdir}" -I"${srcdir}/include" conftest.c | sed '/^ruby_version=/!d;s/ //g'`"
    eval $ruby_version
else
    RUBY_LIB_VERSION="\"${ruby_version}\""
fi

AC_ARG_WITH(sitedir,
	    AS_HELP_STRING([--with-sitedir=DIR], [site libraries in DIR [[RUBY_LIB_PREFIX/site_ruby]]]),
            [sitedir=$withval],
            [sitedir='${rubylibprefix}/site_ruby'])
dir="${sitedir}"
until SITE_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${SITE_DIR}"; do
    dir="${SITE_DIR}"
done

AC_ARG_WITH(vendordir,
	    AS_HELP_STRING([--with-vendordir=DIR], [vendor libraries in DIR [[RUBY_LIB_PREFIX/vendor_ruby]]]),
            [vendordir=$withval],
            [vendordir='${rubylibprefix}/vendor_ruby'])
dir="${vendordir}"
until VENDOR_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDOR_DIR}"; do
    dir="${VENDOR_DIR}"
done

if test "${LOAD_RELATIVE+set}"; then
    AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE)
    RUBY_EXEC_PREFIX=""
    RUBY_LIB_PREFIX="`eval echo "$RUBY_LIB_PREFIX" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`"
    RUBY_SITE_LIB_PATH="`eval echo "$SITE_DIR" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`"
    RUBY_VENDOR_LIB_PATH="`eval echo "$VENDOR_DIR" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`"
else
    RUBY_EXEC_PREFIX="`eval echo \\"$exec_prefix/\\" | sed 's|^NONE/|'"$prefix"'/|;s|/$||'`"
    RUBY_LIB_PREFIX="`eval echo \\"$RUBY_LIB_PREFIX\\" | sed 's|^NONE/|'"$prefix"'/|'`"
    RUBY_SITE_LIB_PATH="`eval echo \\"$SITE_DIR\\" | sed 's|^NONE/|'"$prefix"'/|'`"
    RUBY_VENDOR_LIB_PATH="`eval echo \\"$VENDOR_DIR\\" | sed 's|^NONE/|'"$prefix"'/|'`"
fi

pat=`echo "$RUBY_LIB_PREFIX/" | tr -c '\012' .`'\(.*\)'
AS_CASE(["$RUBY_SITE_LIB_PATH"],
  ["$RUBY_LIB_PREFIX/"*], [
    RUBY_SITE_LIB_PATH='RUBY_LIB_PREFIX"/'"`expr \"$RUBY_SITE_LIB_PATH\" : \"$pat\"`"'"'
    ],
  [
    RUBY_SITE_LIB_PATH="\"${RUBY_SITE_LIB_PATH}\""
    ])
AS_CASE(["$RUBY_VENDOR_LIB_PATH"],
  ["$RUBY_LIB_PREFIX/"*], [
    RUBY_VENDOR_LIB_PATH='RUBY_LIB_PREFIX"/'"`expr \"$RUBY_VENDOR_LIB_PATH\" : \"$pat\"`"'"'
    ],
  [
    RUBY_VENDOR_LIB_PATH="\"${RUBY_VENDOR_LIB_PATH}\""
    ])
pat=`echo "$RUBY_EXEC_PREFIX/" | tr -c '\012' .`'\(.*\)'
AS_CASE(["$RUBY_LIB_PREFIX"],
  ["$RUBY_EXEC_PREFIX/"*], [
    RUBY_LIB_PREFIX='RUBY_EXEC_PREFIX"/'"`expr \"$RUBY_LIB_PREFIX\" : \"$pat\"`"'"'
    ],
  [
    RUBY_LIB_PREFIX="\"${RUBY_LIB_PREFIX}\""
    ])

if test ${RUBY_LIB_VERSION_STYLE+set}; then
    AC_DEFINE_UNQUOTED(RUBY_LIB_VERSION_STYLE, $RUBY_LIB_VERSION_STYLE)
else
    AC_DEFINE_UNQUOTED(RUBY_LIB_VERSION, [$RUBY_LIB_VERSION])
fi
AC_DEFINE_UNQUOTED(RUBY_EXEC_PREFIX, "${RUBY_EXEC_PREFIX}")
AC_DEFINE_UNQUOTED(RUBY_LIB_PREFIX, ${RUBY_LIB_PREFIX})
AC_DEFINE_UNQUOTED(RUBY_SITE_LIB, ${RUBY_SITE_LIB_PATH})
AC_DEFINE_UNQUOTED(RUBY_VENDOR_LIB, ${RUBY_VENDOR_LIB_PATH})

AC_SUBST(arch)dnl
AC_SUBST(sitearch)dnl
AC_SUBST(ruby_version)dnl
AC_SUBST(sitedir)dnl
AC_SUBST(vendordir)dnl

configure_args=$ac_configure_args
AC_SUBST(configure_args)dnl

if test "${universal_binary-no}" = yes ; then
    arch="universal-${target_os}"
    AC_CACHE_CHECK(whether __ARCHITECTURE__ is available, rb_cv_architecture_available,
	AC_TRY_COMPILE([const char arch[] = __ARCHITECTURE__;], [puts(arch);],
	     [rb_cv_architecture_available=yes], [rb_cv_architecture_available=no]))
    if test "${rb_cv_architecture_available}" = yes; then
	AC_DEFINE_UNQUOTED(RUBY_PLATFORM_CPU, __ARCHITECTURE__)
    else
	for archs in ${universal_archnames}; do
	    cpu=`echo $archs | sed 's/.*=//'`
	    archs=`echo $archs | sed 's/=.*//'`
	    RUBY_DEFINE_IF([defined __${archs}__], RUBY_PLATFORM_CPU, ["${cpu}"])
	done
    fi
    ints='long int'
    test "$ac_cv_type_long_long" = yes && ints="'long long' $ints"
    AC_SUBST(UNIVERSAL_ARCHNAMES, "${universal_archnames}")
    AC_SUBST(UNIVERSAL_INTS, "${ints}")
    AC_DEFINE_UNQUOTED(RUBY_PLATFORM_OS, "${target_os}")
    AC_DEFINE_UNQUOTED(RUBY_ARCH, "universal-"RUBY_PLATFORM_OS)
    AC_DEFINE_UNQUOTED(RUBY_PLATFORM, "universal."RUBY_PLATFORM_CPU"-"RUBY_PLATFORM_OS)
else
    arch="${target_cpu}-${target_os}"
    AC_DEFINE_UNQUOTED(RUBY_PLATFORM, "${arch}")
fi

unset sitearch
AS_CASE(["$target_os"],[mingw*],[sitearch="$target_cpu-$rb_cv_msvcrt"])
test ${sitearch+set} && AC_DEFINE_UNQUOTED(RUBY_SITEARCH, "${sitearch}")

AC_ARG_WITH(search-path,
		AS_HELP_STRING([--with-search-path=DIR], [specify the additional search path]),
		[search_path=$withval])
if test "$search_path" != ""; then
    AC_DEFINE_UNQUOTED(RUBY_SEARCH_PATH,"$search_path")
fi

AC_ARG_WITH(rubyhdrdir,
	    AS_HELP_STRING([--with-rubyhdrdir=DIR], [core headers in DIR [[INCLUDEDIR/RUBY_BASE_NAME-RUBY_VERSION]]]),
	    [rubyhdrdir=$withval],
	    [rubyhdrdir='${includedir}/${RUBY_BASE_NAME}-${ruby_version}'])

AC_ARG_WITH(sitehdrdir,
	    AS_HELP_STRING([--with-sitehdrdir=DIR], [core site headers in DIR [[RUBYHDRDIR/site_ruby]]]),
	    [sitehdrdir=$withval],
	    [sitehdrdir='${rubyhdrdir}/site_ruby'])

AC_ARG_WITH(vendorhdrdir,
	    AS_HELP_STRING([--with-vendorhdrdir=DIR], [core vendor headers in DIR [[RUBYHDRDIR/vendor_ruby]]]),
	    [vendorhdrdir=$withval],
	    [vendorhdrdir='${rubyhdrdir}/vendor_ruby'])

AC_SUBST(rubyhdrdir)dnl
AC_SUBST(sitehdrdir)dnl
AC_SUBST(vendorhdrdir)dnl

AC_ARG_WITH(opt-dir,
	AS_HELP_STRING([--with-opt-dir=DIR], [add optional headers and libraries DIR]))

AC_ARG_WITH(mantype,
	AS_HELP_STRING([--with-mantype=TYPE], [specify man page type; TYPE is one of man and doc]),
		[
			AS_CASE(["$withval"],
			[man|doc], [MANTYPE=$withval],
			[AC_MSG_ERROR(invalid man type: $withval)])
		])
if test -z "$MANTYPE"; then
	AC_PATH_PROGS(NROFF, nroff awf, /bin/false, "/usr/bin:/usr/ucb")
	if ${NROFF} -mdoc ${srcdir}/man/ruby.1 >/dev/null 2>&1; then
		MANTYPE=doc
	else
		MANTYPE=man
	fi
fi
AC_SUBST(MANTYPE)

arch_hdrdir="${EXTOUT}/include/${arch}/ruby"
AS_MKDIR_P("${arch_hdrdir}")
config_h="${arch_hdrdir}/config.h"
tr -d '\015' < confdefs.h | grep -v "^#define PACKAGE_" |
${srcdir}/tool/ifchange "${config_h}" -
tr -d '\015' < largefile.h > confdefs.h
rm largefile.h

BUILTIN_ENCS=["`sed -n -e '/^BUILTIN_ENCS[ 	]*=/{' \
	-e s/// -e :l -e '/\\\\$/N' -e 's/\\\\\\n/ /' -e 't l' -e p \
	-e '}' "${srcdir}/enc/Makefile.in"`"]
BUILTIN_ENCOBJS=
for e in $BUILTIN_ENCS; do BUILTIN_ENCOBJS="$BUILTIN_ENCOBJS `basename $e .c`"'.$(OBJEXT)'; done
AC_SUBST(BUILTIN_ENCOBJS)

BUILTIN_TRANSES=["`sed -n -e '/^BUILTIN_TRANSES[ 	]*=/{' \
	-e s/// -e :l -e '/\\\\$/N' -e 's/\\\\\\n/ /' -e 't l' -e p \
	-e '}' "${srcdir}/enc/Makefile.in"`"]
BUILTIN_TRANSSRCS=
BUILTIN_TRANSOBJS=
for e in $BUILTIN_TRANSES; do
  BUILTIN_TRANSSRCS="$BUILTIN_TRANSSRCS `basename $e .trans`"'.c';
  BUILTIN_TRANSOBJS="$BUILTIN_TRANSOBJS `basename $e .trans`"'.$(OBJEXT)';
done
AC_SUBST(BUILTIN_TRANSSRCS)
AC_SUBST(BUILTIN_TRANSOBJS)

PACKAGE=$RUBY_BASE_NAME
AC_SUBST(PACKAGE)
AC_MSG_RESULT($PACKAGE library version = $ruby_version)

AS_CASE([" $CPP "], [*" $CC "*], [CPP=`echo " $CPP " | sed "s| $CC |"' $(CC) |;s/^ *//;s/  *$//'`])

AC_CONFIG_FILES($FIRSTMAKEFILE)
AC_CONFIG_FILES(Makefile, [{
	if test -d "$srcdir/.svn"; then
	    VCS='svn'
	    VCSUP='$(VCS) up $(SVNUPOPTIONS)'
	elif test -d "$srcdir/.git/svn"; then
	    VCS='git svn'
	    VCSUP='$(VCS) rebase $(GITSVNREBASEOPTIONS)'
	elif test -d "$srcdir/.git"; then
	    VCS='git'
	    VCSUP='$(VCS) pull $(GITPULLOPTIONS)'
	else
	    VCS='echo cannot'
	    VCSUP='$(VCS)'
	fi
	sed '/^MISSING/s/\$U\././g;/^VCS *=/s#@VCS@#'"$VCS"'#;/^VCSUP *=/s#@VCSUP@#'"$VCSUP"'#' Makefile
	echo; test x"$EXEEXT" = x || echo 'miniruby: miniruby$(EXEEXT)'
	if test "$gnumake" != yes; then
	    echo ['$(MKFILES): $(srcdir)/common.mk']
	    sed ['s/{\$([^(){}]*)[^{}]*}//g'] ${srcdir}/common.mk
	else
	    echo 'distclean-local::; @$(RM) GNUmakefile uncommon.mk'
	fi
    } > confmk$$.tmp && mv -f confmk$$.tmp Makefile &&
	${MAKE-make} info-program | grep '^PROGRAM=ruby$' > /dev/null ||
	echo 'ruby: $(PROGRAM);' >> Makefile],
[EXEEXT='$EXEEXT' gnumake='$gnumake'])
AC_OUTPUT
dnl }
dnl }
