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,
62 ], ac_cv_nested_functions=yes, ac_cv_nested_functions=no,
63 ac_cv_nested_functions=yes)
66 AC_MSG_RESULT(${ac_cv_nested_functions})
67 NO_NESTED_FUNCTIONS=no
68 if test $ac_cv_nested_functions = no; then
69 AC_DEFINE(NO_NESTED_FUNCTIONS)
70 NO_NESTED_FUNCTIONS=yes
75 AC_DEFUN(AC_BROKEN_COMPILER,
76 [AC_REQUIRE([AC_PROG_CC])dnl
77 AC_MSG_CHECKING(if the Objective-C compiler crashes with nested functions)
78 AC_CACHE_VAL(ac_cv_broken_compiler,
82 #include <objc/objc.h>
83 #include <objc/Object.h>
114 ], ac_cv_broken_compiler=no,
115 ac_cv_broken_compiler=yes,
116 ac_cv_broken_compiler=no)
119 BROKEN_COMPILER=${ac_cv_broken_compiler}
120 if test ${ac_cv_nested_functions} = no -o ${ac_cv_broken_compiler} = yes; then
121 ac_cv_broken_compiler=yes;
123 AC_DEFINE(BROKEN_COMPILER)
125 AC_MSG_RESULT(${ac_cv_broken_compiler})
129 AC_DEFUN(AC_BROKEN_BUILTIN_APPLY,
130 [AC_REQUIRE([AC_PROG_CC])dnl
131 AC_MSG_CHECKING(whether __builtin_apply and __builtin_return are broken)
132 AC_CACHE_VAL(ac_cv_broken_builtin_apply,
134 AC_LANG_OBJECTIVE_C[]
136 #include <objc/Object.h>
138 float value = 123.456;
140 @interface MyObject : Object
143 @implementation MyObject
150 @interface Forwarder : Object
156 @implementation Forwarder
163 - (void*)forward:(SEL)selector:(void*)argframe
165 IMP imp = [object methodFor:@selector(floatValue)];
167 void* frame = malloc(116);
168 *(void**)frame = NULL;
169 retframe = __builtin_apply((void(*)(void))imp, frame, 0);
170 if(*(long double*)(((char*)retframe) + 8) == (long double)value)
178 id fwd = [[[Forwarder alloc] init] setObject:[MyObject alloc]];
181 return 0; // keep compiler happy
183 ], ac_cv_broken_builtin_apply=no,
184 ac_cv_broken_builtin_apply=yes,
185 ac_cv_broken_builtin_apply=no)
188 AC_MSG_RESULT(${ac_cv_broken_builtin_apply})
189 BROKEN_BUILTIN_APPLY=${ac_cv_broken_builtin_apply}
190 if test $BROKEN_BUILTIN_APPLY = yes; then
191 AC_DEFINE(BROKEN_BUILTIN_APPLY)
196 AC_DEFUN(AC_CHECK_MATH_LIB,
197 [AC_REQUIRE([AC_PROG_CC])dnl
198 dnl temporary rename AC_MSG_RESULT to do nothing
199 define(old_AC_MSG_RESULT, defn([AC_MSG_RESULT]))dnl
200 define([AC_MSG_RESULT],)dnl
201 AC_CHECK_FUNC(sqrt, ,
202 [dnl On linux, to link a program that use math functions we must link with libm.a
208 ], ac_cv_func_sqrt="-lm -lc")
210 define([AC_MSG_RESULT], defn([old_AC_MSG_RESULT]))dnl
211 undefine([old_AC_MSG_RESULT])dnl
212 AC_MSG_RESULT($ac_cv_func_sqrt)
216 AC_DEFUN(AC_STRUCT_ALIGNMENT,
217 [AC_REQUIRE([AC_PROG_CC])dnl
218 AC_MSG_CHECKING(for the C structures alignment)
219 AC_CACHE_VAL(ac_cv_struct_alignment,
220 [AC_TRY_RUN([#include <stdio.h>
227 int struct_alignment = __alignof__ (simple1);
231 FILE *f=fopen("conftestval", "w");
233 fprintf(f, "%u\n", struct_alignment);
236 ], ac_cv_struct_alignment=`cat conftestval`,
237 ac_cv_struct_alignment=0,
238 ifelse([$2], , , ac_cv_struct_alignment=$2))])dnl
239 AC_MSG_RESULT($ac_cv_struct_alignment)
240 STRUCT_ALIGNMENT=$ac_cv_struct_alignment
244 AC_DEFUN(AC_COMPILE_CHECK_SIZEOF,
245 [changequote(<<, >>)dnl
246 dnl The name to #define.
247 define(<<AC_TYPE_NAME>>, translit(sizeof_$1, [a-z *], [A-Z_P]))dnl
248 dnl The cache variable name.
249 define(<<AC_CV_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
251 AC_MSG_CHECKING(size of $1)
252 AC_CACHE_VAL(AC_CV_NAME,
253 [for ac_size in 4 8 1 2 16 $2 ; do # List sizes in rough order of prevalence.
254 AC_TRY_COMPILE([#include "confdefs.h"
255 #include <sys/types.h>
257 ], [switch (0) case 0: case (sizeof ($1) == $ac_size):;], AC_CV_NAME=$ac_size)
258 if test x$AC_CV_NAME != x ; then break; fi
261 if test x$AC_CV_NAME = x ; then
262 echo "cannot determine a size for $1";
265 AC_MSG_RESULT($AC_CV_NAME)
266 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME, [The number of bytes in type $1])
267 undefine([AC_TYPE_NAME])dnl
268 undefine([AC_CV_NAME])dnl