From 5f29ae16a595decee3fb137215746d4bdfae3c90 Mon Sep 17 00:00:00 2001 From: "Jay Freeman (saurik)" 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 . +**/ +/* }}} */ + +#ifdef __APPLE__ +#include +#else +#include +#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 header file. */ #undef HAVE_READLINE_READLINE_H +/* Define to 1 if you have the header file. */ +#undef HAVE_RUBY_H + /* Define to 1 if you have the 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 + +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_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