From 39ed1631f038d2dd9fea16e713ebf0c02ea54829 Mon Sep 17 00:00:00 2001 From: "Jay Freeman (saurik)" Date: Sat, 11 Oct 2014 04:50:29 -0700 Subject: [PATCH] Detect jni.h and link Android build against Dalvik. --- Makefile.am | 6 ++++ Makefile.in | 48 +++++++++++++++----------- configure | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++++ configure.ac | 9 +++++ 4 files changed, 138 insertions(+), 20 deletions(-) diff --git a/Makefile.am b/Makefile.am index ef426a2..eaf4c4e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -69,6 +69,12 @@ Bridge.hpp: Bridge.gperf $(GPERF) $< | $(SED) -e 's/defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__/0/' >$@ endif +if CY_JAVA +filters += Java +libcycript_la_SOURCES += +libcycript_la_LIBADD += $(LTJAVA) +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 9e0e3ec..42eb477 100644 --- a/Makefile.in +++ b/Makefile.in @@ -106,13 +106,16 @@ host_triplet = @host@ @CY_EXECUTE_TRUE@am__append_3 = -DCY_EXECUTE @CY_EXECUTE_TRUE@am__append_4 = C @CY_EXECUTE_TRUE@am__append_5 = Bridge.gperf Bridge.hpp -@CY_OBJECTIVEC_TRUE@am__append_6 = ObjectiveC -@CY_OBJECTIVEC_TRUE@am__append_7 = ObjectiveC/Output.cpp ObjectiveC/Replace.cpp ObjectiveC/Library.mm -@CY_OBJECTIVEC_TRUE@am__append_8 = $(LTOBJECTIVEC) -@CY_MACH_TRUE@am__append_9 = Handler.mm -@CY_CONSOLE_TRUE@@CY_MACH_TRUE@am__append_10 = Mach/Inject.cpp -@CY_CONSOLE_TRUE@@CY_MACH_TRUE@am__append_11 = -DCY_ATTACH -@CY_CONSOLE_TRUE@@CY_MACH_TRUE@am__append_12 = Trampoline.t.lo \ +@CY_JAVA_TRUE@am__append_6 = Java +@CY_JAVA_TRUE@am__append_7 = +@CY_JAVA_TRUE@am__append_8 = $(LTJAVA) +@CY_OBJECTIVEC_TRUE@am__append_9 = ObjectiveC +@CY_OBJECTIVEC_TRUE@am__append_10 = ObjectiveC/Output.cpp ObjectiveC/Replace.cpp ObjectiveC/Library.mm +@CY_OBJECTIVEC_TRUE@am__append_11 = $(LTOBJECTIVEC) +@CY_MACH_TRUE@am__append_12 = Handler.mm +@CY_CONSOLE_TRUE@@CY_MACH_TRUE@am__append_13 = Mach/Inject.cpp +@CY_CONSOLE_TRUE@@CY_MACH_TRUE@am__append_14 = -DCY_ATTACH +@CY_CONSOLE_TRUE@@CY_MACH_TRUE@am__append_15 = Trampoline.t.lo \ @CY_CONSOLE_TRUE@@CY_MACH_TRUE@ libTrampoline.t.la \ @CY_CONSOLE_TRUE@@CY_MACH_TRUE@ Trampoline.t.hpp subdir = . @@ -165,10 +168,11 @@ am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = @CY_EXECUTE_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) -@CY_OBJECTIVEC_TRUE@am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1) +@CY_JAVA_TRUE@am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1) +@CY_OBJECTIVEC_TRUE@am__DEPENDENCIES_4 = $(am__DEPENDENCIES_1) libcycript_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \ - $(am__DEPENDENCIES_3) + $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) am__libcycript_la_SOURCES_DIST = ConvertUTF.c Decode.cpp Driver.cpp \ Highlight.cpp Library.cpp Network.cpp Output.cpp Parser.cpp \ Replace.cpp Cycript.tab.cc lex.cy.cpp sig/ffi_type.cpp \ @@ -179,14 +183,15 @@ am__dirstamp = $(am__leading_dot)dirstamp @CY_EXECUTE_TRUE@am__objects_1 = sig/ffi_type.lo sig/parse.lo \ @CY_EXECUTE_TRUE@ sig/copy.lo Bridge.lo Execute.lo \ @CY_EXECUTE_TRUE@ JavaScriptCore.lo -@CY_OBJECTIVEC_TRUE@am__objects_2 = ObjectiveC/Output.lo \ +am__objects_2 = +@CY_OBJECTIVEC_TRUE@am__objects_3 = ObjectiveC/Output.lo \ @CY_OBJECTIVEC_TRUE@ ObjectiveC/Replace.lo \ @CY_OBJECTIVEC_TRUE@ ObjectiveC/Library.lo -@CY_MACH_TRUE@am__objects_3 = Handler.lo +@CY_MACH_TRUE@am__objects_4 = Handler.lo am_libcycript_la_OBJECTS = ConvertUTF.lo Decode.lo Driver.lo \ Highlight.lo Library.lo Network.lo Output.lo Parser.lo \ Replace.lo Cycript.tab.lo lex.cy.lo $(am__objects_1) \ - $(am__objects_2) $(am__objects_3) + $(am__objects_2) $(am__objects_3) $(am__objects_4) libcycript_la_OBJECTS = $(am_libcycript_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) @@ -197,9 +202,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 Display.cpp Mach/Inject.cpp -@CY_CONSOLE_TRUE@@CY_MACH_TRUE@am__objects_4 = Mach/Inject.$(OBJEXT) +@CY_CONSOLE_TRUE@@CY_MACH_TRUE@am__objects_5 = Mach/Inject.$(OBJEXT) @CY_CONSOLE_TRUE@am_cycript_OBJECTS = Console.$(OBJEXT) \ -@CY_CONSOLE_TRUE@ Display.$(OBJEXT) $(am__objects_4) +@CY_CONSOLE_TRUE@ Display.$(OBJEXT) $(am__objects_5) cycript_OBJECTS = $(am_cycript_OBJECTS) @CY_CONSOLE_TRUE@cycript_DEPENDENCIES = libcycript.la \ @CY_CONSOLE_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ @@ -385,6 +390,7 @@ CY_ARCH = @CY_ARCH@ CY_ATTACH_GROUP = @CY_ATTACH_GROUP@ CY_EXECUTE = @CY_EXECUTE@ CY_FILTERS = @CY_FILTERS@ +CY_JAVA = @CY_JAVA@ CY_MACH = @CY_MACH@ CY_OBJECTIVEC = @CY_OBJECTIVEC@ DEFS = @DEFS@ @@ -419,6 +425,7 @@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTFLAGS = @LTFLAGS@ +LTJAVA = @LTJAVA@ LTJAVASCRIPTCORE = @LTJAVASCRIPTCORE@ LTLIBFFI = @LTLIBFFI@ LTLIBGCC = @LTLIBGCC@ @@ -521,25 +528,26 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = subdir-objects -CLEANFILES = $(am__append_5) $(am__append_12) Cycript.yy Cycript.l \ +CLEANFILES = $(am__append_5) $(am__append_15) Cycript.yy Cycript.l \ lex.cy.cpp Cycript.tab.cc Cycript.tab.hh location.hh \ position.hh stack.hh Cycript.output SUBDIRS = ACLOCAL_AMFLAGS = -I m4 AM_CPPFLAGS = -I$(srcdir)/include -DYYDEBUG=1 -include config.h \ - -include $(srcdir)/unconfig.h $(am__append_3) $(am__append_11) + -include $(srcdir)/unconfig.h $(am__append_3) $(am__append_14) CY_LDFLAGS = -no-undefined -avoid-version -export-dynamic lib_LTLIBRARIES = libcycript.la libcycript_la_LDFLAGS = $(CY_LDFLAGS) libcycript_la_LIBADD = $(LTLIBFFI) $(LTLIBGCC) -ldl $(am__append_2) \ - $(am__append_8) + $(am__append_8) $(am__append_11) libcycript_la_SOURCES = ConvertUTF.c Decode.cpp Driver.cpp \ Highlight.cpp Library.cpp Network.cpp Output.cpp Parser.cpp \ Replace.cpp Cycript.tab.cc lex.cy.cpp $(am__append_1) \ - $(am__append_7) $(am__append_9) -filters = $(CY_FILTERS) $(am__append_4) $(am__append_6) + $(am__append_7) $(am__append_10) $(am__append_12) +filters = $(CY_FILTERS) $(am__append_4) $(am__append_6) \ + $(am__append_9) @CY_CONSOLE_TRUE@cycript_SOURCES = Console.cpp Display.cpp \ -@CY_CONSOLE_TRUE@ $(am__append_10) +@CY_CONSOLE_TRUE@ $(am__append_13) @CY_CONSOLE_TRUE@cycript_LDADD = libcycript.la $(LTLIBREADLINE) $(LTLIBTERMCAP) $(LTLIBGCC) -ldl @CY_CONSOLE_TRUE@ldid = true @CY_CONSOLE_TRUE@entitle = $(ldid) -S$(srcdir)/cycript.xml diff --git a/configure b/configure index b0f2ec2..3a88c75 100755 --- a/configure +++ b/configure @@ -655,9 +655,13 @@ LTLIBTERMCAP LTLIBREADLINE CY_OBJECTIVEC_FALSE CY_OBJECTIVEC_TRUE +CY_JAVA_FALSE +CY_JAVA_TRUE LTOBJECTIVEC GNUSTEP_CONFIG CY_OBJECTIVEC +LTJAVA +CY_JAVA LTLIBFFI LIBFFI_LIBS LIBFFI_CFLAGS @@ -19576,6 +19580,85 @@ fi + ac_fn_cxx_check_header_mongrel "$LINENO" "jni.h" "ac_cv_header_jni_h" "$ac_includes_default" +if test "x$ac_cv_header_jni_h" = xyes; then : + + CY_JAVA=1 + + + cy_save=$LIBS + LIBS= + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing JNI_GetCreatedJavaVMs" >&5 +$as_echo_n "checking for library containing JNI_GetCreatedJavaVMs... " >&6; } +if ${ac_cv_search_JNI_GetCreatedJavaVMs+:} 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 JNI_GetCreatedJavaVMs (); +int +main () +{ +return JNI_GetCreatedJavaVMs (); + ; + return 0; +} +_ACEOF +for ac_lib in '' dvm; 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_JNI_GetCreatedJavaVMs=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_JNI_GetCreatedJavaVMs+:} false; then : + break +fi +done +if ${ac_cv_search_JNI_GetCreatedJavaVMs+:} false; then : + +else + ac_cv_search_JNI_GetCreatedJavaVMs=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_JNI_GetCreatedJavaVMs" >&5 +$as_echo "$ac_cv_search_JNI_GetCreatedJavaVMs" >&6; } +ac_res=$ac_cv_search_JNI_GetCreatedJavaVMs +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + + +fi + + LTJAVA=$LIBS + LIBS=$cy_save + + + +else + + CY_JAVA=0 + + +fi + + + ac_ext=mm ac_cpp='$OBJCXXCPP $CPPFLAGS' ac_compile='$OBJCXX -c $OBJCXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -19860,6 +19943,14 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ;; esac + if test "x$CY_JAVA" = x1; then + CY_JAVA_TRUE= + CY_JAVA_FALSE='#' +else + CY_JAVA_TRUE='#' + CY_JAVA_FALSE= +fi + if test "x$CY_OBJECTIVEC" = x1; then CY_OBJECTIVEC_TRUE= CY_OBJECTIVEC_FALSE='#' @@ -20558,6 +20649,10 @@ if test -z "${CY_EXECUTE_TRUE}" && test -z "${CY_EXECUTE_FALSE}"; then as_fn_error $? "conditional \"CY_EXECUTE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +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_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 382ddf0..45df5a8 100644 --- a/configure.ac +++ b/configure.ac @@ -218,6 +218,14 @@ AS_CASE([$CY_EXECUTE], [1], [ AS_CASE([$ac_cv_search_ffi_call], [no], [CY_CHECK_PKG_CONFIG_LIBFFI]) ])) + AC_CHECK_HEADER([jni.h], [ + AC_SUBST([CY_JAVA], [1]) + CY_LT_LIB([LTJAVA], [AC_SEARCH_LIBS([JNI_GetCreatedJavaVMs], [dvm], [ + ])]) + ], [ + AC_SUBST([CY_JAVA], [0]) + ]) + AC_LANG_PUSH([Objective C++]) AC_MSG_CHECKING([if we really have Objective C++]) @@ -250,6 +258,7 @@ AS_CASE([$CY_EXECUTE], [1], [ AC_LANG_POP([Objective C++]) ]) +AM_CONDITIONAL([CY_JAVA], [test "x$CY_JAVA" = x1]) AM_CONDITIONAL([CY_OBJECTIVEC], [test "x$CY_OBJECTIVEC" = x1]) CY_LT_LIB([LTLIBREADLINE], [AX_LIB_READLINE]) -- 2.47.2