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_LIBREADLINE
27 dnl Check if GNU readline library and headers are avialable.
28 dnl Defines GINSH_LIBS variable, and HAVE_LIBREADLINE,
29 dnl HAVE_READLINE_READLINE_H, HAVE_READLINE_HISTORY_H preprocessor macros.
31 dnl Note: this macro rejects readline versions <= 4.2 and non-GNU
34 AC_DEFUN([GINAC_READLINE],[
35 AC_REQUIRE([GINAC_TERMCAP])
37 AC_CHECK_HEADERS(readline/readline.h readline/history.h)
38 if test "x${ac_cv_header_readline_readline_h}" != "xyes" -o "x${ac_cv_header_readline_history_h}" != "xyes"; then
39 GINAC_WARNING([ginsh will not compile, because readline headers could not be found.])
41 AC_CACHE_CHECK([for version of libreadline], [ginac_cv_rl_supported], [
42 ginac_cv_rl_supported="no"
43 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
45 #include <readline/readline.h>
46 #if !defined(RL_VERSION_MAJOR) || !defined(RL_VERSION_MINOR)
47 #error "Ancient/unsupported version of readline"
49 [ginac_cv_rl_supported="yes"])])
50 if test "x${ginac_cv_rl_supported}" != "xyes"; then
51 GINAC_WARNING([ginsh will not compile, because of an unsupported version of readline (<= 4.2 or non-GNU).])
54 LIBS="$LIBTERMCAP $LIBS"
55 AC_CHECK_LIB(readline, readline)
56 if test "x${ac_cv_lib_readline_readline}" != "xyes"; then
57 GINAC_WARNING([ginsh will not compile, because libreadline could not be found.])
63 AC_SUBST(GINSH_LIBS)])
65 dnl Usage: GINAC_TERMCAP
66 dnl libreadline is based on the termcap functions.
67 dnl Some systems have tgetent(), tgetnum(), tgetstr(), tgetflag(), tputs(),
68 dnl tgoto() in libc, some have it in libtermcap, some have it in libncurses.
69 dnl When both libtermcap and libncurses exist, we prefer the latter, because
70 dnl libtermcap is being phased out.
71 AC_DEFUN([GINAC_TERMCAP],
75 ;; dnl no termcap libraries are necessary (need hacked libreadline)
77 AC_CHECK_FUNCS(tgetent)
78 if test "x$ac_cv_func_tgetent" = "xyes"; then
81 AC_CHECK_LIB(ncurses, tgetent, LIBTERMCAP="-lncurses")
82 if test -z "$LIBTERMCAP"; then
83 AC_CHECK_LIB(termcap, tgetent, LIBTERMCAP="-ltermcap")
91 dnl Usage: GINAC_ERROR(message)
92 dnl This macro displays the warning "message" and sets the flag ginac_error
94 AC_DEFUN([GINAC_ERROR],[
95 ginac_error_txt="$ginac_error_txt
100 dnl Usage: GINAC_WARNING(message)
101 dnl This macro displays the warning "message" and sets the flag ginac_warning
103 AC_DEFUN([GINAC_WARNING],[
104 ginac_warning_txt="$ginac_warning_txt
109 dnl Usage: GINAC_CHECK_ERRORS
110 dnl (must be put at end of configure.in, because it exits on error)
111 dnl This macro displays a warning message if GINAC_ERROR or GINAC_WARNING
112 dnl has occured previously.
113 AC_DEFUN([GINAC_CHECK_ERRORS],[
114 if test "x${ginac_error}" = "xyes"; then
116 echo "**** The following problems have been detected by configure."
117 echo "**** Please check the messages below before running \"make\"."
118 echo "**** (see the section 'Common Problems' in the INSTALL file)"
119 echo "$ginac_error_txt"
120 if test "x${ginac_warning_txt}" != "x"; then
121 echo "${ginac_warning_txt}"
123 if test "x$cache_file" != "x/dev/null"; then
124 echo "deleting cache ${cache_file}"
129 if test "x${ginac_warning}" = "xyes"; then
131 echo "=== The following minor problems have been detected by configure."
132 echo "=== Please check the messages below before running \"make\"."
133 echo "=== (see the section 'Common Problems' in the INSTALL file)"
134 echo "$ginac_warning_txt"
136 echo "Configuration of GiNaC $VERSION done. Now type \"make\"."
139 AC_DEFUN([GINAC_HAVE_RUSAGE],
140 [AC_CACHE_CHECK([whether struct rusage is declared in <sys/resource.h>],
142 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/times.h>
143 #include <sys/resource.h>]],
144 [[struct rusage resUsage;
145 getrusage(RUSAGE_SELF, &resUsage);
147 [ac_cv_have_rusage=yes],
148 [ac_cv_have_rusage=no])
151 if test "$ac_cv_have_rusage" = yes; then
153 AC_DEFINE(HAVE_RUSAGE,,[define if struct rusage declared in <sys/resource.h>])
155 AC_SUBST(CONFIG_RUSAGE)
158 dnl Usage: GINAC_EXCOMPILER
159 dnl - Checks if dlopen is available
160 dnl - Allows user to disable GiNaC::compile_ex (e.g. for security reasons)
161 dnl Defines HAVE_LIBDL preprocessor macro, sets DL_LIBS and CONFIG_EXCOMPILER
163 AC_DEFUN([GINAC_EXCOMPILER], [
164 CONFIG_EXCOMPILER=yes
167 AC_ARG_ENABLE([excompiler],
168 [AS_HELP_STRING([--enable-excompiler], [Enable GiNaC::compile_ex (default: yes)])],
169 [if test "$enableval" = "no"; then
170 CONFIG_EXCOMPILER="no"
172 [CONFIG_EXCOMPILER="yes"])
176 CONFIG_EXCOMPILER="notsupported"
182 if test "$CONFIG_EXCOMPILER" = "yes"; then
183 AC_CHECK_HEADER([dlfcn.h], [CONFIG_EXCOMPILER="yes"], [CONFIG_EXCOMPILER="no"])
184 elif test "$CONFIG_EXCOMPILER" = "no"; then
185 AC_MSG_NOTICE([GiNaC::compile_ex disabled at user request.])
187 AC_MSG_NOTICE([GiNaC::compile_ex is not supported on $host_os.])
190 if test "$CONFIG_EXCOMPILER" = "yes"; then
191 dnl Some systems (GNU/Linux, Solaris) have dlopen in -ldl, some
192 dnl others (OpenBSD) -- in libc
193 found_dlopen_lib="no"
195 AC_CHECK_LIB(dl, dlopen, [found_dlopen_lib="yes"])
196 if test "$found_dlopen_lib" = "no"; then
198 AC_CHECK_FUNC(dlopen, [found_dlopen_lib="yes"])
200 if test "$found_dlopen_lib" = "no"; then
201 CONFIG_EXCOMPILER="no"
202 AC_MSG_WARN([Could not found working dlopen(). GiNaC::compile_ex will be disabled.])
204 AC_DEFINE(HAVE_LIBDL, 1, [set to 1 if dlopen() works.])
208 AC_SUBST(CONFIG_EXCOMPILER)])