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