File: acinclude.m4

package info (click to toggle)
ginac 1.5.8-1
  • links: PTS
  • area: main
  • in suites: squeeze
  • size: 5,628 kB
  • ctags: 4,936
  • sloc: cpp: 44,703; sh: 11,126; perl: 1,157; yacc: 763; makefile: 414; lex: 200; sed: 32
file content (216 lines) | stat: -rw-r--r-- 6,925 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
dnl ===========================================================================
dnl Additional macros used to configure GiNaC.  We don't start our own 
dnl additions' names with AC_ but with GINAC_ in order to steer clear of
dnl future trouble.
dnl ===========================================================================

dnl Usage: GINAC_STD_CXX_HEADERS
dnl Check for standard C++ headers, bail out if something is missing.
AC_DEFUN([GINAC_STD_CXX_HEADERS], [
AC_CACHE_CHECK([for standard C++ header files], [ginac_cv_std_cxx_headers], [
	ginac_cv_std_cxx_headers="no"
	AC_LANG_PUSH([C++])
	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
		#include <iosfwd>
		#include <iostream>
		#include <vector>
		#include <list>
		#include <map>
		#include <set>
		#include <string>
		#include <sstream>
		#include <typeinfo>
		#include <stdexcept>
		#include <algorithm>
		#include <limits>
		#include <ctime>
		]])], [ginac_cv_std_cxx_headers="yes"])
	AC_LANG_POP([C++])])
if test "${ginac_cv_std_cxx_headers}" != "yes"; then
	AC_MSG_ERROR([Standard ISO C++ 98 headers are missing])
fi
])

dnl Usage: GINAC_LIBREADLINE
dnl
dnl Check if GNU readline library and headers are avialable.
dnl Defines GINSH_LIBS variable, and HAVE_LIBREADLINE,
dnl HAVE_READLINE_READLINE_H, HAVE_READLINE_HISTORY_H preprocessor macros.
dnl
dnl Note: this macro rejects readline versions <= 4.2 and non-GNU
dnl implementations.
dnl
AC_DEFUN([GINAC_READLINE],[
AC_REQUIRE([GINAC_TERMCAP])
GINSH_LIBS=""
AC_CHECK_HEADERS(readline/readline.h readline/history.h)
if test "x${ac_cv_header_readline_readline_h}" != "xyes" -o "x${ac_cv_header_readline_history_h}" != "xyes"; then
	GINAC_WARNING([readline headers could not be found.])
else
	AC_CACHE_CHECK([for version of libreadline], [ginac_cv_rl_supported], [
		ginac_cv_rl_supported="no"
		AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
			#include <stdio.h>
			#include <readline/readline.h>
			#if !defined(RL_VERSION_MAJOR) || !defined(RL_VERSION_MINOR)
			#error "Ancient/unsupported version of readline"
			#endif]])],
			[ginac_cv_rl_supported="yes"])])
	if test "x${ginac_cv_rl_supported}" != "xyes"; then
		GINAC_WARNING([Unsupported version of readline (<= 4.2 or non-GNU).])
	else
		save_LIBS="$LIBS"
		LIBS="$LIBTERMCAP $LIBS"
		AC_CHECK_LIB(readline, readline)
		if test "x${ac_cv_lib_readline_readline}" != "xyes"; then
			GINAC_WARNING([libreadline could not be found.])
		fi
		GINSH_LIBS="$LIBS"
		LIBS="$save_LIBS"
	fi
fi
AC_SUBST(GINSH_LIBS)])
	
dnl Usage: GINAC_TERMCAP
dnl libreadline is based on the termcap functions.
dnl Some systems have tgetent(), tgetnum(), tgetstr(), tgetflag(), tputs(),
dnl tgoto() in libc, some have it in libtermcap, some have it in libncurses.
dnl When both libtermcap and libncurses exist, we prefer the latter, because
dnl libtermcap is being phased out.
AC_DEFUN([GINAC_TERMCAP],
[LIBTERMCAP=
case $host_os in
*mingw32*)
 ;; dnl no termcap libraries are necessary (need hacked libreadline)
*)
AC_CHECK_FUNCS(tgetent)
if test "x$ac_cv_func_tgetent" = "xyes"; then
    :
else
    AC_CHECK_LIB(ncurses, tgetent, LIBTERMCAP="-lncurses")
    if test -z "$LIBTERMCAP"; then
        AC_CHECK_LIB(termcap, tgetent, LIBTERMCAP="-ltermcap")
    fi
fi
;;
esac
AC_SUBST(LIBTERMCAP)
])

dnl Usage: GINAC_ERROR(message)
dnl This macro displays the warning "message" and sets the flag ginac_error
dnl to yes.
AC_DEFUN([GINAC_ERROR],[
ginac_error_txt="$ginac_error_txt
** $1
"
ginac_error=yes])

dnl Usage: GINAC_WARNING(message)
dnl This macro displays the warning "message" and sets the flag ginac_warning
dnl to yes.
AC_DEFUN([GINAC_WARNING],[
ginac_warning_txt="$ginac_warning_txt
== $1
"
ginac_warning=yes])

dnl Usage: GINAC_CHECK_ERRORS
dnl (must be put at end of configure.in, because it exits on error)
dnl This macro displays a warning message if GINAC_ERROR or GINAC_WARNING 
dnl has occured previously.
AC_DEFUN([GINAC_CHECK_ERRORS],[
if test "x${ginac_error}" = "xyes"; then
    echo "**** The following problems have been detected by configure."
    echo "**** Please check the messages below before running \"make\"."
    echo "**** (see the section 'Common Problems' in the INSTALL file)"
    echo "$ginac_error_txt"
    if test "x${ginac_warning_txt}" != "x"; then
        echo "${ginac_warning_txt}"
    fi
    if test "x$cache_file" != "x/dev/null"; then
        echo "deleting cache ${cache_file}"
        rm -f $cache_file
    fi
    exit 1
else 
    if test "x${ginac_warning}" = "xyes"; then
        echo "=== The following minor problems have been detected by configure."
        echo "=== Please check the messages below before running \"make\"."
        echo "=== (see the section 'Common Problems' in the INSTALL file)"
        echo "$ginac_warning_txt"
    fi
    echo "Configuration of GiNaC $VERSION done. Now type \"make\"."
fi])

AC_DEFUN([GINAC_HAVE_RUSAGE],
[AC_CACHE_CHECK([whether struct rusage is declared in <sys/resource.h>],
ac_cv_have_rusage,
 [AC_TRY_COMPILE([#include <sys/times.h>
                  #include <sys/resource.h>],
                  [struct rusage resUsage;
                   getrusage(RUSAGE_SELF, &resUsage);
                   return 0;],
                 [ac_cv_have_rusage=yes],
                 [ac_cv_have_rusage=no])
])
CONFIG_RUSAGE="no"
if test "$ac_cv_have_rusage" = yes; then
  CONFIG_RUSAGE="yes"
  AC_DEFINE(HAVE_RUSAGE,,[define if struct rusage declared in <sys/resource.h>])
fi
AC_SUBST(CONFIG_RUSAGE)
])

dnl Usage: GINAC_EXCOMPILER
dnl - Checks if dlopen is available
dnl - Allows user to disable GiNaC::compile_ex (e.g. for security reasons)
dnl Defines HAVE_LIBDL preprocessor macro, sets DL_LIBS and CONFIG_EXCOMPILER
dnl variables.
AC_DEFUN([GINAC_EXCOMPILER], [
CONFIG_EXCOMPILER=yes
DL_LIBS=""

AC_ARG_ENABLE([excompiler], 
	[AS_HELP_STRING([--enable-excompiler], [Enable GiNaC::compile_ex (default: yes)])],
	[if test "$enableval" = "no"; then
		CONFIG_EXCOMPILER="no"
	fi],
	[CONFIG_EXCOMPILER="yes"])

case $host_os in
	*mingw32*)
	CONFIG_EXCOMPILER="notsupported"
	;;
	*)
	;;
esac

if test "$CONFIG_EXCOMPILER" = "yes"; then
	AC_CHECK_HEADER([dlfcn.h], [CONFIG_EXCOMPILER="yes"], [CONFIG_EXCOMPILER="no"])
elif test "$CONFIG_EXCOMPILER" = "no"; then
	AC_MSG_NOTICE([GiNaC::compile_ex disabled at user request.])
else
	AC_MSG_NOTICE([GiNaC::compile_ex is not supported on $host_os.])
fi
	
if test "$CONFIG_EXCOMPILER" = "yes"; then
	dnl Some systems (GNU/Linux, Solaris) have dlopen in -ldl, some
	dnl others (OpenBSD) -- in libc
	found_dlopen_lib="no"
	DL_LIBS="-ldl"
	AC_CHECK_LIB(dl, dlopen, [found_dlopen_lib="yes"])
	if test "$found_dlopen_lib" = "no"; then
		DL_LIBS=""
		AC_CHECK_FUNC(dlopen, [found_dlopen_lib="yes"])
	fi
	if test "$found_dlopen_lib" = "no"; then
		CONFIG_EXCOMPILER="no"
		AC_MSG_WARN([Could not found working dlopen(). GiNaC::compile_ex will be disabled.])
	else
		AC_DEFINE(HAVE_LIBDL, 1, [set to 1 if dlopen() works.])
	fi
fi
AC_SUBST(DL_LIBS)
AC_SUBST(CONFIG_EXCOMPILER)])