From 794e88e774e5cf637db5199e4d9c6665b4fc5673 Mon Sep 17 00:00:00 2001 From: Douglas William Thrift Date: Wed, 5 May 2010 03:54:47 +0000 Subject: [PATCH] Ported things mentioned in DOUG comments. --- Darwin.mk | 2 +- GNUmakefile.in | 14 +- Mach/Inject.cpp | 3 +- configure | 369 ++++++++++++++++++++++++++++++++++++++++++++---- configure.ac | 10 +- makefile | 2 - 6 files changed, 363 insertions(+), 37 deletions(-) diff --git a/Darwin.mk b/Darwin.mk index 1289855..20cff9b 100644 --- a/Darwin.mk +++ b/Darwin.mk @@ -12,7 +12,7 @@ flags += -I/usr/include/ffi apr_config := /usr/bin/apr-1-config flags += -arch i386 -arch x86_64 #-arch armv6 -flags += -DCY_ATTACH +flags += -DCY_ATTACH -DCY_LIBRARY='"/usr/lib/libcycript.dylib"' code += Handler.o inject += Mach/Inject.o Mach/Inject.o: Trampoline.t.hpp Baton.hpp diff --git a/GNUmakefile.in b/GNUmakefile.in index e500b86..c7c7adc 100644 --- a/GNUmakefile.in +++ b/GNUmakefile.in @@ -23,7 +23,9 @@ sed := @SED@ bison := @BISON@ time := @TIME@ gperf := @GPERF@ -otool := @OTOOL@ +otool := @_OTOOL@ +lipo := @_LIPO@ +nm := @_NM@ INSTALL := @INSTALL@ INSTALL_PROGRAM := @INSTALL_PROGRAM@ @@ -55,6 +57,7 @@ mandir := @mandir@ CY_EXECUTE := @CY_EXECUTE@ CY_OBJECTIVEC := @CY_OBJECTIVEC@ CY_OBJECTIVEC_MACH := @CY_OBJECTIVEC_MACH@ +CY_ATTACH_GROUP := @CY_ATTACH_GROUP@ svn := @SVN@ svnversion := @SVNVERSION@ @@ -177,14 +180,13 @@ Struct.hpp: ifeq ($(CY_OBJECTIVEC_MACH),1) code += Handler.lo -cflags += -DCY_ATTACH +cflags += -DCY_ATTACH -DCY_LIBRARY='"$(libdir)/libcycript.@SO@"' inject += Mach/Inject.lo Mach/Inject.lo: Trampoline.t.hpp Baton.hpp %.t.hpp: %.t.cpp trampoline.sh Baton.hpp Trampoline.hpp - # DOUG: abstract "lipo" and "nm" with configure? - ./trampoline.sh $@ .libs/$*.t.o $* $(sed) $(otool) lipo nm $(libtool) --mode=compile $(cxx) -c -fno-stack-protector -fno-exceptions -I$(srcdir)/include -o $*.t.lo $< $(cflags) + $(srcdir)/trampoline.sh $@ .libs/$*.t.o $* $(sed) $(otool) $(lipo) $(nm) $(libtool) --mode=compile $(cxx) -c -fno-stack-protector -fno-exceptions -I$(srcdir)/include -o $*.t.lo $< $(cflags) endif endif @@ -251,6 +253,10 @@ install: cycript libcycript.la $(INSTALL) -d $(DESTDIR)$(bindir) $(DESTDIR)$(libdir) $(libtool) --mode=install $(INSTALL_PROGRAM) libcycript.la $(DESTDIR)$(libdir)/libcycript.la $(libtool) --mode=install $(INSTALL_PROGRAM) cycript $(DESTDIR)$(bindir)/cycript +ifneq ($(CY_ATTACH_GROUP),) + chgrp $(CY_ATTACH_GROUP) $(DESTDIR)$(bindir)/cycript + chmod g+s $(DESTDIR)$(bindir)/cycript +endif uninstall: $(libtool) --mode=uninstall rm -f $(DESTDIR)$(bindir)/cycript diff --git a/Mach/Inject.cpp b/Mach/Inject.cpp index f5673c2..0e893a0 100644 --- a/Mach/Inject.cpp +++ b/Mach/Inject.cpp @@ -54,8 +54,7 @@ extern "C" void __pthread_set_self(pthread_t); void InjectLibrary(pid_t pid) { - // DOUG: turn this into some kind of -D passed from configure - const char *library("/usr/lib/libcycript.dylib"); + const char *library(CY_LIBRARY); static const size_t Stack_(8 * 1024); size_t length(strlen(library) + 1), depth(sizeof(Baton) + length); diff --git a/configure b/configure index acfcf0b..8a4edc5 100755 --- a/configure +++ b/configure @@ -745,7 +745,15 @@ ac_includes_default="\ ac_subst_vars='LTLIBOBJS LIBOBJS +CY_ATTACH_GROUP CY_OBJECTIVEC_MACH +SO +ac_ct__NM +_NM +ac_ct__LIPO +_LIPO +ac_ct__OTOOL +_OTOOL LTLIBICONV LIBICONV GNUSTEP_CONFIG @@ -4044,13 +4052,13 @@ if test "${lt_cv_nm_interface+set}" = set; then : else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:4047: $ac_compile\"" >&5) + (eval echo "\"\$as_me:4055: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 - (eval echo "\"\$as_me:4050: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval echo "\"\$as_me:4058: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 - (eval echo "\"\$as_me:4053: output\"" >&5) + (eval echo "\"\$as_me:4061: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" @@ -5256,7 +5264,7 @@ ia64-*-hpux*) ;; *-*-irix6*) # Find out which ABI we are using. - echo '#line 5259 "configure"' > conftest.$ac_ext + echo '#line 5267 "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? @@ -6781,11 +6789,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:6784: $lt_compile\"" >&5) + (eval echo "\"\$as_me:6792: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:6788: \$? = $ac_status" >&5 + echo "$as_me:6796: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -7120,11 +7128,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7123: $lt_compile\"" >&5) + (eval echo "\"\$as_me:7131: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:7127: \$? = $ac_status" >&5 + echo "$as_me:7135: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -7225,11 +7233,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7228: $lt_compile\"" >&5) + (eval echo "\"\$as_me:7236: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:7232: \$? = $ac_status" >&5 + echo "$as_me:7240: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -7280,11 +7288,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7283: $lt_compile\"" >&5) + (eval echo "\"\$as_me:7291: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:7287: \$? = $ac_status" >&5 + echo "$as_me:7295: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -9664,7 +9672,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 9667 "configure" +#line 9675 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -9760,7 +9768,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 9763 "configure" +#line 9771 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -13090,11 +13098,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:13093: $lt_compile\"" >&5) + (eval echo "\"\$as_me:13101: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:13097: \$? = $ac_status" >&5 + echo "$as_me:13105: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -13189,11 +13197,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:13192: $lt_compile\"" >&5) + (eval echo "\"\$as_me:13200: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:13196: \$? = $ac_status" >&5 + echo "$as_me:13204: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -13241,11 +13249,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:13244: $lt_compile\"" >&5) + (eval echo "\"\$as_me:13252: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:13248: \$? = $ac_status" >&5 + echo "$as_me:13256: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -19355,14 +19363,321 @@ if test "x$CY_OBJECTIVEC" = x1; then : ac_fn_cxx_check_header_mongrel "$LINENO" "mach/mach.h" "ac_cv_header_mach_mach_h" "$ac_includes_default" if test "x$ac_cv_header_mach_mach_h" = x""yes; then : - case $OTOOL in #( - :) : - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Missing otool?" >&5 -$as_echo "$as_me: WARNING: Missing otool?" >&2;} ;; #( - *) : - CY_OBJECTIVEC_MACH=1 - ;; + if test -n "$ac_tool_prefix"; then + for ac_prog in otool + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog__OTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$_OTOOL"; then + ac_cv_prog__OTOOL="$_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog__OTOOL="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +_OTOOL=$ac_cv_prog__OTOOL +if test -n "$_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_OTOOL" >&5 +$as_echo "$_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$_OTOOL" && break + done +fi +if test -z "$_OTOOL"; then + ac_ct__OTOOL=$_OTOOL + for ac_prog in otool +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct__OTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct__OTOOL"; then + ac_cv_prog_ac_ct__OTOOL="$ac_ct__OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct__OTOOL="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct__OTOOL=$ac_cv_prog_ac_ct__OTOOL +if test -n "$ac_ct__OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct__OTOOL" >&5 +$as_echo "$ac_ct__OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct__OTOOL" && break +done + + if test "x$ac_ct__OTOOL" = x; then + _OTOOL="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; esac + _OTOOL=$ac_ct__OTOOL + fi +fi + + if test "x$_OTOOL" = x; then : + as_fn_error "You need otool" "$LINENO" 5 +fi + if test -n "$ac_tool_prefix"; then + for ac_prog in lipo + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog__LIPO+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$_LIPO"; then + ac_cv_prog__LIPO="$_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog__LIPO="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +_LIPO=$ac_cv_prog__LIPO +if test -n "$_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_LIPO" >&5 +$as_echo "$_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$_LIPO" && break + done +fi +if test -z "$_LIPO"; then + ac_ct__LIPO=$_LIPO + for ac_prog in lipo +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct__LIPO+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct__LIPO"; then + ac_cv_prog_ac_ct__LIPO="$ac_ct__LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct__LIPO="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct__LIPO=$ac_cv_prog_ac_ct__LIPO +if test -n "$ac_ct__LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct__LIPO" >&5 +$as_echo "$ac_ct__LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct__LIPO" && break +done + + if test "x$ac_ct__LIPO" = x; then + _LIPO="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + _LIPO=$ac_ct__LIPO + fi +fi + + if test "x$_LIPO" = x; then : + as_fn_error "You need lipo" "$LINENO" 5 +fi + if test -n "$ac_tool_prefix"; then + for ac_prog in nm + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog__NM+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$_NM"; then + ac_cv_prog__NM="$_NM" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog__NM="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +_NM=$ac_cv_prog__NM +if test -n "$_NM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_NM" >&5 +$as_echo "$_NM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$_NM" && break + done +fi +if test -z "$_NM"; then + ac_ct__NM=$_NM + for ac_prog in nm +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct__NM+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct__NM"; then + ac_cv_prog_ac_ct__NM="$ac_ct__NM" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct__NM="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct__NM=$ac_cv_prog_ac_ct__NM +if test -n "$ac_ct__NM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct__NM" >&5 +$as_echo "$ac_ct__NM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct__NM" && break +done + + if test "x$ac_ct__NM" = x; then + _NM="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + _NM=$ac_ct__NM + fi +fi + + if test "x$_NM" = x; then : + as_fn_error "You need nm" "$LINENO" 5 +fi + SO=$acl_shlibext + + CY_OBJECTIVEC_MACH=1 + + CY_ATTACH_GROUP=procmod + fi diff --git a/configure.ac b/configure.ac index 91fd7ff..a89979c 100644 --- a/configure.ac +++ b/configure.ac @@ -198,7 +198,15 @@ AS_CASE([$am_cv_func_iconv], [yes], [], [AC_MSG_ERROR([You need iconv])]) AC_LANG_POP([C]) AS_IF([test "x$CY_OBJECTIVEC" = x1], [ AC_CHECK_HEADER([mach/mach.h], [ - AS_CASE([$OTOOL], [:], [AC_MSG_WARN([Missing otool?])], [AC_SUBST([CY_OBJECTIVEC_MACH], [1])]) + AC_CHECK_TOOLS([_OTOOL], [otool]) + AS_IF([test "x$_OTOOL" = x], [AC_MSG_ERROR([You need otool])]) + AC_CHECK_TOOLS([_LIPO], [lipo]) + AS_IF([test "x$_LIPO" = x], [AC_MSG_ERROR([You need lipo])]) + AC_CHECK_TOOLS([_NM], [nm]) + AS_IF([test "x$_NM" = x], [AC_MSG_ERROR([You need nm])]) + AC_SUBST([SO], [$acl_shlibext]) + AC_SUBST([CY_OBJECTIVEC_MACH], [1]) + AC_SUBST([CY_ATTACH_GROUP], [procmod]) ]) ]) AS_IF([test "x$GMAKE" != xmake], [ diff --git a/makefile b/makefile index 1de908e..3df4450 100644 --- a/makefile +++ b/makefile @@ -161,11 +161,9 @@ test: $(deb) install: cycript $(lib)cycript.$(dll) sudo cp -p cycript /usr/bin sudo cp -p $(lib)cycript.$(dll) /usr/lib - # DOUG: this needs to be ported to GNUmakefile sudo chgrp procmod /usr/bin/cycript sudo chmod g+s /usr/bin/cycript -# DOUG: this needs to be ported to GNUmakefile uninstall: sudo rm -f /usr/bin/cycript /usr/lib/libcycript.dylib -- 2.47.2