* Hahaha! The second of the two tests was actually BS(tm) but this was only
[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.50)
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=9
22 GINACLIB_MICRO_VERSION=4
23 GINACLIB_INTERFACE_AGE=1
24 GINACLIB_BINARY_AGE=1
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, set 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=1
44 ARCHIVE_AGE=1
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_LIB_READLINE_VERSION
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 standard headers are installed on the system.
107 AC_CHECK_HEADER(iosfwd, , GINAC_ERROR([The standard <iosfwd> header file could not be found.]))
108 AC_CHECK_HEADER(iostream, , GINAC_ERROR([The standard <iostream> header file could not be found.]))
109 AC_CHECK_HEADER(vector, , GINAC_ERROR([The standard <vector> header file could not be found.]))
110 AC_CHECK_HEADER(list, , GINAC_ERROR([The standard <list> header file could not be found.]))
111 AC_CHECK_HEADER(map, , GINAC_ERROR([The standard <map> header file could not be found.]))
112 AC_CHECK_HEADER(string, , GINAC_ERROR([The standard <string> header file could not be found.]))
113 AC_CHECK_HEADER(sstream, , GINAC_ERROR([The standard <sstream> header file could not be found.]))
114 AC_CHECK_HEADER(typeinfo, , GINAC_ERROR([The standard <typeinfo> header file could not be found.]))
115 AC_CHECK_HEADER(stdexcept, , GINAC_ERROR([The standard <stdexcept> header file could not be found.]))
116 AC_CHECK_HEADER(algorithm, , GINAC_ERROR([The standard <algorithm> header file could not be found.]))
117
118 dnl We need to have Bruno Haible's CLN installed.
119 dnl (CLN versions >= 1.1.0 must have installed cln.m4 at a visible place,
120 dnl which provides this macro):
121 AC_PATH_CLN(1.1.0, [
122   LIBS="$LIBS $CLN_LIBS"
123   CPPFLAGS="$CPPFLAGS $CLN_CPPFLAGS"
124 ], GINAC_ERROR([No suitable installed version of CLN could be found.]))
125
126 dnl Expand the cppflags and libraries needed by apps using GiNaC
127 GINACLIB_CPPFLAGS=$CPPFLAGS
128 GINACLIB_LIBS=$LIBS
129 AC_SUBST(GINACLIB_CPPFLAGS)
130 AC_SUBST(GINACLIB_LIBS)
131
132 dnl Check for utilities needed by the different kinds of documentation.
133 dnl Documantation needs only be built when extending it, so never mind if it
134 dnl cannot find those helpers:
135 AC_PATH_PROG(DOXYGEN, doxygen, "")
136 AC_PATH_PROG(LATEX, latex, "")
137 AC_PATH_PROG(MAKEINDEX, makeindex, "")
138 AC_PATH_PROG(DVIPS, dvips, "")
139 AC_PATH_PROG(FIG2DEV, fig2dev, "")
140
141 dnl Determine which documentation shall be built
142 TUTORIAL_TARGETS=
143 REFERENCE_TARGETS=
144 if test "x${enable_html_doc}" = "xyes"; then
145   TUTORIAL_TARGETS="$TUTORIAL_TARGETS ginac.html"
146   if [[ "$DOXYGEN" ]]; then
147     REFERENCE_TARGETS="$REFERENCE_TARGETS index.html"
148   fi
149 fi
150 if test "x${enable_ps_doc}" = "xyes"; then
151   TUTORIAL_TARGETS="$TUTORIAL_TARGETS ginac.ps"
152   if [[ "$DOXYGEN" ]]; then
153     REFERENCE_TARGETS="$REFERENCE_TARGETS reference.ps"
154   fi
155 fi
156 AC_SUBST(TUTORIAL_TARGETS)
157 AC_SUBST(REFERENCE_TARGETS)
158
159 dnl Output makefiles etc.
160 AC_OUTPUT([
161 Makefile
162 GiNaC.spec
163 ginac-config
164 ginac-config.1
165 ginac/Makefile
166 ginac/version.h
167 check/Makefile
168 ginsh/Makefile
169 ginsh/ginsh.1
170 tools/Makefile
171 tools/viewgar.1
172 doc/Makefile
173 doc/tutorial/Makefile
174 doc/reference/Makefile
175 ], [chmod +x ginac-config])
176 dnl Display a final warning if there has been a GINAC_ERROR or a GINAC_WARNING
177 GINAC_CHECK_ERRORS