summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard W.M. Jones <rjones@redhat.com>2012-06-22 09:46:39 +0100
committerRichard W.M. Jones <rjones@redhat.com>2012-06-28 09:09:17 +0100
commitb37629fc93fb1e306d2311dd841ed1b0cdd6bba2 (patch)
treedd23d6a98ed574fa0509693e796e47fda828160e
parenta5762d31398650fb8f914a19d94553d1139c9672 (diff)
downloadlibguestfs-b37629fc93fb1e306d2311dd841ed1b0cdd6bba2.tar.gz
libguestfs-b37629fc93fb1e306d2311dd841ed1b0cdd6bba2.tar.xz
libguestfs-b37629fc93fb1e306d2311dd841ed1b0cdd6bba2.zip
ruby: Add a replacement rb_hash_lookup function for Ruby 1.8.5.
This function was first added to Ruby in 1.8.7. (cherry picked from commit 8098d062b4cb70defd4aecba0ba8cd75cf893751)
-rw-r--r--configure.ac6
-rw-r--r--generator/generator_ruby.ml16
-rw-r--r--ruby/Rakefile.in2
3 files changed, 23 insertions, 1 deletions
diff --git a/configure.ac b/configure.ac
index 8ad5374c..e7310f75 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1022,7 +1022,13 @@ AS_IF([test "x$enable_ruby" != "xno"],[
AC_CHECK_PROG([RAKE],[rake],[rake],[no])
AC_CHECK_LIB([ruby],[ruby_init],[HAVE_LIBRUBY=1],[HAVE_LIBRUBY=])
AC_SUBST([RAKE])
+ AS_IF([test -n "$HAVE_LIBRUBY"],[
+ old_LIBS="$LIBS"
+ LIBS="$LIBS -lruby"
+ AC_CHECK_FUNCS([rb_hash_lookup])
+ LIBS="$old_LIBS"
])
+])
AM_CONDITIONAL([HAVE_RUBY],
[test "x$RAKE" != "xno" && test -n "$HAVE_LIBRUBY"])
diff --git a/generator/generator_ruby.ml b/generator/generator_ruby.ml
index d438a892..742a0cc4 100644
--- a/generator/generator_ruby.ml
+++ b/generator/generator_ruby.ml
@@ -35,6 +35,8 @@ let rec generate_ruby_c () =
generate_header CStyle LGPLv2plus;
pr "\
+#include <config.h>
+
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
@@ -59,6 +61,20 @@ let rec generate_ruby_c () =
#define RSTRING_PTR(r) (RSTRING((r))->ptr)
#endif
+/* For RHEL 5 (Ruby 1.8.5) */
+#ifndef HAVE_RB_HASH_LOOKUP
+VALUE
+rb_hash_lookup (VALUE hash, VALUE key)
+{
+ VALUE val;
+
+ if (!st_lookup (RHASH(hash)->tbl, key, &val))
+ return Qnil;
+
+ return val;
+}
+#endif /* !HAVE_RB_HASH_LOOKUP */
+
static VALUE m_guestfs; /* guestfs module */
static VALUE c_guestfs; /* guestfs_h handle */
static VALUE e_Error; /* used for all errors */
diff --git a/ruby/Rakefile.in b/ruby/Rakefile.in
index 9ae993bc..84a22034 100644
--- a/ruby/Rakefile.in
+++ b/ruby/Rakefile.in
@@ -38,7 +38,7 @@ CLOBBER.include [ "@builddir@/config.save", "@builddir@/ext/**/mkmf.log",
# Build locally
file MAKEFILE => EXT_CONF do |t|
- unless sh "top_srcdir=$(pwd)/@top_srcdir@; top_builddir=$(pwd)/@top_builddir@; export ARCHFLAGS=\"-arch $(uname -m)\"; mkdir -p @builddir@/ext/guestfs; cd @builddir@/ext/guestfs; @RUBY@ #{EXT_CONF} --with-_guestfs-include=$top_srcdir/src --with-_guestfs-lib=$top_builddir/src/.libs"
+ unless sh "top_srcdir=$(pwd)/@top_srcdir@; top_builddir=$(pwd)/@top_builddir@; export ARCHFLAGS=\"-arch $(uname -m)\"; mkdir -p @builddir@/ext/guestfs; cd @builddir@/ext/guestfs; @RUBY@ #{EXT_CONF} --with-_guestfs-include=$top_srcdir/src:$top_builddir --with-_guestfs-lib=$top_builddir/src/.libs"
$stderr.puts "Failed to run extconf"
break
end