CY_LDFLAGS = -no-undefined -avoid-version -export-dynamic
-lib_LTLIBRARIES = libcycript.la
-libcycript_la_SOURCES = Highlight.cpp Network.cpp Output.cpp Parser.cpp Replace.cpp
+lib_LTLIBRARIES =
+
+lib_LTLIBRARIES += libcycript.la
+libcycript_la_SOURCES = Select.cpp
libcycript_la_LDFLAGS = $(AM_LDFLAGS) $(CY_LDFLAGS)
-libcycript_la_LIBADD = $(LTLIBFFI) $(LTLIBICONV) -ldl
+libcycript_la_LIBADD = -ldl
+
+lib_LTLIBRARIES += libcycript-sys.la
+libcycript_sys_la_SOURCES = Highlight.cpp Network.cpp Output.cpp Parser.cpp Replace.cpp
+libcycript_sys_la_LDFLAGS = $(AM_LDFLAGS) $(CY_LDFLAGS)
+libcycript_sys_la_LIBADD = $(LTLIBFFI) $(LTLIBICONV) -ldl
-libcycript_la_SOURCES += Cycript.tab.cc
-libcycript_la_SOURCES += lex.cy.cpp
+libcycript_sys_la_SOURCES += Cycript.tab.cc
+libcycript_sys_la_SOURCES += lex.cy.cpp
bin_PROGRAMS = cycript
cycript_SOURCES = Console.cpp Display.cpp
-cycript_LDADD = libcycript.la $(LTLIBAPR) $(LTLIBREADLINE) $(LTLIBTERMCAP) -ldl
+cycript_LDADD = libcycript.la libcycript-sys.la $(LTLIBAPR) $(LTLIBREADLINE) $(LTLIBTERMCAP) -ldl
ldid = true
entitle = $(ldid) -Scycript.xml
filters = $(CY_FILTERS)
if CY_EXECUTE
-libcycript_la_SOURCES += sig/ffi_type.cpp sig/parse.cpp sig/copy.cpp
-libcycript_la_SOURCES += Bridge.cpp Execute.cpp JavaScriptCore.cpp Library.cpp
+libcycript_sys_la_SOURCES += sig/ffi_type.cpp sig/parse.cpp sig/copy.cpp
+libcycript_sys_la_SOURCES += Bridge.cpp Execute.cpp JavaScriptCore.cpp Library.cpp
+libcycript_sys_la_LIBADD += $(LTJAVASCRIPTCORE)
AM_CPPFLAGS += -DCY_EXECUTE
filters += C
if CY_OBJECTIVEC
filters += ObjectiveC
-libcycript_la_SOURCES += ObjectiveC/Output.mm ObjectiveC/Replace.cpp ObjectiveC/Library.mm
+libcycript_sys_la_SOURCES += ObjectiveC/Output.mm ObjectiveC/Replace.cpp ObjectiveC/Library.mm
+libcycript_sys_la_LIBADD += $(LTOBJECTIVEC)
endif
if CY_MACH
-libcycript_la_SOURCES += Handler.mm
+libcycript_sys_la_SOURCES += Handler.mm
cycript_SOURCES += Mach/Inject.cpp
AM_CPPFLAGS += -DCY_ATTACH
libcycript_sim_la_SHORTNAME = sim
if CY_IOS_SIMULATOR
lib_LTLIBRARIES += libcycript-sim.la
-libcycript_sim_la_SOURCES = $(libcycript_la_SOURCES)
+libcycript_sim_la_SOURCES = $(libcycript_sys_la_SOURCES)
libcycript_sim_la_CPPFLAGS = $(AM_CPPFLAGS)
CY_SIM_FLAGS = -arch i386 -isysroot $(CY_IOS_SIMULATOR)
libcycript_sim_la_OBJCXXFLAGS = $(CY_SIM_FLAGS)
libcycript_sim_la_LDFLAGS = $(CY_SIM_FLAGS) $(CY_LDFLAGS)
-libcycript_sim_la_LIBADD = $(LTLIBICONV) -ldl
+libcycript_sim_la_LIBADD = $(LTOBJECTIVEC) $(LTLIBICONV) -ldl
+libcycript_sim_la_LIBADD += $(LTOBJECTIVEC) $(LTJAVASCRIPTCORE)
libcycript_sim_la_CPPFLAGS += -idirafter /usr/include
libcycript_sim_la_LDFLAGS += -Wl,/usr/lib/libffi.dylib
--- /dev/null
+/* Cycript - Optimizing JavaScript Compiler/Runtime
+ * Copyright (C) 2009-2013 Jay Freeman (saurik)
+*/
+
+/* GNU General Public License, Version 3 {{{ */
+/*
+ * Cycript is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published
+ * by the Free Software Foundation, either version 3 of the License,
+ * or (at your option) any later version.
+ *
+ * Cycript 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Cycript. If not, see <http://www.gnu.org/licenses/>.
+**/
+/* }}} */
+
+#include <cstring>
+
+#include <stdint.h>
+
+#include <dlfcn.h>
+#include <syslog.h>
+#include <unistd.h>
+
+#include <mach-o/dyld.h>
+
+extern "C" void CYHandleServer(pid_t pid) {
+ Dl_info addr;
+ if (dladdr(reinterpret_cast<void *>(&CYHandleServer), &addr) == 0)
+ return;
+
+ const char *fname(addr.dli_fname);
+ size_t length(strlen(fname));
+
+ const char *ext(strrchr(fname, '.'));
+ size_t prefix(ext - fname);
+
+ const char *addition;
+#ifdef __APPLE__
+ // XXX: THIS IS HORRIBLE OMG I NEED TO FIX THIS ASAP
+ bool simulator(false);
+ for (uint32_t i(0), e(_dyld_image_count()); i != e; ++i) {
+ if (strstr(_dyld_get_image_name(i), "/SDKs/iPhoneSimulator") != NULL)
+ simulator = true;
+ }
+ if (simulator)
+ addition = "-sim";
+ else
+#endif
+ // someone threw a fit about dangling #endif + else
+ // the idea that this bothers someone gives me glee
+ addition = "-sys";
+
+ char library[length + 5];
+ memcpy(library, fname, prefix);
+ memcpy(library + prefix, addition, 4);
+ memcpy(library + prefix + 4, fname + prefix, length - prefix);
+ library[length + 4] = '\0';
+
+ void *handle(dlopen(library, RTLD_LOCAL | RTLD_LAZY));
+ if (handle == NULL) {
+ syslog(LOG_ERR, "dlopen() -> %s", dlerror());
+ return;
+ }
+
+ void *symbol(dlsym(handle, "CYHandleServer"));
+ if (symbol == NULL)
+ return;
+
+ reinterpret_cast<void (*)(pid_t)>(symbol)(pid);
+}
dnl --enable-javascript {{{
AC_DEFUN([CY_CHECK_JAVASCRIPTCORE], [
- AC_CHECK_FRAMEWORK([JavaScriptCore], [
+ CY_LT_LIB([LTJAVASCRIPTCORE], [AC_CHECK_FRAMEWORK([JavaScriptCore], [
#include <JavaScriptCore/JSBase.h>
], [
JSEvaluateScript(0, 0, 0, 0, 0, 0);
AC_LIB_APPENDTOVAR([LIBS], [`$PKG_CONFIG --libs $cy_webkit_pkg`])
], [:]); if test "x$CY_EXECUTE" = x1; then break; fi
done
- ])
+ ])])
])
AC_DEFUN([CY_CHECK_JAVASCRIPT], [
], [AC_MSG_RESULT([no])])
AS_IF([test "x$CY_OBJECTIVEC" = x1], [
- AC_CHECK_FRAMEWORK([CoreFoundation], [
+ CY_LT_LIB([LTOBJECTIVEC], [AC_CHECK_FRAMEWORK([CoreFoundation], [
#include <CoreFoundation/CFBase.h>
], [CFAllocatorGetDefault();], [
AC_SUBST([CY_OBJECTIVEC])
AC_LIB_APPENDTOVAR([OBJCXXFLAGS], [`$GNUSTEP_CONFIG --objc-flags`])
AC_LIB_APPENDTOVAR([LIBS], [`$GNUSTEP_CONFIG --base-libs`])
], [AC_SUBST([CY_OBJECTIVEC], [0])])
- ])
+ ])])
])
AC_LANG_POP([Objective C++])