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
97 AC_DEFUN([SXE_FFI_TRY_PKGCONFIG], [dnl
98 ## arg1 what to do in case of success
99 ## arg2 what to do in case of failure
100 pushdef([MM_SUCC], [$1])
101 pushdef([MM_FAIL], [$2])
103 AC_REQUIRE([SXE_CHECK_PKGCONFIG])
104 if test "$sxe_cv_prog_pkg_config" = "no" -o -z "$PKG_CONFIG"; then
105 AS_MESSAGE([*** pkg-config not found.])
106 AS_MESSAGE([*** Cannot check for FFI with pkg-config.])
110 FFI_CPPFLAGS=$($PKG_CONFIG --cflags libffi)
111 FFI_LIBS=$($PKG_CONFIG --libs libffi)
113 CPPFLAGS="$CPPFLAGS $FFI_CPPFLAGS"
114 SXE_CHECK_HEADERS([ffi.h])
115 if test "$ac_cv_header_ffi_h" = "yes"; then
116 AC_CHECK_LIB([ffi], [ffi_call], [dnl
117 sxe_cv_feat_ffi="yes"
118 have_ffi="yes"], [:])
121 if test "$ac_cv_header_ffi_h" = "yes" -a \
122 "$ac_cv_lib_ffi_ffi_call" = "yes"; then
129 ])dnl SXE_FFI_TRY_PKGCONFIG
131 AC_DEFUN([SXE_FFI_TRY_STANDARD_PREFIX], [dnl
132 ## arg1 what to do in case of success
133 ## arg2 what to do in case of failure
134 ## defines sxe_cv_feat_ffi
135 pushdef([MM_SUCC], [$1])
136 pushdef([MM_FAIL], [$2])
138 SXE_CHECK_HEADERS([ffi.h])
139 if test "$ac_cv_header_ffi_h" != "yes"; then
143 sxe_cv_feat_ffi="yes"
149 ])dnl SXE_FFI_TRY_STANDARD_PREFIX
151 AC_DEFUN([_SXE_FFI_TRY_GCC_PREFIX], [dnl
152 ## arg 1 is the path we should try
153 ## defines sxe_cv_cc_ffi_path
154 ## assumes to be called in a (shell) for-loop
155 pushdef([_FFI_PATH], [$1])
157 sxe_cv_cc_ffi_path=${sxe_cv_cc_ffi_path:-[]_FFI_PATH[]}
158 AC_MSG_CHECKING([for ffi headers in])
159 if test -n "${sxe_cv_cc_ffi_path}" -a \
160 -d "${sxe_cv_cc_ffi_path}"; then
161 SXE_CANONICALISE_PATH([sxe_cv_cc_ffi_path])
163 AC_MSG_RESULT([${sxe_cv_cc_ffi_path}])
165 FFI_CPPFLAGS="-I${sxe_cv_cc_ffi_path}"
167 CPPFLAGS="$CPPFLAGS $FFI_CPPFLAGS"
168 SXE_CHECK_HEADERS([ffi.h])
171 AC_MSG_RESULT([non-existing directory ${sxe_cv_cc_ffi_path}])
174 if test "$ac_cv_header_ffi_h" != "yes"; then
175 unset ac_cv_header_ffi_h
176 unset sxe_cv_cc_ffi_path
183 ])dnl _SXE_FFI_TRY_GCC_PREFIX
185 AC_DEFUN([SXE_FFI_TRY_GCC_PREFIX], [dnl
186 ## arg1 what to do in case of success
187 ## arg2 what to do in case of failure
188 ## maybe defines FFI_CPPFLAGS
189 ## defines sxe_cv_feat_ffi
190 ## assumes CC points to a gcc
192 pushdef([MM_SUCC], [$1])
193 pushdef([MM_FAIL], [$2])
196 pushdef([libffi_a_fn], [$($CC -print-file-name=libffi.a)])dnl
197 pushdef([libgcc_a_fn], [$($CC -print-libgcc-file-name)])dnl
198 pushdef([cc_version], [$($CC -dumpversion)])dnl
199 "$(dirname []libffi_a_fn[])/include/libffi" \
200 "$(dirname []libffi_a_fn[])/../include" \
201 "$(dirname []libffi_a_fn[])/../[]cc_version[]/include" \
202 "$(dirname []libffi_a_fn[])/../../[]cc_version[]/include" \
203 "$(dirname []libgcc_a_fn[])/include/libffi" \
204 "$(dirname []libgcc_a_fn[])/../include" \
205 "$(dirname []libgcc_a_fn[])/../[]cc_version[]/include" \
206 "$(dirname []libgcc_a_fn[])/../../[]cc_version[]/include"
207 popdef([cc_version])dnl
208 popdef([libgcc_a_fn])dnl
209 popdef([libffi_a_fn])dnl
211 _SXE_FFI_TRY_GCC_PREFIX([$i])
214 if test "$ac_cv_header_ffi_h" != "yes"; then
218 sxe_cv_feat_ffi="yes"
224 ])dnl SXE_FFI_TRY_GCC_PREFIX
226 AC_DEFUN([SXE_CHECK_FFI], [dnl
227 ## defines sxe_cv_feat_ffi (by side effect)
230 SXE_FFI_TRY_PKGCONFIG([ffi_from_pkgconfig=yes], [:])
231 if test "$ffi_from_pkgconfig" != "yes"; then
232 SXE_FFI_TRY_STANDARD_PREFIX([:], [unset ac_cv_header_ffi_h])
233 if test "$sxe_cv_feat_ffi" = "no" -a \
235 SXE_FFI_TRY_GCC_PREFIX([:], [dnl
236 AC_MSG_WARN([GCC FFI not found.])])
239 AC_CHECK_LIB([ffi], [ffi_call], [:], [dnl
240 AC_MSG_WARN([Cannot find a usable libffi, not compiling FFI support])])
241 if test "$ac_cv_header_ffi_h" = "yes" -a \
242 "$ac_cv_lib_ffi_ffi_call" = "yes"; then
243 sxe_cv_feat_ffi="yes"
252 AC_SUBST([FFI_CPPFLAGS])
253 AC_SUBST([FFI_LDFLAGS])
258 AC_DEFUN([SXE_CHECK_DLOPEN], [
261 SXE_CHECK_HEADERS([dlfcn.h])
263 if test "$ac_cv_header_dlfcn_h" != "yes"; then
266 AC_MSG_CHECKING([for dlopen in -lc])
267 AC_LINK_IFELSE([AC_LANG_PROGRAM(
271 [[dlopen ("", 0);]])], [
278 if test "$have_dlopen" = "yes" -o "$try_on" = "no"; then
281 AC_MSG_CHECKING([for dlopen in -ldl])
284 AC_LINK_IFELSE([AC_LANG_PROGRAM(
288 [[dlopen ("", 0);]])], [
295 if test "$have_dlopen" = "yes" -o "$try_on" = "no"; then
298 AC_MSG_CHECKING([for dlopen in -lsvld])
299 LIBS="$ac_save_LIBS -lsvld"
300 AC_LINK_IFELSE([AC_LANG_PROGRAM(
304 [[dlopen ("", 0);]])], [
311 if test "$have_dlopen" = "yes"; then
312 AC_DEFINE([HAVE_DLOPEN], [1], [Description here!])
319 AC_DEFUN([SXE_CHECK_SHL_LOAD], [
320 dnl Check for HP/UX shl_load
323 SXE_CHECK_HEADERS([dl.h])
325 if test "$ac_cv_header_dl_h" != "yes"; then
328 AC_MSG_CHECKING([for shl_load in -lc])
329 AC_LINK_IFELSE([AC_LANG_PROGRAM(
333 [[shl_load ("", 0, 0);]])], [
335 have_shl_load=yes], [
340 if test "$have_shl_load" = "yes" -o "$try_on" = "no"; then
343 AC_MSG_CHECKING([for shl_load in -ldl])
346 AC_LINK_IFELSE([AC_LANG_PROGRAM(
350 [[shl_load ("", 0, 0);]])], [
352 have_shl_load=yes], [
357 if test "$have_shl_load" = "yes"; then
358 AC_DEFINE([HAVE_SHL_LOAD], [1], [Description here!])
363 ])dnl SXE_CHECK_SHL_LOAD
365 AC_DEFUN([SXE_CHECK_LT_DLINIT], [
366 dnl Check for libtool's libltdl
369 SXE_CHECK_HEADERS([ltdl.h])
371 if test "$ac_cv_header_ltdl_h" != "yes"; then
374 AC_MSG_CHECKING([for lt_dlinit in -lltdl])
377 AC_LINK_IFELSE([AC_LANG_PROGRAM(
381 [[lt_dlinit ();]])], [
383 have_lt_dlinit=yes], [
388 if test "$have_lt_dlinit" = "yes"; then
389 AC_DEFINE([HAVE_LTDL], [1], [Description here!])
394 ])dnl SXE_CHECK_LT_DLINIT
397 dnl sxe-emodffi.m4 ends here