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