* Fix incompatibilities with recent versions of libreadline by having
[ginac.git] / configure.in
1 dnl Process this file with autoconf to produce a configure script.
2
3 AC_INIT(ginac/basic.cpp)
4 AC_PREREQ(2.13)
5
6 dnl GiNaC library version information.
7 dnl
8 dnl Making releases:
9 dnl   GINACLIB_MICRO_VERSION += 1;
10 dnl   GINACLIB_INTERFACE_AGE += 1;
11 dnl   GINACLIB_BINARY_AGE += 1;
12 dnl if any functions have been added, set GINACLIB_INTERFACE_AGE to 0.
13 dnl if backwards compatibility has been broken,
14 dnl set GINACLIB_BINARY_AGE and GINACLIB_INTERFACE_AGE to 0.
15 dnl
16 dnl NOTE: these can't be renamed to GINAC_MAJOR_VERSION etc. because
17 dnl autoconf sees "AC_MAJOR_VERSION" and complains about an undefined macro
18 dnl (don't we all *love* M4?)...
19
20 GINACLIB_MAJOR_VERSION=0
21 GINACLIB_MINOR_VERSION=8
22 GINACLIB_MICRO_VERSION=2
23 GINACLIB_INTERFACE_AGE=0
24 GINACLIB_BINARY_AGE=0
25 GINACLIB_VERSION=$GINACLIB_MAJOR_VERSION.$GINACLIB_MINOR_VERSION.$GINACLIB_MICRO_VERSION
26
27 AC_SUBST(GINACLIB_MAJOR_VERSION)
28 AC_SUBST(GINACLIB_MINOR_VERSION)
29 AC_SUBST(GINACLIB_MICRO_VERSION)
30 AC_SUBST(GINACLIB_INTERFACE_AGE)
31 AC_SUBST(GINACLIB_BINARY_AGE)
32 AC_SUBST(GINACLIB_VERSION)
33
34 dnl GiNaC archive file version information.
35 dnl
36 dnl If properties have been added, ARCHIVE_VERSION += 1, ARCHIVE_AGE += 1.
37 dnl If backwards compatibility has been broken, ARCHIVE_AGE to 0.
38 dnl
39 dnl The version number in newly created archives will be ARCHIVE_VERSION.
40 dnl Archives version (ARCHIVE_VERSION-ARCHIVE_AGE) thru ARCHIVE_VERSION can
41 dnl be read by this version of the GiNaC library.
42
43 ARCHIVE_VERSION=0
44 ARCHIVE_AGE=0
45
46 AC_SUBST(ARCHIVE_VERSION)
47 AC_SUBST(ARCHIVE_AGE)
48 AC_DEFINE_UNQUOTED(ARCHIVE_VERSION, $ARCHIVE_VERSION)
49 AC_DEFINE_UNQUOTED(ARCHIVE_AGE, $ARCHIVE_AGE)
50
51 dnl libtool versioning
52 LT_RELEASE=$GINACLIB_MAJOR_VERSION.$GINACLIB_MINOR_VERSION
53 LT_CURRENT=`expr $GINACLIB_MICRO_VERSION - $GINACLIB_INTERFACE_AGE`
54 LT_REVISION=$GINACLIB_INTERFACE_AGE
55 LT_AGE=`expr $GINACLIB_BINARY_AGE - $GINACLIB_INTERFACE_AGE`
56
57 AC_SUBST(LT_RELEASE)
58 AC_SUBST(LT_CURRENT)
59 AC_SUBST(LT_REVISION)
60 AC_SUBST(LT_AGE)
61
62 dnl This defines PACKAGE and VERSION.
63 AM_CONFIG_HEADER(config.h)
64 AM_INIT_AUTOMAKE([GiNaC], $GINACLIB_VERSION)
65
66 dnl Check for the compiler and all the utilities needed for the build.
67 AC_PROG_CXX
68 AC_PROG_CXXCPP
69 AC_PROG_INSTALL
70 AM_PROG_LIBTOOL
71 AM_PROG_LEX
72 AC_PROG_YACC
73
74 dnl Configure options.
75 AC_ARG_ENABLE(html-doc, [  --enable-html-doc       build HTML documentation [default=no]], , enable_html_doc=no)
76 AC_ARG_ENABLE(ps-doc,   [  --enable-ps-doc         build PostScript documentation [default=no]], , enable_ps_doc=no)
77
78 dnl Check for data types which are needed by the hash function 
79 dnl (golden_ratio_hash).
80 AC_CHECK_SIZEOF(long, 4)
81 AC_CHECK_SIZEOF(long long, 8)
82 AC_CHECK_SIZEOF(long double, 12)
83
84 dnl Switch to C++ language mode for the following libraries and headers.
85 AC_LANG_CPLUSPLUS
86
87 dnl Check for stuff needed for building the GiNaC interactive shell (ginsh).
88 AC_CHECK_HEADERS(unistd.h)
89 AC_CHECK_HEADERS(readline/readline.h readline/history.h)
90 if test "x${ac_cv_header_readline_readline_h}" != "xyes" -o "x${ac_cv_header_readline_history_h}" != "xyes"; then
91   GINAC_WARNING([I could not find the headers for libreadline (needed for building ginsh).])
92 fi
93 GINAC_TERMCAP
94 save_LIBS=$LIBS
95 LIBS="$LIBTERMCAP $LIBS"
96 AC_CHECK_LIB(readline, readline)
97 if test "x${ac_cv_lib_readline_readline}" = "xyes"; then
98   GINAC_RLVERSION
99 else
100   GINAC_WARNING([I could not find libreadline (needed by ginsh).])
101 fi
102 GINSH_LIBS=$LIBS
103 LIBS=$save_LIBS
104 AC_SUBST(GINSH_LIBS)
105
106 dnl Make sure all the necessary new-style headers are installed on the system.
107 dnl If one of them cannot be found the system is probably not ANSI-conform
108 dnl enough so trying the .h-style headers is a waste of time.
109 AC_CHECK_HEADERS(iostream vector map string list typeinfo iterator stdexcept algorithm, ,
110   AC_MSG_ERROR(need to have ANSI compliant headers))
111 AC_CHECK_HEADERS(sstream strstream)
112
113 dnl We need to have Bruno Haible's CLN installed.
114 dnl (CLN versions >= 1.1.0 must have installed cln.m4 at a visible place,
115 dnl which provides this macro):
116 AC_PATH_CLN(1.1.0, [
117   LIBS="$LIBS $CLN_LIBS"
118   CPPFLAGS="$CPPFLAGS $CLN_CPPFLAGS"
119 ], GINAC_ERROR([No suitable installed version of CLN could be found.]))
120
121 dnl Expand the cppflags and libraries needed by apps using GiNaC
122 GINACLIB_CPPFLAGS=$CPPFLAGS
123 GINACLIB_LIBS=$LIBS
124 AC_SUBST(GINACLIB_CPPFLAGS)
125 AC_SUBST(GINACLIB_LIBS)
126
127 dnl Check for utilities needed by the different kinds of documentation.
128 dnl Documantation needs only be built when extending it, so never mind if it
129 dnl cannot find those helpers:
130 AC_PATH_PROG(DOXYGEN, doxygen, "")
131 AC_PATH_PROG(LATEX, latex, "")
132 AC_PATH_PROG(MAKEINDEX, makeindex, "")
133 AC_PATH_PROG(DVIPS, dvips, "")
134 AC_PATH_PROG(FIG2DEV, fig2dev, "")
135
136 dnl Determine which documentation shall be built
137 TUTORIAL_TARGETS=
138 REFERENCE_TARGETS=
139 if test "x${enable_html_doc}" = "xyes"; then
140   TUTORIAL_TARGETS="$TUTORIAL_TARGETS ginac.html"
141   if [[ "$DOXYGEN" ]]; then
142     REFERENCE_TARGETS="$REFERENCE_TARGETS index.html"
143   fi
144 fi
145 if test "x${enable_ps_doc}" = "xyes"; then
146   TUTORIAL_TARGETS="$TUTORIAL_TARGETS ginac.ps"
147   if [[ "$DOXYGEN" ]]; then
148     REFERENCE_TARGETS="$REFERENCE_TARGETS reference.ps"
149   fi
150 fi
151 AC_SUBST(TUTORIAL_TARGETS)
152 AC_SUBST(REFERENCE_TARGETS)
153
154 dnl Configure GiNaC-cint
155 AC_ARG_WITH(cint, [  --with-cint=CINTSYSDIR  build GiNaC-cint C++ interpreter [default=no]], , with_cint=no)
156 dnl The variable GINACCINTDIR controls whether the subdirectory cint is entered
157 dnl from the top-level Makefile or not.
158 GINACCINTDIR=
159 if test "x$with_cint" != "xno"; then
160   dnl Maybe CINTSYSDIR was passed as an argument.  In this case it should 
161   dnl override any CINTSYSDIR variable already set.
162   if test "x$with_cint" != "xyes"; then
163     CINTSYSDIR=$with_cint
164     export CINTSYSDIR
165   fi
166   dnl Now have to handle two possbile cases, one with CINTSYSDIR set and one 
167   dnl without.  In the first one we search for cint and makecint in CINTSYSDIR
168   dnl and PATH, in the second there is only the PATH to search in.
169   if test "x$CINTSYSDIR" != "x"; then
170     AC_PATH_PROG(CINT, cint, , $CINTSYSDIR:$PATH)
171     AC_PATH_PROG(MAKECINT, makecint, , $CINTSYSDIR:$PATH)
172     if [[ "$CINT" -a "$MAKECINT" ]]; then
173       AC_MSG_RESULT([creating cint/Makefile])
174       (cd cint && \
175       $MAKECINT -mk Makefile.makecint -o ginaccint.bin -m \
176         -D OBSCURE_CINT_HACK "$CPPFLAGS" -cc "$CXXFLAGS" \
177         -I .. -I $CINTSYSDIR -m -H ../ginac/ginac.h \
178         -C++ ginaccint.bin.cpp \
179         -l -L../ginac/.libs -lginac -lcln \
180         -cint -M0x110; \
181       cd ..)
182       GINACCINTDIR="cint"
183       AC_SUBST(CINTSYSDIR)
184     else
185       GINAC_WARNING([I could not find cint and makecint (needed for building GiNaC-cint).])
186     fi
187   else
188     AC_PATH_PROG(CINT, cint)
189     AC_PATH_PROG(MAKECINT, makecint)
190     if [[ "$CINT" -a "$MAKECINT" ]]; then
191       AC_MSG_RESULT([creating cint/Makefile])
192       (cd cint && \
193       $MAKECINT -mk Makefile.makecint -o ginaccint.bin -m \
194         -D OBSCURE_CINT_HACK "$CPPFLAGS" -cc "$CXXFLAGS" \
195         -I .. -m -H ../ginac/ginac.h \
196         -C++ ginaccint.bin.cpp \
197         -l -L../ginac/.libs -lginac -lcln \
198         -cint -M0x110; \
199       cd ..)
200       GINACCINTDIR="cint"
201     else
202       GINAC_WARNING([I could not find cint and makecint (needed for building GiNaC-cint).])
203     fi
204   fi
205 fi
206 AC_SUBST(GINACCINTDIR)
207
208 dnl Output makefiles etc.
209 AC_OUTPUT([
210 Makefile
211 GiNaC.spec
212 ginac-config
213 ginac-config.1
214 ginac/Makefile
215 ginac/version.h
216 check/Makefile
217 ginsh/Makefile
218 ginsh/ginsh.1
219 tools/Makefile
220 tools/viewgar.1
221 doc/Makefile
222 doc/tutorial/Makefile
223 doc/reference/Makefile
224 cint/Makefile
225 cint/launch.h
226 ], [chmod +x ginac-config])
227 dnl Display a final warning if there has been a GINAC_ERROR or a GINAC_WARNING
228 GINAC_CHECK_ERRORS