diff -urp a/config/m4/ruby.m4 b/config/m4/ruby.m4 --- a/config/m4/ruby.m4 2009-07-07 13:23:17.000000000 +0100 +++ b/config/m4/ruby.m4 2012-09-10 18:23:09.000000000 +0100 @@ -32,36 +32,40 @@ if test "$CONFIG_SCRIPTING_RUBY" = "yes" if test "$CONFIG_SCRIPTING_RUBY" != "no"; then AC_MSG_CHECKING(Ruby version) - if $CONFIG_SCRIPTING_RUBY -e 'exit((VERSION or RUBY_VERSION) >= "1.6.0")' >/dev/null 2>/dev/null; then + if $CONFIG_SCRIPTING_RUBY -e 'exit((VERSION rescue RUBY_VERSION) >= "1.6.0")' >/dev/null 2>/dev/null; then ruby_version=`$CONFIG_SCRIPTING_RUBY -e 'puts "#{VERSION rescue RUBY_VERSION}"'` AC_MSG_RESULT($ruby_version) AC_MSG_CHECKING(for Ruby header files) - rubyhdrdir=`$CONFIG_SCRIPTING_RUBY -r mkmf -e 'print Config::CONFIG[["archdir"]] || $hdrdir' 2>/dev/null` + rubyhdrdir=`$CONFIG_SCRIPTING_RUBY -r mkmf -e 'print RbConfig::CONFIG[["rubyhdrdir"]] || RbConfig::CONFIG[["archdir"]] || $hdrdir' 2>/dev/null` if test "X$rubyhdrdir" != "X"; then AC_MSG_RESULT($rubyhdrdir) RUBY_CFLAGS="-I$rubyhdrdir" - rubylibs=`$CONFIG_SCRIPTING_RUBY -r rbconfig -e 'print Config::CONFIG[["LIBS"]]'` + rubyarch=`$CONFIG_SCRIPTING_RUBY -r rbconfig -e 'print RbConfig::CONFIG[["arch"]]'` + if test -d "$rubyhdrdir/$rubyarch"; then + RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyhdrdir/$rubyarch" + fi + rubylibs=`$CONFIG_SCRIPTING_RUBY -r rbconfig -e 'print RbConfig::CONFIG[["LIBS"]]'` if test "X$rubylibs" != "X"; then RUBY_LIBS="$rubylibs" fi - librubyarg=`$CONFIG_SCRIPTING_RUBY -r rbconfig -e 'print Config.expand(Config::CONFIG[["LIBRUBYARG"]])'` + librubyarg=`$CONFIG_SCRIPTING_RUBY -r rbconfig -e 'print RbConfig.expand(RbConfig::CONFIG[["LIBRUBYARG"]])'` if test -f "$rubyhdrdir/$librubyarg"; then librubyarg="$rubyhdrdir/$librubyarg" else - rubylibdir=`$CONFIG_SCRIPTING_RUBY -r rbconfig -e 'print Config.expand(Config::CONFIG[["libdir"]])'` + rubylibdir=`$CONFIG_SCRIPTING_RUBY -r rbconfig -e 'print RbConfig.expand(RbConfig::CONFIG[["libdir"]])'` if test -f "$rubylibdir/$librubyarg"; then librubyarg="$rubylibdir/$librubyarg" elif test "$librubyarg" = "libruby.a"; then dnl required on Mac OS 10.3 where libruby.a doesn't exist librubyarg="-lruby" else - librubyarg=`$CONFIG_SCRIPTING_RUBY -r rbconfig -e "print '$librubyarg'.gsub(/-L\./, %'-L#{Config.expand(Config::CONFIG[\"libdir\"])}')"` + librubyarg=`$CONFIG_SCRIPTING_RUBY -r rbconfig -e "print '$librubyarg'.gsub(/-L\./, %'-L#{RbConfig.expand(RbConfig::CONFIG[\"libdir\"])}')"` fi fi @@ -69,7 +73,7 @@ if test "$CONFIG_SCRIPTING_RUBY" = "yes" RUBY_LIBS="$librubyarg $RUBY_LIBS" fi - rubyldflags=`$CONFIG_SCRIPTING_RUBY -r rbconfig -e 'print Config::CONFIG[["LDFLAGS"]]'` + rubyldflags=`$CONFIG_SCRIPTING_RUBY -r rbconfig -e 'print RbConfig::CONFIG[["LDFLAGS"]]'` if test "X$rubyldflags" != "X"; then LDFLAGS="$rubyldflags $LDFLAGS" fi @@ -86,6 +90,15 @@ if test "$CONFIG_SCRIPTING_RUBY" = "yes" AC_MSG_RESULT(too old; need Ruby version 1.6.0 or later) fi fi + if test "$CONFIG_SCRIPTING_RUBY" = "yes"; then + AC_MSG_CHECKING([for rb_errinfo]) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], [[rb_errinfo();]])],have_rb_errinfo="yes",have_rb_errinfo="no") + AC_MSG_RESULT($have_rb_errinfo) + if test "$have_rb_errinfo" = "yes"; then + AC_DEFINE([HAVE_RB_ERRINFO], [1], + [Define to 1 if you have the `rb_errinfo' function.]) + fi + fi fi EL_RESTORE_FLAGS diff -urp a/src/scripting/ruby/core.c b/src/scripting/ruby/core.c --- a/src/scripting/ruby/core.c 2009-07-07 13:23:17.000000000 +0100 +++ b/src/scripting/ruby/core.c 2012-09-10 18:27:05.000000000 +0100 @@ -76,10 +76,10 @@ erb_report_error(struct session *ses, in break; case TAG_RAISE: case TAG_FATAL: - eclass = CLASS_OF(ruby_errinfo); - einfo = rb_obj_as_string(ruby_errinfo); + eclass = CLASS_OF(RB_ERRINFO); + einfo = rb_obj_as_string(RB_ERRINFO); - if (eclass == rb_eRuntimeError && RSTRING(einfo)->len == 0) { + if (eclass == rb_eRuntimeError && RSTRING_LEN(einfo) == 0) { msg = "unhandled exception"; } else { @@ -88,7 +88,7 @@ erb_report_error(struct session *ses, in epath = rb_class_path(eclass); snprintf(buff, MAX_STR_LEN, "%s: %s", - RSTRING(epath)->ptr, RSTRING(einfo)->ptr); + RSTRING_PTR(epath), RSTRING_PTR(einfo)); p = strchr(buff, '\n'); if (p) *p = '\0'; @@ -115,7 +115,7 @@ erb_module_message(VALUE self, VALUE str unsigned char *message, *line_end; str = rb_obj_as_string(str); - message = memacpy(RSTRING(str)->ptr, RSTRING(str)->len); + message = memacpy(RSTRING_PTR(str), RSTRING_LEN(str)); if (!message) return Qnil; line_end = strchr(message, '\n'); @@ -162,8 +162,8 @@ erb_stdout_p(int argc, VALUE *argv, VALU * the inspect() method, which adds quotes to the strings, so * gently ignore them. */ - ptr = RSTRING(substr)->ptr; - len = RSTRING(substr)->len; + ptr = RSTRING_PTR(substr); + len = RSTRING_LEN(substr); if (*ptr == '"') ptr++, len--; diff -urp a/src/scripting/ruby/core.h b/src/scripting/ruby/core.h --- a/src/scripting/ruby/core.h 2009-07-07 13:23:17.000000000 +0100 +++ b/src/scripting/ruby/core.h 2012-09-10 18:26:25.000000000 +0100 @@ -7,6 +7,20 @@ struct session; #include /* for VALUE */ +#ifndef RSTRING_LEN +#define RSTRING_LEN(string) (RSTRING(string)->len) +#endif + +#ifndef RSTRING_PTR +#define RSTRING_PTR(string) (RSTRING(string)->ptr) +#endif + +#ifdef HAVE_RB_ERRINFO +#define RB_ERRINFO (rb_errinfo()) +#else +#define RB_ERRINFO (ruby_errinfo) +#endif + VALUE erb_module; void alert_ruby_error(struct session *ses, unsigned char *msg); diff -urp a/src/scripting/ruby/hooks.c b/src/scripting/ruby/hooks.c --- a/src/scripting/ruby/hooks.c 2009-07-07 13:23:17.000000000 +0100 +++ b/src/scripting/ruby/hooks.c 2012-09-10 17:53:48.000000000 +0100 @@ -83,7 +83,7 @@ script_hook_goto_url(va_list ap, void *d { unsigned char *new_url; - new_url = memacpy(RSTRING(result)->ptr, RSTRING(result)->len); + new_url = memacpy(RSTRING_PTR(result), RSTRING_LEN(result)); if (new_url) { mem_free_set(url, new_url); } @@ -126,7 +126,7 @@ script_hook_follow_url(va_list ap, void { unsigned char *new_url; - new_url = memacpy(RSTRING(result)->ptr, RSTRING(result)->len); + new_url = memacpy(RSTRING_PTR(result), RSTRING_LEN(result)); if (new_url) { mem_free_set(url, new_url); } @@ -170,9 +170,9 @@ script_hook_pre_format_html(va_list ap, switch (rb_type(result)) { case T_STRING: { - int len = RSTRING(result)->len; + int len = RSTRING_LEN(result); - add_fragment(cached, 0, RSTRING(result)->ptr, len); + add_fragment(cached, 0, RSTRING_PTR(result), len); normalize_cache_entry(cached, len); break; @@ -216,7 +216,7 @@ script_hook_get_proxy(va_list ap, void * { unsigned char *proxy; - proxy = memacpy(RSTRING(result)->ptr, RSTRING(result)->len); + proxy = memacpy(RSTRING_PTR(result), RSTRING_LEN(result)); if (proxy) { mem_free_set(new_proxy_url, proxy); }