Revert "psppire-dict: g_return_if_fail for idx in psppire_dict_get_variable()."
[pspp] / configure.ac
1 dnl Process this file with autoconf to produce a configure script.
2
3 dnl Initialize.
4 AC_PREREQ(2.63)
5 AC_INIT([GNU PSPP], [0.7.9], [bug-gnu-pspp@gnu.org], [pspp])
6 AC_CONFIG_AUX_DIR([build-aux])
7 AC_CONFIG_HEADERS([config.h])
8 AC_CONFIG_TESTDIR([tests])
9 AM_INIT_AUTOMAKE
10
11 dnl Checks for programs.
12 AC_GNU_SOURCE
13 AC_PROG_CC
14 gl_EARLY
15 AM_PROG_CC_C_O
16 AC_LIBTOOL_WIN32_DLL
17 AC_LIBTOOL_DLOPEN
18 AC_PROG_LIBTOOL
19 PKG_PROG_PKG_CONFIG
20 m4_pattern_forbid([PKG_CHECK_MODULES])
21 PSPP_CHECK_CLICKSEQUENCE
22
23 AC_ARG_ENABLE(
24   anachronistic-dependencies, 
25   [AS_HELP_STRING([--enable-anachronistic-dependencies], 
26                   [Attempt to allow building against older versions of dependent libraries])])
27
28 PSPP_ENABLE_OPTION(-Wdeclaration-after-statement)
29 PSPP_ENABLE_WERROR
30
31 AM_CONDITIONAL(cc_is_gcc, test x"$GCC" = x"yes" )
32
33 PSPP_CC_FOR_BUILD
34 PSPP_PERL
35
36 dnl Disable automatic po/ support, because PSPP provides its own po/ support.
37 AC_PROVIDE([AM_PO_SUBDIRS])
38 AM_GNU_GETTEXT([external], [need-ngettext])
39 LIBS="$LIBINTL $LIBS"
40
41 dnl Checks for libraries.
42 AC_SYS_LARGEFILE
43 AC_SEARCH_LIBS([sin], [m])
44 PSPP_LC_PAPER
45
46
47 AC_ARG_VAR([PSPP_LDFLAGS], [linker flags to be used for linking the pspp binary only])
48 AC_ARG_VAR([PSPPIRE_LDFLAGS], [linker flags to be used for linking the psppire binary only])
49
50 # Support for Cairo and Pango.
51 AC_ARG_WITH([cairo],
52   [AS_HELP_STRING(
53     [--without-cairo], 
54     [Don't build support for charts (using Cairo and Pango);
55      implies --without-gui])],
56   [], [with_cairo=yes])
57 AM_CONDITIONAL([HAVE_CAIRO], [test "$with_cairo" != no])
58 if test "$with_cairo" != no; then
59   PKG_CHECK_MODULES([CAIRO], [cairo >= 1.5 pango >= 1.20 pangocairo], 
60     [CPPFLAGS="$CPPFLAGS $CAIRO_CFLAGS"
61      AC_DEFINE([HAVE_CAIRO], 1, 
62        [Define to 1 if Cairo and Pango are available.])],
63     [PSPP_REQUIRED_PREREQ([cairo 1.5 or later and pango 1.20 or later (or use --without-cairo)])])
64   AC_PATH_PROG([XMLLINT], [xmllint], [echo], [$PATH])
65   AC_SUBST(XMLLINT)
66 fi
67
68 # Support for GUI.
69 AC_ARG_WITH([gui], 
70   [AS_HELP_STRING([--without-gui], 
71                   [Don't build the PSPPIRE GUI (using GTK+)])],
72   [], [with_gui=yes])
73 AM_CONDITIONAL([HAVE_GUI], 
74                [test "$with_cairo" != no && test "$with_gui" != "no"])
75 if test "$with_cairo" != no && test "$with_gui" != "no"; then
76   PKG_CHECK_MODULES([GTK], [gtk+-2.0 >= 2.16], [],
77     [PSPP_REQUIRED_PREREQ([gtk+ 2.0 version 2.16 or later (or use --without-gui)])])
78
79   PKG_CHECK_MODULES([GTKSOURCEVIEW], [gtksourceview-2.0 >= 2.2], [],
80     [PSPP_REQUIRED_PREREQ([gtksourceview 2.0 version 2.2 or later (or use --without-gui)])])
81
82   AC_ARG_VAR([GLIB_GENMARSHAL])
83   AC_CHECK_PROGS([GLIB_GENMARSHAL], [glib-genmarshal])
84   if test "x$GLIB_GENMARSHAL" = x; then
85     PSPP_REQUIRED_PREREQ([glib-genmarshal (or use --without-gui)])
86   fi
87
88 fi
89
90 gl_NEXT_HEADERS([gtk/gtk.h])
91
92 dnl Checks needed for psql reader
93
94 dnl The 8.x series postgres tarballs installs with a default prefix of
95 dnl /usr/local/pgsql whereas, OSes (such as debian)  install into /usr .
96
97 dnl If the libpq.so file is in a non standard path, (one which the linker
98 dnl doesn't search) then we must set the PG_LDFLAGS to -R/usr/wherever/
99 dnl However, if the system happens to have more than one version of other
100 dnl dependent libraries (eg. libgtk) in different standard paths. (eg:
101 dnl /usr and /usr/local) then the wrong one may get linked. 
102
103 dnl To overcome this, we first check for libpq in the standard places, and
104 dnl only set PG_LDFLAGS if it's not found.
105
106
107 AC_ARG_WITH(
108   libpq, 
109   [AS_HELP_STRING([--without-libpq], [don't compile in Postgres capability])])
110 AC_ARG_VAR([PG_CONFIG], 
111            [Full pathname of the pg_config program shipped with Postgresql])
112 AC_PATH_PROG([PG_CONFIG], [pg_config], [], 
113              [$PATH:/usr/local/pgsql/bin:/usr/pgsql/bin])
114
115 if test x"$with_libpq" != x"no" && test -n "$PG_CONFIG" ; then 
116   AC_SUBST(PG_CONFIG)
117   PG_CFLAGS=-I`$PG_CONFIG --includedir` 
118   AC_SUBST(PG_CFLAGS)
119
120   AC_CHECK_LIB([pq], [PQexec],
121      [:], 
122      [PG_LDFLAGS="-L`$PG_CONFIG --libdir` -R`$PG_CONFIG --libdir`"])
123   AC_SUBST(PG_LDFLAGS)
124
125   PG_LIBS=-lpq
126   AC_SUBST(PG_LIBS)
127
128   PKG_CHECK_EXISTS(libssl,
129         AC_DEFINE([USE_SSL],1,
130                    [Define to 1 if the openssl library is present.])
131            ,)
132
133   # Now verify that we can actually link against libpq.  If we are
134   # cross-compiling and picked up a host libpq, or if libpq is just
135   # badly installed, this will fail.
136   AC_CACHE_CHECK(
137     [whether -lpq links successfully],
138     [pspp_cv_have_libpq],
139     [save_CPPFLAGS=$CPPFLAGS
140      save_LIBS=$LIBS
141      save_LDFLAGS=$LDFLAGS
142      CPPFLAGS="$PG_CFLAGS $CPPFLAGS"
143      LIBS="$PG_LIBS $LIBS"
144      LDFLAGS="$PG_LDFLAGS $LDFLAGS"
145      AC_LINK_IFELSE(
146        [AC_LANG_PROGRAM(
147          [#include <libpq-fe.h>
148          ], [PQfinish (0);])],
149        [pspp_cv_have_libpq=yes],
150        [pspp_cv_have_libpq=no])
151      CPPFLAGS=$save_CPPFLAGS
152      LIBS=$save_LIBS
153      LDFLAGS=$save_LDFLAGS])
154
155   if test $pspp_cv_have_libpq = yes; then
156     PSQL_SUPPORT=yes
157     AC_DEFINE([PSQL_SUPPORT], [1],
158       [Define to 1 if building in support for reading from postgres
159        databases.])
160   else
161     PSQL_SUPPORT=no
162     PG_CONFIG=
163     PG_CFLAGS=
164     PG_LDFLAGS=
165     PG_LIBS=
166   fi
167 else
168   PSQL_SUPPORT=no
169   pspp_cv_have_libpq=no
170 fi
171 AC_SUBST([PSQL_SUPPORT])
172
173 dnl Check for libxml2
174 PKG_CHECK_MODULES(
175   [LIBXML2], [libxml-2.0], 
176   [HAVE_LIBXML2=yes],
177   [HAVE_LIBXML2=no
178    PSPP_OPTIONAL_PREREQ([libxml2])])
179
180 dnl Check for zlib.
181 AC_SEARCH_LIBS(
182   [gzopen], [z],
183   [HAVE_ZLIB=yes],
184   [HAVE_ZLIB=no
185    PSPP_OPTIONAL_PREREQ([zlib])])
186 AC_CHECK_HEADERS(
187   [zlib.h], 
188   [],
189   [HAVE_ZLIB=no
190    PSPP_OPTIONAL_PREREQ([zlib])])
191
192 dnl Avoid interference between zlib's crc32() function and gnulib's
193 dnl crc32() function, which have different signatures.  PSPP calls
194 dnl only gnulib's crc32() directly, but it calls zlib's crc32()
195 dnl indirectly through other zlib calls.  If we don't rename gnulib's
196 dnl crc32(), then zlib will call gnulib's version instead of its own,
197 dnl causing failures.  (This can happen even if zlib isn't detected
198 dnl directly, because other libraries that PSPP uses, e.g. libpng,
199 dnl sometimes use zlib themselves.)
200 AC_DEFINE(
201   [crc32], [gl_crc32],
202   [Avoid making zlib call gnulib's crc32() instead of its own.])
203
204 dnl Gnumeric and OpenDocument (read) support requires libxml2 and zlib.
205 if test $HAVE_LIBXML2 = yes && test $HAVE_ZLIB = yes; then
206   GNM_SUPPORT=yes
207   ODF_READ_SUPPORT=yes
208   AC_DEFINE(
209     [GNM_SUPPORT], [1],
210     [Define to 1 if building in support for reading Gnumeric files.])
211   AC_DEFINE(
212     [ODF_READ_SUPPORT], [1],
213     [Define to 1 if building in support for reading OpenDocument files.])
214 else
215   GNM_SUPPORT=no
216   ODF_READ_SUPPORT=no
217 fi
218 AC_SUBST([GNM_SUPPORT])
219 AC_SUBST([ODF_READ_SUPPORT])
220
221 dnl ODF support requires libxml2 (zlib is optional).
222 if test $HAVE_LIBXML2 = yes; then
223   AC_DEFINE(
224     [ODF_WRITE_SUPPORT], [1],
225     [Define to 1 if building in support for writing OpenDocument files.])
226 fi
227 AM_CONDITIONAL([ODF_WRITE_SUPPORT], [test $HAVE_LIBXML2 = yes])
228
229 AC_ARG_WITH(
230   gui_tools,
231   [AS_HELP_STRING([--with-gui-tools], [build the gui developer tools.  For DEVELOPERS only! There is no reason why users will need this flag.])])
232 if test x"$with_gui_tools" = x"yes" ; then 
233         PKG_CHECK_MODULES(GLADE_UI, gladeui-1.0)
234 fi
235 AM_CONDITIONAL(WITH_GUI_TOOLS, test x"$with_gui_tools" = x"yes")
236
237 AC_ARG_WITH(
238   [perl-module],
239   [AS_HELP_STRING([--without-perl-module], [do not build the Perl module])],
240   [case $with_perl_module in # (
241      yes|no) ;; # (
242      *) AC_MSG_FAILURE([--with-perl-module argument must be 'yes' or 'no']) ;;
243    esac
244    WITH_PERL_MODULE=$with_perl_module],
245   [if test x"$cross_compiling" != x"yes"; then
246      WITH_PERL_MODULE=yes
247    else
248      WITH_PERL_MODULE=no
249    fi])
250 AC_SUBST([WITH_PERL_MODULE])
251 AM_CONDITIONAL(WITH_PERL_MODULE, test $WITH_PERL_MODULE = yes)
252
253 AC_SEARCH_LIBS([cblas_dsdot], [gslcblas],,[PSPP_REQUIRED_PREREQ([libgslcblas])])
254 PKG_CHECK_MODULES([GSL], [gsl >= 1.12], [],
255                          AC_SEARCH_LIBS([gsl_linalg_cholesky_invert], [gsl],,[PSPP_REQUIRED_PREREQ([gsl 2.0 version 1.12 or later])]))
256
257
258 PSPP_GSL_NEEDS_FGNU89_INLINE
259
260 dnl Recent versions of GNU ncurses install the curses header files into
261 dnl /usr/include/ncurses, and provide a 'ncurses5-config' program which
262 dnl enables us to discover where they are. Earlier versions don't have
263 dnl this, so we can't rely on it.  So if ncurses5-config is present,
264 dnl we'll trust it to find the right information.  Otherwise, we'll
265 dnl try to discover it ourselves.
266 dnl To confound things further, Cygwin has decided to rename ncurses5-config
267 dnl to ncurses8-config !!!
268 AC_ARG_WITH(
269   libncurses, 
270   [AS_HELP_STRING([--without-libncurses], [don't compile in ncurses functions])])
271
272 if test x"$with_libncurses" != x"no" ; then
273   if test x"$cross_compiling" != x"yes" ; then
274           AC_CHECK_PROGS([NCURSES_CONFIG], [ncurses5-config ncurses8-config])
275   fi
276   if test x"$NCURSES_CONFIG" = x ; then
277           AC_SEARCH_LIBS([tgetent], [ncurses],
278               [curses_available=yes; AC_CHECK_HEADERS([term.h curses.h],,[curses_available=no])])
279   else
280           old_cflags=$CFLAGS
281           CFLAGS="$CFLAGS `$NCURSES_CONFIG --cflags`"
282           AC_CHECK_HEADERS([term.h curses.h],[curses_available=yes])
283           CFLAGS=$old_cflags
284           if test x"$curses_available" = x"yes" ; then
285            NCURSES_LIBS=`$NCURSES_CONFIG --libs`
286            NCURSES_CFLAGS=`$NCURSES_CONFIG --cflags`
287            AC_SUBST(NCURSES_CFLAGS)
288            AC_SUBST(NCURSES_LIBS)
289           fi
290   fi
291   if test x"$curses_available" = x"yes" ; then
292           AC_DEFINE([LIBNCURSES_USABLE], 1,
293               [Define to 1 if the libncurses is both present and usable.])
294   fi
295   AC_CHECK_HEADERS([termcap.h])
296 fi
297
298 PSPP_READLINE
299
300 dnl Checks for header files.
301 AC_CHECK_HEADERS([sys/wait.h fpu_control.h ieeefp.h fenv.h pwd.h])
302
303 dnl Some systems dont have SIGWINCH
304 AC_CHECK_DECLS([SIGWINCH], [], [],
305           [#include <signal.h>
306           /* NetBSD declares sys_siglist in unistd.h.  */
307           #ifdef HAVE_UNISTD_H
308           # include <unistd.h>
309           #endif
310           ])
311
312
313 # For gnulib.
314 gl_INIT
315
316 AC_C_INLINE
317
318 AC_CHECK_SIZEOF([size_t])
319 SIZEOF_SIZE_T=$ac_cv_sizeof_size_t
320 AC_SUBST([SIZEOF_SIZE_T])
321
322 AC_C_BIGENDIAN
323
324 AC_CHECK_FUNCS([__setfpucw fork execl execlp isinf isnan finite getpid feholdexcept fpsetmask popen round])
325
326 AC_PROG_LN_S
327
328 AC_ARG_ENABLE(
329   debug, 
330   [AS_HELP_STRING([--enable-debug], 
331                   [Turn on diagnostic features in the program])])
332 if test x"$enable_debug" = x"yes"  ; then
333   AC_DEFINE(DEBUGGING, 1, [Define to 1 if debugging is enabled.])
334 fi
335
336 # iconv is required
337 AM_ICONV
338 if test "$am_cv_func_iconv" != "yes"; then
339    PSPP_REQUIRED_PREREQ([iconv (see http://www.gnu.org/software/libiconv/)])
340 fi
341 LIBS="$LIBICONV $LIBS"
342
343 dnl Required by the gnulib 'relocatable-prog' module.
344 dnl See doc/relocatable-maint.texi in the gnulib tree for details.
345 RELOCATABLE_LIBRARY_PATH='$(pkglibdir)'
346 RELOCATABLE_STRIP=:
347
348 PSPP_CHECK_PREREQS
349
350 AC_CONFIG_FILES(
351   [Makefile gl/Makefile po/Makefile tests/atlocal perl-module/lib/PSPP.pm])
352
353 AC_OUTPUT
354 echo "PSPP configured successfully."
355
356 dnl configure.ac ends here