diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-03-31 17:58:41 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-03-31 17:58:41 +0000 |
commit | b39676f6a9b699f204d4313ae5589b71d436d4e5 (patch) | |
tree | c4ae86bd8774ee11d9b4104ad35d39da92a4d442 /configure.in | |
parent | 29b538fa7146f899775b001a55bf1716c486b293 (diff) | |
download | ruby-b39676f6a9b699f204d4313ae5589b71d436d4e5.tar.gz |
* configure.in (RUBY_SETJMP, RUBY_LONGJMP, RUBY_JMP_BUF): prefers
__builtin_setjmp, _setjmp over setjmp and sigsetjmp.
[ruby-core:16023], [ruby-core:16086]
* configure.in (--with-setjmp-type): new option to override the
default rule in the above.
* eval_intern.h (ruby_setjmp, ruby_longjmp), gc.c (rb_setjmp),
vm_core.h (rb_jmpbuf_t): use RUBY_SETJMP, RUBY_LONGJMP and
RUBY_JMP_BUF.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15871 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'configure.in')
-rw-r--r-- | configure.in | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/configure.in b/configure.in index f2884a0b33..8d10a7b3b8 100644 --- a/configure.in +++ b/configure.in @@ -709,6 +709,54 @@ AC_CHECK_FUNCS(fmod killpg wait4 waitpid fork spawnv syscall chroot fsync getcwd setuid setgid daemon select_large_fdset setenv unsetenv\ mktime timegm clock_gettime gettimeofday\ pread sendfile) + +AC_CACHE_CHECK(for __builtin_setjmp, ac_cv_func___builtin_setjmp, +[AC_TRY_LINK([@%:@include <setjmp.h> + jmp_buf jb; void t() {__builtin_longjmp(jb, 1);}], + [__builtin_setjmp(jb);], + [ac_cv_func___builtin_setjmp=yes], + [ac_cv_func___builtin_setjmp=no]) +]) + +AC_MSG_CHECKING(for setjmp type) +AC_ARG_WITH(setjmp-type, + [ --with-setjmp-type select setjmp type], [ + case $withval in + __builtin_setjmp) setjmp_prefix=__builtin_;; + _setjmp) setjmp_prefix=_;; + sigsetjmp) setjmp_prefix=sig;; + setjmp) setjmp_prefix=;; + '') unset setjmp_prefix;; + *) AC_MSG_ERROR(invalid setjmp type: $withval);; + esac], [unset setjmp_prefix]) +if test ${setjmp_prefix+set}; then + if test "${setjmp_prefix}" && eval test '$ac_cv_'${setjmp_prefix}setjmp = no; then + AC_MSG_ERROR(${setjmp_prefix}setjmp is not available) + fi +elif test "$ac_cv_func___builtin_setjmp" = yes; then + setjmp_prefix=__builtin_ +elif test "$ac_cv_func__setjmp" = yes; then + setjmp_prefix=_ +elif test "$ac_cv_func_sigsetjmp" = yes; then + case $target_os in + solaris*|cygwin*) + setjmp_prefix=;; + *) + setjmp_prefix=sig;; + esac +else + setjmp_prefix= +fi +if test $setjmp_prefix = sig; then + setjmp_sigmask=yes +else + unset setjmp_sigmask +fi +AC_MSG_RESULT(${setjmp_prefix}setjmp) +AC_DEFINE_UNQUOTED([RUBY_SETJMP(env)], [${setjmp_prefix}setjmp(env${setjmp_sigmask+,0})]) +AC_DEFINE_UNQUOTED([RUBY_LONGJMP(env,val)], [${setjmp_prefix}longjmp(env,val)]) +AC_DEFINE_UNQUOTED(RUBY_JMP_BUF, ${setjmp_sigmask+${setjmp_prefix}}jmp_buf) + AC_ARG_ENABLE(setreuid, [ --enable-setreuid use setreuid()/setregid() according to need even if obsolete.], [use_setreuid=$enableval]) |