1 dnl sxe-emodffi.m4 -- Everything that extends SXE functionality on the fly
3 dnl Copyright (C) 2006-2008 Sebastian Freundt
5 dnl Author: Sebastian Freundt <hroptatyr@sxemacs.org>
7 dnl Redistribution and use in source and binary forms, with or without
8 dnl modification, are permitted provided that the following conditions
11 dnl 1. Redistributions of source code must retain the above copyright
12 dnl notice, this list of conditions and the following disclaimer.
14 dnl 2. Redistributions in binary form must reproduce the above copyright
15 dnl notice, this list of conditions and the following disclaimer in the
16 dnl documentation and/or other materials provided with the distribution.
18 dnl 3. Neither the name of the author nor the names of any contributors
19 dnl may be used to endorse or promote products derived from this
20 dnl software without specific prior written permission.
22 dnl THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
23 dnl IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
24 dnl WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
25 dnl DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26 dnl FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27 dnl CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28 dnl SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
29 dnl BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
30 dnl WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
31 dnl OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
32 dnl IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34 dnl This file is part of SXEmacs.
37 AC_DEFUN([SXE_REGISTER_MODULE], [dnl
38 ## arg #1 is module name
39 pushdef([emodname], [$1])
40 pushdef([EMODNAME], [translit([$1], [a-z], [A-Z])])
42 AM_CONDITIONAL([DESCEND_]EMODNAME, [dnl
43 test "$have_static_modules_[]emodname[]" = "yes" -o \
44 "$have_modules_[]emodname[]" = "yes"])
45 AC_CONFIG_FILES([modules/]emodname[/Makefile])
51 AC_DEFUN([SXE_EMOD], [dnl
52 ## arg #1 is module name
53 ## arg #2 is short description (unused atm)
54 pushdef([emodname], [$1])
55 pushdef([EMODNAME], [translit([$1], [a-z], [A-Z])])
57 SXE_REGISTER_MODULE([$1])
58 AM_CONDITIONAL([EMOD_]EMODNAME, [dnl
59 test "$have_modules_[]emodname[]" = "yes"])
65 AC_DEFUN([SXE_STATMOD], [dnl
66 ## arg #1 is module name
67 ## arg #2 is short description (unused atm)
68 pushdef([emodname], [$1])
69 pushdef([EMODNAME], [translit([$1], [a-z], [A-Z])])
71 SXE_REGISTER_MODULE([$1])
72 if test "$have_module_support" = "yes" -a \
73 "$have_static_modules_[]emodname[]" = "yes"; then
74 AC_DEFINE([USE_STATIC_]EMODNAME, [1], [dnl
75 Whether to use the module] emodname [statically])
76 SXE_ADD_STATMOD_A([$emodblddir/]emodname[/lib]emodname[.a])
77 echo "syms_of_[]emodname[]();" >> emod_static_syms.c
78 echo "vars_of_[]emodname[]();" >> emod_static_vars.c
80 AM_CONDITIONAL([STATIC_]EMODNAME, [dnl
81 test "$have_static_modules_[]emodname[]" = "yes"])
87 AC_DEFUN([SXE_EMOD_STATMOD], [dnl
88 ## arg #1 is module name
89 ## arg #2 is short description
90 SXE_REGISTER_MODULE([$1])
91 pushdef([SXE_REGISTER_MODULE], [])
93 SXE_STATMOD([$1], [$2])
94 popdef([SXE_REGISTER_MODULE])
95 ])dnl SXE_EMOD_STATMOD
98 AC_DEFUN([SXE_CHECK_DBUS], [dnl
100 PKG_CHECK_MODULES([DBUS], [dbus-1], [dnl
101 AC_SUBST([DBUS_CFLAGS])
102 AC_SUBST([DBUS_LIBS])
103 AC_DEFINE([HAVE_DBUS], [1], [Defined if d-bus is available])
108 AC_DEFUN([SXE_FFI_TRY_PKGCONFIG], [dnl
109 ## arg1 what to do in case of success
110 ## arg2 what to do in case of failure
111 pushdef([MM_SUCC], [$1])
112 pushdef([MM_FAIL], [$2])
114 AC_REQUIRE([SXE_CHECK_PKGCONFIG])
115 if test "$sxe_cv_prog_pkg_config" = "no" -o -z "$PKG_CONFIG"; then
116 AS_MESSAGE([*** pkg-config not found.])
117 AS_MESSAGE([*** Cannot check for FFI with pkg-config.])
121 FFI_CPPFLAGS=$($PKG_CONFIG --cflags libffi)
122 FFI_LIBS=$($PKG_CONFIG --libs libffi)
124 CPPFLAGS="$CPPFLAGS $FFI_CPPFLAGS"
125 SXE_CHECK_HEADERS([ffi.h])
126 if test "$ac_cv_header_ffi_h" = "yes"; then
127 AC_CHECK_LIB([ffi], [ffi_call], [dnl
128 sxe_cv_feat_ffi="yes"
129 have_ffi="yes"], [:])
132 if test "$ac_cv_header_ffi_h" = "yes" -a \
133 "$ac_cv_lib_ffi_ffi_call" = "yes"; then
140 ])dnl SXE_FFI_TRY_PKGCONFIG
142 AC_DEFUN([SXE_FFI_TRY_STANDARD_PREFIX], [dnl
143 ## arg1 what to do in case of success
144 ## arg2 what to do in case of failure
145 ## defines sxe_cv_feat_ffi
146 pushdef([MM_SUCC], [$1])
147 pushdef([MM_FAIL], [$2])
149 SXE_CHECK_HEADERS([ffi.h])
150 if test "$ac_cv_header_ffi_h" != "yes"; then
154 sxe_cv_feat_ffi="yes"
160 ])dnl SXE_FFI_TRY_STANDARD_PREFIX
162 AC_DEFUN([_SXE_FFI_TRY_GCC_PREFIX], [dnl
163 ## arg 1 is the path we should try
164 ## defines sxe_cv_cc_ffi_path
165 ## assumes to be called in a (shell) for-loop
166 pushdef([_FFI_PATH], [$1])
168 sxe_cv_cc_ffi_path=${sxe_cv_cc_ffi_path:-[]_FFI_PATH[]}
169 AC_MSG_CHECKING([for ffi headers in])
170 if test -n "${sxe_cv_cc_ffi_path}" -a \
171 -d "${sxe_cv_cc_ffi_path}"; then
172 SXE_CANONICALISE_PATH([sxe_cv_cc_ffi_path])
174 AC_MSG_RESULT([${sxe_cv_cc_ffi_path}])
176 FFI_CPPFLAGS="-I${sxe_cv_cc_ffi_path}"
178 CPPFLAGS="$CPPFLAGS $FFI_CPPFLAGS"
179 SXE_CHECK_HEADERS([ffi.h])
182 AC_MSG_RESULT([non-existing directory ${sxe_cv_cc_ffi_path}])
185 if test "$ac_cv_header_ffi_h" != "yes"; then
186 unset ac_cv_header_ffi_h
187 unset sxe_cv_cc_ffi_path
194 ])dnl _SXE_FFI_TRY_GCC_PREFIX
196 AC_DEFUN([SXE_FFI_TRY_GCC_PREFIX], [dnl
197 ## arg1 what to do in case of success
198 ## arg2 what to do in case of failure
199 ## maybe defines FFI_CPPFLAGS
200 ## defines sxe_cv_feat_ffi
201 ## assumes CC points to a gcc
203 pushdef([MM_SUCC], [$1])
204 pushdef([MM_FAIL], [$2])
207 pushdef([libffi_a_fn], [$($CC -print-file-name=libffi.a)])dnl
208 pushdef([libgcc_a_fn], [$($CC -print-libgcc-file-name)])dnl
209 pushdef([cc_version], [$($CC -dumpversion)])dnl
210 "$(dirname []libffi_a_fn[])/include/libffi" \
211 "$(dirname []libffi_a_fn[])/../include" \
212 "$(dirname []libffi_a_fn[])/../[]cc_version[]/include" \
213 "$(dirname []libffi_a_fn[])/../../[]cc_version[]/include" \
214 "$(dirname []libgcc_a_fn[])/include/libffi" \
215 "$(dirname []libgcc_a_fn[])/../include" \
216 "$(dirname []libgcc_a_fn[])/../[]cc_version[]/include" \
217 "$(dirname []libgcc_a_fn[])/../../[]cc_version[]/include"
218 popdef([cc_version])dnl
219 popdef([libgcc_a_fn])dnl
220 popdef([libffi_a_fn])dnl
222 _SXE_FFI_TRY_GCC_PREFIX([$i])
225 if test "$ac_cv_header_ffi_h" != "yes"; then
229 sxe_cv_feat_ffi="yes"
235 ])dnl SXE_FFI_TRY_GCC_PREFIX
237 AC_DEFUN([SXE_CHECK_FFI], [dnl
238 ## defines sxe_cv_feat_ffi (by side effect)
241 SXE_FFI_TRY_PKGCONFIG([ffi_from_pkgconfig=yes], [:])
242 if test "$ffi_from_pkgconfig" != "yes"; then
243 SXE_FFI_TRY_STANDARD_PREFIX([:], [unset ac_cv_header_ffi_h])
244 if test "$sxe_cv_feat_ffi" = "no" -a \
246 SXE_FFI_TRY_GCC_PREFIX([:], [dnl
247 AC_MSG_WARN([GCC FFI not found.])])
250 AC_CHECK_LIB([ffi], [ffi_call], [:], [dnl
251 AC_MSG_WARN([Cannot find a usable libffi, not compiling FFI support])])
252 if test "$ac_cv_header_ffi_h" = "yes" -a \
253 "$ac_cv_lib_ffi_ffi_call" = "yes"; then
254 sxe_cv_feat_ffi="yes"
263 AC_SUBST([FFI_CPPFLAGS])
264 AC_SUBST([FFI_LDFLAGS])
269 AC_DEFUN([SXE_CHECK_DLOPEN], [
272 SXE_CHECK_HEADERS([dlfcn.h])
274 if test "$ac_cv_header_dlfcn_h" != "yes"; then
277 AC_MSG_CHECKING([for dlopen in -lc])
278 AC_LINK_IFELSE([AC_LANG_PROGRAM(
282 [[dlopen ("", 0);]])], [
289 if test "$have_dlopen" = "yes" -o "$try_on" = "no"; then
292 AC_MSG_CHECKING([for dlopen in -ldl])
295 AC_LINK_IFELSE([AC_LANG_PROGRAM(
299 [[dlopen ("", 0);]])], [
306 if test "$have_dlopen" = "yes" -o "$try_on" = "no"; then
309 AC_MSG_CHECKING([for dlopen in -lsvld])
310 LIBS="$ac_save_LIBS -lsvld"
311 AC_LINK_IFELSE([AC_LANG_PROGRAM(
315 [[dlopen ("", 0);]])], [
322 if test "$have_dlopen" = "yes"; then
323 AC_DEFINE([HAVE_DLOPEN], [1], [Description here!])
330 AC_DEFUN([SXE_CHECK_SHL_LOAD], [
331 dnl Check for HP/UX shl_load
334 SXE_CHECK_HEADERS([dl.h])
336 if test "$ac_cv_header_dl_h" != "yes"; then
339 AC_MSG_CHECKING([for shl_load in -lc])
340 AC_LINK_IFELSE([AC_LANG_PROGRAM(
344 [[shl_load ("", 0, 0);]])], [
346 have_shl_load=yes], [
351 if test "$have_shl_load" = "yes" -o "$try_on" = "no"; then
354 AC_MSG_CHECKING([for shl_load in -ldl])
357 AC_LINK_IFELSE([AC_LANG_PROGRAM(
361 [[shl_load ("", 0, 0);]])], [
363 have_shl_load=yes], [
368 if test "$have_shl_load" = "yes"; then
369 AC_DEFINE([HAVE_SHL_LOAD], [1], [Description here!])
374 ])dnl SXE_CHECK_SHL_LOAD
376 AC_DEFUN([SXE_CHECK_LT_DLINIT], [
377 dnl Check for libtool's libltdl
380 SXE_CHECK_HEADERS([ltdl.h])
382 if test "$ac_cv_header_ltdl_h" != "yes"; then
385 AC_MSG_CHECKING([for lt_dlinit in -lltdl])
388 AC_LINK_IFELSE([AC_LANG_PROGRAM(
392 [[lt_dlinit ();]])], [
394 have_lt_dlinit=yes], [
399 if test "$have_lt_dlinit" = "yes"; then
400 AC_DEFINE([HAVE_LTDL], [1], [Description here!])
405 ])dnl SXE_CHECK_LT_DLINIT
408 dnl sxe-emodffi.m4 ends here