Check for python interpreter at configure time and document the requirement.
[pspp] / configure.ac
1 dnl PSPP - a program for statistical analysis.
2 dnl Copyright (C) 2017 Free Software Foundation, Inc.
3 dnl 
4 dnl This program is free software: you can redistribute it and/or modify
5 dnl it under the terms of the GNU General Public License as published by
6 dnl the Free Software Foundation, either version 3 of the License, or
7 dnl (at your option) any later version.
8 dnl 
9 dnl This program is distributed in the hope that it will be useful,
10 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
11 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 dnl GNU General Public License for more details.
13 dnl 
14 dnl You should have received a copy of the GNU General Public License
15 dnl along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 dnl 
17 dnl Process this file with autoconf to produce a configure script.
18
19 dnl Initialize.
20 AC_PREREQ(2.63)
21 AC_INIT([GNU PSPP], [1.2.0], [bug-gnu-pspp@gnu.org], [pspp])
22 AC_CONFIG_AUX_DIR([build-aux])
23 AC_CONFIG_HEADERS([config.h])
24 AC_CONFIG_TESTDIR([tests])
25 AM_INIT_AUTOMAKE
26
27 dnl Checks for programs.
28 AC_GNU_SOURCE
29 AC_PROG_CC
30 gl_EARLY
31 AM_PROG_CC_C_O
32 AC_LIBTOOL_WIN32_DLL
33 AC_LIBTOOL_DLOPEN
34 AC_PROG_LIBTOOL
35 AC_HEADER_TIOCGWINSZ
36 PKG_PROG_PKG_CONFIG
37 m4_pattern_forbid([PKG_CHECK_MODULES])
38 PSPP_CHECK_CLICKSEQUENCE
39 PSPP_CHECK_DOT
40
41 PSPP_ENABLE_WERROR
42
43 AM_CONDITIONAL(cc_is_gcc, test x"$GCC" = x"yes" )
44
45 PSPP_CC_FOR_BUILD
46 PSPP_PERL
47 PSPP_PYTHON
48
49 dnl Disable automatic po/ support, because PSPP provides its own po/ support.
50 AC_PROVIDE([AM_PO_SUBDIRS])
51 AM_GNU_GETTEXT([external], [need-ngettext])
52 LIBS="$LIBINTL $LIBS"
53 AC_CHECK_PROGS([MSGFMT], [msgfmt])
54 if test "x$MSGFMT" = x; then
55   PSPP_REQUIRED_PREREQ([msgfmt (is usually provided with gettext)])
56 fi
57
58
59 dnl Checks for libraries.
60 AC_SYS_LARGEFILE
61 AC_SEARCH_LIBS([sin], [m])
62 PSPP_LC_PAPER
63
64
65 AC_ARG_VAR([PSPP_LDFLAGS], [linker flags to be used for linking the pspp binary only])
66 AC_ARG_VAR([PSPPIRE_LDFLAGS], [linker flags to be used for linking the psppire binary only])
67
68 # Support for Cairo and Pango.
69 AC_ARG_WITH([cairo],
70   [AS_HELP_STRING(
71     [--without-cairo], 
72     [Don't build support for charts (using Cairo and Pango);
73      implies --without-gui])],
74   [], [with_cairo=yes])
75 AM_CONDITIONAL([HAVE_CAIRO], [test "$with_cairo" != no])
76 if test "$with_cairo" != no; then
77   PKG_CHECK_MODULES([CAIRO], [cairo >= 1.5 pango >= 1.22 pangocairo],
78     [CPPFLAGS="$CPPFLAGS $CAIRO_CFLAGS"
79      AC_DEFINE([HAVE_CAIRO], 1, 
80        [Define to 1 if Cairo and Pango are available.])],
81     [PSPP_REQUIRED_PREREQ([cairo 1.5 or later and pango 1.22 or later (or use --without-cairo)])])
82 fi
83
84 dnl Xmllint is used in the rules to build the documentation.  It is not actually necessary,
85 dnl but is used for post-build consistency checks.  Thus, non-developers can live without it.
86 dnl However for it to be useful, it needs to be a certain version and have certain features.
87 dnl The macros below check that it the xmllint available is up to scratch.  If it isn't
88 dnl then a dummy /bin/echo is subsituted instead.
89
90 AC_CACHE_CHECK([for an xmllint program which fits our needs],[ac_cv_path_XMLLINT],
91 [AC_PATH_PROGS_FEATURE_CHECK([XMLLINT], [xmllint], 
92   [[$ac_path_XMLLINT --version 2>&1 | $GREP XPath > /dev/null && 
93     test `$ac_path_XMLLINT --version 2>&1 | $SED 's/^.* \([0-9]*\).*/\1/'` -gt 20900 &&
94     ac_cv_path_XMLLINT=$ac_path_XMLLINT]],
95    [AC_MSG_WARN([no appropriate xmllint program found. Using a dummy (echo)]); ac_cv_path_XMLLINT=$ECHO])])
96
97 AC_SUBST([XMLLINT],[$ac_cv_path_XMLLINT])
98
99 # Support for GUI.
100 AC_ARG_WITH([gui], 
101   [AS_HELP_STRING([--without-gui], 
102                   [Don't build the PSPPIRE GUI (using GTK+)])],
103   [], [with_gui=yes])
104 AM_CONDITIONAL([HAVE_GUI], 
105                [test "$with_cairo" != no && test "$with_gui" != "no"])
106 if test "$with_cairo" != no && test "$with_gui" != "no"; then
107   PKG_CHECK_MODULES([GTHREAD], [gthread-2.0], [],
108     [PSPP_REQUIRED_PREREQ([gthread 2.0 (or use --without-gui)])])
109
110   PKG_CHECK_MODULES([GTK], [gtk+-3.0 >= 3.18.0], [],
111     [PSPP_REQUIRED_PREREQ([gtk+ 3.0 version 3.18.0 or later (or use --without-gui)])])
112
113   PKG_CHECK_MODULES([GTKSOURCEVIEW], [gtksourceview-3.0 >= 3.4.2], [],
114     [PSPP_REQUIRED_PREREQ([gtksourceview 3.0 version 3.4.2 or later (or use --without-gui)])])
115
116   PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.44], [],
117     [PSPP_REQUIRED_PREREQ([glib 2.0 version 2.44 or later (or use --without-gui)])])
118
119   PKG_CHECK_MODULES([SPREAD_SHEET_WIDGET], [spread-sheet-widget >= 0.3], [],
120     [PSPP_REQUIRED_PREREQ([spread-sheet-widget 0.3 (or use --without-gui)])])
121
122   AC_ARG_VAR([GLIB_GENMARSHAL])
123   AC_CHECK_PROGS([GLIB_GENMARSHAL], [glib-genmarshal])
124   if test "x$GLIB_GENMARSHAL" = x; then
125     PSPP_REQUIRED_PREREQ([glib-genmarshal (or use --without-gui)])
126   fi
127
128   AC_CHECK_PROGS([GLIB_COMPILE_RESOURCES], [glib-compile-resources])
129   if test "x$GLIB_COMPILE_RESOURCES" = x; then
130     PSPP_REQUIRED_PREREQ([glib-compile-resources (or use --without-gui)])
131   fi
132
133 fi
134
135 gl_NEXT_HEADERS([gtk/gtk.h])
136
137 dnl Checks needed for psql reader
138
139 dnl The 8.x series postgres tarballs installs with a default prefix of
140 dnl /usr/local/pgsql whereas, OSes (such as debian)  install into /usr .
141
142 dnl If the libpq.so file is in a non standard path, (one which the linker
143 dnl doesn't search) then we must set the PG_LDFLAGS to -R/usr/wherever/
144 dnl However, if the system happens to have more than one version of other
145 dnl dependent libraries (eg. libgtk) in different standard paths. (eg:
146 dnl /usr and /usr/local) then the wrong one may get linked. 
147
148 dnl To overcome this, we first check for libpq in the standard places, and
149 dnl only set PG_LDFLAGS if it's not found.
150
151
152 AC_ARG_WITH(
153   libpq, 
154   [AS_HELP_STRING([--without-libpq], [don't compile in Postgres capability])])
155 AC_ARG_VAR([PG_CONFIG], 
156            [Full pathname of the pg_config program shipped with Postgresql])
157 AC_PATH_PROG([PG_CONFIG], [pg_config], [], 
158              [$PATH:/usr/local/pgsql/bin:/usr/pgsql/bin])
159
160 if test x"$with_libpq" != x"no" && test -n "$PG_CONFIG" ; then 
161   AC_SUBST(PG_CONFIG)
162   PG_CFLAGS=-I`$PG_CONFIG --includedir` 
163   AC_SUBST(PG_CFLAGS)
164
165   AC_CHECK_LIB([pq], [PQexec],
166      [:], 
167      [PG_LDFLAGS="-L`$PG_CONFIG --libdir` -R`$PG_CONFIG --libdir`"])
168   AC_SUBST(PG_LDFLAGS)
169
170   PG_LIBS=-lpq
171   AC_SUBST(PG_LIBS)
172
173   PKG_CHECK_EXISTS(libssl,
174         AC_DEFINE([USE_SSL],1,
175                    [Define to 1 if the openssl library is present.])
176            ,)
177
178   # Now verify that we can actually link against libpq.  If we are
179   # cross-compiling and picked up a host libpq, or if libpq is just
180   # badly installed, this will fail.
181   AC_CACHE_CHECK(
182     [whether -lpq links successfully],
183     [pspp_cv_have_libpq],
184     [save_CPPFLAGS=$CPPFLAGS
185      save_LIBS=$LIBS
186      save_LDFLAGS=$LDFLAGS
187      CPPFLAGS="$PG_CFLAGS $CPPFLAGS"
188      LIBS="$PG_LIBS $LIBS"
189      LDFLAGS="$PG_LDFLAGS $LDFLAGS"
190      AC_LINK_IFELSE(
191        [AC_LANG_PROGRAM(
192          [#include <libpq-fe.h>
193          ], [PQfinish (0);])],
194        [pspp_cv_have_libpq=yes],
195        [pspp_cv_have_libpq=no])
196      CPPFLAGS=$save_CPPFLAGS
197      LIBS=$save_LIBS
198      LDFLAGS=$save_LDFLAGS])
199
200   if test $pspp_cv_have_libpq = yes; then
201     PSQL_SUPPORT=yes
202     AC_DEFINE([PSQL_SUPPORT], [1],
203       [Define to 1 if building in support for reading from postgres
204        databases.])
205   else
206     PSQL_SUPPORT=no
207     PG_CONFIG=
208     PG_CFLAGS=
209     PG_LDFLAGS=
210     PG_LIBS=
211   fi
212 else
213   PSQL_SUPPORT=no
214   pspp_cv_have_libpq=no
215 fi
216 AC_SUBST([PSQL_SUPPORT])
217
218 dnl Check for libxml2
219 PKG_CHECK_MODULES(
220   [LIBXML2], [libxml-2.0], [], [PSPP_REQUIRED_PREREQ([libxml2])])
221
222 dnl Check for zlib.
223 AC_SEARCH_LIBS([gzopen], [z], [], [PSPP_REQUIRED_PREREQ([zlib])])
224 AC_CHECK_HEADERS([zlib.h], [], [PSPP_REQUIRED_PREREQ([zlib])])
225
226 dnl Avoid interference between zlib's crc32() function and gnulib's
227 dnl crc32() function, which have different signatures.  PSPP calls
228 dnl only gnulib's crc32() directly, but it calls zlib's crc32()
229 dnl indirectly through other zlib calls.  If we don't rename gnulib's
230 dnl crc32(), then zlib will call gnulib's version instead of its own,
231 dnl causing failures.  (This can happen even if zlib isn't detected
232 dnl directly, because other libraries that PSPP uses, e.g. libpng,
233 dnl sometimes use zlib themselves.)
234 AC_DEFINE(
235   [crc32], [gl_crc32],
236   [Avoid making zlib call gnulib's crc32() instead of its own.])
237
238 AC_ARG_WITH(
239   gui_tools,
240   [AS_HELP_STRING([--with-gui-tools], [build the gui developer tools.  For DEVELOPERS only! There is no reason why users will need this flag.])])
241 if test x"$with_gui_tools" = x"yes" ; then 
242         PKG_CHECK_MODULES(GLADE_UI, gladeui-2.0)
243 fi
244 AM_CONDITIONAL(WITH_GUI_TOOLS, test x"$with_gui_tools" = x"yes")
245
246 AC_ARG_WITH(
247   [perl-module],
248   [AS_HELP_STRING([--without-perl-module], [do not build the Perl module])],
249   [case $with_perl_module in # (
250      yes|no) ;; # (
251      *) AC_MSG_FAILURE([--with-perl-module argument must be 'yes' or 'no']) ;;
252    esac
253    WITH_PERL_MODULE=$with_perl_module],
254   [if test x"$cross_compiling" != x"yes"; then
255      WITH_PERL_MODULE=yes
256    else
257      WITH_PERL_MODULE=no
258    fi])
259 AC_SUBST([WITH_PERL_MODULE])
260 AM_CONDITIONAL(WITH_PERL_MODULE, test $WITH_PERL_MODULE = yes)
261
262 AC_SEARCH_LIBS([cblas_dsdot], [gslcblas],,[PSPP_REQUIRED_PREREQ([libgslcblas])])
263 PKG_CHECK_MODULES([GSL], [gsl >= 1.13], [],
264                          AC_SEARCH_LIBS([gsl_poly_eval_derivs], [gsl],,[PSPP_REQUIRED_PREREQ([gsl version 1.13 or later])]))
265
266
267 PSPP_GSL_NEEDS_FGNU89_INLINE
268
269 PSPP_READLINE
270
271 dnl Checks for header files.
272 AC_CHECK_HEADERS([sys/wait.h fpu_control.h ieeefp.h fenv.h pwd.h])
273
274 dnl Some systems don't have SIGWINCH
275 AC_CHECK_DECLS([SIGWINCH], [], [],
276           [#include <signal.h>
277           /* NetBSD declares sys_siglist in unistd.h.  */
278           #ifdef HAVE_UNISTD_H
279           # include <unistd.h>
280           #endif
281           ])
282
283
284 # For gnulib.
285 gl_INIT
286
287 AC_C_INLINE
288
289 AC_C_BIGENDIAN
290
291 AC_CHECK_FUNCS([__setfpucw fork execl isinf isnan finite getpid feholdexcept fpsetmask popen round])
292
293 AC_PROG_LN_S
294
295 AC_ARG_ENABLE(
296   debug, 
297   [AS_HELP_STRING([--enable-debug], 
298                   [Turn on diagnostic features in the program])])
299 if test x"$enable_debug" = x"yes"  ; then
300   AC_DEFINE(DEBUGGING, 1, [Define to 1 if debugging is enabled.])
301 fi
302
303 # iconv is required
304 AM_ICONV
305 if test "$am_cv_func_iconv" != "yes"; then
306    PSPP_REQUIRED_PREREQ([iconv (see http://www.gnu.org/software/libiconv/)])
307 fi
308 LIBS="$LIBICONV $LIBS"
309
310 dnl Required by the gnulib 'relocatable-prog' module.
311 dnl See doc/relocatable-maint.texi in the gnulib tree for details.
312 RELOCATABLE_LIBRARY_PATH='$(pkglibdir)'
313 RELOCATABLE_STRIP=:
314
315 PSPP_CHECK_PREREQS
316
317 AC_CONFIG_FILES(
318   [Makefile gl/Makefile po/Makefile tests/atlocal perl-module/lib/PSPP.pm])
319
320 AC_CONFIG_COMMANDS([doc/dummy], [:])
321
322 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES])
323
324 AC_OUTPUT
325 echo "PSPP configured successfully."
326
327 dnl configure.ac ends here