source: trunk/configure.ac @ 1769

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

Making cppflags -DHAVE_INLINE -DGSL_RANGE_CHECK_OFF -DNDEBUG private,
i.e., they are not propagated to yat-config and not set in autoconf
macro.

closes #485

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