From 5f29ae16a595decee3fb137215746d4bdfae3c90 Mon Sep 17 00:00:00 2001
From: "Jay Freeman (saurik)" <saurik@saurik.com>
Date: Wed, 30 Dec 2015 10:19:26 -0800
Subject: [PATCH] Detect Ruby library installation during configure.

---
 Makefile.am      |   6 ++
 Makefile.in      |  65 ++++++++++++------
 Ruby/Execute.cpp |  26 ++++++++
 config.h.in      |   3 +
 configure        | 168 +++++++++++++++++++++++++++++++++++++++++++++++
 configure.ac     |  13 ++++
 6 files changed, 260 insertions(+), 21 deletions(-)
 create mode 100644 Ruby/Execute.cpp

diff --git a/Makefile.am b/Makefile.am
index 278e27b..162175e 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -99,6 +99,12 @@ libcycript_la_SOURCES += Java/Execute.cpp
 libcycript_la_LIBADD += $(LTJAVA)
 endif
 
+if CY_RUBY
+filters += Ruby
+libcycript_la_SOURCES += Ruby/Execute.cpp
+libcycript_la_LIBADD += $(LTRUBY)
+endif
+
 if CY_OBJECTIVEC
 filters += ObjectiveC
 libcycript_la_SOURCES += ObjectiveC/Output.cpp ObjectiveC/Replace.cpp ObjectiveC/Library.mm
diff --git a/Makefile.in b/Makefile.in
index 4e9877b..cd8482e 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -123,12 +123,15 @@ host_triplet = @host@
 @CY_JAVA_TRUE@am__append_10 = Java
 @CY_JAVA_TRUE@am__append_11 = Java/Execute.cpp
 @CY_JAVA_TRUE@am__append_12 = $(LTJAVA)
-@CY_OBJECTIVEC_TRUE@am__append_13 = ObjectiveC
-@CY_OBJECTIVEC_TRUE@am__append_14 = ObjectiveC/Output.cpp ObjectiveC/Replace.cpp ObjectiveC/Library.mm
-@CY_OBJECTIVEC_TRUE@am__append_15 = $(LTOBJECTIVEC)
-@CY_ATTACH_TRUE@am__append_16 = Handler.cpp
-@CY_ATTACH_TRUE@@CY_CONSOLE_TRUE@am__append_17 = Inject.cpp
-@CY_ATTACH_TRUE@@CY_CONSOLE_TRUE@am__append_18 = -DCY_ATTACH
+@CY_RUBY_TRUE@am__append_13 = Ruby
+@CY_RUBY_TRUE@am__append_14 = Ruby/Execute.cpp
+@CY_RUBY_TRUE@am__append_15 = $(LTRUBY)
+@CY_OBJECTIVEC_TRUE@am__append_16 = ObjectiveC
+@CY_OBJECTIVEC_TRUE@am__append_17 = ObjectiveC/Output.cpp ObjectiveC/Replace.cpp ObjectiveC/Library.mm
+@CY_OBJECTIVEC_TRUE@am__append_18 = $(LTOBJECTIVEC)
+@CY_ATTACH_TRUE@am__append_19 = Handler.cpp
+@CY_ATTACH_TRUE@@CY_CONSOLE_TRUE@am__append_20 = Inject.cpp
+@CY_ATTACH_TRUE@@CY_CONSOLE_TRUE@am__append_21 = -DCY_ATTACH
 subdir = .
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \
@@ -180,31 +183,35 @@ LTLIBRARIES = $(lib_LTLIBRARIES)
 am__DEPENDENCIES_1 =
 @CY_EXECUTE_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1)
 @CY_JAVA_TRUE@am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1)
-@CY_OBJECTIVEC_TRUE@am__DEPENDENCIES_4 = $(am__DEPENDENCIES_1)
+@CY_RUBY_TRUE@am__DEPENDENCIES_4 = $(am__DEPENDENCIES_1)
+@CY_OBJECTIVEC_TRUE@am__DEPENDENCIES_5 = $(am__DEPENDENCIES_1)
 libcycript_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \
-	$(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4)
+	$(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) \
+	$(am__DEPENDENCIES_5)
 am__libcycript_la_SOURCES_DIST = ConvertUTF.c Decode.cpp Driver.cpp \
 	Error.cpp Highlight.cpp Library.cpp Network.cpp Output.cpp \
 	Replace.cpp Syntax.cpp Parser.cpp Scanner.cpp Complete.cpp \
 	sig/ffi_type.cpp sig/parse.cpp sig/copy.cpp Execute.cpp \
-	JavaScriptCore.cpp Java/Execute.cpp ObjectiveC/Output.cpp \
-	ObjectiveC/Replace.cpp ObjectiveC/Library.mm Handler.cpp
+	JavaScriptCore.cpp Java/Execute.cpp Ruby/Execute.cpp \
+	ObjectiveC/Output.cpp ObjectiveC/Replace.cpp \
+	ObjectiveC/Library.mm Handler.cpp
 @CY_CONSOLE_TRUE@am__objects_1 = Complete.lo
 am__dirstamp = $(am__leading_dot)dirstamp
 @CY_EXECUTE_TRUE@am__objects_2 = sig/ffi_type.lo sig/parse.lo \
 @CY_EXECUTE_TRUE@	sig/copy.lo Execute.lo JavaScriptCore.lo
 @CY_JAVA_TRUE@am__objects_3 = Java/Execute.lo
-@CY_OBJECTIVEC_TRUE@am__objects_4 = ObjectiveC/Output.lo \
+@CY_RUBY_TRUE@am__objects_4 = Ruby/Execute.lo
+@CY_OBJECTIVEC_TRUE@am__objects_5 = ObjectiveC/Output.lo \
 @CY_OBJECTIVEC_TRUE@	ObjectiveC/Replace.lo \
 @CY_OBJECTIVEC_TRUE@	ObjectiveC/Library.lo
-@CY_ATTACH_TRUE@am__objects_5 = Handler.lo
+@CY_ATTACH_TRUE@am__objects_6 = Handler.lo
 am_libcycript_la_OBJECTS = ConvertUTF.lo Decode.lo Driver.lo Error.lo \
 	Highlight.lo Library.lo Network.lo Output.lo Replace.lo \
 	Syntax.lo Parser.lo Scanner.lo $(am__objects_1) \
 	$(am__objects_2) $(am__objects_3) $(am__objects_4) \
-	$(am__objects_5)
+	$(am__objects_5) $(am__objects_6)
 libcycript_la_OBJECTS = $(am_libcycript_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -215,9 +222,9 @@ libcycript_la_LINK = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \
 	$(OBJCXXFLAGS) $(libcycript_la_LDFLAGS) $(LDFLAGS) -o $@
 PROGRAMS = $(bin_PROGRAMS)
 am__cycript_SOURCES_DIST = Console.cpp Inject.cpp
-@CY_ATTACH_TRUE@@CY_CONSOLE_TRUE@am__objects_6 = Inject.$(OBJEXT)
+@CY_ATTACH_TRUE@@CY_CONSOLE_TRUE@am__objects_7 = Inject.$(OBJEXT)
 @CY_CONSOLE_TRUE@am_cycript_OBJECTS = Console.$(OBJEXT) \
-@CY_CONSOLE_TRUE@	$(am__objects_6)
+@CY_CONSOLE_TRUE@	$(am__objects_7)
 cycript_OBJECTS = $(am_cycript_OBJECTS)
 @CY_CONSOLE_TRUE@cycript_DEPENDENCIES = libcycript.la \
 @CY_CONSOLE_TRUE@	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
@@ -417,6 +424,7 @@ CY_EXECUTE = @CY_EXECUTE@
 CY_JAVA = @CY_JAVA@
 CY_LIBCLANG = @CY_LIBCLANG@
 CY_OBJECTIVEC = @CY_OBJECTIVEC@
+CY_RUBY = @CY_RUBY@
 CY_SYSTEM = @CY_SYSTEM@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -463,6 +471,7 @@ LTLIBSQLITE3 = @LTLIBSQLITE3@
 LTLIBTERMCAP = @LTLIBTERMCAP@
 LTLIBUV = @LTLIBUV@
 LTOBJECTIVEC = @LTOBJECTIVEC@
+LTRUBY = @LTRUBY@
 LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -567,7 +576,7 @@ SUBDIRS =
 ACLOCAL_AMFLAGS = -I m4
 AM_CPPFLAGS = -DYYDEBUG=1 -DCY_SYSTEM="\"$(CY_SYSTEM)\"" -include \
 	config.h -include $(srcdir)/unconfig.h $(am__append_4) \
-	$(am__append_18)
+	$(am__append_21)
 AM_CFLAGS = -fvisibility=hidden
 AM_CXXFLAGS = -fvisibility=hidden
 AM_OBJCXXFLAGS = -fvisibility=hidden -fobjc-exceptions
@@ -577,14 +586,15 @@ lib_LTLIBRARIES = libcycript.la
 libcycript_la_LDFLAGS = $(CY_LDFLAGS)
 libcycript_la_LIBADD = $(LTLIBUV) $(LTLIBFFI) $(LTLIBSQLITE3) \
 	$(LTLIBGCC) -ldl $(am__append_3) $(am__append_12) \
-	$(am__append_15)
+	$(am__append_15) $(am__append_18)
 libcycript_la_SOURCES = ConvertUTF.c Decode.cpp Driver.cpp Error.cpp \
 	Highlight.cpp Library.cpp Network.cpp Output.cpp Replace.cpp \
 	Syntax.cpp Parser.cpp Scanner.cpp $(am__append_1) \
 	$(am__append_2) $(am__append_11) $(am__append_14) \
+	$(am__append_17) $(am__append_19)
+filters = $(am__append_5) $(am__append_10) $(am__append_13) \
 	$(am__append_16)
-filters = $(am__append_5) $(am__append_10) $(am__append_13)
-@CY_CONSOLE_TRUE@cycript_SOURCES = Console.cpp $(am__append_17)
+@CY_CONSOLE_TRUE@cycript_SOURCES = Console.cpp $(am__append_20)
 @CY_CONSOLE_TRUE@cycript_LDADD = libcycript.la $(LTLIBREADLINE) $(LTLIBTERMCAP) $(LTLIBGCC) $(PTHREAD_CFLAGS) -ldl
 @CY_EXECUTE_TRUE@datdir = $(libdir)
 @CY_EXECUTE_TRUE@dat_DATA = libcycript.db
@@ -692,6 +702,13 @@ Java/$(DEPDIR)/$(am__dirstamp):
 	@$(MKDIR_P) Java/$(DEPDIR)
 	@: > Java/$(DEPDIR)/$(am__dirstamp)
 Java/Execute.lo: Java/$(am__dirstamp) Java/$(DEPDIR)/$(am__dirstamp)
+Ruby/$(am__dirstamp):
+	@$(MKDIR_P) Ruby
+	@: > Ruby/$(am__dirstamp)
+Ruby/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) Ruby/$(DEPDIR)
+	@: > Ruby/$(DEPDIR)/$(am__dirstamp)
+Ruby/Execute.lo: Ruby/$(am__dirstamp) Ruby/$(DEPDIR)/$(am__dirstamp)
 ObjectiveC/$(am__dirstamp):
 	@$(MKDIR_P) ObjectiveC
 	@: > ObjectiveC/$(am__dirstamp)
@@ -767,6 +784,8 @@ mostlyclean-compile:
 	-rm -f Java/*.lo
 	-rm -f ObjectiveC/*.$(OBJEXT)
 	-rm -f ObjectiveC/*.lo
+	-rm -f Ruby/*.$(OBJEXT)
+	-rm -f Ruby/*.lo
 	-rm -f sig/*.$(OBJEXT)
 	-rm -f sig/*.lo
 
@@ -795,6 +814,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@ObjectiveC/$(DEPDIR)/Library.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@ObjectiveC/$(DEPDIR)/Output.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@ObjectiveC/$(DEPDIR)/Replace.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@Ruby/$(DEPDIR)/Execute.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@sig/$(DEPDIR)/copy.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@sig/$(DEPDIR)/ffi_type.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@sig/$(DEPDIR)/parse.Plo@am__quote@
@@ -878,6 +898,7 @@ clean-libtool:
 	-rm -rf .libs _libs
 	-rm -rf Java/.libs Java/_libs
 	-rm -rf ObjectiveC/.libs ObjectiveC/_libs
+	-rm -rf Ruby/.libs Ruby/_libs
 	-rm -rf sig/.libs sig/_libs
 
 distclean-libtool:
@@ -1239,6 +1260,8 @@ distclean-generic:
 	-rm -f Java/$(am__dirstamp)
 	-rm -f ObjectiveC/$(DEPDIR)/$(am__dirstamp)
 	-rm -f ObjectiveC/$(am__dirstamp)
+	-rm -f Ruby/$(DEPDIR)/$(am__dirstamp)
+	-rm -f Ruby/$(am__dirstamp)
 	-rm -f sig/$(DEPDIR)/$(am__dirstamp)
 	-rm -f sig/$(am__dirstamp)
 
@@ -1252,7 +1275,7 @@ clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \
 
 distclean: distclean-recursive
 	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-	-rm -rf ./$(DEPDIR) Java/$(DEPDIR) ObjectiveC/$(DEPDIR) sig/$(DEPDIR)
+	-rm -rf ./$(DEPDIR) Java/$(DEPDIR) ObjectiveC/$(DEPDIR) Ruby/$(DEPDIR) sig/$(DEPDIR)
 	-rm -f Makefile
 distclean-am: clean-am distclean-compile distclean-generic \
 	distclean-hdr distclean-libtool distclean-tags
@@ -1300,7 +1323,7 @@ installcheck-am:
 maintainer-clean: maintainer-clean-recursive
 	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
 	-rm -rf $(top_srcdir)/autom4te.cache
-	-rm -rf ./$(DEPDIR) Java/$(DEPDIR) ObjectiveC/$(DEPDIR) sig/$(DEPDIR)
+	-rm -rf ./$(DEPDIR) Java/$(DEPDIR) ObjectiveC/$(DEPDIR) Ruby/$(DEPDIR) sig/$(DEPDIR)
 	-rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
diff --git a/Ruby/Execute.cpp b/Ruby/Execute.cpp
new file mode 100644
index 0000000..0b15965
--- /dev/null
+++ b/Ruby/Execute.cpp
@@ -0,0 +1,26 @@
+/* Cycript - Optimizing JavaScript Compiler/Runtime
+ * Copyright (C) 2009-2015  Jay Freeman (saurik)
+*/
+
+/* GNU Affero General Public License, Version 3 {{{ */
+/*
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+**/
+/* }}} */
+
+#ifdef __APPLE__
+#include <Ruby/ruby.h>
+#else
+#include <ruby.h>
+#endif
diff --git a/config.h.in b/config.h.in
index 2286294..53aef83 100644
--- a/config.h.in
+++ b/config.h.in
@@ -49,6 +49,9 @@
 /* Define to 1 if you have the <readline/readline.h> header file. */
 #undef HAVE_READLINE_READLINE_H
 
+/* Define to 1 if you have the <ruby.h> header file. */
+#undef HAVE_RUBY_H
+
 /* Define to 1 if you have the <sqlite3.h> header file. */
 #undef HAVE_SQLITE3_H
 
diff --git a/configure b/configure
index 3cb5c3c..397f2e5 100755
--- a/configure
+++ b/configure
@@ -648,11 +648,15 @@ CY_PRELINK_TRUE
 CY_LIBCLANG
 CY_OBJECTIVEC_FALSE
 CY_OBJECTIVEC_TRUE
+CY_RUBY_FALSE
+CY_RUBY_TRUE
 CY_JAVA_FALSE
 CY_JAVA_TRUE
 LTOBJECTIVEC
 GNUSTEP_CONFIG
 CY_OBJECTIVEC
+LTRUBY
+CY_RUBY
 LTJAVA
 CY_JAVA
 LTLIBFFI
@@ -23178,6 +23182,158 @@ else
 fi
 
 
+fi
+
+
+			{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for framework Ruby" >&5
+$as_echo_n "checking for framework Ruby... " >&6; }
+if ${ac_cv_framework_Ruby+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+		ac_check_framework_save_LIBS=$LIBS
+		LIBS="-framework Ruby  $LIBS"
+		cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+        #include <Ruby/ruby.h>
+
+int
+main ()
+{
+ruby_init();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+
+			ac_cv_framework_Ruby=yes
+
+else
+  ac_cv_framework_Ruby=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+		LIBS=$ac_check_framework_save_LIBS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_framework_Ruby" >&5
+$as_echo "$ac_cv_framework_Ruby" >&6; }
+	if test $ac_cv_framework_Ruby = yes; then :
+
+
+  for element in "-framework Ruby"; do
+    haveit=
+    for x in $LIBS; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      if test "X$x" = "X$element"; then
+        haveit=yes
+        break
+      fi
+    done
+    if test -z "$haveit"; then
+      LIBS="${LIBS}${LIBS:+ }$element"
+    fi
+  done
+
+
+        CY_RUBY=1
+
+
+
+else
+  for ac_header in ruby.h
+do :
+  ac_fn_cxx_check_header_mongrel "$LINENO" "ruby.h" "ac_cv_header_ruby_h" "$ac_includes_default"
+if test "x$ac_cv_header_ruby_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_RUBY_H 1
+_ACEOF
+
+        CY_RUBY=1
+
+
+    cy_save=$LIBS
+    LIBS=
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing ruby_init" >&5
+$as_echo_n "checking for library containing ruby_init... " >&6; }
+if ${ac_cv_search_ruby_init+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char ruby_init ();
+int
+main ()
+{
+return ruby_init ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' ruby; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_cxx_try_link "$LINENO"; then :
+  ac_cv_search_ruby_init=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_ruby_init+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_ruby_init+:} false; then :
+
+else
+  ac_cv_search_ruby_init=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_ruby_init" >&5
+$as_echo "$ac_cv_search_ruby_init" >&6; }
+ac_res=$ac_cv_search_ruby_init
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+    LTRUBY=$LIBS
+    LIBS=$cy_save
+
+
+
+else
+
+        CY_RUBY=0
+
+
+fi
+
+done
+
 fi
 
     ac_ext=mm
@@ -23472,6 +23628,14 @@ else
   CY_JAVA_FALSE=
 fi
 
+ if test "x$CY_RUBY" = x1; then
+  CY_RUBY_TRUE=
+  CY_RUBY_FALSE='#'
+else
+  CY_RUBY_TRUE='#'
+  CY_RUBY_FALSE=
+fi
+
  if test "x$CY_OBJECTIVEC" = x1; then
   CY_OBJECTIVEC_TRUE=
   CY_OBJECTIVEC_FALSE='#'
@@ -23887,6 +24051,10 @@ if test -z "${CY_JAVA_TRUE}" && test -z "${CY_JAVA_FALSE}"; then
   as_fn_error $? "conditional \"CY_JAVA\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${CY_RUBY_TRUE}" && test -z "${CY_RUBY_FALSE}"; then
+  as_fn_error $? "conditional \"CY_RUBY\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${CY_OBJECTIVEC_TRUE}" && test -z "${CY_OBJECTIVEC_FALSE}"; then
   as_fn_error $? "conditional \"CY_OBJECTIVEC\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
diff --git a/configure.ac b/configure.ac
index aee07a5..f39e089 100644
--- a/configure.ac
+++ b/configure.ac
@@ -231,6 +231,18 @@ AS_CASE([$CY_EXECUTE], [1], [
         AC_SUBST([CY_JAVA], [0])
     ])])
 
+    AC_CHECK_FRAMEWORK([Ruby], [
+        #include <Ruby/ruby.h>
+    ], [ruby_init();], [
+        AC_SUBST([CY_RUBY], [1])
+    ], [AC_CHECK_HEADERS([ruby.h], [
+        AC_SUBST([CY_RUBY], [1])
+        CY_LT_LIB([LTRUBY], [AC_SEARCH_LIBS([ruby_init], [ruby], [
+        ])])
+    ], [
+        AC_SUBST([CY_RUBY], [0])
+    ])])
+
     AC_LANG_PUSH([Objective C++])
 
     AC_MSG_CHECKING([if we really have Objective C++])
@@ -264,6 +276,7 @@ AS_CASE([$CY_EXECUTE], [1], [
 ])
 
 AM_CONDITIONAL([CY_JAVA], [test "x$CY_JAVA" = x1])
+AM_CONDITIONAL([CY_RUBY], [test "x$CY_RUBY" = x1])
 AM_CONDITIONAL([CY_OBJECTIVEC], [test "x$CY_OBJECTIVEC" = x1])
 
 AC_ARG_WITH([libclang], AS_HELP_STRING([--with-libclang], [build bridge definitions using this libclang]), [], [with_libclang=no])
-- 
2.47.2