]> git.saurik.com Git - cycript.git/blame - configure.ac
Move lexer hacks for ++ and -- to LexCrement rule.
[cycript.git] / configure.ac
CommitLineData
c15969fd 1dnl Cycript - Optimizing JavaScript Compiler/Runtime
c1d3e52e 2dnl Copyright (C) 2009-2015 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/])
c1d3e52e 22AC_COPYRIGHT([Copyright (C) 2009-2015 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
1771224f
JF
43AX_CXX_COMPILE_STDCXX_11([ext], [mandatory])
44OBJCXXFLAGS="${OBJCXXFLAGS} ${CXXFLAGS##*' '}"
45
3fd51f51 46PKG_PROG_PKG_CONFIG([0.22])
66170b30 47
66170b30
JF
48AC_PATH_PROG([GIT], [git])
49AC_PATH_PROG([TIME], [time])
50
51dnl CY_CHECK_PROGS_VERSION {{{
e9c9a47c 52AC_DEFUN([CY_CHECK_PROGS_VERSION], [
66170b30
JF
53 AC_ARG_VAR(]$1[, ]$3[)
54
55 AC_MSG_CHECKING(for ]$2[ >= ]$5[)
56 AC_PATH_PROGS_FEATURE_CHECK(]$1[, ]$2[,
57 AS_VAR_SET(version, [`$ac_path_]$1[ ]$4[`])
58 AS_VAR_IF(version, [], ,
59 AS_VERSION_COMPARE($version, ]$5[, ,
60 ac_cv_path_]$1[=$ac_path_]$1[,
61 ac_cv_path_]$1[=$ac_path_]$1[))
62 , AC_MSG_RESULT(no))
63
64 AS_IF([true], [
65 AC_SUBST(]$1[, $ac_cv_path_]$1[)
66 AC_MSG_RESULT($]$1[)
67 ], AS_IF([true], [
68 AC_MSG_ERROR(You need ]$2[ ]$5[ or greater)
69 ], [
70 AC_SUBST(]$1[, [:])
71 AC_MSG_RESULT([no])
72 ]))
73]) dnl }}}
74
75CY_CHECK_PROGS_VERSION([BISON], [bison], [GNU Project parser generator (yacc replacement)],
6ce9ac92 76 [-V | $SED -e '1 s/^bison (GNU Bison) \(.*\)$/\1/p;d'], [3.0])
66170b30
JF
77CY_CHECK_PROGS_VERSION([FLEX], [flex], [the fast lexical analyser generator],
78 [--version | $SED -e '1 s/^@<:@^0-9.@:>@* \(@<:@0-9.@:>@*\).*$/\1/p;d'], [2.5.33])
79CY_CHECK_PROGS_VERSION([GPERF], [gperf], [perfect hash function generator],
80 [--version | $SED -e '1 s/^.* \(@<:@0-9.@:>@*\)$/\1/p;d'], [3.0.3])
81CY_CHECK_PROGS_VERSION([GNUTAR], [tar gtar gnutar], [a very sticky lump of files],
82 [--version | $SED -e '1 s/^tar (GNU tar) \(.*\)$/\1/p;d'], [1.19])
83
66170b30
JF
84dnl CY_TRY {{{
85AC_DEFUN([CY_SUCCESS], [cy_good=1])
86AC_DEFUN([CY_FAILURE], [cy_good=0])
87
88AC_DEFUN([CY_TRY], [
89 cy_save=$]$1[
90 AC_LIB_APPENDTOVAR(]$1[, ]$2[)
91 ]$3[
92 ]$1[=$cy_save
93 AS_IF([test "x$cy_good" = x1], ]$4[, ]$5[)
94]) dnl }}}
95
77578fdd
JF
96AC_ARG_VAR([LFLAGS], [flex flags])
97AS_IF([test "x$LFLAGS" = x], [LFLAGS="--full --ecs"])
98
ff6daad2
JF
99AC_DEFUN([CY_TEST_FLAG_], [
100 AC_LANG_PUSH(]$2[)
101 AC_MSG_CHECKING([for ]]$4[[ ]]$1[)
102 CY_TRY(]$3[, $1, [
66170b30
JF
103 AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
104 [CY_SUCCESS], [CY_FAILURE])
105 ], [
106 AC_MSG_RESULT([yes])
ff6daad2 107 AC_LIB_APPENDTOVAR(]$3[, ]$1[)
66170b30 108 ], [AC_MSG_RESULT([no])])
ff6daad2
JF
109 AC_LANG_POP(]$2[)
110])
111
112AC_DEFUN([CY_TEST_FLAG], [
113 CY_TEST_FLAG_(]$1[, [C], [CFLAGS], [cc])
114 CY_TEST_FLAG_(]$1[, [C++], [CXXFLAGS], [c++])
5a288ada 115 CY_TEST_FLAG_(]$1[, [Objective C++], [OBJCXXFLAGS], [c++ -ObjC])
66170b30
JF
116])
117
118AX_CFLAGS_WARN_ALL
119AX_CXXFLAGS_WARN_ALL
90b4fa6b 120AX_FLAGS_WARN_ALL
66170b30 121
4fc6e20e
JF
122CY_TEST_FLAG([-Werror])
123
a69dc826
JF
124dnl XXX: this is used to support GNU Objective-C struct objc_method
125CY_TEST_FLAG([-Wno-deprecated-declarations])
126
0cfdb323 127CY_TEST_FLAG([-Wno-dangling-else])
2ada0541 128CY_TEST_FLAG([-Wno-empty-body])
66170b30
JF
129CY_TEST_FLAG([-Wno-overloaded-virtual])
130CY_TEST_FLAG([-Wno-parentheses])
2ada0541 131CY_TEST_FLAG([-Wno-tautological-undefined-compare])
66170b30
JF
132CY_TEST_FLAG([-Wno-unneeded-internal-declaration])
133
be2fde87
JF
134AX_PTHREAD
135
e71ad079
JF
136AC_DEFUN([CY_LT_LIB], [
137 cy_save=$LIBS
138 LIBS=
139 ]$2[
140 ]$1[=$LIBS
141 LIBS=$cy_save
142 AC_SUBST(]$1[)
143])
144
66170b30 145dnl --enable-javascript {{{
b66977f1 146AC_DEFUN([CY_CHECK_JAVASCRIPTCORE], [
9918a0fa
JF
147 CY_LT_LIB([LTJAVASCRIPTCORE], [AC_SEARCH_LIBS([JSEvaluateScript], [JavaScriptCore], [
148 AC_SUBST([CY_EXECUTE], [1])
149 ], [AC_CHECK_FRAMEWORK([JavaScriptCore], [
4a762893
JF
150 #include <JavaScriptCore/JSBase.h>
151 ], [
152 JSEvaluateScript(0, 0, 0, 0, 0, 0);
153 ], [
66170b30 154 AC_SUBST([CY_EXECUTE], [1])
66170b30 155 ], [
ccb4e34c 156 for cy_webkit_pkg in "javascriptcoregtk-4.0"; do
4a762893 157 PKG_CHECK_MODULES([WEBKIT], [$cy_webkit_pkg], [
66170b30 158 AC_SUBST([CY_EXECUTE], [1])
d70419f1 159 AC_LIB_APPENDTOVAR([CPPFLAGS], [`$PKG_CONFIG --cflags $cy_webkit_pkg`])
4a762893
JF
160 AC_LIB_APPENDTOVAR([LIBS], [`$PKG_CONFIG --libs $cy_webkit_pkg`])
161 ], [:]); if test "x$CY_EXECUTE" = x1; then break; fi
162 done
9918a0fa 163 ])])])
35fa52c0 164])
66170b30 165
b66977f1 166AC_DEFUN([CY_CHECK_JAVASCRIPT], [
66170b30
JF
167 CY_CHECK_JAVASCRIPTCORE])
168
b66977f1 169AC_ARG_ENABLE([javascript], [AS_HELP_STRING(
66170b30
JF
170 [--enable-javascript@<:@=ENGINE@:>@],
171 [use a JavaScript runtime (currently the only available option for ENGINE is JavaScriptCore) @<:@default=yes@:>@]
b66977f1 172)], [
66170b30
JF
173 AS_CASE([$enableval],
174 [yes], [
175 CY_CHECK_JAVASCRIPT],
176 [no], [
177 AC_SUBST([CY_EXECUTE], [0])],
178 [JavaScriptCore], [
179 CY_CHECK_JAVASCRIPTCORE],
180 [AC_MSG_ERROR([Unknown JavaScript engine: $enableval])])
b66977f1 181], [CY_CHECK_JAVASCRIPT])
66170b30
JF
182dnl }}}
183
002ca3d9
JF
184AC_ARG_ENABLE([console], AS_HELP_STRING([--disable-console], [disable console]))
185AM_CONDITIONAL([CY_CONSOLE], [test "x$enable_console" != "xno"])
186
a4287117
JF
187AC_ARG_ENABLE([attach], AS_HELP_STRING([--disable-attach], [disable attach]))
188AM_CONDITIONAL([CY_ATTACH], [test "x$enable_attach" != "xno" -a "x$CY_EXECUTE" = x1])
189
e5cca37d 190AC_DEFUN([CY_CHECK_PKG_CONFIG_LIBFFI], [
66170b30 191 PKG_CHECK_MODULES([LIBFFI], [libffi], [
d70419f1 192 AC_LIB_APPENDTOVAR([CPPFLAGS], [`$PKG_CONFIG --cflags libffi`])
66170b30
JF
193 AC_LIB_APPENDTOVAR([LIBS], [`$PKG_CONFIG --libs libffi`])
194 ], [AC_MSG_ERROR([missing "libffi"])])])
195
a243b558
JF
196AM_CONDITIONAL([CY_EXECUTE], [test "x$CY_EXECUTE" = x1])
197
e5cca37d 198AS_CASE([$CY_EXECUTE], [1], [
ae1b611e
JF
199 CY_LT_LIB([LTLIBUV], [AC_CHECK_HEADERS([uv.h], [
200 AC_SEARCH_LIBS([uv_loop_init], [uv])
201 ])])
202
66170b30 203 AC_CHECK_HEADERS([ffi.h ffi/ffi.h], [break])
e71ad079
JF
204
205 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
206 CY_CHECK_PKG_CONFIG_LIBFFI
207 ], [
208 AC_SEARCH_LIBS([ffi_call], [ffi])
209 AS_CASE([$ac_cv_search_ffi_call], [no], [CY_CHECK_PKG_CONFIG_LIBFFI])
e71ad079 210 ]))
66170b30 211
def90846
JF
212 AC_CHECK_FRAMEWORK([JavaVM], [
213 #include <JavaVM/jni.h>
214 ], [JNI_GetCreatedJavaVMs(NULL, 0, NULL);], [
215 AC_SUBST([CY_JAVA], [1])
216 ], [AC_CHECK_HEADER([jni.h], [
39ed1631
JF
217 AC_SUBST([CY_JAVA], [1])
218 CY_LT_LIB([LTJAVA], [AC_SEARCH_LIBS([JNI_GetCreatedJavaVMs], [dvm], [
219 ])])
220 ], [
221 AC_SUBST([CY_JAVA], [0])
def90846 222 ])])
39ed1631 223
66170b30
JF
224 AC_LANG_PUSH([Objective C++])
225
226 AC_MSG_CHECKING([if we really have Objective C++])
227 AC_COMPILE_IFELSE([AC_LANG_SOURCE([])], [
228 CY_OBJECTIVEC=1
229 AC_MSG_RESULT([yes])
230 ], [AC_MSG_RESULT([no])])
231
232 AS_IF([test "x$CY_OBJECTIVEC" = x1], [
604ed881 233 CY_LT_LIB([LTOBJECTIVEC], [AC_CHECK_FRAMEWORK([CoreFoundation], [
66170b30
JF
234 #include <CoreFoundation/CFBase.h>
235 ], [CFAllocatorGetDefault();], [
236 AC_SUBST([CY_OBJECTIVEC])
237
238 AC_CHECK_FRAMEWORK([Foundation], [
239 #include <Foundation/NSObject.h>
240 ], [[[[NSObject alloc] init];]])
66170b30
JF
241 ], [
242 AC_ARG_VAR([GNUSTEP_CONFIG], [prints information about the current gnustep installation])
243 AC_CHECK_PROGS([GNUSTEP_CONFIG], [gnustep-config])
244
245 AS_IF([test "x$GNUSTEP_CONFIG" != x], [
246 AC_SUBST([CY_OBJECTIVEC])
247 AC_LIB_APPENDTOVAR([OBJCXXFLAGS], [`$GNUSTEP_CONFIG --objc-flags`])
248 AC_LIB_APPENDTOVAR([LIBS], [`$GNUSTEP_CONFIG --base-libs`])
249 ], [AC_SUBST([CY_OBJECTIVEC], [0])])
604ed881 250 ])])
66170b30
JF
251 ])
252
253 AC_LANG_POP([Objective C++])
3fd51f51 254])
66170b30 255
39ed1631 256AM_CONDITIONAL([CY_JAVA], [test "x$CY_JAVA" = x1])
a243b558
JF
257AM_CONDITIONAL([CY_OBJECTIVEC], [test "x$CY_OBJECTIVEC" = x1])
258
6f9aea2b
JF
259CY_LT_LIB([LTLIBREADLINE], [AX_LIB_READLINE])
260AS_CASE([$ax_cv_lib_readline], [no], [AC_MSG_ERROR([missing "libreadline"])])
66170b30 261
b5437404 262CY_LT_LIB([LTLIBTERMCAP], [AC_SEARCH_LIBS([cur_term], [termcap ncurses])])
a243b558 263
3615a2f7
JF
264AC_SUBST([LTLIBGCC])
265
66170b30 266AC_SUBST([LTFLAGS])
9777bd50 267AC_SUBST([SO], [$acl_shlibext])
66170b30 268
a243b558 269AC_CONFIG_FILES([Makefile])
9c60689e 270AC_OUTPUT