80330af8e759544e3136512521516589c276a8ba
[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=6
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 AM_MAINTAINER_MODE
66
67 dnl Check for the compiler and all the utilities needed for the build.
68 AC_PROG_CXX
69 AC_PROG_CXXCPP
70 AC_PROG_INSTALL
71 AM_PROG_LIBTOOL
72 AM_PROG_LEX
73 AC_PROG_YACC
74
75 dnl Configure options.
76 AC_ARG_ENABLE(html-doc, [  --enable-html-doc       build HTML documentation [default=no]], , enable_html_doc=no)
77 AC_ARG_ENABLE(ps-doc,   [  --enable-ps-doc         build PostScript documentation [default=no]], , enable_ps_doc=no)
78 AC_ARG_WITH(cint, [  --with-cint=CINTSYSDIR  build GiNaC-cint C++ interpreter [default=no]], , with_cint=no)
79
80 dnl Check for data types which are needed by the hash function (golden_ratio_hash).
81 AC_CHECK_SIZEOF(long, 4)
82 AC_CHECK_SIZEOF(long long, 8)
83 AC_CHECK_SIZEOF(long double, 12)
84
85 dnl Switch to C++ language mode for the following libraries and headers.
86 AC_LANG_CPLUSPLUS
87
88 dnl Check for stuff needed for building the GiNaC interactive shell (ginsh).
89 AC_CHECK_HEADERS(unistd.h)
90 AC_CHECK_HEADERS(readline/readline.h readline/history.h)
91 if test "x${ac_cv_header_readline_readline_h}" != "xyes" -o "x${ac_cv_header_readline_history_h}" != "xyes"; then
92   GINAC_WARNING([I could not find the headers for libreadline (needed for building ginsh).])
93 fi
94 GINAC_TERMCAP
95 save_LIBS=$LIBS
96 LIBS="$LIBTERMCAP $LIBS"
97 AC_CHECK_LIB(readline, readline)
98 if test "x${ac_cv_lib_readline_readline}" != "xyes"; then
99   GINAC_WARNING([I could not find libreadline (needed by ginsh).])
100 fi
101 GINSH_LIBS=$LIBS
102 LIBS=$save_LIBS
103 AC_SUBST(GINSH_LIBS)
104
105 dnl Make sure the following libraries work by testing for symbols therein. 
106 dnl They are automatically added the the variable $LIBS and thus passed into
107 dnl the Makefile:
108 AC_CHECK_LIB(stdc++, cout)
109
110 dnl Make sure all the necessary new-style headers are installed on the system.
111 dnl If one of them cannot be found the system is probably not ANSI-conform
112 dnl enough so trying the .h-style headers is a waste of time.
113 AC_CHECK_HEADERS(iostream vector map string list typeinfo iterator stdexcept algorithm, ,
114   AC_MSG_ERROR(need to have ANSI compliant headers))
115 AC_CHECK_HEADERS(sstream strstream)
116
117 dnl We need to have Bruno Haible's CLN installed (macros are in acinclude.m4):
118 GINAC_CHECK_CLN_H
119 GINAC_CHECK_LIBCLN
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 LIBGINACCINT=
156 GINACCINTDIR=
157 if test "x$with_cint" != "xno"; then
158   if test "x$enable_static" != "xyes"; then
159     AC_MSG_ERROR([currently GiNaC-cint needs to build a static libginac])
160   fi
161   if test "x$with_cint" = "xyes"; then
162     if test "x$CINTSYSDIR" = "x"; then
163       AC_MSG_ERROR([please export \$CINTSYSDIR or specify --with-cint=CINTSYSDIR])
164     fi
165   else
166     CINTSYSDIR=$with_cint
167     export CINTSYSDIR
168   fi
169   AC_PATH_PROG(CINT, cint, "", $CINTSYSDIR:$PATH)
170   AC_PATH_PROG(MAKECINT, makecint, "", $CINTSYSDIR:$PATH)
171   if [[ "$CINT" -a "$MAKECINT" ]]; then
172     AC_MSG_RESULT([creating cint/Makefile])
173     (cd cint && \
174     $MAKECINT -mk Makefile.makecint -o ginaccint.bin -m \
175       -D OBSCURE_CINT_HACK -D CINT_CONVERSION_WORKAROUND -D NO_NAMESPACE_GINAC \
176       -I .. -I $CINTSYSDIR -m -H ../ginac/ginac.h dummies.h \
177       -C++ dummies.cpp -C++ ginaccint.bin.cpp \
178       -l ./libginac.a -lcln -cint -M0x10; \
179     cd ..)
180     LIBGINACCINT="libginac.a"
181     GINACCINTDIR="cint"
182   else
183     AC_MSG_ERROR([Cannot configure GiNaC-cint])
184   fi
185 fi
186 AC_SUBST(CINTSYSDIR)
187 AC_SUBST(LIBGINACCINT)
188 AC_SUBST(GINACCINTDIR)
189
190 dnl Output makefiles etc.
191 AC_OUTPUT([
192 Makefile
193 GiNaC.spec
194 ginac-config
195 ginac/Makefile
196 ginac/version.h
197 check/Makefile
198 ginsh/Makefile
199 tools/Makefile
200 doc/Makefile
201 doc/tutorial/Makefile
202 doc/reference/Makefile
203 cint/Makefile
204 cint/ginaccint
205 ], [chmod +x ginac-config cint/ginaccint])
206 dnl Display a final warning if there has been a GINAC_ERROR or a GINAC_WARNING
207 GINAC_CHECK_ERRORS