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