source: trunk/configure.ac @ 2438

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

Move yathello test from maintainer-check to installcheck, which means
it is run also during distcheck. The check is split into two parts: 1)
Generate a tarball and as this step requires autotools it is typically
only done by the maintainer (or developers) and included in the
distribution. 2) At intallcheck time the tarball is extracted and the
yat-hello package is built using the installed yat. The name of this
toy package has changed from yathello to yat-hello to avoid file name
conflicts.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 13.4 KB
Line 
1## Process this file with autoconf to produce a configure script.
2##
3## $Id: configure.ac 2438 2011-03-12 23:45:59Z 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# Copyright (C) 2010, 2011 Peter Johansson
11#
12# This file is part of the yat library, http://dev.thep.lu.se/yat
13#
14# The yat library is free software; you can redistribute it
15# and/or modify it under the terms of the GNU General Public License as
16# published by the Free Software Foundation; either version 3 of the
17# License, or (at your option) any later version.
18#
19# The yat library is distributed in the hope that it will be useful,
20# but WITHOUT ANY WARRANTY; without even the implied warranty of
21# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
22# General Public License for more details.
23#
24# You should have received a copy of the GNU General Public License
25# along with yat. If not, see <http://www.gnu.org/licenses/>.
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
34
35m4_include([m4/version.m4])
36AC_INIT([yat],[YAT_VERSION__],[libyat-users@lists.sourceforge.net],,
37        [http://dev.thep.lu.se/yat])
38AC_PREREQ(2.63)
39AC_CONFIG_SRCDIR([yat/utility/Matrix.h])
40AC_CONFIG_AUX_DIR([autotools])
41dnl arg below should be the same as in Makefile.am
42AC_CONFIG_MACRO_DIR([m4])
43AC_PREFIX_DEFAULT([/usr/local])
44
45AC_SUBST([YAT_LT_VERSION], [YAT_LT_VERSION_INFO])
46AC_SUBST([YAT_MAJOR_VERSION], [MAJOR_VERSION])
47AC_SUBST([YAT_MINOR_VERSION], [MINOR_VERSION])
48AC_SUBST([YAT_PATCH_VERSION], [PATCH_VERSION])
49AC_SUBST([YAT_DEV_BUILD], [DEV_BUILD])
50AC_DEFINE([YAT_VERSION], ["YAT_VERSION__"], [version])
51AC_DEFINE([YAT_MAJOR_VERSION], [MAJOR_VERSION], [major version])
52AC_DEFINE([YAT_MINOR_VERSION], [MINOR_VERSION], [minor version])
53AC_DEFINE([YAT_PATCH_VERSION], [PATCH_VERSION], [patch version])
54AC_DEFINE([YAT_DEV_BUILD], [DEV_BUILD], [Define to false if offical version])
55
56AC_CONFIG_HEADERS([config.h])
57AM_INIT_AUTOMAKE([1.11 std-options color-tests parallel-tests])
58
59dnl The empty help-string for --with-gsl-prefix and
60dnl --with-gsl-exec-prefix creates an empty line in middle of help
61dnl output. This hacks move the line to above 'Optional Packages:',
62dnl which is prettier.
63dnl
64dnl FIXME: remove when we removed support for --with-gsl-prefix and
65dnl --with-gsl-exec-prefix
66m4_divert_once([HELP_WITH], [])
67
68# Set default programming language
69AC_LANG(C++)
70
71# propagate selected configure variables to DISTCHECK_CONFIGURE_FLAGS
72for var in CPPFLAGS CXX CXXFLAGS CXXCPP LDFLAGS LIBS; do
73  eval isset=\${$var+set}
74  if test "$isset" = 'set' ; then
75    eval val=$`echo $var`
76    DISTCHECK_CONFIGURE_FLAGS="${DISTCHECK_CONFIGURE_FLAGS}'${var}=${val}' "
77  fi
78done
79AC_SUBST(DISTCHECK_CONFIGURE_FLAGS)
80
81# Let user overide default CXXFLAGS
82if test "${CXXFLAGS+set}" != set; then
83  CXXFLAGS=""  # Setting CXXFLAGS here to prevent expansion in AC_PROG_CXX
84fi
85# Checks for programs.
86AC_PROG_CXX
87AC_PROG_SED
88AC_PROG_LIBTOOL
89
90AC_MSG_NOTICE(dnl
91[checking whether tools for generating documentation are available])
92
93have_doxygen=no
94AC_PATH_PROG([DOXYGEN], [doxygen], [no])
95if test "$DOXYGEN" = "no"; then
96   AC_MSG_WARN([unable to find doxygen application])
97else
98   doxygen_min_version=1.5
99   AC_MSG_CHECKING([if doxygen is at least $doxygen_min_version])
100   doxygen_version=`$DOXYGEN --version`
101   AX_COMPARE_VERSION([$doxygen_version], [ge], [$doxygen_min_version],
102                      [have_doxygen=yes])
103   AC_MSG_RESULT([$doxygen_version])
104fi
105
106AC_SUBST(have_doxygen)
107AM_CONDITIONAL([DX_ENABLE_HTML], [test x$have_doxygen = xyes])
108AC_CONFIG_FILES([test/documentation_test.sh],
109                [chmod +x test/documentation_test.sh])
110
111# check for quiet_NaN support in OS
112# Check at run-time, but if we are cross-compiling fall back on a
113# compilation test
114AC_MSG_CHECKING([if std::numeric_limits<>::has_quiet_NaN is true])
115AC_RUN_IFELSE(
116  [AC_LANG_PROGRAM(
117    [@%:@include <limits>],
118    [return !std::numeric_limits<double>::has_quiet_NaN])],
119  [quiet_nan=yes
120   AC_MSG_RESULT($quiet_nan)],
121  [quiet_nan=no
122   AC_MSG_RESULT($quiet_nan)],
123  # if we are cross-compiling fall back on compilation test
124  [AC_MSG_RESULT(cross-compiling)
125   AC_MSG_CHECKING([for std::numeric_limits<>::quiet_NaN()])
126    AC_COMPILE_IFELSE(
127     [AC_LANG_PROGRAM(
128        [@%:@include <limits>
129         extern void f(double);],
130        [f(std::numeric_limits<double>::quiet_NaN())])],
131     [quiet_nan=yes],
132     [quiet_nan=no])
133   AC_MSG_RESULT($quiet_nan)])
134# Check for infinity support for doubles in OS
135# Check at run-time, but if we are cross-compiling fall back on a
136# compilation test
137AC_MSG_CHECKING([if std::numeric_limits<>::has_infinity is true])
138AC_RUN_IFELSE(
139  [AC_LANG_PROGRAM(
140    [@%:@include <limits>],
141    [return !std::numeric_limits<double>::has_infinity])],
142  [has_infinity=yes
143   AC_MSG_RESULT($has_infinity)],
144  [has_infinity=no
145   AC_MSG_RESULT($has_infinity)],
146  # if we are cross-compiling fall back on compilation test
147  [AC_MSG_RESULT(cross-compiling)
148   AC_MSG_CHECKING([for std::numeric_limits<>::infinity()])
149    AC_COMPILE_IFELSE(
150     [AC_LANG_PROGRAM(
151        [@%:@include <limits>
152         extern void f(double);],
153        [f(std::numeric_limits<double>::infinity())])],
154     [has_infinity=yes],
155     [has_infinity=no])
156   AC_MSG_RESULT($has_infinity)])
157
158AC_MSG_CHECKING([g++ deprecation attribute])
159AC_COMPILE_IFELSE(
160   [AC_LANG_PROGRAM([[void f() __attribute__ ((deprecated));]],)], 
161   [AC_DEFINE([YAT_HAVE_GCC_DEPRECATED], [1],
162              [Define if compiler supports deprecated attribute, as in g++ 4.0])
163    AC_MSG_RESULT([yes])],
164   [AC_MSG_RESULT([no])] )
165
166AC_MSG_CHECKING([if std::multiset::iterator is mutable])
167AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include <set>
168                                     @%:@include <vector>]],
169                                   [[std::set<std::vector<double> > s;
170                                     std::vector<double> v;
171                                     s.insert(v);
172                                     s.begin()->reserve(100);
173                                   ]])],
174                  [AC_DEFINE([MULTISET_ITERATOR_IS_MUTABLE], [1],
175                             [Define if std::multiset::iterator is mutable])
176                   AC_MSG_RESULT([yes])
177                  ],
178                  [AC_MSG_RESULT([no])] )
179
180# Save user-defined environment settings for later restoration
181APR_SAVE_THE_ENVIRONMENT(CPPFLAGS)
182APR_SAVE_THE_ENVIRONMENT(CXXFLAGS)
183APR_SAVE_THE_ENVIRONMENT(LDFLAGS)
184APR_SAVE_THE_ENVIRONMENT(LIBS)
185
186# Checks for libraries.
187AC_MSG_NOTICE([checking for libraries])
188AC_CHECK_LIBM
189
190# find library implementing BLAS C API, or use gslcblas
191YAT_LIB_CBLAS([YAT_CBLAS_LIB=$CBLAS_LIB], [YAT_CBLAS_LIB=-lgslcblas])
192
193# GNU Scientific Library, GSL http://www.gnu.org/software/gsl/, checks
194# Including AX_PATH_GSL macro from gsl.m4 distributed by GSL
195gsl_version="1.8"
196AC_SUBST(gsl_version)
197gsl_ok=yes
198YAT_CHECK_GSL([$gsl_version],[gsl_ok=yes],[gsl_ok=no])
199
200# Boost http://www.boost.org
201boost_version=1.35
202AC_SUBST(boost_version)
203AX_BOOST_BASE(["$boost_version"], [boost_ok=yes], [boost_ok=no])
204YAT_CPP_ADD_FLAG([CPPFLAGS], [$BOOST_CPPFLAGS])
205
206#support for large files
207AC_SYS_LARGEFILE
208if test "$enable_largefile" = "no"; then
209  AC_DEFINE([YAT_LFS_DISABLED], 1,
210            [defined to 1 if large file support is disabled])
211fi
212
213# we use prefix INTERNAL_ for variables that are solely needed for
214# building yat, i.e., they are not needed for a user of yat and are
215# not propagated to yat-config or yat.m4.
216YAT_CXX_ADD_FLAG([INTERNAL_CXXFLAGS], [-Wall -pedantic])
217YAT_CPP_ADD_FLAG([INTERNAL_CPPFLAGS], [-DHAVE_INLINE=1])
218AC_ARG_ENABLE([debug],
219  [AS_HELP_STRING([--enable-debug],[turn on debug options and code])])
220if test "${enable_debug}" = "yes" ; then
221  YAT_CPP_ADD_FLAG([INTERNAL_CPPFLAGS], [-DYAT_DEBUG=1])
222  YAT_CXX_ADD_FLAG([INTERNAL_CXXFLAGS], [-g -O])
223else
224  # avoid defining GSL_RANGE_CHECK_OFF if GSL_RANGE_CHECK is already defined
225  AC_CHECK_DECL([GSL_RANGE_CHECK],[],
226                [YAT_CPP_ADD_FLAG([INTERNAL_CPPFLAGS],[-DGSL_RANGE_CHECK_OFF])])
227  YAT_CPP_ADD_FLAG([INTERNAL_CPPFLAGS], [-DNDEBUG])
228  YAT_CXX_ADD_FLAG([INTERNAL_CXXFLAGS], [-O3])
229fi
230
231# some versions of boost uses long long - turn off compiler warnings
232# with -Wno-long-long
233yat_save_CXXFLAGS=$CXXFLAGS
234# turn warnings into errors
235YAT_CXX_ADD_FLAG([CXXFLAGS], [-pedantic-errors])
236AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
237  [
238    @%:@include <boost/iterator/transform_iterator.hpp>
239    @%:@include <cmath>
240    @%:@include <functional>
241    @%:@include <vector>
242  ],[
243      using namespace boost;
244      typedef std::pointer_to_unary_function<double, double> F;
245      std::vector<double> vec;
246      transform_iterator<F, std::vector<double>::iterator>
247        i(vec.begin(), std::ptr_fun(fabs));
248  ])],
249[],
250[YAT_CXX_ADD_FLAG([INTERNAL_CXXFLAGS], [-Wno-long-long])])
251# restore CXXFLAGS
252CXXFLAGS=$yat_save_CXXFLAGS
253
254#doxygen stuff
255DX_HTML_OUTPUT=html
256AC_SUBST(DX_HTML_OUTPUT)
257# create dummie version of doxygen.mk
258AC_CONFIG_COMMANDS([doxygen.mk],
259[for f in $CONFIG_FILES; do
260# for each directory in yat that has a Makefile, create a doxygen.mk
261case $f in #(
262  yat/*/Makefile) :
263   outfile=`echo $f | sed 's,Makefile,doxygen.mk,'`;
264   test -e $outfile || echo '# dummie' > $outfile;
265esac
266done
267])
268
269
270AC_CONFIG_FILES([build_support/gen_yat_pc.sh],
271                [chmod +x build_support/gen_yat_pc.sh])
272AC_CONFIG_FILES([Makefile
273     build_support/Makefile
274     doc/Makefile
275     doc/doxygen.config
276     doc/first_page.doxygen
277     m4/Makefile
278     test/Makefile
279     test/common_defs.sh
280     test/environment.h
281     test/data/Makefile
282     yat/Makefile
283     yat/classifier/Makefile
284     yat/normalizer/Makefile
285     yat/omic/Makefile
286     yat/random/Makefile
287     yat/regression/Makefile
288     yat/statistics/Makefile
289     yat/utility/Makefile])
290
291AC_CONFIG_HEADERS([yat/utility/config_public.h])
292
293# Print failure status information about selected items, and exit if
294# fatal errors were encountered. No output will be created if
295# configure is halted prematurely.
296
297# used to trigger exit before creation of output
298all_reqs_ok="true"
299
300# No support for quiet NAN is fatal -- sub-sequent compilation, or execution
301# of created binary, will fail.
302if test "${quiet_nan}" = "no" ; then
303  all_reqs_ok="false"
304  AC_MSG_WARN([
305  Support for quiet NAN required.
306  yat will not work on this system!])
307fi
308
309# No support for infinity is fatal -- sub-sequent compilation, or execution
310# of created binary, will fail.
311if test "${has_infinity}" = "no" ; then
312  all_reqs_ok="false"
313  AC_MSG_WARN([
314  Support for infinity required.
315  yat will not work on this system!])
316fi
317
318
319# Non-existing GSL is fatal -- sub-sequent compilation will fail.
320if test "x$gsl_ok" != "xyes" ; then
321  all_reqs_ok="false"
322  AC_MSG_WARN([
323  GSL $gsl_version (or newer) not found. The GNU Scientific Library
324  (GSL) library cannot be found. Please make sure GSL is
325  installed. Please refer to warnings above for more details])
326fi
327
328if test "x$want_boost" = "xyes"; then
329# Too old Boost is fatal -- sub-sequent compilation will fail.
330if test "${boost_ok}" != "yes" ; then
331  all_reqs_ok="false"
332  AC_MSG_WARN([
333  Boost ${boost_version} (or newer) not found. Please make sure Boost
334  is installed.])
335fi
336fi
337
338if (test "$all_reqs_ok" = "false") ; then
339  AC_MSG_FAILURE([
340  Some pre-requisites were not fulfilled, aborting configure.
341  Please consult the 'README' file for more information about what
342  is needed to compile yat and refer to above warning messages.
343  Needed files were NOT created.])
344fi
345
346# Reset flags
347APR_RESTORE_THE_ENVIRONMENT(CPPFLAGS, YAT_)
348APR_RESTORE_THE_ENVIRONMENT(CXXFLAGS, YAT_)
349APR_RESTORE_THE_ENVIRONMENT(LDFLAGS, YAT_)
350APR_RESTORE_THE_ENVIRONMENT(LIBS, YAT_)
351
352YAT_PRIMARY_LIBS=-lgsl
353YAT_LIBS="$YAT_PRIMARY_LIBS $YAT_CBLAS_LIB $LIBM"
354AC_SUBST(YAT_PRIMARY_LIBS)
355AC_SUBST(YAT_LIBS)
356AC_SUBST(YAT_CBLAS_LIB)
357
358# set and AC_SUBST variables that are interpreted by Automake
359AM_CPPFLAGS="-I\$(top_srcdir) $INTERNAL_CPPFLAGS $YAT_CPPFLAGS"
360AM_CXXFLAGS="$INTERNAL_CXXFLAGS $YAT_CXXFLAGS"
361AM_LDFLAGS="$INTERNAL_LDFLAGS $YAT_LDFLAGS"
362
363AC_SUBST(AM_CPPFLAGS)
364AC_SUBST(AM_CXXFLAGS)
365AC_SUBST(AM_LDFLAGS)
366AC_SUBST(enable_static)
367
368YAT_SVN_RELEASE([am/maintainer.am])
369
370# Create output.
371AC_OUTPUT
372
373# Some more messages.
374AC_MSG_NOTICE([])
375AC_MSG_NOTICE([ Ready to compile the yat library])
376AC_MSG_NOTICE
377AS_IF([test x$have_doxygen = xyes],
378  [AC_MSG_NOTICE([ Documentation will be generated in html.])],
379  [AC_MSG_NOTICE([Generation of documentation is disabled])
380   AC_MSG_NOTICE([doxygen could not be found])
381  ])
382AC_MSG_NOTICE()
383AC_MSG_NOTICE([ The following flags and libraries will be used:])
384AC_MSG_NOTICE([ +++++++++++++++++++++++++++++++++++++++++++++++])
385AC_MSG_NOTICE([  CPPFLAGS=$CPPFLAGS])
386AC_MSG_NOTICE([  AM_CPPFLAGS=$AM_CPPFLAGS])
387AC_MSG_NOTICE([  CXXFLAGS=$CXXFLAGS])
388AC_MSG_NOTICE([  AM_CXXFLAGS=$AM_CXXFLAGS])
389AC_MSG_NOTICE([  LDFLAGS=$LDFLAGS])
390AC_MSG_NOTICE([  AM_LDFLAGS=$AM_LDFLAGS])
391AC_MSG_NOTICE([  LIBS=$LIBS])
392AC_MSG_NOTICE([  YAT_LIBS=$YAT_LIBS])
393AC_MSG_NOTICE([ +++++++++++++++++++++++++++++++++++++++++++++++])
394AC_MSG_NOTICE([])
395if test "x$YAT_CBLAS_LIB" = "x-lgslcblas"; then
396AC_MSG_NOTICE([ GSL BLAS found. This is a reference implementation only.])
397AC_MSG_NOTICE([ Consider using hardware optimized BLAS.])
398AC_MSG_NOTICE([ ATLAS (http://math-atlas.sourceforge.net/) provides an])
399AC_MSG_NOTICE([ optimized BLAS library. It is supported by yat!])
400AC_MSG_NOTICE([])
401fi
402AC_MSG_NOTICE([ Now type 'make && make check'.])
Note: See TracBrowser for help on using the repository browser.