]> git.saurik.com Git - cycript.git/blame - configure.ac
Linux requires AX_PTHREAD to autodetect -lpthread.
[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
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
ff6daad2
JF
96AC_DEFUN([CY_TEST_FLAG_], [
97 AC_LANG_PUSH(]$2[)
98 AC_MSG_CHECKING([for ]]$4[[ ]]$1[)
99 CY_TRY(]$3[, $1, [
66170b30
JF
100 AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
101 [CY_SUCCESS], [CY_FAILURE])
102 ], [
103 AC_MSG_RESULT([yes])
ff6daad2 104 AC_LIB_APPENDTOVAR(]$3[, ]$1[)
66170b30 105 ], [AC_MSG_RESULT([no])])
ff6daad2
JF
106 AC_LANG_POP(]$2[)
107])
108
109AC_DEFUN([CY_TEST_FLAG], [
110 CY_TEST_FLAG_(]$1[, [C], [CFLAGS], [cc])
111 CY_TEST_FLAG_(]$1[, [C++], [CXXFLAGS], [c++])
5a288ada 112 CY_TEST_FLAG_(]$1[, [Objective C++], [OBJCXXFLAGS], [c++ -ObjC])
66170b30
JF
113])
114
115AX_CFLAGS_WARN_ALL
116AX_CXXFLAGS_WARN_ALL
90b4fa6b 117AX_FLAGS_WARN_ALL
66170b30 118
4fc6e20e
JF
119CY_TEST_FLAG([-Werror])
120
a69dc826
JF
121dnl XXX: this is used to support GNU Objective-C struct objc_method
122CY_TEST_FLAG([-Wno-deprecated-declarations])
123
0cfdb323 124CY_TEST_FLAG([-Wno-dangling-else])
66170b30
JF
125CY_TEST_FLAG([-Wno-overloaded-virtual])
126CY_TEST_FLAG([-Wno-parentheses])
127CY_TEST_FLAG([-Wno-unneeded-internal-declaration])
128
be2fde87
JF
129AX_PTHREAD
130
e71ad079
JF
131AC_DEFUN([CY_LT_LIB], [
132 cy_save=$LIBS
133 LIBS=
134 ]$2[
135 ]$1[=$LIBS
136 LIBS=$cy_save
137 AC_SUBST(]$1[)
138])
139
abc804fa 140dnl -arch * {{{
3615a2f7 141for cy_arch in ppc ppc64 i386 x86_64 armv6 arm64; do
abc804fa
JF
142 AC_MSG_CHECKING([for -arch $cy_arch])
143 CY_TRY([CXXFLAGS], ["-arch $cy_arch"], [
144 AC_TRY_LINK([], [], [CY_SUCCESS], [CY_FAILURE])
145 ], [
146 AC_MSG_RESULT([yes])
147 AC_LIB_APPENDTOVAR([CY_ARCH], ["-arch $cy_arch"])
148 ], [AC_MSG_RESULT([no])])
149done
150AC_SUBST([CY_ARCH])
151dnl }}}
152
66170b30 153dnl --enable-javascript {{{
b66977f1 154AC_DEFUN([CY_CHECK_JAVASCRIPTCORE], [
9918a0fa
JF
155 CY_LT_LIB([LTJAVASCRIPTCORE], [AC_SEARCH_LIBS([JSEvaluateScript], [JavaScriptCore], [
156 AC_SUBST([CY_EXECUTE], [1])
157 ], [AC_CHECK_FRAMEWORK([JavaScriptCore], [
4a762893
JF
158 #include <JavaScriptCore/JSBase.h>
159 ], [
160 JSEvaluateScript(0, 0, 0, 0, 0, 0);
161 ], [
66170b30 162 AC_SUBST([CY_EXECUTE], [1])
66170b30 163 ], [
4a762893
JF
164 for cy_webkit_pkg in "webkit-1.0" "WebKitGtk"; do
165 PKG_CHECK_MODULES([WEBKIT], [$cy_webkit_pkg], [
66170b30 166 AC_SUBST([CY_EXECUTE], [1])
d70419f1 167 AC_LIB_APPENDTOVAR([CPPFLAGS], [`$PKG_CONFIG --cflags $cy_webkit_pkg`])
4a762893
JF
168 AC_LIB_APPENDTOVAR([LIBS], [`$PKG_CONFIG --libs $cy_webkit_pkg`])
169 ], [:]); if test "x$CY_EXECUTE" = x1; then break; fi
170 done
9918a0fa 171 ])])])
35fa52c0 172])
66170b30 173
b66977f1 174AC_DEFUN([CY_CHECK_JAVASCRIPT], [
66170b30
JF
175 CY_CHECK_JAVASCRIPTCORE])
176
b66977f1 177AC_ARG_ENABLE([javascript], [AS_HELP_STRING(
66170b30
JF
178 [--enable-javascript@<:@=ENGINE@:>@],
179 [use a JavaScript runtime (currently the only available option for ENGINE is JavaScriptCore) @<:@default=yes@:>@]
b66977f1 180)], [
66170b30
JF
181 AS_CASE([$enableval],
182 [yes], [
183 CY_CHECK_JAVASCRIPT],
184 [no], [
185 AC_SUBST([CY_EXECUTE], [0])],
186 [JavaScriptCore], [
187 CY_CHECK_JAVASCRIPTCORE],
188 [AC_MSG_ERROR([Unknown JavaScript engine: $enableval])])
b66977f1 189], [CY_CHECK_JAVASCRIPT])
66170b30
JF
190dnl }}}
191
002ca3d9
JF
192AC_ARG_ENABLE([console], AS_HELP_STRING([--disable-console], [disable console]))
193AM_CONDITIONAL([CY_CONSOLE], [test "x$enable_console" != "xno"])
194
e5cca37d 195AC_DEFUN([CY_CHECK_PKG_CONFIG_LIBFFI], [
66170b30 196 PKG_CHECK_MODULES([LIBFFI], [libffi], [
d70419f1 197 AC_LIB_APPENDTOVAR([CPPFLAGS], [`$PKG_CONFIG --cflags libffi`])
66170b30
JF
198 AC_LIB_APPENDTOVAR([LIBS], [`$PKG_CONFIG --libs libffi`])
199 ], [AC_MSG_ERROR([missing "libffi"])])])
200
a243b558
JF
201AM_CONDITIONAL([CY_EXECUTE], [test "x$CY_EXECUTE" = x1])
202
e5cca37d 203AS_CASE([$CY_EXECUTE], [1], [
66170b30 204 AC_CHECK_HEADERS([ffi.h ffi/ffi.h], [break])
e71ad079
JF
205
206 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
207 CY_CHECK_PKG_CONFIG_LIBFFI
208 ], [
209 AC_SEARCH_LIBS([ffi_call], [ffi])
210 AS_CASE([$ac_cv_search_ffi_call], [no], [CY_CHECK_PKG_CONFIG_LIBFFI])
e71ad079 211 ]))
66170b30 212
39ed1631
JF
213 AC_CHECK_HEADER([jni.h], [
214 AC_SUBST([CY_JAVA], [1])
215 CY_LT_LIB([LTJAVA], [AC_SEARCH_LIBS([JNI_GetCreatedJavaVMs], [dvm], [
216 ])])
217 ], [
218 AC_SUBST([CY_JAVA], [0])
219 ])
220
66170b30
JF
221 AC_LANG_PUSH([Objective C++])
222
223 AC_MSG_CHECKING([if we really have Objective C++])
224 AC_COMPILE_IFELSE([AC_LANG_SOURCE([])], [
225 CY_OBJECTIVEC=1
226 AC_MSG_RESULT([yes])
227 ], [AC_MSG_RESULT([no])])
228
229 AS_IF([test "x$CY_OBJECTIVEC" = x1], [
604ed881 230 CY_LT_LIB([LTOBJECTIVEC], [AC_CHECK_FRAMEWORK([CoreFoundation], [
66170b30
JF
231 #include <CoreFoundation/CFBase.h>
232 ], [CFAllocatorGetDefault();], [
233 AC_SUBST([CY_OBJECTIVEC])
234
235 AC_CHECK_FRAMEWORK([Foundation], [
236 #include <Foundation/NSObject.h>
237 ], [[[[NSObject alloc] init];]])
66170b30
JF
238 ], [
239 AC_ARG_VAR([GNUSTEP_CONFIG], [prints information about the current gnustep installation])
240 AC_CHECK_PROGS([GNUSTEP_CONFIG], [gnustep-config])
241
242 AS_IF([test "x$GNUSTEP_CONFIG" != x], [
243 AC_SUBST([CY_OBJECTIVEC])
244 AC_LIB_APPENDTOVAR([OBJCXXFLAGS], [`$GNUSTEP_CONFIG --objc-flags`])
245 AC_LIB_APPENDTOVAR([LIBS], [`$GNUSTEP_CONFIG --base-libs`])
246 ], [AC_SUBST([CY_OBJECTIVEC], [0])])
604ed881 247 ])])
66170b30
JF
248 ])
249
250 AC_LANG_POP([Objective C++])
3fd51f51 251])
66170b30 252
39ed1631 253AM_CONDITIONAL([CY_JAVA], [test "x$CY_JAVA" = x1])
a243b558
JF
254AM_CONDITIONAL([CY_OBJECTIVEC], [test "x$CY_OBJECTIVEC" = x1])
255
6f9aea2b
JF
256CY_LT_LIB([LTLIBREADLINE], [AX_LIB_READLINE])
257AS_CASE([$ax_cv_lib_readline], [no], [AC_MSG_ERROR([missing "libreadline"])])
66170b30 258
b5437404 259CY_LT_LIB([LTLIBTERMCAP], [AC_SEARCH_LIBS([cur_term], [termcap ncurses])])
a243b558 260
3615a2f7
JF
261AC_SUBST([LTLIBGCC])
262
66170b30 263AC_SUBST([LTFLAGS])
9777bd50 264AC_SUBST([SO], [$acl_shlibext])
66170b30 265
1f11d1b4
JF
266AS_IF([test "x$CY_EXECUTE" = x1], [
267 AC_CHECK_HEADER([mach/mach.h], [
268 AC_CHECK_TOOLS([_LIPO], [lipo], [AC_MSG_ERROR([missing "lipo"])])
269 AC_CHECK_TOOLS([_NM], [nm], [AC_MSG_ERROR([missing "nm"])])
270 AC_CHECK_TOOLS([_OTOOL], [otool], [AC_MSG_ERROR([missing "otool"])])
271 AC_SUBST([CY_ATTACH_GROUP], [procmod])
272 AC_SUBST([CY_MACH], [1])])])
a243b558 273AM_CONDITIONAL([CY_MACH], [test "x$CY_MACH" = x1])
66170b30 274
a243b558 275AC_CONFIG_FILES([Makefile])
9c60689e 276AC_OUTPUT