AC_DEFUN([DISPATCH_C_BLOCKS], [ # # Allow configure to be passed a path to the directory where it should look # for the Blocks runtime library, if any. # AC_ARG_WITH([blocks-runtime], [AS_HELP_STRING([--with-blocks-runtime], [Specify path to the blocks runtime])], [blocks_runtime=${withval} LIBS="$LIBS -L$blocks_runtime"] ) # # Configure argument to enable/disable using an embedded blocks runtime # AC_ARG_ENABLE([embedded_blocks_runtime], [AS_HELP_STRING([--enable-embedded-blocks-runtime], [Embed blocks runtime in libdispatch [default=yes on Linux, default=no on all other platforms]])],, [case $target_os in linux*) enable_embedded_blocks_runtime=yes ;; *) enable_embedded_blocks_runtime=no esac] ) # # Detect compiler support for Blocks; perhaps someday -fblocks won't be # required, in which case we'll need to change this. # AC_CACHE_CHECK([for C Blocks support], [dispatch_cv_cblocks], [ saveCFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fblocks" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[(void)^{int i; i = 0; }();])], [ CFLAGS="$saveCFLAGS" dispatch_cv_cblocks="-fblocks" ], [ CFLAGS="$saveCFLAGS" dispatch_cv_cblocks="no" ]) ]) AS_IF([test "x$dispatch_cv_cblocks" != "xno"], [ CBLOCKS_FLAGS="$dispatch_cv_cblocks" AS_IF([test "x$enable_embedded_blocks_runtime" != "xyes"], [ # # It may be necessary to directly link the Blocks runtime on some # systems, so give it a try if we can't link a C program that uses # Blocks. We will want to remove this at somepoint, as really -fblocks # should force that linkage already. # saveCFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fblocks -O0" AC_MSG_CHECKING([whether additional libraries are required for the Blocks runtime]) AC_TRY_LINK([], [ ^{ int j; j=0; }(); ], [ AC_MSG_RESULT([no]); ], [ saveLIBS="$LIBS" LIBS="$LIBS -lBlocksRuntime" AC_TRY_LINK([], [ ^{ int k; k=0; }(); ], [ AC_MSG_RESULT([-lBlocksRuntime]) ], [ AC_MSG_ERROR([can't find Blocks runtime]) ]) ]) ]) CFLAGS="$saveCFLAGS" have_cblocks=true ], [ CBLOCKS_FLAGS="" have_cblocks=false ]) AM_CONDITIONAL(HAVE_CBLOCKS, $have_cblocks) AC_SUBST([CBLOCKS_FLAGS]) AM_CONDITIONAL([BUILD_OWN_BLOCKS_RUNTIME], [test "x$enable_embedded_blocks_runtime" = "xyes"]) # # Because a different C++ compiler may be specified than C compiler, we have # to do it again for C++. # AC_LANG_PUSH([C++]) AC_CACHE_CHECK([for C++ Blocks support], [dispatch_cv_cxxblocks], [ saveCXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS -fblocks" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[(void)^{int i; i = 0; }();])], [ CXXFLAGS="$saveCXXFLAGS" dispatch_cv_cxxblocks="-fblocks" ], [ CXXFLAGS="$saveCXXFLAGS" dispatch_cv_cxxblocks="no" ]) ]) AS_IF([test "x$dispatch_cv_cxxblocks" != "xno"], [ CXXBLOCKS_FLAGS="$dispatch_cv_cxxblocks" AS_IF([test "x$enable_embedded_blocks_runtime" != "xyes"], [ saveCXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS -fblocks -O0" AC_MSG_CHECKING([whether additional libraries are required for the Blocks runtime]) AC_TRY_LINK([], [ ^{ int j; j=0; }(); ], [ AC_MSG_RESULT([no]); ], [ saveLIBS="$LIBS" LIBS="$LIBS -lBlocksRuntime" AC_TRY_LINK([], [ ^{ int k; k=0; }(); ], [ AC_MSG_RESULT([-lBlocksRuntime]) ], [ AC_MSG_ERROR([can't find Blocks runtime]) ]) ]) ]) CXXFLAGS="$saveCXXFLAGS" have_cxxblocks=true ], [ CXXBLOCKS_FLAGS="" have_cxxblocks=false ]) AC_LANG_POP([C++]) AM_CONDITIONAL(HAVE_CXXBLOCKS, $have_cxxblocks) AC_SUBST([CXXBLOCKS_FLAGS]) ])