source: trunk/configure.ac @ 1762

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

check for libm using macro provided by libtool. See LT_LIB_M for details. I used the old name AC_CHECK_LIBM because I guess it is more widely available.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 14.7 KB
Line 
1## Process this file with autoconf to produce a configure script.
2##
3## $Id: configure.ac 1762 2009-01-30 23:32:31Z 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 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([build_support/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([build_support])
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
77# some tests require autotools
78AC_MSG_NOTICE([checking for autotools])
79AC_CHECK_PROG([have_automake], [automake], [yes], [no])
80AC_CHECK_PROG([have_autoconf], [autoconf], [yes], [no])
81AC_CHECK_PROG([have_libtool], [libtool], [yes], [no])
82AM_CONDITIONAL([HAVE_AUTOTOOLS],
83               [test x$have_automake = xyes &&
84                test x$have_autoconf = xyes &&
85                test x$have_libtool = xyes])
86
87AC_MSG_NOTICE(dnl
88[checking whether tools for generating documentation are available])
89
90have_dox_tools="yes"
91AC_PATH_PROG([DOXYGEN], [doxygen], [no])
92if test "$DOXYGEN" = "no"; then
93   AC_MSG_WARN([unable to find doxygen application])
94   have_dox_tools=no
95else
96   doxygen_min_version=1.5
97   AC_MSG_CHECKING([if doxygen is at least $doxygen_min_version])
98   doxygen_version=`$DOXYGEN --version`
99   AX_COMPARE_VERSION([$doxygen_version], [ge], [$doxygen_min_version], ,
100                      [have_dox_tools=no])
101   AC_MSG_RESULT([$doxygen_version])
102fi
103AC_CHECK_PROG([have_epstopdf], [epstopdf], [yes], [no])
104if test "$have_epstopdf" != "yes"; then
105   AC_MSG_WARN([unable to find epstopdf application])
106   have_dox_tools=no
107fi
108AC_CHECK_PROG([have_latex], [latex], [yes], [no])
109if test "$have_latex" != "yes"; then
110   AC_MSG_WARN([unable to find latex application])
111fi
112AC_CHECK_PROG([have_makeindex], [makeindex], [yes], [no])
113if test "$have_makeindex" != "yes"; then
114   AC_MSG_WARN([unable to find makeindex application])
115   have_dox_tools=no
116fi
117AC_CHECK_PROG([have_pdflatex], [pdflatex], [yes], [no])
118if test "$have_pdflatex" != "yes"; then
119   AC_MSG_WARN([unable to find pdflatex application])
120   have_dox_tools=no
121fi
122
123AC_SUBST(have_dox_tools)
124AM_CONDITIONAL([HAVE_DOXYGEN], [test "$have_dox_tools" = "yes"])
125AC_CONFIG_FILES([test/documentation_test.sh],
126                [chmod +x test/documentation_test.sh])
127
128# Save user-defined environment settings for later restoration
129APR_SAVE_THE_ENVIRONMENT(CPPFLAGS)
130APR_SAVE_THE_ENVIRONMENT(CXXFLAGS)
131APR_SAVE_THE_ENVIRONMENT(LDFLAGS)
132
133# Checks for libraries.
134AC_MSG_NOTICE([checking for libraries])
135AC_CHECK_LIBM
136AS_IF([test "x$LIBM" != x], [LIBS="$LIBM $LIBS"])
137# searching for cblas. Priority 1) find a cblas library, 2) find ATLAS
138# generated cblas, and 3) fall back to GSL cblas implementation. If
139# partial ATLAS is detected the configure script fails.
140cblas_found="no"  # cblas_found may get values yes or no
141# atlas_found may get values yes, no, or partial. In some cases
142# partial atlas may be installed
143atlas_found="no"
144gslcblas_found="no" # gslcblas_found may get values yes or no
145AC_SEARCH_LIBS(cblas_sdsdot,cblas,cblas_found="yes",
146  AC_SEARCH_LIBS(ATL_sdsdot,atlas,
147    AC_SEARCH_LIBS(cblas_sdsdot,cblas,atlas_found="yes",
148                   atlas_found="partial",-m64),
149      AC_SEARCH_LIBS(cblas_dswap,gslcblas,gslcblas_found="yes"),-m64),)
150# CBLAS used in test of GSL
151gsl_cblas_lib=-lgslcblas
152if test ${cblas_found} = "yes"; then
153  gsl_cblas_lib=-lcblas
154fi
155if test ${atlas_found} = "yes"; then
156  YAT_CXX_ADD_FLAG([CXXFLAGS], [-m64])
157  YAT_LD_ADD_FLAG([LDFLAGS], [-m64])
158  gsl_cblas_lib=-latlas
159fi
160export GSL_CBLAS_LIB=${gsl_cblas_lib}
161
162# GNU Scientific Library, GSL http://www.gnu.org/software/gsl/, checks
163# Including AX_PATH_GSL macro from gsl.m4 distributed by GSL
164gsl_found="no"
165gsl_version="1.8"
166AC_SUBST(gsl_version)
167AX_PATH_GSL([${gsl_version}],[gsl_found="yes"],[gsl_version_check="no"])
168if test "$gsl_found" = "yes"; then
169   LIBS="-lgsl $LIBS"
170   # grep words starting with '-L' in other words LDFLAGS
171   for i in $GSL_LIBS; do
172     if test ${i:0:2} = "-L"; then
173       YAT_LD_ADD_FLAG([LDFLAGS], [$i])
174     fi
175   done
176fi
177
178# Boost http://www.boost.org
179boost_version=1.33
180AC_SUBST(boost_version)
181AX_BOOST_BASE(["$boost_version"])
182boost_version_check=$succeeded;
183YAT_CPP_ADD_FLAG([CPPFLAGS], [$BOOST_CPPFLAGS])
184
185#support for large files
186AC_SYS_LARGEFILE
187if test "$enable_largefile" = "no"; then
188  AC_DEFINE([YAT_LFS_DISABLED], 1,
189            [defined to 1 if large file support is disabled])
190fi
191
192# we use AM_* for variables that are solely needed for building yat,
193# i.e., they are not needed for a user of yat and are not propagated
194# to yat-config or yat.m4.
195YAT_CXX_ADD_FLAG([AM_CXXFLAGS], [-Wall -pedantic])
196YAT_CPP_ADD_FLAG([CPPFLAGS], [-DHAVE_INLINE=1])
197AC_ARG_ENABLE([debug],
198  [AS_HELP_STRING([--enable-debug],[turn on debug options and code])])
199if test "${enable_debug}" = "yes" ; then
200  YAT_CPP_ADD_FLAG([AM_CPPFLAGS], [-DYAT_DEBUG=1])
201  YAT_CXX_ADD_FLAG([AM_CXXFLAGS], [-g -O])
202else
203  YAT_CPP_ADD_FLAG([CPPFLAGS], [-DGSL_RANGE_CHECK_OFF -DNDEBUG])
204  YAT_CXX_ADD_FLAG([AM_CXXFLAGS], [-O3])
205fi
206
207# enable target svn-clean
208AC_ARG_ENABLE([svn-support],
209   [AS_HELP_STRING([--enable-svn-support],
210                   [enable svn support - used by yat maintainer])],
211   [enable_svn_support=yes])
212if test "x$enable_svn_support" = "xyes"; then
213  svn_error_msg="svn support cannot be enabled:"
214  AC_CHECK_FILE([$srcdir/.svn], ,
215                AC_MSG_ERROR([$svn_error_msg `$srcdir' is not an svn wc.]))
216  AC_PATH_PROG([PERL], [perl], [no])
217  if test "x$PERL" = "xno"; then
218    AC_MSG_ERROR([$svn_error_msg perl executable not found.])
219  fi
220  AC_PROG_PERL_MODULES([strict Cwd File::Path Getopt::Long Pod::Usage], ,
221         [AC_MSG_ERROR([$svn_error_msg missing some perl module.])])
222fi
223AM_CONDITIONAL([ENABLE_SVN_SUPPORT], [test "x$enable_svn_support" = "xyes"])
224
225
226# check for quiet_NaN support in OS
227# Check at run-time, but if we are cross-compiling fall back on a
228# compilation test
229AC_MSG_CHECKING([if std::numeric_limits<>::has_quiet_NaN is true])
230AC_RUN_IFELSE(
231  [AC_LANG_PROGRAM(
232    [@%:@include <limits>],
233    [return !std::numeric_limits<double>::has_quiet_NaN])],
234  [quiet_nan=yes
235   AC_MSG_RESULT($quiet_nan)],
236  [quiet_nan=no
237   AC_MSG_RESULT($quiet_nan)],
238  # if we are cross-compiling fall back on compilation test
239  [AC_MSG_RESULT(cross-compiling)
240   AC_MSG_CHECKING([for std::numeric_limits<>::quiet_NaN()])
241    AC_COMPILE_IFELSE(
242     [AC_LANG_PROGRAM(
243        [@%:@include <limits>
244         extern void f(double);],
245        [f(std::numeric_limits<double>::quiet_NaN())])],
246     [quiet_nan=yes],
247     [quiet_nan=no])
248   AC_MSG_RESULT($quiet_nan)])
249# Check for infinity support for doubles in OS
250# Check at run-time, but if we are cross-compiling fall back on a
251# compilation test
252AC_MSG_CHECKING([if std::numeric_limits<>::has_infinity is true])
253AC_RUN_IFELSE(
254  [AC_LANG_PROGRAM(
255    [@%:@include <limits>],
256    [return !std::numeric_limits<double>::has_infinity])],
257  [has_infinity=yes
258   AC_MSG_RESULT($has_infinity)],
259  [has_infinity=no
260   AC_MSG_RESULT($has_infinity)],
261  # if we are cross-compiling fall back on compilation test
262  [AC_MSG_RESULT(cross-compiling)
263   AC_MSG_CHECKING([for std::numeric_limits<>::infinity()])
264    AC_COMPILE_IFELSE(
265     [AC_LANG_PROGRAM(
266        [@%:@include <limits>
267         extern void f(double);],
268        [f(std::numeric_limits<double>::infinity())])],
269     [has_infinity=yes],
270     [has_infinity=no])
271   AC_MSG_RESULT($has_infinity)])
272
273AC_MSG_CHECKING([g++ deprecation attribute])
274AC_TRY_COMPILE([void f() __attribute__ ((deprecated));], [],
275               [AC_DEFINE([YAT_HAVE_GCC_DEPRECATED], [1],
276          [Define if compiler supports deprecated attribute, as in g++ 4.0])
277               AC_MSG_RESULT([yes])],
278               [AC_MSG_RESULT([no])] )
279
280AC_MSG_CHECKING([if std::multiset::iterator is mutable])
281AC_TRY_COMPILE([@%:@include <set>
282                @%:@include <vector>
283               ],
284               [std::set<std::vector<double> > s;
285                std::vector<double> v;
286                s.insert(v);
287                s.begin()->reserve(100);
288               ],
289               [AC_DEFINE([MULTISET_ITERATOR_IS_MUTABLE], [1],
290                          [Define if std::multiset::iterator is mutable])
291                AC_MSG_RESULT([yes])
292               ],
293               [AC_MSG_RESULT([no])] )
294
295
296# yat specific settings
297YAT_LIBNAME="yat"
298YAT_LIB_LOCATION="yat"
299AC_SUBST(YAT_LIBNAME)
300AC_SUBST(YAT_LIB)
301AC_SUBST(YAT_LIB_LOCATION)
302
303#doxygen stuff
304DX_HTML_OUTPUT=html
305DX_LATEX_OUTPUT=latex
306AC_SUBST(DX_HTML_OUTPUT)
307AC_SUBST(DX_LATEX_OUTPUT)
308
309
310AC_CONFIG_FILES([test/yat_m4_test.sh], [chmod +x test/yat_m4_test.sh])
311AC_CONFIG_FILES([Makefile
312     build_support/Makefile
313     doc/Makefile
314     doc/doxygen.config
315     doc/first_page.doxygen
316     test/Makefile
317     test/environment.h
318     test/data/Makefile
319     yat/Makefile
320     yat/classifier/Makefile
321     yat/normalizer/Makefile
322     yat/random/Makefile
323     yat/regression/Makefile
324     yat/statistics/Makefile
325     yat/utility/version.h
326     yat/utility/Makefile])
327
328AC_CONFIG_HEADER([yat/utility/config_public.h])
329
330# warning about missing doxygen
331if (test "$have_dox_tools" != "yes") ; then
332  AC_MSG_WARN([
333  Some pre-requisites for generating documentation were not
334  fulfilled. The build will not create any documentation.
335  Please consult the 'README' file for more information about
336  what is needed to generate documentation and refer to above
337  warning messages.
338  ])
339fi
340
341# Print failure status information about selected items, and exit if
342# fatal errors were encountered. No output will be created if
343# configure is halted prematurely.
344
345# used to trigger exit before creation of output
346all_reqs_ok="true"
347
348# No support for quiet NAN is fatal -- sub-sequent compilation, or execution
349# of created binary, will fail.
350if test "${quiet_nan}" = "no" ; then
351  all_reqs_ok="false"
352  AC_MSG_WARN([
353  Support for quiet NAN required.
354  Yat will not work on this system!])
355fi
356
357# No support for infinity is fatal -- sub-sequent compilation, or execution
358# of created binary, will fail.
359if test "${has_infinity}" = "no" ; then
360  all_reqs_ok="false"
361  AC_MSG_WARN([
362  Support for infinity required.
363  Yat will not work on this system!])
364fi
365
366
367# Non-existing BLAS is fatal -- sub-sequent compilation will fail.
368if test "${cblas_found}" = "no" -a "${atlas_found}" = "no" -a "${gslcblas_found}" = "no"; then
369  all_reqs_ok="false"
370  AC_MSG_WARN([
371  cBLAS not found. The C implementation of Basic Linear Algebra
372  Subprograms (cBLAS) library cannot be found. Please make sure
373  cBLAS is installed.])
374fi
375if test "${atlas_found}" = "partial"; then
376  all_reqs_ok="false"
377  AC_MSG_WARN([
378  Partial ATLAS BLAS library found. Please repair your installation.])
379fi
380
381# Non-existing GSL is fatal -- sub-sequent compilation will fail.
382if test "${gsl_found}" = "no" ; then
383  all_reqs_ok="false"
384  if test "${gsl_version_check}" = "no" ; then
385  AC_MSG_WARN([
386  GSL found but not the required version. Please install
387  GSL version ${gsl_version} or later])
388  else
389  AC_MSG_WARN([
390  GSL not found. The GNU Scientific Library (GSL) library cannot be
391  found. Please make sure GSL is installed.])
392  fi
393fi
394
395# Too old Boost is fatal -- sub-sequent compilation will fail.
396if test "${boost_version_check}" != "yes" ; then
397  all_reqs_ok="false"
398  AC_MSG_WARN([
399  Boost found but not the required version. Please install
400  Boost version ${boost_version} or later])
401fi
402
403if (test "$all_reqs_ok" = "false") ; then
404  AC_MSG_FAILURE([
405  Some pre-requisites were not fulfilled, aborting configure.
406  Please consult the 'README' file for more information about what
407  is needed to compile yat and refer to above warning messages.
408  Needed files were NOT created.])
409fi
410
411# Reset flags
412APR_RESTORE_THE_ENVIRONMENT(CPPFLAGS, EXTRA_)
413APR_RESTORE_THE_ENVIRONMENT(CXXFLAGS, EXTRA_)
414APR_RESTORE_THE_ENVIRONMENT(LDFLAGS, EXTRA_)
415
416AM_CPPFLAGS="-I\$(top_srcdir) $AM_CPPFLAGS $EXTRA_CPPFLAGS"
417AM_CXXFLAGS="$AM_CXXFLAGS $EXTRA_CXXFLAGS"
418AM_LDFLAGS="$AM_LDFLAGS $EXTRA_LDFLAGS"
419
420AC_SUBST(AM_CPPFLAGS)
421AC_SUBST(AM_CXXFLAGS)
422AC_SUBST(AM_LDFLAGS)
423
424# Create output.
425AC_OUTPUT
426
427# Some more messages.
428AC_MSG_NOTICE([])
429AC_MSG_NOTICE([ Ready to compile the yat library])
430AC_MSG_NOTICE([ The following flags and libraries will be used:])
431AC_MSG_NOTICE([ +++++++++++++++++++++++++++++++++++++++++++++++])
432AC_MSG_NOTICE([  CPPFLAGS=\"$CPPFLAGS\"])
433AC_MSG_NOTICE([  AM_CPPFLAGS=\"$AM_CPPFLAGS\"])
434AC_MSG_NOTICE([  CXXFLAGS=\"$CXXFLAGS\"])
435AC_MSG_NOTICE([  AM_CXXFLAGS=\"$AM_CXXFLAGS\"])
436AC_MSG_NOTICE([  LDFLAGS=\"$LDFLAGS\"])
437AC_MSG_NOTICE([  AM_LDFLAGS=\"$AM_LDFLAGS\"])
438AC_MSG_NOTICE([  LIBS=\"$LIBS\"])
439AC_MSG_NOTICE([ +++++++++++++++++++++++++++++++++++++++++++++++])
440AC_MSG_NOTICE([])
441if test "${gslcblas_found}" = "yes"; then
442AC_MSG_NOTICE([ GSL BLAS found. This is a reference implementation only.])
443AC_MSG_NOTICE([ Consider using hardware optimized BLAS.])
444AC_MSG_NOTICE([ ATLAS (http://math-atlas.sourceforge.net/) provides an])
445AC_MSG_NOTICE([ optimized BLAS library. It is supported by yat!])
446AC_MSG_NOTICE([])
447fi
448AC_MSG_NOTICE([ Now type 'make ; make check'.])
Note: See TracBrowser for help on using the repository browser.