source: trunk/configure.ac @ 2227

Last change on this file since 2227 was 2227, checked in by Peter, 12 years ago

automake 1.11 is now required. refs #475

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 14.4 KB
Line 
1## Process this file with autoconf to produce a configure script.
2##
3## $Id: configure.ac 2227 2010-03-25 02:49:17Z peter $
4
5# Copyright (C) 2003 Daniel Dalevi, Jari Häkkinen
6# Copyright (C) 2004 Jari Häkkinen
7# Copyright (C) 2005, 2006 Jari Häkkinen, Peter Johansson
8# Copyright (C) 2007, 2008 Jari Häkkinen, Peter Johansson, Markus Ringnér
9# Copyright (C) 2009 Jari Häkkinen, Peter Johansson
10# Copyright (C) 2010 Peter Johansson
11#
12# This file is part of the yat library, http://dev.thep.lu.se/yat
13#
14# The yat library is free software; you can redistribute it
15# and/or modify it under the terms of the GNU General Public License as
16# published by the Free Software Foundation; either version 3 of the
17# License, or (at your option) any later version.
18#
19# The yat library is distributed in the hope that it will be useful,
20# but WITHOUT ANY WARRANTY; without even the implied warranty of
21# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
22# General Public License for more details.
23#
24# You should have received a copy of the GNU General Public License
25# along with yat. If not, see <http://www.gnu.org/licenses/>.
26#
27# If you grabbed the source from the subversion repository you should,
28# at top-level, execute:
29#     ./bootstrap
30# To push subsequent changes of this file into the build scripts you
31# must issue:
32#     autoreconf
33
34m4_include([m4/version.m4])
35AC_INIT([yat],[YAT_VERSION],[jari@thep.lu.se],,[http://dev.thep.lu.se/yat])
36AC_PREREQ(2.63)
37AC_CONFIG_SRCDIR([yat/utility/Matrix.h])
38AC_CONFIG_AUX_DIR([autotools])
39dnl arg below should be the same as in Makefile.am
40AC_CONFIG_MACRO_DIR([m4])
41AC_PREFIX_DEFAULT([/usr/local])
42
43AC_SUBST([YAT_LT_VERSION], [YAT_LT_VERSION_INFO])
44AC_SUBST([YAT_MAJOR_VERSION], [MAJOR_VERSION])
45AC_SUBST([YAT_MINOR_VERSION], [MINOR_VERSION])
46AC_SUBST([YAT_PATCH_VERSION], [PATCH_VERSION])
47AC_SUBST([YAT_DEV_BUILD], [DEV_BUILD])
48
49AC_CONFIG_HEADERS([config.h])
50AM_INIT_AUTOMAKE([1.11 std-options color-tests])
51
52dnl The empty help-string for --with-gsl-prefix and
53dnl --with-gsl-exec-prefix creates an empty line in middle of help
54dnl output. This hacks move the line to above 'Optional Packages:',
55dnl which is prettier.
56dnl
57dnl FIXME: remove when we removed support for --with-gsl-prefix and
58dnl --with-gsl-exec-prefix
59m4_divert_once([HELP_WITH], [])
60
61# Set default programming language
62AC_LANG(C++)
63
64# propagate selected configure variables to DISTCHECK_CONFIGURE_FLAGS
65for var in CPPFLAGS CXX CXXFLAGS CXXCPP LDFLAGS LIBS; do
66  eval isset=\${$var+set}
67  if test "$isset" = 'set' ; then
68    eval val=$`echo $var`
69    DISTCHECK_CONFIGURE_FLAGS="${DISTCHECK_CONFIGURE_FLAGS}'${var}=${val}' "
70  fi
71done
72AC_SUBST(DISTCHECK_CONFIGURE_FLAGS)
73
74# Let user overide default CXXFLAGS
75if test "${CXXFLAGS+set}" != set; then
76  CXXFLAGS=""  # Setting CXXFLAGS here to prevent expansion in AC_PROG_CXX
77fi
78# Checks for programs.
79AC_PROG_CXX
80AC_PROG_INSTALL
81AC_PROG_SED
82AC_PROG_LIBTOOL
83# fall back to echo unless ECHO not already set (by libtool)
84AS_IF([test "x$ECHO" = x], [ECHO=echo])
85AC_SUBST(ECHO)
86
87AC_MSG_NOTICE(dnl
88[checking whether tools for generating documentation are available])
89
90have_doxygen=no
91dx_enable_latex=no
92dx_enable_dvi=no
93dx_enable_ps=no
94dx_enable_pdf=no
95AC_PATH_PROG([DOXYGEN], [doxygen], [no])
96if test "$DOXYGEN" = "no"; then
97   AC_MSG_WARN([unable to find doxygen application])
98else
99   doxygen_min_version=1.5
100   AC_MSG_CHECKING([if doxygen is at least $doxygen_min_version])
101   doxygen_version=`$DOXYGEN --version`
102   AX_COMPARE_VERSION([$doxygen_version], [ge], [$doxygen_min_version],
103                      [have_doxygen=yes])
104   AC_MSG_RESULT([$doxygen_version])
105   dx_enable_latex=yes
106   # doxygen 1.5.8 has a bug for latex output and enums
107   AS_IF([test $have_doxygen = yes],
108         [AX_COMPARE_VERSION([$doxygen_version], [eq], [1.5.8],
109                 [AC_MSG_WARN([doxygen 1.5.8 detected - latex output turned off])
110                  dx_enable_latex=no])])
111fi
112
113# we need latex output to generate dvi, ps, and pdf
114AS_IF([test $dx_enable_latex = yes],
115  [dx_enable_pdf=yes
116   ACLTX_PROG_PDFLATEX([dx_enable_pdf=no])
117   ACLTX_PROG_MAKEINDEX([dx_enable_pdf=no])
118   dx_enable_dvi=yes
119   ACLTX_PROG_LATEX([dx_enable_dvi=no])
120   # ps needs dvi
121   dx_enable_ps=$dx_enable_dvi
122   ACLTX_PROG_DVIPS([dx_enable_ps=no])
123   AS_IF([test "x$dx_enable_ps" != xno], [
124     YAT_PROG_DVIPS_PSPICTURE([], [dx_enable_ps=no
125                                   AC_MSG_NOTICE([ps generation turned off])])
126   ])
127  ]
128)
129
130AC_SUBST(have_doxygen)
131AM_CONDITIONAL([DX_ENABLE_HTML], [test x$have_doxygen = xyes])
132AM_CONDITIONAL([DX_ENABLE_LATEX], [test x$dx_enable_latex = xyes])
133AM_CONDITIONAL([DX_ENABLE_DVI], [test x$dx_enable_dvi = xyes])
134AM_CONDITIONAL([DX_ENABLE_PS], [test x$dx_enable_ps = xyes])
135AM_CONDITIONAL([DX_ENABLE_PDF], [test x$dx_enable_pdf = xyes])
136AC_CONFIG_FILES([test/documentation_test.sh],
137                [chmod +x test/documentation_test.sh])
138
139# check for quiet_NaN support in OS
140# Check at run-time, but if we are cross-compiling fall back on a
141# compilation test
142AC_MSG_CHECKING([if std::numeric_limits<>::has_quiet_NaN is true])
143AC_RUN_IFELSE(
144  [AC_LANG_PROGRAM(
145    [@%:@include <limits>],
146    [return !std::numeric_limits<double>::has_quiet_NaN])],
147  [quiet_nan=yes
148   AC_MSG_RESULT($quiet_nan)],
149  [quiet_nan=no
150   AC_MSG_RESULT($quiet_nan)],
151  # if we are cross-compiling fall back on compilation test
152  [AC_MSG_RESULT(cross-compiling)
153   AC_MSG_CHECKING([for std::numeric_limits<>::quiet_NaN()])
154    AC_COMPILE_IFELSE(
155     [AC_LANG_PROGRAM(
156        [@%:@include <limits>
157         extern void f(double);],
158        [f(std::numeric_limits<double>::quiet_NaN())])],
159     [quiet_nan=yes],
160     [quiet_nan=no])
161   AC_MSG_RESULT($quiet_nan)])
162# Check for infinity support for doubles in OS
163# Check at run-time, but if we are cross-compiling fall back on a
164# compilation test
165AC_MSG_CHECKING([if std::numeric_limits<>::has_infinity is true])
166AC_RUN_IFELSE(
167  [AC_LANG_PROGRAM(
168    [@%:@include <limits>],
169    [return !std::numeric_limits<double>::has_infinity])],
170  [has_infinity=yes
171   AC_MSG_RESULT($has_infinity)],
172  [has_infinity=no
173   AC_MSG_RESULT($has_infinity)],
174  # if we are cross-compiling fall back on compilation test
175  [AC_MSG_RESULT(cross-compiling)
176   AC_MSG_CHECKING([for std::numeric_limits<>::infinity()])
177    AC_COMPILE_IFELSE(
178     [AC_LANG_PROGRAM(
179        [@%:@include <limits>
180         extern void f(double);],
181        [f(std::numeric_limits<double>::infinity())])],
182     [has_infinity=yes],
183     [has_infinity=no])
184   AC_MSG_RESULT($has_infinity)])
185
186AC_MSG_CHECKING([g++ deprecation attribute])
187AC_COMPILE_IFELSE(
188   [AC_LANG_PROGRAM([[void f() __attribute__ ((deprecated));]],)], 
189   [AC_DEFINE([YAT_HAVE_GCC_DEPRECATED], [1],
190              [Define if compiler supports deprecated attribute, as in g++ 4.0])
191    AC_MSG_RESULT([yes])],
192   [AC_MSG_RESULT([no])] )
193
194AC_MSG_CHECKING([if std::multiset::iterator is mutable])
195AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include <set>
196                                     @%:@include <vector>]],
197                                   [[std::set<std::vector<double> > s;
198                                     std::vector<double> v;
199                                     s.insert(v);
200                                     s.begin()->reserve(100);
201                                   ]])],
202                  [AC_DEFINE([MULTISET_ITERATOR_IS_MUTABLE], [1],
203                             [Define if std::multiset::iterator is mutable])
204                   AC_MSG_RESULT([yes])
205                  ],
206                  [AC_MSG_RESULT([no])] )
207
208# Save user-defined environment settings for later restoration
209APR_SAVE_THE_ENVIRONMENT(CPPFLAGS)
210APR_SAVE_THE_ENVIRONMENT(CXXFLAGS)
211APR_SAVE_THE_ENVIRONMENT(LDFLAGS)
212APR_SAVE_THE_ENVIRONMENT(LIBS)
213
214# Checks for libraries.
215AC_MSG_NOTICE([checking for libraries])
216AC_CHECK_LIBM
217
218# find library implementing BLAS C API, or use gslcblas
219YAT_LIB_CBLAS([YAT_CBLAS_LIB=$CBLAS_LIB], [YAT_CBLAS_LIB=-lgslcblas])
220
221# GNU Scientific Library, GSL http://www.gnu.org/software/gsl/, checks
222# Including AX_PATH_GSL macro from gsl.m4 distributed by GSL
223gsl_version="1.8"
224AC_SUBST(gsl_version)
225gsl_ok=yes
226YAT_CHECK_GSL([$gsl_version],[gsl_ok=yes],[gsl_ok=no])
227
228# Boost http://www.boost.org
229boost_version=1.35
230AC_SUBST(boost_version)
231AX_BOOST_BASE(["$boost_version"])
232boost_version_check=$succeeded;
233YAT_CPP_ADD_FLAG([CPPFLAGS], [$BOOST_CPPFLAGS])
234
235#support for large files
236AC_SYS_LARGEFILE
237if test "$enable_largefile" = "no"; then
238  AC_DEFINE([YAT_LFS_DISABLED], 1,
239            [defined to 1 if large file support is disabled])
240fi
241
242# we use prefix INTERNAL_ for variables that are solely needed for
243# building yat, i.e., they are not needed for a user of yat and are
244# not propagated to yat-config or yat.m4.
245YAT_CXX_ADD_FLAG([INTERNAL_CXXFLAGS], [-Wall -pedantic])
246YAT_CPP_ADD_FLAG([INTERNAL_CPPFLAGS], [-DHAVE_INLINE=1])
247AC_ARG_ENABLE([debug],
248  [AS_HELP_STRING([--enable-debug],[turn on debug options and code])])
249if test "${enable_debug}" = "yes" ; then
250  YAT_CPP_ADD_FLAG([INTERNAL_CPPFLAGS], [-DYAT_DEBUG=1])
251  YAT_CXX_ADD_FLAG([INTERNAL_CXXFLAGS], [-g -O])
252else
253  # avoid defining GSL_RANGE_CHECK_OFF if GSL_RANGE_CHECK is already defined
254  AC_CHECK_DECL([GSL_RANGE_CHECK],[],
255                [YAT_CPP_ADD_FLAG([INTERNAL_CPPFLAGS],[-DGSL_RANGE_CHECK_OFF])])
256  YAT_CPP_ADD_FLAG([INTERNAL_CPPFLAGS], [-DNDEBUG])
257  YAT_CXX_ADD_FLAG([INTERNAL_CXXFLAGS], [-O3])
258fi
259
260# some versions of boost uses long long - turn off compiler warnings
261# with -Wno-long-long
262yat_save_CXXFLAGS=$CXXFLAGS
263# turn warnings into errors
264YAT_CXX_ADD_FLAG([CXXFLAGS], [-pedantic-errors])
265AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
266  [
267    @%:@include <boost/iterator/transform_iterator.hpp>
268    @%:@include <cmath>
269    @%:@include <functional>
270    @%:@include <vector>
271  ],[
272      using namespace boost;
273      typedef std::pointer_to_unary_function<double, double> F;
274      std::vector<double> vec;
275      transform_iterator<F, std::vector<double>::iterator>
276        i(vec.begin(), std::ptr_fun(fabs));
277  ])],
278[],
279[YAT_CXX_ADD_FLAG([INTERNAL_CXXFLAGS], [-Wno-long-long])])
280# restore CXXFLAGS
281CXXFLAGS=$yat_save_CXXFLAGS
282
283# yat specific settings
284YAT_LIBNAME="yat"
285YAT_LIB_LOCATION="yat"
286AC_SUBST(YAT_LIBNAME)
287AC_SUBST(YAT_LIB_LOCATION)
288
289#doxygen stuff
290DX_HTML_OUTPUT=html
291DX_LATEX_OUTPUT=latex
292AC_SUBST(DX_HTML_OUTPUT)
293AC_SUBST(DX_LATEX_OUTPUT)
294
295
296AC_CONFIG_FILES([test/create_yathello.sh], [chmod +x test/create_yathello.sh])
297AC_CONFIG_FILES([Makefile
298     build_support/Makefile
299     doc/Makefile
300     doc/doxygen.config
301     doc/first_page.doxygen
302     m4/Makefile
303     test/Makefile
304     test/common_defs.sh
305     test/environment.h
306     test/data/Makefile
307     yat/Makefile
308     yat/classifier/Makefile
309     yat/normalizer/Makefile
310     yat/random/Makefile
311     yat/regression/Makefile
312     yat/statistics/Makefile
313     yat/utility/version.h
314     yat/utility/Makefile])
315
316AC_CONFIG_HEADERS([yat/utility/config_public.h])
317
318# Print failure status information about selected items, and exit if
319# fatal errors were encountered. No output will be created if
320# configure is halted prematurely.
321
322# used to trigger exit before creation of output
323all_reqs_ok="true"
324
325# No support for quiet NAN is fatal -- sub-sequent compilation, or execution
326# of created binary, will fail.
327if test "${quiet_nan}" = "no" ; then
328  all_reqs_ok="false"
329  AC_MSG_WARN([
330  Support for quiet NAN required.
331  yat will not work on this system!])
332fi
333
334# No support for infinity is fatal -- sub-sequent compilation, or execution
335# of created binary, will fail.
336if test "${has_infinity}" = "no" ; then
337  all_reqs_ok="false"
338  AC_MSG_WARN([
339  Support for infinity required.
340  yat will not work on this system!])
341fi
342
343
344# Non-existing GSL is fatal -- sub-sequent compilation will fail.
345if test "x$gsl_ok" != "xyes" ; then
346  all_reqs_ok="false"
347  AC_MSG_WARN([
348  GSL $gsl_version (or newer) not found. The GNU Scientific Library
349  (GSL) library cannot be found. Please make sure GSL is
350  installed. Please refer to warnings above for more details])
351fi
352
353if test "x$want_boost" = "xyes"; then
354# Too old Boost is fatal -- sub-sequent compilation will fail.
355if test "${boost_version_check}" != "yes" ; then
356  all_reqs_ok="false"
357  AC_MSG_WARN([
358  Boost found but not the required version. Please install
359  Boost version ${boost_version} or later])
360fi
361fi
362
363if (test "$all_reqs_ok" = "false") ; then
364  AC_MSG_FAILURE([
365  Some pre-requisites were not fulfilled, aborting configure.
366  Please consult the 'README' file for more information about what
367  is needed to compile yat and refer to above warning messages.
368  Needed files were NOT created.])
369fi
370
371# Reset flags
372APR_RESTORE_THE_ENVIRONMENT(CPPFLAGS, YAT_)
373APR_RESTORE_THE_ENVIRONMENT(CXXFLAGS, YAT_)
374APR_RESTORE_THE_ENVIRONMENT(LDFLAGS, YAT_)
375APR_RESTORE_THE_ENVIRONMENT(LIBS, YAT_)
376
377YAT_PRIMARY_LIBS=-lgsl
378YAT_LIBS="$YAT_PRIMARY_LIBS $YAT_CBLAS_LIB $LIBM"
379AC_SUBST(YAT_PRIMARY_LIBS)
380AC_SUBST(YAT_LIBS)
381AC_SUBST(YAT_CBLAS_LIB)
382
383# set and AC_SUBST variables that are interpreted by Automake
384AM_CPPFLAGS="-I\$(top_srcdir) $INTERNAL_CPPFLAGS $YAT_CPPFLAGS"
385AM_CXXFLAGS="$INTERNAL_CXXFLAGS $YAT_CXXFLAGS"
386AM_LDFLAGS="$INTERNAL_LDFLAGS $YAT_LDFLAGS"
387
388AC_SUBST(AM_CPPFLAGS)
389AC_SUBST(AM_CXXFLAGS)
390AC_SUBST(AM_LDFLAGS)
391
392YAT_SVN_RELEASE([am/maintainer.am])
393
394# Create output.
395AC_OUTPUT
396
397# Some more messages.
398AC_MSG_NOTICE([])
399AC_MSG_NOTICE([ Ready to compile the yat library])
400AS_IF([test x$have_doxygen = xyes],
401  [AC_MSG_NOTICE([ Documentation will be generated in the following formats:])
402   dox_formats="   html";
403   AS_IF([test x$dx_enable_pdf = xyes], [dox_formats="$dox_formats pdf"])
404   AS_IF([test x$dx_enable_ps = xyes],  [dox_formats="$dox_formats ps"])
405   AS_IF([test x$dx_enable_dvi = xyes], [dox_formats="$dox_formats dvi"])
406   AC_MSG_NOTICE([$dox_formats])
407  ],
408  [AC_MSG_NOTICE([Generation of documentation is disabled])
409   AC_MSG_NOTICE([doxygen could not be found])
410  ])
411AC_MSG_NOTICE()
412AC_MSG_NOTICE([ The following flags and libraries will be used:])
413AC_MSG_NOTICE([ +++++++++++++++++++++++++++++++++++++++++++++++])
414AC_MSG_NOTICE([  CPPFLAGS=$CPPFLAGS])
415AC_MSG_NOTICE([  AM_CPPFLAGS=$AM_CPPFLAGS])
416AC_MSG_NOTICE([  CXXFLAGS=$CXXFLAGS])
417AC_MSG_NOTICE([  AM_CXXFLAGS=$AM_CXXFLAGS])
418AC_MSG_NOTICE([  LDFLAGS=$LDFLAGS])
419AC_MSG_NOTICE([  AM_LDFLAGS=$AM_LDFLAGS])
420AC_MSG_NOTICE([  LIBS=$LIBS])
421AC_MSG_NOTICE([  YAT_LIBS=$YAT_LIBS])
422AC_MSG_NOTICE([ +++++++++++++++++++++++++++++++++++++++++++++++])
423AC_MSG_NOTICE([])
424if test "x$YAT_CBLAS_LIB" = "x-lgslcblas"; then
425AC_MSG_NOTICE([ GSL BLAS found. This is a reference implementation only.])
426AC_MSG_NOTICE([ Consider using hardware optimized BLAS.])
427AC_MSG_NOTICE([ ATLAS (http://math-atlas.sourceforge.net/) provides an])
428AC_MSG_NOTICE([ optimized BLAS library. It is supported by yat!])
429AC_MSG_NOTICE([])
430fi
431AC_MSG_NOTICE([ Now type 'make && make check'.])
Note: See TracBrowser for help on using the repository browser.