]>
Commit | Line | Data |
---|---|---|
e85f4437 A |
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 | ]) |