1dnl Process this file with autoconf to produce a configure script. 2AC_INIT() 3{ 4AC_CONFIG_AUX_DIR(tool) 5 6AC_PREREQ(2.60) 7 8AC_DEFUN([RUBY_PREREQ_AC], 9 [m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]), [$1]), [-1], 10 AC_MSG_ERROR([Autoconf version ]$1[ or higher is required]$2))]) 11 12AC_DEFUN([RUBY_RM_RECURSIVE], [ 13m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]), [2.70]), [-1], [ 14# suppress error messages, rm: cannot remove 'conftest.dSYM', from 15# AC_EGREP_CPP with CFLAGS=-g on Darwin. 16AS_CASE([$build_os], [darwin*], [ 17rm() { 18 rm_recursive='' 19 for arg do 20 AS_CASE("$arg", 21 [--*], [], 22 [-*r*], [break], 23 [conftest.*], [if test -d "$arg"; then rm_recursive=-r; break; fi], 24 []) 25 done 26 command rm $rm_recursive "[$]@" 27} 28])])]) 29 30{ # environment section 31 32AC_ARG_WITH(baseruby, 33 AS_HELP_STRING([--with-baseruby=RUBY], [use RUBY as baseruby; RUBY is the pathname of ruby]), 34 [ 35 AS_CASE(["$withval"],[*ruby*],[BASERUBY=$withval],[AC_MSG_ERROR(need ruby)]) 36 ], 37 [ 38 BASERUBY="ruby" 39 ]) 40if test "`RUBYOPT=- $BASERUBY -e 'p 42' 2>/dev/null`" = 42; then 41 if test "`RUBYOPT=- $BASERUBY --disable=gems -e 'p 42' 2>/dev/null`" = 42; then 42 BASERUBY="$BASERUBY --disable=gems" 43 fi 44else 45 BASERUBY="echo executable host ruby is required. use --with-baseruby option.; false" 46fi 47AC_SUBST(BASERUBY) 48 49AC_DEFUN([RUBY_MINGW32], 50[AS_CASE(["$host_os"], 51[cygwin*], [ 52AC_CACHE_CHECK(for mingw32 environment, rb_cv_mingw32, 53[AC_TRY_CPP([ 54#ifndef __MINGW32__ 55# error 56#endif 57], rb_cv_mingw32=yes,rb_cv_mingw32=no) 58rm -f conftest*]) 59if test "$rb_cv_mingw32" = yes; then 60 target_os="mingw32" 61 : ${ac_tool_prefix:="`expr "$CC" : ['\(.*-\)g\?cc[^/]*$']`"} 62fi 63]) 64AS_CASE(["$target_os"], [mingw*msvc], [ 65target_os="`echo ${target_os} | sed 's/msvc$//'`" 66]) 67AS_CASE(["$target_cpu-$target_os"], [x86_64-mingw*], [ 68target_cpu=x64 69]) 70]) 71 72AC_DEFUN([RUBY_NACL], 73[ 74 AS_CASE(["${host_os}"], 75[nacl], [ 76 ac_cv_exeext=.nexe 77 host_vendor=chromium 78 ac_cv_host=chromium 79 AC_MSG_CHECKING([wheather \$NACL_SDK_ROOT is set]) 80 if test x"${NACL_SDK_ROOT}" = x; then 81 AC_MSG_RESULT([no]) 82 AC_MSG_ERROR([You need to set \$NACL_SDK_ROOT environment variable to build for NativeClient]) 83 fi 84 AC_MSG_RESULT([yes]) 85 86 nacl_cv_build_variant=glibc 87 AC_ARG_WITH(newlib, 88 AS_HELP_STRING([--with-newlib], [uses newlib version of NativeClient SDK]), 89 [AS_CASE([$withval], 90 [no], [nacl_cv_build_variant=glibc], 91 [yes], [nacl_cv_build_variant=newlib])]) 92 93 AS_CASE(["$build_cpu"], 94 [x86_64|i?86], [nacl_cv_cpu_nick=x86], [nacl_cv_cpu_nick=$build_cpu]) 95 AS_CASE(["$build_os"], 96 [linux*], [nacl_cv_os_nick=linux], 97 [darwin*], [nacl_cv_os_nick=mac], 98 [cygwin*|mingw*], [nacl_cv_os_nick=win], 99 [nacl_cv_os_nick=$build_os]) 100 101 host="$host_cpu-chromium-$host_os-" 102 ac_tool_prefix="$host_cpu-nacl-" 103 104 AC_MSG_CHECKING([NativeClient toolchain]) 105 if test -d \ 106 "${NACL_SDK_ROOT}/toolchain/${nacl_cv_os_nick}_${nacl_cv_cpu_nick}_${nacl_cv_build_variant}"; then 107 NACL_TOOLCHAIN="${nacl_cv_os_nick}_${nacl_cv_cpu_nick}_${nacl_cv_build_variant}" 108 else 109 AS_CASE( 110 ["${nacl_cv_build_variant}"], 111 [glibc], [if test \ 112 -d "${NACL_SDK_ROOT}/toolchain/${nacl_cv_os_nick}_${nacl_cv_cpu_nick}_newlib" \ 113 -a -d "${NACL_SDK_ROOT}/toolchain/${nacl_cv_os_nick}_${nacl_cv_cpu_nick}"; then 114 NACL_TOOLCHAIN="${nacl_cv_os_nick}_${nacl_cv_cpu_nick}" 115 fi], 116 [newlib], [ NACL_TOOLCHAIN="${nacl_cv_os_nick}_${nacl_cv_cpu_nick}" ]) 117 fi 118 if test ! -e "${NACL_SDK_ROOT}/toolchain/${NACL_TOOLCHAIN}/${ac_tool_prefix}gcc"; then 119 if test "${build_cpu}" = i686 -a -e "${NACL_SDK_ROOT}/toolchain/${NACL_TOOLCHAIN}/nacl-gcc"; then 120 ac_tool_prefix=nacl- 121 fi 122 if test "${build_cpu}" = x86_64 -a -e "${NACL_SDK_ROOT}/toolchain/${NACL_TOOLCHAIN}/nacl-gcc"; then 123 ac_tool_prefix=nacl64- 124 fi 125 fi 126 if test -z "${NACL_TOOLCHAIN}"; then 127 AC_MSG_ERROR([Unrecognized --host and --build combination or NaCl SDK is not installed]) 128 fi 129 AC_MSG_RESULT(${NACL_TOOLCHAIN}) 130 131 AC_MSG_CHECKING([path to SDK]) 132 if ! echo -- "${PATH}" | grep -F "${NACL_SDK_ROOT}/toolchain/${NACL_TOOLCHAIN}/bin" > /dev/null; then 133 PATH="${PATH}:${NACL_SDK_ROOT}/toolchain/${NACL_TOOLCHAIN}/bin" 134 fi 135 136 AC_SUBST(NACL_TOOLCHAIN) 137 AC_SUBST(NACL_SDK_ROOT) 138 AC_SUBST(NACL_SDK_VARIANT, nacl_cv_build_variant) 139])]) 140 141AC_DEFUN([RUBY_NACL_CHECK_PEPPER_TYPES], 142[AS_CASE(["${host_os}"], 143[nacl], [ 144 AC_CHECK_TYPES([struct PPB_Core, struct PPB_Messaging, struct PPB_Var, 145 struct PPB_URLLoader, struct PPB_URLRequestInfo, 146 struct PPB_URLResponseInfo, struct PPB_FileRef, 147 struct PPP_Instance]) 148]) 149]) 150 151AC_DEFUN([RUBY_CPPOUTFILE], 152[AC_CACHE_CHECK(whether ${CPP} accepts -o, rb_cv_cppoutfile, 153[save_CPPFLAGS="$CPPFLAGS" 154CPPFLAGS='-o conftest-1.i' 155rb_cv_cppoutfile=no 156AC_TRY_CPP([test-for-cppout], 157 [grep test-for-cppout conftest-1.i > /dev/null && rb_cv_cppoutfile=yes]) 158CPPFLAGS="$save_CPPFLAGS" 159rm -f conftest*]) 160if test "$rb_cv_cppoutfile" = yes; then 161 CPPOUTFILE='-o conftest.i' 162elif test "$rb_cv_cppoutfile" = no; then 163 CPPOUTFILE='> conftest.i' 164elif test -n "$rb_cv_cppoutfile"; then 165 CPPOUTFILE="$rb_cv_cppoutfile" 166fi 167AC_SUBST(CPPOUTFILE)]) 168 169AC_DEFUN([RUBY_PROG_GNU_LD], 170[AC_CACHE_CHECK(whether the linker is GNU ld, rb_cv_prog_gnu_ld, 171[if `$CC $CFLAGS $CPPFLAGS $LDFLAGS --print-prog-name=ld 2>&1` -v 2>&1 | grep "GNU ld" > /dev/null; then 172 rb_cv_prog_gnu_ld=yes 173else 174 rb_cv_prog_gnu_ld=no 175fi 176]) 177GNU_LD=$rb_cv_prog_gnu_ld 178AC_SUBST(GNU_LD)]) 179 180eval `sed -n 's/^#define RUBY_API_VERSION_\([A-Z][A-Z_0-9]*\) \([0-9][0-9]*\)/\1=\2/p' $srcdir/include/ruby/version.h` 181for v in MAJOR MINOR TEENY; do 182 if eval "test \"\$$v\" = ''"; then 183 AC_MSG_ERROR(could not determine $v number from version.h) 184 fi 185done 186AC_SUBST(MAJOR) 187AC_SUBST(MINOR) 188AC_SUBST(TEENY) 189RUBY_PROGRAM_VERSION=`sed -n 's/^#define RUBY_VERSION "\(.*\)"/\1/p' $srcdir/version.h` 190AC_SUBST(RUBY_PROGRAM_VERSION) 191RUBY_RELEASE_DATE=`sed -n 's/^#define RUBY_RELEASE_DATE "\(.*\)"/\1/p' $srcdir/version.h` 192AC_SUBST(RUBY_RELEASE_DATE) 193RUBY_PATCHLEVEL=`sed -n 's/^#define RUBY_PATCHLEVEL //p' $srcdir/version.h` 194AC_DEFINE(CANONICALIZATION_FOR_MATHN) 195dnl checks for alternative programs 196AC_CANONICAL_BUILD 197RUBY_RM_RECURSIVE 198AC_ARG_WITH(gcc, 199 AS_HELP_STRING([--without-gcc], [never use gcc]), 200 [ 201 AS_CASE([$withval], 202 [no], [: ${CC=cc}], 203 [yes], [: ${CC=gcc}], 204 [CC=$withval])]) 205dnl If the user switches compilers, we can't believe the cache 206if test ! -z "$ac_cv_prog_CC" -a ! -z "$CC" -a "$CC" != "$ac_cv_prog_CC" 207then 208 AC_MSG_ERROR(cached CC is different -- throw away $cache_file 209(it is also a good idea to do 'make clean' before compiling)) 210fi 211AS_CASE(["$build_os"], 212 [darwin1*.*], [ 213 AS_CASE(["x$CC"], 214 [xgcc-4.2|x/usr/bin/gcc-4.2], [: ${CXX=g++-4.2}], 215 [xgcc|x/usr/bin/gcc], [: ${CXX=g++}], 216 [xcc|x/usr/bin/cc], [: ${CXX=c++}], 217 [xclang|x/usr/bin/clang], [: ${CXX=clang++}]) 218 ]) 219test -z "$CC" || ac_cv_prog_CC="$CC" 220test -z "$CXX" || ac_cv_prog_CXX="$CXX" 221 222if test "$program_prefix" = NONE; then 223 program_prefix= 224fi 225RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"` 226RUBYW_BASE_NAME=`echo rubyw | sed "$program_transform_name"` 227AC_SUBST(RUBY_BASE_NAME) 228AC_SUBST(RUBYW_BASE_NAME) 229AC_SUBST(RUBY_VERSION_NAME, '${RUBY_BASE_NAME}-${ruby_version}') 230AC_DEFINE_UNQUOTED(RUBY_BASE_NAME, "${RUBY_BASE_NAME}" !<verconf>!) 231AC_DEFINE_UNQUOTED(RUBY_VERSION_NAME, RUBY_BASE_NAME"-"RUBY_LIB_VERSION !<verconf>!) 232 233AC_CANONICAL_TARGET 234target_os=`echo $target_os | sed 's/linux-gnu$/linux/;s/linux-gnu/linux-/'` 235ac_install_sh='' # unusable for extension libraries. 236 237AC_DEFUN([RUBY_APPEND_OPTION], 238 [# RUBY_APPEND_OPTION($1, $2) 239 AS_CASE([" [$]{$1-} "], 240 [*' $2 '*], [], [' '], [ $1="$2"], [ $1="[$]$1 $2"])]) 241AC_DEFUN([RUBY_APPEND_OPTIONS], 242 [{ for rb_opt in $2; do # RUBY_APPEND_OPTIONS($1, $2) 243 AS_CASE([" [$]{$1-} "], 244 [*" [$]{rb_opt} "*], [], [' '], [ $1="[$]{rb_opt}"], [ $1="[$]$1 [$]{rb_opt}"]) 245 done; }]) 246AC_DEFUN([RUBY_PREPEND_OPTION], 247 [# RUBY_PREPEND_OPTION($1, $2) 248 AS_CASE([" [$]{$1-} "], 249 [*' $2 '*], [], [' '], [ $1="$2"], [ $1="$2 [$]$1"])]) 250AC_DEFUN([RUBY_PREPEND_OPTIONS], 251 [{ unset rb_opts; for rb_opt in $2; do # RUBY_PREPEND_OPTIONS($1, $2) 252 AS_CASE([" [$]{rb_opts} [$]{$1-} "], 253 [*" [$]{rb_opt} "*], [], [' '], [ $1="[$]{rb_opt}"], [ rb_opts="[$]{rb_opts}[$]{rb_opt} "]) 254 done 255 $1="[$]{rb_opts}[$]$1"; }]) 256 257AC_ARG_WITH(arch, 258 AS_HELP_STRING([--with-arch=ARCHS], 259 [build an Apple/NeXT Multi Architecture Binary (MAB); 260 ARCHS is a comma-delimited list of architectures for 261 which to build; if this option is disabled or omitted 262 entirely, then the package will be built only for the 263 target platform]), 264 [target_archs="$withval"], [unset target_archs]) 265 266AC_DEFUN([RUBY_DEFAULT_ARCH], [ 267AC_MSG_CHECKING([arch option]) 268AS_CASE([$1], 269 [*64], [ARCH_FLAG=-m64], 270 [[i[3-6]86]], [ARCH_FLAG=-m32], 271 [AC_MSG_ERROR(unknown target architecture: $target_archs)] 272 ) 273AC_MSG_RESULT([$ARCH_FLAG]) 274]) 275 276AC_DEFUN([RUBY_UNIVERSAL_ARCH], [ 277# RUBY_UNIVERSAL_ARCH begin 278ARCH_FLAG=`expr " $CFLAGS " : ['.* \(-m[0-9][0-9]*\) ']` 279test ${CFLAGS+set} && CFLAGS=`echo "$CFLAGS" | sed -e 's/ *-arch *[^ ]*//g' -e 's/ *-m32//g' -e 's/ *-m64//g'` 280test ${LDFLAGS+set} && LDFLAGS=`echo "$LDFLAGS" | sed -e 's/ *-arch *[^ ]*//g' -e 's/ *-m32//g' -e 's/ *-m64//g'` 281unset universal_binary universal_archnames 282if test ${target_archs+set}; then 283 AC_MSG_CHECKING([target architectures]) 284 target_archs=`echo $target_archs | tr , ' '` 285 # /usr/lib/arch_tool -archify_list $TARGET_ARCHS 286 for archs in $target_archs 287 do 288 AS_CASE([",$universal_binary,"],[*",$archs,"*], [],[ 289 cpu=`$SHELL "$ac_aux_dir/config.sub" "${archs}-${target_os}" 2>&1` || { 290 AC_MSG_RESULT([failed]) 291 AC_MSG_ERROR([$cpu]) 292 } 293 cpu=`echo $cpu | sed 's/-.*-.*//'` 294 universal_binary="${universal_binary+$universal_binary,}$cpu" 295 universal_archnames="${universal_archnames} ${archs}=${cpu}" 296 ARCH_FLAG="${ARCH_FLAG+$ARCH_FLAG }-arch $archs" 297 ]) 298 done 299 target_archs="$universal_binary" 300 unset universal_binary 301 AS_CASE(["$target_archs"], 302 [*,*], [universal_binary=yes], 303 [unset universal_archnames]) 304 AC_MSG_RESULT([$target_archs]) 305 306 target=`echo $target | sed "s/^$target_cpu-/-/"` 307 target_alias=`echo $target_alias | sed "s/^$target_cpu-/-/"` 308 if test "${universal_binary-no}" = yes; then 309 RUBY_PREREQ_AC(2.63, [ to compile universal binary]) 310 AC_SUBST(try_header,try_compile) 311 target_cpu=universal 312 real_cross_compiling=$cross_compiling 313 else 314 if test x"$target_cpu" != x"${target_archs}"; then 315 echo 'int main(){return 0;}' > conftest.c 316 if $CC $CFLAGS $ARCH_FLAG -o conftest conftest.c > /dev/null 2>&1; then 317 rm -fr conftest.* 318 else 319 RUBY_DEFAULT_ARCH("$target_archs") 320 fi 321 fi 322 target_cpu=${target_archs} 323 fi 324 AS_CASE(["$target"], [-*], [ target="$target_cpu${target}"]) 325 AS_CASE(["$target_alias"], [-*], [ target_alias="$target_cpu${target_alias}"]) 326else 327 if test x"$target_alias" = x; then 328 AS_CASE(["$target_os"], 329 [darwin*], [ 330 AC_MSG_CHECKING([for real target cpu]) 331 target=`echo $target | sed "s/^$target_cpu-/-/"` 332 target_cpu=`$CC -E - 2>/dev/null <<EOF | 333#ifdef __x86_64__ 334"processor-name=x86_64" 335#endif 336#ifdef __i386__ 337"processor-name=i386" 338#endif 339#ifdef __ppc__ 340"processor-name=powerpc" 341#endif 342#ifdef __ppc64__ 343"processor-name=powerpc64" 344#endif 345EOF 346 sed -n 's/^"processor-name=\(.*\)"/\1/p'` 347 target="$target_cpu${target}" 348 AC_MSG_RESULT([$target_cpu]) 349 ]) 350 fi 351 target_archs="$target_cpu" 352fi 353if test "${target_archs}" != "${rb_cv_target_archs-${target_archs}}"; then 354 AC_MSG_ERROR([target arch(s) has changed from ${rb_cv_target_archs-nothing} to ${target_archs}]) 355else 356 rb_cv_target_archs=${target_archs} 357fi 358if test "x${ARCH_FLAG}" != x; then 359 CFLAGS="$CFLAGS ${ARCH_FLAG}" 360 LDFLAGS="${LDFLAGS+$LDFLAGS }${ARCH_FLAG}" 361fi 362# RUBY_UNIVERSAL_ARCH end 363]) 364 365AC_ARG_ENABLE(load-relative, 366 AS_HELP_STRING([--enable-load-relative], [resolve load paths at run time]), 367 [load_relative=$enableval]) 368 369AC_ARG_PROGRAM 370 371dnl Checks for programs. 372 373cflagspat= 374test -z "$optflags" || 375 cflagspat="$cflagspat;s|"`eval echo '"'"${optflags}"'"' | sed 's/[[][|.*]]/\\&/g;s/^ */ /;s/ *$/ /'`'| |g' 376test -z "$debugflags" || 377 cflagspat="$cflagspat;s|"`eval echo '"'"${debugflags}"'"' | sed 's/[[][|.*]]/\\&/g;s/^ */ /;s/ *$/ /'`'| |g' 378test -z "warnflags" || 379 cflagspat="$cflagspat;s|"`eval echo '"'"${warnflags}"'"' | sed 's/[[][|.*]]/\\&/g;s/^ */ /;s/ *$/ /'`'| |g' 380if test -z "${CFLAGS+set}"; then 381 cflags=`echo " $cflags " | sed "$cflagspat;s/^ *//;s/ *$//"` 382 orig_cflags="$cflags" 383 cflags="$cflags "'${optflags} ${debugflags} ${warnflags}' 384fi 385if test -z "${CXXFLAGS+set}"; then 386 cxxflags=`echo " $cxxflags " | sed "$cflagspat;s/^ *//;s/ *$//"` 387 orig_cxxflags="$cxxflags" 388 cxxflags="$cxxflags "'${optflags} ${debugflags} ${warnflags}' 389fi 390 391RUBY_NACL 392AS_CASE(["$host_os:$build_os"], 393[darwin*:darwin*], [ 394 AC_CHECK_TOOLS(CC, [gcc-4.2 clang gcc cc]) 395]) 396if test x"${build}" != x"${host}"; then 397 AC_CHECK_TOOL(CC, gcc) 398fi 399 400AC_PROG_CC 401AC_PROG_CXX 402RUBY_MINGW32 403AC_PROG_GCC_TRADITIONAL 404AC_SUBST(GCC) 405AS_CASE(["$target_os"], 406[solaris*], [AC_PATH_TOOL([LD], [ld], [/usr/ccs/bin/ld], [/usr/ccs/bin:$PATH])], 407[AC_CHECK_TOOL([LD], [ld], [ld])]) 408AC_SUBST(LD) 409if test "$GCC" = yes; then 410 linker_flag=-Wl, 411 : ${optflags=-O3} 412 RUBY_APPEND_OPTIONS(XCFLAGS, ["-include ruby/config.h" "-include ruby/missing.h"]) 413else 414 linker_flag= 415fi 416 417RUBY_PROG_GNU_LD 418RUBY_CPPOUTFILE 419 420: ${OUTFLAG='-o '} 421: ${COUTFLAG=${OUTFLAG}} 422AC_SUBST(OUTFLAG) 423AC_SUBST(COUTFLAG) 424 425RUBY_UNIVERSAL_ARCH 426if test "$target_cpu" != "$host_cpu" -a "$GCC" = yes -a "$cross_compiling" = no -a "$universal_binary" = no; then 427 RUBY_DEFAULT_ARCH("$target_cpu") 428fi 429 430AS_CASE(["$target_cpu-$target_os"], [[i[3-6]86*]], [ 431 AC_CACHE_CHECK([for __sync_val_compare_and_swap], [rb_cv_gcc_compiler_cas], [ 432 AC_TRY_LINK([unsigned long atomic_var;], 433 [ 434 __sync_val_compare_and_swap(&atomic_var, 0, 1); 435 ], 436 [rb_cv_gcc_compiler_cas=yes], 437 [rb_cv_gcc_compiler_cas=no])]) 438 if test "$rb_cv_gcc_compiler_cas" = no; then 439 unset rb_cv_gcc_compiler_cas 440 save_CFLAGS="$CFLAGS" 441 CFLAGS="$CFLAGS -march=i486" 442 AC_CACHE_CHECK([for __sync_val_compare_and_swap with -march=i486], [rb_cv_gcc_compiler_cas], [ 443 AC_TRY_LINK([unsigned long atomic_var;], 444 [ 445 __sync_val_compare_and_swap(&atomic_var, 0, 1); 446 ], 447 [rb_cv_gcc_compiler_cas=yes 448 ARCH_FLAG="-march=i486"], 449 [rb_cv_gcc_compiler_cas=no])]) 450 CFLAGS="$save_CFLAGS" 451 fi]) 452 453AC_CHECK_TOOL(RANLIB, ranlib, :) 454AC_CHECK_TOOL(AR, ar) 455if test -z "$AR"; then 456 AC_CHECK_PROGS(AR, aal, ar) 457fi 458 459AC_CHECK_TOOL(AS, as) 460ASFLAGS=$ASFLAGS 461AC_SUBST(ASFLAGS) 462 463AS_CASE(["$target_os"],[cygwin*|mingw*], [ac_cv_prog_ac_ct_OBJCOPY=":"]) 464 465# BSD's ports and MacPorts prefix GNU binutils with 'g' 466AC_CHECK_TOOLS(OBJDUMP, [objdump gobjdump]) 467AC_CHECK_TOOLS(OBJCOPY, [objcopy gobjcopy]) 468 469AS_CASE(["$target_os"], 470[cygwin*|mingw*], [ 471 AC_CHECK_TOOL(WINDRES, windres) 472 AC_CHECK_TOOL(DLLWRAP, dllwrap) 473 target=`echo $target | sed "s/^$target_cpu-/-/"` 474 target_alias=`echo $target_alias | sed "s/^$target_cpu-/-/"` 475 target_cpu=`echo $target_cpu | sed s/i.86/i386/` 476 AS_CASE(["$target"], [-*], [ target="$target_cpu${target}"]) 477 AS_CASE(["$target_alias"], [-*], [ target_alias="$target_cpu${target_alias}"]) 478 AS_CASE(["$target_os"], 479 [mingw*], [ 480 test "$rb_cv_msvcrt" = "" && unset rb_cv_msvcrt 481 AC_CACHE_CHECK(for mingw32 runtime DLL, rb_cv_msvcrt, [ 482 AC_TRY_LINK([@%:@include <stdio.h>], 483 [FILE* volatile f = stdin; return 0;], 484 [rb_cv_msvcrt=`$OBJDUMP -p conftest$ac_exeext | 485 tr A-Z a-z | 486 sed -n '/^[[ ]]*dll name: \(msvc.*\)\.dll$/{s//\1/p;q;}'`], 487 [rb_cv_msvcrt=msvcrt]) 488 test "$rb_cv_msvcrt" = "" && rb_cv_msvcrt=msvcrt]) 489 RT_VER=`echo "$rb_cv_msvcrt" | tr -cd [0-9]` 490 test "$RT_VER" = "" && RT_VER=60 491 AC_DEFINE_UNQUOTED(RUBY_MSVCRT_VERSION, $RT_VER) 492 ]) 493 : ${enable_shared=yes} 494 ], 495[aix*], [AC_CHECK_TOOL(NM, nm, /usr/ccs/bin/nm, /usr/ccs/bin:$PATH)], 496[hiuxmpp*], [AC_DEFINE(__HIUX_MPP__)]) # by TOYODA Eizi <toyoda@npd.kishou.go.jp> 497AC_CHECK_TOOL(NM, nm) 498 499AC_PROG_LN_S 500AC_PROG_MAKE_SET 501AC_PROG_INSTALL 502AC_PROG_MKDIR_P 503if test "x$MKDIR_P" = "x -d"; then 504 if test x"$as_mkdir_p" != xfalse; then 505 MKDIR_P='mkdir -p' 506 echo "use 'mkdir -p' as MKDIR_P" 507 else 508 AC_MSG_ERROR([mkdir -p is required]) 509 fi 510fi 511MAKEDIRS="$MKDIR_P" 512AC_SUBST(MAKEDIRS) 513 514AC_DEFUN([RUBY_DTRACE_AVAILABLE], 515[AC_CACHE_CHECK(whether dtrace USDT is available, rb_cv_dtrace_available, 516[ 517 echo "provider conftest{ probe fire(); };" > conftest_provider.d 518 if $DTRACE -h -o conftest_provider.h -s conftest_provider.d >/dev/null 2>/dev/null; then 519 # DTrace is available on the system 520 rb_cv_dtrace_available=yes 521 else 522 # DTrace is not available while dtrace command exists 523 # for example FreeBSD 8 or FreeBSD 9 without DTrace build option 524 rb_cv_dtrace_available=no 525 fi 526 rm -f conftest.[co] conftest_provider.[dho] 527]) 528]) 529 530AC_DEFUN([RUBY_DTRACE_POSTPROCESS], 531[AC_CACHE_CHECK(whether $DTRACE needs post processing, rb_cv_prog_dtrace_g, 532[ 533 if { 534 echo "provider conftest{ probe fire(); };" > conftest_provider.d && 535 dtrace -h -o conftest_provider.h -s conftest_provider.d >/dev/null 2>/dev/null && 536 cat >conftest.c <<_CONF && 537 @%:@include "conftest_provider.h" 538 int main(void){ CONFTEST_FIRE(); return 0; } 539_CONF 540 $CC $CFLAGS -c -o conftest.o conftest.c && 541 $DTRACE -G -s conftest_provider.d conftest.o 2>/dev/null 542 }; then 543 rb_cv_prog_dtrace_g=yes 544 else 545 rb_cv_prog_dtrace_g=no 546 fi 547 rm -f conftest.[co] conftest_provider.[dho] 548]) 549]) 550 551AC_CHECK_PROG([DTRACE], [${ac_tool_prefix}dtrace], [${ac_tool_prefix}dtrace]) 552if test "$cross_compiling:$ac_cv_prog_DTRACE" = no: -a -n "$ac_tool_prefix"; then 553 AC_CHECK_PROG([DTRACE], [dtrace], [dtrace]) 554fi 555 556AC_CHECK_PROGS(DOT, dot) 557AC_CHECK_PROGS(DOXYGEN, doxygen) 558AS_CASE(["${host_os}"], [nacl], [AC_PATH_PROG(PYTHON, python)]) 559 560AC_CHECK_PROG(PKG_CONFIG, pkg-config, [pkg-config], [], [], 561 [`"$as_dir/$ac_word$ac_exec_ext" --print-errors --version > /dev/null 2>&1 || echo "$as_dir/$ac_word$ac_exec_ext"`]) 562 563# checks for UNIX variants that set C preprocessor variables 564AC_USE_SYSTEM_EXTENSIONS 565 566AC_SUBST(RM, ['rm -f']) 567AC_SUBST(CP, ['cp']) 568RMDIRS='$(top_srcdir)/tool/rmdirs' 569RMDIR=rmdir 570mkdir "rmdirs_$$_test" "rmdirs_$$_test/a" 571rmdir --ignore-fail-on-non-empty "rmdirs_$$_test" 2>/dev/null && 572RMDIR='rmdir --ignore-fail-on-non-empty' 573$RMDIR -p "rmdirs_$$_test/a" 2>/dev/null && 574{ test -d "rmdirs_$$_test" || RMDIRS="$RMDIR -p"; } 575rmdir "rmdirs_$$_test/a" "rmdirs_$$_test" 2>/dev/null 576AC_SUBST(RMDIR) 577AC_SUBST(RMDIRS) 578AC_SUBST(RMALL, ['rm -fr']) 579 580AC_MSG_CHECKING([for cd using physical directory]) 581rm -fr conf$$.dir 582mkdir conf$$.dir && 583(cd conf$$.dir && mkdir src build && cd src && 584$as_ln_s ../build . > /dev/null 2>&1 && cd build && 585for chdir in 'cd -P' 'PWD= cd'; do 586 /bin/sh -c "$chdir ../src && echo '$chdir' > cdcmd" 2> /dev/null && break 587done) 588if test -f conf$$.dir/src/cdcmd; then 589 read CHDIR < conf$$.dir/src/cdcmd 2> /dev/null 590else 591 CHDIR=cd 592fi 593rm -fr conf$$.dir 594AC_MSG_RESULT([$CHDIR]) 595AC_SUBST(CHDIR) 596 597} 598{ # compiler section 599 600AC_DEFUN([RUBY_WERROR_FLAG], [dnl 601save_CFLAGS="$CFLAGS" 602CFLAGS="$CFLAGS $rb_cv_warnflags" 603if test "${ac_c_werror_flag+set}"; then 604 rb_c_werror_flag="$ac_c_werror_flag" 605else 606 unset rb_c_werror_flag 607fi 608ac_c_werror_flag=yes 609$1 610CFLAGS="$save_CFLAGS" 611save_CFLAGS= 612if test "${rb_c_werror_flag+set}"; then 613 ac_c_werror_flag="$rb_c_werror_flag" 614else 615 unset ac_c_werror_flag 616fi]) 617 618AC_DEFUN(RUBY_TRY_CFLAGS, [ 619 AC_MSG_CHECKING([whether ]$1[ is accepted as CFLAGS]) 620 RUBY_WERROR_FLAG([ 621 CFLAGS="[$]CFLAGS $1" 622 AC_TRY_COMPILE([$4], [$5], 623 [$2 624 AC_MSG_RESULT(yes)], 625 [$3 626 AC_MSG_RESULT(no)]) 627 ]) 628]) 629 630AC_DEFUN(RUBY_TRY_LDFLAGS, [ 631 save_LDFLAGS="$LDFLAGS" 632 LDFLAGS="[$]LDFLAGS $1" 633 AC_MSG_CHECKING([whether $1 is accepted as LDFLAGS]) 634 RUBY_WERROR_FLAG([ 635 AC_TRY_LINK([$4], [$5], 636 [$2 637 AC_MSG_RESULT(yes)], 638 [$3 639 AC_MSG_RESULT(no)]) 640 ]) 641 LDFLAGS="$save_LDFLAGS" 642 save_LDFLAGS= 643]) 644 645AS_CASE([$RUBY_PATCHLEVEL], [-*], 646 [particular_werror_flags=yes], [particular_werror_flags=no]) 647AC_ARG_ENABLE(werror, 648 AS_HELP_STRING([--disable-werror], 649 [don't make warnings into errors 650 even if a compiler support -Werror feature 651 @<:@disabled by default unless development version@:>@]), 652 [particular_werror_flags=$enableval]) 653 654rb_cv_warnflags="$warnflags" 655if test "$GCC:${warnflags+set}:no" = yes::no; then 656 for wflag in -Wno-unused-parameter -Wno-parentheses -Wno-long-long \ 657 -Wno-missing-field-initializers \ 658 -Wunused-variable \ 659 -Werror=pointer-arith \ 660 -Werror=write-strings \ 661 -Werror=declaration-after-statement \ 662 -Werror=shorten-64-to-32 \ 663 -Werror=implicit-function-declaration \ 664 ; do 665 if test "$particular_werror_flags" != yes; then 666 wflag=`echo x$wflag | sed 's/^x-Werror=/-W/;s/^x//'` 667 fi 668 ok=no 669 RUBY_TRY_CFLAGS($wflag, [ 670 RUBY_APPEND_OPTIONS(warnflags, $wflag) 671 ok=yes 672 ]) 673 AS_CASE([$ok:$wflag], [no:-Werror=*], [ 674 wflag=`echo x$wflag | sed 's/^x-Werror=/-W/'` 675 RUBY_TRY_CFLAGS($wflag, [ 676 RUBY_APPEND_OPTIONS(warnflags, $wflag) 677 particular_werror_flags=no 678 ]) 679 ]) 680 done 681 AS_CASE([" $warnflags "],[*" -Wno-missing-field-initializers "*], [wflag="-Wall -Wextra"], 682 [wflag=-Wall]) 683 RUBY_TRY_CFLAGS($wflag, [warnflags="$wflag${warnflags+ $warnflags}"]) 684 # Disable warnflags while conftest. -Werror=* flags might make bad OS capability guess. 685 rb_cv_warnflags="$warnflags" 686 warnflags= 687fi 688if test "$GCC" = yes; then 689 test "${debugflags+set}" || {RUBY_TRY_CFLAGS(-ggdb3, [debugflags=-ggdb3])} 690 test "${debugflags+set}" || {RUBY_TRY_CFLAGS(-ggdb, [debugflags=-ggdb])} 691 test "${debugflags+set}" || {RUBY_TRY_CFLAGS(-g3, [debugflags=-g3])} 692 693 # -D_FORTIFY_SOURCE 694 RUBY_TRY_CFLAGS(-D_FORTIFY_SOURCE=2, [RUBY_APPEND_OPTION(XCFLAGS, -D_FORTIFY_SOURCE=2)]) 695 696 # -fstack-protector 697 AS_CASE(["$target_os"], 698 [mingw*|nacl|haiku], [ 699 stack_protector=no 700 ], 701 [ 702 RUBY_TRY_CFLAGS(-fstack-protector, [stack_protector=yes], [stack_protector=no]) 703 if test "x$stack_protector" = xyes; then 704 RUBY_TRY_LDFLAGS(-fstack-protector, [], [stack_protector=broken]) 705 fi 706 ]) 707 if test "x$stack_protector" = xyes; then 708 RUBY_APPEND_OPTION(XCFLAGS, -fstack-protector) 709 RUBY_APPEND_OPTION(XLDFLAGS, -fstack-protector) 710 RUBY_APPEND_OPTION(LDFLAGS, -fstack-protector) 711 fi 712 713 AS_CASE(["$target_os"],[mingw*], [ 714 # On Windows platforms, system provided headers are VC++ 715 # optimized. That is, C++ habits are often contaminated into 716 # various headers. Most frequent situation is the use of // 717 # comments. We bypass ANSI C mode for them. Otherwise 718 # extension libs cannot include those headers. 719 ], 720 [cygwin*|darwin*|netbsd*], [ 721 # need lgamma_r(), finite() 722 ], 723 [haiku], [ 724 # Haiku R1/alpha3 uses gcc-4.4.4 which can not handle anonymous union 725 # with ANSI standard flags. Anonumous union is required to compile 726 # socket extension where <net/if.h> uses anonymous union. 727 ], 728 [ 729 # ANSI (no XCFLAGS because this is C only) 730 RUBY_TRY_CFLAGS(-ansi -std=iso9899:199409, [ 731 RUBY_APPEND_OPTION(warnflags, -ansi -std=iso9899:199409) 732 RUBY_APPEND_OPTION(strict_warnflags, -ansi -std=iso9899:199409) 733 ]) 734 ]) 735 736 # suppress annoying -Wstrict-overflow warnings 737 RUBY_TRY_CFLAGS(-fno-strict-overflow, [RUBY_APPEND_OPTION(XCFLAGS, -fno-strict-overflow)]) 738fi 739test $ac_cv_prog_cc_g = yes && : ${debugflags=-g} 740 741if test "$GCC" = ""; then 742 AS_CASE(["$target_os"],[aix*],[warnflags="$warnflags -qinfo=por" rb_cv_warnflags="$rb_cv_warnflags -qinfo=por"]) 743fi 744if test "$GCC" = yes; then 745 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ 746 @%:@if !(defined __GNUC__ && __GNUC__ >= 4) 747 @%:@error not GCC 4 or later 748 >>>not GCC 4 or later<<< 749 @%:@endif])], 750 [visibility_option=yes], [visibility_option=no]) 751 if test "$visibility_option" = yes; then 752 RUBY_TRY_CFLAGS(-fvisibility=hidden, [visibility_option=yes], [visibility_option=no]) 753 fi 754 AC_SUBST(WERRORFLAG, "-Werror") 755 if test "$visibility_option" = yes; then 756 RUBY_APPEND_OPTION(XCFLAGS, -fvisibility=hidden) 757 else 758 RUBY_TRY_LDFLAGS([-Wl,-unexported_symbol,_Init_*], [visibility_option=ld], [visibility_option=no]) 759 fi 760 test "$visibility_option" = no -o "$host_os" = nacl || OBJCOPY=: 761fi 762 763if test "$GCC" = yes; then 764 # optflags 765 766 AS_CASE(["$target_os"], [mingw*], [ 767 RUBY_TRY_CFLAGS(-fno-omit-frame-pointer, [optflags="${optflags+$optflags }-fno-omit-frame-pointer"]) 768 ]) 769 770 # disable fast-math 771 for oflag in -fno-fast-math; do 772 RUBY_TRY_CFLAGS($oflag, [RUBY_APPEND_OPTION(optflags, $oflag)]) 773 done 774fi 775 776test -z "${ac_env_CFLAGS_set}" -a -n "${cflags+set}" && eval CFLAGS="\"$cflags $ARCH_FLAG\"" 777test -z "${ac_env_CXXFLAGS_set}" -a -n "${cxxflags+set}" && eval CXXFLAGS="\"$cxxflags $ARCH_FLAG\"" 778 779} 780{ # header and library section 781 782AC_ARG_WITH(winnt-ver, 783 AS_HELP_STRING([--with-winnt-ver=0xXXXX], [target Windows NT version (default to 0x0501)]), 784 [with_winnt_ver="$withval"], [with_winnt_ver="0x0501"]) 785AS_CASE(["$target_os"], 786[mingw*], [ 787 RUBY_APPEND_OPTION(CPPFLAGS, -D_WIN32_WINNT=$with_winnt_ver) 788]) 789 790AS_CASE(["$target_os"], 791[freebsd*], [ 792 AC_CACHE_CHECK([whether pthread should be enabled by default], 793 rb_cv_enable_pthread_default, 794 [AC_TRY_CPP([ 795#include <osreldate.h> 796#if __FreeBSD_version < 502102 797#error pthread should be disabled on this platform 798#endif 799 ], 800 rb_cv_enable_pthread_default=yes, 801 rb_cv_enable_pthread_default=no)]) 802 enable_pthread=$rb_cv_enable_pthread_default 803 ], 804[mingw*], [ 805 enable_pthread=no 806 ], 807[ 808 enable_pthread=yes 809 ]) 810 811AC_ARG_ENABLE(pthread, 812 AS_HELP_STRING([--enable-pthread], [obsolete, and ignored])) 813 814dnl Checks for libraries. 815AS_CASE(["$target_os"],[*bsd*|dragonfly*],[],[ac_cv_func_daemon=no]) 816 817POSTLINK=: 818AC_SUBST(POSTLINK) 819AS_CASE(["$target_os"], 820[nextstep*], [ ], 821[openstep*], [ ], 822[rhapsody*], [ ], 823[darwin*], [ RUBY_PREPEND_OPTION(LIBS, -lobjc) 824 RUBY_APPEND_OPTIONS(CPPFLAGS, -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT) 825 AC_MSG_CHECKING(whether Mac OS X 10.5 or later) 826 AC_TRY_CPP([#include <AvailabilityMacros.h> 827 #if MAC_OS_X_VERSION_MAX_ALLOWED <= 1040 828 #error pre OS X 10.4 829 [!<===== pre OS X 10.4 =====>] 830 #endif 831 ], 832 [macosx_10_5=yes], [macosx_10_5=no]) 833 AC_MSG_RESULT($macosx_10_5) 834 if test $macosx_10_5 = yes; then 835 ac_cv_header_ucontext_h=no 836 else 837 AC_DEFINE(BROKEN_SETREUID, 1) 838 AC_DEFINE(BROKEN_SETREGID, 1) 839 fi 840 ac_cv_type_getgroups=gid_t # getgroups() on Rosetta fills garbage 841 ac_cv_lib_crypt_crypt=no 842 ac_cv_func_fdatasync=no # Mac OS X wrongly reports it has fdatasync() 843 AC_CACHE_CHECK(for broken crypt with 8bit chars, rb_cv_broken_crypt, 844 [AC_TRY_RUN([ 845#include <stdio.h> 846#include <unistd.h> 847#include <string.h> 848 849int 850main() 851{ 852 int i; 853 for (i = 0; i < 128*128; i++) { 854 char salt[2], buf[256], *s; 855 salt[0] = 0x80 | (i & 0x7f); 856 salt[1] = 0x80 | (i >> 7); 857 strcpy(buf, crypt("", salt)); 858 if (strcmp(buf, s = crypt("", salt))) { 859#if 0 860 printf("%.2x%.2x: %s -> %s\n", (unsigned char)salt[0], (unsigned char)salt[1], 861 buf+2, s+2); 862#endif 863 return 1; 864 } 865 } 866 return 0; 867} 868], 869 rb_cv_broken_crypt=no, 870 rb_cv_broken_crypt=yes, 871 rb_cv_broken_crypt=yes)]) 872 if test "$rb_cv_broken_crypt" = yes; then 873 AC_DEFINE(BROKEN_CRYPT, 1) 874 fi 875 AC_CHECK_PROGS(codesign, codesign) 876 if test -n "$codesign"; then 877 POSTLINK="test -z '\$(RUBY_CODESIGN)' || $codesign -s '\$(RUBY_CODESIGN)' -f \$@" 878 LINK_SO="$LINK_SO 879$POSTLINK" 880 fi 881 AC_CHECK_HEADERS(crt_externs.h, [], [], [ 882 #include <crt_externs.h> 883 ]) 884 ], 885[hpux*], [ LIBS="-lm $LIBS" 886 ac_cv_c_inline=no], 887[beos*|haiku*], [ 888 ac_cv_func_link=no 889 ac_cv_func_sched_yield=no 890 ac_cv_func_pthread_attr_setinheritsched=no 891 AS_CASE(["$target_os"], 892 [beos*], [ ac_cv_header_net_socket_h=yes], 893 [haiku*], [ ac_cv_func_shutdown=no]) 894 LIBS="$LIBS" # m lib is include in root under BeOS/Haiku 895 ], 896[cygwin*], [ ac_cv_header_langinfo_h=yes 897 AC_CHECK_FUNCS(cygwin_conv_path) 898 AC_LIBOBJ([langinfo]) 899 ], 900[mingw*], [ LIBS="-lshell32 -lws2_32 -limagehlp -lshlwapi $LIBS" 901 ac_cv_header_a_out_h=no 902 ac_cv_header_pwd_h=no 903 ac_cv_header_utime_h=no 904 ac_cv_header_sys_ioctl_h=no 905 ac_cv_header_sys_param_h=no 906 ac_cv_header_sys_resource_h=no 907 ac_cv_header_sys_select_h=no 908 ac_cv_header_sys_time_h=no 909 ac_cv_header_sys_times_h=no 910 ac_cv_header_sys_socket_h=no 911 ac_cv_func_times=yes 912 ac_cv_func_waitpid=yes 913 ac_cv_func_fsync=yes 914 ac_cv_func_seekdir=yes 915 ac_cv_func_telldir=yes 916 ac_cv_func_isinf=yes 917 ac_cv_func_isnan=yes 918 ac_cv_func_finite=yes 919 ac_cv_func_link=yes 920 ac_cv_func_fseeko=yes 921 ac_cv_lib_crypt_crypt=no 922 ac_cv_func_getpgrp_void=no 923 ac_cv_func_memcmp_working=yes 924 ac_cv_lib_dl_dlopen=no 925 rb_cv_binary_elf=no 926 rb_cv_negative_time_t=no 927 ac_cv_func_fcntl=yes 928 ac_cv_func_flock=yes 929 ac_cv_func_gmtime_r=yes 930 rb_cv_large_fd_select=yes 931 ac_cv_type_struct_timeval=yes 932 AC_LIBOBJ([langinfo]) 933 ], 934[os2-emx*], [ LIBS="-lm $LIBS" 935 ac_cv_lib_dir_opendir=no], 936[bsdi*], [ LIBS="-lm $LIBS" 937 AC_DEFINE(BROKEN_SETREUID, 1) 938 AC_DEFINE(BROKEN_SETREGID, 1) 939 ac_cv_sizeof_rlim_t=8], 940[freebsd*], [ LIBS="-lm $LIBS" 941 ac_cv_func_getpeername=no 942 ac_cv_func_getsockname=no 943 ac_cv_func_shutdown=no 944 ac_cv_func_close=no 945 ], 946[dragonfly*], [ LIBS="-lm $LIBS" 947 # isinf() and isnan() are macros on DragonFly. 948 ac_cv_func_isinf=yes 949 ac_cv_func_isnan=yes 950 ], 951[bow], [ ac_cv_func_setitimer=no 952 ], 953[superux*], [ ac_cv_func_setitimer=no 954 ], 955[nacl], [ 956 LIBS="-lm $LIBS" 957 if test "${nacl_cv_build_variant}" = "newlib"; then 958 RUBY_APPEND_OPTION(CPPFLAGS, -DNACL_NEWLIB) 959 RUBY_APPEND_OPTION(LIBS, '-lnosys') 960 else 961 RUBY_APPEND_OPTION(XCFLAGS, -fPIC) 962 fi 963 ac_cv_func_shutdown=no 964 ac_cv_func_fcntl=no 965 ], 966[ LIBS="-lm $LIBS"]) 967 968dnl Checks for header files. 969AC_HEADER_DIRENT 970dnl AC_HEADER_STDC has been checked in AC_USE_SYSTEM_EXTENSIONS 971AC_HEADER_STDBOOL 972AC_HEADER_SYS_WAIT 973AC_CHECK_HEADERS(limits.h sys/file.h sys/ioctl.h sys/syscall.h\ 974 fcntl.h sys/fcntl.h sys/select.h sys/time.h sys/times.h sys/param.h\ 975 syscall.h pwd.h grp.h a.out.h utime.h direct.h sys/resource.h \ 976 sys/mkdev.h sys/utime.h xti.h netinet/in_systm.h float.h ieeefp.h \ 977 ucontext.h intrinsics.h langinfo.h locale.h sys/sendfile.h time.h \ 978 net/socket.h sys/socket.h process.h sys/prctl.h atomic.h) 979 980dnl check for large file stuff 981mv confdefs.h confdefs1.h 982: > confdefs.h 983AC_SYS_LARGEFILE 984mv confdefs.h largefile.h 985mv confdefs1.h confdefs.h 986cat largefile.h >> confdefs.h 987 988AS_CASE(["$target_os"],[mingw*], [ac_cv_type_off_t=yes;ac_cv_sizeof_off_t=8]) 989 990AC_C_BIGENDIAN 991AC_C_CONST 992AC_C_CHAR_UNSIGNED 993AC_C_INLINE 994AC_C_VOLATILE 995 996AS_CASE(":$ac_cv_c_const:$ac_cv_c_volatile:", 997 [*:no:*], [AC_MSG_ERROR(ANSI C-conforming const and volatile are mandatory)]) 998 999AC_CHECK_TYPES([long long, off_t]) 1000 1001AC_CACHE_CHECK([char bit], [rb_cv_char_bit], 1002 [test "$universal_binary" = yes && cross_compiling=yes 1003 AC_COMPUTE_INT([rb_cv_char_bit], [CHAR_BIT], 1004 [AC_INCLUDES_DEFAULT([@%:@include <limits.h>])], [rb_cv_char_bit=8]) 1005 test "$universal_binary" = yes && cross_compiling=$real_cross_compiling]) 1006 1007dnl RUBY_CHECK_SIZEOF [typename], [maybe same size types], [macros], [include] 1008AC_DEFUN([RUBY_CHECK_SIZEOF], 1009[m4_bmatch([$1], [\.], [], [if test "$universal_binary" = yes; then]) 1010AC_CACHE_CHECK([size of $1], [AS_TR_SH([ac_cv_sizeof_$1])], [ 1011 unset AS_TR_SH(ac_cv_sizeof_$1) 1012 rbcv_var=" 1013typedef m4_bpatsubst([$1], [\..*]) ac__type_sizeof_; 1014static ac__type_sizeof_ *rbcv_ptr; 1015@%:@define AS_TR_CPP(SIZEOF_$1) sizeof((*rbcv_ptr)[]m4_bmatch([$1], [\.], .m4_bpatsubst([$1], [^[^.]*\.]))) 1016" 1017 m4_ifval([$2], [test -z "${AS_TR_SH(ac_cv_sizeof_$1)+set}" && { 1018 for t in $2; do 1019 AC_COMPILE_IFELSE( 1020 [AC_LANG_BOOL_COMPILE_TRY(AC_INCLUDES_DEFAULT([$4] 1021 [$rbcv_var]), 1022 [AS_TR_CPP(SIZEOF_$1) == sizeof($t)])], [ 1023 AS_TR_SH(ac_cv_sizeof_$1)=AS_TR_CPP([SIZEOF_]$t) 1024 break]) 1025 done 1026 }]) 1027 unset cond 1028 m4_ifval([$3], [test -z "${AS_TR_SH(ac_cv_sizeof_$1)+set}" && { 1029 for s in 32 64 128; do 1030 for t in $3; do 1031 cond="${cond} 1032@%:@${cond+el}if defined(__${t}${s}__) || defined(__${t}${s}) || defined(_${t}${s}) || defined(${t}${s})" 1033 hdr="AC_INCLUDES_DEFAULT([$4 1034@%:@if defined(__${t}${s}__) || defined(__${t}${s}) || defined(_${t}${s}) || defined(${t}${s}) 1035@%:@ define AS_TR_CPP(HAVE_$1) 1 1036@%:@else 1037@%:@ define AS_TR_CPP(HAVE_$1) 0 1038@%:@endif])" 1039 AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([$hdr], [!AS_TR_CPP(HAVE_$1)])], [continue]) 1040 AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([$hdr] 1041 [$rbcv_var], 1042 [AS_TR_CPP(HAVE_$1) == (AS_TR_CPP(SIZEOF_$1) == ([$[s / rb_cv_char_bit]]))])], 1043 [AS_TR_SH(ac_cv_sizeof_$1)="${AS_TR_SH(ac_cv_sizeof_$1)+${AS_TR_SH(ac_cv_sizeof_$1)-} }${t}${s}"]) 1044 done 1045 done 1046 }]) 1047 m4_ifval([$2][$3], 1048 [test "${AS_TR_SH(ac_cv_sizeof_$1)@%:@SIZEOF_}" = "${AS_TR_SH(ac_cv_sizeof_$1)}" && ]){ 1049 test "$universal_binary" = yes && cross_compiling=yes 1050 AC_COMPUTE_INT([t], AS_TR_CPP(SIZEOF_$1), [AC_INCLUDES_DEFAULT([$4])] 1051[${cond+$cond 1052@%:@else} 1053$rbcv_var 1054${cond+@%:@endif} 1055@%:@ifndef AS_TR_CPP(SIZEOF_$1) 1056@%:@define AS_TR_CPP(SIZEOF_$1) 0 1057@%:@endif], [t=0]) 1058 test "$universal_binary" = yes && cross_compiling=$real_cross_compiling 1059 if test ${t-0} != 0; then 1060 AS_TR_SH(ac_cv_sizeof_$1)="${AS_TR_SH(ac_cv_sizeof_$1)+${AS_TR_SH(ac_cv_sizeof_$1)-} }${t}" 1061 fi 1062 } 1063 : ${AS_TR_SH(ac_cv_sizeof_$1)=0} 1064]) 1065{ 1066 unset cond 1067 for t in ${AS_TR_SH(ac_cv_sizeof_$1)-}; do 1068 AS_CASE(["$t"], 1069 [[[0-9]*|SIZEOF_*]], [ 1070 ${cond+echo "@%:@else"} 1071 echo "[@%:@define ]AS_TR_CPP(SIZEOF_$1) [$t]" 1072 break 1073 ], 1074 [ 1075 s=`expr $t : ['.*[^0-9]\([0-9][0-9]*\)$']` 1076 echo "@%:@${cond+el}if defined(__${t}__) || defined(__${t}) || defined(_${t}) || defined($t)" 1077 echo "@%:@define AS_TR_CPP(SIZEOF_$1) [$[s / rb_cv_char_bit]]" 1078 cond=1 1079 ]) 1080 done 1081 ${cond+echo "@%:@endif"} 1082} >> confdefs.h 1083m4_bmatch([$1], [\.], [], [else 1084AC_CHECK_SIZEOF([$1], 0, [$4]) 1085fi]) 1086]) 1087 1088RUBY_CHECK_SIZEOF(int, [], [ILP]) 1089RUBY_CHECK_SIZEOF(short) 1090RUBY_CHECK_SIZEOF(long, [int], [ILP LP]) 1091RUBY_CHECK_SIZEOF(long long) 1092RUBY_CHECK_SIZEOF(__int64) 1093RUBY_CHECK_SIZEOF(off_t) 1094RUBY_CHECK_SIZEOF(void*, [int long "long long"], [ILP LP LLP]) 1095RUBY_CHECK_SIZEOF(float) 1096RUBY_CHECK_SIZEOF(double) 1097RUBY_CHECK_SIZEOF(time_t, [long "long long"], [], [@%:@include <time.h>]) 1098 1099AC_DEFUN([RUBY_CHECK_PRINTF_PREFIX], [ 1100AC_CACHE_CHECK([for printf prefix for $1], [rb_cv_pri_prefix_]AS_TR_SH($1),[ 1101 [rb_cv_pri_prefix_]AS_TR_SH($1)=[NONE] 1102 RUBY_WERROR_FLAG(for pri in $2; do 1103 AC_TRY_COMPILE( 1104 [@%:@include <stdio.h> 1105 @%:@include <stddef.h> 1106 @%:@ifdef __GNUC__ 1107 @%:@define PRINTF_ARGS(decl, string_index, first_to_check) \ 1108 decl __attribute__((format(printf, string_index, first_to_check))) 1109 @%:@else 1110 @%:@define PRINTF_ARGS(decl, string_index, first_to_check) decl 1111 @%:@endif 1112 PRINTF_ARGS(void test_sprintf(const char*, ...), 1, 2);], 1113 [printf("%]${pri}[d", (]$1[)42); 1114 test_sprintf("%]${pri}[d", (]$1[)42);], 1115 [rb_cv_pri_prefix_]AS_TR_SH($1)[=[$pri]; break]) 1116 done)]) 1117if test "[$rb_cv_pri_prefix_]AS_TR_SH($1)" != NONE; then 1118 AC_DEFINE_UNQUOTED([PRI_]m4_ifval($3,$3,AS_TR_CPP(m4_bpatsubst([$1],[_t$])))[_PREFIX], 1119 "[$rb_cv_pri_prefix_]AS_TR_SH($1)") 1120fi 1121]) 1122 1123if test "x$ac_cv_type_long_long" = xyes; then 1124 RUBY_CHECK_PRINTF_PREFIX(long long, ll I64, LL) 1125elif test "x$ac_cv_type___int64" = xyes; then 1126 RUBY_CHECK_PRINTF_PREFIX(__int64, ll I64, LL) 1127fi 1128 1129dnl RUBY_REPLACE_TYPE [typename] [default type] [macro type] [included] 1130AC_DEFUN([RUBY_REPLACE_TYPE], [dnl 1131 AC_CHECK_TYPE([$1], 1132 [n="patsubst([$1],["],[\\"])"], 1133 [n="patsubst([$2],["],[\\"])"], 1134 [$4]) 1135 AC_CACHE_CHECK([for convertible type of [$1]], rb_cv_[$1]_convertible, [ 1136 u= t= 1137 AS_CASE(["$n "], 1138 [*" signed "*], [ ], 1139 [*" unsigned "*], [ 1140 u=U], 1141 [ 1142 AC_COMPILE_IFELSE( 1143 [AC_LANG_BOOL_COMPILE_TRY([AC_INCLUDES_DEFAULT([$4])], [($n)-1 > 0])], 1144 [u=U])]) 1145 if test x"$t" = x; then 1146 for t in "long long" long int short; do 1147 test -n "$u" && t="unsigned $t" 1148 AC_COMPILE_IFELSE( 1149 [AC_LANG_BOOL_COMPILE_TRY([AC_INCLUDES_DEFAULT([$4])] 1150 [typedef $n rbcv_conftest_target_type; 1151 typedef $t rbcv_conftest_replace_type; 1152 extern rbcv_conftest_target_type rbcv_conftest_var; 1153 extern rbcv_conftest_replace_type rbcv_conftest_var; 1154 extern rbcv_conftest_target_type rbcv_conftest_func(void); 1155 extern rbcv_conftest_replace_type rbcv_conftest_func(void); 1156 ], [sizeof(rbcv_conftest_target_type) == sizeof(rbcv_conftest_replace_type)])], 1157 [n="$t"; break]) 1158 done 1159 fi 1160 AS_CASE([" $n "], 1161 [*" long long "*], [ 1162 t=LL], 1163 [*" long "*], [ 1164 t=LONG], 1165 [ 1166 t=INT]) 1167 rb_cv_[$1]_convertible=${u}${t}]) 1168 test "${AS_TR_SH(ac_cv_type_[$1])}" = "yes" && n="$1" 1169 AC_DEFINE_UNQUOTED(rb_[$1], $n) 1170 AC_DEFINE_UNQUOTED([$3]2NUM[(v)], [${rb_cv_[$1]_convertible}2NUM(v)]) 1171 AC_DEFINE_UNQUOTED(NUM2[$3][(v)], [NUM2${rb_cv_[$1]_convertible}(v)]) 1172 AC_DEFINE_UNQUOTED(PRI_[$3]_PREFIX, 1173 [PRI_`echo ${rb_cv_[$1]_convertible} | sed ['s/^U//']`_PREFIX]) 1174]) 1175RUBY_REPLACE_TYPE(pid_t, int, PIDT) 1176RUBY_REPLACE_TYPE(uid_t, int, UIDT) 1177RUBY_REPLACE_TYPE(gid_t, int, GIDT) 1178RUBY_REPLACE_TYPE(time_t, [], TIMET, [@%:@include <time.h>]) 1179RUBY_REPLACE_TYPE(dev_t, [int long "long long"], DEVT) 1180RUBY_REPLACE_TYPE(mode_t, ["unsigned int" long], MODET, [@%:@include <sys/stat.h>]) 1181RUBY_REPLACE_TYPE(rlim_t, [int long "long long"], RLIM, [ 1182@%:@ifdef HAVE_SYS_TYPES_H 1183@%:@include <sys/types.h> 1184@%:@endif 1185@%:@ifdef HAVE_SYS_TYPES_H 1186@%:@include <sys/time.h> 1187@%:@endif 1188@%:@include <sys/resource.h> 1189]) 1190 1191AC_CACHE_CHECK(for prototypes, rb_cv_have_prototypes, 1192 [AC_TRY_COMPILE([int foo(int x) { return 0; }], [return foo(10);], 1193 rb_cv_have_prototypes=yes, 1194 rb_cv_have_prototypes=no)]) 1195if test "$rb_cv_have_prototypes" = yes; then 1196 AC_DEFINE(HAVE_PROTOTYPES) 1197fi 1198 1199AC_CACHE_CHECK(token paste string, rb_cv_tokenpaste, 1200 [AC_TRY_COMPILE([@%:@define paste(a,b) a@%:@@%:@b], 1201 [int xy = 1; return paste(x,y);], 1202 rb_cv_tokenpaste=ansi, 1203 rb_cv_tokenpaste=knr)]) 1204if test "$rb_cv_tokenpaste" = ansi; then 1205 AC_DEFINE(TOKEN_PASTE(x,y),[x@%:@@%:@y]) 1206else 1207 AC_DEFINE(TOKEN_PASTE(x,y),[x/**/y]) 1208fi 1209 1210AC_CACHE_CHECK(stringization, rb_cv_stringization, [ 1211 rb_cv_stringization=no 1212 for string in "#expr" '"expr"'; do 1213 AC_COMPILE_IFELSE([ 1214 AC_LANG_BOOL_COMPILE_TRY([ 1215#define STRINGIZE0(expr) $string 1216#define STRINGIZE(expr) STRINGIZE0(expr) 1217#undef real_test_for_stringization 1218#define test_for_stringization -.real_test_for_stringization.- 1219const char stringized[[]] = STRINGIZE(test_for_stringization); 1220], [sizeof(stringized) == 32])], 1221 [rb_cv_stringization="$string"; break], 1222 [rb_cv_stringization=no]) 1223 done] 1224) 1225AC_DEFINE(STRINGIZE(expr),STRINGIZE0(expr)) 1226if test x"$rb_cv_stringization" != xno -a "$rb_cv_stringization" != "#expr"; then 1227 AC_DEFINE_UNQUOTED(STRINGIZE0(expr),$rb_cv_stringization) 1228 AC_DEFINE(OLD_FASHIONED_STRINGIZATION,1) 1229fi 1230 1231AC_CACHE_CHECK([string literal concatenation], 1232 rb_cv_string_literal_concatenation, [ 1233 AC_COMPILE_IFELSE([ 1234 AC_LANG_BOOL_COMPILE_TRY([ 1235const char concatenated_literal[[]] = "literals" "to" 1236 "be" "concatenated."; 1237], [sizeof(concatenated_literal) == 26])], 1238 [rb_cv_string_literal_concatenation=yes], 1239 [rb_cv_string_literal_concatenation=no])] 1240) 1241if test "$rb_cv_string_literal_concatenation" = no; then 1242 AC_DEFINE(NO_STRING_LITERAL_CONCATENATION,1) 1243fi 1244 1245AC_CACHE_CHECK(for variable length prototypes and stdarg.h, rb_cv_stdarg, 1246 [AC_TRY_COMPILE([ 1247#include <stdarg.h> 1248int foo(int x, ...) { 1249 va_list va; 1250 va_start(va, x); 1251 va_arg(va, int); 1252 va_arg(va, char *); 1253 va_arg(va, double); 1254 return 0; 1255} 1256], [return foo(10, "", 3.14);], 1257 rb_cv_stdarg=yes, 1258 rb_cv_stdarg=no)]) 1259if test "$rb_cv_stdarg" = yes; then 1260 AC_DEFINE(HAVE_STDARG_PROTOTYPES) 1261fi 1262 1263AC_CACHE_CHECK(for variable length macro, rb_cv_va_args_macro, 1264 [AC_TRY_COMPILE([ 1265int foo(int x, ...); 1266@%:@define FOO(a, ...) foo(a, @%:@@%:@__VA_ARGS__) 1267], [FOO(1);FOO(1,2);FOO(1,2,3);], 1268 rb_cv_va_args_macro=yes, 1269 rb_cv_va_args_macro=no)]) 1270if test "$rb_cv_va_args_macro" = yes; then 1271 AC_DEFINE(HAVE_VA_ARGS_MACRO) 1272fi 1273 1274AC_DEFUN([RUBY_DEFINE_IF], [dnl 1275 m4_ifval([$1], [AS_LITERAL_IF([$1], [], [test "X$1" = X || ])cat <<EOH >> confdefs.h 1276@%:@if $1 1277EOH 1278])dnl 1279AC_DEFINE_UNQUOTED($2, $3)dnl 1280 m4_ifval([$1], [AS_LITERAL_IF([$1], [], [test "X$1" = X || ])cat <<EOH >> confdefs.h 1281@%:@endif /* $1 */ 1282EOH 1283])dnl 1284])dnl 1285 1286dnl RUBY_FUNC_ATTRIBUTE(attrib, macroname, cachevar, condition) 1287AC_DEFUN([RUBY_FUNC_ATTRIBUTE], [dnl 1288m4_ifval([$2], dnl 1289 [AS_VAR_PUSHDEF([attrib],[$2])], dnl 1290 [AS_VAR_PUSHDEF([attrib],[FUNC_]AS_TR_CPP($1))] dnl 1291)dnl 1292m4_ifval([$3], dnl 1293 [AS_VAR_PUSHDEF([rbcv],[$3])], dnl 1294 [AS_VAR_PUSHDEF([rbcv],[rb_cv_func_][$1])]dnl 1295)dnl 1296m4_ifval([$4], [rbcv_cond=["$4"]; test "$rbcv_cond" || unset rbcv_cond]) 1297AC_CACHE_CHECK(for [$1] function attribute, rbcv, 1298[rbcv=x 1299RUBY_WERROR_FLAG([ 1300for mac in "__attribute__ (($1)) x" "x __attribute__ (($1))" "__declspec($1) x" x; do 1301 m4_ifval([$4],mac="$mac"${rbcv_cond+" /* only if $rbcv_cond */"}) 1302 AC_TRY_COMPILE( 1303 m4_ifval([$4],${rbcv_cond+[@%:@if ]$rbcv_cond}) 1304[@%:@define ]attrib[(x) $mac] 1305m4_ifval([$4],${rbcv_cond+[@%:@else]} 1306${rbcv_cond+[@%:@define ]attrib[(x) x]} 1307${rbcv_cond+[@%:@endif]}) 1308 attrib[(void conftest_attribute_check(void));], [], 1309 [rbcv="$mac"; break]) 1310done 1311])]) 1312if test "$rbcv" != x; then 1313 RUBY_DEFINE_IF(m4_ifval([$4],[${rbcv_cond}]), attrib[(x)], $rbcv) 1314fi 1315m4_ifval([$4], [unset rbcv_cond])dnl 1316AS_VAR_POPDEF([attrib])dnl 1317AS_VAR_POPDEF([rbcv])dnl 1318]) 1319 1320RUBY_FUNC_ATTRIBUTE(noreturn, NORETURN) 1321RUBY_FUNC_ATTRIBUTE(deprecated, DEPRECATED) 1322RUBY_FUNC_ATTRIBUTE(noinline, NOINLINE) 1323 1324if_i386=${universal_binary+[defined __i386__]} 1325RUBY_FUNC_ATTRIBUTE(stdcall, [], [], ${if_i386}) 1326RUBY_FUNC_ATTRIBUTE(cdecl, [], [], ${if_i386}) 1327RUBY_FUNC_ATTRIBUTE(fastcall, [], [], ${if_i386}) 1328 1329if test "$GCC" = yes; then 1330 AC_CACHE_CHECK([for function alias], [rb_cv_gcc_function_alias], 1331 [rb_cv_gcc_function_alias=no 1332 for a in alias weak,alias; do 1333 AC_TRY_LINK([void foo(void) {} 1334 void bar(void) __attribute__(($a("foo")));], [bar()], 1335 [rb_cv_gcc_function_alias=$a; break]) 1336 done]) 1337 if test "$rb_cv_gcc_function_alias" != no; then 1338 AC_DEFINE_UNQUOTED([RUBY_ALIAS_FUNCTION_TYPE(type, prot, name, args)], 1339 [type prot __attribute__(($rb_cv_gcc_function_alias(@%:@name)));]) 1340 AC_DEFINE_UNQUOTED([RUBY_ALIAS_FUNCTION_VOID(prot, name, args)], 1341 [RUBY_ALIAS_FUNCTION_TYPE(void, prot, name, args)]) 1342 fi 1343 1344 AC_CACHE_CHECK([for __atomic builtins], [rb_cv_gcc_atomic_builtins], [ 1345 AC_TRY_LINK([unsigned char atomic_var;], 1346 [ 1347 __atomic_exchange_n(&atomic_var, 0, __ATOMIC_SEQ_CST); 1348 __atomic_exchange_n(&atomic_var, 1, __ATOMIC_SEQ_CST); 1349 __atomic_fetch_add(&atomic_var, 1, __ATOMIC_SEQ_CST); 1350 __atomic_fetch_sub(&atomic_var, 1, __ATOMIC_SEQ_CST); 1351 ], 1352 [rb_cv_gcc_atomic_builtins=yes], 1353 [rb_cv_gcc_atomic_builtins=no])]) 1354 if test "$rb_cv_gcc_atomic_builtins" = yes; then 1355 AC_DEFINE(HAVE_GCC_ATOMIC_BUILTINS) 1356 fi 1357 1358 AC_CACHE_CHECK([for __sync builtins], [rb_cv_gcc_sync_builtins], [ 1359 AC_TRY_LINK([unsigned char atomic_var;], 1360 [ 1361 __sync_lock_test_and_set(&atomic_var, 0); 1362 __sync_lock_test_and_set(&atomic_var, 1); 1363 __sync_fetch_and_add(&atomic_var, 1); 1364 __sync_fetch_and_sub(&atomic_var, 1); 1365 ], 1366 [rb_cv_gcc_sync_builtins=yes], 1367 [rb_cv_gcc_sync_builtins=no])]) 1368 if test "$rb_cv_gcc_sync_builtins" = yes; then 1369 AC_DEFINE(HAVE_GCC_SYNC_BUILTINS) 1370 fi 1371 1372 AC_CACHE_CHECK(for __builtin_unreachable, rb_cv_func___builtin_unreachable, 1373 [RUBY_WERROR_FLAG( 1374 [AC_TRY_LINK([@%:@include <stdlib.h>], 1375 [exit(0); __builtin_unreachable();], 1376 [rb_cv_func___builtin_unreachable=yes], 1377 [rb_cv_func___builtin_unreachable=no]) 1378 ]) 1379 ]) 1380 if test "$rb_cv_func___builtin_unreachable" = yes; then 1381 AC_DEFINE_UNQUOTED(UNREACHABLE, [__builtin_unreachable()]) 1382 fi 1383fi 1384 1385AC_CACHE_CHECK(for exported function attribute, rb_cv_func_exported, [ 1386rb_cv_func_exported=no 1387RUBY_WERROR_FLAG([ 1388for mac in '__attribute__ ((visibility("default")))' '__declspec(dllexport)'; do 1389 AC_TRY_COMPILE([@%:@define RUBY_FUNC_EXPORTED $mac extern 1390 RUBY_FUNC_EXPORTED void conftest_attribute_check(void);], [], 1391 [rb_cv_func_exported="$mac"; break]) 1392done 1393])]) 1394if test "$rb_cv_func_exported" != no; then 1395 AC_DEFINE_UNQUOTED(RUBY_FUNC_EXPORTED, [$rb_cv_func_exported extern]) 1396fi 1397 1398RUBY_APPEND_OPTION(XCFLAGS, -DRUBY_EXPORT) 1399 1400dnl Check whether we need to define sys_nerr locally 1401AC_CHECK_DECLS([sys_nerr], [], [], [$ac_includes_default 1402@%:@include <errno.h>]) 1403 1404AC_CHECK_LIB(crypt, crypt) 1405AC_CHECK_LIB(dl, dlopen) # Dynamic linking for SunOS/Solaris and SYSV 1406AC_CHECK_LIB(dld, shl_load) # Dynamic linking for HP-UX 1407AC_CHECK_LIB(socket, socketpair) # SunOS/Solaris 1408AC_CHECK_LIB(rt, clock_gettime) # GNU/Linux 1409 1410AS_CASE(["$target_cpu"], 1411[alpha*|sh4|sh4el|sh4eb], [AS_CASE(["$target_os"::"$GCC"], 1412 [*::yes], # gcc 1413 [CFLAGS="-mieee $CFLAGS"], 1414 [osf*], # ccc 1415 [CFLAGS="-ieee $CFLAGS"], 1416 )], 1417[sparc*], [AC_LIBOBJ([sparc])]) 1418 1419ac_cv_header_net_socket_h=${ac_cv_header_net_socket_h=no} 1420if test "$ac_cv_header_net_socket_h" = yes; then 1421 ac_cv_header_sys_socket_h=${ac_cv_header_sys_socket_h=no} 1422else 1423 ac_cv_header_sys_socket_h=${ac_cv_header_sys_socket_h=yes} 1424fi 1425 1426 1427AC_TYPE_SIZE_T 1428RUBY_CHECK_SIZEOF(size_t, [int long void*], [], [@%:@include <sys/types.h>]) 1429RUBY_CHECK_SIZEOF(ptrdiff_t, size_t, [], [@%:@include <stddef.h>]) 1430RUBY_CHECK_PRINTF_PREFIX(size_t, z) 1431RUBY_CHECK_PRINTF_PREFIX(ptrdiff_t, t) 1432AC_STRUCT_ST_BLKSIZE 1433AC_STRUCT_ST_BLOCKS 1434AC_STRUCT_ST_RDEV 1435RUBY_CHECK_SIZEOF([struct stat.st_size], [int long "long long"], [], [@%:@include <sys/stat.h>]) 1436if test "$ac_cv_member_struct_stat_st_blocks" = yes; then 1437 RUBY_CHECK_SIZEOF([struct stat.st_blocks], [int long "long long"], [], [@%:@include <sys/stat.h>]) 1438fi 1439AC_CHECK_MEMBERS([struct stat.st_atim]) 1440AC_CHECK_MEMBERS([struct stat.st_atimespec]) 1441AC_CHECK_MEMBERS([struct stat.st_atimensec]) 1442AC_CHECK_MEMBERS([struct stat.st_mtim]) 1443AC_CHECK_MEMBERS([struct stat.st_mtimespec]) 1444AC_CHECK_MEMBERS([struct stat.st_mtimensec]) 1445AC_CHECK_MEMBERS([struct stat.st_ctim]) 1446AC_CHECK_MEMBERS([struct stat.st_ctimespec]) 1447AC_CHECK_MEMBERS([struct stat.st_ctimensec]) 1448 1449AC_CHECK_TYPES([struct timeval], [], [], [@%:@ifdef HAVE_TIME_H 1450@%:@include <time.h> 1451@%:@endif 1452@%:@ifdef HAVE_SYS_TIME_H 1453@%:@include <sys/time.h> 1454@%:@endif]) 1455 1456AC_CHECK_TYPES([struct timespec], [], [], [@%:@ifdef HAVE_TIME_H 1457@%:@include <time.h> 1458@%:@endif 1459@%:@ifdef HAVE_SYS_TIME_H 1460@%:@include <sys/time.h> 1461@%:@endif]) 1462 1463AC_CHECK_TYPES([struct timezone], [], [], [@%:@ifdef HAVE_TIME_H 1464@%:@ include <time.h> 1465@%:@endif 1466@%:@ifdef HAVE_SYS_TIME_H 1467@%:@ include <sys/time.h> 1468@%:@endif]) 1469 1470AC_CHECK_TYPES([clockid_t], [], [], [@%:@ifdef HAVE_TIME_H 1471@%:@ include <time.h> 1472@%:@endif 1473@%:@ifdef HAVE_SYS_TIME_H 1474@%:@ include <sys/time.h> 1475@%:@endif]) 1476 1477AC_CACHE_VAL([rb_cv_large_fd_select], 1478 [AC_CHECK_TYPE(fd_mask, [rb_cv_large_fd_select=yes], [rb_cv_large_fd_select=no])]) 1479if test "$rb_cv_large_fd_select" = yes; then 1480 AC_DEFINE(HAVE_RB_FD_INIT, 1) 1481fi 1482 1483dnl RUBY_DEFINT TYPENAME, SIZE, [SIGNED-OR-UNSIGNED], [INCLUDES = DEFAULT-INCLUDES] 1484AC_DEFUN([RUBY_DEFINT], [dnl 1485AC_CACHE_CHECK([for $1], [rb_cv_type_$1], 1486[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT([$4]) 1487typedef $1 t; int s = sizeof(t) == 42;])], 1488 [rb_cv_type_$1=yes], 1489 [AS_CASE([m4_bmatch([$2], [^[1-9][0-9]*$], $2, [$ac_cv_sizeof_]AS_TR_SH($2))], 1490 ["1"], [ rb_cv_type_$1="m4_if([$3], [], [signed ], [$3 ])char"], 1491 ["$ac_cv_sizeof_short"], [ rb_cv_type_$1="m4_if([$3], [], [], [$3 ])short"], 1492 ["$ac_cv_sizeof_int"], [ rb_cv_type_$1="m4_if([$3], [], [], [$3 ])int"], 1493 ["$ac_cv_sizeof_long"], [ rb_cv_type_$1="m4_if([$3], [], [], [$3 ])long"], 1494 ["$ac_cv_sizeof_long_long"], [ rb_cv_type_$1="m4_if([$3], [], [], [$3 ])long long"], 1495 ["$ac_cv_sizeof___int64"], [ rb_cv_type_$1="m4_if([$3], [], [], [$3 ])__int64"], 1496 [ rb_cv_type_$1=no])])]) 1497if test "${rb_cv_type_$1}" != no; then 1498 AC_DEFINE([HAVE_]AS_TR_CPP($1), 1) 1499 if test "${rb_cv_type_$1}" = yes; then 1500 m4_bmatch([$2], [^[1-9][0-9]*$], [AC_CHECK_SIZEOF([$1], 0, [AC_INCLUDES_DEFAULT([$4])])], 1501 [RUBY_CHECK_SIZEOF([$1], [$2], [], [AC_INCLUDES_DEFAULT([$4])])]) 1502 else 1503 AC_DEFINE_UNQUOTED($1, [$rb_cv_type_$1]) 1504 AC_DEFINE_UNQUOTED([SIZEOF_]AS_TR_CPP($1), [SIZEOF_]AS_TR_CPP([$rb_cv_type_$1])) 1505 fi 1506fi 1507]) 1508 1509RUBY_DEFINT(int8_t, 1) 1510RUBY_DEFINT(uint8_t, 1, unsigned) 1511RUBY_DEFINT(int16_t, 2) 1512RUBY_DEFINT(uint16_t, 2, unsigned) 1513RUBY_DEFINT(int32_t, 4) 1514RUBY_DEFINT(uint32_t, 4, unsigned) 1515RUBY_DEFINT(int64_t, 8) 1516RUBY_DEFINT(uint64_t, 8, unsigned) 1517RUBY_DEFINT(int128_t, 16) 1518RUBY_DEFINT(uint128_t, 16, unsigned) 1519RUBY_DEFINT(intptr_t, void*) 1520RUBY_DEFINT(uintptr_t, void*, unsigned) 1521RUBY_DEFINT(ssize_t, size_t, [], [@%:@include <sys/types.h>]) dnl may differ from int, so not use AC_TYPE_SSIZE_T. 1522 1523RUBY_NACL_CHECK_PEPPER_TYPES 1524 1525AC_CACHE_CHECK(for stack end address, rb_cv_stack_end_address, 1526[rb_cv_stack_end_address=no 1527 AC_TRY_LINK( 1528 [extern void *__libc_stack_end;], 1529 [if (!__libc_stack_end) return 1;], 1530 [rb_cv_stack_end_address="__libc_stack_end"]) 1531]) 1532if test $rb_cv_stack_end_address != no; then 1533 AC_DEFINE_UNQUOTED(STACK_END_ADDRESS, $rb_cv_stack_end_address) 1534fi 1535 1536AS_CASE(["$target_os"], 1537[openbsd*], [ 1538 AC_CACHE_CHECK(for heap align log on openbsd, rb_cv_page_size_log, 1539 [rb_cv_page_size_log=no 1540 for page_log in 12 13; do 1541 AC_TRY_RUN([ 1542#include <math.h> 1543#include <unistd.h> 1544 1545int 1546main() { 1547 if ((int)log2((double)sysconf(_SC_PAGESIZE)) != $page_log) return 1; 1548 return 0; 1549} 1550 ], 1551 rb_cv_page_size_log="$page_log"; break) 1552 done]) 1553 if test $rb_cv_page_size_log != no; then 1554 AC_DEFINE_UNQUOTED(HEAP_ALIGN_LOG, $rb_cv_page_size_log) 1555 else 1556 AC_DEFINE_UNQUOTED(HEAP_ALIGN_LOG, 12) 1557 fi 1558]) 1559 1560dnl Checks for library functions. 1561AC_TYPE_GETGROUPS 1562AC_TYPE_SIGNAL 1563AS_CASE(["${target_cpu}-${target_os}:${target_archs}"], 1564[powerpc-darwin*], [ 1565 AC_LIBSOURCES(alloca.c) 1566 AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.${ac_objext}]) 1567 AC_DEFINE(C_ALLOCA) 1568 AC_DEFINE_UNQUOTED(alloca, alloca) 1569 ], 1570[universal-darwin*:*ppc*], [ 1571 AC_LIBSOURCES(alloca.c) 1572 AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.${ac_objext}]) 1573 RUBY_DEFINE_IF([defined __powerpc__], C_ALLOCA, 1) 1574 RUBY_DEFINE_IF([defined __powerpc__], alloca, alloca) 1575 ], 1576[ 1577 AC_FUNC_ALLOCA 1578 ]) 1579if test "x$ALLOCA" = "x"; then 1580 AC_CACHE_CHECK([for dynamic size alloca], rb_cv_dynamic_alloca, [ 1581 for chk in ok __chkstk; do 1582 AC_TRY_LINK([ 1583 @%:@ifdef HAVE_ALLOCA_H 1584 @%:@include <alloca.h> 1585 @%:@endif 1586 void $chk() {} 1587 int dynamic_alloca_test; 1588 int dynamic_alloca_result;], 1589 [dynamic_alloca_result = alloca(dynamic_alloca_test) != 0;], 1590 [rb_cv_dynamic_alloca=$chk; break]) 1591 done]) 1592 if test "x$rb_cv_dynamic_alloca" = "x__chkstk"; then 1593 AC_DEFINE_UNQUOTED(RUBY_ALLOCA_CHKSTK, _$rb_cv_dynamic_alloca) 1594 AS_CASE("$target_cpu", 1595 [x64|x86_64], [ 1596 AC_SUBST([ALLOCA], [\${LIBOBJDIR}x86_64-chkstk.${ac_objext}]) 1597 ],) 1598 fi 1599fi 1600AC_FUNC_MEMCMP 1601 1602# http://sources.redhat.com/ml/libc-hacker/2005-08/msg00008.html 1603# Debian GNU/Linux Etch's libc6.1 2.3.6.ds1-13etch5 has this problem. 1604# Debian GNU/Linux Lenny's libc6.1 2.7-10 has no problem. 1605AC_CACHE_CHECK(for broken erfc of glibc-2.3.6 on IA64, rb_cv_broken_glibc_ia64_erfc, 1606 [AC_TRY_RUN([ 1607#include <math.h> 1608int 1609main() 1610{ 1611 erfc(10000.0); 1612 return 0; 1613} 1614], 1615 rb_cv_broken_glibc_ia64_erfc=no, 1616 rb_cv_broken_glibc_ia64_erfc=yes, 1617 rb_cv_broken_glibc_ia64_erfc=no)]) 1618AS_CASE([$rb_cv_broken_glibc_ia64_erfc],[yes],[ac_cv_func_erf=no]) 1619 1620AS_CASE(["$target_os"],[freebsd*],[ 1621 AC_DEFINE(BROKEN_CLOSE) 1622 AC_REPLACE_FUNCS(close) 1623 ]) 1624AC_REPLACE_FUNCS(dup2 memmove strerror\ 1625 strchr strstr crypt flock\ 1626 isnan finite isinf hypot acosh erf tgamma lgamma_r cbrt \ 1627 strlcpy strlcat ffs setproctitle) 1628 1629# for missing/setproctitle.c 1630AS_CASE(["$target_os"], 1631[aix* | k*bsd*-gnu | kopensolaris*-gnu | linux* | darwin*], [AC_DEFINE(SPT_TYPE,SPT_REUSEARGV)], 1632[hpux*], [AC_DEFINE(SPT_TYPE,SPT_PSTAT) ], 1633[]) 1634AC_CHECK_HEADERS(sys/pstat.h) 1635 1636 1637AC_CACHE_CHECK(for signbit, rb_cv_have_signbit, 1638 [AC_TRY_LINK([ 1639#include <math.h> 1640], [int v = signbit(-0.0);], 1641 rb_cv_have_signbit=yes, 1642 rb_cv_have_signbit=no)]) 1643if test "$rb_cv_have_signbit" = yes; then 1644 AC_DEFINE(HAVE_SIGNBIT) 1645else 1646 AC_LIBOBJ([signbit]) 1647fi 1648AC_CHECK_FUNCS(fmod killpg wait4 waitpid fork spawnv syscall __syscall chroot getcwd eaccess\ 1649 truncate ftruncate ftello chsize times utimes utimensat fcntl lockf lstat\ 1650 truncate64 ftruncate64 ftello64 fseeko fseeko64 \ 1651 link symlink readlink readdir_r fsync fdatasync fchown posix_fadvise\ 1652 setitimer setruid seteuid setreuid setresuid socketpair\ 1653 setrgid setegid setregid setresgid issetugid pause lchown lchmod\ 1654 getpgrp setpgrp getpgid setpgid initgroups getgroups setgroups\ 1655 getpriority getrlimit setrlimit sysconf close getpwnam_r getgrnam_r\ 1656 dlopen sigprocmask sigaction sigsetjmp _setjmp _longjmp\ 1657 getsid setsid telldir seekdir fchmod cosh sinh tanh log2 round llabs\ 1658 setuid setgid daemon select_large_fdset setenv unsetenv\ 1659 mktime timegm gmtime_r clock_gettime gettimeofday poll ppoll\ 1660 pread sendfile shutdown sigaltstack dl_iterate_phdr\ 1661 dup dup3 pipe2 posix_memalign memalign ioctl) 1662 1663AC_CACHE_CHECK(for unsetenv returns a value, rb_cv_unsetenv_return_value, 1664 [AC_TRY_COMPILE([ 1665#include <stdlib.h> 1666], [int v = unsetenv("foo");], 1667 rb_cv_unsetenv_return_value=yes, 1668 rb_cv_unsetenv_return_value=no)]) 1669if test "$rb_cv_unsetenv_return_value" = no; then 1670 AC_DEFINE(VOID_UNSETENV) 1671fi 1672 1673AC_CACHE_CHECK(for __builtin_setjmp, ac_cv_func___builtin_setjmp, 1674[AC_TRY_LINK([@%:@include <setjmp.h> 1675 jmp_buf jb; void t(v) int v; {__builtin_longjmp(jb, v);}], 1676 [__builtin_setjmp(jb);], 1677 [ac_cv_func___builtin_setjmp=yes], 1678 [ac_cv_func___builtin_setjmp=no]) 1679]) 1680 1681test x$ac_cv_func__longjmp = xno && ac_cv_func__setjmp=no 1682 1683AC_MSG_CHECKING(for setjmp type) 1684AC_ARG_WITH(setjmp-type, 1685 AS_HELP_STRING([--with-setjmp-type], [select setjmp type]), 1686 [ 1687 AS_CASE([$withval], 1688 [__builtin_setjmp], [ setjmp_prefix=__builtin_], 1689 [_setjmp], [ setjmp_prefix=_], 1690 [sigsetjmp], [ setjmp_prefix=sig], 1691 [setjmp], [ setjmp_prefix=], 1692 [''], [ unset setjmp_prefix], 1693 [ AC_MSG_ERROR(invalid setjmp type: $withval)])], [unset setjmp_prefix]) 1694if test ${setjmp_prefix+set}; then 1695 if test "${setjmp_prefix}" && eval test '$ac_cv_func_'${setjmp_prefix}setjmp = no; then 1696 AC_MSG_ERROR(${setjmp_prefix}setjmp is not available) 1697 fi 1698elif test "$ac_cv_func___builtin_setjmp" = yes; then 1699 setjmp_prefix=__builtin_ 1700elif test "$ac_cv_func__setjmp" = yes; then 1701 setjmp_prefix=_ 1702elif test "$ac_cv_func_sigsetjmp" = yes; then 1703 AS_CASE([$target_os],[solaris*|cygwin*],[setjmp_prefix=],[setjmp_prefix=sig]) 1704else 1705 setjmp_prefix= 1706fi 1707if test x$setjmp_prefix = xsig; then 1708 setjmp_sigmask=yes 1709else 1710 unset setjmp_sigmask 1711fi 1712AC_MSG_RESULT(${setjmp_prefix}setjmp) 1713AC_DEFINE_UNQUOTED([RUBY_SETJMP(env)], [${setjmp_prefix}setjmp(env${setjmp_sigmask+,0})]) 1714AC_DEFINE_UNQUOTED([RUBY_LONGJMP(env,val)], [${setjmp_prefix}longjmp(env,val)]) 1715AC_DEFINE_UNQUOTED(RUBY_JMP_BUF, ${setjmp_sigmask+${setjmp_prefix}}jmp_buf) 1716 1717AC_ARG_ENABLE(setreuid, 1718 AS_HELP_STRING([--enable-setreuid], [use setreuid()/setregid() according to need even if obsolete]), 1719 [use_setreuid=$enableval]) 1720if test "$use_setreuid" = yes; then 1721 AC_DEFINE(USE_SETREUID) 1722 AC_DEFINE(USE_SETREGID) 1723fi 1724AC_STRUCT_TIMEZONE 1725AC_CACHE_CHECK(for struct tm.tm_gmtoff, rb_cv_member_struct_tm_tm_gmtoff, 1726 [AC_TRY_COMPILE([@%:@include <time.h>], 1727 [struct tm t; t.tm_gmtoff = 3600;], 1728 [rb_cv_member_struct_tm_tm_gmtoff=yes], 1729 [rb_cv_member_struct_tm_tm_gmtoff=no])]) 1730if test "$rb_cv_member_struct_tm_tm_gmtoff" = yes; then 1731 AC_DEFINE(HAVE_STRUCT_TM_TM_GMTOFF) 1732fi 1733AC_CACHE_CHECK(for external int daylight, rb_cv_have_daylight, 1734 [AC_TRY_LINK([#include <time.h> 1735 int i;], 1736 [i = daylight;], 1737 rb_cv_have_daylight=yes, 1738 rb_cv_have_daylight=no)]) 1739if test "$rb_cv_have_daylight" = yes; then 1740 AC_DEFINE(HAVE_DAYLIGHT) 1741fi 1742AC_DEFUN([RUBY_CHECK_VARTYPE], [dnl 1743AC_CACHE_CHECK([for external $1], AS_TR_SH(rb_cv_var_$1), 1744 [AS_TR_SH(rb_cv_var_$1)=no 1745 AC_TRY_COMPILE([ 1746#ifndef _XOPEN_SOURCE 1747#define _XOPEN_SOURCE 1 1748#endif 1749$2 1750; 1751const volatile void *volatile t;], 1752 [t = &(&$1)[0];], 1753 [for t in $3; do 1754 AC_TRY_COMPILE([ 1755#ifndef _XOPEN_SOURCE 1756#define _XOPEN_SOURCE 1 1757#endif 1758$2 1759; 1760extern $t $1; 1761const volatile void *volatile t;], 1762 [t = &(&$1)[0];], 1763 [AS_TR_SH(rb_cv_var_$1)=$t; break]) 1764 done])]) 1765if test "${AS_TR_SH(rb_cv_var_$1)}" != no; then 1766 AC_DEFINE(AS_TR_CPP(HAVE_VAR_$1)) 1767 AC_DEFINE_UNQUOTED(AS_TR_CPP(TYPEOF_VAR_$1), ${AS_TR_SH(rb_cv_var_$1)}) 1768fi]) 1769RUBY_CHECK_VARTYPE(timezone, [@%:@include <time.h>], [long int]) 1770RUBY_CHECK_VARTYPE(altzone, [@%:@include <time.h>], [long int]) 1771AC_CHECK_FUNCS(timezone) 1772if test "$ac_cv_func_timezone" = yes; then 1773 AC_CACHE_CHECK([whether timezone requires zero arguments], rb_cv_func_timezone_void, 1774 [AC_TRY_COMPILE([@%:@include <time.h>], 1775 [(void)timezone(0, 0);], 1776 [rb_cv_func_timezone_void=no], 1777 [rb_cv_func_timezone_void=yes])] 1778 ) 1779 if test $rb_cv_func_timezone_void = yes; then 1780 AC_DEFINE(TIMEZONE_VOID) 1781 fi 1782fi 1783 1784AC_CACHE_CHECK(for negative time_t for gmtime(3), rb_cv_negative_time_t, 1785 [AC_TRY_RUN([ 1786#include <stdlib.h> 1787#include <time.h> 1788 1789void 1790check(tm, y, m, d, h, s) 1791 struct tm *tm; 1792 int y, m, d, h, s; 1793{ 1794 if (!tm || 1795 tm->tm_year != y || 1796 tm->tm_mon != m-1 || 1797 tm->tm_mday != d || 1798 tm->tm_hour != h || 1799 tm->tm_sec != s) { 1800 exit(1); 1801 } 1802} 1803 1804int 1805main() 1806{ 1807 time_t t = -1; 1808 struct tm *tm; 1809 1810 check(gmtime(&t), 69, 12, 31, 23, 59); 1811 t = ~(time_t)0 << 31; 1812 check(gmtime(&t), 1, 12, 13, 20, 52); 1813 return 0; 1814} 1815], 1816 rb_cv_negative_time_t=yes, 1817 rb_cv_negative_time_t=no, 1818 rb_cv_negative_time_t=yes)]) 1819if test "$rb_cv_negative_time_t" = yes; then 1820 AC_DEFINE(NEGATIVE_TIME_T) 1821fi 1822 1823# [ruby-dev:40910] overflow of time on FreeBSD 1824# http://www.freebsd.org/cgi/query-pr.cgi?pr=145341 1825AC_CACHE_CHECK(for localtime(3) overflow correctly, rb_cv_localtime_overflow, 1826 [AC_TRY_RUN([ 1827#include <stdlib.h> 1828#include <time.h> 1829 1830void 1831check(time_t t1) 1832{ 1833 struct tm *tm; 1834 time_t t2; 1835 tm = localtime(&t1); 1836 if (!tm) 1837 return; /* overflow detected. ok. */ 1838 t2 = mktime(tm); 1839 if (t1 == t2) 1840 return; /* round-trip. ok. */ 1841 exit(1); 1842} 1843 1844int 1845main() 1846{ 1847 time_t t; 1848 if (~(time_t)0 <= 0) { 1849 t = (((time_t)1) << (sizeof(time_t) * 8 - 2)); 1850 t |= t - 1; 1851 } 1852 else { 1853 t = ~(time_t)0; 1854 } 1855 check(t); 1856 return 0; 1857} 1858], 1859 rb_cv_localtime_overflow=yes, 1860 rb_cv_localtime_overflow=no, 1861 rb_cv_localtime_overflow=yes)]) 1862if test "$rb_cv_localtime_overflow" = no; then 1863 AC_DEFINE(LOCALTIME_OVERFLOW_PROBLEM) 1864fi 1865 1866if test "$ac_cv_func_sigprocmask" = yes && test "$ac_cv_func_sigaction" = yes; then 1867 AC_DEFINE(POSIX_SIGNAL) 1868else 1869 AC_CHECK_FUNCS(sigsetmask) 1870 AC_CACHE_CHECK(for BSD signal semantics, rb_cv_bsd_signal, 1871 [AC_TRY_RUN([ 1872#include <stdio.h> 1873#include <signal.h> 1874 1875void 1876sig_handler(dummy) 1877 int dummy; 1878{ 1879} 1880 1881int 1882main() 1883{ 1884 signal(SIGINT, sig_handler); 1885 kill(getpid(), SIGINT); 1886 kill(getpid(), SIGINT); 1887 return 0; 1888} 1889], 1890 rb_cv_bsd_signal=yes, 1891 rb_cv_bsd_signal=no, 1892 rb_cv_bsd_signal=$ac_cv_func_sigsetmask)]) 1893 if test "$rb_cv_bsd_signal" = yes; then 1894 AC_DEFINE(BSD_SIGNAL) 1895 fi 1896fi 1897 1898if test "$ac_cv_func_getpgid" = no; then 1899AC_FUNC_GETPGRP 1900fi 1901if test "$ac_cv_func_setpgid:$ac_cv_func_setpgrp" = no:yes; then 1902AC_FUNC_SETPGRP 1903fi 1904 1905if test x"$target_cpu" = xia64; then 1906 AC_LIBOBJ([ia64]) 1907 AC_CACHE_CHECK(for __libc_ia64_register_backing_store_base, 1908 rb_cv___libc_ia64_register_backing_store_base, 1909 [rb_cv___libc_ia64_register_backing_store_base=no 1910 AC_TRY_LINK( 1911 [extern unsigned long __libc_ia64_register_backing_store_base;], 1912 [unsigned long p = __libc_ia64_register_backing_store_base; 1913 printf("%ld\n", p);], 1914 [rb_cv___libc_ia64_register_backing_store_base=yes])]) 1915 if test $rb_cv___libc_ia64_register_backing_store_base = yes; then 1916 AC_DEFINE(HAVE___LIBC_IA64_REGISTER_BACKING_STORE_BASE) 1917 fi 1918fi 1919 1920AC_CACHE_CHECK(whether right shift preserve sign bit, rb_cv_rshift_sign, 1921 [AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([], [(-1==(-1>>1))])], 1922 rb_cv_rshift_sign=yes, 1923 rb_cv_rshift_sign=no)]) 1924if test "$rb_cv_rshift_sign" = yes; then 1925 AC_DEFINE(RSHIFT(x,y), ((x)>>(int)(y))) 1926else 1927 AC_DEFINE(RSHIFT(x,y), (((x)<0) ? ~((~(x))>>(int)(y)) : (x)>>(int)(y))) 1928fi 1929 1930# win32.c still use this. Don't remove it. 1931test "$rb_cv_fcnt" = "not found" && rb_cv_fcnt="not found (OK if using GNU libc)" 1932AC_CACHE_CHECK([read count field in FILE structures], rb_cv_fcnt, 1933[rb_cv_fcnt="not found (OK if using GNU libc)" 1934for fcnt in dnl 1935 _cnt dnl 1936 __cnt dnl 1937 _r dnl 1938 readCount dnl 1939 _rcount dnl for emx0.9c 1940; do 1941 AC_TRY_COMPILE([#include <stdio.h> 1942], 1943 [FILE *f = stdin; f->$fcnt = 0;], 1944 [rb_cv_fcnt="$fcnt"; break]) 1945done]) 1946AS_CASE("$rb_cv_fcnt", 1947 ["not found"*], [rb_cv_fcnt="not found"], 1948 [AC_DEFINE_UNQUOTED(FILE_COUNT, $rb_cv_fcnt)]) 1949 1950# win32.c still use this. Don't remove it. 1951AC_CACHE_CHECK([read buffer ptr field in FILE structures], rb_cv_frptr, 1952[for frptr in dnl 1953 _IO_read_ptr dnl 1954 _ptr dnl 1955 __ptr dnl 1956 bufpos dnl 1957 _p dnl 1958 __bufpos dnl 1959; do 1960 AC_TRY_COMPILE([#include <stdio.h> 1961], 1962 [FILE *f = stdin; char buf[256]; f->$frptr = buf;], 1963 rb_cv_frptr="$frptr"; break, 1964 rb_cv_frptr="not found") 1965done]) 1966if test "$rb_cv_frptr" != "not found"; then 1967 AC_DEFINE_UNQUOTED(FILE_READPTR, $rb_cv_frptr) 1968 1969 if test "$rb_cv_fcnt" = "not found"; then 1970 AC_CACHE_CHECK([read buffer end field in FILE structures], rb_cv_frend, 1971 [for frend in dnl 1972 _IO_read_end dnl 1973 bufread dnl 1974 __bufread dnl 1975 ; do 1976 AC_TRY_COMPILE([#include <stdio.h> 1977 ], 1978 [FILE *f = stdin; char buf[256]; f->$frend = buf;], 1979 rb_cv_frend="$frend"; break, 1980 rb_cv_frend="not found") 1981 done]) 1982 if test "$rb_cv_frend" != "not found"; then 1983 AC_DEFINE_UNQUOTED(FILE_READEND, $rb_cv_frend) 1984 fi 1985 fi 1986fi 1987 1988RUBY_CHECK_SIZEOF([struct stat.st_ino], [long "long long"], [], [@%:@include <sys/stat.h>]) 1989 1990AC_CACHE_CHECK([whether struct dirent.d_name is too small], rb_cv_sizeof_struct_dirent_too_small, 1991 [AC_COMPILE_IFELSE( 1992 [AC_LANG_BOOL_COMPILE_TRY([AC_INCLUDES_DEFAULT([ 1993@%:@if defined _WIN32 1994@%:@ error <<<struct direct in win32/dir.h has variable length d_name>>> 1995@%:@elif defined HAVE_DIRENT_H 1996@%:@ include <dirent.h> 1997@%:@elif defined HAVE_DIRECT_H 1998@%:@ include <direct.h> 1999@%:@else 2000@%:@ define dirent direct 2001@%:@ if HAVE_SYS_NDIR_H 2002@%:@ include <sys/ndir.h> 2003@%:@ endif 2004@%:@ if HAVE_SYS_DIR_H 2005@%:@ include <sys/dir.h> 2006@%:@ endif 2007@%:@ if HAVE_NDIR_H 2008@%:@ include <ndir.h> 2009@%:@ endif 2010@%:@endif 2011@%:@include <stddef.h> 2012@%:@define numberof(array) [(int)(sizeof(array) / sizeof((array)[0]))] 2013struct dirent d; 2014])], 2015 [offsetof(struct dirent, [d_name[numberof(d.d_name)]]) - offsetof(struct dirent, d_name) < 256])], 2016 [rb_cv_sizeof_struct_dirent_too_small=yes], 2017 [rb_cv_sizeof_struct_dirent_too_small=no])]) 2018if test "$rb_cv_sizeof_struct_dirent_too_small" = yes; then 2019 AC_DEFINE(SIZEOF_STRUCT_DIRENT_TOO_SMALL, 1) 2020fi 2021 2022if test "$ac_cv_func_sysconf" = yes; then 2023 AC_DEFUN([RUBY_CHECK_SYSCONF], [dnl 2024 AC_CACHE_CHECK([whether _SC_$1 is supported], rb_cv_have_sc_[]m4_tolower($1), 2025 [AC_TRY_COMPILE([#include <unistd.h> 2026 ], 2027 [_SC_$1 >= 0], 2028 rb_cv_have_sc_[]m4_tolower($1)=yes, 2029 rb_cv_have_sc_[]m4_tolower($1)=no) 2030 ]) 2031 if test "$rb_cv_have_sc_[]m4_tolower($1)" = yes; then 2032 AC_DEFINE(HAVE__SC_$1) 2033 fi 2034 ]) 2035 RUBY_CHECK_SYSCONF(CLK_TCK) 2036fi 2037 2038AC_DEFUN(RUBY_STACK_GROW_DIRECTION, [ 2039 AS_VAR_PUSHDEF([stack_grow_dir], [rb_cv_stack_grow_dir_$1]) 2040 AC_CACHE_CHECK(stack growing direction on $1, stack_grow_dir, [ 2041AS_CASE(["$1"], 2042[m68*|x86*|x64|i?86|ia64|ppc*|sparc*|alpha*], [ $2=-1], 2043[hppa*], [ $2=+1], 2044[ 2045 AC_TRY_RUN([ 2046/* recurse to get rid of inlining */ 2047static int 2048stack_growup_p(addr, n) 2049 volatile int *addr, n; 2050{ 2051 volatile int end; 2052 if (n > 0) 2053 return *addr = stack_growup_p(addr, n - 1); 2054 else 2055 return (&end > addr); 2056} 2057int main() 2058{ 2059 int x; 2060 return stack_growup_p(&x, 10); 2061} 2062], $2=-1, $2=+1, $2=0) 2063 ]) 2064eval stack_grow_dir=\$$2]) 2065eval $2=\$stack_grow_dir 2066AS_VAR_POPDEF([stack_grow_dir])]) 2067if test "${universal_binary-no}" = yes ; then 2068 archflagpat=`eval echo '"'"${ARCH_FLAG}"'"' | sed 's/[[][|.*]]/\\&/g'` 2069 save_CFLAGS="$CFLAGS" new_cflags=`echo "$CFLAGS" | sed "s|$archflagpat"'||'` 2070 save_LDFLAGS="$LDFLAGS" new_ldflags=`echo "$LDFLAGS" | sed "s|$archflagpat"'||'` 2071 stack_dir= 2072 for archs in ${universal_archnames}; do 2073 archs=`echo $archs | sed 's/=.*//'` 2074 CFLAGS="$new_cflags -arch $archs" 2075 LDFLAGS="$new_ldflags -arch $archs" 2076 RUBY_STACK_GROW_DIRECTION($archs, dir) 2077 if test x$stack_dir = x; then 2078 stack_dir=$dir 2079 elif test x$stack_dir != x$dir; then 2080 stack_dir=no 2081 fi 2082 done 2083 CFLAGS="$save_CFLAGS" LDFLAGS="$save_LDFLAGS" 2084 if test x$stack_dir = xno; then 2085 for archs in ${universal_archnames}; do 2086 archs=`echo $archs | sed 's/=.*//'` 2087 eval dir=\$[rb_cv_stack_grow_dir_]AS_TR_SH([$archs]) 2088 RUBY_DEFINE_IF([defined __${archs}__], STACK_GROW_DIRECTION, $dir) 2089 done 2090 else 2091 AC_DEFINE_UNQUOTED(STACK_GROW_DIRECTION, $stack_dir) 2092 fi 2093else 2094 RUBY_STACK_GROW_DIRECTION($target_cpu, dir) 2095 AC_DEFINE_UNQUOTED(STACK_GROW_DIRECTION, $dir) 2096fi 2097 2098if test x"$enable_pthread" = xyes; then 2099 for pthread_lib in thr pthread pthreads c c_r root; do 2100 AC_CHECK_LIB($pthread_lib, pthread_kill, 2101 rb_with_pthread=yes, rb_with_pthread=no) 2102 if test "$rb_with_pthread" = "yes"; then break; fi 2103 done 2104 if test x"$rb_with_pthread" = xyes; then 2105 AC_DEFINE(_REENTRANT) 2106 AC_DEFINE(_THREAD_SAFE) 2107 AC_DEFINE(HAVE_LIBPTHREAD) 2108 AC_CHECK_HEADERS(pthread_np.h, [], [], [@%:@include <pthread.h>]) 2109 AS_CASE([$pthread_lib], 2110 [c], [], 2111 [root], [], 2112 [c_r], [MAINLIBS="-pthread $MAINLIBS"], 2113 [AS_CASE(["$target_os"], 2114 [openbsd*], [LIBS="-pthread $LIBS"], 2115 [LIBS="-l$pthread_lib $LIBS"])]) 2116 else 2117 AC_MSG_WARN("Don't know how to find pthread library on your system -- thread support disabled") 2118 fi 2119 AC_CHECK_FUNCS(sched_yield pthread_attr_setinheritsched \ 2120 pthread_getattr_np pthread_attr_get_np pthread_attr_getstack\ 2121 pthread_get_stackaddr_np pthread_get_stacksize_np \ 2122 thr_stksegment pthread_stackseg_np pthread_getthrds_np \ 2123 pthread_cond_init pthread_condattr_setclock pthread_condattr_init \ 2124 pthread_sigmask) 2125 if test "${host_os}" = "nacl"; then 2126 ac_cv_func_pthread_attr_init=no 2127 else 2128 AC_CHECK_FUNCS(pthread_attr_init) 2129 fi 2130fi 2131if test x"$ac_cv_header_ucontext_h" = xyes; then 2132 if test x"$rb_with_pthread" = xyes; then 2133 AC_CHECK_FUNCS(getcontext setcontext) 2134 fi 2135fi 2136 2137if test "$ac_cv_func_fork" = "yes" -a "$rb_with_pthread" = "yes"; then 2138 AC_CACHE_CHECK([if fork works with pthread], rb_cv_fork_with_pthread, 2139 [AC_TRY_RUN([ 2140#include <stdlib.h> 2141#include <unistd.h> 2142#include <pthread.h> 2143#include <stdio.h> 2144#include <sys/types.h> 2145#include <sys/wait.h> 2146#include <signal.h> 2147#ifndef EXIT_SUCCESS 2148#define EXIT_SUCCESS 0 2149#endif 2150#ifndef EXIT_FAILURE 2151#define EXIT_FAILURE 1 2152#endif 2153 2154void * 2155thread_func(void *dmy) 2156{ 2157 return dmy; 2158} 2159 2160int 2161use_threads(void) 2162{ 2163 pthread_t tid; 2164 if (pthread_create(&tid, 0, thread_func, 0) != 0) { 2165 return -1; 2166 } 2167 if (pthread_join(tid, 0) != 0) { 2168 return -1; 2169 } 2170 return 0; 2171} 2172 2173int 2174main(int argc, char *argv[]) 2175{ 2176 pid_t pid; 2177 if (use_threads()) return EXIT_FAILURE; 2178 pid = fork(); 2179 2180 if (pid) { 2181 int loc; 2182 sleep(1); 2183 if (waitpid(pid, &loc, WNOHANG) == 0) { 2184 kill(pid, SIGKILL); 2185 return EXIT_FAILURE; 2186 } 2187 if (!WIFEXITED(loc) || WEXITSTATUS(loc) != EXIT_SUCCESS) 2188 return EXIT_FAILURE; 2189 } 2190 else { 2191 if (use_threads()) return EXIT_FAILURE; 2192 } 2193 2194 return EXIT_SUCCESS; 2195}], 2196 rb_cv_fork_with_pthread=yes, 2197 rb_cv_fork_with_pthread=no, 2198 rb_cv_fork_with_pthread=yes)]) 2199 test x$rb_cv_fork_with_pthread = xyes || AC_DEFINE(CANNOT_FORK_WITH_PTHREAD) 2200fi 2201 2202 2203} 2204{ # runtime section 2205 2206dnl wheather use dln_a_out or not 2207AC_ARG_WITH(dln-a-out, 2208 AS_HELP_STRING([--with-dln-a-out], [use dln_a_out if possible]), 2209 [ 2210 AS_CASE([$withval], 2211 [yes], [ 2212 if test "$enable_shared" = yes; then 2213 AC_MSG_ERROR(dln_a_out can not make shared library) 2214 fi 2215 with_dln_a_out=yes], 2216 [ 2217 with_dln_a_out=no])], [with_dln_a_out=no]) 2218 2219AC_CACHE_CHECK(whether ELF binaries are produced, rb_cv_binary_elf, 2220[AC_TRY_LINK([],[], [ 2221AS_CASE(["`head -1 conftest$EXEEXT | cat -e`"], 2222['^?ELF'*], [rb_cv_binary_elf=yes], [rb_cv_binary_elf=no])], 2223rb_cv_binary_elf=no)]) 2224 2225if test "$rb_cv_binary_elf" = yes; then 2226 AC_DEFINE(USE_ELF) 2227 if test "$with_dln_a_out" = yes; then 2228 AC_MSG_ERROR(dln_a_out does not work with ELF) 2229 fi 2230 AC_CHECK_HEADERS([elf.h elf_abi.h]) 2231 if test $ac_cv_header_elf_h = yes -o $ac_cv_header_elf_abi_h = yes; then 2232 AC_LIBOBJ([addr2line]) 2233 fi 2234fi 2235 2236AS_CASE(["$target_os"], 2237[linux* | gnu* | k*bsd*-gnu | bsdi* | kopensolaris*-gnu | nacl], [ 2238 if test "$rb_cv_binary_elf" = no; then 2239 with_dln_a_out=yes 2240 else 2241 LDFLAGS="$LDFLAGS -rdynamic" 2242 fi]) 2243LIBEXT=a 2244 2245AC_SUBST(DLDFLAGS)dnl 2246AC_SUBST(ARCH_FLAG)dnl 2247 2248AC_SUBST(STATIC)dnl 2249AC_SUBST(CCDLFLAGS)dnl 2250AC_SUBST(LDSHARED)dnl 2251AC_SUBST(LDSHAREDXX)dnl 2252AC_SUBST(DLEXT)dnl 2253AC_SUBST(DLEXT2)dnl 2254AC_SUBST(LIBEXT)dnl 2255 2256STATIC= 2257: ${PATHFLAG=''} 2258 2259if test "$with_dln_a_out" != yes; then 2260 rb_cv_dlopen=unknown 2261 AC_MSG_CHECKING(whether OS depend dynamic link works) 2262 if test "$GCC" = yes; then 2263 AS_CASE(["$target_os"], 2264 [darwin*], [ 2265 # The -fno-common is needed if we wish to embed the Ruby interpreter 2266 # into a plugin module of some project (as opposed to embedding it 2267 # within the project's application). The -I/usr/local/include is 2268 # needed because CPP as discovered by configure (cc -E -traditional) 2269 # fails to consult /usr/local/include by default. This causes 2270 # mkmf.rb's have_header() to fail if the desired resource happens to be 2271 # installed in the /usr/local tree. 2272 RUBY_APPEND_OPTION(CCDLFLAGS, -fno-common)], 2273 [bsdi*|beos*|haiku*|cygwin*|mingw*|aix*|interix*], [ ], 2274 [ 2275 RUBY_APPEND_OPTION(CCDLFLAGS, -fPIC)]) 2276 else 2277 AS_CASE(["$target_os"], 2278 [hpux*], [CCDLFLAGS="$CCDLFLAGS +Z"], 2279 [solaris*|irix*], [CCDLFLAGS="$CCDLFLAGS -KPIC"], 2280 [sunos*], [CCDLFLAGS="$CCDLFLAGS -PIC"], 2281 [esix*|uxpds*], [CCDLFLAGS="$CCDLFLAGS -KPIC"], 2282 [: ${CCDLFLAGS=""}]) 2283 fi 2284 2285 2286 AC_ARG_ENABLE(rpath, 2287 AS_HELP_STRING([--enable-rpath], [embed run path into extension libraries. 2288 enabled by default on ELF platforms]), 2289 [enable_rpath=$enableval], [enable_rpath="$rb_cv_binary_elf"]) 2290 if test "$enable_rpath" = yes; then 2291 RPATHFLAG=" ${linker_flag}-R%1\$-s" 2292 fi 2293 2294 AS_CASE(["$target_os"], 2295 [hpux*], [ DLDFLAGS="$DLDFLAGS -E" 2296 : ${LDSHARED='$(LD) -b'} 2297 XLDFLAGS="$XLDFLAGS -Wl,-E" 2298 : ${LIBPATHENV=SHLIB_PATH} 2299 if test "$rb_cv_prog_gnu_ld" = no; then 2300 RPATHFLAG=' +b %1$-s' 2301 fi 2302 rb_cv_dlopen=yes], 2303 [solaris*], [ if test "$GCC" = yes; then 2304 : ${LDSHARED='$(CC) -shared'} 2305 if test "$rb_cv_prog_gnu_ld" = yes; then 2306 LDFLAGS="$LDFLAGS -Wl,-E" 2307 fi 2308 else 2309 : ${LDSHARED='$(CC) -G'} 2310 fi 2311 if test "$ac_cv_sizeof_voidp" = 8; then 2312 : ${LIBPATHENV=LD_LIBRARY_PATH_64} 2313 fi 2314 rb_cv_dlopen=yes], 2315 [sunos*], [ : ${LDSHARED='$(LD) -assert nodefinitions'} 2316 rb_cv_dlopen=yes], 2317 [irix*], [ : ${LDSHARED='$(LD) -shared'} 2318 rb_cv_dlopen=yes], 2319 [sysv4*], [ : ${LDSHARED='$(LD) -G'} 2320 rb_cv_dlopen=yes], 2321 [nto-qnx*], [ : ${LDSHARED='$(CC) -shared'} 2322 rb_cv_dlopen=yes], 2323 [esix*|uxpds*], [ : ${LDSHARED='$(LD) -G'} 2324 rb_cv_dlopen=yes], 2325 [osf*], [ : ${LDSHARED='$(LD) -shared -expect_unresolved "*"'} 2326 rb_cv_dlopen=yes], 2327 [bsdi3*], [ AS_CASE(["$CC"], 2328 [*shlicc*], [ : ${LDSHARED='$(CC) -r'} 2329 rb_cv_dlopen=yes])], 2330 [linux* | gnu* | k*bsd*-gnu | netbsd* | bsdi* | kopensolaris*-gnu], [ 2331 : ${LDSHARED='$(CC) -shared'} 2332 if test "$rb_cv_binary_elf" = yes; then 2333 LDFLAGS="$LDFLAGS -Wl,-export-dynamic" 2334 fi 2335 rb_cv_dlopen=yes], 2336 [interix*], [ : ${LDSHARED='$(CC) -shared'} 2337 XLDFLAGS="$XLDFLAGS -Wl,-E" 2338 LIBPATHFLAG=" -L%1\$-s" 2339 rb_cv_dlopen=yes], 2340 [freebsd*|dragonfly*], [ 2341 : ${LDSHARED='$(CC) -shared'} 2342 if test "$rb_cv_binary_elf" = yes; then 2343 LDFLAGS="$LDFLAGS -rdynamic" 2344 DLDFLAGS="$DLDFLAGS "'-Wl,-soname,$@' 2345 else 2346 test "$GCC" = yes && test "$rb_cv_prog_gnu_ld" = yes || LDSHARED='$(LD) -Bshareable' 2347 fi 2348 rb_cv_dlopen=yes], 2349 [openbsd*|mirbsd*], [ : ${LDSHARED='$(CC) -shared ${CCDLFLAGS}'} 2350 if test "$rb_cv_binary_elf" = yes; then 2351 LDFLAGS="$LDFLAGS -Wl,-E" 2352 fi 2353 rb_cv_dlopen=yes], 2354 [darwin*], [ : ${LDSHARED='$(CC) -dynamic -bundle'} 2355 : ${DLDFLAGS="${linker_flag}-undefined${linker_flag:+,}dynamic_lookup ${linker_flag}-multiply_defined${linker_flag:+,}suppress"} 2356 : ${LDFLAGS=""} 2357 : ${LIBPATHENV=DYLD_LIBRARY_PATH} 2358 # /usr/local/include is always searched for 2359 # some reason, but /usr/local/lib is not. 2360 hdr=`find /usr/local/include -name \*.h -type f | sed 's:^/usr/local/include/::;q'` 2361 if test -n "$hdr" && $CC -E -include "$hdr" -xc - </dev/null 2>/dev/null | fgrep -q "$hdr"; then 2362 $CC -print-search-dirs | grep -q '^libraries:.*:/usr/local/lib/*' || 2363 echo " $LDFLAGS " | grep -q ' -L */usr/local/lib/* ' || 2364 LDFLAGS="${LDFLAGS:+$LDFLAGS }-L/usr/local/lib" 2365 fi 2366 rb_cv_dlopen=yes], 2367 [aix*], [ : ${LDSHARED='$(CC)'} 2368 LDSHARED="$LDSHARED ${linker_flag}-G" 2369 EXTDLDFLAGS='-e$(TARGET_ENTRY)' 2370 XLDFLAGS="${linker_flag}"'-bE:$(ARCHFILE)'" ${linker_flag}-brtl" 2371 XLDFLAGS="$XLDFLAGS ${linker_flag}-blibpath:${prefix}/lib:${LIBPATH:-/usr/lib:/lib}" 2372 : ${ARCHFILE="ruby.imp"} 2373 TRY_LINK='$(CC) $(LDFLAGS) -oconftest $(INCFLAGS) -I$(hdrdir) $(CPPFLAGS)' 2374 TRY_LINK="$TRY_LINK"' $(CFLAGS) $(src) $(LIBPATH) $(LOCAL_LIBS) $(LIBS)' 2375 : ${LIBPATHENV=LIBPATH} 2376 RPATHFLAG=" ${linker_flag}-blibpath:%1\$-s:${prefix}/lib:${LIBPATH:-/usr/lib:/lib}" 2377 rb_cv_dlopen=yes], 2378 [beos*], [ AS_CASE(["$target_cpu"], 2379 [powerpc*], [ 2380 : ${LDSHARED='$(LD) -xms'} 2381 EXTDLDFLAGS='-export $(TARGET_ENTRY)' 2382 DLDFLAGS="$DLDFLAGS -lbe -lroot glue-noinit.a init_term_dyn.o start_dyn.o" 2383 LDFLAGS="$LDFLAGS -L/boot/home/config/lib -lbe -lroot" 2384 ], 2385 [i586*], [ 2386 : ${LDSHARED='$(LD) -shared'} 2387 DLDFLAGS="$DLDFLAGS -L/boot/develop/lib/x86 -L/boot/home/config/lib \$(topdir)/_APP_ -lroot" 2388 LDFLAGS="$LDFLAGS -L/boot/develop/lib/x86 -L/boot/home/config/lib -lroot" 2389 ]) 2390 : ${LIBPATHENV=LIBRARY_PATH} 2391 rb_cv_dlopen=yes], 2392 [haiku*], [ AS_CASE(["$target_cpu"], 2393 [powerpc*], [ 2394 : ${LDSHARED='$(LD) -xms'} 2395 EXTDLDFLAGS='-export $(TARGET_ENTRY)' 2396 DLDFLAGS="$DLDFLAGS -lroot glue-noinit.a init_term_dyn.o start_dyn.o" 2397 ], 2398 [i586*], [ 2399 : ${LDSHARED='$(LD) -shared'} 2400 DLDFLAGS="$DLDFLAGS -L/boot/develop/lib/x86 -lroot" 2401 ]) 2402 : ${LIBPATHENV=LIBRARY_PATH} 2403 rb_cv_dlopen=yes ], 2404 [nto-qnx*], [ DLDFLAGS="$DLDFLAGS -L/lib -L/usr/lib -L/usr/local/lib" 2405 : ${LDSHARED='$(LD) -Bshareable -x'} 2406 LDFLAGS="$LDFLAGS -L/lib -L/usr/lib -L/usr/local/lib" 2407 rb_cv_dlopen=yes], 2408 [cygwin*|mingw*], [ 2409 : ${LDSHARED='$(CC) -shared $(if $(filter-out -g -g0,$(debugflags)),,-s)'} 2410 XLDFLAGS="$XLDFLAGS -Wl,--stack,0x00200000,--enable-auto-import" 2411 DLDFLAGS="${DLDFLAGS} -Wl,--enable-auto-image-base,--enable-auto-import" 2412 : ${LIBPATHENV=""} 2413 rb_cv_dlopen=yes], 2414 [hiuxmpp], [ : ${LDSHARED='$(LD) -r'}], 2415 [atheos*], [ : ${LDSHARED='$(CC) -shared'} 2416 rb_cv_dlopen=yes], 2417 [os2-emx*], [ LDFLAGS="$LDFLAGS -Zomf" 2418 ], 2419 [nacl], [ LDSHARED='$(CC) -shared' ], 2420 [ : ${LDSHARED='$(LD)'}]) 2421 AC_MSG_RESULT($rb_cv_dlopen) 2422fi 2423if test "${LDSHAREDXX}" = ""; then 2424 AS_CASE(["${LDSHARED}"], 2425 [*'$(CC)'*], [ 2426 LDSHAREDXX=`echo "${LDSHARED}" | sed 's/\$(CC)/$(CXX)/'` 2427 ], 2428 [*'${CC}'*], [ 2429 LDSHAREDXX=`echo "${LDSHARED}" | sed 's/\${CC}/${CXX}/'` 2430 ], 2431 [*$CC*], [ 2432 LDSHAREDXX=`echo "${LDSHARED}" | sed "s|$CC|$CXX|"` 2433 ], 2434 [ld" "*], [ 2435 ]) 2436fi 2437AS_CASE([${RPATHFLAG}],[*'%1$'*],[: ${LIBPATHFLAG=' -L%1$-s'}],[: ${LIBPATHFLAG=' -L%s'}]) 2438 2439AC_SUBST(LINK_SO) 2440AC_SUBST(LIBPATHFLAG) 2441AC_SUBST(RPATHFLAG) 2442AC_SUBST(LIBPATHENV, "${LIBPATHENV-LD_LIBRARY_PATH}") 2443AC_SUBST(TRY_LINK) 2444 2445AC_ARG_WITH(opt-dir, 2446 AS_HELP_STRING([--with-opt-dir=DIR-LIST], 2447 [add optional headers and libraries directories separated by $PATH_SEPARATOR]), 2448 [ 2449 val=`echo "$PATH_SEPARATOR$withval" | sed "s|$PATH_SEPARATOR\([[^$PATH_SEPARATOR]*]\)| -I\1/include|g;s/^ //"` 2450 CPPFLAGS="$CPPFLAGS $val" 2451 val=`IFS="$PATH_SEPARATOR" 2452 for dir in $withval; do 2453 echo x ${LIBPATHFLAG} ${RPATHFLAG} | 2454 sed "s/^x *//;s${IFS}"'%1\\$-s'"${IFS}${dir}/lib${IFS}g;s${IFS}%s${IFS}${dir}/lib${IFS}g" 2455 done | tr '\012' ' '` 2456 LDFLAGS_OPTDIR="$val" 2457 LDFLAGS="$LDFLAGS${LDFLAGS:+ }$val" 2458 DLDFLAGS="$DLDFLAGS${DLDFLAGS:+ }$val" 2459 ]) 2460 2461AS_CASE(["$target_cpu-$target_os"], 2462[*-freebsd*|x86_64-netbsd*], [ 2463 AC_CHECK_HEADERS([execinfo.h]) 2464 if test "x$ac_cv_header_execinfo_h" = xyes; then 2465 AC_CHECK_LIB([execinfo], [backtrace]) 2466 execinfo_frame_pointer=no 2467 RUBY_TRY_CFLAGS(-fno-omit-frame-pointer, [execinfo_frame_pointer=yes]) 2468 if test "x$execinfo_frame_pointer" = xyes; then 2469 # optflags must be manipulated very carefully. For the 2470 # later cflagspat/cxxflagspat substitution to work, CFLAGS 2471 # and CXXFLAGS must start exactly with the value of 2472 # optflags. 2473 CFLAGS="${CFLAGS# }"; CFLAGS="${CFLAGS#"$optflags "}" 2474 CXXFLAGS="${CXXFLAGS# }"; CXXFLAGS="${CXXFLAGS#"$optflags "}" 2475 RUBY_APPEND_OPTION(optflags, -fno-omit-frame-pointer) 2476 CFLAGS=" $optflags $CFLAGS" 2477 CXXFLAGS=" $optflags $CXXFLAGS" 2478 fi 2479 fi]) 2480AC_CHECK_FUNCS(backtrace) 2481 2482AC_ARG_WITH(valgrind, 2483 AS_HELP_STRING([--without-valgrind],[disable valgrind memcheck support]), 2484 [], with_valgrind=yes) 2485AS_IF([test x$with_valgrind != xno], 2486 [AC_CHECK_HEADERS(valgrind/memcheck.h)]) 2487 2488dln_a_out_works=no 2489if test "$ac_cv_header_a_out_h" = yes; then 2490 if test "$with_dln_a_out" = yes || test "$rb_cv_dlopen" = unknown; then 2491 cat confdefs.h > config.h 2492 AC_CACHE_CHECK(whether matz's dln works, rb_cv_dln_a_out, 2493 [AC_TRY_COMPILE([ 2494#define USE_DLN_A_OUT 2495#include "dln.c" 2496], 2497 [], 2498 rb_cv_dln_a_out=yes, 2499 rb_cv_dln_a_out=no)]) 2500 if test "$rb_cv_dln_a_out" = yes; then 2501 dln_a_out_works=yes 2502 AC_DEFINE(USE_DLN_A_OUT) 2503 fi 2504 fi 2505fi 2506 2507if test "$dln_a_out_works" = yes; then 2508 if test "$GCC" = yes; then 2509 STATIC=-static 2510 else 2511 STATIC=-Bstatic 2512 fi 2513 DLEXT=so 2514 CCDLFLAGS= 2515else 2516 AS_CASE(["$target_os"], 2517 [hpux*], [ 2518 DLEXT=sl], 2519 [darwin*], [ 2520 RUBY_APPEND_OPTION(XLDFLAGS, [-Wl,-u,_objc_msgSend]) 2521 DLEXT=bundle], 2522 [os2-emx*], [ 2523 LOAD_RELATIVE=1 2524 DLEXT=dll], 2525 [cygwin*|mingw*|*djgpp*], [ 2526 LOAD_RELATIVE=1 2527 DLEXT=so], 2528 [ 2529 DLEXT=so]) 2530fi 2531if test "$rb_cv_dlopen:$load_relative" = yes:yes; then 2532 AC_CHECK_FUNCS(dladdr) 2533 if test "$ac_cv_func_dladdr" = yes; then 2534 LOAD_RELATIVE=1 2535 fi 2536fi 2537if test x"$LOAD_RELATIVE" = x1; then 2538 load_relative=yes 2539else 2540 unset load_relative 2541fi 2542 2543len=2 # .rb 2544n=`expr "$DLEXT" : '.*'`; test "$n" -gt "$len" && len=$n 2545n=`expr "$DLEXT2" : '.*'`; test "$n" -gt "$len" && len=$n 2546AC_DEFINE_UNQUOTED(DLEXT_MAXLEN, `expr $len + 1`) 2547test ".$DLEXT" = "." || AC_DEFINE_UNQUOTED(DLEXT, ".$DLEXT") 2548test ".$DLEXT2" = "." || AC_DEFINE_UNQUOTED(DLEXT2, ".$DLEXT2") 2549AC_SUBST(DLEXT) 2550 2551if test "$with_dln_a_out" = yes; then 2552 STRIP=true 2553else 2554 AC_CHECK_TOOL(STRIP, strip, :)dnl 2555fi 2556 2557AS_CASE(["$target_os"], 2558 [linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu], [ 2559 STRIP="$STRIP -S -x"], 2560 [darwin*], [ 2561 STRIP="$STRIP -A -n"]) 2562 2563AC_ARG_WITH(ext, 2564 AC_HELP_STRING([--with-ext=EXTS], 2565 [pass to --with-ext option of extmk.rb])) 2566AC_ARG_WITH(out-ext, 2567 AC_HELP_STRING([--with-out-ext=EXTS], 2568 [pass to --without-ext option of extmk.rb])) 2569EXTSTATIC= 2570AC_SUBST(EXTSTATIC)dnl 2571AC_ARG_WITH(static-linked-ext, 2572 AS_HELP_STRING([--with-static-linked-ext], [link external modules statically]), 2573 [AS_CASE([$withval],[yes],[STATIC=;EXTSTATIC=static])]) 2574if test x"$EXTSTATIC" = xstatic; then 2575 ENCOBJS='enc/encinit.$(OBJEXT) enc/libenc.$(LIBEXT) enc/libtrans.$(LIBEXT)' 2576 EXTOBJS='ext/extinit.$(OBJEXT)' 2577 AC_DEFINE_UNQUOTED(EXTSTATIC, 1) 2578fi 2579AC_SUBST(ENCOBJS) 2580AC_SUBST(EXTOBJS) 2581 2582AS_CASE(["$target_os"], 2583 dnl OS/2 environment w/ Autoconf 2.1x for EMX 2584 [os2-emx], [ 2585 setup=Setup.emx 2586 ], 2587 [*djgpp*], [ 2588 setup=Setup.dj 2589 ], 2590 [nacl], [ 2591 setup=Setup.nacl 2592 ], 2593 [ 2594 setup=Setup 2595 ]) 2596 2597AC_SUBST(setup) 2598 2599test x"$prefix" = xNONE && prefix=$ac_default_prefix 2600test x"${exec_prefix}" = xNONE && exec_prefix="$prefix" 2601pat=`echo "${exec_prefix}" | tr -c '\012' .`'\(.*\)' 2602for var in bindir libdir; do 2603 eval val='"$'$var'"' 2604 AS_CASE(["$val"], ["${exec_prefix}"*], [val='${exec_prefix}'"`expr \"$val\" : \"$pat\"`"]) 2605 eval $var='"$val"' 2606done 2607 2608BTESTRUBY='$(MINIRUBY)' 2609if test x"$cross_compiling" = xyes; then 2610 test x"$MINIRUBY" = x && MINIRUBY="${RUBY-$BASERUBY} -I`$CHDIR .; pwd` "-r'$(arch)-fake' 2611 XRUBY_LIBDIR=`${RUBY-$BASERUBY} -rrbconfig -e ['puts RbConfig::CONFIG["libdir"]']` 2612 XRUBY_RUBYLIBDIR=`${RUBY-$BASERUBY} -rrbconfig -e ['puts RbConfig::CONFIG["rubylibdir"]']` 2613 XRUBY_RUBYHDRDIR=`${RUBY-$BASERUBY} -rrbconfig -e ['puts RbConfig::CONFIG["rubyhdrdir"]']` 2614 AC_SUBST(XRUBY_LIBDIR) 2615 AC_SUBST(XRUBY_RUBYLIBDIR) 2616 AC_SUBST(XRUBY_RUBYHDRDIR) 2617 PREP='$(arch)-fake.rb' 2618 RUNRUBY_COMMAND='$(MINIRUBY) -I`cd $(srcdir)/lib; pwd`' 2619 RUNRUBY='$(RUNRUBY_COMMAND)' 2620 XRUBY='$(MINIRUBY)' 2621 TEST_RUNNABLE=no 2622 CROSS_COMPILING=yes 2623 2624 if test "$host_os" = "nacl"; then 2625 if test "$build_cpu" = "$host_cpu" || test "${nacl_cv_cpu_nick}" = "x86" -a "$host_cpu" = "i686"; then 2626 nacl_cv_sel_ldr='`$(MINIRUBY) $(srcdir)/nacl/nacl-config.rb sel_ldr`' 2627 nacl_cv_irt_core='`$(MINIRUBY) $(srcdir)/nacl/nacl-config.rb irt_core`' 2628 nacl_cv_runnable_ld='`$(MINIRUBY) $(srcdir)/nacl/nacl-config.rb runnable_ld`' 2629 nacl_cv_host_lib='`$(MINIRUBY) $(srcdir)/nacl/nacl-config.rb host_lib`' 2630 TEST_RUNNABLE=yes 2631 BTESTRUBY="${nacl_cv_sel_ldr} -a -B ${nacl_cv_irt_core} -w 1:3 -w 2:4" 2632 BTESTRUBY="$BTESTRUBY -- ${nacl_cv_runnable_ld} --library-path ${nacl_cv_host_lib}" 2633 BTESTRUBY="$BTESTRUBY `pwd`/"'miniruby$(EXEEXT) -I`cd $(srcdir)/lib; pwd` -I.' 2634 BTESTRUBY="$BTESTRUBY"' -I$(EXTOUT)/common 3>&1 4>&2 1>/dev/null 2>/dev/null ' 2635 fi 2636 fi 2637else 2638 MINIRUBY='./miniruby$(EXEEXT) -I$(srcdir)/lib -I.' 2639 MINIRUBY="$MINIRUBY"' -I$(EXTOUT)/common' 2640 PREP='miniruby$(EXEEXT)' 2641 RUNRUBY_COMMAND='$(MINIRUBY) $(srcdir)/tool/runruby.rb --extout=$(EXTOUT) $(RUNRUBYOPT)' 2642 RUNRUBY='$(RUNRUBY_COMMAND) --' 2643 XRUBY='$(RUNRUBY)' 2644 TEST_RUNNABLE=yes 2645 CROSS_COMPILING=no 2646fi 2647AC_SUBST(TEST_RUNNABLE) 2648AC_SUBST(CROSS_COMPILING) 2649AC_SUBST(MINIRUBY) 2650AC_SUBST(BTESTRUBY) 2651AC_SUBST(PREP) 2652AC_SUBST(RUNRUBY_COMMAND) 2653AC_SUBST(RUNRUBY) 2654AC_SUBST(XRUBY) 2655AC_SUBST(EXTOUT, [${EXTOUT=.ext}]) 2656 2657FIRSTMAKEFILE="" 2658LIBRUBY_A='lib$(RUBY_SO_NAME)-static.a' 2659LIBRUBY='$(LIBRUBY_A)' 2660LIBRUBYARG_STATIC='-l$(RUBY_SO_NAME)-static' 2661LIBRUBYARG='$(LIBRUBYARG_STATIC)' 2662SOLIBS= 2663 2664AS_CASE(["$target_os"], 2665 [cygwin*|mingw*|beos*|haiku*|darwin*|os2-emx*], [ 2666 : ${DLDLIBS=""} 2667 ], 2668 [ 2669 DLDLIBS="$DLDLIBS -lc" 2670 ]) 2671 2672AC_ARG_WITH(soname, 2673 AS_HELP_STRING([--with-soname=SONAME], [base name of shared library]), 2674 [RUBY_SO_NAME=$withval], [RUBY_SO_NAME='$(RUBY_BASE_NAME)']) 2675 2676LIBRUBY_LDSHARED=$LDSHARED 2677LIBRUBY_DLDFLAGS=$DLDFLAGS 2678LIBRUBY_SO='lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR).$(TEENY)' 2679LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so' 2680ENABLE_SHARED=no 2681 2682AC_ARG_ENABLE(shared, 2683 AS_HELP_STRING([--enable-shared], [build a shared library for Ruby]), 2684 [enable_shared=$enableval]) 2685libprefix='$(libdir)' 2686LIBRUBY_RELATIVE=${load_relative-no} 2687AS_CASE("$enable_shared", [yes], [ 2688 LIBRUBY='$(LIBRUBY_SO)' 2689 LIBRUBYARG_SHARED='-l$(RUBY_SO_NAME)' 2690 LIBRUBYARG='$(LIBRUBYARG_SHARED)' 2691 LIBRUBY_RELATIVE=no 2692 test -z "$CCDLFLAGS" || CFLAGS="$CFLAGS $CCDLFLAGS" 2693 ENABLE_SHARED=yes 2694 if test "$rb_cv_binary_elf" = yes; then 2695 SOLIBS='$(LIBS)' 2696 fi 2697 2698 # libdir can be overridden in config.site file (on OpenSUSE at least). 2699 libdir_basename=lib 2700 if test "$bindir" = '${exec_prefix}/bin'; then 2701 AS_CASE(["$libdir"], ['${exec_prefix}/'*], [libdir_basename=`basename "$libdir"`]) 2702 fi 2703 AC_DEFINE_UNQUOTED(LIBDIR_BASENAME, ["${libdir_basename}"]) 2704 2705 AS_CASE(["$target_os"], 2706 [freebsd*|dragonfly*], [], 2707 [ 2708 if test "$GCC" = yes; then 2709 RUBY_TRY_LDFLAGS([${linker_flag}--no-undefined], [no_undefined=yes], [no_undefined=no]) 2710 if test "no_undefined" = yes; then 2711 RUBY_APPEND_OPTION(EXTLDFLAGS, [${linker_flag}--no-undefined]) 2712 fi 2713 fi 2714 ]) 2715 2716 AS_CASE(["$target_os"], 2717 [sunos4*], [ 2718 LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR) lib$(RUBY_SO_NAME).so' 2719 ], 2720 [linux* | gnu* | k*bsd*-gnu | atheos* | kopensolaris*-gnu], [ 2721 LIBRUBY_DLDFLAGS='-Wl,-soname,lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR)'" $LDFLAGS_OPTDIR" 2722 LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR) lib$(RUBY_SO_NAME).so' 2723 if test "$load_relative" = yes; then 2724 LIBRUBY_RPATHFLAGS="'-Wl,-rpath,\$\${ORIGIN}/../${libdir_basename}'" 2725 LIBRUBY_RELATIVE=yes 2726 fi 2727 ], 2728 [freebsd*|dragonfly*], [ 2729 SOLIBS='$(LIBS)' 2730 LIBRUBY_SO='lib$(RUBY_SO_NAME).so.$(MAJOR)$(MINOR)' 2731 if test "$rb_cv_binary_elf" != "yes" ; then 2732 LIBRUBY_SO="$LIBRUBY_SO.\$(TEENY)" 2733 LIBRUBY_ALIASES='' 2734 fi 2735 ], 2736 [netbsd*], [ 2737 SOLIBS='$(LIBS)' 2738 LIBRUBY_SO='lib$(RUBY_SO_NAME).so.$(MAJOR)$(MINOR).$(TEENY)' 2739 LIBRUBY_DLDFLAGS='-Wl,-soname,lib$(RUBY_SO_NAME).so.$(MAJOR)$(MINOR)'" $LDFLAGS_OPTDIR" 2740 if test "$rb_cv_binary_elf" = yes; then # ELF platforms 2741 LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so.$(MAJOR)$(MINOR) lib$(RUBY_SO_NAME).so' 2742 else # a.out platforms 2743 LIBRUBY_ALIASES="" 2744 fi 2745 ], 2746 [openbsd*], [ 2747 SOLIBS='$(LIBS)' 2748 LIBRUBY_SO='lib$(RUBY_SO_NAME).so.$(MAJOR).'`expr ${MINOR} \* 10 + ${TEENY}` 2749 ], 2750 [solaris*], [ 2751 SOLIBS='$(LIBS)' 2752 LIBRUBY_SO='lib$(RUBY_SO_NAME).so.$(MAJOR)' 2753 LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR).$(TEENY) lib$(RUBY_SO_NAME).so' 2754 if test "$GCC" = yes; then 2755 LIBRUBY_DLDFLAGS="$DLDFLAGS "'-Wl,-h,$(@F)' 2756 else 2757 LIBRUBY_DLDFLAGS="$DLDFLAGS "'-h $(@F)' 2758 fi 2759 XLDFLAGS="$XLDFLAGS "'-R${libdir}' 2760 ], 2761 [hpux*], [ 2762 XLDFLAGS="$XLDFLAGS "'-Wl,+s,+b,$(libdir)' 2763 LIBRUBY_SO='lib$(RUBY_SO_NAME).sl.$(MAJOR).$(MINOR).$(TEENY)' 2764 LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).sl.$(MAJOR).$(MINOR) lib$(RUBY_SO_NAME).sl' 2765 ], 2766 [aix*], [ 2767 LIBRUBY_DLDFLAGS="${linker_flag}-bnoentry $XLDFLAGS $LDFLAGS_OPTDIR" 2768 LIBRUBYARG_SHARED='-L${libdir} -l${RUBY_SO_NAME}' 2769 SOLIBS='-lm -lc' 2770 ], 2771 [beos*], [ 2772 AS_CASE(["$target_cpu"], 2773 [powerpc*], [ 2774 LIBRUBY_DLDFLAGS="-f ruby.exp -lnet -lbe -lroot glue-noinit.a init_term_dyn.o start_dyn.o $LDFLAGS_OPTDIR" 2775 ]) 2776 ], 2777 [darwin*], [ 2778 RUBY_SO_NAME="$RUBY_SO_NAME"'.$(MAJOR).$(MINOR).$(TEENY)' 2779 LIBRUBY_LDSHARED='$(CC) -dynamiclib' 2780 if test "$load_relative" = yes; then 2781 libprefix="@executable_path/../${libdir_basename}" 2782 LIBRUBY_RELATIVE=yes 2783 fi 2784 LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-install_name '${libprefix}'/$(LIBRUBY_SO)' 2785 LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-current_version $(MAJOR).$(MINOR).$(TEENY)' 2786 LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-compatibility_version $(ruby_version)' 2787 if test "$visibility_option" = ld; then 2788 LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-Wl,-unexported_symbol,_Init_*' 2789 LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-Wl,-unexported_symbol,*_threadptr_*' 2790 fi 2791 LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "' $(XLDFLAGS)' 2792 LIBRUBY_SO='lib$(RUBY_SO_NAME).dylib' 2793 LIBRUBY_ALIASES='lib$(RUBY_BASE_NAME).$(MAJOR).$(MINOR).dylib lib$(RUBY_INSTALL_NAME).dylib' 2794 ], 2795 [interix*], [ 2796 LIBRUBYARG_SHARED='-L. -L${libdir} -l$(RUBY_SO_NAME)' 2797 ], 2798 [mingw*|cygwin*|mswin*], [ 2799 LIBRUBY_RELATIVE=yes 2800 ]) 2801], [ 2802 LIBRUBYARG_SHARED= 2803 2804 # enable PIE if possible 2805 pie= 2806 AS_CASE(["$target_os"], 2807 [haiku], [ 2808 # gcc supports PIE, but doesn't work correctly in Haiku 2809 pie=no 2810 ], 2811 [nacl], [ 2812 # -pie implies -shared for NaCl. 2813 pie=no 2814 ]) 2815 if test "$GCC" = yes -a -z "$EXTSTATIC" -a "x$pie" != xno; then 2816 RUBY_TRY_CFLAGS(-fPIE, [pie=yes], [pie=no]) 2817 if test "$pie" = yes; then 2818 # Use -fPIE when testing -pie. RUBY_TRY_LDFLAGS sets 2819 # $save_CFLAGS internally, so set other name here. 2820 save_CFLAGS_before_pie="$CFLAGS" 2821 CFLAGS="$CFLAGS -fPIE" 2822 2823 # gcc need -pie but clang need -Wl,-pie. 2824 for pie in -pie -Wl,-pie; do 2825 RUBY_TRY_LDFLAGS([$pie], [], [pie=]) 2826 if test "x$pie" != x; then 2827 RUBY_APPEND_OPTION(XCFLAGS, -fPIE) 2828 RUBY_APPEND_OPTION(XLDFLAGS, $pie) 2829 break 2830 fi 2831 done 2832 CFLAGS="$save_CFLAGS_before_pie" 2833 fi 2834 fi 2835]) 2836if test "$enable_rpath" = yes; then 2837 test -z "$LIBRUBY_RPATHFLAGS" || LIBRUBY_RPATHFLAGS="$LIBRUBY_RPATHFLAGS " 2838 LIBRUBY_RPATHFLAGS="$LIBRUBY_RPATHFLAGS${linker_flag}-R ${linker_flag}${libprefix} -L\$(libdir)" 2839 LIBRUBYARG_SHARED="$LIBRUBY_RPATHFLAGS $LIBRUBYARG_SHARED" 2840 LIBRUBYARG_STATIC="$LIBRUBY_RPATHFLAGS $LIBRUBYARG_STATIC" 2841fi 2842AC_SUBST(LIBRUBY_RELATIVE) 2843 2844LDFLAGS="-L. $LDFLAGS" 2845AC_SUBST(ARCHFILE) 2846 2847if test "$EXEEXT" = .exe; then 2848 EXECUTABLE_EXTS='".exe",".com",".cmd",".bat"' 2849 AC_DEFINE_UNQUOTED(EXECUTABLE_EXTS, $EXECUTABLE_EXTS) 2850 EXECUTABLE_EXTS=`echo $EXECUTABLE_EXTS | tr -d '"' | tr , ' '` 2851 AC_SUBST(EXECUTABLE_EXTS) 2852fi 2853 2854AC_ARG_ENABLE(dtrace, 2855 AS_HELP_STRING([--enable-dtrace], 2856 [enable DTrace for tracing inside ruby. enabled by default on systems having dtrace]), 2857 [enable_dtrace=$enableval], [enable_dtrace=auto]) 2858 2859if test "${enable_dtrace}" = "auto"; then 2860 if test x"$DTRACE" != x -a x"$cross_compiling" != xyes; then 2861 RUBY_DTRACE_AVAILABLE() 2862 enable_dtrace=$rb_cv_dtrace_available 2863 else 2864 enable_dtrace=no 2865 fi 2866fi 2867 2868LIBRUBY_A_OBJS='$(OBJS)' 2869if test "${enable_dtrace}" = "yes"; then 2870 if test -z "$DTRACE"; then 2871 AC_MSG_ERROR([dtrace(1) is missing]) 2872 elif test "$cross_compiling" = yes; then 2873 AC_MSG_ERROR([--enable-dtrace, however, cross compiling]) 2874 else 2875 RUBY_DTRACE_AVAILABLE() 2876 enable_dtrace=$rb_cv_dtrace_available 2877 if test "${enable_dtrace}" = "no"; then 2878 AC_MSG_ERROR([--enable-dtrace, however, USDT is not available]) 2879 fi 2880 RUBY_DTRACE_POSTPROCESS() 2881 if test "$rb_cv_prog_dtrace_g" = 'yes'; then 2882 DTRACE_OBJ='probes.$(OBJEXT)' 2883 DTRACE_GLOMMED_OBJ='ruby-glommed.$(OBJEXT)' 2884 LIBRUBY_A_OBJS='$(DTRACE_GLOMMED_OBJ)' 2885 fi 2886 AS_CASE("${target_os}", [freebsd*], [ 2887 # FreeBSD's dtrace requires libelf 2888 LIBS="-lelf $LIBS" 2889 ]) 2890 fi 2891 DTRACE_EXT=d 2892else 2893 DTRACE_EXT=dmyh 2894fi 2895AC_SUBST(DTRACE_EXT) 2896AC_SUBST(DTRACE_OBJ) 2897AC_SUBST(DTRACE_GLOMMED_OBJ) 2898AC_SUBST(LIBRUBY_A_OBJS) 2899 2900} 2901{ # build section 2902 2903dnl build rdoc index if requested 2904RDOCTARGET="" 2905CAPITARGET="" 2906AC_ARG_ENABLE(install-doc, 2907 AS_HELP_STRING([--disable-install-doc], [do not install neither rdoc indexes nor C API documents during install]), 2908 [install_doc=$enableval], [install_doc=yes]) 2909AC_ARG_ENABLE(install-rdoc, 2910 AS_HELP_STRING([--disable-install-rdoc], [do not install rdoc indexes during install]), 2911 [install_rdoc=$enableval], [install_rdoc=yes]) 2912AC_ARG_ENABLE(install-capi, 2913 AS_HELP_STRING([--disable-install-capi], [do not install C API documents during install]), 2914 [install_capi=$enableval], [install_capi=yes]) 2915 2916if test "$install_doc" != no; then 2917 if test "$install_rdoc" != no; then 2918 RDOCTARGET="rdoc" 2919 else 2920 RDOCTARGET="nodoc" 2921 fi 2922 if test "$install_capi" != no -a -n "$DOXYGEN"; then 2923 CAPITARGET="capi" 2924 else 2925 CAPITARGET="nodoc" 2926 fi 2927else 2928 RDOCTARGET="nodoc" 2929 CAPITARGET="nodoc" 2930fi 2931 2932AC_SUBST(RDOCTARGET) 2933AC_SUBST(CAPITARGET) 2934 2935AS_CASE(["$RDOCTARGET:$CAPITARGET"],[nodoc:nodoc],[INSTALLDOC=nodoc],[INSTALLDOC=all]) 2936AC_SUBST(INSTALLDOC) 2937 2938if test "$rb_with_pthread" = "yes"; then 2939 THREAD_MODEL=pthread 2940fi 2941AC_CACHE_CHECK([for prefix of external symbols], rb_cv_symbol_prefix, [ 2942 AC_TRY_COMPILE([extern void conftest_external(void) {}], [], [ 2943 rb_cv_symbol_prefix=`$NM conftest.$ac_objext | 2944 sed -n ['/.*T[ ]\([^ ]*\)conftest_external.*/!d;s//\1/p;q']` 2945 ], 2946 [rb_cv_symbol_prefix='']) 2947 test -n "$rb_cv_symbol_prefix" || rb_cv_symbol_prefix=NONE 2948]) 2949SYMBOL_PREFIX="$rb_cv_symbol_prefix" 2950test "x$SYMBOL_PREFIX" = xNONE && SYMBOL_PREFIX='' 2951DLNOBJ=dln.o 2952AC_ARG_ENABLE(dln, 2953 AC_HELP_STRING([--disable-dln], [disable dynamic link feature]), 2954 [test "$enableval" = yes || DLNOBJ=dmydln.o]) 2955AC_SUBST(DLNOBJ) 2956MINIDLNOBJ=dmydln.o 2957 2958AS_CASE(["$target_os"], 2959 [linux*], [ 2960 ], 2961 [netbsd*], [ 2962 RUBY_APPEND_OPTION(CFLAGS, -pipe) 2963 ], 2964 [darwin*], [ 2965 RUBY_APPEND_OPTION(CFLAGS, -pipe) 2966 ], 2967 [os2-emx], [ 2968 AC_LIBOBJ([os2]) 2969 CFLAGS="$CFLAGS -DOS2" 2970 LIBRUBY_A=`echo $LIBRUBY_A | sed 's/^lib//'` 2971 LIBRUBY_SO=`echo $LIBRUBY_SO | sed 's/^lib//'` 2972 LIBRUBY_ALIASES=`for i in $LIBRUBY_ALIASES; do echo "$i"; done | sed 's/^lib//'` 2973 ], 2974 [osf*], [ 2975 if test "$GCC" != "yes" ; then 2976 # compile something small: taint.c is fine for this. 2977 # the main point is the '-v' flag of 'cc'. 2978 AS_CASE(["`cc -v -I. -c main.c -o /tmp/main.o 2>&1`"], 2979 [*/gemc_cc*], [ # we have the new DEC GEM CC 2980 CFLAGS="$CFLAGS -oldc" 2981 ], 2982 [ # we have the old MIPS CC 2983 ]) 2984 # cleanup 2985 rm -f /tmp/main.o 2986 CFLAGS="$CFLAGS -std" 2987 fi 2988 ], 2989 [beos*], [ 2990 AS_CASE(["$target_cpu"],[powerpc*], [CFLAGS="$CFLAGS -relax_pointers"]) 2991 CPPFLAGS="$CPPFLAGS -I/boot/home/config/include" 2992 ], 2993 [cygwin*|mingw*], [ 2994 RUBY_SO_NAME="${RUBY_SO_NAME}"'$(MAJOR)$(MINOR)$(TEENY)' 2995 LIBRUBY_DLDFLAGS="${DLDFLAGS}"' -Wl,--out-implib=$(LIBRUBY)' 2996 AS_CASE(["$target_os"], 2997 [cygwin*], [ 2998 if test x"$enable_shared" = xyes; then 2999 LIBRUBY_SO='cyg$(RUBY_SO_NAME)'.dll 3000 LIBRUBY_DLDFLAGS="${LIBRUBY_DLDFLAGS}"' $(RUBYDEF)' 3001 fi 3002 ], 3003 [mingw*], [ 3004 RUBY_SO_NAME="${rb_cv_msvcrt}-${RUBY_SO_NAME}" 3005 if test x"${target_cpu}" != xi386; then 3006 RUBY_SO_NAME="${target_cpu}-${RUBY_SO_NAME}" 3007 fi 3008 if test x"$enable_shared" = xyes; then 3009 LIBRUBY_SO='$(RUBY_SO_NAME)'.dll 3010 LIBRUBY_DLDFLAGS="${LIBRUBY_DLDFLAGS}"' $(RUBYDEF)' 3011 fi 3012 EXPORT_PREFIX=' ' 3013 DLDFLAGS="${DLDFLAGS}"' $(DEFFILE)' 3014 AC_LIBOBJ([win32/win32]) 3015 AC_LIBOBJ([win32/file]) 3016 COMMON_LIBS=m 3017# COMMON_MACROS="WIN32_LEAN_AND_MEAN=" 3018 COMMON_HEADERS="winsock2.h windows.h" 3019 THREAD_MODEL=win32 3020 PLATFORM_DIR=win32 3021 ]) 3022 LIBRUBY_ALIASES='' 3023 FIRSTMAKEFILE=GNUmakefile:cygwin/GNUmakefile.in 3024 SOLIBS='$(LIBS)' 3025 if test x"$enable_shared" = xyes; then 3026 LIBRUBY='lib$(RUBY_SO_NAME).dll.a' 3027 else 3028 LIBRUBY_SO=dummy 3029 LIBRUBY='lib$(RUBY_SO_NAME).a' 3030 LIBRUBYARG='-l$(RUBY_SO_NAME)' 3031 fi 3032 ], 3033 [hpux*], [ 3034 AS_CASE(["$YACC"],[*yacc*], [ 3035 XCFLAGS="$XCFLAGS -DYYMAXDEPTH=300" 3036 YACC="$YACC -Nl40000 -Nm40000" 3037 ])], 3038 [nacl], [ 3039 FIRSTMAKEFILE=GNUmakefile:nacl/GNUmakefile.in 3040 ]) 3041MINIOBJS="$MINIDLNOBJ" 3042 3043AS_CASE(["$THREAD_MODEL"], 3044[pthread], [AC_CHECK_HEADERS(pthread.h)], 3045[win32], [], 3046[""], [AC_MSG_ERROR(thread model is missing)], 3047 [AC_MSG_ERROR(unknown thread model $THREAD_MODEL)]) 3048 3049AC_ARG_ENABLE(debug-env, 3050 AS_HELP_STRING([--enable-debug-env], [enable RUBY_DEBUG environment variable]), 3051 [AC_DEFINE(RUBY_DEBUG_ENV)]) 3052 3053AS_CASE(["$FIRSTMAKEFILE"], [*GNUmakefile:*], [gnumake=yes], [ 3054 AC_MSG_CHECKING([if ${MAKE-make} is GNU make]) 3055 mkdir conftest.dir 3056 echo "all:; @echo yes" > conftest.dir/GNUmakefile 3057 echo "all:; @echo no" > conftest.dir/Makefile 3058 gnumake=`(cd conftest.dir; ${MAKE-make})` 3059 rm -fr conftest.dir 3060 AS_CASE(["$gnumake"], 3061 [*yes*], [ 3062 echo '@%:@ -*- makefile -*-' > GNUmakefile 3063 echo 'override MFLAGS := $(filter-out -j%,$(MFLAGS))' >> GNUmakefile 3064 echo "include Makefile" >> GNUmakefile 3065 echo "-include uncommon.mk" >> GNUmakefile 3066 gnumake=yes], 3067 [ 3068 gnumake=no]) 3069 AC_MSG_RESULT($gnumake) 3070]) 3071AS_IF([test "$gnumake" = yes], [ NULLCMD=: ], [ 3072 AC_MSG_CHECKING([for safe null command for ${MAKE-make}]) 3073 mkdir conftest.dir 3074 NULLCMD= 3075 for cmd in : true; do 3076 echo 'A=1' > conftest.dir/Makefile 3077 echo 'B=$(A:1=@'$cmd')' >> conftest.dir/Makefile 3078 echo 'all:; $B 1 2 3 4 5 6 7 8 9' >> conftest.dir/Makefile 3079 if (cd conftest.dir; ${MAKE-make} >/dev/null 2>/dev/null); then 3080 NULLCMD=$cmd 3081 break 3082 fi 3083 done 3084 rm -fr conftest.dir 3085 if test -z "$NULLCMD"; then 3086 AC_MSG_ERROR(no candidate for safe null command) 3087 fi 3088 AC_MSG_RESULT($NULLCMD) 3089]) 3090AC_SUBST(NULLCMD) 3091 3092if test "${universal_binary-no}" = yes ; then 3093 AC_CACHE_CHECK([for architecture macros], rb_cv_architecture_macros, [ 3094 mv confdefs.h confdefs1.h 3095 : > confdefs.h 3096 AC_TRY_COMPILE([@%:@if defined __`echo ${universal_archnames} | 3097 sed 's/=[^ ]*//g;s/ /__ || defined __/g'`__ 3098@%:@else 3099@%:@error 3100>>>>>><<<<<< 3101@%:@endif], [], 3102[ 3103 rb_cv_architecture_macros=yes 3104 mv -f confdefs1.h confdefs.h 3105], [ 3106 rb_cv_architecture_macros=no 3107 archflagpat=`eval echo '"'"${ARCH_FLAG}"'"' | sed 's/[[][|.*]]/\\&/g'` 3108 new_cflags=`echo "$CFLAGS" | sed "s|$archflagpat"'||'` 3109 for archs in ${universal_archnames}; do 3110 cpu=${archs@%:@*=} 3111 archs=${archs%=*} 3112 CFLAGS="$new_cflags -arch $archs" 3113 archs="__${archs}__" 3114 AC_MSG_CHECKING([for macro ${archs} on ${cpu}]) 3115 AC_TRY_COMPILE([@%:@ifndef ${archs} 3116@%:@error 3117@%:@endif], [], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]) 3118 done 3119 mv -f confdefs1.h confdefs.h 3120 AC_MSG_ERROR([failed]) 3121 ])]) 3122fi 3123 3124AC_CHECK_FUNC(memmem, [ 3125 AC_CACHE_CHECK(for broken memmem, rb_cv_broken_memmem, [ 3126 AC_TRY_RUN([ 3127#include <string.h> 3128 3129int 3130main() 3131{ 3132 char *str = "hogefugafoobar"; 3133 char *rs = "foo"; 3134 char *empty = ""; 3135 char *p; 3136 3137 p = memmem(str, strlen(str), rs, strlen(rs)); 3138 if (p == str+8) { 3139 p = memmem(str, strlen(str), empty, strlen(empty)); 3140 if (p == str) 3141 return 0; 3142 else 3143 return 1; 3144 } 3145 else { 3146 return 1; 3147 } 3148} 3149 ], 3150 rb_cv_broken_memmem=no, 3151 rb_cv_broken_memmem=yes, 3152 rb_cv_broken_memmem=yes) 3153 ]) 3154 if test "$rb_cv_broken_memmem" = no; then 3155 AC_DEFINE(HAVE_MEMMEM, 1) 3156 fi 3157]) 3158 3159 3160CPPFLAGS="$CPPFLAGS "'$(DEFS)' 3161test -z "$CPPFLAGS" || CPPFLAGS="$CPPFLAGS "; CPPFLAGS="$CPPFLAGS"'${cppflags}' 3162if test -n "${cflags+set}"; then 3163 cflagspat=`eval echo '"'"${cflags}"'"' | sed 's/[[][|.*]]/\\&/g;s/^ */ /;s/^ *$/ /'` 3164 CFLAGS=`echo " $CFLAGS " | sed "s|$cflagspat"'|${cflags}|;s/^ *//;s/ *$//'` 3165fi 3166if test -n "${cxxflags+set}"; then 3167 cxxflagspat=`eval echo '"'"${cxxflags}"'"' | sed 's/[[][|.*]]/\\&/g;s/^ */ /;s/^ *$/ /'` 3168 CXXFLAGS=`echo " $CXXFLAGS " | sed "s|$cxxflagspat"'|${cxxflags}|;s/^ *//;s/ *$//'` 3169fi 3170if test "${ARCH_FLAG}"; then 3171 archflagpat=`eval echo '"'"${ARCH_FLAG}"'"' | sed 's/[[][|.*]]/\\&/g'` 3172 CFLAGS=`echo "$CFLAGS" | sed "s| *$archflagpat"'||'` 3173 CXXFLAGS=`echo "$CXXFLAGS" | sed "s| *$archflagpat"'||'` 3174 LDFLAGS=`echo "$LDFLAGS" | sed "s| *$archflagpat"'||'` 3175fi 3176warnflags="$rb_cv_warnflags" 3177AC_SUBST(cppflags, [])dnl 3178AC_SUBST(cflags, ["$orig_cflags "'${optflags} ${debugflags} ${warnflags}'])dnl 3179AC_SUBST(cxxflags, ["$orig_cxxflags "'${optflags} ${debugflags} ${warnflags}'])dnl 3180AC_SUBST(optflags)dnl 3181AC_SUBST(debugflags)dnl 3182AC_SUBST(warnflags)dnl 3183AC_SUBST(strict_warnflags)dnl 3184AC_SUBST(XCFLAGS)dnl 3185AC_SUBST(XLDFLAGS)dnl 3186AC_SUBST(EXTLDFLAGS)dnl 3187AC_SUBST(EXTDLDFLAGS)dnl 3188AC_SUBST(LIBRUBY_LDSHARED) 3189AC_SUBST(LIBRUBY_DLDFLAGS) 3190AC_SUBST(RUBY_INSTALL_NAME) 3191AC_SUBST(rubyw_install_name) 3192AC_SUBST(RUBYW_INSTALL_NAME) 3193AC_SUBST(RUBY_SO_NAME) 3194AC_SUBST(LIBRUBY_A) 3195AC_SUBST(LIBRUBY_SO) 3196AC_SUBST(LIBRUBY_ALIASES) 3197AC_SUBST(LIBRUBY) 3198AC_SUBST(LIBRUBYARG) 3199AC_SUBST(LIBRUBYARG_STATIC) 3200AC_SUBST(LIBRUBYARG_SHARED) 3201AC_SUBST(SOLIBS) 3202AC_SUBST(DLDLIBS) 3203AC_SUBST(ENABLE_SHARED) 3204AC_SUBST(MAINLIBS) 3205AC_SUBST(COMMON_LIBS) 3206AC_SUBST(COMMON_MACROS) 3207AC_SUBST(COMMON_HEADERS) 3208AC_SUBST(EXPORT_PREFIX) 3209AC_SUBST(SYMBOL_PREFIX) 3210AC_SUBST(MINIOBJS) 3211AC_SUBST(THREAD_MODEL) 3212AC_SUBST(PLATFORM_DIR) 3213 3214MAKEFILES="Makefile `echo $FIRSTMAKEFILE | sed 's/:.*//'`" 3215MAKEFILES="`echo $MAKEFILES`" 3216AC_SUBST(MAKEFILES) 3217 3218ri_prefix= 3219test "$program_prefix" != NONE && 3220 ri_prefix=$program_prefix 3221 3222ri_suffix= 3223test "$program_suffix" != NONE && 3224 ri_suffix=$program_suffix 3225 3226RUBY_INSTALL_NAME="${ri_prefix}"'$(RUBY_BASE_NAME)'"${ri_suffix}" 3227AS_CASE(["$target_os"], 3228 [cygwin*|mingw*], [ 3229 RUBYW_INSTALL_NAME="${ri_prefix}"'$(RUBYW_BASE_NAME)'"${ri_suffix}" 3230 rubyw_install_name='$(RUBYW_INSTALL_NAME)' 3231 ]) 3232 3233AC_ARG_ENABLE(multiarch, 3234 AS_HELP_STRING([--enable-multiarch], [enable multiarch compatible directories]), 3235 [multiarch=], [unset multiarch]) 3236 3237archlibdir='${libdir}/${arch}' 3238sitearchlibdir='${libdir}/${sitearch}' 3239archincludedir='${includedir}/${arch}' 3240sitearchincludedir='${includedir}/${sitearch}' 3241 3242shvar_to_cpp() { 3243 var="$1" val="$2" 3244 exec_prefix_pat="`echo \"${exec_prefix}\" | sed 's/\\./\\\\./g'`" 3245 arch_pat="`echo \"${arch}\" | sed 's/\\./\\\\./g'`" 3246 sitearch_pat="`echo \"${sitearch}\" | sed 's/\\./\\\\./g'`" 3247 val="`echo '\"'\"${val}\"'\"' | 3248 sed \ 3249 -e 's/\${\([[A-Z][A-Z_]]*\)}/\"\1\"/g' \ 3250 -e 's|\${sitearchlibdir}|'\"${sitearchlibdir}|g\" \ 3251 -e 's|\${sitearchincludedir}|'\"${sitearchincludedir}|g\" \ 3252 -e 's|\${archlibdir}|'\"${archlibdir}|g\" \ 3253 -e 's|\${archincludedir}|'\"${archincludedir}|g\" \ 3254 -e 's|\${libdir}|'\"${libdir}|g\" \ 3255 -e 's/\${ruby_version}/\"RUBY_LIB_VERSION\"/g' \ 3256 -e 's/\${arch}/\"arch\"/g' \ 3257 -e 's/\${sitearch}/\"arch\"/g' \ 3258 -e 's/\${vendorarchdir}/\"RUBY_VENDOR_ARCH_LIB\"/g' \ 3259 -e 's/\${sitearchdir}/\"RUBY_SITE_ARCH_LIB\"/g' \ 3260 -e 's/\${vendorlibdir}/\"RUBY_VENDOR_LIB2\"/g' \ 3261 -e 's/\${sitelibdir}/\"RUBY_SITE_LIB2\"/g' \ 3262 -e 's/\${vendordir}/\"RUBY_VENDOR_LIB\"/g' \ 3263 -e 's/\${sitedir}/\"RUBY_SITE_LIB\"/g' \ 3264 -e 's/\${rubylibdir}/\"RUBY_LIB\"/g' \ 3265 -e 's/\${rubylibprefix}/\"RUBY_LIB_PREFIX\"/g' \ 3266 -e 's/\${rubyarchprefix}/\"RUBY_ARCH_PREFIX_FOR(arch)\"/g' \ 3267 -e 's/\${rubysitearchprefix}/\"RUBY_SITEARCH_PREFIX_FOR(arch)\"/g' \ 3268 -e 's/\${exec_prefix}/\"RUBY_EXEC_PREFIX\"/g' \ 3269 -e \"s|${exec_prefix_pat}/|\"'\"RUBY_EXEC_PREFIX\"/|g' \ 3270 -e \"s|${arch_pat}|\"'\"arch\"|g' \ 3271 -e \"s|${sitearch_pat}|\"'\"sitearch\"|g' \ 3272 -e 's|^\\\"NONE/|RUBY_EXEC_PREFIX\\\"/|' \ 3273 -e 's|^\\\"NONE\\\"|\\\"'\"${prefix}\"'\\\"|' \ 3274 -e 's/^\\\"\\\"\(.\)/\1/;s/\(.\)\\\"\\\"$/\1/' 3275 `" 3276 eval $var='"$val"' 3277} 3278 3279unexpand_shvar() { 3280 var=$1 n="" v="" expr="" 3281 shift 3282 test "$#" -eq 0 && return 3283 for n do 3284 eval v='"$'$n'"' 3285 v="`echo \"$v\" | sed -e ['s/${[^${}\"]*}/\"&\"/g'] -e ['s/[][$|.\\?*]/\\\\&/g']`" 3286 if test -n "$v"; then 3287 expr=["${expr};s|"'\("[^$"]*\)'"$v|\\1\${$n}\"|g"] 3288 AS_CASE(["$v"], [*'${'*'}'*], [expr=["$expr;s|$v|\"\${$n}\"|g"]]) 3289 fi 3290 done 3291 expr=['s/${[^${}"]*}/"&"/g;'"${expr};"'s/"\(\${[^${}"]*}\)"/\1/g'] 3292 eval $var='"`echo \"\\\"${'$var'}\\\"\" | sed \"$expr;s/\\\"//g\"`"' 3293} 3294 3295rubylibprefix='${libdir}/${RUBY_BASE_NAME}' 3296AC_ARG_WITH(rubylibprefix, 3297 AS_HELP_STRING([--with-rubylibprefix=DIR], [prefix for ruby libraries [[LIBDIR/RUBY_BASE_NAME]]]), 3298 [if test "x$withval" = xno; then 3299 AC_MSG_ERROR([No ruby, No libprefix]) 3300 fi 3301 rubylibprefix="$withval"]) 3302AC_SUBST(rubylibprefix) 3303rubylibdir='${rubylibprefix}/${ruby_version}' 3304rubyarchdir=${multiarch+'${rubyarchprefix}/${ruby_version}'}${multiarch-'${rubylibdir}/${arch}'} 3305 3306rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'} 3307AC_ARG_WITH(rubyarchprefix, 3308 AS_HELP_STRING([--with-rubyarchprefix=DIR], 3309 [prefix for architecture dependent ruby libraries [[RUBYLIBPREFIX/ARCH]]]), 3310 [rubyarchprefix="$withval"]) 3311AC_SUBST(rubyarchprefix) 3312 3313rubysitearchprefix=${multiarch+'${sitearchlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${sitearch}'} 3314AC_ARG_WITH(rubysitearchprefix, 3315 AS_HELP_STRING([--with-rubysitearchprefix=DIR], 3316 [prefix for architecture dependent site libraries [[RUBYLIBPREFIX/SITEARCH]]]), 3317 [rubysitearchprefix="$withval"]) 3318AC_SUBST(rubysitearchprefix) 3319 3320RI_BASE_NAME=`echo ${RUBY_BASE_NAME} | sed 's/ruby/ri/'` 3321ridir='${datarootdir}/${RI_BASE_NAME}' 3322AC_ARG_WITH(ridir, 3323 AS_HELP_STRING([--with-ridir=DIR], [ri documentation [[DATAROOTDIR/ri]]]), 3324 [ridir=$withval]) 3325AC_SUBST(ridir) 3326AC_SUBST(RI_BASE_NAME) 3327 3328AC_ARG_WITH(ruby-version, 3329 AS_HELP_STRING([--with-ruby-version=STR], [ruby version string for version specific directories [[full]] (full|minor|STR)]), 3330 [ruby_version=$withval], 3331 [ruby_version=full]) 3332unset RUBY_LIB_VERSION 3333unset RUBY_LIB_VERSION_STYLE 3334AS_CASE(["$ruby_version"], 3335 [full], [RUBY_LIB_VERSION_STYLE='3 /* full */'], 3336 [minor], [RUBY_LIB_VERSION_STYLE='2 /* minor */']) 3337if test ${RUBY_LIB_VERSION_STYLE+set}; then 3338 { 3339 echo "#define RUBY_LIB_VERSION_STYLE $RUBY_LIB_VERSION_STYLE" 3340 echo '#define STRINGIZE(x) x' 3341 test -f revision.h -o -f "${srcdir}/revision.h" || echo '#define RUBY_REVISION 0' 3342 echo '#include "verconf.h"' 3343 echo '#include "version.h"' 3344 echo 'ruby_version=RUBY_LIB_VERSION' 3345 } > conftest.c 3346 test -f verconf.h || > verconf.h 3347 ruby_version="`$CPP -I. -I"${srcdir}" -I"${srcdir}/include" conftest.c | sed '/^ruby_version=/!d;s/ //g'`" 3348 eval $ruby_version 3349else 3350 RUBY_LIB_VERSION="\"${ruby_version}\"" 3351fi 3352 3353AC_ARG_WITH(sitedir, 3354 AS_HELP_STRING([--with-sitedir=DIR], [site libraries in DIR [[RUBY_LIB_PREFIX/site_ruby]], "no" to disable site directory]), 3355 [sitedir=$withval], 3356 [sitedir='${rubylibprefix}/site_ruby']) 3357sitelibdir='${sitedir}/${ruby_version}' 3358 3359AC_ARG_WITH(sitearchdir, 3360 AS_HELP_STRING([--with-arch-sitedir=DIR], 3361 [architecture dependent site libraries in DIR [[SITEDIR/SITEARCH]], "no" to disable site directory]), 3362 [sitearchdir=$withval], 3363 [sitearchdir=${multiarch+'${rubysitearchprefix}/site_ruby/${ruby_version}'}${multiarch-'${sitelibdir}/${sitearch}'}]) 3364 3365AC_ARG_WITH(vendordir, 3366 AS_HELP_STRING([--with-vendordir=DIR], [vendor libraries in DIR [[RUBY_LIB_PREFIX/vendor_ruby]], "no" to disable vendor directory]), 3367 [vendordir=$withval], 3368 [vendordir='${rubylibprefix}/vendor_ruby']) 3369vendorlibdir='${vendordir}/${ruby_version}' 3370 3371AC_ARG_WITH(vendorarchdir, 3372 AS_HELP_STRING([--with-arch-vendordir=DIR], 3373 [architecture dependent vendor libraries in DIR [[VENDORDIR/SITEARCH]], "no" to disable vendor directory]), 3374 [vendorarchdir=$withval], 3375 [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby/${ruby_version}'}${multiarch-'${vendorlibdir}/${sitearch}'}]) 3376 3377unexpand_shvar rubylibprefix exec_prefix libdir RUBY_BASE_NAME 3378unexpand_shvar rubyarchprefix exec_prefix libdir arch RUBY_BASE_NAME archlibdir rubylibprefix 3379unexpand_shvar rubysitearchprefix exec_prefix libdir sitearch arch RUBY_BASE_NAME archlibdir sitearchlibdir rubylibprefix 3380if test "${LOAD_RELATIVE+set}"; then 3381 AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) 3382 RUBY_EXEC_PREFIX='""' 3383else 3384 shvar_to_cpp RUBY_EXEC_PREFIX "${exec_prefix}" 3385fi 3386shvar_to_cpp RUBY_LIB_PREFIX "${rubylibprefix}" 3387shvar_to_cpp RUBY_ARCH_PREFIX_FOR "${rubyarchprefix}" 3388shvar_to_cpp RUBY_SITEARCH_PREFIX_FOR "${rubysitearchprefix}" 3389shvar_to_cpp RIDIR "${ridir}" 3390unexpand_shvar exec_prefix prefix 3391 3392if test ${RUBY_LIB_VERSION_STYLE+set}; then 3393 AC_DEFINE_UNQUOTED(RUBY_LIB_VERSION_STYLE, $RUBY_LIB_VERSION_STYLE !<verconf>!) 3394else 3395 AC_DEFINE_UNQUOTED(RUBY_LIB_VERSION, [$RUBY_LIB_VERSION] !<verconf>!) 3396fi 3397AC_DEFINE_UNQUOTED(RUBY_EXEC_PREFIX, ${RUBY_EXEC_PREFIX}) 3398AC_DEFINE_UNQUOTED(RUBY_LIB_PREFIX, ${RUBY_LIB_PREFIX} !<verconf>!) 3399AC_DEFINE_UNQUOTED(RUBY_ARCH_PREFIX_FOR(arch), ${RUBY_ARCH_PREFIX_FOR} !<verconf>!) 3400AC_DEFINE_UNQUOTED(RUBY_SITEARCH_PREFIX_FOR(arch), ${RUBY_SITEARCH_PREFIX_FOR} !<verconf>!) 3401 3402shvar_to_cpp RUBY_LIB "${rubylibdir}" 3403if test "x${RUBY_LIB}" != 'xRUBY_LIB_PREFIX"/"RUBY_LIB_VERSION'; then 3404 AC_DEFINE_UNQUOTED(RUBY_LIB, ${RUBY_LIB} !<verconf>!) 3405fi 3406shvar_to_cpp RUBY_ARCH_LIB_FOR "${rubyarchdir}" 3407AC_DEFINE_UNQUOTED(RUBY_ARCH_LIB_FOR(arch), ${RUBY_ARCH_LIB_FOR} !<verconf>!) 3408if test "x$sitedir" = xno; then 3409 AC_DEFINE(NO_RUBY_SITE_LIB, [] !<verconf>!) 3410else 3411 shvar_to_cpp RUBY_SITE_LIB "${sitedir}" 3412 AC_DEFINE_UNQUOTED(RUBY_SITE_LIB, ${RUBY_SITE_LIB} !<verconf>!) 3413 shvar_to_cpp RUBY_SITE_ARCH_LIB_FOR "${sitearchdir}" 3414 AC_DEFINE_UNQUOTED(RUBY_SITE_ARCH_LIB_FOR(arch), ${RUBY_SITE_ARCH_LIB_FOR} !<verconf>!) 3415fi 3416if test "x$vendordir" = xno; then 3417 AC_DEFINE(NO_RUBY_VENDOR_LIB, [] !<verconf>!) 3418else 3419 shvar_to_cpp RUBY_VENDOR_LIB "${vendordir}" 3420 AC_DEFINE_UNQUOTED(RUBY_VENDOR_LIB, ${RUBY_VENDOR_LIB} !<verconf>!) 3421 shvar_to_cpp RUBY_VENDOR_ARCH_LIB_FOR "${vendorarchdir}" 3422 AC_DEFINE_UNQUOTED(RUBY_VENDOR_ARCH_LIB_FOR(arch), ${RUBY_VENDOR_ARCH_LIB_FOR} !<verconf>!) 3423fi 3424 3425AC_SUBST(archlibdir)dnl 3426AC_SUBST(sitearchlibdir)dnl 3427AC_SUBST(archincludedir)dnl 3428AC_SUBST(sitearchincludedir)dnl 3429AC_SUBST(arch)dnl 3430AC_SUBST(sitearch)dnl 3431AC_SUBST(ruby_version)dnl 3432AC_SUBST(rubylibdir)dnl 3433AC_SUBST(rubyarchdir)dnl 3434AC_SUBST(sitedir)dnl 3435AC_SUBST(sitelibdir)dnl 3436AC_SUBST(sitearchdir)dnl 3437AC_SUBST(vendordir)dnl 3438AC_SUBST(vendorlibdir)dnl 3439AC_SUBST(vendorarchdir)dnl 3440 3441configure_args=$ac_configure_args 3442AC_SUBST(configure_args)dnl 3443 3444if test "${universal_binary-no}" = yes ; then 3445 arch="universal-${target_os}" 3446 AC_CACHE_CHECK(whether __ARCHITECTURE__ is available, rb_cv_architecture_available, 3447 AC_TRY_COMPILE([const char arch[] = __ARCHITECTURE__;], [puts(arch);], 3448 [rb_cv_architecture_available=yes], [rb_cv_architecture_available=no])) 3449 if test "${rb_cv_architecture_available}" = yes; then 3450 AC_DEFINE_UNQUOTED(RUBY_PLATFORM_CPU, __ARCHITECTURE__ !<verconf>!) 3451 else 3452 for archs in ${universal_archnames}; do 3453 cpu=`echo $archs | sed 's/.*=//'` 3454 archs=`echo $archs | sed 's/=.*//'` 3455 RUBY_DEFINE_IF([defined __${archs}__], RUBY_PLATFORM_CPU, ["${cpu}"]) 3456 done 3457 fi 3458 ints='long int short' 3459 test "$ac_cv_type_long_long" = yes && ints="'long long' $ints" 3460 AC_SUBST(UNIVERSAL_ARCHNAMES, "${universal_archnames}") 3461 AC_SUBST(UNIVERSAL_INTS, "${ints}") 3462 AC_DEFINE_UNQUOTED(RUBY_PLATFORM_OS, "${target_os}" !<verconf>!) 3463 AC_DEFINE_UNQUOTED(RUBY_ARCH, "universal-"RUBY_PLATFORM_OS !<verconf>!) 3464 AC_DEFINE_UNQUOTED(RUBY_PLATFORM, "universal."RUBY_PLATFORM_CPU"-"RUBY_PLATFORM_OS !<verconf>!) 3465else 3466 arch="${target_cpu}-${target_os}" 3467 AC_DEFINE_UNQUOTED(RUBY_PLATFORM, "${arch}" !<verconf>!) 3468fi 3469 3470unset sitearch 3471AS_CASE(["$target_os"],[mingw*],[sitearch="$target_cpu-$rb_cv_msvcrt"]) 3472test ${sitearch+set} && AC_DEFINE_UNQUOTED(RUBY_SITEARCH, "${sitearch}" !<verconf>!) 3473: ${sitearch='${arch}'} 3474 3475AC_ARG_WITH(search-path, 3476 AS_HELP_STRING([--with-search-path=DIR], [specify the additional search path]), 3477 [search_path=$withval]) 3478if test "$search_path" != ""; then 3479 AC_DEFINE_UNQUOTED(RUBY_SEARCH_PATH,"$search_path" !<verconf>!) 3480fi 3481 3482AC_ARG_WITH(rubyhdrdir, 3483 AS_HELP_STRING([--with-rubyhdrdir=DIR], [core headers in DIR [[INCLUDEDIR/RUBY_BASE_NAME-RUBY_VERSION]]]), 3484 [rubyhdrdir=$withval], 3485 [rubyhdrdir='${includedir}/${RUBY_VERSION_NAME}']) 3486 3487AC_ARG_WITH(rubyarchhdrdir, 3488 AS_HELP_STRING([--with-arch-rubyhdrdir=DIR], 3489 [architecture dependent core headers in DIR [[$(rubyhdrdir)/$(arch)]]]), 3490 [rubyarchhdrdir=$withval], 3491 [rubyarchhdrdir=${multiarch+'${archincludedir}/${RUBY_VERSION_NAME}'}${multiarch-'${rubyhdrdir}/${arch}'}]) 3492 3493AC_ARG_WITH(sitehdrdir, 3494 AS_HELP_STRING([--with-sitehdrdir=DIR], [core site headers in DIR [[RUBYHDRDIR/site_ruby]]]), 3495 [sitehdrdir=$withval], 3496 [sitehdrdir='${rubyhdrdir}/site_ruby']) 3497 3498AC_ARG_WITH(sitearchhdrdir, 3499 AS_HELP_STRING([--with-arch-sitehdrdir=DIR], 3500 [architecture dependent core site headers in DIR [[RUBYHDRDIR/site_ruby]]]), 3501 [sitearchhdrdir=$withval], 3502 [sitearchhdrdir=${multiarch+'${sitearchincludedir}/${RUBY_VERSION_NAME}/site_ruby'}${multiarch-'${sitehdrdir}/${sitearch}'}]) 3503 3504AC_ARG_WITH(vendorhdrdir, 3505 AS_HELP_STRING([--with-vendorhdrdir=DIR], [core vendor headers in DIR [[RUBYHDRDIR/vendor_ruby]]]), 3506 [vendorhdrdir=$withval], 3507 [vendorhdrdir='${rubyhdrdir}/vendor_ruby']) 3508 3509AC_ARG_WITH(vendorarchhdrdir, 3510 AS_HELP_STRING([--with-arch-vendorhdrdir=DIR], 3511 [architecture dependent core vendor headers in DIR [[RUBYHDRDIR/vendor_ruby]]]), 3512 [vendorarchhdrdir=$withval], 3513 [vendorarchhdrdir=${multiarch+'${sitearchincludedir}/${RUBY_VERSION_NAME}/vendor_ruby'}${multiarch-'${vendorhdrdir}/${sitearch}'}]) 3514 3515AC_SUBST(rubyhdrdir)dnl 3516AC_SUBST(sitehdrdir)dnl 3517AC_SUBST(vendorhdrdir)dnl 3518AC_SUBST(rubyarchhdrdir)dnl 3519AC_SUBST(sitearchhdrdir)dnl 3520AC_SUBST(vendorarchhdrdir)dnl 3521 3522AC_ARG_WITH(mantype, 3523 AS_HELP_STRING([--with-mantype=TYPE], [specify man page type; TYPE is one of man and doc]), 3524 [ 3525 AS_CASE(["$withval"], 3526 [man|doc], [MANTYPE=$withval], 3527 [AC_MSG_ERROR(invalid man type: $withval)]) 3528 ]) 3529if test -z "$MANTYPE"; then 3530 AC_PATH_PROGS(NROFF, nroff awf, /bin/false, "/usr/bin:/usr/ucb") 3531 if ${NROFF} -mdoc ${srcdir}/man/ruby.1 >/dev/null 2>&1; then 3532 MANTYPE=doc 3533 else 3534 MANTYPE=man 3535 fi 3536fi 3537AC_SUBST(MANTYPE) 3538 3539AC_ARG_ENABLE(rubygems, 3540 AS_HELP_STRING([--disable-rubygems], [disable rubygems by default]), 3541 [enable_rubygems="$enableval"], [enable_rubygems=yes]) 3542if test x"$enable_rubygems" = xno; then 3543 AC_DEFINE(DISABLE_RUBYGEMS, 1) 3544 USE_RUBYGEMS=NO 3545else 3546 USE_RUBYGEMS=YES 3547fi 3548AC_SUBST(USE_RUBYGEMS) 3549 3550arch_hdrdir="${EXTOUT}/include/${arch}/ruby" 3551AS_MKDIR_P("${arch_hdrdir}") 3552config_h="${arch_hdrdir}/config.h" 3553guard=INCLUDE_RUBY_CONFIG_H 3554{ 3555 echo "#ifndef $guard" 3556 echo "#define $guard 1" 3557 grep -v "^#define PACKAGE_" confdefs.h | grep -v ' !<verconf>!$' 3558 echo "#endif /* $guard */" 3559} | tr -d '\015' | 3560${srcdir}/tool/ifchange "${config_h}" - 3561sed -n 's/ !<verconf>!$//p' confdefs.h | ${srcdir}/tool/ifchange verconf.h - 3562tr -d '\015' < largefile.h > confdefs.h 3563rm largefile.h 3564 3565BUILTIN_ENCS=["`sed -n -e '/^BUILTIN_ENCS[ ]*=/{' \ 3566 -e s/// -e :l -e '/\\\\$/N' -e 's/\\\\\\n/ /' -e 't l' -e p \ 3567 -e '}' "${srcdir}/enc/Makefile.in"`"] 3568BUILTIN_ENCOBJS= 3569for e in $BUILTIN_ENCS; do BUILTIN_ENCOBJS="$BUILTIN_ENCOBJS `basename $e .c`"'.$(OBJEXT)'; done 3570AC_SUBST(BUILTIN_ENCOBJS) 3571 3572BUILTIN_TRANSES=["`sed -n -e '/^BUILTIN_TRANSES[ ]*=/{' \ 3573 -e s/// -e :l -e '/\\\\$/N' -e 's/\\\\\\n/ /' -e 't l' -e p \ 3574 -e '}' "${srcdir}/enc/Makefile.in"`"] 3575BUILTIN_TRANSSRCS= 3576BUILTIN_TRANSOBJS= 3577for e in $BUILTIN_TRANSES; do 3578 BUILTIN_TRANSSRCS="$BUILTIN_TRANSSRCS `basename $e .trans`"'.c'; 3579 BUILTIN_TRANSOBJS="$BUILTIN_TRANSOBJS `basename $e .trans`"'.$(OBJEXT)'; 3580done 3581AC_SUBST(BUILTIN_TRANSSRCS) 3582AC_SUBST(BUILTIN_TRANSOBJS) 3583 3584PACKAGE=$RUBY_BASE_NAME 3585AC_SUBST(PACKAGE) 3586AC_MSG_RESULT($PACKAGE library version = $ruby_version) 3587 3588AS_CASE([" $CPP "], [*" $CC "*], [CPP=`echo " $CPP " | sed "s| $CC |"' $(CC) |;s/^ *//;s/ *$//'`]) 3589 3590AC_CONFIG_FILES($FIRSTMAKEFILE) 3591AC_CONFIG_FILES(Makefile, [ 3592 tmpmk=confmk$$.tmp 3593 { 3594 if test ${VCS+set}; then 3595 : 3596 elif svn info "$srcdir" > /dev/null 2>&1; then 3597 VCS='svn' 3598 elif test -d "$srcdir/.git/svn"; then 3599 VCS='git svn' 3600 elif test -d "$srcdir/.git"; then 3601 VCS='git' 3602 else 3603 VCS='echo cannot' 3604 fi 3605 AS_CASE("$VCS", 3606 [svn], [VCSUP='$(VCS) up $(SVNUPOPTIONS)'], 3607 ["git svn"], [VCSUP='$(VCS) rebase $(GITSVNREBASEOPTIONS)'], 3608 [git], [VCSUP='$(VCS) pull $(GITPULLOPTIONS)'], 3609 [VCSUP='$(VCS)']) 3610 sed '/^MISSING/s/\$U\././g;/^VCS *=/s#@VCS@#'"$VCS"'#;/^VCSUP *=/s#@VCSUP@#'"$VCSUP"'#' Makefile 3611 echo; test x"$EXEEXT" = x || echo 'miniruby: miniruby$(EXEEXT)' 3612 if test "$gnumake" != yes; then 3613 echo ['$(MKFILES): $(srcdir)/common.mk'] 3614 sed ['s/{\$([^(){}]*)[^{}]*}//g'] ${srcdir}/common.mk 3615 else 3616 echo 'distclean-local::; @$(RM) GNUmakefile uncommon.mk' 3617 fi 3618 } > $tmpmk && if ! grep '^ruby:' $tmpmk > /dev/null; then 3619 if test "${gnumake}" = yes; then 3620 tmpgmk=confgmk$$.tmp 3621 { 3622 echo "include $tmpmk" 3623 echo "-include uncommon.mk" 3624 } > $tmpgmk 3625 else 3626 tmpgmk=$tmpmk 3627 fi && 3628 test -z "`${MAKE-make} -f $tmpgmk info-program | grep '^PROGRAM=ruby$'`" && 3629 echo 'ruby: $(PROGRAM);' >> $tmpmk 3630 test "$tmpmk" = "$tmpgmk" || rm -f "$tmpgmk" 3631 fi && mv -f $tmpmk Makefile], 3632[EXEEXT='$EXEEXT' gnumake='$gnumake']) 3633 3634AC_ARG_WITH([ruby-pc], 3635 AC_HELP_STRING([pc file basename]), 3636 [ruby_pc="$withval"], 3637 [ruby_pc="${RUBY_BASE_NAME}-${MAJOR}.${MINOR}.pc"]) 3638AC_SUBST(ruby_pc) 3639AC_SUBST(exec, [exec]) 3640 3641AC_CONFIG_FILES($ruby_pc:template/ruby.pc.in, 3642 [ 3643 if sed ['s/\$(\([A-Za-z_][A-Za-z0-9_]*\))/${\1}/g;s/@[A-Za-z_][A-Za-z0-9_]*@//'] $ruby_pc > ruby.tmp.pc && 3644 { 3645 test -z "$PKG_CONFIG" || 3646 PKG_CONFIG_PATH=. $PKG_CONFIG --print-errors ruby.tmp 3647 } 3648 then 3649 mv -f ruby.tmp.pc $ruby_pc 3650 else 3651 exit 1 3652 fi 3653 ], 3654 [ruby_pc='$ruby_pc' PKG_CONFIG='$PKG_CONFIG']) 3655 3656AC_OUTPUT 3657} 3658} 3659