]> git.saurik.com Git - cycript.git/blame - configure.ac
/System/Library/Frameworks is an Apple-only path.
[cycript.git] / configure.ac
CommitLineData
c15969fd 1dnl Cycript - Optimizing JavaScript Compiler/Runtime
f95d2598 2dnl Copyright (C) 2009-2014 Jay Freeman (saurik)
c15969fd 3
f95d2598 4dnl GNU Affero General Public License, Version 3 {{{
c15969fd 5dnl
f95d2598
JF
6dnl This program is free software: you can redistribute it and/or modify
7dnl it under the terms of the GNU Affero General Public License as published by
8dnl the Free Software Foundation, either version 3 of the License, or
9dnl (at your option) any later version.
c15969fd 10dnl
f95d2598
JF
11dnl This program is distributed in the hope that it will be useful,
12dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
c15969fd 13dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
f95d2598 14dnl GNU Affero General Public License for more details.
c15969fd 15dnl
f95d2598
JF
16dnl You should have received a copy of the GNU Affero General Public License
17dnl along with this program. If not, see <http://www.gnu.org/licenses/>.
c15969fd
JF
18dnl }}}
19
9c60689e 20AC_PREREQ([2.65])
c7aa54aa 21AC_INIT([Cycript], [0.9], [saurik@saurik.com], [cycript], [http://www.cycript.org/])
f95d2598 22AC_COPYRIGHT([Copyright (C) 2009-2014 Jay Freeman (saurik)])
66170b30 23
35fa52c0 24AC_CONFIG_SRCDIR([Console.cpp])
6b66678a 25AC_CONFIG_AUX_DIR([.])
66170b30 26AC_CONFIG_MACRO_DIR([m4])
e2852502 27AC_CONFIG_HEADERS([config.h])
66170b30 28
9228a43a 29AM_INIT_AUTOMAKE([-Wall -Werror foreign])
b2895b4c 30AM_MAINTAINER_MODE([disable])
a243b558 31
7caa62e6 32AC_PROG_CC
a243b558
JF
33AC_PROG_CXX
34AC_PROG_OBJCXX
bfde1b76 35
a243b558
JF
36AM_PROG_AR
37AC_PROG_INSTALL
38
549f29b5 39LT_INIT([disable-static])
66170b30
JF
40
41AC_LANG([C++])
42
3fd51f51 43PKG_PROG_PKG_CONFIG([0.22])
66170b30 44
66170b30
JF
45AC_PATH_PROG([GIT], [git])
46AC_PATH_PROG([TIME], [time])
47
48dnl CY_CHECK_PROGS_VERSION {{{
e9c9a47c 49AC_DEFUN([CY_CHECK_PROGS_VERSION], [
66170b30
JF
50 AC_ARG_VAR(]$1[, ]$3[)
51
52 AC_MSG_CHECKING(for ]$2[ >= ]$5[)
53 AC_PATH_PROGS_FEATURE_CHECK(]$1[, ]$2[,
54 AS_VAR_SET(version, [`$ac_path_]$1[ ]$4[`])
55 AS_VAR_IF(version, [], ,
56 AS_VERSION_COMPARE($version, ]$5[, ,
57 ac_cv_path_]$1[=$ac_path_]$1[,
58 ac_cv_path_]$1[=$ac_path_]$1[))
59 , AC_MSG_RESULT(no))
60
61 AS_IF([true], [
62 AC_SUBST(]$1[, $ac_cv_path_]$1[)
63 AC_MSG_RESULT($]$1[)
64 ], AS_IF([true], [
65 AC_MSG_ERROR(You need ]$2[ ]$5[ or greater)
66 ], [
67 AC_SUBST(]$1[, [:])
68 AC_MSG_RESULT([no])
69 ]))
70]) dnl }}}
71
72CY_CHECK_PROGS_VERSION([BISON], [bison], [GNU Project parser generator (yacc replacement)],
73 [-V | $SED -e '1 s/^bison (GNU Bison) \(.*\)$/\1/p;d'], [2.3])
74CY_CHECK_PROGS_VERSION([FLEX], [flex], [the fast lexical analyser generator],
75 [--version | $SED -e '1 s/^@<:@^0-9.@:>@* \(@<:@0-9.@:>@*\).*$/\1/p;d'], [2.5.33])
76CY_CHECK_PROGS_VERSION([GPERF], [gperf], [perfect hash function generator],
77 [--version | $SED -e '1 s/^.* \(@<:@0-9.@:>@*\)$/\1/p;d'], [3.0.3])
78CY_CHECK_PROGS_VERSION([GNUTAR], [tar gtar gnutar], [a very sticky lump of files],
79 [--version | $SED -e '1 s/^tar (GNU tar) \(.*\)$/\1/p;d'], [1.19])
80
9228a43a
JF
81AC_MSG_CHECKING([bison for %code{}])
82echo '%code{}%%_:' >conftest.y
83if $BISON conftest.y -o/dev/null 2>/dev/null; then
84 AC_LIB_APPENDTOVAR([CY_FILTERS], [Bison24])
85 AC_MSG_RESULT([yes])
86else
87 AC_LIB_APPENDTOVAR([CY_FILTERS], [Bison23])
88 AC_MSG_RESULT([no])
89fi
90
91rm -f conftest.y
92AC_SUBST([CY_FILTERS])
93
66170b30
JF
94dnl CY_TRY {{{
95AC_DEFUN([CY_SUCCESS], [cy_good=1])
96AC_DEFUN([CY_FAILURE], [cy_good=0])
97
98AC_DEFUN([CY_TRY], [
99 cy_save=$]$1[
100 AC_LIB_APPENDTOVAR(]$1[, ]$2[)
101 ]$3[
102 ]$1[=$cy_save
103 AS_IF([test "x$cy_good" = x1], ]$4[, ]$5[)
104]) dnl }}}
105
ff6daad2
JF
106AC_DEFUN([CY_TEST_FLAG_], [
107 AC_LANG_PUSH(]$2[)
108 AC_MSG_CHECKING([for ]]$4[[ ]]$1[)
109 CY_TRY(]$3[, $1, [
66170b30
JF
110 AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
111 [CY_SUCCESS], [CY_FAILURE])
112 ], [
113 AC_MSG_RESULT([yes])
ff6daad2 114 AC_LIB_APPENDTOVAR(]$3[, ]$1[)
66170b30 115 ], [AC_MSG_RESULT([no])])
ff6daad2
JF
116 AC_LANG_POP(]$2[)
117])
118
119AC_DEFUN([CY_TEST_FLAG], [
120 CY_TEST_FLAG_(]$1[, [C], [CFLAGS], [cc])
121 CY_TEST_FLAG_(]$1[, [C++], [CXXFLAGS], [c++])
5a288ada 122 CY_TEST_FLAG_(]$1[, [Objective C++], [OBJCXXFLAGS], [c++ -ObjC])
66170b30
JF
123])
124
125AX_CFLAGS_WARN_ALL
126AX_CXXFLAGS_WARN_ALL
90b4fa6b 127AX_FLAGS_WARN_ALL
66170b30 128
4fc6e20e
JF
129CY_TEST_FLAG([-Werror])
130
a69dc826
JF
131dnl XXX: this is used to support GNU Objective-C struct objc_method
132CY_TEST_FLAG([-Wno-deprecated-declarations])
133
0cfdb323 134CY_TEST_FLAG([-Wno-dangling-else])
66170b30
JF
135CY_TEST_FLAG([-Wno-overloaded-virtual])
136CY_TEST_FLAG([-Wno-parentheses])
137CY_TEST_FLAG([-Wno-unneeded-internal-declaration])
138
e71ad079
JF
139AC_DEFUN([CY_LT_LIB], [
140 cy_save=$LIBS
141 LIBS=
142 ]$2[
143 ]$1[=$LIBS
144 LIBS=$cy_save
145 AC_SUBST(]$1[)
146])
147
abc804fa 148dnl -arch * {{{
3615a2f7 149for cy_arch in ppc ppc64 i386 x86_64 armv6 arm64; do
abc804fa
JF
150 AC_MSG_CHECKING([for -arch $cy_arch])
151 CY_TRY([CXXFLAGS], ["-arch $cy_arch"], [
152 AC_TRY_LINK([], [], [CY_SUCCESS], [CY_FAILURE])
153 ], [
154 AC_MSG_RESULT([yes])
155 AC_LIB_APPENDTOVAR([CY_ARCH], ["-arch $cy_arch"])
156 ], [AC_MSG_RESULT([no])])
157done
158AC_SUBST([CY_ARCH])
159dnl }}}
160
66170b30 161dnl --enable-javascript {{{
b66977f1 162AC_DEFUN([CY_CHECK_JAVASCRIPTCORE], [
9918a0fa
JF
163 CY_LT_LIB([LTJAVASCRIPTCORE], [AC_SEARCH_LIBS([JSEvaluateScript], [JavaScriptCore], [
164 AC_SUBST([CY_EXECUTE], [1])
165 ], [AC_CHECK_FRAMEWORK([JavaScriptCore], [
4a762893
JF
166 #include <JavaScriptCore/JSBase.h>
167 ], [
168 JSEvaluateScript(0, 0, 0, 0, 0, 0);
169 ], [
66170b30 170 AC_SUBST([CY_EXECUTE], [1])
66170b30 171 ], [
4a762893
JF
172 for cy_webkit_pkg in "webkit-1.0" "WebKitGtk"; do
173 PKG_CHECK_MODULES([WEBKIT], [$cy_webkit_pkg], [
66170b30 174 AC_SUBST([CY_EXECUTE], [1])
d70419f1 175 AC_LIB_APPENDTOVAR([CPPFLAGS], [`$PKG_CONFIG --cflags $cy_webkit_pkg`])
4a762893
JF
176 AC_LIB_APPENDTOVAR([LIBS], [`$PKG_CONFIG --libs $cy_webkit_pkg`])
177 ], [:]); if test "x$CY_EXECUTE" = x1; then break; fi
178 done
9918a0fa 179 ])])])
35fa52c0 180])
66170b30 181
b66977f1 182AC_DEFUN([CY_CHECK_JAVASCRIPT], [
66170b30
JF
183 CY_CHECK_JAVASCRIPTCORE])
184
b66977f1 185AC_ARG_ENABLE([javascript], [AS_HELP_STRING(
66170b30
JF
186 [--enable-javascript@<:@=ENGINE@:>@],
187 [use a JavaScript runtime (currently the only available option for ENGINE is JavaScriptCore) @<:@default=yes@:>@]
b66977f1 188)], [
66170b30
JF
189 AS_CASE([$enableval],
190 [yes], [
191 CY_CHECK_JAVASCRIPT],
192 [no], [
193 AC_SUBST([CY_EXECUTE], [0])],
194 [JavaScriptCore], [
195 CY_CHECK_JAVASCRIPTCORE],
196 [AC_MSG_ERROR([Unknown JavaScript engine: $enableval])])
b66977f1 197], [CY_CHECK_JAVASCRIPT])
66170b30
JF
198dnl }}}
199
002ca3d9
JF
200AC_ARG_ENABLE([console], AS_HELP_STRING([--disable-console], [disable console]))
201AM_CONDITIONAL([CY_CONSOLE], [test "x$enable_console" != "xno"])
202
e5cca37d 203AC_DEFUN([CY_CHECK_PKG_CONFIG_LIBFFI], [
66170b30 204 PKG_CHECK_MODULES([LIBFFI], [libffi], [
d70419f1 205 AC_LIB_APPENDTOVAR([CPPFLAGS], [`$PKG_CONFIG --cflags libffi`])
66170b30
JF
206 AC_LIB_APPENDTOVAR([LIBS], [`$PKG_CONFIG --libs libffi`])
207 ], [AC_MSG_ERROR([missing "libffi"])])])
208
a243b558
JF
209AM_CONDITIONAL([CY_EXECUTE], [test "x$CY_EXECUTE" = x1])
210
e5cca37d 211AS_CASE([$CY_EXECUTE], [1], [
66170b30 212 AC_CHECK_HEADERS([ffi.h ffi/ffi.h], [break])
e71ad079
JF
213
214 CY_LT_LIB([LTLIBFFI], AS_IF([test "x$ac_cv_header_ffi_h" = xno && test "x$ac_cv_header_ffi_ffi_h" = xno], [
66170b30
JF
215 CY_CHECK_PKG_CONFIG_LIBFFI
216 ], [
217 AC_SEARCH_LIBS([ffi_call], [ffi])
218 AS_CASE([$ac_cv_search_ffi_call], [no], [CY_CHECK_PKG_CONFIG_LIBFFI])
e71ad079 219 ]))
66170b30 220
39ed1631
JF
221 AC_CHECK_HEADER([jni.h], [
222 AC_SUBST([CY_JAVA], [1])
223 CY_LT_LIB([LTJAVA], [AC_SEARCH_LIBS([JNI_GetCreatedJavaVMs], [dvm], [
224 ])])
225 ], [
226 AC_SUBST([CY_JAVA], [0])
227 ])
228
66170b30
JF
229 AC_LANG_PUSH([Objective C++])
230
231 AC_MSG_CHECKING([if we really have Objective C++])
232 AC_COMPILE_IFELSE([AC_LANG_SOURCE([])], [
233 CY_OBJECTIVEC=1
234 AC_MSG_RESULT([yes])
235 ], [AC_MSG_RESULT([no])])
236
237 AS_IF([test "x$CY_OBJECTIVEC" = x1], [
604ed881 238 CY_LT_LIB([LTOBJECTIVEC], [AC_CHECK_FRAMEWORK([CoreFoundation], [
66170b30
JF
239 #include <CoreFoundation/CFBase.h>
240 ], [CFAllocatorGetDefault();], [
241 AC_SUBST([CY_OBJECTIVEC])
242
243 AC_CHECK_FRAMEWORK([Foundation], [
244 #include <Foundation/NSObject.h>
245 ], [[[[NSObject alloc] init];]])
66170b30
JF
246 ], [
247 AC_ARG_VAR([GNUSTEP_CONFIG], [prints information about the current gnustep installation])
248 AC_CHECK_PROGS([GNUSTEP_CONFIG], [gnustep-config])
249
250 AS_IF([test "x$GNUSTEP_CONFIG" != x], [
251 AC_SUBST([CY_OBJECTIVEC])
252 AC_LIB_APPENDTOVAR([OBJCXXFLAGS], [`$GNUSTEP_CONFIG --objc-flags`])
253 AC_LIB_APPENDTOVAR([LIBS], [`$GNUSTEP_CONFIG --base-libs`])
254 ], [AC_SUBST([CY_OBJECTIVEC], [0])])
604ed881 255 ])])
66170b30
JF
256 ])
257
258 AC_LANG_POP([Objective C++])
3fd51f51 259])
66170b30 260
39ed1631 261AM_CONDITIONAL([CY_JAVA], [test "x$CY_JAVA" = x1])
a243b558
JF
262AM_CONDITIONAL([CY_OBJECTIVEC], [test "x$CY_OBJECTIVEC" = x1])
263
6f9aea2b
JF
264CY_LT_LIB([LTLIBREADLINE], [AX_LIB_READLINE])
265AS_CASE([$ax_cv_lib_readline], [no], [AC_MSG_ERROR([missing "libreadline"])])
66170b30 266
b5437404 267CY_LT_LIB([LTLIBTERMCAP], [AC_SEARCH_LIBS([cur_term], [termcap ncurses])])
a243b558 268
3615a2f7
JF
269AC_SUBST([LTLIBGCC])
270
66170b30 271AC_SUBST([LTFLAGS])
9777bd50 272AC_SUBST([SO], [$acl_shlibext])
66170b30 273
1f11d1b4
JF
274AS_IF([test "x$CY_EXECUTE" = x1], [
275 AC_CHECK_HEADER([mach/mach.h], [
276 AC_CHECK_TOOLS([_LIPO], [lipo], [AC_MSG_ERROR([missing "lipo"])])
277 AC_CHECK_TOOLS([_NM], [nm], [AC_MSG_ERROR([missing "nm"])])
278 AC_CHECK_TOOLS([_OTOOL], [otool], [AC_MSG_ERROR([missing "otool"])])
279 AC_SUBST([CY_ATTACH_GROUP], [procmod])
280 AC_SUBST([CY_MACH], [1])])])
a243b558 281AM_CONDITIONAL([CY_MACH], [test "x$CY_MACH" = x1])
66170b30 282
a243b558 283AC_CONFIG_FILES([Makefile])
9c60689e 284AC_OUTPUT