diff options
Diffstat (limited to 'm4')
-rw-r--r-- | m4/fp_find_libffi.m4 | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/m4/fp_find_libffi.m4 b/m4/fp_find_libffi.m4 new file mode 100644 index 0000000000..ddc511553c --- /dev/null +++ b/m4/fp_find_libffi.m4 @@ -0,0 +1,69 @@ +dnl ** Have libffi? +dnl -------------------------------------------------------------- +dnl Sets UseSystemLibFFI. +AC_DEFUN([FP_FIND_LIBFFI], +[ + # system libffi + + AC_ARG_WITH([system-libffi], + [AS_HELP_STRING([--with-system-libffi], + [Use system provided libffi for RTS [default=no]]) + ]) + + AS_IF([test "x$with_system_libffi" = "xyes"], + [UseSystemLibFFI="YES"], + [UseSystemLibFFI="NO"] + ) + + AC_ARG_WITH([ffi-includes], + [AS_HELP_STRING([--with-ffi-includes=ARG], + [Find includes for libffi in ARG [default=system default]]) + ], + [ + if test "x$UseSystemLibFFI" != "xYES"; then + AC_MSG_WARN([--with-ffi-includes will be ignored, --with-system-libffi not set]) + else + FFIIncludeDir="$withval" + LIBFFI_CFLAGS="-I$withval" + fi + ]) + + AC_SUBST(FFIIncludeDir) + + AC_ARG_WITH([ffi-libraries], + [AS_HELP_STRING([--with-ffi-libraries=ARG], + [Find libffi in ARG [default=system default]]) + ], + [ + if test "x$UseSystemLibFFI" != "xYES"; then + AC_MSG_WARN([--with-ffi-libraries will be ignored, --with-system-libffi not set]) + else + FFILibDir="$withval" LIBFFI_LDFLAGS="-L$withval" + fi + ]) + + AC_SUBST(FFILibDir) + + AS_IF([test "$UseSystemLibFFI" = "YES"], [ + CFLAGS2="$CFLAGS" + CFLAGS="$LIBFFI_CFLAGS $CFLAGS" + LDFLAGS2="$LDFLAGS" + LDFLAGS="$LIBFFI_LDFLAGS $LDFLAGS" + if test "$HostOS" = "openbsd"; + then + # OpenBSD's libffi is not directly linked to the libpthread but + # still requires pthread functionality. This means that any client + # binary which links with libffi also needs to link with + # libpthread. If it does not, then linking fails with unresolved + # symbols. + LDFLAGS="$LDFLAGS -lpthread" + fi + AC_CHECK_LIB(ffi, ffi_call, + [AC_CHECK_HEADERS([ffi.h], [break], []) + AC_DEFINE([HAVE_SYSTEM_LIBFFI], [1], [Define to 1 if you have libffi.])], + [AC_MSG_ERROR([Cannot find system libffi])]) + CFLAGS="$CFLAGS2" + LDFLAGS="$LDFLAGS2" + ]) +]) + |