source: branches/0.5-stable/configure.ac @ 2079

Last change on this file since 2079 was 2079, checked in by Peter, 14 years ago

fixes #564. Testing if boost is using long long. Testing to compile some code similar to the problematic one in and particuarly we include . The test is specific to GCC in the sense that -pedantic and -Werror are specific to GCC. In the case of using any other compiler the compilation test will still run and will likely run successfully. In any case the flags -pedantic -Werror and -Wno-long-long are added through YAT_CXX_ADD_FLAG, which implies the flags will only be added when the compiler supports it. I'm afraid the variable names (AM_CXXFLAGS) has changed in trunk, so the merge will need some massage.

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