1 dnl ===========================================================================
2 dnl Additional macros used to configure GiNaC. We don't start our own
3 dnl additions' names with AC_ but with GINAC_ in order to steer clear of
5 dnl ===========================================================================
7 dnl GINAC_HEADER_GETVAL(NAME,FILE)
8 dnl ----------------------------
9 dnl Expand at autoconf time to the value of a "#define NAME" from the given
10 dnl FILE. The regexps here aren't very rugged, but are enough for us.
11 dnl /dev/null as a parameter prevents a hang if $2 is accidentally omitted.
12 dnl (shamelessly ripped from GMP, and changed prefix to GINAC_).
14 define(GINAC_HEADER_GETVAL,
16 esyscmd([grep "^#define $1 " $2 /dev/null 2>/dev/null]),
20 define(GINAC_GET_VERSION,
21 [GINAC_HEADER_GETVAL(GINACLIB_$1_VERSION,[ginac/version.h])])
22 define(GINAC_GET_LTVERSION,
23 [GINAC_HEADER_GETVAL(GINAC_LT_$1,[ginac/version.h])])
25 dnl Usage: GINAC_STD_CXX_HEADERS
26 dnl Check for standard C++ headers, bail out if something is missing.
27 AC_DEFUN([GINAC_STD_CXX_HEADERS], [
28 AC_CACHE_CHECK([for standard C++ header files], [ginac_cv_std_cxx_headers], [
29 ginac_cv_std_cxx_headers="no"
31 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
58 ]])], [ginac_cv_std_cxx_headers="yes"])
60 if test "${ginac_cv_std_cxx_headers}" != "yes"; then
61 AC_MSG_ERROR([Standard ISO C++ headers are missing])
65 dnl Usage: GINAC_LIBREADLINE
67 dnl Check if GNU readline library and headers are avialable.
68 dnl Defines GINSH_LIBS variable, and HAVE_LIBREADLINE,
69 dnl HAVE_READLINE_READLINE_H, HAVE_READLINE_HISTORY_H preprocessor macros.
71 dnl Note: this macro rejects readline versions <= 4.2 and non-GNU
74 AC_DEFUN([GINAC_READLINE],[
75 AC_REQUIRE([GINAC_TERMCAP])
77 AC_CHECK_HEADERS(readline/readline.h readline/history.h)
78 if test "x${ac_cv_header_readline_readline_h}" != "xyes" -o "x${ac_cv_header_readline_history_h}" != "xyes"; then
79 GINAC_WARNING([ginsh will not compile, because readline headers could not be found.])
81 AC_CACHE_CHECK([for version of libreadline], [ginac_cv_rl_supported], [
82 ginac_cv_rl_supported="no"
83 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
85 #include <readline/readline.h>
86 #if !defined(RL_VERSION_MAJOR) || !defined(RL_VERSION_MINOR)
87 #error "Ancient/unsupported version of readline"
89 [ginac_cv_rl_supported="yes"])])
90 if test "x${ginac_cv_rl_supported}" != "xyes"; then
91 GINAC_WARNING([ginsh will not compile, because of an unsupported version of readline (<= 4.2 or non-GNU).])
94 LIBS="$LIBTERMCAP $LIBS"
95 AC_CHECK_LIB(readline, readline)
96 if test "x${ac_cv_lib_readline_readline}" != "xyes"; then
97 GINAC_WARNING([ginsh will not compile, because libreadline could not be found.])
103 AC_SUBST(GINSH_LIBS)])
105 dnl Usage: GINAC_TERMCAP
106 dnl libreadline is based on the termcap functions.
107 dnl Some systems have tgetent(), tgetnum(), tgetstr(), tgetflag(), tputs(),
108 dnl tgoto() in libc, some have it in libtermcap, some have it in libncurses.
109 dnl When both libtermcap and libncurses exist, we prefer the latter, because
110 dnl libtermcap is being phased out.
111 AC_DEFUN([GINAC_TERMCAP],
115 ;; dnl no termcap libraries are necessary (need hacked libreadline)
117 AC_CHECK_FUNCS(tgetent)
118 if test "x$ac_cv_func_tgetent" = "xyes"; then
121 AC_CHECK_LIB(ncurses, tgetent, LIBTERMCAP="-lncurses")
122 if test -z "$LIBTERMCAP"; then
123 AC_CHECK_LIB(termcap, tgetent, LIBTERMCAP="-ltermcap")
131 dnl Usage: GINAC_ERROR(message)
132 dnl This macro displays the warning "message" and sets the flag ginac_error
134 AC_DEFUN([GINAC_ERROR],[
135 ginac_error_txt="$ginac_error_txt
140 dnl Usage: GINAC_WARNING(message)
141 dnl This macro displays the warning "message" and sets the flag ginac_warning
143 AC_DEFUN([GINAC_WARNING],[
144 ginac_warning_txt="$ginac_warning_txt
149 dnl Usage: GINAC_CHECK_ERRORS
150 dnl (must be put at end of configure.in, because it exits on error)
151 dnl This macro displays a warning message if GINAC_ERROR or GINAC_WARNING
152 dnl has occured previously.
153 AC_DEFUN([GINAC_CHECK_ERRORS],[
154 if test "x${ginac_error}" = "xyes"; then
156 echo "**** The following problems have been detected by configure."
157 echo "**** Please check the messages below before running \"make\"."
158 echo "**** (see the section 'Common Problems' in the INSTALL file)"
159 echo "$ginac_error_txt"
160 if test "x${ginac_warning_txt}" != "x"; then
161 echo "${ginac_warning_txt}"
163 if test "x$cache_file" != "x/dev/null"; then
164 echo "deleting cache ${cache_file}"
169 if test "x${ginac_warning}" = "xyes"; then
171 echo "=== The following minor problems have been detected by configure."
172 echo "=== Please check the messages below before running \"make\"."
173 echo "=== (see the section 'Common Problems' in the INSTALL file)"
174 echo "$ginac_warning_txt"
176 echo "Configuration of GiNaC $VERSION done. Now type \"make\"."
179 AC_DEFUN([GINAC_HAVE_RUSAGE],
180 [AC_CACHE_CHECK([whether struct rusage is declared in <sys/resource.h>],
182 [AC_TRY_COMPILE([#include <sys/times.h>
183 #include <sys/resource.h>],
184 [struct rusage resUsage;
185 getrusage(RUSAGE_SELF, &resUsage);
187 [ac_cv_have_rusage=yes],
188 [ac_cv_have_rusage=no])
191 if test "$ac_cv_have_rusage" = yes; then
193 AC_DEFINE(HAVE_RUSAGE,,[define if struct rusage declared in <sys/resource.h>])
195 AC_SUBST(CONFIG_RUSAGE)
198 dnl Usage: GINAC_EXCOMPILER
199 dnl - Checks if dlopen is available
200 dnl - Allows user to disable GiNaC::compile_ex (e.g. for security reasons)
201 dnl Defines HAVE_LIBDL preprocessor macro, sets DL_LIBS and CONFIG_EXCOMPILER
203 AC_DEFUN([GINAC_EXCOMPILER], [
204 CONFIG_EXCOMPILER=yes
207 AC_ARG_ENABLE([excompiler],
208 [AS_HELP_STRING([--enable-excompiler], [Enable GiNaC::compile_ex (default: yes)])],
209 [if test "$enableval" = "no"; then
210 CONFIG_EXCOMPILER="no"
212 [CONFIG_EXCOMPILER="yes"])
216 CONFIG_EXCOMPILER="notsupported"
222 if test "$CONFIG_EXCOMPILER" = "yes"; then
223 AC_CHECK_HEADER([dlfcn.h], [CONFIG_EXCOMPILER="yes"], [CONFIG_EXCOMPILER="no"])
224 elif test "$CONFIG_EXCOMPILER" = "no"; then
225 AC_MSG_NOTICE([GiNaC::compile_ex disabled at user request.])
227 AC_MSG_NOTICE([GiNaC::compile_ex is not supported on $host_os.])
230 if test "$CONFIG_EXCOMPILER" = "yes"; then
231 dnl Some systems (GNU/Linux, Solaris) have dlopen in -ldl, some
232 dnl others (OpenBSD) -- in libc
233 found_dlopen_lib="no"
235 AC_CHECK_LIB(dl, dlopen, [found_dlopen_lib="yes"])
236 if test "$found_dlopen_lib" = "no"; then
238 AC_CHECK_FUNC(dlopen, [found_dlopen_lib="yes"])
240 if test "$found_dlopen_lib" = "no"; then
241 CONFIG_EXCOMPILER="no"
242 AC_MSG_WARN([Could not found working dlopen(). GiNaC::compile_ex will be disabled.])
244 AC_DEFINE(HAVE_LIBDL, 1, [set to 1 if dlopen() works.])
248 AC_SUBST(CONFIG_EXCOMPILER)])