Tizen 2.1 base
[platform/upstream/gcd.git] / dispatch-1.0 / m4 / blocks.m4
1 AC_DEFUN([DISPATCH_C_BLOCKS], [
2 #
3 # Allow configure to be passed a path to the directory where it should look
4 # for the Blocks runtime library, if any.
5 #
6 AC_ARG_WITH([blocks-runtime],
7   [AS_HELP_STRING([--with-blocks-runtime],
8     [Specify path to the blocks runtime])],
9   [blocks_runtime=${withval}
10     LIBS="$LIBS -L$blocks_runtime"]
11 )
12
13 #
14 # Detect compiler support for Blocks; perhaps someday -fblocks won't be
15 # required, in which case we'll need to change this.
16 #
17 AC_CACHE_CHECK([for C Blocks support], [dispatch_cv_cblocks], [
18   saveCFLAGS="$CFLAGS"
19   CFLAGS="$CFLAGS -fblocks"
20   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[(void)^{int i; i = 0; }();])], [
21     CFLAGS="$saveCFLAGS"
22     dispatch_cv_cblocks="-fblocks"
23   ], [
24     CFLAGS="$saveCFLAGS"
25     dispatch_cv_cblocks="no"
26   ])
27 ])
28
29 AS_IF([test "x$dispatch_cv_cblocks" != "xno"], [
30     CBLOCKS_FLAGS="$dispatch_cv_cblocks"
31
32     #
33     # It may be necessary to directly link the Blocks runtime on some
34     # systems, so give it a try if we can't link a C program that uses
35     # Blocks.  We will want to remove this at somepoint, as really -fblocks
36     # should force that linkage already.
37     #
38     saveCFLAGS="$CFLAGS"
39     CFLAGS="$CFLAGS -fblocks -O0"
40     AC_MSG_CHECKING([whether additional libraries are required for the Blocks runtime])
41     AC_TRY_LINK([], [
42         ^{ int j; j=0; }();
43     ], [
44         AC_MSG_RESULT([no]);
45     ], [
46       saveLIBS="$LIBS"
47       LIBS="$LIBS -lBlocksRuntime"
48       AC_TRY_LINK([], [
49         ^{ int k; k=0; }();
50       ], [
51         AC_MSG_RESULT([-lBlocksRuntime])
52       ], [
53         AC_MSG_ERROR([can't find Blocks runtime])
54       ])
55     ])
56     CFLAGS="$saveCFLAGS"
57     have_cblocks=true
58 ], [
59     CBLOCKS_FLAGS=""
60     have_cblocks=false
61 ])
62 AM_CONDITIONAL(HAVE_CBLOCKS, $have_cblocks)
63 AC_SUBST([CBLOCKS_FLAGS])
64
65 #
66 # Because a different C++ compiler may be specified than C compiler, we have
67 # to do it again for C++.
68 #
69 AC_LANG_PUSH([C++])
70 AC_CACHE_CHECK([for C++ Blocks support], [dispatch_cv_cxxblocks], [
71   saveCXXFLAGS="$CXXFLAGS"
72   CXXFLAGS="$CXXFLAGS -fblocks"
73   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[(void)^{int i; i = 0; }();])], [
74     CXXFLAGS="$saveCXXFLAGS"
75     dispatch_cv_cxxblocks="-fblocks"
76   ], [
77     CXXFLAGS="$saveCXXFLAGS"
78     dispatch_cv_cxxblocks="no"
79   ])
80 ])
81
82 AS_IF([test "x$dispatch_cv_cxxblocks" != "xno"], [
83     CXXBLOCKS_FLAGS="$dispatch_cv_cxxblocks"
84
85     saveCXXFLAGS="$CXXFLAGS"
86     CXXFLAGS="$CXXFLAGS -fblocks -O0"
87     AC_MSG_CHECKING([whether additional libraries are required for the Blocks runtime])
88     AC_TRY_LINK([], [
89         ^{ int j; j=0; }();
90     ], [
91         AC_MSG_RESULT([no]);
92     ], [
93       saveLIBS="$LIBS"
94       LIBS="$LIBS -lBlocksRuntime"
95       AC_TRY_LINK([], [
96         ^{ int k; k=0; }();
97       ], [
98         AC_MSG_RESULT([-lBlocksRuntime])
99       ], [
100         AC_MSG_ERROR([can't find Blocks runtime])
101       ])
102     ])
103     CXXFLAGS="$saveCXXFLAGS"
104     have_cxxblocks=true
105 ], [
106     CXXBLOCKS_FLAGS=""
107     have_cxxblocks=false
108 ])
109 AC_LANG_POP([C++])
110 AM_CONDITIONAL(HAVE_CXXBLOCKS, $have_cxxblocks)
111 AC_SUBST([CXXBLOCKS_FLAGS])
112 ])