source: trunk/configure.ac @ 1659

Last change on this file since 1659 was 1657, checked in by Peter, 13 years ago

fixes #471

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