- Macro GINAC_CHECK_LIBCLN only checks if doublefactorial is available now.
[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 Configure options
7 AC_ARG_ENABLE(html-doc, [  --enable-html-doc       build HTML documentation [default=yes]], , enable_html_doc=yes)
8 AC_ARG_ENABLE(ps-doc,   [  --enable-ps-doc         build PostScript documentation [default=yes]], , enable_ps_doc=yes)
9 AC_ARG_WITH(cint, [  --with-cint             build GiNaC-cint C++ interpreter [default=no]], with_cint=no])
10
11 dnl GiNaC library version information
12 dnl
13 dnl Making releases:
14 dnl   GINACLIB_MICRO_VERSION += 1;
15 dnl   GINACLIB_INTERFACE_AGE += 1;
16 dnl   GINACLIB_BINARY_AGE += 1;
17 dnl if any functions have been added, set GINACLIB_INTERFACE_AGE to 0.
18 dnl if backwards compatibility has been broken,
19 dnl set GINACLIB_BINARY_AGE and GINACLIB_INTERFACE_AGE to 0.
20 dnl
21 dnl NOTE: these can't be renamed to GINAC_MAJOR_VERSION etc. because
22 dnl autoconf sees "AC_MAJOR_VERSION" and complains about an undefined macro
23 dnl (don't we all *love* M4?)...
24
25 GINACLIB_MAJOR_VERSION=0
26 GINACLIB_MINOR_VERSION=4
27 GINACLIB_MICRO_VERSION=1
28 GINACLIB_INTERFACE_AGE=0
29 GINACLIB_BINARY_AGE=1
30 GINACLIB_VERSION=$GINACLIB_MAJOR_VERSION.$GINACLIB_MINOR_VERSION.$GINACLIB_MICRO_VERSION
31
32 AC_SUBST(GINACLIB_MAJOR_VERSION)
33 AC_SUBST(GINACLIB_MINOR_VERSION)
34 AC_SUBST(GINACLIB_MICRO_VERSION)
35 AC_SUBST(GINACLIB_INTERFACE_AGE)
36 AC_SUBST(GINACLIB_BINARY_AGE)
37 AC_SUBST(GINACLIB_VERSION)
38
39 dnl GiNaC archive file version information
40 dnl
41 dnl If properties have been added, ARCHIVE_VERSION += 1.
42 dnl If backwards compatibility has been broken, ARCHIVE_AGE to 0.
43 dnl
44 dnl The version number in newly created archives will be ARCHIVE_VERSION.
45 dnl Archives version (ARCHIVE_VERSION-ARCHIVE_AGE) thru ARCHIVE_VERSION can
46 dnl be read by this version of the GiNaC library.
47
48 ARCHIVE_VERSION=0
49 ARCHIVE_AGE=0
50
51 AC_SUBST(ARCHIVE_VERSION)
52 AC_SUBST(ARCHIVE_AGE)
53 AC_DEFINE_UNQUOTED(ARCHIVE_VERSION, $ARCHIVE_VERSION)
54 AC_DEFINE_UNQUOTED(ARCHIVE_AGE, $ARCHIVE_AGE)
55
56 dnl libtool versioning
57 LT_RELEASE=$GINACLIB_MAJOR_VERSION.$GINACLIB_MINOR_VERSION
58 LT_CURRENT=`expr $GINACLIB_MICRO_VERSION - $GINACLIB_INTERFACE_AGE`
59 LT_REVISION=$GINACLIB_INTERFACE_AGE
60 LT_AGE=`expr $GINACLIB_BINARY_AGE - $GINACLIB_INTERFACE_AGE`
61
62 AC_SUBST(LT_RELEASE)
63 AC_SUBST(LT_CURRENT)
64 AC_SUBST(LT_REVISION)
65 AC_SUBST(LT_AGE)
66
67 dnl This defines PACKAGE and VERSION
68 AM_CONFIG_HEADER(config.h)
69 AM_INIT_AUTOMAKE([GiNaC], $GINACLIB_VERSION)
70 AM_MAINTAINER_MODE
71
72 dnl ===========================================================================
73 dnl Check for the compiler and all the utilities needed for the build:
74 dnl ===========================================================================
75 AC_PROG_CXX
76 AC_PROG_CXXCPP
77 AC_PROG_INSTALL
78 AM_PROG_LIBTOOL
79 AM_PROG_LEX
80 AC_PROG_YACC
81
82 dnl Check for data types which are needed by the hash function (golden_ratio_hash)
83 AC_CHECK_SIZEOF(long, 4)
84 AC_CHECK_SIZEOF(long long, 8)
85 AC_CHECK_SIZEOF(long double, 12)
86
87 dnl Switch to C++ language mode for the following libraries and headers:
88 AC_LANG_CPLUSPLUS
89
90 dnl Check for stuff needed for building the GiNaC interactive shell (ginsh):
91 AC_CHECK_HEADERS(unistd.h)
92 AC_CHECK_HEADERS(readline/readline.h readline/history.h)
93 save_LIBS=$LIBS
94 AC_CHECK_LIB(readline, readline)
95 GINSH_LIBS=$LIBS
96 LIBS=$save_LIBS
97 AC_SUBST(GINSH_LIBS)
98
99 dnl Make sure the following libraries work by testing for symbols therein. 
100 dnl They are automatically added the the variable $LIBS and thus passed into
101 dnl the Makefile:
102 AC_CHECK_LIB(stdc++, cout)
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 strstream stdexcept algorithm, ,
108     AC_MSG_ERROR(need to have ANSI compliant headers))
109
110 dnl We need to have Bruno Haible's CLN installed (macros are in acinclude.m4):
111 GINAC_CHECK_CLN_H
112 GINAC_CHECK_LIBCLN
113
114 dnl Expand the cppflags and libraries needed by apps using GiNaC
115 GINACLIB_CPPFLAGS=$CPPFLAGS
116 GINACLIB_LIBS=$LIBS
117 AC_SUBST(GINACLIB_CPPFLAGS)
118 AC_SUBST(GINACLIB_LIBS)
119
120 dnl Check for utilities needed by the different kinds of documentation.
121 dnl Documantation needs only be built when extending it, so never mind if it
122 dnl cannot find those helpers:
123 AC_PATH_PROG(DOXYGEN, doxygen, "")
124 AC_PATH_PROG(LATEX, latex, "")
125 AC_PATH_PROG(MAKEINDEX, makeindex, "")
126 AC_PATH_PROG(DVIPS, dvips, "")
127 AC_PATH_PROG(FIG2DEV, fig2dev, "")
128
129 dnl Determine which documentation shall be built
130 TUTORIAL_TARGETS=
131 REFERENCE_TARGETS=
132 if [[ "x$enable_html_doc" = "xyes" ]]; then
133   TUTORIAL_TARGETS="$TUTORIAL_TARGETS ginac.html"
134   if [[ "$DOXYGEN" ]]; then
135     REFERENCE_TARGETS="$REFERENCE_TARGETS index.html"
136   fi
137 fi
138 if [[ "x$enable_ps_doc" = "xyes" ]]; then
139   TUTORIAL_TARGETS="$TUTORIAL_TARGETS ginac.ps"
140   if [[ "$DOXYGEN" ]]; then
141     REFERENCE_TARGETS="$REFERENCE_TARGETS reference.ps"
142   fi
143 fi
144 AC_SUBST(TUTORIAL_TARGETS)
145 AC_SUBST(REFERENCE_TARGETS)
146
147 dnl Output makefiles etc.
148 AC_OUTPUT([
149 Makefile
150 GiNaC.spec
151 ginac-config
152 ginac/Makefile
153 check/Makefile
154 ginsh/Makefile
155 tools/Makefile
156 doc/Makefile
157 doc/tutorial/Makefile
158 doc/reference/Makefile
159 ], [chmod +x ginac-config])
160 echo "Configuration done. Now type \"make\"."