3 AC_SUBST(OBJC_RUNTIME_FLAG)
4 AC_SUBST(BROKEN_COMPILER)
5 AC_SUBST(BROKEN_BUILTIN_APPLY)
6 AC_SUBST(NO_NESTED_FUNCTIONS)
10 AC_SUBST(HOST_VENDOR)dnl
13 AC_SUBST(TARGET_CPU)dnl
14 AC_SUBST(TARGET_VENDOR)dnl
15 AC_SUBST(TARGET_OS)dnl
16 AC_SUBST(STRUCT_ALIGNMENT)dnl
19 AC_DEFUN(AC_LANG_OBJECTIVE_C,
20 [AC_REQUIRE([AC_PROG_CC])dnl
21 define([AC_LANG], [AC_LANG_OBJECTIVE_C])dnl
24 for i in $LD_LIBRARY_PATH
26 LDFLAGS="-L$i $LDFLAGS"
31 # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
32 ac_cpp='$CPP $OBJC_RUNTIME_FLAG'
33 ac_compile='${CC-cc} -c $OBJC_RUNTIME_FLAG $CFLAGS conftest.$ac_ext 1>&AC_FD_CC 2>&AC_FD_CC'
34 ac_link='${CC-cc} -o conftest $OBJC_RUNTIME_FLAG $CFLAGS $LDFLAGS conftest.$ac_ext $LIBS $OBJC_LIBS 1>&AC_FD_CC 2>&AC_FD_CC'
38 AC_DEFUN(AC_CHECK_NESTED_FUNCTIONS,
39 [AC_REQUIRE([AC_PROG_CC])dnl
40 AC_MSG_CHECKING(whether nested functions work)
41 AC_CACHE_VAL(ac_cv_nested_functions,
63 ], ac_cv_nested_functions=yes, ac_cv_nested_functions=no,
64 ac_cv_nested_functions=yes)
67 AC_MSG_RESULT(${ac_cv_nested_functions})
68 NO_NESTED_FUNCTIONS=no
69 if test $ac_cv_nested_functions = no; then
70 AC_DEFINE(NO_NESTED_FUNCTIONS)
71 NO_NESTED_FUNCTIONS=yes
76 AC_DEFUN(AC_BROKEN_COMPILER,
77 [AC_REQUIRE([AC_PROG_CC])dnl
78 AC_MSG_CHECKING(if the Objective-C compiler crashes with nested functions)
79 AC_CACHE_VAL(ac_cv_broken_compiler,
83 #include <objc/objc.h>
84 #include <objc/Object.h>
116 ], ac_cv_broken_compiler=no,
117 ac_cv_broken_compiler=yes,
118 ac_cv_broken_compiler=no)
121 BROKEN_COMPILER=${ac_cv_broken_compiler}
122 if test ${ac_cv_nested_functions} = no -o ${ac_cv_broken_compiler} = yes; then
123 ac_cv_broken_compiler=yes;
125 AC_DEFINE(BROKEN_COMPILER)
127 AC_MSG_RESULT(${ac_cv_broken_compiler})
131 AC_DEFUN(AC_BROKEN_BUILTIN_APPLY,
132 [AC_REQUIRE([AC_PROG_CC])dnl
133 AC_MSG_CHECKING(whether __builtin_apply and __builtin_return are broken)
134 AC_CACHE_VAL(ac_cv_broken_builtin_apply,
136 AC_LANG_OBJECTIVE_C[]
138 #include <objc/Object.h>
140 float value = 123.456;
142 @interface MyObject : Object
145 @implementation MyObject
152 @interface Forwarder : Object
158 @implementation Forwarder
165 - (void*)forward:(SEL)selector:(void*)argframe
167 IMP imp = [object methodFor:@selector(floatValue)];
169 void* frame = malloc(116);
170 *(void**)frame = NULL;
171 retframe = __builtin_apply((void(*)(void))imp, frame, 0);
172 if(*(long double*)(((char*)retframe) + 8) == (long double)value)
180 id fwd = [[[Forwarder alloc] init] setObject:[MyObject alloc]];
183 return 0; // keep compiler happy
185 ], ac_cv_broken_builtin_apply=no,
186 ac_cv_broken_builtin_apply=yes,
187 ac_cv_broken_builtin_apply=no)
190 AC_MSG_RESULT(${ac_cv_broken_builtin_apply})
191 BROKEN_BUILTIN_APPLY=${ac_cv_broken_builtin_apply}
192 if test $BROKEN_BUILTIN_APPLY = yes; then
193 AC_DEFINE(BROKEN_BUILTIN_APPLY)
198 AC_DEFUN(AC_CHECK_MATH_LIB,
199 [AC_REQUIRE([AC_PROG_CC])dnl
200 dnl temporary rename AC_MSG_RESULT to do nothing
201 define(old_AC_MSG_RESULT, defn([AC_MSG_RESULT]))dnl
202 define([AC_MSG_RESULT],)dnl
203 AC_CHECK_FUNC(sqrt, ,
204 [dnl On linux, to link a program that use math functions we must link with libm.a
210 ], ac_cv_func_sqrt="-lm -lc")
212 define([AC_MSG_RESULT], defn([old_AC_MSG_RESULT]))dnl
213 undefine([old_AC_MSG_RESULT])dnl
214 AC_MSG_RESULT($ac_cv_func_sqrt)
218 AC_DEFUN(AC_STRUCT_ALIGNMENT,
219 [AC_REQUIRE([AC_PROG_CC])dnl
220 AC_MSG_CHECKING(for the C structures alignment)
221 AC_CACHE_VAL(ac_cv_struct_alignment,
222 [AC_TRY_RUN([#include <stdio.h>
229 int struct_alignment = __alignof__ (simple1);
233 FILE *f=fopen("conftestval", "w");
235 fprintf(f, "%u\n", struct_alignment);
238 ], ac_cv_struct_alignment=`cat conftestval`,
239 ac_cv_struct_alignment=0,
240 ifelse([$2], , , ac_cv_struct_alignment=$2))])dnl
241 AC_MSG_RESULT($ac_cv_struct_alignment)
242 STRUCT_ALIGNMENT=$ac_cv_struct_alignment
246 AC_DEFUN(AC_COMPILE_CHECK_SIZEOF,
247 [changequote(<<, >>)dnl
248 dnl The name to #define.
249 define(<<AC_TYPE_NAME>>, translit(sizeof_$1, [a-z *], [A-Z_P]))dnl
250 dnl The cache variable name.
251 define(<<AC_CV_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
253 AC_MSG_CHECKING(size of $1)
254 AC_CACHE_VAL(AC_CV_NAME,
255 [for ac_size in 4 8 1 2 16 $2 ; do # List sizes in rough order of prevalence.
256 AC_TRY_COMPILE([#include "confdefs.h"
257 #include <sys/types.h>
259 ], [switch (0) case 0: case (sizeof ($1) == $ac_size):;], AC_CV_NAME=$ac_size)
260 if test x$AC_CV_NAME != x ; then break; fi
263 if test x$AC_CV_NAME = x ; then
264 echo "cannot determine a size for $1";
267 AC_MSG_RESULT($AC_CV_NAME)
268 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME, [The number of bytes in type $1])
269 undefine([AC_TYPE_NAME])dnl
270 undefine([AC_CV_NAME])dnl