* INSTALL: reflect Cint status.
[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=0
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_WARNING([I could not find libreadline (needed by ginsh).])
99 fi
100 GINSH_LIBS=$LIBS
101 LIBS=$save_LIBS
102 AC_SUBST(GINSH_LIBS)
103
104 dnl Make sure all the necessary new-style headers are installed on the system.
105 dnl If one of them cannot be found the system is probably not ANSI-conform
106 dnl enough so trying the .h-style headers is a waste of time.
107 AC_CHECK_HEADERS(iostream vector map string list typeinfo iterator stdexcept algorithm, ,
108   AC_MSG_ERROR(need to have ANSI compliant headers))
109 AC_CHECK_HEADERS(sstream strstream)
110
111 dnl We need to have Bruno Haible's CLN installed.
112 dnl (CLN versions >= 1.1.0 must have installed cln.m4 at a visible place,
113 dnl which provides this macro):
114 AC_PATH_CLN(1.1.0, [
115   LIBS="$LIBS $CLN_LIBS"
116   CPPFLAGS="$CPPFLAGS $CLN_CPPFLAGS"
117 ], GINAC_ERROR([No suitable installed version of CLN could be found.]))
118
119 dnl Expand the cppflags and libraries needed by apps using GiNaC
120 GINACLIB_CPPFLAGS=$CPPFLAGS
121 GINACLIB_LIBS=$LIBS
122 AC_SUBST(GINACLIB_CPPFLAGS)
123 AC_SUBST(GINACLIB_LIBS)
124
125 dnl Check for utilities needed by the different kinds of documentation.
126 dnl Documantation needs only be built when extending it, so never mind if it
127 dnl cannot find those helpers:
128 AC_PATH_PROG(DOXYGEN, doxygen, "")
129 AC_PATH_PROG(LATEX, latex, "")
130 AC_PATH_PROG(MAKEINDEX, makeindex, "")
131 AC_PATH_PROG(DVIPS, dvips, "")
132 AC_PATH_PROG(FIG2DEV, fig2dev, "")
133
134 dnl Determine which documentation shall be built
135 TUTORIAL_TARGETS=
136 REFERENCE_TARGETS=
137 if test "x${enable_html_doc}" = "xyes"; then
138   TUTORIAL_TARGETS="$TUTORIAL_TARGETS ginac.html"
139   if [[ "$DOXYGEN" ]]; then
140     REFERENCE_TARGETS="$REFERENCE_TARGETS index.html"
141   fi
142 fi
143 if test "x${enable_ps_doc}" = "xyes"; then
144   TUTORIAL_TARGETS="$TUTORIAL_TARGETS ginac.ps"
145   if [[ "$DOXYGEN" ]]; then
146     REFERENCE_TARGETS="$REFERENCE_TARGETS reference.ps"
147   fi
148 fi
149 AC_SUBST(TUTORIAL_TARGETS)
150 AC_SUBST(REFERENCE_TARGETS)
151
152 dnl Configure GiNaC-cint
153 AC_ARG_WITH(cint, [  --with-cint=CINTSYSDIR  build GiNaC-cint C++ interpreter [default=no]], , with_cint=no)
154 dnl The variable GINACCINTDIR controls whether the subdirectory cint is entered
155 dnl from the top-level Makefile or not.
156 GINACCINTDIR=
157 if test "x$with_cint" != "xno"; then
158   dnl Maybe CINTSYSDIR was passed as an argument.  In this case it should 
159   dnl override any CINTSYSDIR variable already set.
160   if test "x$with_cint" != "xyes"; then
161     CINTSYSDIR=$with_cint
162     export CINTSYSDIR
163   fi
164   dnl Now have to handle two possbile cases, one with CINTSYSDIR set and one 
165   dnl without.  In the first one we search for cint and makecint in CINTSYSDIR
166   dnl and PATH, in the second there is only the PATH to search in.
167   if test "x$CINTSYSDIR" != "x"; then
168     AC_PATH_PROG(CINT, cint, , $CINTSYSDIR:$PATH)
169     AC_PATH_PROG(MAKECINT, makecint, , $CINTSYSDIR:$PATH)
170     if [[ "$CINT" -a "$MAKECINT" ]]; then
171       AC_MSG_RESULT([creating cint/Makefile])
172       (cd cint && \
173       $MAKECINT -mk Makefile.makecint -o ginaccint.bin -m \
174         -D OBSCURE_CINT_HACK "$CPPFLAGS" -cc "$CXXFLAGS" \
175         -I .. -I $CINTSYSDIR -m -H ../ginac/ginac.h \
176         -C++ ginaccint.bin.cpp \
177         -l -L../ginac/.libs -lginac -lcln \
178         -cint -M0x110; \
179       cd ..)
180       GINACCINTDIR="cint"
181       AC_SUBST(CINTSYSDIR)
182     else
183       GINAC_WARNING([I could not find cint and makecint (needed for building GiNaC-cint).])
184     fi
185   else
186     AC_PATH_PROG(CINT, cint)
187     AC_PATH_PROG(MAKECINT, makecint)
188     if [[ "$CINT" -a "$MAKECINT" ]]; then
189       AC_MSG_RESULT([creating cint/Makefile])
190       (cd cint && \
191       $MAKECINT -mk Makefile.makecint -o ginaccint.bin -m \
192         -D OBSCURE_CINT_HACK "$CPPFLAGS" -cc "$CXXFLAGS" \
193         -I .. -m -H ../ginac/ginac.h \
194         -C++ ginaccint.bin.cpp \
195         -l -L../ginac/.libs -lginac -lcln \
196         -cint -M0x110; \
197       cd ..)
198       GINACCINTDIR="cint"
199     else
200       GINAC_WARNING([I could not find cint and makecint (needed for building GiNaC-cint).])
201     fi
202   fi
203 fi
204 AC_SUBST(GINACCINTDIR)
205
206 dnl Output makefiles etc.
207 AC_OUTPUT([
208 Makefile
209 GiNaC.spec
210 ginac-config
211 ginac-config.1
212 ginac/Makefile
213 ginac/version.h
214 check/Makefile
215 ginsh/Makefile
216 ginsh/ginsh.1
217 tools/Makefile
218 tools/viewgar.1
219 doc/Makefile
220 doc/tutorial/Makefile
221 doc/reference/Makefile
222 cint/Makefile
223 cint/launch.h
224 ], [chmod +x ginac-config])
225 dnl Display a final warning if there has been a GINAC_ERROR or a GINAC_WARNING
226 GINAC_CHECK_ERRORS