configure.ac: Abort attempts to cross build in source
[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.64)
21 AC_INIT([GNU PSPP], [1.5.2], [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([tar-ustar info-in-builddir])
26
27 dnl Checks for programs.
28 AC_GNU_SOURCE
29 AC_PROG_CC
30 gl_EARLY
31 if test x"$cross_compiling" = x"yes"; then
32    if test x"$srcdir" = x"."; then
33       AC_ERROR([Cross compiling must be done out of source.])
34    fi
35 fi
36
37 AM_PROG_CC_C_O
38 AC_LIBTOOL_WIN32_DLL
39 AC_LIBTOOL_DLOPEN
40 AC_PROG_LIBTOOL
41 AC_HEADER_TIOCGWINSZ
42 PKG_PROG_PKG_CONFIG
43 m4_pattern_forbid([PKG_CHECK_MODULES])
44 PSPP_CHECK_CLICKSEQUENCE
45 PSPP_CHECK_MAKEINFO_DOCBOOK_XML
46 PSPP_CHECK_DOT
47
48 PSPP_ENABLE_WERROR
49
50 AM_CONDITIONAL(cc_is_gcc, test x"$GCC" = x"yes" )
51
52 PSPP_CC_FOR_BUILD
53 PSPP_PERL
54 PSPP_PYTHON
55 AC_CHECK_PROGS([TEX], [tex], [no])
56 AC_SUBST([TEX])
57 AC_CHECK_PROGS([GWC], [gwc wc], [no])
58 AC_SUBST([GWC])
59
60 # This suppresses an error in gl/careadlinkat.c that otherwise can't be
61 # avoided in GCC 10.x:
62 #   ../../gl/careadlinkat.c: In function â€˜careadlinkat’:
63 #   cc1: error: function may return address of local variable
64 CFLAGS="$CFLAGS -DGCC_LINT"
65
66 dnl Disable automatic po/ support, because PSPP provides its own po/ support.
67 AC_PROVIDE([AM_PO_SUBDIRS])
68 AM_GNU_GETTEXT([external], [need-ngettext])
69 LIBS="$LIBINTL $LIBS"
70 AC_CHECK_PROGS([MSGFMT], [msgfmt])
71 if test "x$MSGFMT" = x; then
72   PSPP_REQUIRED_PREREQ([msgfmt (is usually provided with gettext)])
73 fi
74
75 AC_CHECK_PROGS([XGETTEXT], [xgettext])
76 if test "x$XGETTEXT" = x; then
77   PSPP_REQUIRED_PREREQ([xgettext (is usually provided with gettext)])
78 fi
79 dnl appstream required for metainfo.its
80 dnl if metainfo.its is not there, then the following small
81 dnl file will not produce an outputfile
82 $as_echo '<?xml version="1.0" encoding="UTF-8"?>' > test.metainfo.xml.in
83 $as_echo '<component type="desktop">' >> test.metainfo.xml.in
84 $as_echo '<name>Hallo</name>' >> test.metainfo.xml.in
85 $as_echo '</component>' >> test.metainfo.xml.in
86 xgettext -o mifc.po test.metainfo.xml.in
87 if ! test -f ./mifc.po  ; then
88   PSPP_OPTIONAL_PREREQ([org.fsf.metainfo.xml will not be translated. Install gettext >=0.20 or appstream.])
89 fi
90 rm -f mifc.po test.metainfo.xml.in
91
92 dnl Checks for libraries.
93 AC_SYS_LARGEFILE
94 AC_SEARCH_LIBS([sin], [m])
95 PSPP_LC_PAPER
96
97
98 AC_ARG_VAR([PSPP_LDFLAGS], [linker flags to be used for linking the pspp binary only])
99 AC_ARG_VAR([PSPPIRE_LDFLAGS], [linker flags to be used for linking the psppire binary only])
100
101 # Support for Cairo and Pango.
102 AC_ARG_WITH([cairo],
103   [AS_HELP_STRING(
104     [--without-cairo],
105     [Don't build support for charts (using Cairo and Pango);
106      implies --without-gui])],
107   [], [with_cairo=yes])
108 AM_CONDITIONAL([HAVE_CAIRO], [test "$with_cairo" != no])
109 if test "$with_cairo" != no; then
110   PKG_CHECK_MODULES([CAIRO], [cairo >= 1.5 pango >= 1.22 pangocairo],
111     [CPPFLAGS="$CPPFLAGS $CAIRO_CFLAGS"
112      AC_DEFINE([HAVE_CAIRO], 1,
113        [Define to 1 if Cairo and Pango are available.])],
114     [PSPP_REQUIRED_PREREQ([cairo 1.5 or later and pango 1.22 or later (or use --without-cairo)])])
115 fi
116
117 dnl One of the tests uses xmllint.
118 AC_CACHE_CHECK([for an xmllint program which fits our needs],[ac_cv_path_XMLLINT],
119 [AC_PATH_PROGS_FEATURE_CHECK([XMLLINT], [xmllint],
120   [[$ac_path_XMLLINT --version 2>&1 | $GREP XPath > /dev/null &&
121     test `$ac_path_XMLLINT --version 2>&1 | $SED 's/^.* \([0-9]*\).*/\1/'` -gt 20900 &&
122     ac_cv_path_XMLLINT=$ac_path_XMLLINT]],
123    [AC_MSG_WARN([no appropriate xmllint program found. Using a dummy (echo)]); ac_cv_path_XMLLINT=$ECHO])])
124
125 AC_SUBST([XMLLINT],[$ac_cv_path_XMLLINT])
126
127 # Support for GUI.
128 AC_ARG_WITH([gui],
129   [AS_HELP_STRING([--without-gui],
130                   [Don't build the PSPPIRE GUI (using GTK+)])],
131   [], [with_gui=yes])
132 AM_CONDITIONAL([building_gui],
133                [test "$with_cairo" != no && test "$with_gui" != "no"])
134 if test "$with_cairo" != no && test "$with_gui" != "no"; then
135   PKG_CHECK_MODULES([GTHREAD], [gthread-2.0], [],
136     [PSPP_REQUIRED_PREREQ([gthread 2.0 (or use --without-gui)])])
137
138   PKG_CHECK_MODULES([GTK], [gtk+-3.0 >= 3.22.0], [],
139     [PSPP_REQUIRED_PREREQ([gtk+ 3.0 version 3.22.0 or later (or use --without-gui)])])
140
141   PKG_CHECK_MODULES([GTKSOURCEVIEW], [gtksourceview-3.0 >= 3.4.2], [],
142     [PSPP_REQUIRED_PREREQ([gtksourceview 3.0 version 3.4.2 or later (or use --without-gui)])])
143
144   PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.44], [],
145     [PSPP_REQUIRED_PREREQ([glib 2.0 version 2.44 or later (or use --without-gui)])])
146
147   PKG_CHECK_MODULES([SPREAD_SHEET_WIDGET], [spread-sheet-widget >= 0.7], [],
148     [PSPP_REQUIRED_PREREQ([spread-sheet-widget 0.7 (or use --without-gui)])])
149   PKG_CHECK_VAR([SPREAD_SHEET_WIDGET_LIBDIR], [spread-sheet-widget], [libdir])
150
151   AC_ARG_VAR([GLIB_GENMARSHAL])
152   AC_CHECK_PROGS([GLIB_GENMARSHAL], [glib-genmarshal])
153   if test "x$GLIB_GENMARSHAL" = x; then
154     PSPP_REQUIRED_PREREQ([glib-genmarshal (or use --without-gui)])
155   fi
156
157   AC_CHECK_PROGS([GLIB_COMPILE_RESOURCES], [glib-compile-resources])
158   if test "x$GLIB_COMPILE_RESOURCES" = x; then
159     PSPP_REQUIRED_PREREQ([glib-compile-resources (or use --without-gui)])
160   fi
161
162 fi
163
164 gl_NEXT_HEADERS([gtk/gtk.h])
165
166 dnl Checks needed for psql reader
167
168 dnl The 8.x series postgres tarballs installs with a default prefix of
169 dnl /usr/local/pgsql whereas, OSes (such as debian)  install into /usr .
170
171 dnl If the libpq.so file is in a non standard path, (one which the linker
172 dnl doesn't search) then we must set the PG_LDFLAGS to -R/usr/wherever/
173 dnl However, if the system happens to have more than one version of other
174 dnl dependent libraries (eg. libgtk) in different standard paths. (eg:
175 dnl /usr and /usr/local) then the wrong one may get linked.
176
177 dnl To overcome this, we first check for libpq in the standard places, and
178 dnl only set PG_LDFLAGS if it's not found.
179
180
181 AC_ARG_WITH(
182   libpq,
183   [AS_HELP_STRING([--without-libpq], [don't compile in Postgres capability])])
184 AC_ARG_VAR([PG_CONFIG],
185            [Full pathname of the pg_config program shipped with Postgresql])
186 AC_PATH_PROG([PG_CONFIG], [pg_config], [],
187              [$PATH:/usr/local/pgsql/bin:/usr/pgsql/bin])
188
189 if test x"$with_libpq" != x"no" && test -n "$PG_CONFIG" ; then
190   AC_SUBST(PG_CONFIG)
191   PG_CFLAGS=-I`$PG_CONFIG --includedir`
192   AC_SUBST(PG_CFLAGS)
193
194   AC_CHECK_LIB([pq], [PQexec],
195      [:],
196      [PG_LDFLAGS="-L`$PG_CONFIG --libdir` -R`$PG_CONFIG --libdir`"])
197   AC_SUBST(PG_LDFLAGS)
198
199   PG_LIBS=-lpq
200   AC_SUBST(PG_LIBS)
201
202   PKG_CHECK_EXISTS(libssl,
203         AC_DEFINE([USE_SSL],1,
204                    [Define to 1 if the openssl library is present.])
205            ,)
206
207   # Now verify that we can actually link against libpq.  If we are
208   # cross-compiling and picked up a host libpq, or if libpq is just
209   # badly installed, this will fail.
210   AC_CACHE_CHECK(
211     [whether -lpq links successfully],
212     [pspp_cv_have_libpq],
213     [save_CPPFLAGS=$CPPFLAGS
214      save_LIBS=$LIBS
215      save_LDFLAGS=$LDFLAGS
216      CPPFLAGS="$PG_CFLAGS $CPPFLAGS"
217      LIBS="$PG_LIBS $LIBS"
218      LDFLAGS="$PG_LDFLAGS $LDFLAGS"
219      AC_LINK_IFELSE(
220        [AC_LANG_PROGRAM(
221          [#include <libpq-fe.h>
222          ], [PQfinish (0);])],
223        [pspp_cv_have_libpq=yes],
224        [pspp_cv_have_libpq=no])
225      CPPFLAGS=$save_CPPFLAGS
226      LIBS=$save_LIBS
227      LDFLAGS=$save_LDFLAGS])
228
229   if test $pspp_cv_have_libpq = yes; then
230     PSQL_SUPPORT=yes
231     AC_DEFINE([PSQL_SUPPORT], [1],
232       [Define to 1 if building in support for reading from postgres
233        databases.])
234   else
235     PSQL_SUPPORT=no
236     PG_CONFIG=
237     PG_CFLAGS=
238     PG_LDFLAGS=
239     PG_LIBS=
240   fi
241 else
242   PSQL_SUPPORT=no
243   pspp_cv_have_libpq=no
244 fi
245 AC_SUBST([PSQL_SUPPORT])
246
247 dnl Check for libxml2
248 PKG_CHECK_MODULES(
249   [LIBXML2], [libxml-2.0], [], [PSPP_REQUIRED_PREREQ([libxml2])])
250
251 dnl Check for zlib.
252 AC_SEARCH_LIBS([gzopen], [z], [], [PSPP_REQUIRED_PREREQ([zlib])])
253 AC_CHECK_HEADERS([zlib.h], [], [PSPP_REQUIRED_PREREQ([zlib])])
254
255 dnl Avoid interference between zlib's crc32() function and gnulib's
256 dnl crc32() function, which have different signatures.  PSPP calls
257 dnl only gnulib's crc32() directly, but it calls zlib's crc32()
258 dnl indirectly through other zlib calls.  If we don't rename gnulib's
259 dnl crc32(), then zlib will call gnulib's version instead of its own,
260 dnl causing failures.  (This can happen even if zlib isn't detected
261 dnl directly, because other libraries that PSPP uses, e.g. libpng,
262 dnl sometimes use zlib themselves.)
263 AC_DEFINE(
264   [crc32], [gl_crc32],
265   [Avoid making zlib call gnulib's crc32() instead of its own.])
266
267 AC_ARG_WITH(
268   [perl-module],
269   [AS_HELP_STRING([--without-perl-module], [do not build the Perl module])],
270   [case $with_perl_module in # (
271      yes|no) ;; # (
272      *) AC_MSG_FAILURE([--with-perl-module argument must be 'yes' or 'no']) ;;
273    esac
274    WITH_PERL_MODULE=$with_perl_module],
275   [if test x"$cross_compiling" != x"yes"; then
276      WITH_PERL_MODULE=yes
277    else
278      WITH_PERL_MODULE=no
279    fi])
280 AC_SUBST([WITH_PERL_MODULE])
281 AM_CONDITIONAL(WITH_PERL_MODULE, test $WITH_PERL_MODULE = yes)
282
283 AC_SEARCH_LIBS([cblas_dsdot], [gslcblas],,[PSPP_REQUIRED_PREREQ([libgslcblas])])
284 PKG_CHECK_MODULES([GSL], [gsl >= 1.13], [],
285                          AC_SEARCH_LIBS([gsl_poly_eval_derivs], [gsl],,[PSPP_REQUIRED_PREREQ([gsl version 1.13 or later])]))
286
287
288 PSPP_GSL_NEEDS_FGNU89_INLINE
289
290 PSPP_READLINE
291
292 dnl Checks for header files.
293 AC_CHECK_HEADERS([sys/wait.h fpu_control.h ieeefp.h fenv.h pwd.h])
294
295 dnl Some systems don't have SIGWINCH
296 AC_CHECK_DECLS([SIGWINCH], [], [],
297           [#include <signal.h>
298           /* NetBSD declares sys_siglist in unistd.h.  */
299           #ifdef HAVE_UNISTD_H
300           # include <unistd.h>
301           #endif
302           ])
303
304
305 # For gnulib.
306 gl_INIT
307
308 AC_C_INLINE
309
310 AC_C_BIGENDIAN
311
312 AC_CHECK_FUNCS([__setfpucw fork execl isinf isnan finite getpid feholdexcept fpsetmask popen round])
313
314 AC_PROG_LN_S
315
316 # iconv is required
317 AM_ICONV
318 if test "$am_cv_func_iconv" != "yes"; then
319    PSPP_REQUIRED_PREREQ([iconv (see http://www.gnu.org/software/libiconv/)])
320 fi
321 LIBS="$LIBICONV $LIBS"
322
323 dnl Required by the gnulib 'relocatable-prog' module.
324 dnl See doc/relocatable-maint.texi in the gnulib tree for details.
325 RELOCATABLE_LIBRARY_PATH='$(pkglibdir):$(SPREAD_SHEET_WIDGET_LIBDIR)'
326 RELOCATABLE_STRIP=:
327
328 PSPP_CHECK_PREREQS
329
330 dnl The makefile needs to know if we're cross compiling, so that
331 dnl it can make arrangements to build the documentation examples.
332 AM_CONDITIONAL(cross_compiling, test x"$cross_compiling" = x"yes" )
333
334 AC_CONFIG_FILES(
335   [Makefile gl/Makefile po/Makefile tests/atlocal perl-module/lib/PSPP.pm])
336
337 AC_CONFIG_COMMANDS([doc/pspp-figures/dummy], [:])
338
339 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES])
340
341 AC_OUTPUT
342 echo "PSPP configured successfully."
343
344 dnl configure.ac ends here