1dnl Process this file with autoconf to produce a configure script. 2AC_INIT() 3{ 4AC_CONFIG_AUX_DIR(tool) 5AC_CONFIG_MACRO_DIRS(tool/m4) 6 7AC_PREREQ(2.67) 8 9dnl override AC_CHECKING 10dnl placed here due to aclocal(1)'s 11dnl ignoring this definition in separate files 12AC_DEFUN([AC_CHECKING],[dnl 13AC_REQUIRE([_COLORIZE_RESULT_PREPARE])dnl 14AS_MESSAGE([checking ${msg_checking}$1${msg_reset}...])])dnl 15 16AC_DISABLE_OPTION_CHECKING 17 18AC_ARG_VAR([cflags], [additional CFLAGS (ignored when CFLAGS is given)]) 19AC_ARG_VAR([cppflags], [additional CPPFLAGS (ignored when CPPFLAGS is given)]) 20AC_ARG_VAR([cxxflags], [additional CXXFLAGS (ignored when CXXFLAGS is given)]) 21 22: "environment section" && { 23HAVE_BASERUBY=yes 24AC_ARG_WITH(baseruby, 25 AS_HELP_STRING([--with-baseruby=RUBY], [use RUBY as baseruby; RUBY is the pathname of ruby]), 26 [AS_CASE(["$withval"], 27 [*ruby*],[BASERUBY=$withval], 28 [no],[HAVE_BASERUBY=no], 29 [AC_MSG_ERROR(need ruby)]) 30 ], 31 [ 32 AC_PATH_PROG([BASERUBY], [ruby], [false]) 33 ]) 34AS_IF([test "$HAVE_BASERUBY" = yes -a "`RUBYOPT=- $BASERUBY -e 'print 42' 2>/dev/null`" = 42], [ 35 AS_IF([test "`RUBYOPT=- $BASERUBY --disable=gems -e 'print 42' 2>/dev/null`" = 42], [ 36 BASERUBY="$BASERUBY --disable=gems" 37 ]) 38 $BASERUBY -C "$srcdir" tool/downloader.rb -d tool -e gnu config.guess config.sub >&AS_MESSAGE_FD 39], [ 40 BASERUBY="echo executable host ruby is required. use --with-baseruby option.; false" 41 HAVE_BASERUBY=no 42]) 43AC_SUBST(BASERUBY) 44AC_SUBST(HAVE_BASERUBY) 45 46: ${GIT=git} 47HAVE_GIT=yes 48AC_ARG_WITH(git, 49 AS_HELP_STRING([--without-git], [never use git]), 50 [AS_CASE([$withval], 51 [no], [GIT=never-use HAVE_GIT=no], 52 [yes], [], 53 [GIT=$withval])]) 54AS_IF([test x"$HAVE_GIT" = xyes], [command -v "$GIT" > /dev/null || HAVE_GIT=no]) 55AC_SUBST(GIT) 56AC_SUBST(HAVE_GIT) 57 58eval `sed -n ['s/^@%:@define RUBY_API_VERSION_\([A-Z][A-Z_0-9]*\) \([0-9][0-9]*\)/API_\1=\2/p'] $srcdir/include/ruby/version.h` 59RUBY_PROGRAM_VERSION=`sed -n 's/^@%:@define RUBY_VERSION "\(.*\)"/\1/p' $srcdir/version.h` 60MAJOR=`echo $RUBY_PROGRAM_VERSION | cut -d. -f1` 61MINOR=`echo $RUBY_PROGRAM_VERSION | cut -d. -f2` 62TEENY=`echo $RUBY_PROGRAM_VERSION | cut -d. -f3` 63for v in MAJOR MINOR TEENY; do 64 AS_IF([eval "test \"\$$v\" = ''"], [ 65 AC_MSG_ERROR(could not determine $v number from version.h) 66 ]) 67done 68AS_IF([test "$MAJOR.$MINOR" != "$API_MAJOR.$API_MINOR"], [ 69 AC_MSG_ERROR([API version $API_MAJOR.$API_MINOR differs from program version $MAJOR.$MINOR]) 70]) 71AC_SUBST(MAJOR) 72AC_SUBST(MINOR) 73AC_SUBST(TEENY) 74AC_SUBST(RUBY_PROGRAM_VERSION) 75AC_SUBST(RUBY_API_VERSION, '$(MAJOR).$(MINOR)') 76RUBY_PATCHLEVEL=`sed -n 's/^#define RUBY_PATCHLEVEL //p' $srcdir/version.h` 77dnl checks for alternative programs 78AC_CANONICAL_BUILD 79RUBY_RM_RECURSIVE 80AC_ARG_WITH(gcc, 81 AS_HELP_STRING([--without-gcc], [never use gcc]), 82 [ 83 AS_CASE([$withval], 84 [no], [: ${CC=cc}], 85 [yes], [: ${CC=gcc}], 86 [CC=$withval])]) 87dnl If the user switches compilers, we can't believe the cache 88AS_IF([test ! -z "$ac_cv_prog_CC" -a ! -z "$CC" -a "$CC" != "$ac_cv_prog_CC"], [ 89 AC_MSG_ERROR(cached CC is different -- throw away $cache_file 90(it is also a good idea to do 'make clean' before compiling)) 91]) 92test -z "$CC" || ac_cv_prog_CC="$CC" 93 94AS_IF([test "$program_prefix" = NONE], [ 95 program_prefix= 96]) 97AS_IF([test "$prefix" -ef .], [ 98 AC_MSG_ERROR(--prefix cannot be the current working directory.) 99]) 100RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"` 101RUBYW_BASE_NAME=`echo rubyw | sed "$program_transform_name"` 102AC_SUBST(RUBY_BASE_NAME) 103AC_SUBST(RUBYW_BASE_NAME) 104AC_SUBST(RUBY_VERSION_NAME, '${RUBY_BASE_NAME}-${ruby_version}') 105 106AC_CANONICAL_TARGET 107test x"$target_alias" = x && 108target_os=`echo $target_os | sed 's/linux-gnu$/linux/;s/linux-gnu/linux-/'` 109ac_install_sh='' # unusable for extension libraries. 110 111AC_ARG_WITH(os-version-style, 112 AS_HELP_STRING([--with-os-version-style=TYPE], 113 [OS version number for target and target_os [[full]]] 114 [(full|teeny|minor+0|minor|major+0|major|none)]), 115 [os_version_style=$withval], 116 [os_version_style=full 117 AS_CASE($target_os, [[*[0-9].*]], 118 [AS_CASE([`/usr/bin/ruby -e 'puts RUBY_PLATFORM' 2>/dev/null`], 119 [[*-*[0-9].*.0]], [os_version_style=minor+0], 120 [[*-*[0-9].*.*]], [os_version_style=full], 121 [[*-*[0-9].0] ], [os_version_style=major+0], 122 [[*-*[0-9].*] ], [os_version_style=minor], 123 [[*-*[0-9]] ], [os_version_style=major], 124 )]) 125 ]) 126os_version_style_transform= 127AS_CASE("${os_version_style}", 128 [full|teeny], [], 129 [minor+0], [os_version_style_transform=['s/\([0-9]\.[0-9][0-9]*\)\.[0-9][.0-9]*$/\1.0/']], 130 [minor], [os_version_style_transform=['s/\([0-9]\.[0-9][0-9]*\)\.[0-9][.0-9]*$/\1/']], 131 [major+0], [os_version_style_transform=['s/\([0-9]\)\.[0-9][.0-9]*$/\1.0/']], 132 [major], [os_version_style_transform=['s/\([0-9]\)\.[0-9][.0-9]*$/\1/']], 133 [none], [os_version_style_transform=['s/[0-9]\.[0-9][.0-9]*$//']], 134 [AC_MSG_ERROR(unknown --with-os-version-style: $withval)]) 135AS_IF([test -z "$target_alias" -a -n "$os_version_style_transform"], 136 [ 137 target=`echo ${target} | sed "$os_version_style_transform"` 138 target_os=`echo ${target_os} | sed "$os_version_style_transform"` 139 ]) 140 141AC_ARG_WITH(arch, 142 AS_HELP_STRING([--with-arch=ARCHS], 143 [build an Apple/NeXT Multi Architecture Binary (MAB); 144 ARCHS is a comma-delimited list of architectures for 145 which to build; if this option is disabled or omitted 146 entirely, then the package will be built only for the 147 target platform]), 148 [target_archs="$withval"], [unset target_archs]) 149 150AC_ARG_ENABLE(load-relative, 151 AS_HELP_STRING([--enable-load-relative], [resolve load paths at run time]), 152 [load_relative=$enableval]) 153 154AC_ARG_PROGRAM 155 156dnl Checks for programs. 157 158cflagspat= 159test -z "$optflags" || 160 cflagspat="$cflagspat;s|"`eval echo '"'"${optflags}"'"' | sed 's/[[][|.*]]/\\&/g;s/^ */ /;s/ *$/ /'`'| |g' 161test -z "$debugflags" || 162 cflagspat="$cflagspat;s|"`eval echo '"'"${debugflags}"'"' | sed 's/[[][|.*]]/\\&/g;s/^ */ /;s/ *$/ /'`'| |g' 163test -z "warnflags" || 164 cflagspat="$cflagspat;s|"`eval echo '"'"${warnflags}"'"' | sed 's/[[][|.*]]/\\&/g;s/^ */ /;s/ *$/ /'`'| |g' 165AS_IF([test -z "${CFLAGS+set}"], [ 166 cflags=`echo " $cflags " | sed "$cflagspat;s/^ *//;s/ *$//"` 167 orig_cflags="$cflags" 168 cflags="$cflags "'${optflags} ${debugflags} ${warnflags}' 169]) 170AS_IF([test -z "${CXXFLAGS+set}"], [ 171 cxxflags=`echo " $cxxflags " | sed "$cflagspat;s/^ *//;s/ *$//"` 172 orig_cxxflags="$cxxflags" 173 cxxflags="$cxxflags "'${optflags} ${debugflags} ${warnflags}' 174]) 175 176AS_CASE(["$host_os:$build_os"], 177[darwin*:darwin*], [ 178 AC_CHECK_TOOLS(CC, [clang gcc cc]) 179 # Following Apple deployed clang are broken 180 # clang version 1.0 (http://llvm.org/svn/llvm-project/cfe/tags/Apple/clang-23 exported) 181 # Apple clang version 2.0 (tags/Apple/clang-137) (based on LLVM 2.9svn) 182 # Apple clang version 2.1 (tags/Apple/clang-163.7.1) (based on LLVM 3.0svn) 183 AS_IF([! $CC -E -xc - <<SRC >/dev/null], [ 184 @%:@if defined __APPLE_CC__ && defined __clang_major__ && __clang_major__ < 3 185 @%:@error premature clang 186 @%:@endif 187SRC 188 AC_MSG_ERROR([clang version 3.0 or later is required]) 189 ]) 190]) 191AS_IF([test x"${build}" != x"${host}"], [ 192 AC_CHECK_TOOL(CC, gcc) 193]) 194 195AC_PROG_CC 196AS_CASE([$CC], 197[gcc-*], [ 198 gcc_prefix=gcc- gcc_suffix=`echo "$CC" | sed 's/^gcc//'` 199 AC_PROG_CXX(g++${gcc_suffix})], 200[clang-*], [ 201 gcc_prefix=clang- gcc_suffix=`echo "$CC" | sed 's/^clang//'` 202 AC_PROG_CXX(clang++${gcc_suffix})], 203[gcc_prefix= gcc_suffix=]) 204 205dnl Select the appropriate C++ compiler in OS X 206AS_CASE(["$build_os"], 207 [darwin1*.*], [ 208 AS_CASE(["x$CC"], 209 [xgcc-4.2|x/usr/bin/gcc-4.2], [: ${CXX=g++-4.2}], 210 [xgcc|x/usr/bin/gcc], [: ${CXX=g++}], 211 [xcc|x/usr/bin/cc], [: ${CXX=c++}], 212 [xicc], [: ${CXX=icpc}], 213 [xclang|x/usr/bin/clang], [: ${CXX=clang++}]) 214 ]) 215test -z "$CXX" || ac_cv_prog_CXX="$CXX" 216 217AC_PROG_CXX 218RUBY_MINGW32 219AC_PROG_GCC_TRADITIONAL 220AC_SUBST(GCC) 221AS_CASE(["$target_os"], 222[solaris*], [AC_PATH_TOOL([LD], [ld], [/usr/ccs/bin/ld], [/usr/ccs/bin:$PATH])], 223[AC_CHECK_TOOL([LD], [ld], [ld])]) 224AC_SUBST(LD) 225AS_IF([test "$GCC" = yes], [ 226 linker_flag=-Wl, 227 : ${optflags=-O3} 228 gcc_major=`echo =__GNUC__ | $CC -E -xc - | sed '/^=/!d;s///'` 229 gcc_minor=`echo =__GNUC_MINOR__ | $CC -E -xc - | sed '/^=/!d;s///'` 230 test -n "$gcc_major" || gcc_major=0 231 test -n "$gcc_minor" || gcc_minor=0 232 AS_CASE(["x$CC"], [xicc], [ 233 icc_version=`echo =__ICC | $CC -E -xc - | sed '/^=/!d;s///'` 234 ]) 235 test -n "$icc_version" || icc_version=0 236 # RUBY_APPEND_OPTIONS(XCFLAGS, ["-include ruby/config.h" "-include ruby/missing.h"]) 237], [ 238 linker_flag= 239]) 240 241AS_IF([test "$GCC" = yes -a "$gcc_major" -lt 3 ], [ 242 AC_MSG_ERROR([too old GCC]) 243]) 244 245RUBY_PROG_GNU_LD 246RUBY_CPPOUTFILE 247 248: ${OUTFLAG='-o '} 249: ${COUTFLAG=${OUTFLAG}} 250: ${CSRCFLAG=''} 251AC_SUBST(OUTFLAG) 252AC_SUBST(COUTFLAG) 253AC_SUBST(CSRCFLAG) 254 255: ${MJIT_CC=$CC} 256AS_IF([test "x$cross_compiling" = xno], [ 257 AC_PATH_PROG([MJIT_CC], ${MJIT_CC}) 258 AS_CASE([$target_os], 259 [*mingw*], [command -v cygpath > /dev/null && MJIT_CC=`cygpath -ma $MJIT_CC`]) 260 shift 2 261 MJIT_CC="$MJIT_CC${1+ }$*" 262]) 263 264AS_CASE(["$build_os"], 265 [darwin1*.*], [ 266 # Xcode linker warns for deprecated architecture and wrongly 267 # installed TBD files. 268 CC_WRAPPER="" 269 echo 'int main(void) {return 0;}' > conftest.c 270 AS_IF([$CC -framework Foundation -o conftest conftest.c 2>&1 | 271 grep '^ld: warning: text-based stub file' >/dev/null], [ 272 CC_WRAPPER=`cd -P "$srcdir/tool" && pwd`/darwin-cc 273 CC="$CC_WRAPPER $CC" 274 ]) 275 rm -fr conftest* 276 ]) 277 278cc_version= 279for option in --version -v -V -qversion; do 280 cc_version_message=`$CC $option 2>&1` 281 cc_version_status=$? 282 AS_CASE($cc_version_status, [0], [:], [continue]) 283 AS_CASE($cc_version_message, [*Warning*], [continue]) 284 cc_version='$(CC) '$option 285 break 286done 287AC_SUBST(CC_VERSION, $cc_version) 288AC_SUBST(CC_VERSION_MESSAGE, $cc_version_message) 289 290: ${DLDFLAGS="$LDFLAGS"} 291 292RUBY_UNIVERSAL_ARCH 293AS_IF([test "$target_cpu" != "$host_cpu" -a "$GCC" = yes -a "$cross_compiling" = no -a "$universal_binary" = no], [ 294 RUBY_DEFAULT_ARCH("$target_cpu") 295]) 296 297AS_CASE(["$target_os"], [darwin*], [ 298if libtool 2>&1 | grep no_warning_for_no_symbols > /dev/null; then 299 ac_cv_prog_ac_ct_RANLIB=: 300 ac_cv_prog_ac_ct_AR='libtool -static' 301 rb_cv_arflags='-no_warning_for_no_symbols -o' 302fi 303]) 304AC_CHECK_TOOLS(RANLIB, [${gcc_prefix}ranlib${gcc_suffix} ranlib], :) 305AC_CHECK_TOOLS(AR, [${gcc_prefix}ar${gcc_suffix} ar]) 306AS_IF([test -z "$AR"], [ 307 AC_CHECK_PROGS(AR, aal, ar) 308]) 309AC_CACHE_CHECK([for $AR flags], [rb_cv_arflags], [ 310 AS_IF([$AR rcD conftest.a > /dev/null 2>&1 && rm conftest.a], 311 [rb_cv_arflags=rcD], [rb_cv_arflags=rcu]) 312]) 313AC_SUBST(ARFLAGS, ["$rb_cv_arflags "]) 314 315AC_CHECK_TOOL(AS, as) 316ASFLAGS=$ASFLAGS 317AC_SUBST(ASFLAGS) 318 319AS_CASE(["$target_os"],[cygwin*|mingw*], [ac_cv_prog_ac_ct_OBJCOPY=":"]) 320 321# BSD's ports and MacPorts prefix GNU binutils with 'g' 322AC_CHECK_TOOLS(OBJDUMP, [objdump gobjdump]) 323AC_CHECK_TOOLS(OBJCOPY, [objcopy gobjcopy]) 324 325AS_CASE(["$target_os"], 326[cygwin*|mingw*], [ 327 AC_CHECK_TOOL(WINDRES, windres) 328 AC_CHECK_TOOL(DLLWRAP, dllwrap) 329 target=`echo $target | sed "s/^$target_cpu-/-/"` 330 target_alias=`echo $target_alias | sed "s/^$target_cpu-/-/"` 331 target_cpu=`echo $target_cpu | sed s/i.86/i386/` 332 AS_CASE(["$target"], [-*], [ target="$target_cpu${target}"]) 333 AS_CASE(["$target_alias"], [-*], [ target_alias="$target_cpu${target_alias}"]) 334 AS_CASE(["$target_os"], 335 [mingw*], [ 336 test "$rb_cv_msvcrt" = "" && unset rb_cv_msvcrt 337 AC_CACHE_CHECK(for mingw32 runtime DLL, rb_cv_msvcrt, [ 338 AC_TRY_LINK([@%:@include <stdio.h>], 339 [FILE* volatile f = stdin; return 0;], 340 [rb_cv_msvcrt=`$OBJDUMP -p conftest$ac_exeext | 341 tr A-Z a-z | 342 sed -n '/^[[ ]]*dll name: \(msvc.*\)\.dll$/{s//\1/p;q;}'`], 343 [rb_cv_msvcrt=msvcrt]) 344 test "$rb_cv_msvcrt" = "" && rb_cv_msvcrt=msvcrt]) 345 RT_VER=`echo "$rb_cv_msvcrt" | tr -cd [0-9]` 346 test "$RT_VER" = "" && RT_VER=60 347 AC_DEFINE_UNQUOTED(RUBY_MSVCRT_VERSION, $RT_VER) 348 sysconfdir= 349 ]) 350 : ${enable_shared=yes} 351 ], 352[aix*], [AC_CHECK_TOOL(NM, nm, /usr/ccs/bin/nm, /usr/ccs/bin:$PATH)], 353[hiuxmpp*], [AC_DEFINE(__HIUX_MPP__)]) # by TOYODA Eizi <toyoda@npd.kishou.go.jp> 354AC_CHECK_TOOLS(NM, [${gcc_prefix}nm${gcc_suffix} nm]) 355 356AC_PROG_LN_S 357AC_PROG_MAKE_SET 358AC_PROG_INSTALL 359AC_PROG_MKDIR_P 360AS_IF([test "x$MKDIR_P" = "x -d"], [ 361 AS_IF([test x"$as_mkdir_p" != xfalse], [ 362 MKDIR_P='mkdir -p' 363 echo "use 'mkdir -p' as MKDIR_P" 364 ], [ 365 AC_MSG_ERROR([mkdir -p is required]) 366 ]) 367]) 368MAKEDIRS="$MKDIR_P" 369AC_SUBST(MAKEDIRS) 370 371AC_CHECK_PROG([DTRACE], [${ac_tool_prefix}dtrace], [${ac_tool_prefix}dtrace]) 372AS_IF([test "$cross_compiling:$ac_cv_prog_DTRACE" = no: -a -n "$ac_tool_prefix"], [ 373 AC_CHECK_PROG([DTRACE], [dtrace], [dtrace]) 374]) 375 376AC_CHECK_PROGS(DOT, dot) 377AC_CHECK_PROGS(DOXYGEN, doxygen) 378 379AC_CHECK_PROG(PKG_CONFIG, pkg-config, [pkg-config], [], [], 380 [`"$as_dir/$ac_word$ac_exec_ext" --print-errors --version > /dev/null 2>&1 || echo "$as_dir/$ac_word$ac_exec_ext"`]) 381 382# checks for UNIX variants that set C preprocessor variables 383AC_USE_SYSTEM_EXTENSIONS 384 385AC_SUBST(RM, ['rm -f']) 386AC_SUBST(CP, ['cp']) 387RMDIRS='$(top_srcdir)/tool/rmdirs' 388RMDIR=rmdir 389mkdir "rmdirs_$$_test" "rmdirs_$$_test/a" 390rmdir --ignore-fail-on-non-empty "rmdirs_$$_test" 2>/dev/null && 391RMDIR='rmdir --ignore-fail-on-non-empty' 392$RMDIR -p "rmdirs_$$_test/a" 2>/dev/null && 393{ test -d "rmdirs_$$_test" || RMDIRS="$RMDIR -p"; } 394rmdir "rmdirs_$$_test/a" "rmdirs_$$_test" 2>/dev/null 395AC_SUBST(RMDIR) 396AC_SUBST(RMDIRS) 397AC_SUBST(RMALL, ['rm -fr']) 398 399AC_MSG_CHECKING([for cd using physical directory]) 400rm -fr conf$$.dir 401mkdir conf$$.dir && 402(cd conf$$.dir && mkdir src build && cd src && 403$as_ln_s ../build . > /dev/null 2>&1 && cd build && 404for chdir in 'cd -P' 'PWD= cd'; do 405 /bin/sh -c "$chdir ../src && echo '$chdir' > cdcmd" 2> /dev/null && break 406done) 407AS_IF([test -f conf$$.dir/src/cdcmd], [ 408 read CHDIR < conf$$.dir/src/cdcmd 2> /dev/null 409], [ 410 CHDIR=cd 411]) 412rm -fr conf$$.dir 413AC_MSG_RESULT([$CHDIR]) 414AC_SUBST(CHDIR) 415} 416 417: "compiler section" && { 418RUBY_WERROR_FLAG([ 419 AC_MSG_CHECKING([whether CFLAGS is valid]) 420 AC_TRY_COMPILE([], [], 421 [AC_MSG_RESULT(yes)], 422 [ 423 AC_MSG_RESULT(no) 424 AC_MSG_ERROR([something wrong with CFLAGS="$CFLAGS"]) 425 ] 426 ) 427 428 AC_MSG_CHECKING([whether LDFLAGS is valid]) 429 { 430 mkdir tmp.$$.try_link && 431 cd tmp.$$.try_link && 432 cp ../confdefs.h . && 433 echo '<?xml?><plist><dict><key>CFBundleIdentifier</key><string></string></dict></plist>' > Info.plist && 434 : 435 } || AC_MSG_ERROR([failed to make temporary directory]) 436 AC_TRY_LINK([], [], 437 [AC_MSG_RESULT(yes)], 438 [ 439 cd .. && rm -fr tmp.$$.try_link 440 AC_MSG_RESULT(no) 441 AC_MSG_ERROR([something wrong with LDFLAGS="$LDFLAGS"]) 442 ] 443 ) 444 cd .. && rm -fr tmp.$$.try_link 445]) 446 447: ${RPATHFLAG=''} 448rpathflag='' 449AS_IF([test x"${RPATHFLAG}" = x], [ 450 AS_CASE(["$target_os"], 451 [hpux*], [AS_IF([test "$rb_cv_prog_gnu_ld" = no], [rpathflag='+b '])], 452 [aix*], [rpathflag='-blibpath:'], 453 [for rpathflag in -R "-rpath "; do 454 AS_CASE("$rpathflag", 455 [*" "], [AS_CASE(["${linker_flag}"], 456 [*,], [rpathflag=`echo "$rpathflag" | tr ' ' ,`])]) 457 rpathflag="${linker_flag}${rpathflag}" 458 RUBY_TRY_LDFLAGS([${rpathflag}.], [], [rpathflag=]) 459 AS_IF([test "x${rpathflag}" != x], []) 460 done]) 461], [ 462 rpathflag=`echo "$RPATHFLAG" | sed 's/%.*//'` 463]) 464 465AS_CASE([$RUBY_PATCHLEVEL], [-*], 466 [RUBY_DEVEL=yes], [RUBY_DEVEL=no]) 467particular_werror_flags=$RUBY_DEVEL 468AC_ARG_ENABLE(werror, 469 AS_HELP_STRING([--disable-werror], 470 [don't make warnings into errors 471 even if a compiler support -Werror feature 472 [[disabled by default unless development version]]]), 473 [particular_werror_flags=$enableval]) 474 475rb_cv_warnflags="$warnflags" 476AS_CASE(["$GCC:${warnflags+set}:${extra_warnflags:+set}:"], 477[yes::*|yes:*:set:], [# GCC && (!warnflags || extra_warnflags) 478 AS_IF([test $gcc_major -ge 4], [ 479 extra_warnflags="$extra_warnflags -Werror=extra-tokens" 480 ]) 481 AS_IF([test $gcc_major -ge 5 -a $gcc_major -le 6], [ 482 extra_warnflags="$extra_warnflags -Wno-maybe-uninitialized" 483 ]) 484 # ICC doesn't support -Werror= 485 AS_IF([test $icc_version -gt 0], [ 486 particular_werror_flags=no 487 ]) 488 for wflag in \ 489 -Werror=declaration-after-statement \ 490 -Werror=deprecated-declarations \ 491 -Werror=division-by-zero \ 492 -Werror=duplicated-cond \ 493 -Werror=implicit-function-declaration \ 494 -Werror=implicit-int \ 495 -Werror=misleading-indentation \ 496 -Werror=pointer-arith \ 497 -Werror=restrict \ 498 -Werror=shorten-64-to-32 \ 499 -Werror=write-strings \ 500 -Wimplicit-fallthrough=0 \ 501 -Wmissing-noreturn \ 502 -Wno-cast-function-type \ 503 -Wno-constant-logical-operand \ 504 -Wno-long-long \ 505 -Wno-missing-field-initializers \ 506 -Wno-overlength-strings \ 507 -Wno-packed-bitfield-compat \ 508 -Wno-parentheses-equality \ 509 -Wno-self-assign \ 510 -Wno-tautological-compare \ 511 -Wno-unused-parameter \ 512 -Wno-unused-value \ 513 -Wsuggest-attribute=format \ 514 -Wsuggest-attribute=noreturn \ 515 -Wunused-variable \ 516 -diag-disable=175,188,2259 \ 517 $extra_warnflags \ 518 ; do 519 AS_IF([test "$particular_werror_flags" != yes], [ 520 wflag=`echo x$wflag | sed 's/^x-Werror=/-W/;s/^x//'` 521 ]) 522 ok=no 523 RUBY_TRY_CFLAGS($wflag, [ 524 RUBY_APPEND_OPTIONS(warnflags, $wflag) 525 ok=yes 526 ]) 527 AS_CASE([$ok:$wflag], [no:-Werror=*], [ 528 wflag=`echo x$wflag | sed 's/^x-Werror=/-W/'` 529 RUBY_TRY_CFLAGS($wflag, [ 530 RUBY_APPEND_OPTIONS(warnflags, $wflag) 531 particular_werror_flags=no 532 ]) 533 ]) 534 done 535 AS_CASE([" $warnflags "],[*" -Wno-missing-field-initializers "*], [wflag="-Wall -Wextra"], 536 [wflag=-Wall]) 537 RUBY_TRY_CFLAGS($wflag, [warnflags="$wflag${warnflags+ $warnflags}"]) 538 # Disable warnflags while conftest. -Werror=* flags might make bad OS capability guess. 539 rb_cv_warnflags="$warnflags" 540 warnflags= 541]) 542RUBY_TRY_CFLAGS(-Qunused-arguments, [RUBY_APPEND_OPTIONS(rb_cv_wsuppress_flags, -Qunused-arguments)]) 543 544AC_ARG_WITH(compress-debug-sections, 545 AS_HELP_STRING([--with-compress-debug-sections=type], 546 [enable debug section compression]), 547 [compress_debug_sections=$withval], [compress_debug_sections=]) 548 549AS_IF([test "$GCC" = yes], [ 550 # -D_FORTIFY_SOURCE 551 # When defined _FORTIFY_SOURCE, glibc enables some additional sanity 552 # argument check. The performance drop is very little and Ubuntu enables 553 # _FORTIFY_SOURCE=2 by default. So, let's support it for protecting us from 554 # a mistake of silly C extensions. 555 556 # TODO: check if link succeeds with _FORTIFY_SOURCE=2. 557 AS_CASE(["$target_os"], 558 [mingw*], [ 559 fortify_source=no 560 ]) 561 AC_ARG_ENABLE(fortify_source, 562 AS_HELP_STRING([--disable-fortify-source], 563 [disable -D_FORTIFY_SOURCE=2 option, which causes link error on mingw]), 564 [fortify_source=$enableval]) 565 AS_IF([test "x$fortify_source" != xno], [ 566 RUBY_TRY_CFLAGS(-D_FORTIFY_SOURCE=2, [RUBY_APPEND_OPTION(XCFLAGS, -D_FORTIFY_SOURCE=2)]) 567 ]) 568 569 : ${MJIT_HEADER_FLAGS='-P -dD'} 570 571 # -fstack-protector 572 AS_CASE(["$target_os"], 573 [mingw*], [ 574 stack_protector=no 575 ]) 576 AS_IF([test -z "${stack_protector+set}"], [ 577 AS_FOR(option, opt, [-fstack-protector-strong -fstack-protector], [ 578 RUBY_TRY_CFLAGS(option, [stack_protector=yes]) 579 AS_IF([test "x$stack_protector" = xyes], [ 580 RUBY_TRY_LDFLAGS(option, [], [stack_protector=]) 581 ]) 582 AS_IF([test "x$stack_protector" = xyes], [stack_protector=option; break]) 583 ]) 584 ]) 585 AS_CASE(["$stack_protector"], [-*], [ 586 RUBY_APPEND_OPTION(XCFLAGS, $stack_protector) 587 RUBY_APPEND_OPTION(XLDFLAGS, $stack_protector) 588 RUBY_APPEND_OPTION(LDFLAGS, $stack_protector) 589 ]) 590 591 AS_CASE("${compress_debug_sections:-zlib}", 592 [none|no], [], [ 593 RUBY_TRY_LDFLAGS(${linker_flag}--compress-debug-sections=${compress_debug_sections:-zlib}, 594 [compress_debug_sections=${compress_debug_sections:-zlib}], 595 [compress_debug_sections=no]) 596 ]) 597 AS_IF([test "x$compress_debug_sections" != xno], [ 598 RUBY_APPEND_OPTION(DLDFLAGS, ${linker_flag}--compress-debug-sections=$compress_debug_sections) 599 ]) 600 601 AS_CASE(["$target_os"],[mingw*], [ 602 # On Windows platforms, system provided headers are VC++ 603 # optimized. That is, C++ habits are often contaminated into 604 # various headers. Most frequent situation is the use of // 605 # comments. We bypass ANSI C mode for them. Otherwise 606 # extension libs cannot include those headers. 607 608 # Since math.h in some mingw64 wrongly declares frexp and modf 609 # to be pure, the variables pointed by the second arguments are 610 # considered uninitialized unexpectedly. 611 AC_CACHE_CHECK([whether frexp and modf are broken], 612 rb_cv_mingw64_broken_frexp_modf, 613 [ 614 save_CFLAGS="$CFLAGS" 615 AS_IF([test "$particular_werror_flags" = "yes"], [ 616 CFLAGS="$CFLAGS -Werror=uninitialized" 617 ], [ 618 CFLAGS="$CFLAGS -Werror -Wuninitialized" 619 ]) 620 AC_TRY_COMPILE([@%:@include <math.h> 621 int foo(double x) 622 { 623 int exp; 624 frexp(x, &exp); 625 return exp; 626 }], [if (foo(0.0)) return 1;], 627 [rb_cv_mingw64_broken_frexp_modf=no], 628 [rb_cv_mingw64_broken_frexp_modf=yes]) 629 CFLAGS="$save_CFLAGS" 630 ]) 631 AS_IF([test "$rb_cv_mingw64_broken_frexp_modf" = yes], [ 632 AC_DEFINE(RUBY_MINGW64_BROKEN_FREXP_MODF) 633 ]) 634 ], 635 [cygwin*|darwin*|netbsd*], [ 636 # need lgamma_r(), finite() 637 ], 638 [solaris*], [ 639 # ANSI (no XCFLAGS because this is C only) 640 # Because "-std=gnu99" affects existance of functions on Solaris, 641 # "-std=gnu99" will be appended to CPPFLAGS. 642 for ansi_options in -std=gnu99; do 643 RUBY_TRY_CFLAGS(${ansi_options}, [ 644 RUBY_APPEND_OPTIONS(CPPFLAGS, ${ansi_options}) 645 ], [ansi_options=]) 646 test "x${ansi_options}" = x || break 647 done 648 ], 649 [ 650 # ANSI (no XCFLAGS because this is C only) 651 rb_tmp_std_check=`echo $CC $CFLAGS $optflags $warnflags $debugflags | fgrep std= | tr -d '\015'` 652 AS_IF([test "x$rb_tmp_std_check" = "x"], 653 [ 654 for ansi_options in -std=gnu99; do 655 RUBY_TRY_CFLAGS(${ansi_options}, [ 656 RUBY_APPEND_OPTIONS(warnflags, ${ansi_options}) 657 RUBY_APPEND_OPTIONS(strict_warnflags, ${ansi_options}) 658 ], [ansi_options=]) 659 test "x${ansi_options}" = x || break 660 done 661 ]) 662 ]) 663 664 # suppress annoying -Wstrict-overflow warnings 665 RUBY_TRY_CFLAGS(-fno-strict-overflow, [RUBY_APPEND_OPTION(XCFLAGS, -fno-strict-overflow)]) 666 667 test "${debugflags+set}" || {RUBY_TRY_CFLAGS(-ggdb3, [debugflags=-ggdb3])} 668 test "${debugflags+set}" || {RUBY_TRY_CFLAGS(-ggdb, [debugflags=-ggdb])} 669 test "${debugflags+set}" || {RUBY_TRY_CFLAGS(-g3, [debugflags=-g3])} 670]) 671test $ac_cv_prog_cc_g = yes && : ${debugflags=-g} 672AS_IF([test "x$RUBY_DEVEL" = xyes], [RUBY_APPEND_OPTION(XCFLAGS, -DRUBY_DEVEL=1)]) 673 674AS_IF([test "$GCC" = ""], [ 675 AS_CASE(["$target_os"],[aix*],[warnflags="$warnflags -qinfo=por" rb_cv_warnflags="$rb_cv_warnflags -qinfo=por"]) 676]) 677AS_IF([test "$GCC" = yes], [ 678 AS_IF([test "$gcc_major" -ge 4], [ 679 RUBY_TRY_CFLAGS(-fvisibility=hidden, [visibility_option=yes], [visibility_option=no]) 680 ]) 681 AC_SUBST(WERRORFLAG, "-Werror") 682 AS_IF([test "$visibility_option" = yes], [ 683 RUBY_APPEND_OPTION(XCFLAGS, -fvisibility=hidden) 684 AC_DEFINE(RUBY_SYMBOL_EXPORT_BEGIN, [_Pragma("GCC visibility push(default)")]) 685 AC_DEFINE(RUBY_SYMBOL_EXPORT_END, [_Pragma("GCC visibility pop")]) 686 ], [ 687 RUBY_TRY_LDFLAGS([-Wl,-unexported_symbol,_Init_*], [visibility_option=ld], [visibility_option=no]) 688 ]) 689 test "$visibility_option" = no || OBJCOPY=: 690]) 691 692AS_IF([test "$GCC" = yes], [ 693 # optflags 694 695 AS_CASE(["$target_os"], [mingw*], [ 696 RUBY_TRY_CFLAGS(-fno-omit-frame-pointer, [optflags="${optflags+$optflags }-fno-omit-frame-pointer"]) 697 RUBY_TRY_CFLAGS(-static-libgcc, [static_libgcc=yes], [static_libgcc=no]) 698 AS_IF([test "$static_libgcc" = yes], [ 699 RUBY_APPEND_OPTION(EXTLDFLAGS, -static-libgcc) 700 ]) 701 ]) 702 703 # disable fast-math 704 for oflag in -fno-fast-math; do 705 RUBY_TRY_CFLAGS($oflag, [RUBY_APPEND_OPTION(CFLAGS, $oflag)]) 706 done 707 for oflag in -fexcess-precision=standard -fp-model\ precise; do 708 RUBY_TRY_CFLAGS($oflag, [RUBY_APPEND_OPTION(XCFLAGS, $oflag)]) 709 done 710]) 711 712AS_CASE(["$target_cpu"], [[i[3-6]86*]], [ 713 AC_CACHE_CHECK([for __sync_val_compare_and_swap], [rb_cv_gcc_compiler_cas], [ 714 AC_TRY_LINK([unsigned long atomic_var;], 715 [__sync_val_compare_and_swap(&atomic_var, 0, 1);], 716 [rb_cv_gcc_compiler_cas=yes], 717 [ 718 save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -march=i486" 719 AC_TRY_LINK([unsigned long atomic_var;], 720 [__sync_val_compare_and_swap(&atomic_var, 0, 1);], 721 [rb_cv_gcc_compiler_cas=i486], 722 [rb_cv_gcc_compiler_cas=no]) 723 CFLAGS="$save_CFLAGS" 724 ]) 725 ]) 726 AS_IF([test "$rb_cv_gcc_compiler_cas" = i486], [ARCH_FLAG="-march=i486"]) 727]) 728 729AC_ARG_WITH(opt-dir, 730 AS_HELP_STRING([--with-opt-dir=DIR-LIST], 731 [add optional headers and libraries directories separated by $PATH_SEPARATOR]), 732 [ 733 val=`echo "$PATH_SEPARATOR$withval" | sed "s|$PATH_SEPARATOR\([[^$PATH_SEPARATOR]*]\)| -I\1/include|g;s/^ //"` 734 CPPFLAGS="$CPPFLAGS $val" 735 val=`echo "$PATH_SEPARATOR$withval" | sed "s|$PATH_SEPARATOR\([[^$PATH_SEPARATOR]*]\)| -L\1/lib${rpathflag:+ $rpathflag\\\\1/lib}|g;s/^ //"` 736 LDFLAGS="$LDFLAGS $val" 737 LDFLAGS_OPTDIR="$val" 738 OPT_DIR="$withval" 739 ], [OPT_DIR=]) 740 741test -z "${ac_env_CFLAGS_set}" -a -n "${cflags+set}" && eval CFLAGS="\"$cflags $ARCH_FLAG\"" 742test -z "${ac_env_CXXFLAGS_set}" -a -n "${cxxflags+set}" && eval CXXFLAGS="\"$cxxflags $ARCH_FLAG\"" 743} 744 745AC_CACHE_CHECK([whether compiler has statement and declarations in expressions], 746 rb_cv_have_stmt_and_decl_in_expr, 747 [AC_TRY_COMPILE([],[ __extension__ ({ int a = 0; a; }); ], 748 [rb_cv_have_stmt_and_decl_in_expr=yes], 749 [rb_cv_have_stmt_and_decl_in_expr=no])]) 750AS_IF([test "$rb_cv_have_stmt_and_decl_in_expr" = yes], [ 751 AC_DEFINE(HAVE_STMT_AND_DECL_IN_EXPR) 752]) 753 754: "header and library section" && { 755AC_ARG_WITH(winnt-ver, 756 AS_HELP_STRING([--with-winnt-ver=0xXXXX], [target Windows NT version (default to 0x0600)]), 757 [with_winnt_ver="$withval"], [with_winnt_ver="0x0600"]) 758AS_CASE(["$target_os"], 759[mingw*], [ 760 RUBY_APPEND_OPTION(CPPFLAGS, -D_WIN32_WINNT=$with_winnt_ver) 761 RUBY_APPEND_OPTION(CPPFLAGS, -D__MINGW_USE_VC2005_COMPAT) 762]) 763 764AS_CASE(["$target_os"], 765[freebsd*], [ 766 AC_CACHE_CHECK([whether pthread should be enabled by default], 767 rb_cv_enable_pthread_default, 768 [AC_TRY_CPP([ 769#include <osreldate.h> 770#if __FreeBSD_version < 502102 771#error pthread should be disabled on this platform 772#endif 773 ], 774 rb_cv_enable_pthread_default=yes, 775 rb_cv_enable_pthread_default=no)]) 776 enable_pthread=$rb_cv_enable_pthread_default 777 ], 778[mingw*], [ 779 enable_pthread=no 780 ], 781[ 782 enable_pthread=yes 783 ]) 784 785dnl Checks for libraries. 786AS_CASE(["$target_os"],[*bsd*|dragonfly*],[],[ac_cv_func_daemon=no]) 787 788AS_UNSET(ORIG_LIBS) 789POSTLINK=: 790AC_SUBST(POSTLINK) 791AS_CASE(["$target_os"], 792[nextstep*], [ ], 793[openstep*], [ ], 794[rhapsody*], [ ], 795[darwin*], [ 796 ORIG_LIBS="$LIBS" 797 RUBY_PREPEND_OPTION(LIBS, -lobjc) 798 RUBY_APPEND_OPTIONS(CPPFLAGS, -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT) 799 AC_MSG_CHECKING(whether Mac OS X 10.5 or later) 800 AC_TRY_CPP([#include <AvailabilityMacros.h> 801 #if MAC_OS_X_VERSION_MAX_ALLOWED <= 1040 802 #error pre OS X 10.4 803 [!<===== pre OS X 10.4 =====>] 804 #endif 805 ], 806 [macosx_10_5=yes], [macosx_10_5=no]) 807 AC_MSG_RESULT($macosx_10_5) 808 AS_IF([test "${target_os@%:@darwin}" -ge 16], [ 809 ac_cv_func___syscall=no 810 ac_cv_func_syscall=no 811 ac_cv_header_sys_syscall_h=no 812 ac_cv_header_syscall_h=no 813 ]) 814 AS_IF([test $macosx_10_5 = yes], [ 815 ac_cv_func_getcontext=no 816 ac_cv_func_setcontext=no 817 ], [ 818 AC_DEFINE(BROKEN_SETREUID, 1) 819 AC_DEFINE(BROKEN_SETREGID, 1) 820 ]) 821 incs=`$CC -v -E -xc - < /dev/null 2>&1 | sed ['1,/^@%:@include </d;s/^ *//;s|[^./][^/]*/\.\./||g;/\/include$/!d;s||/lib|;/\/usr\/lib/d']` 822 for d in `$CC -print-search-dirs | sed -e '/^libraries: */!d;s///' | tr : '\012' | fgrep -v /../ | sed -n 's|^\(/.*/lib\)/$|\1|p'`; do 823 incs=`echo "$incs" | fgrep -v "$d"` 824 done 825 for d in $incs; do 826 test -d "$d" && RUBY_APPEND_OPTIONS(LDFLAGS, "-L$d") 827 done 828 ac_cv_type_getgroups=gid_t # getgroups() on Rosetta fills garbage 829 ac_cv_lib_crypt_crypt=no 830 ac_cv_func_fdatasync=no # Mac OS X wrongly reports it has fdatasync() 831 ac_cv_func_vfork=no 832 AS_IF([test $gcc_major -lt 4 -o \( $gcc_major -eq 4 -a $gcc_minor -lt 3 \)], [ 833 ac_cv_func___builtin_setjmp=no 834 ]) 835 with_setjmp_type=sigsetjmp # to hijack SIGCHLD handler 836 AC_CACHE_CHECK(for broken crypt with 8bit chars, rb_cv_broken_crypt, 837 [AC_TRY_RUN([ 838#include <stdio.h> 839#include <unistd.h> 840#include <string.h> 841 842void 843broken_crypt(const char *salt, const char *buf1, const char *buf2) 844{ 845#if 0 846 printf("%.2x%.2x: %s -> %s\n", (unsigned char)salt[0], (unsigned char)salt[1], 847 buf1+2, buf2+2); 848#endif 849} 850 851int 852main() 853{ 854 int i; 855 char salt[2], buf[256], *s; 856 for (i = 0; i < 128*128; i++) { 857 salt[0] = 0x80 | (i & 0x7f); 858 salt[1] = 0x80 | (i >> 7); 859 strcpy(buf, crypt("", salt)); 860 if (strcmp(buf, s = crypt("", salt))) { 861 broken_crypt(salt, buf, s); 862 return 1; 863 } 864 } 865 salt[0] = salt[1] = ' '; 866 strcpy(buf, crypt("", salt)); 867 salt[0] = salt[1] = 0x80 | ' '; 868 if (strcmp(buf, s = crypt("", salt))) { 869 broken_crypt(salt, buf, s); 870 return 1; 871 } 872 return 0; 873} 874], 875 rb_cv_broken_crypt=no, 876 rb_cv_broken_crypt=yes, 877 rb_cv_broken_crypt=yes)]) 878 AS_IF([test "$rb_cv_broken_crypt" = yes], [ 879 AC_DEFINE(BROKEN_CRYPT, 1) 880 ]) 881 POSTLINK="" 882 AC_CHECK_PROGS(codesign, codesign) 883 AC_CHECK_PROGS(dsymutil, dsymutil) 884 AS_IF([test -n "$codesign"], [ 885 POSTLINK="{ test -z '\$(RUBY_CODESIGN)' || $codesign -s '\$(RUBY_CODESIGN)' -f \$@; }${POSTLINK:+; $POSTLINK}" 886 ]) 887 AS_IF([test -n "$dsymutil"], [ 888 POSTLINK="$dsymutil \$@${POSTLINK:+; $POSTLINK}" 889 ]) 890 AS_IF([test -n "${POSTLINK}"], [ 891 LINK_SO="$LINK_SO 892\$(POSTLINK)" 893 ]) 894 AC_CHECK_HEADERS(crt_externs.h, [], [], [ 895 #include <crt_externs.h> 896 ]) 897 ], 898[hpux*], [ LIBS="-lm $LIBS" 899 ac_cv_c_inline=no], 900[solaris*], [ LIBS="-lm $LIBS" 901 ac_cv_func_vfork=no 902 AC_MSG_CHECKING(whether _XOPEN_SOURCE is already given) 903 AC_TRY_COMPILE([#include <unistd.h> 904 #ifndef _XOPEN_SOURCE 905 #error _XOPEN_SOURCE is not defined 906 #endif 907 ], [], 908 [given_xopen_source=yes], [given_xopen_source=no]) 909 AC_MSG_RESULT($given_xopen_source) 910 AS_IF([test $given_xopen_source = no], [ 911 AC_MSG_CHECKING(appropriate _XOPEN_SOURCE value to define) 912 define_xopen_source="" 913 for tmp_xpg in 7 6 5; do 914 AS_IF([test x"$define_xopen_source" != x], [ 915 break 916 ]) 917 RUBY_WERROR_FLAG([AC_TRY_COMPILE([ 918 #define _XOPEN_SOURCE ${tmp_xpg}00 919 #include <unistd.h> 920 #ifndef _XPG${tmp_xpg} 921 #error _XPG${tmp_xpg} should be defined by _XOPEN_SOURCE=${tmp_xpg}00 922 #endif 923 ], [], 924 [define_xopen_source=${tmp_xpg}00], []) 925 ]) 926 done 927 AS_IF([test x"$define_xopen_source" = x], [ 928 define_xopen_source=no 929 ]) 930 AC_MSG_RESULT($define_xopen_source) 931 AS_IF([test x"$define_xopen_source" != xno], [ 932 RUBY_APPEND_OPTIONS(CPPFLAGS, -D_XOPEN_SOURCE=$define_xopen_source) 933 ]) 934 ]) 935 ], 936[haiku*], [ 937 LIBS="$LIBS" # m lib is include in root 938 ], 939[cygwin*], [ ac_cv_header_langinfo_h=yes 940 RUBY_APPEND_OPTIONS(CPPFLAGS, -D_XOPEN_SOURCE -D_GNU_SOURCE) 941 AC_CHECK_FUNCS(cygwin_conv_path) 942 AC_LIBOBJ([langinfo]) 943 ], 944[mingw*], [ LIBS="-lshell32 -lws2_32 -liphlpapi -limagehlp -lshlwapi $LIBS" 945 ac_cv_header_a_out_h=no 946 ac_cv_header_pwd_h=no 947 ac_cv_header_utime_h=no 948 ac_cv_header_sys_ioctl_h=no 949 ac_cv_header_sys_param_h=no 950 ac_cv_header_sys_resource_h=no 951 ac_cv_header_sys_select_h=no 952 ac_cv_header_sys_time_h=no 953 ac_cv_header_sys_times_h=no 954 ac_cv_header_sys_socket_h=no 955 ac_cv_func_lstat=yes 956 ac_cv_func_times=yes 957 ac_cv_func_waitpid=yes 958 ac_cv_func_fsync=yes 959 ac_cv_func_seekdir=yes 960 ac_cv_func_telldir=yes 961 ac_cv_func_isinf=yes 962 ac_cv_func_isnan=yes 963 ac_cv_func_finite=yes 964 ac_cv_func_lchown=yes 965 ac_cv_func_link=yes 966 ac_cv_func_readlink=yes 967 ac_cv_func_symlink=yes 968 ac_cv_lib_crypt_crypt=no 969 ac_cv_func_getpgrp_void=no 970 ac_cv_func_memcmp_working=yes 971 ac_cv_lib_dl_dlopen=no 972 rb_cv_binary_elf=no 973 rb_cv_negative_time_t=no 974 ac_cv_func_fcntl=yes 975 ac_cv_func_flock=yes 976 ac_cv_func_gmtime_r=yes 977 rb_cv_large_fd_select=yes 978 ac_cv_type_struct_timeval=yes 979 ac_cv_func_clock_gettime=yes 980 ac_cv_func_clock_getres=yes 981 ac_cv_func_malloc_usable_size=no 982 ac_cv_type_off_t=yes 983 ac_cv_sizeof_off_t=8 984 AS_IF([test "$target_cpu" = x64], [ 985 ac_cv_func___builtin_setjmp=yes 986 ac_cv_func_round=no 987 rb_cv_fiber_coroutine=yes 988 ]) 989 ac_cv_func_tgamma=no 990 rb_cv_negative_time_t=yes 991 AC_CHECK_TYPE([NET_LUID], [], [], 992 [@%:@include <winsock2.h> 993 @%:@include <iphlpapi.h>]) 994 AS_IF([test x"$ac_cv_type_NET_LUID" = xyes], [ 995 AC_DEFINE(HAVE_TYPE_NET_LUID, 1) 996 ]) 997 AC_CHECK_FUNCS(_gmtime64_s) 998 AC_CHECK_FUNCS(_wfreopen_s) 999 AC_LIBOBJ([langinfo]) 1000 ], 1001[bsdi*], [ LIBS="-lm $LIBS" 1002 AC_DEFINE(BROKEN_SETREUID, 1) 1003 AC_DEFINE(BROKEN_SETREGID, 1) 1004 ac_cv_sizeof_rlim_t=8], 1005[freebsd*], [ LIBS="-lm $LIBS" 1006 ac_cv_func_getpeername=no 1007 ac_cv_func_getsockname=no 1008 ac_cv_func_shutdown=no 1009 ac_cv_func_close=no 1010 ], 1011[netbsd*], [ LIBS="-lm $LIBS" 1012 ], 1013[dragonfly*], [ LIBS="-lm $LIBS" 1014 # isinf() and isnan() are macros on DragonFly. 1015 ac_cv_func_isinf=yes 1016 ac_cv_func_isnan=yes 1017 ], 1018[aix*],[ LIBS="-lm $LIBS" 1019 ac_cv_func_round=no 1020 ac_cv_func___builtin_setjmp=no 1021 ], 1022[linux*],[ LIBS="-lm $LIBS" 1023 # __builtin_longjmp in ppc64* Linux does not restore 1024 # the TOC register (r2), which is problematic 1025 # when a global exit happens from JITted .so code. 1026 AS_CASE(["$target_cpu"], [powerpc64*], [ 1027 ac_cv_func___builtin_setjmp=no 1028 ]) 1029 # With gcc-8's -fcf-protection, MJIT's __builtin_longjmp fails. 1030 AS_CASE(["$CC $CFLAGS "], [*" -fcf-protection "*], [cf_protection=yes], [cf_protection=no]) 1031 AS_IF([test "$cf_protection" = yes], [ 1032 ac_cv_func___builtin_setjmp=no 1033 ]) 1034 ], 1035[ LIBS="-lm $LIBS"]) 1036: ${ORIG_LIBS=$LIBS} 1037 1038AC_CHECK_LIB(crypt, crypt) # glibc (GNU/Linux, GNU/Hurd, GNU/kFreeBSD) 1039AC_CHECK_LIB(dl, dlopen) # Dynamic linking for SunOS/Solaris and SYSV 1040AC_CHECK_LIB(dld, shl_load) # Dynamic linking for HP-UX 1041AC_CHECK_LIB(socket, shutdown) # SunOS/Solaris 1042 1043dnl Checks for header files. 1044AC_HEADER_DIRENT 1045dnl AC_HEADER_STDC has been checked in AC_USE_SYSTEM_EXTENSIONS 1046AC_HEADER_STDBOOL 1047AC_HEADER_SYS_WAIT 1048 1049AC_CHECK_HEADERS(a.out.h) 1050AC_CHECK_HEADERS(atomic.h) 1051AC_CHECK_HEADERS(direct.h) 1052AC_CHECK_HEADERS(grp.h) 1053AC_CHECK_HEADERS(fcntl.h) 1054AC_CHECK_HEADERS(float.h) 1055AC_CHECK_HEADERS(ieeefp.h) 1056AC_CHECK_HEADERS(intrinsics.h) 1057AC_CHECK_HEADERS(langinfo.h) 1058AC_CHECK_HEADERS(limits.h) 1059AC_CHECK_HEADERS(locale.h) 1060AC_CHECK_HEADERS(malloc.h) 1061AC_CHECK_HEADERS(malloc/malloc.h) 1062AC_CHECK_HEADERS(malloc_np.h) 1063AC_CHECK_HEADERS(net/socket.h) 1064AC_CHECK_HEADERS(process.h) 1065AC_CHECK_HEADERS(pwd.h) 1066AC_CHECK_HEADERS(sanitizer/asan_interface.h) 1067AC_CHECK_HEADERS(sanitizer/msan_interface.h) 1068AC_CHECK_HEADERS(setjmpex.h) 1069AC_CHECK_HEADERS(stdalign.h) 1070AC_CHECK_HEADERS(sys/attr.h) 1071AC_CHECK_HEADERS(sys/eventfd.h) 1072AC_CHECK_HEADERS(sys/fcntl.h) 1073AC_CHECK_HEADERS(sys/file.h) 1074AC_CHECK_HEADERS(sys/id.h) 1075AC_CHECK_HEADERS(sys/ioctl.h) 1076AC_CHECK_HEADERS(sys/mkdev.h) 1077AC_CHECK_HEADERS(sys/param.h) 1078AC_CHECK_HEADERS(sys/prctl.h) 1079AC_CHECK_HEADERS(sys/resource.h) 1080AC_CHECK_HEADERS(sys/select.h) 1081AC_CHECK_HEADERS(sys/sendfile.h) 1082AC_CHECK_HEADERS(sys/socket.h) 1083AC_CHECK_HEADERS(sys/syscall.h) 1084AC_CHECK_HEADERS(sys/sysmacros.h) 1085AC_CHECK_HEADERS(sys/time.h) 1086AC_CHECK_HEADERS(sys/times.h) 1087AC_CHECK_HEADERS(sys/uio.h) 1088AC_CHECK_HEADERS(sys/utime.h) 1089AC_CHECK_HEADERS(syscall.h) 1090AC_CHECK_HEADERS(time.h) 1091AC_CHECK_HEADERS(ucontext.h) 1092AC_CHECK_HEADERS(utime.h) 1093 1094AC_ARG_WITH([gmp], 1095 [AS_HELP_STRING([--without-gmp], 1096 [disable GNU GMP to accelerate Bignum operations])], 1097 [], 1098 [with_gmp=yes]) 1099AS_IF([test "x$with_gmp" != xno], 1100 [AC_CHECK_HEADERS(gmp.h) 1101 AS_IF([test "x$ac_cv_header_gmp_h" != xno], 1102 AC_SEARCH_LIBS([__gmpz_init], [gmp], 1103 [AC_DEFINE(HAVE_LIBGMP, 1)]))]) 1104 1105AC_ARG_WITH([jemalloc], 1106 [AS_HELP_STRING([--with-jemalloc],[use jemalloc allocator])], 1107 [with_jemalloc=$withval], [with_jemalloc=no]) 1108AS_IF([test "x$with_jemalloc" != xno],[ 1109 AC_SEARCH_LIBS([malloc_conf], [jemalloc], 1110 [ 1111 AC_DEFINE(HAVE_LIBJEMALLOC, 1) 1112 with_jemalloc=yes 1113 ], 1114 [test x$with_jemalloc = xyes && with_jemalloc=no]) 1115 AC_CHECK_HEADER(jemalloc/jemalloc.h, [ 1116 AC_DEFINE(RUBY_ALTERNATIVE_MALLOC_HEADER, [<jemalloc/jemalloc.h>]) 1117 ], 1118 [test x$with_jemalloc = xyes && with_jemalloc=no]) 1119 AS_IF([test "x$with_jemalloc" != xyes], [ 1120 AC_CACHE_CHECK([for jemalloc with JEMALLOC_MANGLE], rb_cv_jemalloc_demangle, 1121 [AC_LINK_IFELSE([AC_LANG_PROGRAM([@%:@define JEMALLOC_MANGLE 1 1122 @%:@ifdef RUBY_ALTERNATIVE_MALLOC_HEADER 1123 @%:@include RUBY_ALTERNATIVE_MALLOC_HEADER 1124 @%:@else 1125 @%:@include <jemalloc.h> 1126 @%:@endif], [return !&malloc_conf])], 1127 [rb_cv_jemalloc_demangle=yes], 1128 [rb_cv_jemalloc_demangle=no]) 1129 ]) 1130 ]) 1131 AS_IF([test "x$rb_cv_jemalloc_demangle" = xyes], [ 1132 AC_DEFINE(JEMALLOC_MANGLE) 1133 with_jemalloc=yes 1134 ]) 1135 AS_CASE(["$with_jemalloc"], 1136 [yes], 1137 [ 1138 AC_DEFINE(HAVE_MALLOC_CONF) 1139 ac_cv_func_malloc_usable_size=yes 1140 ], 1141 [no], 1142 [AC_MSG_ERROR([jemalloc requested but not found]) 1143 ]) 1144]) 1145 1146dnl check for large file stuff 1147mv confdefs.h confdefs1.h 1148: > confdefs.h 1149AC_SYS_LARGEFILE 1150# On 32-bit Solaris, it is safe to define _LARGEFILE_SOURCE 1151# which is not added by AC_SYS_LARGEFILE. 1152AS_IF([test x"$enable_largefile" != xno], [ 1153 AS_CASE(["$target_os"], [solaris*], [ 1154 AC_MSG_CHECKING([wheather _LARGEFILE_SOURCE should be defined]) 1155 AS_CASE(["${ac_cv_sys_file_offset_bits}:${ac_cv_sys_large_files}"], 1156 ["64:"|"64:no"|"64:unknown"], [ 1157 # insert _LARGEFILE_SOURCE before _FILE_OFFSET_BITS line 1158 # that is the same order as "getconf LFS_CFLAGS" output 1159 mv confdefs.h largefile0.h 1160 : > confdefs.h 1161 AC_DEFINE(_LARGEFILE_SOURCE) 1162 cat largefile0.h >> confdefs.h 1163 rm largefile0.h 1164 AC_MSG_RESULT([yes]) 1165 ], [AC_MSG_RESULT([no])]) 1166 ]) 1167]) 1168mv confdefs.h largefile.h 1169mv confdefs1.h confdefs.h 1170cat largefile.h >> confdefs.h 1171 1172AS_CASE(["$target_os"], 1173 [aix*], [ 1174 AS_CASE(["$target_cpu:$ac_cv_sys_large_files"], 1175 [ppc64:*|powerpc64:*], [], 1176 [*:no|*:unknown], [], 1177 [ 1178 # AIX currently does not support a 32-bit call to posix_fadvise() 1179 # if _LARGE_FILES is defined. 1180 ac_cv_func_posix_fadvise=no 1181 ]) 1182 ]) 1183 1184AC_C_BIGENDIAN 1185AC_C_CONST 1186AC_C_CHAR_UNSIGNED 1187AC_C_INLINE 1188AC_C_VOLATILE 1189AC_C_TYPEOF 1190 1191AS_CASE(":$ac_cv_c_const:$ac_cv_c_volatile:", 1192 [*:no:*], [AC_MSG_ERROR(ANSI C-conforming const and volatile are mandatory)]) 1193 1194AC_CHECK_TYPES([long long, off_t]) 1195 1196AC_CACHE_CHECK([char bit], [rb_cv_char_bit], 1197 [test "$universal_binary" = yes && cross_compiling=yes 1198 AC_COMPUTE_INT([rb_cv_char_bit], [CHAR_BIT], 1199 [AC_INCLUDES_DEFAULT([@%:@include <limits.h>])], [rb_cv_char_bit=8]) 1200 test "$universal_binary" = yes && cross_compiling=$real_cross_compiling]) 1201 1202RUBY_CHECK_SIZEOF(int, [], [ILP]) 1203RUBY_CHECK_SIZEOF(short) 1204RUBY_CHECK_SIZEOF(long, [int], [ILP LP]) 1205RUBY_CHECK_SIZEOF(long long) 1206RUBY_CHECK_SIZEOF(__int64, [8], [ILP LP]) 1207RUBY_CHECK_SIZEOF(__int128, [16], [ILP LP]) 1208RUBY_CHECK_SIZEOF(off_t) 1209RUBY_CHECK_SIZEOF(void*, [int long "long long"], [ILP LP LLP]) 1210RUBY_CHECK_SIZEOF(float) 1211RUBY_CHECK_SIZEOF(double) 1212RUBY_CHECK_SIZEOF(time_t, [long "long long"], [], [@%:@include <time.h>]) 1213RUBY_CHECK_SIZEOF(clock_t, [], [], [@%:@include <time.h>]) 1214 1215AC_CACHE_CHECK(packed struct attribute, rb_cv_packed_struct, 1216 [rb_cv_packed_struct=no 1217 for mac in \ 1218 "__pragma(pack(push, 1)) x __pragma(pack(pop))" \ 1219 "x __attribute__((packed))" \ 1220 ; do 1221 AC_TRY_COMPILE([@%:@define PACKED_STRUCT(x) $mac 1222 PACKED_STRUCT(struct { int a; });], [], 1223 [rb_cv_packed_struct=$mac; break]) 1224 done]) 1225AS_IF([test "$rb_cv_packed_struct" != no], [ 1226 AC_DEFINE_UNQUOTED([PACKED_STRUCT(x)], [$rb_cv_packed_struct]) 1227 RUBY_TRY_CFLAGS(-Wno-address-of-packed-member, [AC_DEFINE(USE_UNALIGNED_MEMBER_ACCESS)]) 1228], [ 1229 AC_DEFINE_UNQUOTED([PACKED_STRUCT(x)], x) 1230]) 1231 1232AS_IF([test "x$ac_cv_type_long_long" = xyes], [ 1233 RUBY_CHECK_PRINTF_PREFIX(long long, ll I64, LL) 1234], [test "x$ac_cv_type___int64" = xyes], [ 1235 RUBY_CHECK_PRINTF_PREFIX(__int64, ll I64, LL) 1236]) 1237 1238RUBY_REPLACE_TYPE(pid_t, int, PIDT) 1239RUBY_REPLACE_TYPE(uid_t, int, UIDT) 1240RUBY_REPLACE_TYPE(gid_t, int, GIDT) 1241RUBY_REPLACE_TYPE(time_t, [], TIMET, [@%:@include <time.h>]) 1242RUBY_REPLACE_TYPE(dev_t, [int long "long long"], DEVT) 1243RUBY_REPLACE_TYPE(mode_t, ["unsigned short" "unsigned int" long], MODET, [@%:@include <sys/stat.h>]) 1244RUBY_REPLACE_TYPE(rlim_t, [int long "long long"], RLIM, [ 1245@%:@ifdef HAVE_SYS_TYPES_H 1246@%:@include <sys/types.h> 1247@%:@endif 1248@%:@ifdef HAVE_SYS_TYPES_H 1249@%:@include <sys/time.h> 1250@%:@endif 1251@%:@include <sys/resource.h> 1252]) 1253RUBY_REPLACE_TYPE(off_t, [], OFFT) 1254RUBY_REPLACE_TYPE(clockid_t, [], CLOCKID, [@%:@ifdef HAVE_TIME_H 1255@%:@ include <time.h> 1256@%:@endif 1257@%:@ifdef HAVE_SYS_TIME_H 1258@%:@ include <sys/time.h> 1259@%:@endif]) 1260 1261AC_CACHE_CHECK(for prototypes, rb_cv_have_prototypes, 1262 [AC_TRY_COMPILE([int foo(int x) { return 0; }], [return foo(10);], 1263 rb_cv_have_prototypes=yes, 1264 rb_cv_have_prototypes=no)]) 1265AS_IF([test "$rb_cv_have_prototypes" = yes], [ 1266 AC_DEFINE(HAVE_PROTOTYPES) 1267]) 1268 1269AC_CACHE_CHECK(token paste string, rb_cv_tokenpaste, 1270 [AC_TRY_COMPILE([@%:@define paste(a,b) a@%:@@%:@b], 1271 [int xy = 1; return paste(x,y);], 1272 rb_cv_tokenpaste=ansi, 1273 rb_cv_tokenpaste=knr)]) 1274AS_IF([test "$rb_cv_tokenpaste" = ansi], [ 1275 AC_DEFINE(TOKEN_PASTE(x,y),[x@%:@@%:@y]) 1276], [ 1277 AC_DEFINE(TOKEN_PASTE(x,y),[x/**/y]) 1278]) 1279 1280AC_CACHE_CHECK(stringization, rb_cv_stringization, [ 1281 rb_cv_stringization=no 1282 for string in "#expr" '"expr"'; do 1283 AC_COMPILE_IFELSE([ 1284 AC_LANG_BOOL_COMPILE_TRY([ 1285#define STRINGIZE0(expr) $string 1286#define STRINGIZE(expr) STRINGIZE0(expr) 1287#undef real_test_for_stringization 1288#define test_for_stringization -.real_test_for_stringization.- 1289const char stringized[[]] = STRINGIZE(test_for_stringization); 1290], [sizeof(stringized) == 32])], 1291 [rb_cv_stringization="$string"; break], 1292 [rb_cv_stringization=no]) 1293 done] 1294) 1295AC_DEFINE(STRINGIZE(expr),STRINGIZE0(expr)) 1296AS_IF([test x"$rb_cv_stringization" != xno -a "$rb_cv_stringization" != "#expr"], [ 1297 AC_DEFINE_UNQUOTED(STRINGIZE0(expr),$rb_cv_stringization) 1298 AC_DEFINE(OLD_FASHIONED_STRINGIZATION,1) 1299]) 1300 1301AC_CACHE_CHECK([string literal concatenation], 1302 rb_cv_string_literal_concatenation, [ 1303 AC_COMPILE_IFELSE([ 1304 AC_LANG_BOOL_COMPILE_TRY([ 1305const char concatenated_literal[[]] = "literals" "to" 1306 "be" "concatenated."; 1307], [sizeof(concatenated_literal) == 26])], 1308 [rb_cv_string_literal_concatenation=yes], 1309 [rb_cv_string_literal_concatenation=no])] 1310) 1311AS_IF([test "$rb_cv_string_literal_concatenation" = no], [ 1312 AC_MSG_ERROR([No string literal concatenation]) 1313]) 1314 1315AC_CACHE_CHECK(for variable length prototypes and stdarg.h, rb_cv_stdarg, 1316 [AC_TRY_COMPILE([ 1317#include <stdarg.h> 1318int foo(int x, ...) { 1319 va_list va; 1320 va_start(va, x); 1321 va_arg(va, int); 1322 va_arg(va, char *); 1323 va_arg(va, double); 1324 return 0; 1325} 1326], [return foo(10, "", 3.14);], 1327 rb_cv_stdarg=yes, 1328 rb_cv_stdarg=no)]) 1329AS_IF([test "$rb_cv_stdarg" = yes], [ 1330 AC_DEFINE(HAVE_STDARG_PROTOTYPES) 1331]) 1332 1333AC_CACHE_CHECK(for variable length macro, rb_cv_va_args_macro, 1334 [AC_TRY_COMPILE([ 1335int foo(int x, ...); 1336@%:@define FOO(a, ...) foo(a, @%:@@%:@__VA_ARGS__) 1337], [FOO(1);FOO(1,2);FOO(1,2,3);], 1338 rb_cv_va_args_macro=yes, 1339 rb_cv_va_args_macro=no)]) 1340AS_IF([test "$rb_cv_va_args_macro" = yes], [ 1341 AC_DEFINE(HAVE_VA_ARGS_MACRO) 1342]) 1343 1344AC_CACHE_CHECK([for alignas() syntax], rb_cv_have_alignas, [ 1345rb_cv_have_alignas=no 1346RUBY_WERROR_FLAG([ 1347for attr in \ 1348 "_Alignas(x)" \ 1349 "alignas(x)" \ 1350 "@<:@@<:@alignas(x)@:>@@:>@" \ 1351 "__declspec(aligned(x))" \ 1352 "__attribute__((__aligned__(x)))" \ 1353; 1354do 1355 # C11 _Alignas and GCC __attribute__((__aligned__)) behave 1356 # slightly differently. What we want is GCC's. Check that 1357 # here by something C11 does not allow (`struct ALIGNAS ...`) 1358 AC_TRY_COMPILE( 1359 [@%:@define ALIGNAS(x) $attr 1360 struct ALIGNAS(128) conftest_tag { int foo; } foo; ], [], 1361 [rb_cv_have_alignas="$attr"; break], []) 1362done 1363])]) 1364AS_IF([test "$rb_cv_have_alignas" != no], [ 1365 AC_DEFINE_UNQUOTED([RUBY_ALIGNAS(x)], $rb_cv_have_alignas) 1366]) 1367 1368AC_CACHE_CHECK([for alignof() syntax], rb_cv_have_alignof,[ 1369rb_cv_have_alignof=no 1370RUBY_WERROR_FLAG([ 1371for expr in \ 1372 "alignof" \ 1373 "_Alignof" \ 1374 "__alignof" \ 1375 "__alignof__" \ 1376; 1377do 1378 AC_TRY_COMPILE([ 1379 @%:@ifdef HAVE_STDALIGN_H 1380 @%:@include <stdalign.h> 1381 @%:@endif],[return (int)$expr(int);], 1382 [rb_cv_have_alignof="$expr"; break], []) 1383done 1384])]) 1385AS_IF([test "$rb_cv_have_alignof" != no], [ 1386 AC_DEFINE_UNQUOTED(RUBY_ALIGNOF, $rb_cv_have_alignof) 1387]) 1388 1389RUBY_FUNC_ATTRIBUTE(__const__, CONSTFUNC) 1390RUBY_FUNC_ATTRIBUTE(__pure__, PUREFUNC) 1391RUBY_FUNC_ATTRIBUTE(__noreturn__, NORETURN) 1392RUBY_FUNC_ATTRIBUTE(__deprecated__, DEPRECATED) 1393RUBY_FUNC_ATTRIBUTE(__deprecated__("by "@%:@n), DEPRECATED_BY(n,x), rb_cv_func_deprecated_by) 1394RUBY_TYPE_ATTRIBUTE(__deprecated__ mesg, DEPRECATED_TYPE(mesg,x), rb_cv_type_deprecated) 1395RUBY_FUNC_ATTRIBUTE(__noinline__, NOINLINE) 1396RUBY_FUNC_ATTRIBUTE(__always_inline__, ALWAYS_INLINE) 1397RUBY_FUNC_ATTRIBUTE(__no_sanitize__(san), NO_SANITIZE(san, x), rb_cv_func_no_sanitize) 1398RUBY_FUNC_ATTRIBUTE(__no_sanitize_address__, NO_SANITIZE_ADDRESS) 1399RUBY_FUNC_ATTRIBUTE(__no_address_safety_analysis__, NO_ADDRESS_SAFETY_ANALYSIS) 1400RUBY_FUNC_ATTRIBUTE(__warn_unused_result__, WARN_UNUSED_RESULT) 1401RUBY_FUNC_ATTRIBUTE(__unused__, MAYBE_UNUSED) 1402RUBY_FUNC_ATTRIBUTE(__error__ mesg, ERRORFUNC(mesg,x), rb_cv_func___error__) 1403RUBY_FUNC_ATTRIBUTE(__warning__ mesg, WARNINGFUNC(mesg,x), rb_cv_func___warning__) 1404RUBY_FUNC_ATTRIBUTE(__weak__, WEAK, rb_cv_func_weak) 1405AS_IF([test "$rb_cv_func_weak" != x], [ 1406 AC_DEFINE(HAVE_FUNC_WEAK) 1407]) 1408 1409if_i386=${universal_binary+[defined __i386__]} 1410RUBY_FUNC_ATTRIBUTE(__stdcall__, FUNC_STDCALL, rb_cv_func_stdcall, ${if_i386}) 1411RUBY_FUNC_ATTRIBUTE(__cdecl__, FUNC_CDECL, rb_cv_func_cdecl, ${if_i386}) 1412RUBY_FUNC_ATTRIBUTE(__fastcall__, FUNC_FASTCALL, rb_cv_func_fastcall, ${if_i386}) 1413RUBY_FUNC_ATTRIBUTE(__optimize__("O0"), FUNC_UNOPTIMIZED, rb_cv_func_unoptimized) 1414RUBY_FUNC_ATTRIBUTE(__optimize__("-Os","-fomit-frame-pointer"), FUNC_MINIMIZED, rb_cv_func_minimized) 1415 1416AS_IF([test "$GCC" = yes], [ 1417 AC_CACHE_CHECK([for function alias], [rb_cv_gcc_function_alias], 1418 [rb_cv_gcc_function_alias=no 1419 for a in alias weak,alias; do 1420 AC_TRY_LINK([void foo(void) {} 1421 void bar(void) __attribute__(($a("foo")));], [bar()], 1422 [rb_cv_gcc_function_alias=$a; break]) 1423 done]) 1424 AS_IF([test "$rb_cv_gcc_function_alias" != no], [ 1425 AC_DEFINE(HAVE_ATTRIBUTE_FUNCTION_ALIAS) 1426 AC_DEFINE_UNQUOTED([RUBY_ALIAS_FUNCTION_TYPE(type, prot, name, args)], 1427 [type prot __attribute__(($rb_cv_gcc_function_alias(@%:@name)));]) 1428 AC_DEFINE_UNQUOTED([RUBY_ALIAS_FUNCTION_VOID(prot, name, args)], 1429 [RUBY_ALIAS_FUNCTION_TYPE(void, prot, name, args)]) 1430 ]) 1431 1432 AC_CACHE_CHECK([for __atomic builtins], [rb_cv_gcc_atomic_builtins], [ 1433 AC_TRY_LINK([unsigned int atomic_var;], 1434 [ 1435 __atomic_exchange_n(&atomic_var, 0, __ATOMIC_SEQ_CST); 1436 __atomic_exchange_n(&atomic_var, 1, __ATOMIC_SEQ_CST); 1437 __atomic_fetch_add(&atomic_var, 1, __ATOMIC_SEQ_CST); 1438 __atomic_fetch_sub(&atomic_var, 1, __ATOMIC_SEQ_CST); 1439 __atomic_or_fetch(&atomic_var, 1, __ATOMIC_SEQ_CST); 1440 ], 1441 [rb_cv_gcc_atomic_builtins=yes], 1442 [rb_cv_gcc_atomic_builtins=no])]) 1443 AS_IF([test "$rb_cv_gcc_atomic_builtins" = yes], [ 1444 AC_DEFINE(HAVE_GCC_ATOMIC_BUILTINS) 1445 ]) 1446 1447 AC_CACHE_CHECK([for __sync builtins], [rb_cv_gcc_sync_builtins], [ 1448 AC_TRY_LINK([unsigned int atomic_var;], 1449 [ 1450 __sync_lock_test_and_set(&atomic_var, 0); 1451 __sync_lock_test_and_set(&atomic_var, 1); 1452 __sync_fetch_and_add(&atomic_var, 1); 1453 __sync_fetch_and_sub(&atomic_var, 1); 1454 __sync_or_and_fetch(&atomic_var, 1); 1455 __sync_val_compare_and_swap(&atomic_var, 0, 1); 1456 ], 1457 [rb_cv_gcc_sync_builtins=yes], 1458 [rb_cv_gcc_sync_builtins=no])]) 1459 AS_IF([test "$rb_cv_gcc_sync_builtins" = yes], [ 1460 AC_DEFINE(HAVE_GCC_SYNC_BUILTINS) 1461 ]) 1462 1463 AC_CACHE_CHECK(for __builtin_unreachable, rb_cv_func___builtin_unreachable, 1464 [RUBY_WERROR_FLAG( 1465 [AC_TRY_LINK([volatile int zero;], 1466 [if (zero) __builtin_unreachable();], 1467 [rb_cv_func___builtin_unreachable=yes], 1468 [rb_cv_func___builtin_unreachable=no]) 1469 ]) 1470 ]) 1471 AS_IF([test "$rb_cv_func___builtin_unreachable" = yes], [ 1472 AC_DEFINE_UNQUOTED(UNREACHABLE, [__builtin_unreachable()]) 1473 ]) 1474]) 1475 1476AC_CACHE_CHECK(for exported function attribute, rb_cv_func_exported, [ 1477rb_cv_func_exported=no 1478RUBY_WERROR_FLAG([ 1479for mac in '__attribute__ ((__visibility__("default")))' '__declspec(dllexport)'; do 1480 AC_TRY_COMPILE([@%:@define RUBY_FUNC_EXPORTED $mac extern 1481 RUBY_FUNC_EXPORTED void conftest_attribute_check(void);], [], 1482 [rb_cv_func_exported="$mac"; break]) 1483done 1484])]) 1485AS_IF([test "$rb_cv_func_exported" != no], [ 1486 AC_DEFINE_UNQUOTED(RUBY_FUNC_EXPORTED, [$rb_cv_func_exported extern]) 1487]) 1488 1489RUBY_APPEND_OPTION(XCFLAGS, -DRUBY_EXPORT) 1490 1491AC_ARG_ENABLE(mathn, 1492 AS_HELP_STRING([--disable-mathn], [disable canonicalization for mathn]), 1493 [mathn=$enableval], [mathn=yes]) 1494test "x$mathn" = xyes || mathn= 1495AC_SUBST(MATHN, $mathn) 1496 1497AC_CACHE_CHECK(for function name string predefined identifier, 1498 rb_cv_function_name_string, 1499 [rb_cv_function_name_string=no 1500 RUBY_WERROR_FLAG([ 1501 for func in __func__ __FUNCTION__; do 1502 AC_TRY_LINK([@%:@include <stdio.h>], 1503 [puts($func);], 1504 [rb_cv_function_name_string=$func 1505 break]) 1506 done 1507 ])] 1508) 1509AS_IF([test "$rb_cv_function_name_string" != no], [ 1510 AC_DEFINE_UNQUOTED(RUBY_FUNCTION_NAME_STRING, [$rb_cv_function_name_string]) 1511]) 1512 1513AC_CACHE_CHECK(if enum over int is allowed, rb_cv_enum_over_int, [ 1514 rb_cv_enum_over_int=no 1515 AS_IF([test "x$ac_cv_type_long_long" = xyes], [ 1516 type="unsigned long long" max="ULLONG_MAX" 1517 ], [ 1518 type="unsigned long" max="ULONG_MAX" 1519 ]) 1520 RUBY_WERROR_FLAG([ 1521 AC_COMPILE_IFELSE([ 1522 AC_LANG_BOOL_COMPILE_TRY([ 1523 @%:@include <limits.h> 1524 enum {conftest_max = $max}; 1525 ], [ 1526 (conftest_max == $max) && 1527 (sizeof(conftest_max) == sizeof($type)) 1528 ] 1529 )], 1530 [rb_cv_enum_over_int=yes], 1531 [rb_cv_enum_over_int=no] 1532 ) 1533 ]) 1534]) 1535AS_IF([test $rb_cv_enum_over_int = yes], [ 1536 AC_DEFINE(ENUM_OVER_INT, 1) 1537]) 1538 1539dnl Check whether we need to define sys_nerr locally 1540AC_CHECK_DECLS([sys_nerr], [], [], [$ac_includes_default 1541@%:@include <errno.h>]) 1542 1543AC_CHECK_DECLS([getenv]) 1544 1545AS_CASE(["$target_cpu"], 1546[alpha*|sh4|sh4el|sh4eb], [AS_CASE(["$target_os"::"$GCC"], 1547 [*::yes], # gcc 1548 [CFLAGS="-mieee $CFLAGS"], 1549 [osf*], # ccc 1550 [CFLAGS="-ieee $CFLAGS"], 1551 )], 1552[sparc*], [AC_LIBOBJ([sparc])]) 1553 1554ac_cv_header_net_socket_h=${ac_cv_header_net_socket_h=no} 1555AS_IF([test "$ac_cv_header_net_socket_h" = yes], [ 1556 ac_cv_header_sys_socket_h=${ac_cv_header_sys_socket_h=no} 1557], [ 1558 ac_cv_header_sys_socket_h=${ac_cv_header_sys_socket_h=yes} 1559]) 1560 1561 1562AC_TYPE_SIZE_T 1563RUBY_CHECK_SIGNEDNESS(size_t, [AC_MSG_ERROR(size_t is signed)], [], 1564 [@%:@include <sys/types.h>]) 1565RUBY_CHECK_SIZEOF(size_t, [int long void*], [], [@%:@include <sys/types.h>]) 1566RUBY_CHECK_SIZEOF(ptrdiff_t, size_t, [], [@%:@include <stddef.h>]) 1567RUBY_CHECK_PRINTF_PREFIX(size_t, z) 1568RUBY_CHECK_PRINTF_PREFIX(ptrdiff_t, t) 1569AC_STRUCT_ST_BLKSIZE 1570AC_STRUCT_ST_BLOCKS 1571AC_STRUCT_ST_RDEV 1572RUBY_CHECK_SIZEOF([struct stat.st_size], [off_t int long "long long"], [], [@%:@include <sys/stat.h>]) 1573AS_IF([test "$ac_cv_member_struct_stat_st_blocks" = yes], [ 1574 RUBY_CHECK_SIZEOF([struct stat.st_blocks], [off_t int long "long long"], [], [@%:@include <sys/stat.h>]) 1575]) 1576RUBY_CHECK_SIZEOF([struct stat.st_ino], [long "long long"], [], [@%:@include <sys/stat.h>]) 1577AC_CHECK_MEMBERS([struct stat.st_atim]) 1578AC_CHECK_MEMBERS([struct stat.st_atimespec]) 1579AC_CHECK_MEMBERS([struct stat.st_atimensec]) 1580AC_CHECK_MEMBERS([struct stat.st_mtim]) 1581AC_CHECK_MEMBERS([struct stat.st_mtimespec]) 1582AC_CHECK_MEMBERS([struct stat.st_mtimensec]) 1583AC_CHECK_MEMBERS([struct stat.st_ctim]) 1584AC_CHECK_MEMBERS([struct stat.st_ctimespec]) 1585AC_CHECK_MEMBERS([struct stat.st_ctimensec]) 1586AC_CHECK_MEMBERS([struct stat.st_birthtimespec]) 1587 1588AC_CHECK_TYPES([struct timeval], [], [], [@%:@ifdef HAVE_TIME_H 1589@%:@include <time.h> 1590@%:@endif 1591@%:@ifdef HAVE_SYS_TIME_H 1592@%:@include <sys/time.h> 1593@%:@endif]) 1594 1595AS_IF([test "${ac_cv_type_struct_timeval}" = yes], [ 1596 RUBY_CHECK_SIZEOF([struct timeval.tv_sec], [time_t long "long long"], [], 1597 [@%:@ifdef HAVE_TIME_H 1598@%:@include <time.h> 1599@%:@endif 1600@%:@ifdef HAVE_SYS_TIME_H 1601@%:@include <sys/time.h> 1602@%:@endif]) 1603 AS_CASE(${ac_cv_sizeof_struct_timeval_tv_sec}, 1604 [SIZEOF_INT], [t=int], 1605 [SIZEOF_LONG], [t=long], 1606 [SIZEOF_LONG_LONG], [t=LONG_LONG], 1607 [t=]) 1608 AS_IF([test "${t}" != ""], [ 1609 AC_DEFINE_UNQUOTED(TYPEOF_TIMEVAL_TV_SEC, [$t]) 1610 ]) 1611]) 1612 1613AC_CHECK_TYPES([struct timespec], [], [], [@%:@ifdef HAVE_TIME_H 1614@%:@include <time.h> 1615@%:@endif 1616@%:@ifdef HAVE_SYS_TIME_H 1617@%:@include <sys/time.h> 1618@%:@endif]) 1619 1620AC_CHECK_TYPES([struct timezone], [], [], [@%:@ifdef HAVE_TIME_H 1621@%:@ include <time.h> 1622@%:@endif 1623@%:@ifdef HAVE_SYS_TIME_H 1624@%:@ include <sys/time.h> 1625@%:@endif]) 1626 1627AC_CACHE_VAL([rb_cv_large_fd_select], 1628 [AC_CHECK_TYPE(fd_mask, [rb_cv_large_fd_select=yes], [rb_cv_large_fd_select=no], [AC_INCLUDES_DEFAULT([]) 1629@%:@ifdef HAVE_SYS_SELECT_H 1630@%:@ include <sys/select.h> 1631@%:@endif])]) 1632AS_IF([test "$rb_cv_large_fd_select" = yes], [ 1633 AC_DEFINE(HAVE_RB_FD_INIT, 1) 1634]) 1635 1636RUBY_DEFINT(int8_t, 1) 1637RUBY_DEFINT(uint8_t, 1, unsigned) 1638RUBY_DEFINT(int16_t, 2) 1639RUBY_DEFINT(uint16_t, 2, unsigned) 1640RUBY_DEFINT(int32_t, 4) 1641RUBY_DEFINT(uint32_t, 4, unsigned) 1642RUBY_DEFINT(int64_t, 8) 1643RUBY_DEFINT(uint64_t, 8, unsigned) 1644RUBY_DEFINT(int128_t, 16) 1645RUBY_DEFINT(uint128_t, 16, unsigned) 1646RUBY_DEFINT(intptr_t, void*) 1647RUBY_DEFINT(uintptr_t, void*, unsigned) 1648AS_IF([test "x$rb_cv_type_intptr_t" != xno], [ 1649 RUBY_CHECK_PRINTF_PREFIX(intptr_t, '' ll I64 l, PTR) 1650]) 1651RUBY_DEFINT(ssize_t, size_t, [], [@%:@include <sys/types.h>]) dnl may differ from int, so not use AC_TYPE_SSIZE_T. 1652AS_IF([test "x$rb_cv_type_int64_t" != xno], [ 1653 RUBY_CHECK_PRINTF_PREFIX(int64_t, ll I64 l, 64) 1654]) 1655 1656AC_CACHE_CHECK(for stack end address, rb_cv_stack_end_address, 1657[rb_cv_stack_end_address=no 1658 AC_TRY_LINK( 1659 [extern void *__libc_stack_end;], 1660 [if (!__libc_stack_end) return 1;], 1661 [rb_cv_stack_end_address="__libc_stack_end"]) 1662]) 1663AS_IF([test $rb_cv_stack_end_address != no], [ 1664 AC_DEFINE_UNQUOTED(STACK_END_ADDRESS, $rb_cv_stack_end_address) 1665]) 1666 1667dnl Checks for library functions. 1668AC_TYPE_GETGROUPS 1669AC_TYPE_SIGNAL 1670AS_CASE(["${target_cpu}-${target_os}:${target_archs}"], 1671[powerpc-darwin*], [ 1672 AC_LIBSOURCES(alloca.c) 1673 AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.${ac_objext}]) 1674 AC_DEFINE(C_ALLOCA) 1675 AC_DEFINE_UNQUOTED(alloca, alloca) 1676 ], 1677[universal-darwin*:*ppc*], [ 1678 AC_LIBSOURCES(alloca.c) 1679 AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.${ac_objext}]) 1680 RUBY_DEFINE_IF([defined __powerpc__], C_ALLOCA, 1) 1681 RUBY_DEFINE_IF([defined __powerpc__], alloca, alloca) 1682 ], 1683[ 1684 AC_FUNC_ALLOCA 1685 ]) 1686AS_IF([test "x$ALLOCA" = "x"], [ 1687 AC_CACHE_CHECK([for dynamic size alloca], rb_cv_dynamic_alloca, [ 1688 for chk in ok __chkstk; do 1689 AC_TRY_LINK([ 1690 @%:@ifdef HAVE_ALLOCA_H 1691 @%:@include <alloca.h> 1692 @%:@endif 1693 void $chk() {} 1694 int dynamic_alloca_test; 1695 int dynamic_alloca_result;], 1696 [dynamic_alloca_result = alloca(dynamic_alloca_test) != 0;], 1697 [rb_cv_dynamic_alloca=$chk; break]) 1698 done]) 1699 AS_IF([test "x$rb_cv_dynamic_alloca" = "x__chkstk"], [ 1700 AC_DEFINE_UNQUOTED(RUBY_ALLOCA_CHKSTK, _$rb_cv_dynamic_alloca) 1701 AS_CASE("$target_cpu", 1702 [x64|x86_64], [ 1703 AC_SUBST([ALLOCA], [\${LIBOBJDIR}x86_64-chkstk.${ac_objext}]) 1704 ],) 1705 ]) 1706]) 1707AC_FUNC_MEMCMP 1708 1709# http://sources.redhat.com/ml/libc-hacker/2005-08/msg00008.html 1710# Debian GNU/Linux Etch's libc6.1 2.3.6.ds1-13etch5 has this problem. 1711# Debian GNU/Linux Lenny's libc6.1 2.7-10 has no problem. 1712AC_CACHE_CHECK(for broken erfc of glibc-2.3.6 on IA64, rb_cv_broken_glibc_ia64_erfc, 1713 [AC_TRY_RUN([ 1714#include <math.h> 1715int 1716main() 1717{ 1718 erfc(10000.0); 1719 return 0; 1720} 1721], 1722 rb_cv_broken_glibc_ia64_erfc=no, 1723 rb_cv_broken_glibc_ia64_erfc=yes, 1724 rb_cv_broken_glibc_ia64_erfc=no)]) 1725AS_CASE([$rb_cv_broken_glibc_ia64_erfc],[yes],[ac_cv_func_erf=no]) 1726 1727AS_CASE(["$target_os"],[freebsd*],[ 1728 AC_DEFINE(BROKEN_CLOSE) 1729 AC_REPLACE_FUNCS(close) 1730 ]) 1731 1732AC_REPLACE_FUNCS(acosh) 1733AC_REPLACE_FUNCS(cbrt) 1734AC_REPLACE_FUNCS(crypt) 1735AC_REPLACE_FUNCS(dup2) 1736AC_REPLACE_FUNCS(erf) 1737AC_REPLACE_FUNCS(explicit_bzero) 1738AC_REPLACE_FUNCS(ffs) 1739AC_REPLACE_FUNCS(finite) 1740AC_REPLACE_FUNCS(flock) 1741AC_REPLACE_FUNCS(hypot) 1742AC_REPLACE_FUNCS(isinf) 1743AC_REPLACE_FUNCS(isnan) 1744AC_REPLACE_FUNCS(lgamma_r) 1745AC_REPLACE_FUNCS(memmove) 1746AC_REPLACE_FUNCS(nan) 1747AC_REPLACE_FUNCS(nextafter) 1748AC_REPLACE_FUNCS(setproctitle) 1749AC_REPLACE_FUNCS(strchr) 1750AC_REPLACE_FUNCS(strerror) 1751AC_REPLACE_FUNCS(strlcat) 1752AC_REPLACE_FUNCS(strlcpy) 1753AC_REPLACE_FUNCS(strstr) 1754AC_REPLACE_FUNCS(tgamma) 1755 1756# for missing/setproctitle.c 1757AS_CASE(["$target_os"], 1758[aix* | k*bsd*-gnu | kopensolaris*-gnu | linux* | darwin*], [AC_DEFINE(SPT_TYPE,SPT_REUSEARGV)], 1759[hpux*], [AC_DEFINE(SPT_TYPE,SPT_PSTAT) ], 1760[]) 1761AC_CHECK_HEADERS(sys/pstat.h) 1762 1763 1764AC_CACHE_CHECK(for signbit, rb_cv_have_signbit, 1765 [AC_TRY_LINK([ 1766#include <math.h> 1767], [int v = signbit(-0.0);], 1768 rb_cv_have_signbit=yes, 1769 rb_cv_have_signbit=no)]) 1770AS_IF([test "$rb_cv_have_signbit" = yes], [ 1771 AC_DEFINE(HAVE_SIGNBIT) 1772], [ 1773 AC_LIBOBJ([signbit]) 1774]) 1775 1776AC_CACHE_CHECK(for broken memmem, rb_cv_broken_memmem, [ 1777 AC_TRY_RUN([ 1778@%:@include <string.h> 1779 1780int 1781main(int argc, char **argv) 1782{ 1783 const char *str = "hogefugafoobar"; 1784 const char *rs = "foo"; 1785 const char *empty = ""; 1786 char *p; 1787 1788 p = memmem(str, strlen(str), rs, strlen(rs)); 1789 if (p == str+8) { 1790 p = memmem(str, strlen(str), empty, strlen(empty)); 1791 if (p == str) 1792 return 0; 1793 } 1794 return 1; 1795} 1796 ], 1797 rb_cv_broken_memmem=no, 1798 rb_cv_broken_memmem=yes, 1799 rb_cv_broken_memmem=yes) 1800]) 1801test x"$rb_cv_broken_memmem" = xyes && ac_cv_func_memmem=no 1802 1803AC_FUNC_FORK 1804 1805AC_CHECK_FUNCS(__syscall) 1806AC_CHECK_FUNCS(_longjmp) # used for AC_ARG_WITH(setjmp-type) 1807# we don't use _setjmp if _longjmp doesn't exist. 1808test x$ac_cv_func__longjmp = xno && ac_cv_func__setjmp=no 1809AC_CHECK_FUNCS(arc4random_buf) 1810AC_CHECK_FUNCS(atan2l atan2f) 1811AC_CHECK_FUNCS(chroot) 1812AC_CHECK_FUNCS(chsize) 1813AC_CHECK_FUNCS(clock_gettime) 1814AC_CHECK_FUNCS(cosh) 1815AC_CHECK_FUNCS(crypt_r) 1816AC_CHECK_FUNCS(daemon) 1817AC_CHECK_FUNCS(dirfd) 1818AC_CHECK_FUNCS(dl_iterate_phdr) 1819AC_CHECK_FUNCS(dlopen) 1820AC_CHECK_FUNCS(dladdr) 1821AC_CHECK_FUNCS(dup) 1822AC_CHECK_FUNCS(dup3) 1823AC_CHECK_FUNCS(eaccess) 1824AC_CHECK_FUNCS(endgrent) 1825AC_CHECK_FUNCS(eventfd) 1826AC_CHECK_FUNCS(fchmod) 1827AC_CHECK_FUNCS(fchown) 1828AC_CHECK_FUNCS(fcntl) 1829AC_CHECK_FUNCS(fdatasync) 1830AC_CHECK_FUNCS(fdopendir) 1831AC_CHECK_FUNCS(fgetattrlist) 1832AC_CHECK_FUNCS(fmod) 1833AC_CHECK_FUNCS(fstatat) 1834AC_CHECK_FUNCS(fsync) 1835AC_CHECK_FUNCS(ftruncate) 1836AC_CHECK_FUNCS(ftruncate64) # used for Win32 platform 1837AC_CHECK_FUNCS(getattrlist) 1838AC_CHECK_FUNCS(getcwd) 1839AC_CHECK_FUNCS(getgidx) 1840AC_CHECK_FUNCS(getgrnam) 1841AC_CHECK_FUNCS(getgrnam_r) 1842AC_CHECK_FUNCS(getgroups) 1843AC_CHECK_FUNCS(getlogin) 1844AC_CHECK_FUNCS(getlogin_r) 1845AC_CHECK_FUNCS(getpgid) 1846AC_CHECK_FUNCS(getpgrp) 1847AC_CHECK_FUNCS(getpriority) 1848AC_CHECK_FUNCS(getpwnam) 1849AC_CHECK_FUNCS(getpwnam_r) 1850AC_CHECK_FUNCS(getpwuid) 1851AC_CHECK_FUNCS(getpwuid_r) 1852AC_CHECK_FUNCS(getresgid) 1853AC_CHECK_FUNCS(getresuid) 1854AC_CHECK_FUNCS(getrlimit) 1855AC_CHECK_FUNCS(getsid) 1856AC_CHECK_FUNCS(gettimeofday) # for making ac_cv_func_gettimeofday 1857AC_CHECK_FUNCS(getuidx) 1858AC_CHECK_FUNCS(gmtime_r) 1859AC_CHECK_FUNCS(grantpt) 1860AC_CHECK_FUNCS(initgroups) 1861AC_CHECK_FUNCS(ioctl) 1862AC_CHECK_FUNCS(isfinite) 1863AC_CHECK_FUNCS(issetugid) 1864AC_CHECK_FUNCS(killpg) 1865AC_CHECK_FUNCS(lchmod) 1866AC_CHECK_FUNCS(lchown) 1867AC_CHECK_FUNCS(link) 1868AC_CHECK_FUNCS(llabs) 1869AC_CHECK_FUNCS(lockf) 1870AC_CHECK_FUNCS(log2) 1871AC_CHECK_FUNCS(lstat) 1872AC_CHECK_FUNCS(lutimes) 1873AC_CHECK_FUNCS(malloc_usable_size) 1874AC_CHECK_FUNCS(malloc_size) 1875AC_CHECK_FUNCS(mblen) 1876AC_CHECK_FUNCS(memalign) 1877AC_CHECK_FUNCS(memset_s) 1878AC_CHECK_FUNCS(writev) 1879AC_CHECK_FUNCS(memrchr) 1880AC_CHECK_FUNCS(memmem) 1881AC_CHECK_FUNCS(mkfifo) 1882AC_CHECK_FUNCS(mknod) 1883AC_CHECK_FUNCS(mktime) 1884AC_CHECK_FUNCS(openat) 1885AC_CHECK_FUNCS(pipe2) 1886AC_CHECK_FUNCS(poll) 1887AC_CHECK_FUNCS(posix_fadvise) 1888AC_CHECK_FUNCS(posix_memalign) 1889AC_CHECK_FUNCS(ppoll) 1890AC_CHECK_FUNCS(pread) 1891AC_CHECK_FUNCS(pwrite) 1892AC_CHECK_FUNCS(qsort_r) 1893AC_CHECK_FUNCS(qsort_s) 1894AC_CHECK_FUNCS(readlink) 1895AC_CHECK_FUNCS(round) 1896AC_CHECK_FUNCS(sched_getaffinity) 1897AC_CHECK_FUNCS(seekdir) 1898AC_CHECK_FUNCS(select_large_fdset) 1899AC_CHECK_FUNCS(sendfile) 1900AC_CHECK_FUNCS(setegid) 1901AC_CHECK_FUNCS(setenv) 1902AC_CHECK_FUNCS(seteuid) 1903AC_CHECK_FUNCS(setgid) 1904AC_CHECK_FUNCS(setgroups) 1905AC_CHECK_FUNCS(setpgid) 1906AC_CHECK_FUNCS(setpgrp) 1907AC_CHECK_FUNCS(setregid) 1908AC_CHECK_FUNCS(setresgid) 1909AC_CHECK_FUNCS(setresuid) 1910AC_CHECK_FUNCS(setreuid) 1911AC_CHECK_FUNCS(setrgid) 1912AC_CHECK_FUNCS(setrlimit) 1913AC_CHECK_FUNCS(setruid) 1914AC_CHECK_FUNCS(setsid) 1915AC_CHECK_FUNCS(setuid) 1916AC_CHECK_FUNCS(shutdown) 1917AC_CHECK_FUNCS(sigaction) 1918AC_CHECK_FUNCS(sigaltstack) 1919AC_CHECK_FUNCS(sigprocmask) 1920AC_CHECK_FUNCS(sinh) 1921AC_CHECK_FUNCS(spawnv) 1922AC_CHECK_FUNCS(symlink) 1923AC_CHECK_FUNCS(syscall) 1924AC_CHECK_FUNCS(sysconf) 1925AC_CHECK_FUNCS(tanh) 1926AC_CHECK_FUNCS(telldir) 1927AC_CHECK_FUNCS(timegm) 1928AC_CHECK_FUNCS(times) 1929AC_CHECK_FUNCS(truncate) 1930AC_CHECK_FUNCS(truncate64) # used for Win32 1931AC_CHECK_FUNCS(unsetenv) 1932AC_CHECK_FUNCS(utimensat) 1933AC_CHECK_FUNCS(utimes) 1934AC_CHECK_FUNCS(wait4) 1935AC_CHECK_FUNCS(waitpid) 1936 1937AS_CASE(["$ac_cv_func_memset_s:$ac_cv_func_qsort_s"], [*yes*], 1938 [RUBY_DEFINE_IF([!defined __STDC_WANT_LIB_EXT1__], [__STDC_WANT_LIB_EXT1__], 1)]) 1939 1940AS_IF([test "$ac_cv_func_getcwd" = yes], [ 1941 AC_CACHE_CHECK(if getcwd allocates buffer if NULL is given, [rb_cv_getcwd_malloc], 1942 [AC_TRY_RUN([ 1943@%:@include <stddef.h> 1944@%:@include <stdio.h> 1945@%:@ifdef HAVE_UNISTD_H 1946@%:@include <unistd.h> 1947@%:@endif 1948@%:@ifndef EXIT_SUCCESS 1949@%:@define EXIT_SUCCESS 0 1950@%:@endif 1951@%:@ifndef EXIT_FAILURE 1952@%:@define EXIT_FAILURE 1 1953@%:@endif 1954 1955int 1956main(int argc, char **argv) 1957{ 1958 if (!getcwd(NULL, 0)) return EXIT_FAILURE; 1959 return EXIT_SUCCESS; 1960} 1961], 1962 rb_cv_getcwd_malloc=yes, 1963 rb_cv_getcwd_malloc=no, 1964 AS_CASE($target_os, 1965 [linux*|darwin*|*bsd|cygwin*|mingw*|mswin*], 1966 [rb_cv_getcwd_malloc=yes], 1967 [rb_cv_getcwd_malloc=no]))]) 1968 AS_IF([test "$rb_cv_getcwd_malloc" = no], [AC_DEFINE(NO_GETCWD_MALLOC, 1)]) 1969]) 1970 1971AS_IF([test "$ac_cv_func_crypt_r" = yes], 1972 [AC_CHECK_HEADERS(crypt.h)]) 1973AS_IF([test "$ac_cv_func_crypt_r:$ac_cv_header_crypt_h" = yes:yes], 1974 [AC_CHECK_MEMBERS([struct crypt_data.initialized], [], [], 1975 [AC_INCLUDES_DEFAULT([@%:@include <crypt.h>])])]) 1976 1977RUBY_CHECK_BUILTIN_FUNC(__builtin_alloca_with_align, [__builtin_alloca_with_align(1, 4096)]) 1978RUBY_CHECK_BUILTIN_FUNC(__builtin_assume_aligned, [__builtin_assume_aligned((void*)32, 32)]) 1979RUBY_CHECK_BUILTIN_FUNC(__builtin_bswap16, [__builtin_bswap16(0)]) 1980RUBY_CHECK_BUILTIN_FUNC(__builtin_bswap32, [__builtin_bswap32(0)]) 1981RUBY_CHECK_BUILTIN_FUNC(__builtin_bswap64, [__builtin_bswap64(0)]) 1982RUBY_CHECK_BUILTIN_FUNC(__builtin_popcount, [__builtin_popcount(0)]) 1983RUBY_CHECK_BUILTIN_FUNC(__builtin_popcountll, [__builtin_popcountll(0)]) 1984RUBY_CHECK_BUILTIN_FUNC(__builtin_clz, [__builtin_clz(0)]) 1985RUBY_CHECK_BUILTIN_FUNC(__builtin_clzl, [__builtin_clzl(0)]) 1986RUBY_CHECK_BUILTIN_FUNC(__builtin_clzll, [__builtin_clzll(0)]) 1987RUBY_CHECK_BUILTIN_FUNC(__builtin_ctz, [__builtin_ctz(0)]) 1988RUBY_CHECK_BUILTIN_FUNC(__builtin_ctzll, [__builtin_ctzll(0)]) 1989RUBY_CHECK_BUILTIN_FUNC(__builtin_add_overflow, [int x;__builtin_add_overflow(0,0,&x)]) 1990RUBY_CHECK_BUILTIN_FUNC(__builtin_sub_overflow, [int x;__builtin_sub_overflow(0,0,&x)]) 1991RUBY_CHECK_BUILTIN_FUNC(__builtin_mul_overflow, [int x;__builtin_mul_overflow(0,0,&x)]) 1992RUBY_CHECK_BUILTIN_FUNC(__builtin_mul_overflow_p, [__builtin_mul_overflow_p(0,0,(int)0)]) 1993RUBY_CHECK_BUILTIN_FUNC(__builtin_constant_p, [__builtin_constant_p(0)]) 1994RUBY_CHECK_BUILTIN_FUNC(__builtin_choose_expr, [ 1995 [int x[__extension__(__builtin_choose_expr(1, 1, -1))]]; 1996 [int y[__extension__(__builtin_choose_expr(0, -1, 1))]]; 1997 ]) 1998AS_IF([test x$rb_cv_builtin___builtin_choose_expr = xyes], [ 1999 RUBY_CHECK_BUILTIN_FUNC(__builtin_choose_expr_constant_p, [ 2000 [int x[__extension__(__builtin_choose_expr(__builtin_constant_p(1), 1, -1))]]; 2001 [int y[__extension__(__builtin_choose_expr(__builtin_constant_p(foo), -1, 1))]]; 2002 ]) 2003]) 2004RUBY_CHECK_BUILTIN_FUNC(__builtin_types_compatible_p, [__builtin_types_compatible_p(int, int)]) 2005RUBY_CHECK_BUILTIN_FUNC(__builtin_trap, [__builtin_trap()]) 2006 2007AS_IF([test "$ac_cv_func_qsort_r" != no], [ 2008 AC_CACHE_CHECK(whether qsort_r is GNU version, rb_cv_gnu_qsort_r, 2009 [AC_TRY_COMPILE([ 2010@%:@include <stdlib.h> 2011void (qsort_r)(void *base, size_t nmemb, size_t size, 2012 int (*compar)(const void *, const void *, void *), 2013 void *arg); 2014],[ ], 2015 [rb_cv_gnu_qsort_r=yes], 2016 [rb_cv_gnu_qsort_r=no]) 2017 ]) 2018 AC_CACHE_CHECK(whether qsort_r is BSD version, rb_cv_bsd_qsort_r, 2019 [AC_TRY_COMPILE([ 2020@%:@include <stdlib.h> 2021void (qsort_r)(void *base, size_t nmemb, size_t size, 2022 void *arg, int (*compar)(void *, const void *, const void *)); 2023],[ ], 2024 [rb_cv_bsd_qsort_r=yes], 2025 [rb_cv_bsd_qsort_r=no]) 2026 ]) 2027 AS_CASE("$rb_cv_gnu_qsort_r:$rb_cv_bsd_qsort_r", 2028 [yes:no], [ 2029 AC_DEFINE(HAVE_GNU_QSORT_R, 1) 2030 ], 2031 [no:yes], [ 2032 AC_DEFINE(HAVE_BSD_QSORT_R, 1) 2033 ]) 2034]) 2035 2036AC_CACHE_CHECK(whether atan2 handles Inf as C99, rb_cv_atan2_inf_c99, [ 2037 AS_IF([test $ac_cv_func_atan2f:$ac_cv_func_atan2l = yes:yes], [ 2038 AC_TRY_RUN([ 2039@%:@include <math.h> 2040@%:@ifdef HAVE_UNISTD_H 2041@%:@include <unistd.h> 2042@%:@endif 2043@%:@ifndef EXIT_SUCCESS 2044@%:@define EXIT_SUCCESS 0 2045@%:@endif 2046@%:@ifndef EXIT_FAILURE 2047@%:@define EXIT_FAILURE 1 2048@%:@endif 2049 2050int 2051main(int argc, char **argv) 2052{ 2053 if (fabs(atan2(INFINITY, INFINITY) - M_PI_4) <= 0.01) return EXIT_SUCCESS; 2054 return EXIT_FAILURE; 2055} 2056], 2057 [rb_cv_atan2_inf_c99=yes], 2058 [rb_cv_atan2_inf_c99=no], 2059 [AS_CASE($target_os, [mingw*|mswin*], [rb_cv_atan2_inf_c99=no], [rb_cv_atan2_inf_c99=yes])] 2060 ) 2061 ], [rb_cv_atan2_inf_c99=no]) 2062]) 2063AS_IF([test "x$rb_cv_atan2_inf_c99" = xyes], [AC_DEFINE(ATAN2_INF_C99)]) 2064 2065# Some platform need -lrt for clock_gettime, but the other don't. 2066AS_IF([test x"$ac_cv_func_clock_gettime" != xyes], [ 2067 # glibc 2.17 moves clock_* functions from librt to the main C library. 2068 # http://sourceware.org/ml/libc-announce/2012/msg00001.html 2069 AC_CHECK_LIB(rt, clock_gettime) 2070 AS_IF([test x"$ac_cv_lib_rt_clock_gettime" = xyes], [ 2071 AC_DEFINE(HAVE_CLOCK_GETTIME, 1) 2072 ]) 2073]) 2074AC_CHECK_FUNCS(clock_getres) # clock_getres should be tested after clock_gettime test including librt test. 2075AC_CHECK_LIB([rt], [timer_create]) 2076AC_CHECK_LIB([rt], [timer_settime]) 2077AS_IF([test x"$ac_cv_lib_rt_timer_create" = xyes], [ 2078 AC_DEFINE(HAVE_TIMER_CREATE, 1) 2079]) 2080AS_IF([test x"$ac_cv_lib_rt_timer_settime" = xyes], [ 2081 AC_DEFINE(HAVE_TIMER_SETTIME, 1) 2082]) 2083 2084AC_CACHE_CHECK(for unsetenv returns a value, rb_cv_unsetenv_return_value, 2085 [AC_TRY_COMPILE([ 2086#include <stdlib.h> 2087], [int v = unsetenv("foo");], 2088 rb_cv_unsetenv_return_value=yes, 2089 rb_cv_unsetenv_return_value=no)]) 2090AS_IF([test "$rb_cv_unsetenv_return_value" = no], [ 2091 AC_DEFINE(VOID_UNSETENV) 2092]) 2093 2094# End of setjmp check. 2095 2096AC_ARG_ENABLE(setreuid, 2097 AS_HELP_STRING([--enable-setreuid], [use setreuid()/setregid() according to need even if obsolete]), 2098 [use_setreuid=$enableval]) 2099AS_IF([test "$use_setreuid" = yes], [ 2100 AC_DEFINE(USE_SETREUID) 2101 AC_DEFINE(USE_SETREGID) 2102]) 2103AC_STRUCT_TIMEZONE 2104AC_CACHE_CHECK(for struct tm.tm_gmtoff, rb_cv_member_struct_tm_tm_gmtoff, 2105 [AC_TRY_COMPILE([ 2106@%:@define _BSD_SOURCE 2107@%:@define _DEFAULT_SOURCE 2108@%:@include <time.h> 2109 ], 2110 [struct tm t; t.tm_gmtoff = 3600;], 2111 [rb_cv_member_struct_tm_tm_gmtoff=yes], 2112 [rb_cv_member_struct_tm_tm_gmtoff=no])]) 2113AS_IF([test "$rb_cv_member_struct_tm_tm_gmtoff" = yes], [ 2114 AC_DEFINE(HAVE_STRUCT_TM_TM_GMTOFF) 2115]) 2116AC_CACHE_CHECK(for external int daylight, rb_cv_have_daylight, 2117 [AC_TRY_LINK([#include <time.h> 2118 int i;], 2119 [i = daylight;], 2120 rb_cv_have_daylight=yes, 2121 rb_cv_have_daylight=no)]) 2122AS_IF([test "$rb_cv_have_daylight" = yes], [ 2123 AC_DEFINE(HAVE_DAYLIGHT) 2124]) 2125 2126AC_CACHE_CHECK(for negative time_t for gmtime(3), rb_cv_negative_time_t, 2127 [AC_TRY_RUN([ 2128#include <stdlib.h> 2129#include <time.h> 2130 2131void 2132check(tm, y, m, d, h, s) 2133 struct tm *tm; 2134 int y, m, d, h, s; 2135{ 2136 if (!tm || 2137 tm->tm_year != y || 2138 tm->tm_mon != m-1 || 2139 tm->tm_mday != d || 2140 tm->tm_hour != h || 2141 tm->tm_sec != s) { 2142 exit(1); 2143 } 2144} 2145 2146int 2147main() 2148{ 2149 time_t t = -1; 2150 struct tm *tm; 2151 2152 check(gmtime(&t), 69, 12, 31, 23, 59); 2153 t = ~(time_t)0 << 31; 2154 check(gmtime(&t), 1, 12, 13, 20, 52); 2155 return 0; 2156} 2157], 2158 rb_cv_negative_time_t=yes, 2159 rb_cv_negative_time_t=no, 2160 rb_cv_negative_time_t=yes)]) 2161AS_IF([test "$rb_cv_negative_time_t" = yes], [ 2162 AC_DEFINE(NEGATIVE_TIME_T) 2163]) 2164 2165# [ruby-dev:40910] overflow of time on FreeBSD 2166# http://www.freebsd.org/cgi/query-pr.cgi?pr=145341 2167AC_CACHE_CHECK(for localtime(3) overflow correctly, rb_cv_localtime_overflow, 2168 [AC_TRY_RUN([ 2169#include <stdlib.h> 2170#include <time.h> 2171 2172void 2173check(time_t t1) 2174{ 2175 struct tm *tm; 2176 time_t t2; 2177 tm = localtime(&t1); 2178 if (!tm) 2179 return; /* overflow detected. ok. */ 2180 t2 = mktime(tm); 2181 if (t1 == t2) 2182 return; /* round-trip. ok. */ 2183 exit(1); 2184} 2185 2186int 2187main() 2188{ 2189 time_t t; 2190 if (~(time_t)0 <= 0) { 2191 t = (((time_t)1) << (sizeof(time_t) * 8 - 2)); 2192 t |= t - 1; 2193 } 2194 else { 2195 t = ~(time_t)0; 2196 } 2197 check(t); 2198 return 0; 2199} 2200], 2201 rb_cv_localtime_overflow=yes, 2202 rb_cv_localtime_overflow=no, 2203 rb_cv_localtime_overflow=no)]) 2204AS_IF([test "$rb_cv_localtime_overflow" = no], [ 2205 AC_DEFINE(LOCALTIME_OVERFLOW_PROBLEM) 2206]) 2207 2208AS_IF([test "$ac_cv_func_sigprocmask" = yes && test "$ac_cv_func_sigaction" = yes], [ 2209 AC_DEFINE(POSIX_SIGNAL) 2210], [ 2211 AC_CHECK_FUNCS(sigsetmask) 2212 AC_CACHE_CHECK(for BSD signal semantics, rb_cv_bsd_signal, 2213 [AC_TRY_RUN([ 2214#include <stdio.h> 2215#include <signal.h> 2216 2217void 2218sig_handler(dummy) 2219 int dummy; 2220{ 2221} 2222 2223int 2224main() 2225{ 2226 signal(SIGINT, sig_handler); 2227 kill(getpid(), SIGINT); 2228 kill(getpid(), SIGINT); 2229 return 0; 2230} 2231], 2232 rb_cv_bsd_signal=yes, 2233 rb_cv_bsd_signal=no, 2234 rb_cv_bsd_signal=$ac_cv_func_sigsetmask)]) 2235 AS_IF([test "$rb_cv_bsd_signal" = yes], [ 2236 AC_DEFINE(BSD_SIGNAL) 2237 ]) 2238]) 2239 2240AC_CHECK_TYPES([sig_t],[],[],[@%:@include <signal.h>]) 2241 2242AS_IF([test "$ac_cv_func_getpgid" = no], [ 2243 # AC_FUNC_GETPGRP fails when cross-compiling with old autoconf. 2244 # autoconf is changed between 2.52d and 2.52f? 2245 # http://lists.gnu.org/archive/html/bug-gnu-utils/2001-09/msg00181.html 2246 # "autoconf cleanup for AC_FUNC_GETPGRP and GETPGRP_VOID" 2247AC_FUNC_GETPGRP 2248]) 2249AS_IF([test "$ac_cv_func_setpgid:$ac_cv_func_setpgrp" = no:yes], [ 2250 # AC_FUNC_SETPGRP fails when cross-compiling. (until autoconf 2.69?) 2251 # https://lists.gnu.org/archive/html/bug-autoconf/2013-02/msg00002.html 2252 # "AC_FUNC_SETPGRP fails to work properly when cross-compiling" 2253AC_FUNC_SETPGRP 2254]) 2255 2256AS_IF([test x"$ac_cv_func_dirfd" = xno], [ 2257 AS_CASE(["$target_os"],[solaris*], 2258 [AC_CHECK_MEMBERS([DIR.d_fd, DIR.dd_fd],,,[ 2259#include <sys/types.h> 2260#include <dirent.h> 2261])]) 2262]) 2263 2264AS_IF([test x"$target_cpu" = xia64], [ 2265 AC_LIBOBJ([ia64]) 2266 AC_CACHE_CHECK(for __libc_ia64_register_backing_store_base, 2267 rb_cv___libc_ia64_register_backing_store_base, 2268 [rb_cv___libc_ia64_register_backing_store_base=no 2269 AC_TRY_LINK( 2270 [extern unsigned long __libc_ia64_register_backing_store_base;], 2271 [unsigned long p = __libc_ia64_register_backing_store_base; 2272 printf("%ld\n", p);], 2273 [rb_cv___libc_ia64_register_backing_store_base=yes])]) 2274 AS_IF([test $rb_cv___libc_ia64_register_backing_store_base = yes], [ 2275 AC_DEFINE(HAVE___LIBC_IA64_REGISTER_BACKING_STORE_BASE) 2276 ]) 2277]) 2278 2279AC_CACHE_CHECK(whether right shift preserve sign bit, rb_cv_rshift_sign, 2280 [AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([], [(-1==(-1>>1))])], 2281 rb_cv_rshift_sign=yes, 2282 rb_cv_rshift_sign=no)]) 2283AS_IF([test "$rb_cv_rshift_sign" = yes], [ 2284 AC_DEFINE(RSHIFT(x,y), ((x)>>(int)(y))) 2285], [ 2286 AC_DEFINE(RSHIFT(x,y), (((x)<0) ? ~((~(x))>>(int)(y)) : (x)>>(int)(y))) 2287]) 2288 2289AS_CASE(["$ac_cv_func_gettimeofday:$ac_cv_func_clock_gettime"], 2290[*yes*], [], 2291[ 2292 AC_MSG_ERROR(clock_gettime() or gettimeofday() must exist) 2293]) 2294 2295AS_IF([test "$ac_cv_func_sysconf" = yes], [ 2296 RUBY_CHECK_SYSCONF(CLK_TCK) 2297]) 2298 2299AS_IF([test "${universal_binary-no}" = yes ], [ 2300 archflagpat=`eval echo '"'"${ARCH_FLAG}"'"' | sed 's/[[][|.*]]/\\&/g'` 2301 save_CFLAGS="$CFLAGS" new_cflags=`echo "$CFLAGS" | sed "s|$archflagpat"'||'` 2302 save_LDFLAGS="$LDFLAGS" new_ldflags=`echo "$LDFLAGS" | sed "s|$archflagpat"'||'` 2303 stack_dir= 2304 for archs in ${universal_archnames}; do 2305 archs=`echo $archs | sed 's/=.*//'` 2306 CFLAGS="$new_cflags -arch $archs" 2307 LDFLAGS="$new_ldflags -arch $archs" 2308 RUBY_STACK_GROW_DIRECTION($archs, dir) 2309 AS_IF([test x$stack_dir = x], [ 2310 stack_dir=$dir 2311 ], [test x$stack_dir != x$dir], [ 2312 stack_dir=no 2313 ]) 2314 done 2315 CFLAGS="$save_CFLAGS" LDFLAGS="$save_LDFLAGS" 2316 AS_IF([test x$stack_dir = xno], [ 2317 for archs in ${universal_archnames}; do 2318 archs=`echo $archs | sed 's/=.*//'` 2319 eval dir=\$[rb_cv_stack_grow_dir_]AS_TR_SH([$archs]) 2320 RUBY_DEFINE_IF([defined __${archs}__], STACK_GROW_DIRECTION, $dir) 2321 done 2322 ], [ 2323 AC_DEFINE_UNQUOTED(STACK_GROW_DIRECTION, $stack_dir) 2324 ]) 2325], [ 2326 RUBY_STACK_GROW_DIRECTION($target_cpu, dir) 2327 AC_DEFINE_UNQUOTED(STACK_GROW_DIRECTION, $dir) 2328]) 2329 2330AC_ARG_ENABLE(fiber-coroutine, 2331 AS_HELP_STRING([--disable-fiber-coroutine], [disable native coroutine implementation for fiber]), 2332 [rb_cv_fiber_coroutine=$enableval]) 2333AS_CASE(["$rb_cv_fiber_coroutine"], [yes|''], [ 2334 AC_MSG_CHECKING(native coroutine implementation for ${target_cpu}-${target_os}) 2335 AS_CASE(["$target_cpu-$target_os"], 2336 [x*64-darwin*], [ 2337 rb_cv_fiber_coroutine=amd64 2338 ], 2339 [x*64-linux], [ 2340 AS_CASE(["$ac_cv_sizeof_voidp"], 2341 [8], [ rb_cv_fiber_coroutine=amd64 ], 2342 [4], [ rb_cv_fiber_coroutine=x86 ], 2343 [*], [ rb_cv_fiber_coroutine= ] 2344 ) 2345 ], 2346 [*86-linux], [ 2347 rb_cv_fiber_coroutine=x86 2348 ], 2349 [x64-mingw32], [ 2350 rb_cv_fiber_coroutine=win64 2351 ], 2352 [powerpc64le-linux], [ 2353 rb_cv_fiber_coroutine=ppc64le 2354 ], 2355 [*], [ 2356 rb_cv_fiber_coroutine= 2357 ] 2358 ) 2359 AC_MSG_RESULT(${rb_cv_fiber_coroutine:-no}) 2360]) 2361AS_IF([test "${rb_cv_fiber_coroutine:-no}" != no], [ 2362 COROUTINE_H=coroutine/$rb_cv_fiber_coroutine/Context.h 2363 AC_DEFINE_UNQUOTED(FIBER_USE_COROUTINE, ["$COROUTINE_H"]) 2364 AC_SUBST(X_FIBER_COROUTINE_H, [$COROUTINE_H]) 2365]) 2366 2367AS_IF([test x"$enable_pthread" = xyes], [ 2368 for pthread_lib in thr pthread pthreads c c_r root; do 2369 AC_CHECK_LIB($pthread_lib, pthread_create, 2370 rb_with_pthread=yes, rb_with_pthread=no) 2371 AS_IF([test "$rb_with_pthread" = "yes"], [break]) 2372 done 2373 AS_IF([test x"$rb_with_pthread" = xyes], [ 2374 AC_DEFINE(_REENTRANT) 2375 AC_DEFINE(_THREAD_SAFE) 2376 AC_DEFINE(HAVE_LIBPTHREAD) 2377 AC_CHECK_HEADERS(pthread_np.h, [], [], [@%:@include <pthread.h>]) 2378 AS_CASE(["$pthread_lib:$target_os"], 2379 [c:*], [], 2380 [root:*], [], 2381 [c_r:*|*:openbsd*|*:mirbsd*], [LIBS="-pthread $LIBS"], 2382 [LIBS="-l$pthread_lib $LIBS"]) 2383 ], [ 2384 AC_MSG_WARN("Don't know how to find pthread library on your system -- thread support disabled") 2385 ]) 2386 AC_CACHE_CHECK([whether pthread_t is scalar type], [rb_cv_scalar_pthread_t], [ 2387 AC_TRY_COMPILE([ 2388 @%:@include <pthread.h> 2389 ], [ 2390 pthread_t thread_id; 2391 thread_id = 0; 2392 if (!thread_id) return 0; 2393 ], [rb_cv_scalar_pthread_t=yes], [rb_cv_scalar_pthread_t=no]) 2394 ]) 2395 AS_IF([test x"$rb_cv_scalar_pthread_t" = xyes], [ 2396 : # RUBY_CHECK_SIZEOF(pthread_t, [void* int long], [], [@%:@include <pthread.h>]) 2397 ], [ 2398 AC_DEFINE(NON_SCALAR_THREAD_ID) 2399 ]) 2400 AC_CHECK_FUNCS(sched_yield pthread_attr_setinheritsched \ 2401 pthread_attr_get_np pthread_attr_getstack pthread_attr_getguardsize \ 2402 pthread_get_stackaddr_np pthread_get_stacksize_np \ 2403 thr_stksegment pthread_stackseg_np pthread_getthrds_np \ 2404 pthread_condattr_setclock \ 2405 pthread_sigmask pthread_setname_np pthread_set_name_np) 2406 AS_CASE(["$target_os"],[aix*],[ac_cv_func_pthread_getattr_np=no],[AC_CHECK_FUNCS(pthread_getattr_np)]) 2407 set_current_thread_name= 2408 AS_IF([test "$ac_cv_func_pthread_setname_np" = yes], [ 2409 AC_CACHE_CHECK([arguments of pthread_setname_np], [rb_cv_func_pthread_setname_np_arguments], 2410 [rb_cv_func_pthread_setname_np_arguments= 2411 # Linux,AIX, (pthread_self(), name) 2412 # NetBSD (pthread_self(), \"%s\", name) 2413 # Darwin (name) 2414 for mac in \ 2415 "(pthread_self(), name)" \ 2416 "(pthread_self(), \"%s\", name)" \ 2417 "(name)" \ 2418 ; do 2419 AC_TRY_COMPILE([ 2420 @%:@include <pthread.h> 2421 @%:@ifdef HAVE_PTHREAD_NP_H 2422 @%:@include <pthread_np.h> 2423 @%:@endif 2424 @%:@define SET_THREAD_NAME(name) pthread_setname_np${mac} 2425 ], 2426 [if (SET_THREAD_NAME("conftest")) return 1;], 2427 [rb_cv_func_pthread_setname_np_arguments="${mac}" 2428 break]) 2429 done 2430 ] 2431 ) 2432 AS_IF([test -n "${rb_cv_func_pthread_setname_np_arguments}"], [ 2433 set_current_thread_name="pthread_setname_np${rb_cv_func_pthread_setname_np_arguments}" 2434 ]) 2435 ], [test "$ac_cv_func_pthread_set_name_np" = yes], [ 2436 set_current_thread_name="pthread_set_name_np(pthread_self(), name)" 2437 ]) 2438 AS_IF([test -n "$set_current_thread_name"], [ 2439 AC_DEFINE_UNQUOTED(SET_CURRENT_THREAD_NAME(name), $set_current_thread_name) 2440 AS_CASE([$set_current_thread_name], 2441 [*'pthread_self()'*], [ 2442 set_another_thread_name=`echo "$set_current_thread_name" | sed 's/pthread_self()/thid/'` 2443 AC_DEFINE_UNQUOTED(SET_ANOTHER_THREAD_NAME(thid,name), $set_another_thread_name) 2444 ]) 2445 ]) 2446]) 2447 2448AS_IF([test x"$ac_cv_header_ucontext_h" = xno], [ 2449 AC_CACHE_CHECK([if signal.h defines ucontext_t], [rb_cv_ucontext_in_signal_h], 2450 [AC_TRY_COMPILE([@%:@include <signal.h>], 2451 [size_t size = sizeof(ucontext_t);], 2452 [rb_cv_ucontext_in_signal_h=yes], [rb_cv_ucontext_in_signal_h=no])]) 2453 AS_IF([test x"$rb_cv_ucontext_in_signal_h" = xyes], [ 2454 AC_DEFINE_UNQUOTED(UCONTEXT_IN_SIGNAL_H, 1) 2455 ]) 2456]) 2457AS_IF([test x"$ac_cv_header_ucontext_h" = xyes -o x"$rb_cv_ucontext_in_signal_h" = xyes], [ 2458 AC_CACHE_CHECK([if mcontext_t is a pointer], [rb_cv_mcontext_t_ptr], 2459 [AC_TRY_COMPILE([ 2460 @%:@include <signal.h> 2461 @%:@ifdef HAVE_UCONTEXT_H 2462 @%:@include <ucontext.h> 2463 @%:@endif 2464 mcontext_t test(mcontext_t mc) {return mc+1;} 2465 ], 2466 [test(0);], 2467 [rb_cv_mcontext_t_ptr=yes], [rb_cv_mcontext_t_ptr=no])]) 2468 AS_IF([test x"$rb_cv_mcontext_t_ptr" = xyes], [ 2469 AC_DEFINE_UNQUOTED(DEFINE_MCONTEXT_PTR(mc, uc), mcontext_t mc = (uc)->uc_mcontext) 2470 ], [ 2471 AC_DEFINE_UNQUOTED(DEFINE_MCONTEXT_PTR(mc, uc), mcontext_t *mc = &(uc)->uc_mcontext) 2472 ]) 2473 AS_IF([test x"$rb_with_pthread" = xyes], [ 2474 AC_CHECK_FUNCS(getcontext setcontext) 2475 ]) 2476]) 2477 2478AS_IF([test "$ac_cv_func_fork_works" = "yes" -a "$rb_with_pthread" = "yes"], [ 2479 AC_CACHE_CHECK([if fork works with pthread], rb_cv_fork_with_pthread, 2480 [AC_TRY_RUN([ 2481#include <stdlib.h> 2482#include <unistd.h> 2483#include <pthread.h> 2484#include <stdio.h> 2485#include <sys/types.h> 2486#include <sys/wait.h> 2487#include <signal.h> 2488#ifndef EXIT_SUCCESS 2489#define EXIT_SUCCESS 0 2490#endif 2491#ifndef EXIT_FAILURE 2492#define EXIT_FAILURE 1 2493#endif 2494 2495void * 2496thread_func(void *dmy) 2497{ 2498 return dmy; 2499} 2500 2501int 2502use_threads(void) 2503{ 2504 pthread_t tid; 2505 if (pthread_create(&tid, 0, thread_func, 0) != 0) { 2506 return -1; 2507 } 2508 if (pthread_join(tid, 0) != 0) { 2509 return -1; 2510 } 2511 return 0; 2512} 2513 2514int 2515main(int argc, char *argv[]) 2516{ 2517 pid_t pid; 2518 if (use_threads()) return EXIT_FAILURE; 2519 pid = fork(); 2520 2521 if (pid) { 2522 int loc; 2523 sleep(1); 2524 if (waitpid(pid, &loc, WNOHANG) == 0) { 2525 kill(pid, SIGKILL); 2526 return EXIT_FAILURE; 2527 } 2528 if (!WIFEXITED(loc) || WEXITSTATUS(loc) != EXIT_SUCCESS) 2529 return EXIT_FAILURE; 2530 } 2531 else { 2532 if (use_threads()) return EXIT_FAILURE; 2533 } 2534 2535 return EXIT_SUCCESS; 2536}], 2537 rb_cv_fork_with_pthread=yes, 2538 rb_cv_fork_with_pthread=no, 2539 rb_cv_fork_with_pthread=yes)]) 2540 test x$rb_cv_fork_with_pthread = xyes || AC_DEFINE(CANNOT_FORK_WITH_PTHREAD) 2541]) 2542} 2543 2544: "runtime section" && { 2545dnl wheather use dln_a_out or not 2546AC_ARG_WITH(dln-a-out, 2547 AS_HELP_STRING([--with-dln-a-out], [use dln_a_out if possible]), 2548 [ 2549 AS_CASE([$withval], 2550 [yes], [ 2551 AS_IF([test "$enable_shared" = yes], [ 2552 AC_MSG_ERROR(dln_a_out can not make shared library) 2553 ]) 2554 with_dln_a_out=yes], 2555 [ 2556 with_dln_a_out=no])], [with_dln_a_out=no]) 2557 2558AC_CACHE_CHECK(whether ELF binaries are produced, rb_cv_binary_elf, 2559[AC_TRY_LINK([],[], [ 2560AS_CASE(["`head -1 conftest$EXEEXT | tr -dc '\177ELF' | tr '\177' .`"], 2561[.ELF*], [rb_cv_binary_elf=yes], [rb_cv_binary_elf=no])], 2562rb_cv_binary_elf=no)]) 2563 2564AS_IF([test "$rb_cv_binary_elf" = yes], [ 2565 AC_DEFINE(USE_ELF) 2566 AS_IF([test "$with_dln_a_out" = yes], [ 2567 AC_MSG_ERROR(dln_a_out does not work with ELF) 2568 ]) 2569 AC_CHECK_HEADERS([elf.h elf_abi.h]) 2570 AS_IF([test $ac_cv_header_elf_h = yes -o $ac_cv_header_elf_abi_h = yes], [ 2571 AC_LIBOBJ([addr2line]) 2572 AS_IF([test "x$compress_debug_sections" = xzlib], [ 2573 AC_CHECK_LIB([z], [uncompress]) 2574 ]) 2575 ]) 2576]) 2577 2578AC_CHECK_HEADERS([mach-o/loader.h]) 2579AS_IF([test "$ac_cv_header_mach_o_loader_h" = yes], [ 2580 AC_LIBOBJ([addr2line]) 2581]) 2582 2583AS_CASE(["$target_os"], 2584[linux* | gnu* | k*bsd*-gnu | bsdi* | kopensolaris*-gnu], [ 2585 AS_IF([test "$rb_cv_binary_elf" = no], [ 2586 with_dln_a_out=yes 2587 ], [ 2588 LDFLAGS="$LDFLAGS -rdynamic" 2589 ])]) 2590LIBEXT=a 2591 2592AC_SUBST(DLDFLAGS)dnl 2593AC_SUBST(ARCH_FLAG)dnl 2594AC_SUBST(MJIT_HEADER_FLAGS)dnl 2595AC_SUBST(MJIT_HEADER_INSTALL_DIR)dnl 2596AC_SUBST(MJIT_CC)dnl 2597AS_IF([test "$GCC" = "yes"], [ 2598 AS_CASE(["$target_os"],[aix*],[mjit_std_cflag="-std=gnu99"]) 2599]) 2600AC_SUBST(MJIT_CFLAGS, [${MJIT_CFLAGS-"-w ${mjit_std_cflag} ${orig_cflags}"}])dnl 2601AC_SUBST(MJIT_OPTFLAGS, [${MJIT_OPTFLAGS-'$(optflags)'}])dnl 2602AC_SUBST(MJIT_DEBUGFLAGS, [${MJIT_DEBUGFLAGS-'$(debugflags)'}])dnl 2603AC_SUBST(MJIT_LDSHARED)dnl 2604 2605AC_SUBST(STATIC)dnl 2606AC_SUBST(CCDLFLAGS)dnl 2607AC_SUBST(LDSHARED)dnl 2608AC_SUBST(LDSHAREDXX)dnl 2609AC_SUBST(DLEXT)dnl 2610AC_SUBST(DLEXT2)dnl 2611AC_SUBST(LIBEXT)dnl 2612AC_SUBST(ASMEXT, S)dnl 2613 2614STATIC= 2615 2616AS_IF([test "$with_dln_a_out" != yes], [ 2617 rb_cv_dlopen=unknown 2618 AC_MSG_CHECKING(whether OS depend dynamic link works) 2619 AS_IF([test "$GCC" = yes], [ 2620 AS_CASE(["$target_os"], 2621 [darwin*], [ 2622 # The -fno-common is needed if we wish to embed the Ruby interpreter 2623 # into a plugin module of some project (as opposed to embedding it 2624 # within the project's application). The -I/usr/local/include is 2625 # needed because CPP as discovered by configure (cc -E -traditional) 2626 # fails to consult /usr/local/include by default. This causes 2627 # mkmf.rb's have_header() to fail if the desired resource happens to be 2628 # installed in the /usr/local tree. 2629 RUBY_APPEND_OPTION(CCDLFLAGS, -fno-common)], 2630 [bsdi*|cygwin*|mingw*|aix*|interix*], [ ], 2631 [ 2632 RUBY_APPEND_OPTION(CCDLFLAGS, -fPIC)]) 2633 ], [ 2634 AS_CASE(["$target_os"], 2635 [hpux*], [CCDLFLAGS="$CCDLFLAGS +Z"], 2636 [solaris*|irix*], [CCDLFLAGS="$CCDLFLAGS -KPIC"], 2637 [sunos*], [CCDLFLAGS="$CCDLFLAGS -PIC"], 2638 [esix*|uxpds*], [CCDLFLAGS="$CCDLFLAGS -KPIC"], 2639 [: ${CCDLFLAGS=""}]) 2640 ]) 2641 2642 2643 AC_ARG_ENABLE(rpath, 2644 AS_HELP_STRING([--enable-rpath], [embed run path into extension libraries. 2645 enabled by default on ELF platforms]), 2646 [enable_rpath=$enableval], [enable_rpath="$rb_cv_binary_elf"]) 2647 2648 AS_CASE(["$target_os"], 2649 [hpux*], [ DLDFLAGS="$DLDFLAGS -E" 2650 : ${LDSHARED='$(LD) -b'} 2651 XLDFLAGS="$XLDFLAGS -Wl,-E" 2652 : ${LIBPATHENV=SHLIB_PATH} 2653 rb_cv_dlopen=yes], 2654 [solaris*], [ AS_IF([test "$GCC" = yes], [ 2655 : ${LDSHARED='$(CC) -shared'} 2656 AS_IF([test "$rb_cv_prog_gnu_ld" = yes], [ 2657 LDFLAGS="$LDFLAGS -Wl,-E" 2658 ]) 2659 ], [ 2660 : ${LDSHARED='$(CC) -G'} 2661 ]) 2662 AS_IF([test "$ac_cv_sizeof_voidp" = 8], [ 2663 : ${LIBPATHENV=LD_LIBRARY_PATH_64} 2664 : ${PRELOADENV=LD_PRELOAD_64} 2665 ], [ 2666 : ${LIBPATHENV=LD_LIBRARY_PATH_32} 2667 : ${PRELOADENV=LD_PRELOAD_32} 2668 ]) 2669 rb_cv_dlopen=yes], 2670 [sunos*], [ : ${LDSHARED='$(LD) -assert nodefinitions'} 2671 rb_cv_dlopen=yes], 2672 [irix*], [ : ${LDSHARED='$(LD) -shared'} 2673 rb_cv_dlopen=yes], 2674 [sysv4*], [ : ${LDSHARED='$(LD) -G'} 2675 rb_cv_dlopen=yes], 2676 [nto-qnx*], [ : ${LDSHARED='$(CC) -shared'} 2677 rb_cv_dlopen=yes], 2678 [esix*|uxpds*], [ : ${LDSHARED='$(LD) -G'} 2679 rb_cv_dlopen=yes], 2680 [osf*], [ : ${LDSHARED='$(LD) -shared -expect_unresolved "*"'} 2681 rb_cv_dlopen=yes], 2682 [bsdi3*], [ AS_CASE(["$CC"], 2683 [*shlicc*], [ : ${LDSHARED='$(CC) -r'} 2684 rb_cv_dlopen=yes])], 2685 [linux* | gnu* | k*bsd*-gnu | netbsd* | bsdi* | kopensolaris*-gnu | haiku*], [ 2686 : ${LDSHARED='$(CC) -shared'} 2687 AS_IF([test "$rb_cv_binary_elf" = yes], [ 2688 LDFLAGS="$LDFLAGS -Wl,-export-dynamic" 2689 ]) 2690 rb_cv_dlopen=yes], 2691 [interix*], [ : ${LDSHARED='$(CC) -shared'} 2692 XLDFLAGS="$XLDFLAGS -Wl,-E" 2693 LIBPATHFLAG=" -L%1\$-s" 2694 rb_cv_dlopen=yes], 2695 [freebsd*|dragonfly*], [ 2696 : ${LDSHARED='$(CC) -shared'} 2697 AS_IF([test "$rb_cv_binary_elf" = yes], [ 2698 LDFLAGS="$LDFLAGS -rdynamic" 2699 DLDFLAGS="$DLDFLAGS "'-Wl,-E' 2700 ], [ 2701 test "$GCC" = yes && test "$rb_cv_prog_gnu_ld" = yes || LDSHARED='$(LD) -Bshareable' 2702 ]) 2703 rb_cv_dlopen=yes], 2704 [openbsd*|mirbsd*], [ : ${LDSHARED='$(CC) -shared ${CCDLFLAGS}'} 2705 AS_IF([test "$rb_cv_binary_elf" = yes], [ 2706 LDFLAGS="$LDFLAGS -Wl,-E" 2707 ]) 2708 rb_cv_dlopen=yes], 2709 [darwin*], [ : ${LDSHARED='$(CC) -dynamic -bundle'} 2710 : ${DLDSHARED='$(CC) -dynamiclib'} 2711 : ${LDFLAGS=""} 2712 : ${LIBPATHENV=DYLD_FALLBACK_LIBRARY_PATH} 2713 : ${PRELOADENV=DYLD_INSERT_LIBRARIES} 2714 rb_cv_dlopen=yes], 2715 [aix*], [ : ${LDSHARED='$(CC)'} 2716 AS_IF([test "$GCC" = yes], [ 2717 LDSHARED="$LDSHARED ${linker_flag}-G -shared" 2718 ], [ 2719 LDSHARED="$LDSHARED ${linker_flag}-G" 2720 ]) 2721 EXTDLDFLAGS='-e$(TARGET_ENTRY)' 2722 XLDFLAGS="${linker_flag}"'-bE:$(ARCHFILE)'" ${linker_flag}-brtl" 2723 XLDFLAGS="$XLDFLAGS ${linker_flag}-blibpath:${prefix}/lib:${LIBPATH:-/usr/lib:/lib}" 2724 : ${ARCHFILE="ruby.imp"} 2725 TRY_LINK='$(CC) -oconftest $(INCFLAGS) -I$(hdrdir) $(CPPFLAGS)' 2726 TRY_LINK="$TRY_LINK"' $(CFLAGS) $(src) $(LIBPATH) $(LDFLAGS) $(LOCAL_LIBS) $(LIBS)' 2727 : ${LIBPATHENV=LIBPATH} 2728 : ${PRELOADENV=LDR_PRELOAD} 2729 rb_cv_dlopen=yes], 2730 [nto-qnx*], [ DLDFLAGS="$DLDFLAGS -L/lib -L/usr/lib -L/usr/local/lib" 2731 : ${LDSHARED='$(LD) -Bshareable -x'} 2732 LDFLAGS="$LDFLAGS -L/lib -L/usr/lib -L/usr/local/lib" 2733 rb_cv_dlopen=yes], 2734 [cygwin*|mingw*], [ 2735 : ${LDSHARED='$(CC) -shared'} 2736 XLDFLAGS="$XLDFLAGS -Wl,--stack,0x00200000,--enable-auto-import" 2737 DLDFLAGS="${DLDFLAGS} -Wl,--enable-auto-image-base,--enable-auto-import" 2738 : ${LIBPATHENV=PATH} 2739 : ${PRELOADENV=""} 2740 rb_cv_dlopen=yes], 2741 [hiuxmpp], [ : ${LDSHARED='$(LD) -r'}], 2742 [atheos*], [ : ${LDSHARED='$(CC) -shared'} 2743 rb_cv_dlopen=yes], 2744 [ : ${LDSHARED='$(LD)'}]) 2745 AC_MSG_RESULT($rb_cv_dlopen) 2746 2747 AS_IF([test "$rb_cv_dlopen" = yes], [ 2748 AS_CASE(["$target_os"], 2749 [darwin*], [ 2750 for flag in \ 2751 "-undefined dynamic_lookup" \ 2752 "-multiply_defined suppress" \ 2753 ; do 2754 test "x${linker_flag}" = x || flag="${linker_flag}`echo ${flag} | tr ' ' ,`" 2755 RUBY_TRY_LDFLAGS([$flag], [], [flag=]) 2756 AS_IF([test "x$flag" != x], [ 2757 RUBY_APPEND_OPTIONS(DLDFLAGS, [$flag]) 2758 ]) 2759 done 2760 ]) 2761 ]) 2762 2763 AS_IF([test "$enable_rpath:${RPATHFLAG}" = yes:], [ 2764 AS_IF([test "x$rpathflag" != x], [ 2765 RPATHFLAG=" ${rpathflag}%1\$-s" 2766 ]) 2767 ]) 2768]) 2769AS_IF([test "${LDSHAREDXX}" = ""], [ 2770 AS_CASE(["${LDSHARED}"], 2771 [*'$(CC)'*], [ 2772 LDSHAREDXX=`echo "${LDSHARED}" | sed 's/\$(CC)/$(CXX)/'` 2773 ], 2774 [*'${CC}'*], [ 2775 LDSHAREDXX=`echo "${LDSHARED}" | sed 's/\${CC}/${CXX}/'` 2776 ], 2777 [*$CC*], [ 2778 LDSHAREDXX=`echo "${LDSHARED}" | sed "s|$CC|$CXX|"` 2779 ], 2780 [ld" "*], [ 2781 ]) 2782]) 2783AS_CASE([${RPATHFLAG}],[*'%1$'*],[: ${LIBPATHFLAG=' -L%1$-s'}],[: ${LIBPATHFLAG=' -L%s'}]) 2784 2785AC_SUBST(LINK_SO) 2786AC_SUBST(LIBPATHFLAG) 2787AC_SUBST(RPATHFLAG) 2788AC_SUBST(LIBPATHENV, "${LIBPATHENV-LD_LIBRARY_PATH}") 2789AC_SUBST(PRELOADENV, "${PRELOADENV-LD_PRELOAD}") 2790AC_SUBST(TRY_LINK) 2791 2792AS_IF([test "x$OPT_DIR" != x], [ 2793 pat=`echo "${LDFLAGS_OPTDIR}" | sed ['s/[][\\.*|]/\\\\&/']` 2794 LDFLAGS=`echo "${LDFLAGS}" | sed "s| ${pat}||"` 2795 val=`IFS="$PATH_SEPARATOR" 2796 for dir in $OPT_DIR; do 2797 echo x ${LIBPATHFLAG} ${RPATHFLAG} | 2798 sed "s/^x *//;s${IFS}"'%1\\$-s'"${IFS}${dir}/lib${IFS}g;s${IFS}%s${IFS}${dir}/lib${IFS}g" 2799 done | tr '\012' ' ' | sed 's/ *$//'` 2800 AS_IF([test x"$val" != x], [ 2801 test x"${LDFLAGS}" = x || LDFLAGS="$LDFLAGS " 2802 LDFLAGS="$LDFLAGS$val" 2803 test x"${DLDFLAGS}" = x || DLDFLAGS="$DLDFLAGS " 2804 DLDFLAGS="$DLDFLAGS$val" 2805 ]) 2806 LDFLAGS_OPTDIR="$val" 2807]) 2808 2809AS_CASE(["$target_os"], 2810[freebsd*], [ 2811 AC_CHECK_LIB([procstat], [procstat_open_sysctl]) 2812 AS_IF([test "x$ac_cv_lib_procstat_procstat_open_sysctl" = xyes], [ 2813 AC_CHECK_FUNCS(procstat_getvmmap) 2814 ]) 2815 ]) 2816AS_CASE(["$target_cpu-$target_os"], 2817[*-darwin*], [ 2818 AC_CHECK_HEADERS([execinfo.h]) 2819 AS_IF([test "x$ac_cv_header_execinfo_h" = xyes], [ 2820 AC_CHECK_LIB([execinfo], [backtrace]) 2821 AC_CHECK_HEADERS([libunwind.h]) 2822 ])], 2823[*-freebsd*|x86_64-netbsd*], [ 2824 AC_CHECK_HEADERS([execinfo.h]) 2825 AS_IF([test "x$ac_cv_header_execinfo_h" = xyes], [ 2826 AC_CHECK_LIB([execinfo], [backtrace]) 2827 AC_CHECK_LIB([unwind], [unw_backtrace]) 2828 ])]) 2829AC_CHECK_FUNCS(backtrace) 2830 2831AS_IF([test "x$ac_cv_func_backtrace" = xyes], [ 2832 AC_CACHE_CHECK(for broken backtrace, rb_cv_broken_backtrace, 2833 [AC_TRY_RUN([ 2834#include <unistd.h> 2835#include <stdio.h> 2836#include <stdlib.h> 2837#include <stdint.h> 2838#include <string.h> 2839#include <signal.h> 2840#include <execinfo.h> 2841 2842#define TRACE_SIZE 256 2843 2844void sigsegv(int signum, siginfo_t *info, void *ctx){ 2845 void *trace[TRACE_SIZE]; 2846 int n = backtrace(trace, TRACE_SIZE); 2847 if (n > 0) { 2848 /*fprintf(stdout, "backtrace:%d\n",n);*/ 2849 } else { 2850 _exit(EXIT_FAILURE); 2851 } 2852 _exit(EXIT_SUCCESS); 2853} 2854int 2855main(void) 2856{ 2857 volatile int *a = NULL; 2858 stack_t ss; 2859 struct sigaction sa; 2860 2861 ss.ss_sp = malloc(16*1024); 2862 if (ss.ss_sp == NULL) { 2863 fprintf(stderr, "cannot allocate memory for sigaltstack\n"); 2864 return EXIT_FAILURE; 2865 } 2866 ss.ss_size = 16*1024; 2867 ss.ss_flags = 0; 2868 if (sigaltstack(&ss, NULL) == -1) { 2869 fprintf(stderr, "sigaltstack failed\n"); 2870 return EXIT_FAILURE; 2871 } 2872 memset(&sa, 0, sizeof(struct sigaction)); 2873 sigemptyset(&sa.sa_mask); 2874 sa.sa_sigaction = sigsegv; 2875 sa.sa_flags |= SA_SIGINFO; 2876 sa.sa_flags |= SA_ONSTACK; 2877 sigaction(SIGSEGV, &sa, NULL); 2878 a[0] = 1; 2879 return EXIT_SUCCESS; 2880} 2881], 2882 rb_cv_broken_backtrace=no, 2883 rb_cv_broken_backtrace=yes, 2884 rb_cv_broken_backtrace=no)]) 2885 AS_IF([test "$rb_cv_broken_backtrace" = yes], [ 2886 AC_DEFINE(BROKEN_BACKTRACE, 1) 2887 ]) 2888]) 2889 2890AC_ARG_WITH(valgrind, 2891 AS_HELP_STRING([--without-valgrind],[disable valgrind memcheck support]), 2892 [], with_valgrind=yes) 2893AS_IF([test x$with_valgrind != xno], 2894 [AC_CHECK_HEADERS(valgrind/memcheck.h)]) 2895 2896dln_a_out_works=no 2897AS_IF([test "$ac_cv_header_a_out_h" = yes], [ 2898 AS_IF([test "$with_dln_a_out" = yes || test "$rb_cv_dlopen" = unknown], [ 2899 cat confdefs.h > config.h 2900 AC_CACHE_CHECK(whether matz's dln works, rb_cv_dln_a_out, 2901 [AC_TRY_COMPILE([ 2902#define USE_DLN_A_OUT 2903#include "dln.c" 2904], 2905 [], 2906 rb_cv_dln_a_out=yes, 2907 rb_cv_dln_a_out=no)]) 2908 AS_IF([test "$rb_cv_dln_a_out" = yes], [ 2909 dln_a_out_works=yes 2910 AC_DEFINE(USE_DLN_A_OUT) 2911 ]) 2912 ]) 2913]) 2914 2915AS_IF([test "$dln_a_out_works" = yes], [ 2916 AS_IF([test "$GCC" = yes], [ 2917 STATIC=-static 2918 ], [ 2919 STATIC=-Bstatic 2920 ]) 2921 DLEXT=so 2922 CCDLFLAGS= 2923], [ 2924 AS_CASE(["$target_os"], 2925 [hpux*], [ 2926 DLEXT=sl], 2927 [darwin*], [ 2928 SOEXT=dylib 2929 DLEXT=bundle], 2930 [cygwin*|mingw*|*djgpp*], [ 2931 LOAD_RELATIVE=1 2932 SOEXT=dll 2933 DLEXT=so], 2934 [ 2935 DLEXT=so]) 2936]) 2937: ${SOEXT="${DLEXT}"} 2938AC_SUBST(SOEXT) 2939AS_IF([test "$rb_cv_dlopen:$load_relative" = yes:yes], [ 2940 AS_IF([test "$ac_cv_func_dladdr" = yes], [ 2941 LOAD_RELATIVE=1 2942 ]) 2943]) 2944AS_IF([test x"$LOAD_RELATIVE" = x1], [ 2945 load_relative=yes 2946], [ 2947 unset load_relative 2948]) 2949 2950len=2 # .rb 2951n=`expr "$DLEXT" : '.*'`; test "$n" -gt "$len" && len=$n 2952n=`expr "$DLEXT2" : '.*'`; test "$n" -gt "$len" && len=$n 2953AC_DEFINE_UNQUOTED(DLEXT_MAXLEN, `expr $len + 1`) 2954test ".$DLEXT" = "." || AC_DEFINE_UNQUOTED(DLEXT, ".$DLEXT") 2955test ".$DLEXT2" = "." || AC_DEFINE_UNQUOTED(DLEXT2, ".$DLEXT2") 2956AC_SUBST(DLEXT) 2957 2958AS_IF([test "$with_dln_a_out" = yes], [ 2959 STRIP=true 2960], [ 2961 AC_CHECK_TOOL(STRIP, strip, :)dnl 2962]) 2963 2964AS_CASE(["$target_os"], 2965 [linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu], [ 2966 STRIP="$STRIP -S -x"], 2967 [darwin*], [ 2968 STRIP="$STRIP -A -n"]) 2969 2970AC_ARG_WITH(ext, 2971 AC_HELP_STRING([--with-ext=EXTS], 2972 [pass to --with-ext option of extmk.rb])) 2973AC_ARG_WITH(out-ext, 2974 AC_HELP_STRING([--with-out-ext=EXTS], 2975 [pass to --without-ext option of extmk.rb])) 2976EXTSTATIC= 2977AC_SUBST(EXTSTATIC)dnl 2978AC_ARG_WITH(static-linked-ext, 2979 AS_HELP_STRING([--with-static-linked-ext], [link external modules statically]), 2980 [AS_CASE([$withval],[yes],[STATIC=;EXTSTATIC=static],[no],[],[EXTSTATIC="$withval"])]) 2981AS_CASE([",$EXTSTATIC,"], [,static,|*,enc,*], [ 2982 ENCOBJS='enc/encinit.$(OBJEXT) enc/libenc.$(LIBEXT) enc/libtrans.$(LIBEXT)' 2983 EXTOBJS='ext/extinit.$(OBJEXT)' 2984 AC_DEFINE_UNQUOTED(EXTSTATIC, 1) 2985 AC_SUBST(ENCSTATIC, static) 2986], [ 2987 ENCOBJS='dmyenc.$(OBJEXT)' 2988 EXTOBJS='dmyext.$(OBJEXT)' 2989]) 2990AC_SUBST(ENCOBJS) 2991AC_SUBST(EXTOBJS) 2992 2993AC_ARG_WITH(setup, 2994 AS_HELP_STRING([--with-setup=SETUP], [use extension libraries setup]), 2995 [setup=$withval]) 2996AS_IF([test -n "$setup"], [ 2997 AS_IF([! test -f "ext/$setup" -o -f "$srcdir/ext/$setup"], [ 2998 AC_MSG_ERROR(Setup file $setup not found under ext or $srcdir/ext) 2999 ]) 3000], [test -f "$srcdir/ext/Setup.$target_os"], [ 3001 setup="Setup.$target_os" 3002], [ 3003 setup= 3004 for file in "$srcdir"/ext/Setup.*; do 3005 AS_CASE(["$file"], [*~|*.bak|*.orig|*.rej|*.tmp], [continue]) 3006 setup=`basename "$file"` 3007 AS_CASE(["$target_os"], [`expr "$setup" : 'Setup.\(.*\)'`*], [break]) 3008 platform=`sed '/^option *platform */!d;s///;s/|/*|/g;q' "$file"` 3009 AS_IF([test "x$platform" != x], [ 3010 eval "AS_CASE([\"\$target_os\"], [$platform*], [break])" 3011 ]) 3012 setup= 3013 done 3014 : ${setup:=Setup} 3015]) 3016AC_SUBST(setup) 3017 3018rubylibprefix='${libdir}/${RUBY_BASE_NAME}' 3019AC_ARG_WITH(rubylibprefix, 3020 AS_HELP_STRING([--with-rubylibprefix=DIR], [prefix for ruby libraries [[LIBDIR/RUBY_BASE_NAME]]]), 3021 [AS_IF([test "x$withval" = xno], [ 3022 AC_MSG_ERROR([No ruby, No libprefix]) 3023 ]) 3024 rubylibprefix="$withval"]) 3025AC_SUBST(rubylibprefix) 3026 3027AS_IF([test x"${exec_prefix}" != xNONE], [ 3028 RUBY_EXEC_PREFIX="$exec_prefix" 3029], [test x"$prefix" != xNONE], [ 3030 RUBY_EXEC_PREFIX="$prefix" 3031], [ 3032 RUBY_EXEC_PREFIX=$ac_default_prefix 3033]) 3034pat=`echo "${RUBY_EXEC_PREFIX}" | tr -c '\012' .`'\(.*\)' 3035for var in bindir libdir rubylibprefix; do 3036 eval val='"$'$var'"' 3037 AS_CASE(["$val"], ["${RUBY_EXEC_PREFIX}"*], [val='${exec_prefix}'"`expr \"$val\" : \"$pat\"`"]) 3038 eval $var='"$val"' 3039done 3040 3041BTESTRUBY='$(MINIRUBY)' 3042AS_IF([test x"$cross_compiling" = xyes], [ 3043 test x"$MINIRUBY" = x && MINIRUBY="${RUBY-$BASERUBY} -I`$CHDIR .; pwd` "-r'$(arch)-fake' 3044 XRUBY_LIBDIR=`${RUBY-$BASERUBY} -rrbconfig -e ['puts RbConfig::CONFIG["libdir"]']` 3045 XRUBY_RUBYLIBDIR=`${RUBY-$BASERUBY} -rrbconfig -e ['puts RbConfig::CONFIG["rubylibdir"]']` 3046 XRUBY_RUBYHDRDIR=`${RUBY-$BASERUBY} -rrbconfig -e ['puts RbConfig::CONFIG["rubyhdrdir"]']` 3047 AC_SUBST(XRUBY_LIBDIR) 3048 AC_SUBST(XRUBY_RUBYLIBDIR) 3049 AC_SUBST(XRUBY_RUBYHDRDIR) 3050 PREP='$(arch)-fake.rb' 3051 RUNRUBY_COMMAND='$(MINIRUBY) -I`cd $(srcdir)/lib; pwd`' 3052 RUNRUBY='$(RUNRUBY_COMMAND)' 3053 XRUBY='$(MINIRUBY)' 3054 BOOTSTRAPRUBY='$(BASERUBY)' 3055 TEST_RUNNABLE=no 3056 CROSS_COMPILING=yes 3057], [ 3058 MINIRUBY='./miniruby$(EXEEXT) -I$(srcdir)/lib -I.' 3059 MINIRUBY="$MINIRUBY"' -I$(EXTOUT)/common' 3060 PREP='miniruby$(EXEEXT)' 3061 RUNRUBY_COMMAND='$(MINIRUBY) $(srcdir)/tool/runruby.rb --extout=$(EXTOUT) $(RUNRUBYOPT)' 3062 RUNRUBY='$(RUNRUBY_COMMAND) --' 3063 XRUBY='$(RUNRUBY)' 3064 BOOTSTRAPRUBY='$(MINIRUBY)' 3065 TEST_RUNNABLE=yes 3066 CROSS_COMPILING=no 3067]) 3068AC_SUBST(TEST_RUNNABLE) 3069AC_SUBST(CROSS_COMPILING) 3070AC_SUBST(MINIRUBY) 3071AC_SUBST(BTESTRUBY) 3072AC_SUBST(PREP) 3073AC_SUBST(RUNRUBY_COMMAND) 3074AC_SUBST(RUNRUBY) 3075AC_SUBST(XRUBY) 3076AC_SUBST(BOOTSTRAPRUBY) 3077AC_SUBST(EXTOUT, [${EXTOUT=.ext}]) 3078 3079FIRSTMAKEFILE="" 3080LIBRUBY_A='lib$(RUBY_SO_NAME)-static.a' 3081LIBRUBY='$(LIBRUBY_A)' 3082LIBRUBYARG_STATIC='-l$(RUBY_SO_NAME)-static' 3083LIBRUBYARG='$(LIBRUBYARG_STATIC)' 3084SOLIBS='$(MAINLIBS)' 3085 3086AS_CASE(["$target_os"], 3087 [cygwin*|mingw*|haiku*|darwin*], [ 3088 : ${DLDLIBS=""} 3089 ], 3090 [ 3091 DLDLIBS="$DLDLIBS -lc" 3092 ]) 3093 3094AC_ARG_ENABLE(multiarch, 3095 AS_HELP_STRING([--enable-multiarch], [enable multiarch compatible directories]), 3096 [multiarch=], [unset multiarch]) 3097AS_IF([test ${multiarch+set}], [ 3098 AC_DEFINE(ENABLE_MULTIARCH) 3099 MJIT_HEADER_INSTALL_DIR=include/'${arch}/${RUBY_VERSION_NAME}' 3100], [ 3101 MJIT_HEADER_INSTALL_DIR=include/'${RUBY_VERSION_NAME}/${arch}' 3102]) 3103 3104archlibdir='${libdir}/${arch}' 3105sitearchlibdir='${libdir}/${sitearch}' 3106archincludedir='${includedir}/${arch}' 3107sitearchincludedir='${includedir}/${sitearch}' 3108 3109AC_ARG_WITH(soname, 3110 AS_HELP_STRING([--with-soname=SONAME], [base name of shared library]), 3111 [RUBY_SO_NAME=$withval], 3112 [ 3113 AS_CASE(["$target_os"], 3114 [darwin*], [ 3115 RUBY_SO_NAME='$(RUBY_BASE_NAME).$(RUBY_API_VERSION)' 3116 ], 3117 [cygwin*], [ 3118 RUBY_SO_NAME='$(RUBY_BASE_NAME)$(MAJOR)$(MINOR)0' 3119 ], 3120 [mingw*], [ 3121 RUBY_SO_NAME="${rb_cv_msvcrt}"'-$(RUBY_BASE_NAME)$(MAJOR)$(MINOR)0' 3122 AS_IF([test x"${target_cpu}" != xi386], [ 3123 RUBY_SO_NAME="${target_cpu}-${RUBY_SO_NAME}" 3124 ]) 3125 ], 3126 [RUBY_SO_NAME='$(RUBY_BASE_NAME)']) 3127 ]) 3128 3129LIBRUBY_LDSHARED=${DLDSHARED=${LDSHARED}} 3130LIBRUBY_DLDFLAGS=$DLDFLAGS 3131LIBRUBY_SO='lib$(RUBY_SO_NAME).$(SOEXT).$(RUBY_PROGRAM_VERSION)' 3132LIBRUBY_SONAME='lib$(RUBY_SO_NAME).$(SOEXT).$(RUBY_API_VERSION)' 3133LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).$(SOEXT)' 3134ENABLE_SHARED=no 3135 3136AC_ARG_ENABLE(shared, 3137 AS_HELP_STRING([--enable-shared], [build a shared library for Ruby]), 3138 [enable_shared=$enableval]) 3139libprefix=${multiarch+'$(archlibdir)'}${multiarch-'$(libdir)'} 3140LIBRUBY_RELATIVE=${load_relative-no} 3141AS_CASE("$enable_shared", [yes], [ 3142 LIBRUBY='$(LIBRUBY_SO)' 3143 LIBRUBYARG_SHARED='-l$(RUBY_SO_NAME)' 3144 LIBRUBYARG='$(LIBRUBYARG_SHARED)' 3145 LIBRUBY_RELATIVE=no 3146 test -z "$CCDLFLAGS" || CFLAGS="$CFLAGS $CCDLFLAGS" 3147 ENABLE_SHARED=yes 3148 3149 # libdir can be overridden in config.site file (on OpenSUSE at least). 3150 libdir_basename=lib 3151 AS_IF([test "$bindir" = '${exec_prefix}/bin'], [ 3152 AS_CASE(["$libdir"], ['${exec_prefix}/'*], [libdir_basename=`basename "$libdir"`]) 3153 ]) 3154 AC_DEFINE_UNQUOTED(LIBDIR_BASENAME, ["${libdir_basename}"]) 3155 libdir_basename="${libdir_basename}"${multiarch+'/${arch}'} 3156 3157 AS_CASE(["$target_os"], 3158 [freebsd*|dragonfly*], [], 3159 [ 3160 AS_IF([test "$GCC" = yes], [ 3161 RUBY_TRY_LDFLAGS([${linker_flag}--no-undefined], [no_undefined=yes], [no_undefined=no]) 3162 AS_IF([test "no_undefined" = yes], [ 3163 RUBY_APPEND_OPTION(EXTLDFLAGS, [${linker_flag}--no-undefined]) 3164 ]) 3165 ]) 3166 ]) 3167 3168 AS_CASE(["$target_os"], 3169 [sunos4*], [ 3170 LIBRUBY_ALIASES='$(LIBRUBY_SONAME) lib$(RUBY_SO_NAME).$(SOEXT)' 3171 ], 3172 [linux* | gnu* | k*bsd*-gnu | atheos* | kopensolaris*-gnu | haiku*], [ 3173 RUBY_APPEND_OPTIONS(LIBRUBY_DLDFLAGS, ['-Wl,-soname,$(LIBRUBY_SONAME)' "$LDFLAGS_OPTDIR"]) 3174 LIBRUBY_ALIASES='$(LIBRUBY_SONAME) lib$(RUBY_SO_NAME).$(SOEXT)' 3175 AS_IF([test "$load_relative" = yes], [ 3176 libprefix="'\$\${ORIGIN}/../${libdir_basename}'" 3177 LIBRUBY_RPATHFLAGS="-Wl,-rpath,${libprefix}" 3178 LIBRUBY_RELATIVE=yes 3179 ]) 3180 ], 3181 [freebsd*|dragonfly*], [ 3182 LIBRUBY_SO='lib$(RUBY_SO_NAME).$(SOEXT).$(MAJOR)$(MINOR)' 3183 LIBRUBY_SONAME='$(LIBRUBY_SO)' 3184 RUBY_APPEND_OPTIONS(LIBRUBY_DLDFLAGS, ['-Wl,-soname,${LIBRUBY_SO}']) 3185 AS_IF([test "$rb_cv_binary_elf" != "yes" ], [ 3186 LIBRUBY_SO="$LIBRUBY_SO.\$(TEENY)" 3187 LIBRUBY_ALIASES='' 3188 ]) 3189 ], 3190 [netbsd*], [ 3191 LIBRUBY_SONAME='lib$(RUBY_SO_NAME).$(SOEXT).$(MAJOR)$(MINOR)' 3192 LIBRUBY_SO="${LIBRUBY_SONAME}"'.$(TEENY)' 3193 RUBY_APPEND_OPTIONS(LIBRUBY_DLDFLAGS, ['-Wl,-soname,$(LIBRUBY_SONAME)' "$LDFLAGS_OPTDIR"]) 3194 AS_IF([test "$rb_cv_binary_elf" = yes], [ # ELF platforms 3195 LIBRUBY_ALIASES='$(LIBRUBY_SONAME) lib$(RUBY_SO_NAME).$(SOEXT)' 3196 ], [ # a.out platforms 3197 LIBRUBY_ALIASES="" 3198 ]) 3199 ], 3200 [openbsd*|mirbsd*], [ 3201 LIBRUBY_SO='lib$(RUBY_SO_NAME).$(SOEXT).$(MAJOR).'`expr ${MINOR} \* 10 + ${TEENY}` 3202 ], 3203 [solaris*], [ 3204 LIBRUBY_SO='lib$(RUBY_SO_NAME).$(SOEXT).$(MAJOR)' 3205 LIBRUBY_SONAME='lib$(RUBY_SO_NAME).$(SOEXT).$(RUBY_PROGRAM_VERSION)' 3206 LIBRUBY_ALIASES='$(LIBRUBY_SONAME) lib$(RUBY_SO_NAME).$(SOEXT)' 3207 RUBY_APPEND_OPTIONS(LIBRUBY_DLDFLAGS, ["${linker_flag}-h${linker_flag:+,}"'$(@F)']) 3208 XLDFLAGS="$XLDFLAGS "'-R${libdir}' 3209 ], 3210 [hpux*], [ 3211 XLDFLAGS="$XLDFLAGS "'-Wl,+s,+b,$(libdir)' 3212 LIBRUBY_ALIASES='$(LIBRUBY_SONAME) lib$(RUBY_SO_NAME).$(SOEXT)' 3213 ], 3214 [aix*], [ 3215 RUBY_APPEND_OPTIONS(LIBRUBY_DLDFLAGS, ["${linker_flag}-bnoentry" "$XLDFLAGS" "$LDFLAGS_OPTDIR"]) 3216 LIBRUBYARG_SHARED='-L${libdir} -l${RUBY_SO_NAME}' 3217 LIBS="$LIBS -lm -lc" 3218 ], 3219 [darwin*], [ 3220 LIBRUBY_SO='lib$(RUBY_SO_NAME).$(SOEXT)' 3221 LIBRUBY_SONAME='$(LIBRUBY_SO)' 3222 LIBRUBY_ALIASES='lib$(RUBY_INSTALL_NAME).$(SOEXT)' 3223 AS_IF([test "$load_relative" = yes], [ 3224 libprefix="@executable_path/../${libdir_basename}" 3225 LIBRUBY_RELATIVE=yes 3226 ]) 3227 LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS -install_name ${libprefix}"'/$(LIBRUBY_SONAME)' 3228 LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-compatibility_version $(RUBY_API_VERSION)' 3229 LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-current_version $(RUBY_PROGRAM_VERSION)' 3230 AS_IF([test "$visibility_option" = ld], [ 3231 LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-Wl,-unexported_symbol,_Init_*' 3232 LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-Wl,-unexported_symbol,_ruby_static_id_*' 3233 LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-Wl,-unexported_symbol,*_threadptr_*' 3234 ]) 3235 LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "' $(XLDFLAGS)' 3236 ], 3237 [interix*], [ 3238 LIBRUBYARG_SHARED='-L. -L${libdir} -l$(RUBY_SO_NAME)' 3239 ], 3240 [mingw*|cygwin*|mswin*], [ 3241 LIBRUBY_RELATIVE=yes 3242 ]) 3243], [ 3244 LIBRUBYARG_SHARED= 3245 3246 # enable PIE if possible 3247 AC_ARG_ENABLE(pie, 3248 AS_HELP_STRING([--disable-pie], [disable PIE feature]), 3249 [pie=$enableval], [pie=]) 3250 AS_IF([test "$GCC" = yes -a -z "$EXTSTATIC" -a "x$pie" != xno], [ 3251 RUBY_TRY_CFLAGS(-fPIE, [pie=yes], [pie=no]) 3252 AS_IF([test "$pie" = yes], [ 3253 # Use -fPIE when testing -pie. RUBY_TRY_LDFLAGS sets 3254 # $save_CFLAGS internally, so set other name here. 3255 save_CFLAGS_before_pie="$CFLAGS" 3256 CFLAGS="$CFLAGS -fPIE" 3257 3258 # gcc need -pie but clang need -Wl,-pie. 3259 for pie in -pie -Wl,-pie; do 3260 RUBY_TRY_LDFLAGS([$pie], [], [pie=]) 3261 AS_IF([test "x$pie" != x], [ 3262 RUBY_APPEND_OPTION(XCFLAGS, -fPIE) 3263 RUBY_APPEND_OPTION(XLDFLAGS, $pie) 3264 break 3265 ]) 3266 done 3267 CFLAGS="$save_CFLAGS_before_pie" 3268 ]) 3269 ]) 3270]) 3271AS_IF([test "$enable_rpath" = yes], [ 3272 test -z "$LIBRUBY_RPATHFLAGS" || LIBRUBY_RPATHFLAGS="$LIBRUBY_RPATHFLAGS " 3273 rpathflag="${RPATHFLAG}" 3274 AS_CASE(["${cross_compiling}${load_relative}"], [*yes*], [], [rpathflag="$RPATHFLAG$LIBPATHFLAG"]) 3275 rpathflag=`IFS="$PATH_SEPARATOR" 3276 echo x "$rpathflag" | 3277 sed "s/^x *//;s${IFS}"'%1\\$-s'"${IFS}${libprefix}${IFS}g;s${IFS}%s${IFS}${libprefix}${IFS}g" 3278 ` 3279 LIBRUBY_RPATHFLAGS="$LIBRUBY_RPATHFLAGS${rpathflag}" 3280 LIBRUBYARG_SHARED="$LIBRUBY_RPATHFLAGS $LIBRUBYARG_SHARED" 3281 LIBRUBYARG_STATIC="$LIBRUBY_RPATHFLAGS $LIBRUBYARG_STATIC" 3282]) 3283AC_SUBST(LIBRUBY_RELATIVE) 3284 3285LDFLAGS="-L. $LDFLAGS" 3286AC_SUBST(ARCHFILE) 3287 3288AS_IF([test "$EXEEXT" = .exe], [ 3289 EXECUTABLE_EXTS='".exe",".com",".cmd",".bat"' 3290 AC_DEFINE_UNQUOTED(EXECUTABLE_EXTS, $EXECUTABLE_EXTS) 3291 EXECUTABLE_EXTS=`echo $EXECUTABLE_EXTS | tr -d '"' | tr , ' '` 3292 AC_SUBST(EXECUTABLE_EXTS) 3293]) 3294 3295AS_CASE("$cross_compiling:${LIBPATHENV}", [yes:* | no:], [], [ 3296 AC_MSG_CHECKING(whether wrapper for $LIBPATHENV is needed) 3297 AS_IF([env ${LIBPATHENV}=/lib /bin/sh -c ': ${'${LIBPATHENV}'?}' 2>/dev/null], 3298 [AC_MSG_RESULT(no)], 3299 [PREP="$PREP"' exe/$(PROGRAM)' 3300 AC_MSG_RESULT(yes)] 3301 ) 3302]) 3303 3304AC_ARG_ENABLE(dtrace, 3305 AS_HELP_STRING([--enable-dtrace], 3306 [enable DTrace for tracing inside ruby. enabled by default on systems having dtrace]), 3307 [enable_dtrace=$enableval], [enable_dtrace=auto]) 3308 3309LIBRUBY_A_OBJS='$(OBJS)' 3310DTRACE_REBUILD= 3311AS_CASE(["${enable_dtrace}"], 3312[yes|auto], [ 3313 RUBY_DTRACE_AVAILABLE() 3314], [ 3315 rb_cv_dtrace_available=no 3316]) 3317AS_IF([test "${enable_dtrace}" = yes], [dnl 3318 AS_IF([test -z "$DTRACE"], [dnl 3319 AC_MSG_ERROR([dtrace(1) is missing]) 3320 ], [test "$cross_compiling" = yes], [dnl 3321 AC_MSG_ERROR([--enable-dtrace, however, cross compiling]) 3322 ], [test "${rb_cv_dtrace_available}" = "no"], [dnl 3323 AC_MSG_ERROR([--enable-dtrace, however, USDT is not available]) 3324 ]) 3325]) 3326AS_CASE([$rb_cv_dtrace_available], 3327[yes*], [dnl 3328 RUBY_DTRACE_POSTPROCESS() 3329 AS_IF([test "$rb_cv_prog_dtrace_g" != no], [dnl 3330 DTRACE_OBJ='probes.$(OBJEXT)' 3331 ]) 3332 AS_IF([test "$rb_cv_prog_dtrace_g" = rebuild], [dnl 3333 DTRACE_REBUILD=yes 3334 LIBRUBY_A_OBJS='$(DTRACE_GLOMMED_OBJ)' 3335 ]) 3336 AS_CASE("${target_os}", [freebsd*], [dnl 3337 # FreeBSD's dtrace requires libelf 3338 LIBS="-lelf $LIBS" 3339 ]) 3340 DTRACE_EXT=d 3341], [dnl 3342 enable_dtrace=no 3343 DTRACE_EXT=dmyh 3344]) 3345AC_SUBST(DTRACE_EXT) 3346AC_SUBST(DTRACE_OBJ) 3347AC_SUBST(DTRACE_REBUILD) 3348AC_SUBST(DTRACE_OPT) 3349AC_SUBST(LIBRUBY_A_OBJS) 3350 3351AC_ARG_ENABLE(gcov, 3352 AS_HELP_STRING([--enable-gcov], [enable coverage measurement by gcov]), 3353 [gcov=yes]) 3354AS_IF([test x"$gcov" = xyes], [ 3355 CFLAGS="$CFLAGS -coverage" 3356 LDFLAGS="$LDFLAGS -coverage" 3357]) 3358 3359RUBY_SETJMP_TYPE 3360} 3361 3362: "build section" && { 3363dnl build rdoc index if requested 3364RDOCTARGET="" 3365CAPITARGET="" 3366AC_ARG_ENABLE(install-doc, 3367 AS_HELP_STRING([--disable-install-doc], [do not install either rdoc indexes or C API documents during install]), 3368 [install_doc=$enableval], [install_doc=yes]) 3369AC_ARG_ENABLE(install-rdoc, 3370 AS_HELP_STRING([--disable-install-rdoc], [do not install rdoc indexes during install]), 3371 [install_rdoc=$enableval], [install_rdoc=yes]) 3372AC_ARG_ENABLE(install-capi, 3373 AS_HELP_STRING([--disable-install-capi], [do not install C API documents during install]), 3374 [install_capi=$enableval], [install_capi=no]) 3375 3376AS_IF([test "$install_doc" != no], [ 3377 AS_IF([test "$install_rdoc" != no], [ 3378 RDOCTARGET="rdoc" 3379 ], [ 3380 RDOCTARGET="nodoc" 3381 ]) 3382 AS_IF([test "$install_capi" != no -a -n "$DOXYGEN"], [ 3383 CAPITARGET="capi" 3384 ], [ 3385 CAPITARGET="nodoc" 3386 ]) 3387], [ 3388 RDOCTARGET="nodoc" 3389 CAPITARGET="nodoc" 3390]) 3391 3392AC_SUBST(RDOCTARGET) 3393AC_SUBST(CAPITARGET) 3394 3395AS_CASE(["$RDOCTARGET:$CAPITARGET"],[nodoc:nodoc],[INSTALLDOC=nodoc],[INSTALLDOC=all]) 3396AC_SUBST(INSTALLDOC) 3397 3398AC_ARG_ENABLE(jit-support, 3399 AS_HELP_STRING([--disable-jit-support], [disable JIT features]), 3400 [MJIT_SUPPORT=$enableval 3401 AS_IF([test x"$enable_jit_support" = "xyes"], 3402 [AC_DEFINE(USE_MJIT, 1)], 3403 [AC_DEFINE(USE_MJIT, 0)])], 3404 [MJIT_SUPPORT=yes 3405 AC_DEFINE(USE_MJIT, 1)]) 3406 3407AC_SUBST(MJIT_SUPPORT) 3408 3409AC_ARG_ENABLE(install-static-library, 3410 AS_HELP_STRING([--disable-install-static-library], [do not install static ruby library]), 3411 [INSTALL_STATIC_LIBRARY=$enableval], 3412 AS_IF([test x"$enable_shared" = xyes], 3413 [INSTALL_STATIC_LIBRARY=no], 3414 [INSTALL_STATIC_LIBRARY=yes])) 3415AC_SUBST(INSTALL_STATIC_LIBRARY) 3416 3417AS_IF([test "$rb_with_pthread" = "yes"], [ 3418 THREAD_MODEL=pthread 3419]) 3420AC_CACHE_CHECK([for prefix of external symbols], rb_cv_symbol_prefix, [ 3421 AC_TRY_COMPILE([extern void conftest_external(void) {}], [], [ 3422 rb_cv_symbol_prefix=`$NM conftest.$ac_objext | 3423 sed -n ['/.*T[ ]\([^ ]*\)conftest_external.*/!d;s//\1/p;q']` 3424 ], 3425 [rb_cv_symbol_prefix='']) 3426 test -n "$rb_cv_symbol_prefix" || rb_cv_symbol_prefix=NONE 3427]) 3428SYMBOL_PREFIX="$rb_cv_symbol_prefix" 3429test "x$SYMBOL_PREFIX" = xNONE && SYMBOL_PREFIX='' 3430DLNOBJ=dln.o 3431AC_ARG_ENABLE(dln, 3432 AC_HELP_STRING([--disable-dln], [disable dynamic link feature]), 3433 [test "$enableval" = yes || DLNOBJ=dmydln.o]) 3434AC_SUBST(DLNOBJ) 3435MINIDLNOBJ=dmydln.o 3436 3437AS_CASE(["$target_os"], 3438 [linux*], [ 3439 ], 3440 [netbsd*], [ 3441 RUBY_APPEND_OPTION(CFLAGS, -pipe) 3442 ], 3443 [darwin*], [ 3444 RUBY_APPEND_OPTION(CFLAGS, -pipe) 3445 AC_COMPILE_IFELSE([ 3446 AC_LANG_BOOL_COMPILE_TRY([@%:@include <AvailabilityMacros.h>], 3447 [MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_7])], 3448 [dnl 3449 RUBY_APPEND_OPTION(XLDFLAGS, [-framework Security]) 3450 RUBY_APPEND_OPTION(LIBRUBYARG_STATIC, [-framework Security]) 3451 ]dnl 3452 ) 3453 RUBY_APPEND_OPTION(XLDFLAGS, [-framework Foundation]) 3454 RUBY_APPEND_OPTION(LIBRUBYARG_STATIC, [-framework Foundation]) 3455 ], 3456 [osf*], [ 3457 AS_IF([test "$GCC" != "yes" ], [ 3458 # compile something small: taint.c is fine for this. 3459 # the main point is the '-v' flag of 'cc'. 3460 AS_CASE(["`cc -v -I. -c main.c -o /tmp/main.o 2>&1`"], 3461 [*/gemc_cc*], [ # we have the new DEC GEM CC 3462 CFLAGS="$CFLAGS -oldc" 3463 ], 3464 [ # we have the old MIPS CC 3465 ]) 3466 # cleanup 3467 rm -f /tmp/main.o 3468 CFLAGS="$CFLAGS -std" 3469 ]) 3470 ], 3471 [cygwin*|mingw*], [ 3472 LIBRUBY_DLDFLAGS="${LIBRUBY_DLDFLAGS}"' -Wl,--out-implib=$(LIBRUBY)' 3473 AS_CASE(["$target_os"], 3474 [cygwin*], [ 3475 AS_IF([test x"$enable_shared" = xyes], [ 3476 LIBRUBY_SO='cyg$(RUBY_SO_NAME)'.dll 3477 LIBRUBY_DLDFLAGS="${LIBRUBY_DLDFLAGS}"' $(RUBYDEF)' 3478 ]) 3479 ], 3480 [mingw*], [ 3481 AS_IF([test x"$enable_shared" = xyes], [ 3482 LIBRUBY_SO='$(RUBY_SO_NAME)'.dll 3483 LIBRUBY_DLDFLAGS="${LIBRUBY_DLDFLAGS}"' $(RUBYDEF)' 3484 ]) 3485 EXPORT_PREFIX=' ' 3486 DLDFLAGS="${DLDFLAGS}"' $(DEFFILE)' 3487 AC_LIBOBJ([win32/win32]) 3488 AC_LIBOBJ([win32/file]) 3489 COMMON_LIBS=m 3490# COMMON_MACROS="WIN32_LEAN_AND_MEAN=" 3491 COMMON_HEADERS="winsock2.h windows.h" 3492 THREAD_MODEL=win32 3493 PLATFORM_DIR=win32 3494 ]) 3495 LIBRUBY_ALIASES='' 3496 FIRSTMAKEFILE=GNUmakefile:cygwin/GNUmakefile.in 3497 AS_IF([test x"$enable_shared" = xyes], [ 3498 LIBRUBY='lib$(RUBY_SO_NAME).dll.a' 3499 ], [ 3500 LIBRUBY_SO=dummy 3501 LIBRUBY='lib$(RUBY_SO_NAME).a' 3502 LIBRUBYARG='-l$(RUBY_SO_NAME)' 3503 ]) 3504 ], 3505 [hpux*], [ 3506 AS_CASE(["$YACC"],[*yacc*], [ 3507 XCFLAGS="$XCFLAGS -DYYMAXDEPTH=300" 3508 YACC="$YACC -Nl40000 -Nm40000" 3509 ]) 3510]) 3511 3512MINIOBJS="$MINIDLNOBJ" 3513 3514AS_CASE(["$THREAD_MODEL"], 3515[pthread], [AC_CHECK_HEADERS(pthread.h)], 3516[win32], [], 3517[""], [AC_MSG_ERROR(thread model is missing)], 3518 [AC_MSG_ERROR(unknown thread model $THREAD_MODEL)]) 3519 3520AC_ARG_ENABLE(debug-env, 3521 AS_HELP_STRING([--enable-debug-env], [enable RUBY_DEBUG environment variable]), 3522 [AC_SUBST(ENABLE_DEBUG_ENV, yes)]) 3523 3524AS_CASE(["$FIRSTMAKEFILE"], [*GNUmakefile:*], [gnumake=yes], [ 3525 AC_MSG_CHECKING([if ${MAKE-make} is GNU make]) 3526 mkdir conftest.dir 3527 echo "all:; @echo yes" > conftest.dir/GNUmakefile 3528 echo "all:; @echo no" > conftest.dir/Makefile 3529 gnumake=`(cd conftest.dir; ${MAKE-make})` 3530 rm -fr conftest.dir 3531 AS_CASE(["$gnumake"], 3532 [*yes*], [ 3533 FIRSTMAKEFILE=GNUmakefile:template/GNUmakefile.in 3534 gnumake=yes], 3535 [ 3536 gnumake=no]) 3537 AC_MSG_RESULT($gnumake) 3538]) 3539AS_IF([test "$gnumake" = yes], [ NULLCMD=: ], [ 3540 AC_MSG_CHECKING([for safe null command for ${MAKE-make}]) 3541 mkdir conftest.dir 3542 NULLCMD= 3543 for cmd in : true; do 3544 echo 'A=1' > conftest.dir/Makefile 3545 echo 'B=$(A:1=@'$cmd')' >> conftest.dir/Makefile 3546 echo 'all:; $B 1 2 3 4 5 6 7 8 9' >> conftest.dir/Makefile 3547 AS_IF([(cd conftest.dir; ${MAKE-make} >/dev/null 2>/dev/null)], [ 3548 NULLCMD=$cmd 3549 break 3550 ]) 3551 done 3552 rm -fr conftest.dir 3553 AS_IF([test -z "$NULLCMD"], [ 3554 AC_MSG_ERROR(no candidate for safe null command) 3555 ]) 3556 AC_MSG_RESULT($NULLCMD) 3557]) 3558AC_SUBST(NULLCMD) 3559 3560AS_IF([test "${universal_binary-no}" = yes ], [ 3561 AC_CACHE_CHECK([for architecture macros], rb_cv_architecture_macros, [ 3562 mv confdefs.h confdefs1.h 3563 : > confdefs.h 3564 AC_TRY_COMPILE([@%:@if defined __`echo ${universal_archnames} | 3565 sed 's/=[^ ]*//g;s/ /__ || defined __/g'`__ 3566@%:@else 3567@%:@error 3568>>>>>><<<<<< 3569@%:@endif], [], 3570[ 3571 rb_cv_architecture_macros=yes 3572 mv -f confdefs1.h confdefs.h 3573], [ 3574 rb_cv_architecture_macros=no 3575 archflagpat=`eval echo '"'"${ARCH_FLAG}"'"' | sed 's/[[][|.*]]/\\&/g'` 3576 new_cflags=`echo "$CFLAGS" | sed "s|$archflagpat"'||'` 3577 for archs in ${universal_archnames}; do 3578 cpu=${archs@%:@*=} 3579 archs=${archs%=*} 3580 CFLAGS="$new_cflags -arch $archs" 3581 archs="__${archs}__" 3582 AC_MSG_CHECKING([for macro ${archs} on ${cpu}]) 3583 AC_TRY_COMPILE([@%:@ifndef ${archs} 3584@%:@error 3585@%:@endif], [], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]) 3586 done 3587 mv -f confdefs1.h confdefs.h 3588 AC_MSG_ERROR([failed]) 3589 ])]) 3590 AC_CACHE_CHECK(whether __ARCHITECTURE__ is available, rb_cv_architecture_available, 3591 AC_TRY_COMPILE([@%:@include <stdio.h> 3592 const char arch[[]] = __ARCHITECTURE__;], [puts(arch);], 3593 [rb_cv_architecture_available=yes], [rb_cv_architecture_available=no])) 3594]) 3595 3596: ${MJIT_LDSHARED=`echo "$LDSHARED" | sed ['s|\$(LD)|'"${LD}"'|g;s|\$(CC)|$(MJIT_CC)|g']`} 3597 3598MAINLIBS="$LIBS" 3599LIBS=$ORIG_LIBS 3600AS_IF([test -n "${LIBS}"], [ 3601 libspat=`echo "${LIBS}" | sed 's/[[][|.*$^]]/\\&/g;s/^ */ /;s/^ *$/ /'` 3602 MAINFLAGS=`echo " $MAINLIBS " | sed "s|$libspat"'||;s/^ *//;s/ *$//'` 3603]) 3604LIBRUBYARG_STATIC="${LIBRUBYARG_STATIC} \$(MAINLIBS)" 3605CPPFLAGS="$CPPFLAGS "'$(DEFS)' 3606test -z "$CPPFLAGS" || CPPFLAGS="$CPPFLAGS "; CPPFLAGS="$CPPFLAGS"'${cppflags}' 3607AS_IF([test -n "${cflags+set}"], [ 3608 cflagspat=`eval echo '"'"${cflags}"'"' | sed 's/[[][|.*]]/\\&/g;s/^ */ /;s/^ *$/ /'` 3609 CFLAGS=`echo " $CFLAGS " | sed "s|$cflagspat"'|${cflags}|;s/^ *//;s/ *$//'` 3610]) 3611AS_IF([test -n "${cxxflags+set}"], [ 3612 cxxflagspat=`eval echo '"'"${cxxflags}"'"' | sed 's/[[][|.*]]/\\&/g;s/^ */ /;s/^ *$/ /'` 3613 CXXFLAGS=`echo " $CXXFLAGS " | sed "s|$cxxflagspat"'|${cxxflags}|;s/^ *//;s/ *$//'` 3614]) 3615AS_IF([test "${ARCH_FLAG}"], [ 3616 archflagpat=`eval echo '"'"${ARCH_FLAG}"'"' | sed 's/[[][|.*]]/\\&/g'` 3617 CFLAGS=`echo "$CFLAGS" | sed "s| *$archflagpat"'||'` 3618 CXXFLAGS=`echo "$CXXFLAGS" | sed "s| *$archflagpat"'||'` 3619 LDFLAGS=`echo "$LDFLAGS" | sed "s| *$archflagpat"'||'` 3620]) 3621warnflags="$rb_cv_warnflags" 3622AC_SUBST(cppflags)dnl 3623AC_SUBST(cflags, ["${orig_cflags:+$orig_cflags }"'${optflags} ${debugflags} ${warnflags}'])dnl 3624AC_SUBST(cxxflags, ["${orig_cxxflags:+$orig_cxxflags }"'${optflags} ${debugflags} ${warnflags}'])dnl 3625AC_SUBST(optflags)dnl 3626AC_SUBST(debugflags)dnl 3627AC_SUBST(warnflags)dnl 3628AC_SUBST(strict_warnflags)dnl 3629AC_SUBST(XCFLAGS)dnl 3630AC_SUBST(XLDFLAGS)dnl 3631AC_SUBST(EXTLDFLAGS)dnl 3632AC_SUBST(EXTDLDFLAGS)dnl 3633AC_SUBST(LIBRUBY_LDSHARED) 3634AC_SUBST(LIBRUBY_DLDFLAGS) 3635AC_SUBST(RUBY_INSTALL_NAME) 3636AC_SUBST(rubyw_install_name) 3637AC_SUBST(RUBYW_INSTALL_NAME) 3638AC_SUBST(RUBY_SO_NAME) 3639AC_SUBST(LIBRUBY_A) 3640AC_SUBST(LIBRUBY_SO) 3641AC_SUBST(LIBRUBY_SONAME) 3642AC_SUBST(LIBRUBY_ALIASES) 3643AC_SUBST(LIBRUBY) 3644AC_SUBST(LIBRUBYARG) 3645AC_SUBST(LIBRUBYARG_STATIC) 3646AC_SUBST(LIBRUBYARG_SHARED) 3647AC_SUBST(SOLIBS) 3648AC_SUBST(DLDLIBS) 3649AC_SUBST(DLDSHARED) 3650AC_SUBST(ENABLE_SHARED) 3651AC_SUBST(MAINLIBS) 3652AC_SUBST(COMMON_LIBS) 3653AC_SUBST(COMMON_MACROS) 3654AC_SUBST(COMMON_HEADERS) 3655AC_SUBST(EXPORT_PREFIX) 3656AC_SUBST(SYMBOL_PREFIX) 3657AC_SUBST(MINIOBJS) 3658AC_SUBST(THREAD_MODEL) 3659AC_SUBST(PLATFORM_DIR) 3660 3661firstmf=`echo $FIRSTMAKEFILE | sed 's/:.*//'` 3662firsttmpl=`echo $FIRSTMAKEFILE | sed 's/.*://'` 3663MAKEFILES="Makefile $firstmf" 3664MAKEFILES="`echo $MAKEFILES`" 3665AC_SUBST(MAKEFILES) 3666 3667ri_prefix= 3668test "$program_prefix" != NONE && 3669 ri_prefix=$program_prefix 3670 3671ri_suffix= 3672test "$program_suffix" != NONE && 3673 ri_suffix=$program_suffix 3674 3675RUBY_INSTALL_NAME="${ri_prefix}"'$(RUBY_BASE_NAME)'"${ri_suffix}" 3676AS_CASE(["$target_os"], 3677 [cygwin*|mingw*], [ 3678 RUBYW_INSTALL_NAME="${ri_prefix}"'$(RUBYW_BASE_NAME)'"${ri_suffix}" 3679 rubyw_install_name='$(RUBYW_INSTALL_NAME)' 3680 ]) 3681 3682rubylibdir='${rubylibprefix}/${ruby_version}' 3683rubyarchdir=${multiarch+'${rubyarchprefix}/${ruby_version}'}${multiarch-'${rubylibdir}/${arch}'} 3684 3685rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'} 3686AC_ARG_WITH(rubyarchprefix, 3687 AS_HELP_STRING([--with-rubyarchprefix=DIR], 3688 [prefix for architecture dependent ruby libraries [[RUBYLIBPREFIX/ARCH]]]), 3689 [rubyarchprefix="$withval"]) 3690AC_SUBST(rubyarchprefix) 3691 3692rubysitearchprefix=${multiarch+'${sitearchlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${sitearch}'} 3693AC_ARG_WITH(rubysitearchprefix, 3694 AS_HELP_STRING([--with-rubysitearchprefix=DIR], 3695 [prefix for architecture dependent site libraries [[RUBYLIBPREFIX/SITEARCH]]]), 3696 [rubysitearchprefix="$withval"]) 3697AC_SUBST(rubysitearchprefix) 3698 3699RI_BASE_NAME=`echo ${RUBY_BASE_NAME} | sed 's/ruby/ri/'` 3700ridir='${datarootdir}/${RI_BASE_NAME}' 3701AC_ARG_WITH(ridir, 3702 AS_HELP_STRING([--with-ridir=DIR], [ri documentation [[DATAROOTDIR/ri]]]), 3703 [ridir=$withval]) 3704AC_SUBST(ridir) 3705AC_SUBST(RI_BASE_NAME) 3706 3707AC_ARG_WITH(ruby-version, 3708 AS_HELP_STRING([--with-ruby-version=STR], [ruby version string for version specific directories [[full]] (full|minor|STR)]), 3709 [ruby_version=$withval], 3710 [ruby_version=full]) 3711unset RUBY_LIB_VERSION 3712unset RUBY_LIB_VERSION_STYLE 3713AS_CASE(["$ruby_version"], 3714 [full], [RUBY_LIB_VERSION_STYLE='3 /* full */'], 3715 [minor], [RUBY_LIB_VERSION_STYLE='2 /* minor */']) 3716AS_IF([test ${RUBY_LIB_VERSION_STYLE+set}], [ 3717 { 3718 echo "#define RUBY_LIB_VERSION_STYLE $RUBY_LIB_VERSION_STYLE" 3719 echo '#define STRINGIZE(x) x' 3720 test -f revision.h -o -f "${srcdir}/revision.h" || echo '#define RUBY_REVISION 0' 3721 echo '#include "version.h"' 3722 echo 'ruby_version=RUBY_LIB_VERSION' 3723 } > conftest.c 3724 ruby_version="`$CPP -I. -I"${srcdir}" -I"${srcdir}/include" conftest.c | sed '/^ruby_version=/!d;s/ //g'`" 3725 eval $ruby_version 3726], [test -z "${ruby_version}"], [ 3727 AC_MSG_ERROR([No ruby version, No place for bundled libraries]) 3728], [ 3729 RUBY_LIB_VERSION="${ruby_version}" 3730]) 3731AC_SUBST(RUBY_LIB_VERSION_STYLE) 3732AC_SUBST(RUBY_LIB_VERSION) 3733 3734AC_ARG_WITH(sitedir, 3735 AS_HELP_STRING([--with-sitedir=DIR], [site libraries in DIR [[RUBY_LIB_PREFIX/site_ruby]], "no" to disable site directory]), 3736 [sitedir=$withval], 3737 [sitedir='${rubylibprefix}/site_ruby']) 3738sitelibdir='${sitedir}/${ruby_version}' 3739 3740AC_ARG_WITH(sitearchdir, 3741 AS_HELP_STRING([--with-sitearchdir=DIR], 3742 [architecture dependent site libraries in DIR [[SITEDIR/SITEARCH]], "no" to disable site directory]), 3743 [sitearchdir=$withval], 3744 [sitearchdir=${multiarch+'${rubysitearchprefix}/site_ruby/${ruby_version}'}${multiarch-'${sitelibdir}/${sitearch}'}]) 3745 3746AC_ARG_WITH(vendordir, 3747 AS_HELP_STRING([--with-vendordir=DIR], [vendor libraries in DIR [[RUBY_LIB_PREFIX/vendor_ruby]], "no" to disable vendor directory]), 3748 [vendordir=$withval], 3749 [vendordir='${rubylibprefix}/vendor_ruby']) 3750vendorlibdir='${vendordir}/${ruby_version}' 3751 3752AC_ARG_WITH(vendorarchdir, 3753 AS_HELP_STRING([--with-vendorarchdir=DIR], 3754 [architecture dependent vendor libraries in DIR [[VENDORDIR/SITEARCH]], "no" to disable vendor directory]), 3755 [vendorarchdir=$withval], 3756 [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby/${ruby_version}'}${multiarch-'${vendorlibdir}/${sitearch}'}]) 3757 3758AS_IF([test "${LOAD_RELATIVE+set}"], [ 3759 AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) 3760 RUBY_EXEC_PREFIX='' 3761]) 3762 3763AC_SUBST(RUBY_EXEC_PREFIX) 3764 3765AC_SUBST(libdirname, ${multiarch+arch}libdir) 3766AC_SUBST(archlibdir)dnl 3767AC_SUBST(sitearchlibdir)dnl 3768AC_SUBST(archincludedir)dnl 3769AC_SUBST(sitearchincludedir)dnl 3770AC_SUBST(arch)dnl 3771AC_SUBST(sitearch)dnl 3772AC_SUBST(ruby_version)dnl 3773AC_SUBST(rubylibdir)dnl 3774AC_SUBST(rubyarchdir)dnl 3775AC_SUBST(sitedir)dnl 3776AC_SUBST(sitelibdir)dnl 3777AC_SUBST(sitearchdir)dnl 3778AC_SUBST(vendordir)dnl 3779AC_SUBST(vendorlibdir)dnl 3780AC_SUBST(vendorarchdir)dnl 3781 3782AC_SUBST(CONFIGURE, "`echo $0 | sed 's|.*/||'`")dnl 3783AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl 3784 3785AS_IF([test "${universal_binary-no}" = yes ], [ 3786 arch="universal-${target_os}" 3787 AS_IF([test "${rb_cv_architecture_available}" = yes], [ 3788 AC_DEFINE_UNQUOTED(RUBY_PLATFORM_CPU, __ARCHITECTURE__) 3789 ], [ 3790 for archs in ${universal_archnames}; do 3791 cpu=`echo $archs | sed 's/.*=//'` 3792 archs=`echo $archs | sed 's/=.*//'` 3793 RUBY_DEFINE_IF([defined __${archs}__ &&! defined RUBY_PLATFORM_CPU], RUBY_PLATFORM_CPU, ["${cpu}"]) 3794 done 3795 ]) 3796 ints='long int short' 3797 test "$ac_cv_type_long_long" = yes && ints="'long long' $ints" 3798 AC_SUBST(UNIVERSAL_ARCHNAMES, "${universal_archnames}") 3799 AC_SUBST(UNIVERSAL_INTS, "${ints}") 3800 AC_DEFINE_UNQUOTED(RUBY_PLATFORM_OS, "${target_os}") 3801 AC_DEFINE_UNQUOTED(RUBY_ARCH, "universal-"RUBY_PLATFORM_OS) 3802 AC_DEFINE_UNQUOTED(RUBY_PLATFORM, "universal."RUBY_PLATFORM_CPU"-"RUBY_PLATFORM_OS) 3803], [ 3804 arch="${target_cpu}-${target_os}" 3805 AC_DEFINE_UNQUOTED(RUBY_PLATFORM, "$arch") 3806]) 3807 3808unset sitearch 3809AS_CASE(["$target_os"],[mingw*],[sitearch="$target_cpu-$rb_cv_msvcrt"]) 3810: ${sitearch='${arch}'} 3811 3812AC_ARG_WITH(search-path, 3813 AS_HELP_STRING([--with-search-path=DIR], [specify the additional search path]), 3814 [search_path=$withval]) 3815AS_IF([test "$search_path" != ""], [ 3816 AC_SUBST(RUBY_SEARCH_PATH, $search_path) 3817]) 3818 3819AC_ARG_WITH(rubyhdrdir, 3820 AS_HELP_STRING([--with-rubyhdrdir=DIR], [core headers in DIR [[INCLUDEDIR/RUBY_BASE_NAME-RUBY_VERSION]]]), 3821 [rubyhdrdir=$withval], 3822 [rubyhdrdir='${includedir}/${RUBY_VERSION_NAME}']) 3823 3824AC_ARG_WITH(rubyarchhdrdir, 3825 AS_HELP_STRING([--with-rubyarchhdrdir=DIR], 3826 [architecture dependent core headers in DIR [[$(rubyhdrdir)/$(arch)]]]), 3827 [rubyarchhdrdir=$withval], 3828 [rubyarchhdrdir=${multiarch+'${archincludedir}/${RUBY_VERSION_NAME}'}${multiarch-'${rubyhdrdir}/${arch}'}]) 3829 3830AC_ARG_WITH(sitehdrdir, 3831 AS_HELP_STRING([--with-sitehdrdir=DIR], [core site headers in DIR [[RUBYHDRDIR/site_ruby]]]), 3832 [sitehdrdir=$withval], 3833 [sitehdrdir='${rubyhdrdir}/site_ruby']) 3834 3835AC_ARG_WITH(sitearchhdrdir, 3836 AS_HELP_STRING([--with-sitearchhdrdir=DIR], 3837 [architecture dependent core site headers in DIR [[RUBYHDRDIR/site_ruby]]]), 3838 [sitearchhdrdir=$withval], 3839 [sitearchhdrdir=${multiarch+'${sitearchincludedir}/${RUBY_VERSION_NAME}/site_ruby'}${multiarch-'${sitehdrdir}/${sitearch}'}]) 3840 3841AC_ARG_WITH(vendorhdrdir, 3842 AS_HELP_STRING([--with-vendorhdrdir=DIR], [core vendor headers in DIR [[RUBYHDRDIR/vendor_ruby]]]), 3843 [vendorhdrdir=$withval], 3844 [vendorhdrdir='${rubyhdrdir}/vendor_ruby']) 3845 3846AC_ARG_WITH(vendorarchhdrdir, 3847 AS_HELP_STRING([--with-vendorarchhdrdir=DIR], 3848 [architecture dependent core vendor headers in DIR [[RUBYHDRDIR/vendor_ruby]]]), 3849 [vendorarchhdrdir=$withval], 3850 [vendorarchhdrdir=${multiarch+'${sitearchincludedir}/${RUBY_VERSION_NAME}/vendor_ruby'}${multiarch-'${vendorhdrdir}/${sitearch}'}]) 3851 3852AC_SUBST(rubyhdrdir)dnl 3853AC_SUBST(sitehdrdir)dnl 3854AC_SUBST(vendorhdrdir)dnl 3855AC_SUBST(rubyarchhdrdir)dnl 3856AC_SUBST(sitearchhdrdir)dnl 3857AC_SUBST(vendorarchhdrdir)dnl 3858 3859AC_ARG_WITH(mantype, 3860 AS_HELP_STRING([--with-mantype=TYPE], [specify man page type; TYPE is one of man and doc]), 3861 [ 3862 AS_CASE(["$withval"], 3863 [man|man.gz|man.bz2|doc|doc.gz|doc.bz2], [MANTYPE=$withval], 3864 [AC_MSG_ERROR(invalid man type: $withval)]) 3865 ]) 3866AS_IF([test -z "$MANTYPE"], [ 3867 dnl Looks for nroff with -mdoc support. 3868 AC_CACHE_VAL([ac_cv_path_NROFF], [ 3869 AC_PATH_PROGS_FEATURE_CHECK([NROFF], 3870 [nroff awf mandoc], 3871 [$ac_path_NROFF -mdoc ${srcdir}/man/ruby.1 \ 3872 >/dev/null 2>&1 && 3873 ac_cv_path_NROFF=$ac_path_NROFF \ 3874 ac_path_NROFF_found=:], 3875 [], ["/usr/bin:/usr/ucb"] 3876 ) 3877 ]) 3878 AS_IF([test -n "$ac_cv_path_NROFF"], [ 3879 MANTYPE=doc 3880 ], [ 3881 MANTYPE=man 3882 ]) 3883]) 3884AC_SUBST(MANTYPE) 3885 3886AC_ARG_ENABLE(rubygems, 3887 AS_HELP_STRING([--disable-rubygems], [disable rubygems by default]), 3888 [enable_rubygems="$enableval"], [enable_rubygems=yes]) 3889AS_IF([test x"$enable_rubygems" = xno], [ 3890 USE_RUBYGEMS=no 3891], [ 3892 USE_RUBYGEMS=yes 3893]) 3894AC_SUBST(USE_RUBYGEMS) 3895 3896arch_hdrdir="${EXTOUT}/include/${arch}/ruby" 3897AS_MKDIR_P("${arch_hdrdir}") 3898config_h="${arch_hdrdir}/config.h" 3899guard=INCLUDE_RUBY_CONFIG_H 3900{ 3901 echo "#ifndef $guard" 3902 echo "#define $guard 1" 3903 grep -v "^#define PACKAGE_" confdefs.h 3904 echo "#endif /* $guard */" 3905} | tr -d '\015' | 3906( 3907 AS_IF([test "x$CONFIGURE_TTY" = xyes], [color=--color], [color=]) 3908 exec ${srcdir}/tool/ifchange $color "${config_h}" - 3909) >&AS_MESSAGE_FD || AC_MSG_ERROR([failed to create ${config_h}]) 3910tr -d '\015' < largefile.h > confdefs.h 3911rm largefile.h 3912 3913BUILTIN_ENCS=["`sed -n -e '/^BUILTIN_ENCS[ ]*=/{' \ 3914 -e s/// -e :l -e '/\\\\$/N' -e 's/\\\\\\n/ /' -e 't l' -e p \ 3915 -e '}' "${srcdir}/enc/Makefile.in"`"] 3916BUILTIN_ENCOBJS= 3917for e in $BUILTIN_ENCS; do BUILTIN_ENCOBJS="$BUILTIN_ENCOBJS "`echo $e | sed 's/\.c$/.$(OBJEXT)/'`; done 3918AC_SUBST(BUILTIN_ENCOBJS) 3919 3920BUILTIN_TRANSES=["`sed -n -e '/^BUILTIN_TRANSES[ ]*=/{' \ 3921 -e s/// -e :l -e '/\\\\$/N' -e 's/\\\\\\n/ /' -e 't l' -e p \ 3922 -e '}' "${srcdir}/enc/Makefile.in"`"] 3923BUILTIN_TRANSSRCS= 3924BUILTIN_TRANSOBJS= 3925for e in $BUILTIN_TRANSES; do 3926 BUILTIN_TRANSSRCS="$BUILTIN_TRANSSRCS "`echo $e | sed 's/\.trans$/.c/'` 3927 BUILTIN_TRANSOBJS="$BUILTIN_TRANSOBJS "`echo $e | sed 's/\.trans$/.$(OBJEXT)/'` 3928done 3929AC_SUBST(BUILTIN_TRANSSRCS) 3930AC_SUBST(BUILTIN_TRANSOBJS) 3931 3932PACKAGE=$RUBY_BASE_NAME 3933AC_SUBST(PACKAGE) 3934AS_MESSAGE([$PACKAGE library version = $ruby_version]) 3935 3936AS_IF([test x"$CC_WRAPPER" != x], [ 3937 CC='$(CC_WRAPPER) '"${CC@%:@$CC_WRAPPER }" 3938 CPP='$(CC_WRAPPER) '"${CPP@%:@$CC_WRAPPER }" 3939 CC_WRAPPER='$(rubyarchdir)/darwin-cc' 3940 XCC_WRAPPER='$(top_srcdir)/tool/darwin-cc' 3941]) 3942AC_SUBST(CC_WRAPPER, '') 3943AC_SUBST(XCC_WRAPPER) 3944 3945AS_CASE([" $CPP "], [*" $CC "*], [CPP=`echo " $CPP " | sed "s| $CC |"' $(CC) |;s/^ *//;s/ *$//'`]) 3946 3947AS_IF([test x"$firstmf" != x], [ 3948 AC_CONFIG_FILES($firstmf:$firsttmpl, [], [firstmf="$firstmf" firsttmpl="$firsttmpl"]) 3949]) 3950AC_CONFIG_FILES(Makefile, [ 3951 tmpmk=confmk$$.tmp 3952 { 3953 AS_IF([test ${VCS+set}], [ 3954 : 3955 ], [svn info "$srcdir" > /dev/null 2>&1], [ 3956 VCS='svn' 3957 ], [git_dir=`$GIT --work-tree="$srcdir" --git-dir="$srcdir/.git" rev-parse --git-dir 2>/dev/null`], [ 3958 AS_IF([test -d "$git_dir/svn"], [ 3959 VCS='$(GIT) svn' 3960 ], [ 3961 VCS='$(GIT)' 3962 ]) 3963 ], [ 3964 VCS='echo cannot' 3965 ]) 3966 AS_CASE("$VCS", 3967 [svn], [VCSUP='$(VCS) up $(SVNUPOPTIONS)'], 3968 ['$(GIT) svn'], [VCSUP='$(VCS) rebase $(GITSVNREBASEOPTIONS)'], 3969 ['$(GIT)'|git], [VCSUP='$(VCS) pull $(GITPULLOPTIONS)'], 3970 [VCSUP='$(VCS)']) 3971 sed -n \ 3972 -e '[/^@%:@define \(RUBY_RELEASE_[A-Z]*\) \([0-9][0-9]*\)/]{' \ 3973 -e 's//\1 = \2/' \ 3974 -e '[s/ \([0-9]\)$/ 0\1/]' \ 3975 -e p \ 3976 -e '}' "$srcdir/version.h" 3977 sed '/^MISSING/s/\$U\././g;/^VCS *=/s#@VCS@#'"$VCS"'#;/^VCSUP *=/s#@VCSUP@#'"$VCSUP"'#' Makefile 3978 echo; test x"$EXEEXT" = x || echo 'miniruby: miniruby$(EXEEXT)' 3979 AS_IF([test "$gnumake" != yes], [ 3980 echo ['$(MKFILES): $(srcdir)/common.mk'] 3981 sed ['s/{\$([^(){}]*)[^{}]*}//g'] ${srcdir}/common.mk 3982 ], [ 3983 echo 'distclean-local::; @$(RM) GNUmakefile uncommon.mk' 3984 ]) 3985 } > $tmpmk && AS_IF([! grep '^ruby:' $tmpmk > /dev/null], [ 3986 AS_IF([test "${gnumake}" = yes], [ 3987 tmpgmk=confgmk$$.tmp 3988 { 3989 echo "include $tmpmk" 3990 echo "-include uncommon.mk" 3991 } > $tmpgmk 3992 ], [ 3993 tmpgmk=$tmpmk 3994 ]) && 3995 test -z "`${MAKE-make} -f $tmpgmk info-program | grep '^PROGRAM=ruby$'`" && 3996 echo 'ruby: $(PROGRAM);' >> $tmpmk 3997 test "$tmpmk" = "$tmpgmk" || rm -f "$tmpgmk" 3998 ]) && mv -f $tmpmk Makefile], 3999[EXEEXT='$EXEEXT' gnumake='$gnumake' GIT='$GIT']) 4000 4001AC_ARG_WITH([ruby-pc], 4002 AC_HELP_STRING([--with-ruby-pc=FILENAME], [pc file basename]), 4003 [ruby_pc="$withval"], 4004 [ruby_pc="${RUBY_BASE_NAME}-${MAJOR}.${MINOR}.pc"]) 4005AC_SUBST(ruby_pc) 4006AC_SUBST(exec, [exec]) 4007 4008AC_ARG_WITH(destdir, 4009 AS_HELP_STRING([--with-destdir=DESTDIR], [specify default directory to install]), 4010 [DESTDIR="$withval"]) 4011AC_SUBST(DESTDIR) 4012 4013AC_CONFIG_FILES($ruby_pc:template/ruby.pc.in, 4014 [ 4015 AS_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 && 4016 { 4017 test -z "$PKG_CONFIG" || 4018 PKG_CONFIG_PATH=. $PKG_CONFIG --print-errors ruby.tmp 4019 }], 4020 [ 4021 mv -f ruby.tmp.pc $ruby_pc 4022 ], [ 4023 exit 1 4024 ]) 4025 ], 4026 [ruby_pc='$ruby_pc' PKG_CONFIG='$PKG_CONFIG']) 4027 4028AC_OUTPUT 4029} 4030} 4031 4032AS_IF([test "$silent" = yes], [], [ 4033AS_IF([${FOLD+:} false], [], [ 4034AS_IF([test "`echo abcdefg hijklmno | fold -s -w10 | sed 1d`" = hijklmno], [FOLD="fold"], [FOLD=]) 4035]) 4036AS_REQUIRE_SHELL_FN([config_summary], 4037 [AS_FUNCTION_DESCRIBE([config_summary], [NAME, VAL], [configuration summary])], 4038 [AS_IF([test -z "$2"], [], [ 4039 AS_ECHO_N([" * $1: "]) | dd bs=1 count=26 2>/dev/null 4040 AS_IF([test "$FOLD"], [ 4041 echo "$2" | fold -s -w50 | 4042 sed '1!s/^/ /;$!s/$/\\/' 4043 ], [echo "$2"]) 4044 ])] 4045) 4046 4047echo "---" 4048echo "Configuration summary for $RUBY_BASE_NAME version $RUBY_PROGRAM_VERSION" 4049echo "" 4050config_summary "Installation prefix" "$prefix" 4051config_summary "exec prefix" "$exec_prefix" 4052config_summary "arch" "$arch" 4053config_summary "site arch" "$sitearch" 4054config_summary "RUBY_BASE_NAME" "$RUBY_BASE_NAME" 4055config_summary "enable shared" "$enable_shared" 4056config_summary "ruby lib prefix" "$rubylibprefix" 4057config_summary "site libraries path" "$rubysitearchprefix" 4058config_summary "vendor path" "$vendordir" 4059config_summary "target OS" "$target_os" 4060config_summary "compiler" "$CC" 4061config_summary "with pthread" "$enable_pthread" 4062config_summary "enable shared libs" "$ENABLE_SHARED" 4063config_summary "dynamic library ext" "$DLEXT" 4064config_summary "CFLAGS" "$cflags" 4065config_summary "CPPFLAGS" "$cppflags" 4066config_summary "LDFLAGS" "$LDFLAGS" 4067config_summary "DLDFLAGS" "$DLDFLAGS" 4068config_summary "optflags" "$optflags" 4069config_summary "debugflags" "$debugflags" 4070config_summary "warnflags" "$warnflags" 4071config_summary "strip command" "$STRIP" 4072config_summary "install doc" "$install_doc" 4073config_summary "JIT support" "$MJIT_SUPPORT" 4074config_summary "man page type" "$MANTYPE" 4075config_summary "search path" "$search_path" 4076config_summary "static-linked-ext" ${EXTSTATIC:+"yes"} 4077echo "" 4078echo "---" 4079]) 4080