]> git.saurik.com Git - cycript.git/blame - configure.ac
Also use CXType walker to for function prototypes.
[cycript.git] / configure.ac
CommitLineData
7341eedb
JF
1dnl Cycript - The Truly Universal Scripting Language
2dnl Copyright (C) 2009-2016 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/])
7341eedb 22AC_COPYRIGHT([Copyright (C) 2009-2016 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
8d20f0f1
JF
36AX_PROG_CXX_FOR_BUILD
37
a243b558
JF
38AM_PROG_AR
39AC_PROG_INSTALL
40
549f29b5 41LT_INIT([disable-static])
66170b30
JF
42
43AC_LANG([C++])
44
1771224f
JF
45AX_CXX_COMPILE_STDCXX_11([ext], [mandatory])
46OBJCXXFLAGS="${OBJCXXFLAGS} ${CXXFLAGS##*' '}"
47
3fd51f51 48PKG_PROG_PKG_CONFIG([0.22])
66170b30 49
66170b30
JF
50AC_PATH_PROG([GIT], [git])
51AC_PATH_PROG([TIME], [time])
52
53dnl CY_CHECK_PROGS_VERSION {{{
e9c9a47c 54AC_DEFUN([CY_CHECK_PROGS_VERSION], [
66170b30
JF
55 AC_ARG_VAR(]$1[, ]$3[)
56
57 AC_MSG_CHECKING(for ]$2[ >= ]$5[)
58 AC_PATH_PROGS_FEATURE_CHECK(]$1[, ]$2[,
59 AS_VAR_SET(version, [`$ac_path_]$1[ ]$4[`])
60 AS_VAR_IF(version, [], ,
61 AS_VERSION_COMPARE($version, ]$5[, ,
62 ac_cv_path_]$1[=$ac_path_]$1[,
63 ac_cv_path_]$1[=$ac_path_]$1[))
64 , AC_MSG_RESULT(no))
65
66 AS_IF([true], [
67 AC_SUBST(]$1[, $ac_cv_path_]$1[)
68 AC_MSG_RESULT($]$1[)
69 ], AS_IF([true], [
70 AC_MSG_ERROR(You need ]$2[ ]$5[ or greater)
71 ], [
72 AC_SUBST(]$1[, [:])
73 AC_MSG_RESULT([no])
74 ]))
75]) dnl }}}
76
77CY_CHECK_PROGS_VERSION([BISON], [bison], [GNU Project parser generator (yacc replacement)],
6ce9ac92 78 [-V | $SED -e '1 s/^bison (GNU Bison) \(.*\)$/\1/p;d'], [3.0])
66170b30
JF
79CY_CHECK_PROGS_VERSION([FLEX], [flex], [the fast lexical analyser generator],
80 [--version | $SED -e '1 s/^@<:@^0-9.@:>@* \(@<:@0-9.@:>@*\).*$/\1/p;d'], [2.5.33])
81CY_CHECK_PROGS_VERSION([GPERF], [gperf], [perfect hash function generator],
82 [--version | $SED -e '1 s/^.* \(@<:@0-9.@:>@*\)$/\1/p;d'], [3.0.3])
83CY_CHECK_PROGS_VERSION([GNUTAR], [tar gtar gnutar], [a very sticky lump of files],
84 [--version | $SED -e '1 s/^tar (GNU tar) \(.*\)$/\1/p;d'], [1.19])
85
66170b30
JF
86dnl CY_TRY {{{
87AC_DEFUN([CY_SUCCESS], [cy_good=1])
88AC_DEFUN([CY_FAILURE], [cy_good=0])
89
90AC_DEFUN([CY_TRY], [
91 cy_save=$]$1[
92 AC_LIB_APPENDTOVAR(]$1[, ]$2[)
93 ]$3[
94 ]$1[=$cy_save
95 AS_IF([test "x$cy_good" = x1], ]$4[, ]$5[)
96]) dnl }}}
97
77578fdd
JF
98AC_ARG_VAR([LFLAGS], [flex flags])
99AS_IF([test "x$LFLAGS" = x], [LFLAGS="--full --ecs"])
100
ff6daad2
JF
101AC_DEFUN([CY_TEST_FLAG_], [
102 AC_LANG_PUSH(]$2[)
103 AC_MSG_CHECKING([for ]]$4[[ ]]$1[)
104 CY_TRY(]$3[, $1, [
66170b30
JF
105 AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
106 [CY_SUCCESS], [CY_FAILURE])
107 ], [
108 AC_MSG_RESULT([yes])
ff6daad2 109 AC_LIB_APPENDTOVAR(]$3[, ]$1[)
66170b30 110 ], [AC_MSG_RESULT([no])])
ff6daad2
JF
111 AC_LANG_POP(]$2[)
112])
113
114AC_DEFUN([CY_TEST_FLAG], [
115 CY_TEST_FLAG_(]$1[, [C], [CFLAGS], [cc])
116 CY_TEST_FLAG_(]$1[, [C++], [CXXFLAGS], [c++])
5a288ada 117 CY_TEST_FLAG_(]$1[, [Objective C++], [OBJCXXFLAGS], [c++ -ObjC])
66170b30
JF
118])
119
120AX_CFLAGS_WARN_ALL
121AX_CXXFLAGS_WARN_ALL
90b4fa6b 122AX_FLAGS_WARN_ALL
66170b30 123
4fc6e20e
JF
124CY_TEST_FLAG([-Werror])
125
a69dc826
JF
126dnl XXX: this is used to support GNU Objective-C struct objc_method
127CY_TEST_FLAG([-Wno-deprecated-declarations])
128
0cfdb323 129CY_TEST_FLAG([-Wno-dangling-else])
2ada0541 130CY_TEST_FLAG([-Wno-empty-body])
66170b30
JF
131CY_TEST_FLAG([-Wno-overloaded-virtual])
132CY_TEST_FLAG([-Wno-parentheses])
2ada0541 133CY_TEST_FLAG([-Wno-tautological-undefined-compare])
66170b30
JF
134CY_TEST_FLAG([-Wno-unneeded-internal-declaration])
135
be2fde87
JF
136AX_PTHREAD
137
e71ad079
JF
138AC_DEFUN([CY_LT_LIB], [
139 cy_save=$LIBS
140 LIBS=
141 ]$2[
142 ]$1[=$LIBS
143 LIBS=$cy_save
144 AC_SUBST(]$1[)
145])
146
66170b30 147dnl --enable-javascript {{{
b66977f1 148AC_DEFUN([CY_CHECK_JAVASCRIPTCORE], [
9918a0fa
JF
149 CY_LT_LIB([LTJAVASCRIPTCORE], [AC_SEARCH_LIBS([JSEvaluateScript], [JavaScriptCore], [
150 AC_SUBST([CY_EXECUTE], [1])
151 ], [AC_CHECK_FRAMEWORK([JavaScriptCore], [
4a762893
JF
152 #include <JavaScriptCore/JSBase.h>
153 ], [
154 JSEvaluateScript(0, 0, 0, 0, 0, 0);
155 ], [
66170b30 156 AC_SUBST([CY_EXECUTE], [1])
66170b30 157 ], [
ccb4e34c 158 for cy_webkit_pkg in "javascriptcoregtk-4.0"; do
4a762893 159 PKG_CHECK_MODULES([WEBKIT], [$cy_webkit_pkg], [
66170b30 160 AC_SUBST([CY_EXECUTE], [1])
d70419f1 161 AC_LIB_APPENDTOVAR([CPPFLAGS], [`$PKG_CONFIG --cflags $cy_webkit_pkg`])
4a762893
JF
162 AC_LIB_APPENDTOVAR([LIBS], [`$PKG_CONFIG --libs $cy_webkit_pkg`])
163 ], [:]); if test "x$CY_EXECUTE" = x1; then break; fi
164 done
9918a0fa 165 ])])])
35fa52c0 166])
66170b30 167
b66977f1 168AC_DEFUN([CY_CHECK_JAVASCRIPT], [
66170b30
JF
169 CY_CHECK_JAVASCRIPTCORE])
170
b66977f1 171AC_ARG_ENABLE([javascript], [AS_HELP_STRING(
66170b30
JF
172 [--enable-javascript@<:@=ENGINE@:>@],
173 [use a JavaScript runtime (currently the only available option for ENGINE is JavaScriptCore) @<:@default=yes@:>@]
b66977f1 174)], [
66170b30
JF
175 AS_CASE([$enableval],
176 [yes], [
177 CY_CHECK_JAVASCRIPT],
178 [no], [
179 AC_SUBST([CY_EXECUTE], [0])],
180 [JavaScriptCore], [
181 CY_CHECK_JAVASCRIPTCORE],
182 [AC_MSG_ERROR([Unknown JavaScript engine: $enableval])])
b66977f1 183], [CY_CHECK_JAVASCRIPT])
66170b30
JF
184dnl }}}
185
002ca3d9
JF
186AC_ARG_ENABLE([console], AS_HELP_STRING([--disable-console], [disable console]))
187AM_CONDITIONAL([CY_CONSOLE], [test "x$enable_console" != "xno"])
188
a4287117
JF
189AC_ARG_ENABLE([attach], AS_HELP_STRING([--disable-attach], [disable attach]))
190AM_CONDITIONAL([CY_ATTACH], [test "x$enable_attach" != "xno" -a "x$CY_EXECUTE" = x1])
191
e5cca37d 192AC_DEFUN([CY_CHECK_PKG_CONFIG_LIBFFI], [
66170b30 193 PKG_CHECK_MODULES([LIBFFI], [libffi], [
d70419f1 194 AC_LIB_APPENDTOVAR([CPPFLAGS], [`$PKG_CONFIG --cflags libffi`])
66170b30
JF
195 AC_LIB_APPENDTOVAR([LIBS], [`$PKG_CONFIG --libs libffi`])
196 ], [AC_MSG_ERROR([missing "libffi"])])])
197
a243b558
JF
198AM_CONDITIONAL([CY_EXECUTE], [test "x$CY_EXECUTE" = x1])
199
8d20f0f1
JF
200if test "x$CY_SYSTEM" = x; then CY_SYSTEM=1; fi
201AC_SUBST([CY_SYSTEM])
202
e5cca37d 203AS_CASE([$CY_EXECUTE], [1], [
ae1b611e
JF
204 CY_LT_LIB([LTLIBUV], [AC_CHECK_HEADERS([uv.h], [
205 AC_SEARCH_LIBS([uv_loop_init], [uv])
206 ])])
207
8d20f0f1 208 CY_LT_LIB([LTLIBSQLITE3], [AC_CHECK_HEADERS([sqlite3.h], [
e2ce853b 209 AC_SEARCH_LIBS([sqlite3_open_v2], [sqlite3 sqlite])
8d20f0f1
JF
210 ])])
211
66170b30 212 AC_CHECK_HEADERS([ffi.h ffi/ffi.h], [break])
e71ad079 213
574d4720 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])
574d4720
JF
219 AC_CHECK_FUNCS([ffi_prep_cif_var])
220 ])])
66170b30 221
4930f387 222 CY_LT_LIB([LTJAVA], [AC_CHECK_FRAMEWORK([JavaVM], [
def90846
JF
223 #include <JavaVM/jni.h>
224 ], [JNI_GetCreatedJavaVMs(NULL, 0, NULL);], [
225 AC_SUBST([CY_JAVA], [1])
226 ], [AC_CHECK_HEADER([jni.h], [
39ed1631 227 AC_SUBST([CY_JAVA], [1])
39ed1631
JF
228 ], [
229 AC_SUBST([CY_JAVA], [0])
4930f387 230 ])])])
39ed1631 231
3b531dd5
JF
232 CY_LT_LIB([LTRUBY], [PKG_CHECK_MODULES([LIBRUBY21], [ruby-2.1], [
233 AC_SUBST([CY_RUBY], [1])
234 AC_LIB_APPENDTOVAR([CPPFLAGS], [`$PKG_CONFIG --cflags ruby-2.1`])
235 AC_LIB_APPENDTOVAR([LIBS], [`$PKG_CONFIG --libs ruby-2.1`])
236 ], [AC_CHECK_FRAMEWORK([Ruby], [
5f29ae16
JF
237 #include <Ruby/ruby.h>
238 ], [ruby_init();], [
239 AC_SUBST([CY_RUBY], [1])
240 ], [AC_CHECK_HEADERS([ruby.h], [
241 AC_SUBST([CY_RUBY], [1])
4930f387
JF
242 AC_SEARCH_LIBS([ruby_init], [ruby], [
243 ])
5f29ae16
JF
244 ], [
245 AC_SUBST([CY_RUBY], [0])
3b531dd5 246 ])])])])
5f29ae16 247
591b913e
JF
248 AC_ARG_WITH([python], AS_HELP_STRING([--with-python], [support python (pass the path to python-config)]), [], [with_python=no])
249
250 AS_IF([test "x$with_python" != "xno"], [
251 AC_SUBST([CY_PYTHON], [1])
252 CY_LT_LIB([LTPYTHON], [
253 AC_LIB_APPENDTOVAR([CPPFLAGS], [`$with_python --includes`])
254 AC_LIB_APPENDTOVAR([LIBS], [`$with_python --ldflags`])
255 ])
256 ], [
257 AC_SUBST([CY_PYTHON], [0])
258 ])
259
260 AM_CONDITIONAL([CY_PRELINK], [test "x$with_python" != "xno"])
261
66170b30
JF
262 AC_LANG_PUSH([Objective C++])
263
264 AC_MSG_CHECKING([if we really have Objective C++])
265 AC_COMPILE_IFELSE([AC_LANG_SOURCE([])], [
266 CY_OBJECTIVEC=1
267 AC_MSG_RESULT([yes])
268 ], [AC_MSG_RESULT([no])])
269
270 AS_IF([test "x$CY_OBJECTIVEC" = x1], [
604ed881 271 CY_LT_LIB([LTOBJECTIVEC], [AC_CHECK_FRAMEWORK([CoreFoundation], [
66170b30
JF
272 #include <CoreFoundation/CFBase.h>
273 ], [CFAllocatorGetDefault();], [
e2ce853b 274 AC_SUBST([CY_OBJECTIVEC], [1])
66170b30
JF
275
276 AC_CHECK_FRAMEWORK([Foundation], [
277 #include <Foundation/NSObject.h>
278 ], [[[[NSObject alloc] init];]])
66170b30
JF
279 ], [
280 AC_ARG_VAR([GNUSTEP_CONFIG], [prints information about the current gnustep installation])
281 AC_CHECK_PROGS([GNUSTEP_CONFIG], [gnustep-config])
282
283 AS_IF([test "x$GNUSTEP_CONFIG" != x], [
e2ce853b 284 AC_SUBST([CY_OBJECTIVEC], [1])
66170b30
JF
285 AC_LIB_APPENDTOVAR([OBJCXXFLAGS], [`$GNUSTEP_CONFIG --objc-flags`])
286 AC_LIB_APPENDTOVAR([LIBS], [`$GNUSTEP_CONFIG --base-libs`])
287 ], [AC_SUBST([CY_OBJECTIVEC], [0])])
604ed881 288 ])])
e2ce853b
JF
289 ], [
290 AC_SUBST([CY_OBJECTIVEC], [0])
66170b30
JF
291 ])
292
293 AC_LANG_POP([Objective C++])
3fd51f51 294])
66170b30 295
39ed1631 296AM_CONDITIONAL([CY_JAVA], [test "x$CY_JAVA" = x1])
5f29ae16 297AM_CONDITIONAL([CY_RUBY], [test "x$CY_RUBY" = x1])
591b913e 298AM_CONDITIONAL([CY_PYTHON], [test "x$CY_PYTHON" = x1])
a243b558
JF
299AM_CONDITIONAL([CY_OBJECTIVEC], [test "x$CY_OBJECTIVEC" = x1])
300
cb7b4fad
JF
301AC_COMPILE_IFELSE([AC_LANG_SOURCE([
302#ifndef __ANDROID__
303#error
304#endif
305])], [
306 AC_SUBST([CY_ANDROID], [1])
307], [
308 AC_SUBST([CY_ANDROID], [0])
309])
310
311AM_CONDITIONAL([CY_ANDROID], [test "x$CY_ANDROID" = x1])
312
8d20f0f1
JF
313AC_ARG_WITH([libclang], AS_HELP_STRING([--with-libclang], [build bridge definitions using this libclang]), [], [with_libclang=no])
314
315AS_IF([test "x$with_libclang" != "xno"], [
316 AC_SUBST([CY_LIBCLANG], ["$with_libclang"])])
317AM_CONDITIONAL([CY_PRELINK], [test "x$with_libclang" != "xno"])
318
6f9aea2b
JF
319CY_LT_LIB([LTLIBREADLINE], [AX_LIB_READLINE])
320AS_CASE([$ax_cv_lib_readline], [no], [AC_MSG_ERROR([missing "libreadline"])])
66170b30 321
b5437404 322CY_LT_LIB([LTLIBTERMCAP], [AC_SEARCH_LIBS([cur_term], [termcap ncurses])])
a243b558 323
3615a2f7
JF
324AC_SUBST([LTLIBGCC])
325
66170b30 326AC_SUBST([LTFLAGS])
9777bd50 327AC_SUBST([SO], [$acl_shlibext])
66170b30 328
a243b558 329AC_CONFIG_FILES([Makefile])
9c60689e 330AC_OUTPUT