Revision: 127 http://trac.macosforge.org/projects/libdispatch/changeset/127 Author: robert@fledge.watson.org Date: 2009-11-04 08:04:51 -0800 (Wed, 04 Nov 2009) Log Message: ----------- Separately detect C++ blocks support from C blocks support, and compile the dispatch_plusplus regression test only if C++ supports blocks. Modified Paths: -------------- trunk/configure.ac trunk/m4/blocks.m4 trunk/testing/Makefile.am Modified: trunk/configure.ac =================================================================== --- trunk/configure.ac 2009-11-04 12:00:04 UTC (rev 126) +++ trunk/configure.ac 2009-11-04 16:04:51 UTC (rev 127) @@ -111,6 +111,7 @@ ) AC_PROG_CC +AC_PROG_CXX AC_PROG_INSTALL AC_PROG_LIBTOOL AC_PATH_PROGS(MIG, mig) Modified: trunk/m4/blocks.m4 =================================================================== --- trunk/m4/blocks.m4 2009-11-04 12:00:04 UTC (rev 126) +++ trunk/m4/blocks.m4 2009-11-04 16:04:51 UTC (rev 127) @@ -1,5 +1,16 @@ 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"] +) + +# # Detect compiler support for Blocks; perhaps someday -fblocks won't be # required, in which case we'll need to change this. # @@ -15,17 +26,6 @@ ]) ]) -# -# 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"] -) - AS_IF([test "x$dispatch_cv_cblocks" != "xno"], [ CBLOCKS_FLAGS="$dispatch_cv_cblocks" @@ -59,6 +59,54 @@ CBLOCKS_FLAGS="" have_cblocks=false ]) -AM_CONDITIONAL(HAVE_BLOCKS, $have_cblocks) +AM_CONDITIONAL(HAVE_CBLOCKS, $have_cblocks) AC_SUBST([CBLOCKS_FLAGS]) + +# +# 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" + + saveCXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -fblocks" + 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]) +]) Modified: trunk/testing/Makefile.am =================================================================== --- trunk/testing/Makefile.am 2009-11-04 12:00:04 UTC (rev 126) +++ trunk/testing/Makefile.am 2009-11-04 16:04:51 UTC (rev 127) @@ -18,8 +18,8 @@ dispatch_c99_CFLAGS=-std=c99 -if HAVE_BLOCKS -BLOCKS_TESTS= \ +if HAVE_CBLOCKS +CBLOCKS_TESTS= \ dispatch_after \ dispatch_apply \ dispatch_drift \ @@ -31,8 +31,15 @@ dispatch_timer_bit31 \ dispatch_timer_bit63 endif -TESTS+=$(BLOCKS_TESTS) +TESTS+=$(CBLOCKS_TESTS) +if HAVE_CXXBLOCKS +CXXBLOCKS_TESTS= \ + dispatch_plusplus +dispatch_plusplus_SOURCES=dispatch_plusplus.cpp +endif +TESTS+=$(CXXBLOCKS_TESTS) + if HAVE_CORESERVICES CORESERVICES_TESTS= \ dispatch_cffd @@ -70,4 +77,5 @@ INCLUDES=-I$(top_builddir) -I$(top_srcdir) LDADD=libtest.la ../src/libdispatch.la CFLAGS=-Wall $(MARCH_FLAGS) $(CBLOCKS_FLAGS) +CXXFLAGS=-Wall $(MARCH_FLAGS) $(CXXBLOCKS_FLAGS)