diff -aur ruby-1.8.5.orig/Makefile.in ruby-1.8.5/Makefile.in --- ruby-1.8.5.orig/Makefile.in 2006-08-08 04:37:43.000000000 +0200 +++ ruby-1.8.5/Makefile.in 2006-08-25 16:44:19.273278750 +0200 @@ -33,7 +33,7 @@ empty = OUTFLAG = @OUTFLAG@$(empty) -CFLAGS = @CFLAGS@ @XCFLAGS@ @ARCH_FLAG@ +CFLAGS = @CFLAGS@ @XCFLAGS@ @ARCH_FLAG@ @VALGRIND_CFLAGS@ CPPFLAGS = -I. -I$(srcdir) @CPPFLAGS@ LDFLAGS = @STATIC@ $(CFLAGS) @LDFLAGS@ EXTLDFLAGS = diff -aur ruby-1.8.5.orig/configure ruby-1.8.5/configure --- ruby-1.8.5.orig/configure 2006-08-25 10:34:16.000000000 +0200 +++ ruby-1.8.5/configure 2006-08-25 16:44:19.281279250 +0200 @@ -682,6 +682,9 @@ MAKEDIRS LIBOBJS ALLOCA +PKG_CONFIG +VALGRIND_CFLAGS +VALGRIND_LIBS DLDFLAGS ARCH_FLAG STATIC @@ -747,7 +750,10 @@ CPPFLAGS CPP YACC -YFLAGS' +YFLAGS +PKG_CONFIG +VALGRIND_CFLAGS +VALGRIND_LIBS' # Initialize some variables set by options. @@ -794,7 +800,7 @@ psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' +mandir='${prefix}/man' ac_prev= ac_dashdash= @@ -1297,7 +1303,7 @@ --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] + --mandir=DIR man documentation [PREFIX/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] @@ -1340,6 +1346,7 @@ --disable-largefile omit support for large files --enable-pthread use pthread library. --enable-setreuid use setreuid()/setregid() according to need even if obsolete. + --enable-valgrind use valgrind support. --disable-rpath embed run path into extension libraries. --enable-shared build a shared library for Ruby. --enable-install-doc build and install rdoc indexes during install @@ -1370,6 +1377,11 @@ YFLAGS The list of arguments that will be passed by default to $YACC. This script will default YFLAGS to the empty string to avoid a default value of `-d' given by some make applications. + PKG_CONFIG path to pkg-config utility + VALGRIND_CFLAGS + C compiler flags for VALGRIND, overriding pkg-config + VALGRIND_LIBS + linker flags for VALGRIND, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. @@ -17964,6 +17976,217 @@ fi fi +# Check whether --enable-valgrind was given. +if test "${enable_valgrind+set}" = set; then + enableval=$enable_valgrind; want_valgrind=$enableval +else + want_valgrind=auto +fi + + +if test x"$want_valgrind" != xno; then + + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_path_PKG_CONFIG+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 +echo "${ECHO_T}$PKG_CONFIG" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +if test -n "$ac_pt_PKG_CONFIG"; then + { echo "$as_me:$LINENO: result: $ac_pt_PKG_CONFIG" >&5 +echo "${ECHO_T}$ac_pt_PKG_CONFIG" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + if test "x$ac_pt_PKG_CONFIG" = x; then + PKG_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + PKG_CONFIG=$ac_pt_PKG_CONFIG + fi +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi + +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=0.9.0 + { echo "$as_me:$LINENO: checking pkg-config is at least version $_pkg_min_version" >&5 +echo $ECHO_N "checking pkg-config is at least version $_pkg_min_version... $ECHO_C" >&6; } + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + PKG_CONFIG="" + fi + +fi + +pkg_failed=no +{ echo "$as_me:$LINENO: checking for VALGRIND" >&5 +echo $ECHO_N "checking for VALGRIND... $ECHO_C" >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$VALGRIND_CFLAGS"; then + pkg_cv_VALGRIND_CFLAGS="$VALGRIND_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"valgrind\"") >&5 + ($PKG_CONFIG --exists --print-errors "valgrind") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_VALGRIND_CFLAGS=`$PKG_CONFIG --cflags "valgrind" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$VALGRIND_LIBS"; then + pkg_cv_VALGRIND_LIBS="$VALGRIND_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"valgrind\"") >&5 + ($PKG_CONFIG --exists --print-errors "valgrind") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_VALGRIND_LIBS=`$PKG_CONFIG --libs "valgrind" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + VALGRIND_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "valgrind"` + else + VALGRIND_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "valgrind"` + fi + # Put the nasty error message in config.log where it belongs + echo "$VALGRIND_PKG_ERRORS" >&5 + + have_valgrind=no +elif test $pkg_failed = untried; then + have_valgrind=no +else + VALGRIND_CFLAGS=$pkg_cv_VALGRIND_CFLAGS + VALGRIND_LIBS=$pkg_cv_VALGRIND_LIBS + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + have_valgrind=yes +fi + + if test x"$have_valgrind" = xyes; then + cat >>confdefs.h <<\_ACEOF +#define HAVE_VALGRIND 1 +_ACEOF + + elif test x"$want_valgrind" = xyes -a x"$have_valgrind" = xno; then + { { echo "$as_me:$LINENO: error: valgrind support requested but valgrind not found" >&5 +echo "$as_me: error: valgrind support requested but valgrind not found" >&2;} + { (exit 1); exit 1; }; } + fi +fi + DEFAULT_KCODE="KCODE_NONE" @@ -20080,6 +20303,9 @@ MAKEDIRS!$MAKEDIRS$ac_delim LIBOBJS!$LIBOBJS$ac_delim ALLOCA!$ALLOCA$ac_delim +PKG_CONFIG!$PKG_CONFIG$ac_delim +VALGRIND_CFLAGS!$VALGRIND_CFLAGS$ac_delim +VALGRIND_LIBS!$VALGRIND_LIBS$ac_delim DLDFLAGS!$DLDFLAGS$ac_delim ARCH_FLAG!$ARCH_FLAG$ac_delim STATIC!$STATIC$ac_delim @@ -20089,9 +20315,6 @@ DLEXT2!$DLEXT2$ac_delim LIBEXT!$LIBEXT$ac_delim LINK_SO!$LINK_SO$ac_delim -LIBPATHFLAG!$LIBPATHFLAG$ac_delim -RPATHFLAG!$RPATHFLAG$ac_delim -LIBPATHENV!$LIBPATHENV$ac_delim _ACEOF if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then @@ -20133,6 +20356,9 @@ ac_delim='%!_!# ' for ac_last_try in false false false false false :; do cat >conf$$subs.sed <<_ACEOF +LIBPATHFLAG!$LIBPATHFLAG$ac_delim +RPATHFLAG!$RPATHFLAG$ac_delim +LIBPATHENV!$LIBPATHENV$ac_delim TRY_LINK!$TRY_LINK$ac_delim STRIP!$STRIP$ac_delim EXTSTATIC!$EXTSTATIC$ac_delim @@ -20178,7 +20404,7 @@ LTLIBOBJS!$LTLIBOBJS$ac_delim _ACEOF - if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 43; then + if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 46; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 diff -aur ruby-1.8.5.orig/configure.in ruby-1.8.5/configure.in --- ruby-1.8.5.orig/configure.in 2006-08-08 04:37:43.000000000 +0200 +++ ruby-1.8.5/configure.in 2006-08-25 16:44:19.281279250 +0200 @@ -832,6 +832,20 @@ fi fi +AC_ARG_ENABLE(valgrind, + [ --enable-valgrind use valgrind support.], + [want_valgrind=$enableval], [want_valgrind=auto]) + +if test x"$want_valgrind" != xno; then + PKG_CHECK_MODULES(VALGRIND, valgrind, have_valgrind=yes, have_valgrind=no) + + if test x"$have_valgrind" = xyes; then + AC_DEFINE(HAVE_VALGRIND) + elif test x"$want_valgrind" = xyes -a x"$have_valgrind" = xno; then + AC_MSG_ERROR(valgrind support requested but valgrind not found) + fi +fi + dnl default value for $KANJI DEFAULT_KCODE="KCODE_NONE" diff -aur ruby-1.8.5.orig/gc.c ruby-1.8.5/gc.c --- ruby-1.8.5.orig/gc.c 2006-08-25 10:12:46.000000000 +0200 +++ ruby-1.8.5/gc.c 2006-08-25 16:44:19.285279500 +0200 @@ -30,6 +30,12 @@ #include #endif +#ifdef HAVE_VALGRIND +#include +#else +#define VALGRIND_MAKE_MEM_DEFINED(p, n) /* empty */ +#endif + #ifdef __ia64__ #include #if defined(__FreeBSD__) @@ -634,6 +640,9 @@ register long n; { VALUE v; + + VALGRIND_MAKE_MEM_DEFINED(x, sizeof(*x) * n); + while (n--) { v = *x; if (is_pointer_to_heap((void *)v)) { @@ -724,7 +733,10 @@ { register RVALUE *obj; + VALGRIND_MAKE_MEM_DEFINED(&ptr, sizeof(ptr)); obj = RANY(ptr); + VALGRIND_MAKE_MEM_DEFINED(obj, sizeof(*obj)); + if (rb_special_const_p(ptr)) return; /* special const not marked */ if (obj->as.basic.flags == 0) return; /* free cell */ if (obj->as.basic.flags & FL_MARK) return; /* already marked */