source: trunk/configure.ac @ 1486

Last change on this file since 1486 was 1486, checked in by Jari Häkkinen, 15 years ago

Addresses #436.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 12.2 KB
Line 
1## Process this file with autoconf to produce a configure script.
2##
3## $Id: configure.ac 1486 2008-09-09 21:17:19Z jari $
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 this program; if not, write to the Free Software
24# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
25# 02111-1307, USA.
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([./build_support/version.m4])
35AC_INIT([yat],[YAT_VERSION],[jari@thep.lu.se])
36AC_PREREQ(2.60)
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([build_support])
41AC_PREFIX_DEFAULT([/usr/local])
42
43AC_SUBST([YAT_LT_VERSION], [LT_VERSION])
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_HEADER([config.h])
50AM_INIT_AUTOMAKE()
51
52# Set default programming language
53AC_LANG(C++)
54
55# Let user overide default CXXFLAGS
56if test "${CXXFLAGS+set}" != set; then
57  CXXFLAGS=""  # Setting CXXFLAGS here to prevent expansion in AC_PROG_CXX
58fi
59# Checks for programs.
60AC_PROG_CXX
61AC_PROG_INSTALL
62AC_PROG_SED
63
64AC_MSG_NOTICE(dnl
65[checking whether tools for generating documentation are available])
66
67have_dox_tools="yes"
68AC_PATH_PROG([DOXYGEN], [doxygen], [no])
69if test "$DOXYGEN" = "no"; then
70   AC_MSG_WARN([unable to find doxygen application])
71   have_dox_tools=no
72else
73   doxygen_min_version=1.5
74   AC_MSG_CHECKING([if doxygen is at least $doxygen_min_version])
75   doxygen_version=`$DOXYGEN --version`
76   AX_COMPARE_VERSION([$doxygen_version], [ge], [$doxygen_min_version], ,
77                      [have_dox_tools=no])
78   AC_MSG_RESULT([$doxygen_version])
79fi
80AC_CHECK_PROG([have_epstopdf], [epstopdf], [yes], [no])
81if test "$have_epstopdf" != "yes"; then
82   AC_MSG_WARN([unable to find epstopdf application])
83   have_dox_tools=no
84fi
85AC_CHECK_PROG([have_latex], [latex], [yes], [no])
86if test "$have_latex" != "yes"; then
87   AC_MSG_WARN([unable to find latex application])
88fi
89AC_CHECK_PROG([have_makeindex], [makeindex], [yes], [no])
90if test "$have_makeindex" != "yes"; then
91   AC_MSG_WARN([unable to find makeindex application])
92   have_dox_tools=no
93fi
94AC_CHECK_PROG([have_pdflatex], [pdflatex], [yes], [no])
95if test "$have_pdflatex" != "yes"; then
96   AC_MSG_WARN([unable to find pdflatex application])
97   have_dox_tools=no
98fi
99
100AM_CONDITIONAL(HAVE_DOXYGEN, test "$have_dox_tools" = "yes")
101AC_CONFIG_FILES([test/documentation_test.sh],
102                [chmod +x test/documentation_test.sh])
103
104# Save user-defined environment settings for later restoration
105APR_SAVE_THE_ENVIRONMENT(CPPFLAGS)
106APR_SAVE_THE_ENVIRONMENT(CXXFLAGS)
107APR_SAVE_THE_ENVIRONMENT(LDFLAGS)
108
109# Checks for libraries.
110AC_MSG_NOTICE([checking for libraries])
111AC_CHECK_LIB(m,main)
112# searching for cblas. Priority 1) find a cblas library, 2) find ATLAS
113# generated cblas, and 3) fall back to GSL cblas implementation. If
114# partial ATLAS is detected the configure script fails.
115cblas_found="no"  # cblas_found may get values yes or no
116# atlas_found may get values yes, no, or partial. In some cases
117# partial atlas may be installed
118atlas_found="no"
119gslcblas_found="no" # gslcblas_found may get values yes or no
120AC_SEARCH_LIBS(cblas_sdsdot,cblas,cblas_found="yes",
121  AC_SEARCH_LIBS(ATL_sdsdot,atlas,
122    AC_SEARCH_LIBS(cblas_sdsdot,cblas,atlas_found="yes",
123                   atlas_found="partial",-m64),
124      AC_SEARCH_LIBS(cblas_dswap,gslcblas,gslcblas_found="yes"),-m64),)
125# CBLAS used in test of GSL
126gsl_cblas_lib=-lgslcblas
127if test ${cblas_found} = "yes"; then
128  gsl_cblas_lib=-lcblas
129fi
130if test ${atlas_found} = "yes"; then
131  CXXFLAGS="$CXXFLAGS -m64" LDFLAGS="$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       LDFLAGS="$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;
157CPPFLAGS="$BOOST_CPPFLAGS $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.
172AM_CXXFLAGS="$AM_CXXFLAGS -Wall -pedantic"
173CPPFLAGS="$CPPFLAGS -DHAVE_INLINE=1"
174AC_ARG_ENABLE(debug,
175  [AS_HELP_STRING([--enable-debug],[turn on debug options and code])])
176if test "${enable_debug}" = "yes" ; then
177  AM_CXXFLAGS="$AM_CXXFLAGS -g -O"
178  AM_CPPFLAGS="$AM_CPPFLAGS -DYAT_DEBUG=1"
179else
180  AM_CXXFLAGS="$CXXFLAGS -O3"
181  CPPFLAGS="$CPPFLAGS -DGSL_RANGE_CHECK_OFF"
182  AM_CPPFLAGS="$CPPFLAGS -DNDEBUG"
183fi
184
185# check for quiet_NaN support in OS
186# Check at run-time, but if we are cross-compiling fall back on a
187# compilation test
188AC_MSG_CHECKING([if std::numeric_limits<>::has_quiet_NaN is true])
189AC_RUN_IFELSE(
190  [AC_LANG_PROGRAM(
191    [@%:@include <limits>],
192    [return !std::numeric_limits<double>::has_quiet_NaN])],
193  [quiet_nan=yes
194   AC_MSG_RESULT($quiet_nan)],
195  [quiet_nan=no
196   AC_MSG_RESULT($quiet_nan)],
197  # if we are cross-compiling fall back on compilation test
198  [AC_MSG_RESULT(cross-compiling)
199   AC_MSG_CHECKING([for std::numeric_limits<>::quiet_NaN()])
200    AC_COMPILE_IFELSE(
201     [AC_LANG_PROGRAM(
202        [@%:@include <limits>
203         extern void f(double);],
204        [f(std::numeric_limits<double>::quiet_NaN())])],
205     [quiet_nan=yes],
206     [quiet_nan=no])
207   AC_MSG_RESULT($quiet_nan)])
208# Check for infinity support for doubles in OS
209# Check at run-time, but if we are cross-compiling fall back on a
210# compilation test
211AC_MSG_CHECKING([if std::numeric_limits<>::has_infinity is true])
212AC_RUN_IFELSE(
213  [AC_LANG_PROGRAM(
214    [@%:@include <limits>],
215    [return !std::numeric_limits<double>::has_infinity])],
216  [has_infinity=yes
217   AC_MSG_RESULT($has_infinity)],
218  [has_infinity=no
219   AC_MSG_RESULT($has_infinity)],
220  # if we are cross-compiling fall back on compilation test
221  [AC_MSG_RESULT(cross-compiling)
222   AC_MSG_CHECKING([for std::numeric_limits<>::infinity()])
223    AC_COMPILE_IFELSE(
224     [AC_LANG_PROGRAM(
225        [@%:@include <limits>
226         extern void f(double);],
227        [f(std::numeric_limits<double>::infinity())])],
228     [has_infinity=yes],
229     [has_infinity=no])
230   AC_MSG_RESULT($has_infinity)])
231
232
233# yat specific settings
234YAT_LIBNAME="yat"
235YAT_LIB_LOCATION="yat"
236AC_SUBST(YAT_LIBNAME)
237AC_SUBST(YAT_LIB)
238AC_SUBST(YAT_LIB_LOCATION)
239
240#doxygen stuff
241DX_HTML_OUTPUT=html
242DX_LATEX_OUTPUT=latex
243AC_SUBST(DX_HTML_OUTPUT)
244AC_SUBST(DX_LATEX_OUTPUT)
245
246
247AC_CONFIG_FILES([Makefile
248     build_support/yat.pc
249     doc/Makefile
250     doc/doxygen.config
251     doc/first_page.doxygen
252     test/Makefile
253     test/environment.h
254     test/data/Makefile
255     yat/Makefile
256     yat/classifier/Makefile
257     yat/normalization/Makefile
258     yat/random/Makefile
259     yat/regression/Makefile
260     yat/statistics/Makefile
261     yat/utility/version.h
262     yat/utility/Makefile])
263
264AC_CONFIG_FILES([build_support/yat-config],
265                [chmod +x build_support/yat-config])
266
267# warning about missing doxygen
268if (test "$have_dox_tools" != "yes") ; then
269  AC_MSG_WARN([
270  Some pre-requisites for generating documentation were not
271  fulfilled. The build will not create any documentation.
272  Please consult the 'README' file for more information about
273  what is needed to generate documentation and refer to above
274  warning messages.
275  ])
276fi
277
278# Print failure status information about selected items, and exit if
279# fatal errors were encountered. No output will be created if
280# configure is halted prematurely.
281
282# used to trigger exit before creation of output
283all_reqs_ok="true"
284
285# No support for quiet NAN is fatal -- sub-sequent compilation, or execution
286# of created binary, will fail.
287if test "${quiet_nan}" = "no" ; then
288  all_reqs_ok="false"
289  AC_MSG_WARN([
290  Support for quiet NAN required.
291  Yat will not work on this system!])
292fi
293
294# No support for infinity is fatal -- sub-sequent compilation, or execution
295# of created binary, will fail.
296if test "${has_infinity}" = "no" ; then
297  all_reqs_ok="false"
298  AC_MSG_WARN([
299  Support for infinity required.
300  Yat will not work on this system!])
301fi
302
303
304# Non-existing BLAS is fatal -- sub-sequent compilation will fail.
305if test "${cblas_found}" = "no" -a "${atlas_found}" = "no" -a "${gslcblas_found}" = "no"; then
306  all_reqs_ok="false"
307  AC_MSG_WARN([
308  cBLAS not found. The C implementation of Basic Linear Algebra
309  Subprograms (cBLAS) library cannot be found. Please make sure
310  cBLAS is installed.])
311fi
312if test "${atlas_found}" = "partial"; then
313  all_reqs_ok="false"
314  AC_MSG_WARN([
315  Partial ATLAS BLAS library found. Please repair your installation.])
316fi
317
318# Non-existing GSL is fatal -- sub-sequent compilation will fail.
319if test "${gsl_found}" = "no" ; then
320  all_reqs_ok="false"
321  if test "${gsl_version_check}" = "no" ; then
322  AC_MSG_WARN([
323  GSL found but not the required version. Please install
324  GSL version ${gsl_version} or later])
325  else
326  AC_MSG_WARN([
327  GSL not found. The GNU Scientific Library (GSL) library cannot be
328  found. Please make sure GSL is installed.])
329  fi
330fi
331
332# Too old Boost is fatal -- sub-sequent compilation will fail.
333if test "${boost_version_check}" != "yes" ; then
334  all_reqs_ok="false"
335  AC_MSG_WARN([
336  Boost found but not the required version. Please install
337  Boost version ${boost_version} or later])
338fi
339
340if (test "$all_reqs_ok" = "false") ; then
341  AC_MSG_FAILURE([
342  Some pre-requisites were not fulfilled, aborting configure.
343  Please consult the 'README' file for more information about what
344  is needed to compile yat and refer to above warning messages.
345  Needed files were NOT created.])
346fi
347
348# Reset flags
349APR_RESTORE_THE_ENVIRONMENT(CPPFLAGS, EXTRA_)
350APR_RESTORE_THE_ENVIRONMENT(CXXFLAGS, EXTRA_)
351APR_RESTORE_THE_ENVIRONMENT(LDFLAGS, EXTRA_)
352
353AM_CPPFLAGS="-I\$(top_srcdir) $AM_CPPFLAGS $EXTRA_CPPFLAGS"
354AM_CXXFLAGS="$AM_CXXFLAGS $EXTRA_CXXFLAGS"
355AM_LDFLAGS="$AM_LDFLAGS $EXTRA_LDFLAGS"
356
357AC_SUBST(AM_CPPFLAGS)
358AC_SUBST(AM_CXXFLAGS)
359AC_SUBST(AM_LDFLAGS)
360
361# Create output.
362AC_OUTPUT
363
364# Some more messages.
365AC_MSG_NOTICE([])
366AC_MSG_NOTICE([ Ready to compile the yat library])
367AC_MSG_NOTICE([ The following flags and libraries will be used:])
368AC_MSG_NOTICE([ +++++++++++++++++++++++++++++++++++++++++++++++])
369AC_MSG_NOTICE([  CPPFLAGS=\"$CPPFLAGS\"])
370AC_MSG_NOTICE([  AM_CPPFLAGS=\"$AM_CPPFLAGS\"])
371AC_MSG_NOTICE([  CXXFLAGS=\"$CXXFLAGS\"])
372AC_MSG_NOTICE([  AM_CXXFLAGS=\"$AM_CXXFLAGS\"])
373AC_MSG_NOTICE([  LDFLAGS=\"$LDFLAGS\"])
374AC_MSG_NOTICE([  AM_LDFLAGS=\"$AM_LDFLAGS\"])
375AC_MSG_NOTICE([  LIBS=\"$LIBS\"])
376AC_MSG_NOTICE([ +++++++++++++++++++++++++++++++++++++++++++++++])
377AC_MSG_NOTICE([])
378if test "${gslcblas_found}" = "yes"; then
379AC_MSG_NOTICE([ GSL BLAS found. This is a reference implementation only.])
380AC_MSG_NOTICE([ Consider using hardware optimized BLAS.])
381AC_MSG_NOTICE([ ATLAS (http://math-atlas.sourceforge.net/) provides an])
382AC_MSG_NOTICE([ optimized BLAS library. It is supported by yat!])
383AC_MSG_NOTICE([])
384fi
385AC_MSG_NOTICE([ Now type 'make ; make check'.])
Note: See TracBrowser for help on using the repository browser.