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([[
45 ]])], [ginac_cv_std_cxx_headers="yes"])
47 if test "${ginac_cv_std_cxx_headers}" != "yes"; then
48 AC_MSG_ERROR([Standard ISO C++ 98 headers are missing])
52 dnl Usage: GINAC_LIBREADLINE
54 dnl Check if GNU readline library and headers are avialable.
55 dnl Defines GINSH_LIBS variable, and HAVE_LIBREADLINE,
56 dnl HAVE_READLINE_READLINE_H, HAVE_READLINE_HISTORY_H preprocessor macros.
58 dnl Note: this macro rejects readline versions <= 4.2 and non-GNU
61 AC_DEFUN([GINAC_READLINE],[
62 AC_REQUIRE([GINAC_TERMCAP])
64 AC_CHECK_HEADERS(readline/readline.h readline/history.h)
65 if test "x${ac_cv_header_readline_readline_h}" != "xyes" -o "x${ac_cv_header_readline_history_h}" != "xyes"; then
66 GINAC_WARNING([ginsh will not compile, because readline headers could not be found.])
68 AC_CACHE_CHECK([for version of libreadline], [ginac_cv_rl_supported], [
69 ginac_cv_rl_supported="no"
70 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
72 #include <readline/readline.h>
73 #if !defined(RL_VERSION_MAJOR) || !defined(RL_VERSION_MINOR)
74 #error "Ancient/unsupported version of readline"
76 [ginac_cv_rl_supported="yes"])])
77 if test "x${ginac_cv_rl_supported}" != "xyes"; then
78 GINAC_WARNING([ginsh will not compile, because of an unsupported version of readline (<= 4.2 or non-GNU).])
81 LIBS="$LIBTERMCAP $LIBS"
82 AC_CHECK_LIB(readline, readline)
83 if test "x${ac_cv_lib_readline_readline}" != "xyes"; then
84 GINAC_WARNING([ginsh will not compile, because libreadline could not be found.])
90 AC_SUBST(GINSH_LIBS)])
92 dnl Usage: GINAC_TERMCAP
93 dnl libreadline is based on the termcap functions.
94 dnl Some systems have tgetent(), tgetnum(), tgetstr(), tgetflag(), tputs(),
95 dnl tgoto() in libc, some have it in libtermcap, some have it in libncurses.
96 dnl When both libtermcap and libncurses exist, we prefer the latter, because
97 dnl libtermcap is being phased out.
98 AC_DEFUN([GINAC_TERMCAP],
102 ;; dnl no termcap libraries are necessary (need hacked libreadline)
104 AC_CHECK_FUNCS(tgetent)
105 if test "x$ac_cv_func_tgetent" = "xyes"; then
108 AC_CHECK_LIB(ncurses, tgetent, LIBTERMCAP="-lncurses")
109 if test -z "$LIBTERMCAP"; then
110 AC_CHECK_LIB(termcap, tgetent, LIBTERMCAP="-ltermcap")
118 dnl Usage: GINAC_ERROR(message)
119 dnl This macro displays the warning "message" and sets the flag ginac_error
121 AC_DEFUN([GINAC_ERROR],[
122 ginac_error_txt="$ginac_error_txt
127 dnl Usage: GINAC_WARNING(message)
128 dnl This macro displays the warning "message" and sets the flag ginac_warning
130 AC_DEFUN([GINAC_WARNING],[
131 ginac_warning_txt="$ginac_warning_txt
136 dnl Usage: GINAC_CHECK_ERRORS
137 dnl (must be put at end of configure.in, because it exits on error)
138 dnl This macro displays a warning message if GINAC_ERROR or GINAC_WARNING
139 dnl has occured previously.
140 AC_DEFUN([GINAC_CHECK_ERRORS],[
141 if test "x${ginac_error}" = "xyes"; then
143 echo "**** The following problems have been detected by configure."
144 echo "**** Please check the messages below before running \"make\"."
145 echo "**** (see the section 'Common Problems' in the INSTALL file)"
146 echo "$ginac_error_txt"
147 if test "x${ginac_warning_txt}" != "x"; then
148 echo "${ginac_warning_txt}"
150 if test "x$cache_file" != "x/dev/null"; then
151 echo "deleting cache ${cache_file}"
156 if test "x${ginac_warning}" = "xyes"; then
158 echo "=== The following minor problems have been detected by configure."
159 echo "=== Please check the messages below before running \"make\"."
160 echo "=== (see the section 'Common Problems' in the INSTALL file)"
161 echo "$ginac_warning_txt"
163 echo "Configuration of GiNaC $VERSION done. Now type \"make\"."
166 AC_DEFUN([GINAC_HAVE_RUSAGE],
167 [AC_CACHE_CHECK([whether struct rusage is declared in <sys/resource.h>],
169 [AC_TRY_COMPILE([#include <sys/times.h>
170 #include <sys/resource.h>],
171 [struct rusage resUsage;
172 getrusage(RUSAGE_SELF, &resUsage);
174 [ac_cv_have_rusage=yes],
175 [ac_cv_have_rusage=no])
178 if test "$ac_cv_have_rusage" = yes; then
180 AC_DEFINE(HAVE_RUSAGE,,[define if struct rusage declared in <sys/resource.h>])
182 AC_SUBST(CONFIG_RUSAGE)
185 dnl Usage: GINAC_EXCOMPILER
186 dnl - Checks if dlopen is available
187 dnl - Allows user to disable GiNaC::compile_ex (e.g. for security reasons)
188 dnl Defines HAVE_LIBDL preprocessor macro, sets DL_LIBS and CONFIG_EXCOMPILER
190 AC_DEFUN([GINAC_EXCOMPILER], [
191 CONFIG_EXCOMPILER=yes
194 AC_ARG_ENABLE([excompiler],
195 [AS_HELP_STRING([--enable-excompiler], [Enable GiNaC::compile_ex (default: yes)])],
196 [if test "$enableval" = "no"; then
197 CONFIG_EXCOMPILER="no"
199 [CONFIG_EXCOMPILER="yes"])
203 CONFIG_EXCOMPILER="notsupported"
209 if test "$CONFIG_EXCOMPILER" = "yes"; then
210 AC_CHECK_HEADER([dlfcn.h], [CONFIG_EXCOMPILER="yes"], [CONFIG_EXCOMPILER="no"])
211 elif test "$CONFIG_EXCOMPILER" = "no"; then
212 AC_MSG_NOTICE([GiNaC::compile_ex disabled at user request.])
214 AC_MSG_NOTICE([GiNaC::compile_ex is not supported on $host_os.])
217 if test "$CONFIG_EXCOMPILER" = "yes"; then
218 dnl Some systems (GNU/Linux, Solaris) have dlopen in -ldl, some
219 dnl others (OpenBSD) -- in libc
220 found_dlopen_lib="no"
222 AC_CHECK_LIB(dl, dlopen, [found_dlopen_lib="yes"])
223 if test "$found_dlopen_lib" = "no"; then
225 AC_CHECK_FUNC(dlopen, [found_dlopen_lib="yes"])
227 if test "$found_dlopen_lib" = "no"; then
228 CONFIG_EXCOMPILER="no"
229 AC_MSG_WARN([Could not found working dlopen(). GiNaC::compile_ex will be disabled.])
231 AC_DEFINE(HAVE_LIBDL, 1, [set to 1 if dlopen() works.])
235 AC_SUBST(CONFIG_EXCOMPILER)])