fixed autoconf so that ffi.h and libffi are checked iff ffi is
enabled. Also made prep-callback return #f if libffi does not support closures.
This commit is contained in:
parent
e07d8f9760
commit
09657334c0
|
@ -6650,13 +6650,12 @@ ac_cv_lib_gmp=ac_cv_lib_gmp_main
|
||||||
# Check whether --enable-libffi was given.
|
# Check whether --enable-libffi was given.
|
||||||
if test "${enable_libffi+set}" = set; then
|
if test "${enable_libffi+set}" = set; then
|
||||||
enableval=$enable_libffi;
|
enableval=$enable_libffi;
|
||||||
cat >>confdefs.h <<\_ACEOF
|
|
||||||
#define ENABLE_LIBFFI 1
|
|
||||||
_ACEOF
|
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if test "$enable_libffi" = "yes"; then
|
||||||
|
|
||||||
|
|
||||||
for ac_header in ffi.h
|
for ac_header in ffi.h
|
||||||
do
|
do
|
||||||
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
||||||
|
@ -6804,8 +6803,7 @@ as_val=`eval 'as_val=${'$as_ac_Header'}
|
||||||
_ACEOF
|
_ACEOF
|
||||||
|
|
||||||
else
|
else
|
||||||
if test "$enable_libffi" = "yes"; then
|
{ { $as_echo "$as_me:$LINENO: error: ffi.h cannot be found.
|
||||||
{ { $as_echo "$as_me:$LINENO: error: ffi.h cannot be found.
|
|
||||||
Please specify the location of the header file using
|
Please specify the location of the header file using
|
||||||
./configure CFLAGS=-I<path/to/ffi.h> <other-options ...>
|
./configure CFLAGS=-I<path/to/ffi.h> <other-options ...>
|
||||||
" >&5
|
" >&5
|
||||||
|
@ -6814,12 +6812,12 @@ Please specify the location of the header file using
|
||||||
./configure CFLAGS=-I<path/to/ffi.h> <other-options ...>
|
./configure CFLAGS=-I<path/to/ffi.h> <other-options ...>
|
||||||
" >&2;}
|
" >&2;}
|
||||||
{ (exit 1); exit 1; }; }
|
{ (exit 1); exit 1; }; }
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{ $as_echo "$as_me:$LINENO: checking for ffi_call in -lffi" >&5
|
{ $as_echo "$as_me:$LINENO: checking for ffi_call in -lffi" >&5
|
||||||
$as_echo_n "checking for ffi_call in -lffi... " >&6; }
|
$as_echo_n "checking for ffi_call in -lffi... " >&6; }
|
||||||
if test "${ac_cv_lib_ffi_ffi_call+set}" = set; then
|
if test "${ac_cv_lib_ffi_ffi_call+set}" = set; then
|
||||||
|
@ -6893,8 +6891,7 @@ _ACEOF
|
||||||
LIBS="-lffi $LIBS"
|
LIBS="-lffi $LIBS"
|
||||||
|
|
||||||
else
|
else
|
||||||
if test "$enable_libffi" = "yes"; then
|
{ { $as_echo "$as_me:$LINENO: error: libffi cannot be found.
|
||||||
{ { $as_echo "$as_me:$LINENO: error: libffi cannot be found.
|
|
||||||
Please specify the location of the library file using
|
Please specify the location of the library file using
|
||||||
./configure LDFLAGS=-L<path/to/libffi.ld|dylib|so|etc.> <other-options ...>
|
./configure LDFLAGS=-L<path/to/libffi.ld|dylib|so|etc.> <other-options ...>
|
||||||
" >&5
|
" >&5
|
||||||
|
@ -6903,10 +6900,17 @@ Please specify the location of the library file using
|
||||||
./configure LDFLAGS=-L<path/to/libffi.ld|dylib|so|etc.> <other-options ...>
|
./configure LDFLAGS=-L<path/to/libffi.ld|dylib|so|etc.> <other-options ...>
|
||||||
" >&2;}
|
" >&2;}
|
||||||
{ (exit 1); exit 1; }; }
|
{ (exit 1); exit 1; }; }
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
cat >>confdefs.h <<\_ACEOF
|
||||||
|
#define ENABLE_LIBFFI 1
|
||||||
|
_ACEOF
|
||||||
|
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
# Checks for typedefs, structures, and compiler characteristics.
|
# Checks for typedefs, structures, and compiler characteristics.
|
||||||
{ $as_echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
|
{ $as_echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
|
||||||
$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
|
$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
|
||||||
|
|
19
configure.ac
19
configure.ac
|
@ -64,22 +64,25 @@ ERROR: libgmp.so) if libgmp is installed in a non-standard location.
|
||||||
ERROR: libgmp can be obtained from <http://gmplib.org>. ])])
|
ERROR: libgmp can be obtained from <http://gmplib.org>. ])])
|
||||||
|
|
||||||
AC_ARG_ENABLE(libffi,
|
AC_ARG_ENABLE(libffi,
|
||||||
[ --enable-libffi enable support for libffi.],
|
[ --enable-libffi enable support for libffi.])
|
||||||
AC_DEFINE(ENABLE_LIBFFI, 1, [adds support for libffi]))
|
|
||||||
|
if test "$enable_libffi" = "yes"; then
|
||||||
|
|
||||||
AC_CHECK_HEADERS([ffi.h],,
|
AC_CHECK_HEADERS([ffi.h],,
|
||||||
if test "$enable_libffi" = "yes"; then
|
|
||||||
AC_MSG_ERROR([ffi.h cannot be found.
|
AC_MSG_ERROR([ffi.h cannot be found.
|
||||||
Please specify the location of the header file using
|
Please specify the location of the header file using
|
||||||
./configure CFLAGS=-I<path/to/ffi.h> <other-options ...>
|
./configure CFLAGS=-I<path/to/ffi.h> <other-options ...>
|
||||||
])
|
]))
|
||||||
fi)
|
|
||||||
AC_CHECK_LIB(ffi,ffi_call,,
|
AC_CHECK_LIB(ffi,ffi_call,,
|
||||||
if test "$enable_libffi" = "yes"; then
|
|
||||||
AC_MSG_ERROR([libffi cannot be found.
|
AC_MSG_ERROR([libffi cannot be found.
|
||||||
Please specify the location of the library file using
|
Please specify the location of the library file using
|
||||||
./configure LDFLAGS=-L<path/to/libffi.ld|dylib|so|etc.> <other-options ...>
|
./configure LDFLAGS=-L<path/to/libffi.ld|dylib|so|etc.> <other-options ...>
|
||||||
])
|
]))
|
||||||
fi)
|
|
||||||
|
AC_DEFINE(ENABLE_LIBFFI, 1, [adds support for libffi])
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
# Checks for typedefs, structures, and compiler characteristics.
|
# Checks for typedefs, structures, and compiler characteristics.
|
||||||
AC_C_CONST
|
AC_C_CONST
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
1601
|
1602
|
||||||
|
|
|
@ -319,6 +319,7 @@ generic_callback(ffi_cif *cif, void *ret, void **args, void *user_data){
|
||||||
|
|
||||||
ikptr
|
ikptr
|
||||||
ikrt_prepare_callback(ikptr data, ikpcb* pcb){
|
ikrt_prepare_callback(ikptr data, ikpcb* pcb){
|
||||||
|
#if FFI_CLOSURES
|
||||||
ikptr cifptr = ref(data, off_vector_data + 0 * wordsize);
|
ikptr cifptr = ref(data, off_vector_data + 0 * wordsize);
|
||||||
void* codeloc;
|
void* codeloc;
|
||||||
ffi_closure* closure = ffi_closure_alloc(sizeof(ffi_closure), &codeloc);
|
ffi_closure* closure = ffi_closure_alloc(sizeof(ffi_closure), &codeloc);
|
||||||
|
@ -346,6 +347,9 @@ ikrt_prepare_callback(ikptr data, ikpcb* pcb){
|
||||||
ref(p, 0) = pointer_tag;
|
ref(p, 0) = pointer_tag;
|
||||||
ref(p, wordsize) = (ikptr) codeloc;
|
ref(p, wordsize) = (ikptr) codeloc;
|
||||||
return p+vector_tag;
|
return p+vector_tag;
|
||||||
|
#else
|
||||||
|
return false_object
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
int ho (int(*f)(int), int n) {
|
int ho (int(*f)(int), int n) {
|
||||||
|
|
Loading…
Reference in New Issue