source: branches/0.9-stable/configure.ac @ 2831

Last change on this file since 2831 was 2831, checked in by Peter, 9 years ago

remove debug code

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 15.0 KB
Line 
1## Process this file with autoconf to produce a configure script.
2##
3## $Id: configure.ac 2831 2012-09-13 10:26:06Z 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# Copyright (C) 2012 Jari Häkkinen, Peter Johansson
12#
13# This file is part of the yat library, http://dev.thep.lu.se/yat
14#
15# The yat library is free software; you can redistribute it
16# and/or modify it under the terms of the GNU General Public License as
17# published by the Free Software Foundation; either version 3 of the
18# License, or (at your option) any later version.
19#
20# The yat library is distributed in the hope that it will be useful,
21# but WITHOUT ANY WARRANTY; without even the implied warranty of
22# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
23# General Public License for more details.
24#
25# You should have received a copy of the GNU General Public License
26# along with yat. If not, see <http://www.gnu.org/licenses/>.
27#
28# If you grabbed the source from the subversion repository you should,
29# at top-level, execute:
30#     ./bootstrap
31# To push subsequent changes of this file into the build scripts you
32# must issue:
33#     autoreconf
34
35
36m4_include([m4/version.m4])
37AC_INIT([yat],[my_VERSION],[libyat-users@lists.sourceforge.net],,
38        [http://dev.thep.lu.se/yat])
39MY_VERSION
40AC_PREREQ(2.63)
41AC_CONFIG_SRCDIR([yat/utility/Matrix.h])
42AC_CONFIG_AUX_DIR([autotools])
43dnl arg below should be the same as in Makefile.am
44AC_CONFIG_MACRO_DIR([m4])
45AC_PREFIX_DEFAULT([/usr/local])
46
47# Set default htmldir to ${docdir}/html
48AS_IF([test $htmldir = '${docdir}'], [htmldir='${docdir}/html'])
49
50dnl FIXME remove when we assume autoconf 2.64
51m4_ifndef([AC_PACKAGE_URL],
52          [AC_DEFINE([PACKAGE_URL], ["http://dev.thep.lu.se/yat"],
53                     [Define to home page for this package])
54           AC_SUBST([PACKAGE_URL], ["http://dev.thep.lu.se/yat"])])
55
56AC_SUBST([YAT_LT_VERSION], [YAT_LT_VERSION_INFO])
57AC_DEFINE([YAT_VERSION], ["my_VERSION"], [version])
58
59AC_CONFIG_HEADERS([config.h])
60AM_INIT_AUTOMAKE([1.11 std-options color-tests parallel-tests silent-rules -Werror subdir-objects])
61
62# Set default programming language
63AC_LANG(C++)
64
65# propagate selected configure variables to DISTCHECK_CONFIGURE_FLAGS
66for var in CPPFLAGS CXX CXXFLAGS CXXCPP LDFLAGS LIBS; do
67  eval isset=\${$var+set}
68  if test "$isset" = 'set' ; then
69    eval val=$`echo $var`
70    DISTCHECK_CONFIGURE_FLAGS="${DISTCHECK_CONFIGURE_FLAGS}'${var}=${val}' "
71  fi
72done
73AC_SUBST(DISTCHECK_CONFIGURE_FLAGS)
74
75# Let user overide default CXXFLAGS
76if test "${CXXFLAGS+set}" != set; then
77  CXXFLAGS=""  # Setting CXXFLAGS here to prevent expansion in AC_PROG_CXX
78fi
79# Checks for programs.
80AC_PROG_CXX
81AC_PROG_SED
82AC_PROG_LIBTOOL
83
84# find the compiler vendor: gnu, intel, etc
85AX_COMPILER_VENDOR
86
87have_doxygen=no
88AC_PATH_PROG([DOXYGEN], [doxygen], [no])
89if test "$DOXYGEN" = "no"; then
90   AC_MSG_WARN([unable to find doxygen application])
91else
92   doxygen_min_version=1.5
93   AC_MSG_CHECKING([if doxygen is at least $doxygen_min_version])
94   doxygen_version=`$DOXYGEN --version`
95   AX_COMPARE_VERSION([$doxygen_version], [ge], [$doxygen_min_version],
96                      [have_doxygen=yes], [have_doxygen=old])
97   AC_MSG_RESULT([$doxygen_version])
98fi
99
100AC_SUBST(have_doxygen)
101AM_CONDITIONAL([DX_ENABLE_HTML], [test x$have_doxygen = xyes])
102
103# check for quiet_NaN support in OS
104# Check at run-time, but if we are cross-compiling fall back on a
105# compilation test
106AC_MSG_CHECKING([if std::numeric_limits<>::has_quiet_NaN is true])
107AC_RUN_IFELSE(
108  [AC_LANG_PROGRAM(
109    [@%:@include <limits>],
110    [return !std::numeric_limits<double>::has_quiet_NaN])],
111  [quiet_nan=yes
112   AC_MSG_RESULT($quiet_nan)],
113  [quiet_nan=no
114   AC_MSG_RESULT($quiet_nan)],
115  # if we are cross-compiling fall back on compilation test
116  [AC_MSG_RESULT(cross-compiling)
117   AC_MSG_CHECKING([for std::numeric_limits<>::quiet_NaN()])
118    AC_COMPILE_IFELSE(
119     [AC_LANG_PROGRAM(
120        [@%:@include <limits>
121         extern void f(double);],
122        [f(std::numeric_limits<double>::quiet_NaN())])],
123     [quiet_nan=yes],
124     [quiet_nan=no])
125   AC_MSG_RESULT($quiet_nan)])
126# Check for infinity support for doubles in OS
127# Check at run-time, but if we are cross-compiling fall back on a
128# compilation test
129AC_MSG_CHECKING([if std::numeric_limits<>::has_infinity is true])
130AC_RUN_IFELSE(
131  [AC_LANG_PROGRAM(
132    [@%:@include <limits>],
133    [return !std::numeric_limits<double>::has_infinity])],
134  [has_infinity=yes
135   AC_MSG_RESULT($has_infinity)],
136  [has_infinity=no
137   AC_MSG_RESULT($has_infinity)],
138  # if we are cross-compiling fall back on compilation test
139  [AC_MSG_RESULT(cross-compiling)
140   AC_MSG_CHECKING([for std::numeric_limits<>::infinity()])
141    AC_COMPILE_IFELSE(
142     [AC_LANG_PROGRAM(
143        [@%:@include <limits>
144         extern void f(double);],
145        [f(std::numeric_limits<double>::infinity())])],
146     [has_infinity=yes],
147     [has_infinity=no])
148   AC_MSG_RESULT($has_infinity)])
149
150AC_MSG_CHECKING([g++ deprecation attribute])
151AC_COMPILE_IFELSE(
152   [AC_LANG_PROGRAM([[void f() __attribute__ ((deprecated));]],)],
153   [AC_DEFINE([YAT_HAVE_GCC_DEPRECATED], [1],
154              [Define if compiler supports deprecated attribute, as in g++ 4.0])
155    AC_MSG_RESULT([yes])],
156   [AC_MSG_RESULT([no])] )
157
158AC_MSG_CHECKING([if std::multiset::iterator is mutable])
159AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include <set>
160                                     @%:@include <vector>]],
161                                   [[std::set<std::vector<double> > s;
162                                     std::vector<double> v;
163                                     s.insert(v);
164                                     s.begin()->reserve(100);
165                                   ]])],
166                  [AC_DEFINE([MULTISET_ITERATOR_IS_MUTABLE], [1],
167                             [Define if std::multiset::iterator is mutable])
168                   AC_MSG_RESULT([yes])
169                  ],
170                  [AC_MSG_RESULT([no])] )
171
172# Save user-defined environment settings for later restoration
173APR_SAVE_THE_ENVIRONMENT(CPPFLAGS)
174APR_SAVE_THE_ENVIRONMENT(CXXFLAGS)
175APR_SAVE_THE_ENVIRONMENT(LDFLAGS)
176APR_SAVE_THE_ENVIRONMENT(LIBS)
177
178# Checks for libraries.
179AC_MSG_NOTICE([checking for libraries])
180AC_CHECK_LIBM
181
182# find library implementing BLAS C API, or use gslcblas
183YAT_LIB_CBLAS([YAT_CBLAS_LIB=$CBLAS_LIB], [YAT_CBLAS_LIB=-lgslcblas])
184
185# GNU Scientific Library, GSL http://www.gnu.org/software/gsl/, checks
186# Including AX_PATH_GSL macro from gsl.m4 distributed by GSL
187gsl_version="1.8"
188AC_SUBST(gsl_version)
189gsl_ok=yes
190YAT_CHECK_GSL([$gsl_version],[gsl_ok=yes],[gsl_ok=no])
191
192# Boost http://www.boost.org
193boost_version=1.35
194AC_SUBST(boost_version)
195AX_BOOST_BASE(["$boost_version"], [boost_ok=yes], [boost_ok=no])
196# skip boost link tests if boost is not wanted (--without-boost)
197AS_IF([test x"$want_boost" = x"yes"],[
198  AX_BOOST_THREAD
199  AX_BOOST_SYSTEM
200  YAT_CPP_ADD_FLAG([CPPFLAGS], [$BOOST_CPPFLAGS])
201  YAT_LD_ADD_FLAG([LDFLAGS], [$BOOST_LDFLAGS])
202  # boost tests above only test compilation, so let's try link in the libs
203  save_LIBS=$LIBS
204  LIBS="$LIBS $BOOST_THREAD_LIB $BOOST_SYSTEM_LIB"
205  AC_MSG_CHECKING([for thread_specific_ptr])
206  AC_LINK_IFELSE([AC_LANG_PROGRAM([@%:@include <boost/thread/tss.hpp>],
207                                  [boost::thread_specific_ptr<int> x;
208                                   x.reset(new int(1));])],
209                 [AC_MSG_RESULT([yes])],
210                 [AC_MSG_RESULT([no])
211                  boost_ok=no])
212  LIBS=$save_LIBS
213])
214
215# see tickets #648 #687
216AC_MSG_CHECKING([whether constructor in boost concept is supported])
217AC_COMPILE_IFELSE([
218  AC_LANG_PROGRAM(
219    [
220     @%:@include <boost/concept_check.hpp>
221     template <typename T>
222     class MyConcept
223     {
224     public:
225       MyConcept(void) {}
226       BOOST_CONCEPT_USAGE(MyConcept){}
227     };
228    ],[
229     MyConcept<double> x;
230     x = x;
231    ])
232  ],
233  [AC_MSG_RESULT([yes])
234   AC_DEFINE([YAT_HAVE_BOOST_CONCEPT_WITH_CONSTRUCTOR],[1],
235             [define if compiler supports boost concept with constructor])
236  ],
237  [AC_MSG_RESULT([no])]
238)
239
240
241#support for large files
242AC_SYS_LARGEFILE
243if test "$enable_largefile" = "no"; then
244  AC_DEFINE([YAT_LFS_DISABLED], 1,
245            [defined to 1 if large file support is disabled])
246fi
247
248# we use prefix INTERNAL_ for variables that are solely needed for
249# building yat, i.e., they are not needed for a user of yat and are
250# not propagated to yat-config or yat.m4.
251AS_IF([test x"$ax_cv_cxx_compiler_vendor" = x"gnu"], [
252  YAT_CXX_ADD_FLAG([INTERNAL_CXXFLAGS], [-Wall -pedantic])
253])
254YAT_CPP_ADD_FLAG([INTERNAL_CPPFLAGS], [-DHAVE_INLINE=1])
255AC_ARG_ENABLE([debug],
256  [AS_HELP_STRING([--enable-debug],[turn on debug options and code])])
257if test "${enable_debug}" = "yes" ; then
258  YAT_CPP_ADD_FLAG([INTERNAL_CPPFLAGS], [-DYAT_DEBUG=1])
259  YAT_CXX_ADD_FLAG([INTERNAL_CXXFLAGS], [-g -O])
260else
261  # avoid defining GSL_RANGE_CHECK_OFF if GSL_RANGE_CHECK is already defined
262  AC_CHECK_DECL([GSL_RANGE_CHECK],[],
263                [YAT_CPP_ADD_FLAG([INTERNAL_CPPFLAGS],[-DGSL_RANGE_CHECK_OFF])])
264  YAT_CPP_ADD_FLAG([INTERNAL_CPPFLAGS], [-DNDEBUG])
265  YAT_CXX_ADD_FLAG([INTERNAL_CXXFLAGS], [-O3])
266fi
267
268# turn off compiler warning #654 from intel compiler
269AS_IF([test x"$ax_cv_cxx_compiler_vendor" = x"intel"], [
270  YAT_CXX_ADD_FLAG([CXXFLAGS], ['-diag-disable 654'])
271])
272
273# Turns warnings to errors in compilation tests. Only put tests that
274# should be warning sensitive below this point. Can't find any
275# mechanism to revert AC_LANG_WERROR
276AC_LANG_WERROR
277
278# GCC 4.0.1 on OSX complains about -pthread (issue #713)
279AS_IF([AS_ECHO(["$CPPFLAGS"]) | $GREP '\-pthread' > /dev/null],
280  [AX_CHECK_PREPROC_FLAG([-pthread], [],
281     [CPPFLAGS=`AS_ECHO(["$CPPFLAGS"]) | $SED 's%-pthread%%'`],
282     [$INTERNAL_CPPFLAGS])
283])
284
285# some versions of boost uses long long - turn off compiler warnings
286# with -Wno-long-long
287yat_save_CXXFLAGS=$CXXFLAGS
288AC_MSG_CHECKING([whether boost uses long long])
289CXXFLAGS="$INTERNAL_CXXFLAGS $CXXFLAGS"
290AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
291  [
292    @%:@include <boost/iterator/transform_iterator.hpp>
293    @%:@include <boost/thread.hpp>
294    @%:@include <cmath>
295    @%:@include <functional>
296    @%:@include <vector>
297  ],[
298      using namespace boost;
299      typedef std::pointer_to_unary_function<double, double> F;
300      std::vector<double> vec;
301      transform_iterator<F, std::vector<double>::iterator>
302        i(vec.begin(), std::ptr_fun(fabs));
303      int x = boost::thread::hardware_concurrency();
304      ++x;
305  ])],
306[AC_MSG_RESULT([no])],
307[AC_MSG_RESULT([yes])
308 YAT_CXX_ADD_FLAG([INTERNAL_CXXFLAGS], [-Wno-long-long])
309])
310# restore CXXFLAGS
311CXXFLAGS=$yat_save_CXXFLAGS
312
313#doxygen stuff
314DX_HTML_OUTPUT=html
315AC_SUBST(DX_HTML_OUTPUT)
316
317AC_CONFIG_FILES([build_support/gen_yat_pc.sh],
318                [chmod +x build_support/gen_yat_pc.sh])
319AC_CONFIG_FILES([build_support/tag_and_release.sh],
320                [chmod +x-w build_support/tag_and_release.sh])
321AC_CONFIG_FILES([Makefile
322     doc/doxygen.config
323     doc/first_page.doxygen
324     test/common_defs.sh
325])
326
327AC_CONFIG_HEADERS([yat/utility/config_public.h])
328# for the test suite
329yat_abs_top_srcdir=`cd $srcdir && pwd`
330AC_DEFINE_UNQUOTED([YAT_ABS_TOP_SRCDIR], ["$yat_abs_top_srcdir"],
331                   [Define to absolute path to top yat src dir])
332
333# Print failure status information about selected items, and exit if
334# fatal errors were encountered. No output will be created if
335# configure is halted prematurely.
336
337# used to trigger exit before creation of output
338all_reqs_ok="true"
339
340# No support for quiet NAN is fatal -- sub-sequent compilation, or execution
341# of created binary, will fail.
342if test "${quiet_nan}" = "no" ; then
343  all_reqs_ok="false"
344  AC_MSG_WARN([
345  Support for quiet NAN required.
346  yat will not work on this system!])
347fi
348
349# No support for infinity is fatal -- sub-sequent compilation, or execution
350# of created binary, will fail.
351if test "${has_infinity}" = "no" ; then
352  all_reqs_ok="false"
353  AC_MSG_WARN([
354  Support for infinity required.
355  yat will not work on this system!])
356fi
357
358
359# Non-existing GSL is fatal -- sub-sequent compilation will fail.
360if test "x$gsl_ok" != "xyes" ; then
361  all_reqs_ok="false"
362  AC_MSG_WARN([
363  GSL $gsl_version (or newer) not found. The GNU Scientific Library
364  (GSL) library cannot be found. Please make sure GSL is
365  installed. Please refer to warnings above for more details])
366fi
367
368if test "x$want_boost" = "xyes"; then
369# Too old Boost is fatal -- sub-sequent compilation will fail.
370AS_IF([test "${boost_ok}" != "yes"],[
371  all_reqs_ok="false"
372  AC_MSG_WARN([
373  Boost ${boost_version} (or newer) not found. Please make sure Boost
374  is installed.])
375], [
376  AS_IF([test x$ax_cv_boost_thread = xno], [
377    all_reqs_ok="false"
378    AC_MSG_WARN([
379  Boost thread library not found. Please make sure library boost-thread is
380  is installed.])
381  ])
382])
383fi
384
385if (test "$all_reqs_ok" = "false") ; then
386  AC_MSG_FAILURE([
387  Some pre-requisites were not fulfilled, aborting configure.
388  Please consult the 'README' file for more information about what
389  is needed to compile yat and refer to above warning messages.
390  Needed files were NOT created.])
391fi
392
393# Reset flags
394APR_RESTORE_THE_ENVIRONMENT(CPPFLAGS, YAT_)
395APR_RESTORE_THE_ENVIRONMENT(CXXFLAGS, YAT_)
396APR_RESTORE_THE_ENVIRONMENT(LDFLAGS, YAT_)
397APR_RESTORE_THE_ENVIRONMENT(LIBS, YAT_)
398
399YAT_PRIMARY_LIBS="-lgsl $BOOST_THREAD_LIB $BOOST_SYSTEM_LIB"
400YAT_LIBS="$YAT_PRIMARY_LIBS $YAT_CBLAS_LIB $LIBM"
401AC_SUBST(YAT_PRIMARY_LIBS)
402AC_SUBST(YAT_LIBS)
403AC_SUBST(YAT_CBLAS_LIB)
404
405# set and AC_SUBST variables that are interpreted by Automake
406AM_CPPFLAGS="-I\$(top_srcdir) $INTERNAL_CPPFLAGS $YAT_CPPFLAGS"
407AM_CXXFLAGS="$INTERNAL_CXXFLAGS $YAT_CXXFLAGS"
408AM_LDFLAGS="$INTERNAL_LDFLAGS $YAT_LDFLAGS"
409
410AC_SUBST(AM_CPPFLAGS)
411AC_SUBST(AM_CXXFLAGS)
412AC_SUBST(AM_LDFLAGS)
413AC_SUBST(enable_static)
414
415YAT_SVN_RELEASE([am/maintainer.am])
416
417# set some variable for final message
418AS_CASE([$have_doxygen],
419        [yes], [doxygen_message=yes],
420        [no], [doxygen_message="no (doxygen not found)"],
421        [old], [doxygen_message="no (\`$DOXYGEN' too old)"],
422        [AC_MSG_WARN([unexpected value \$have_doxygen: '$have_doxygen'])
423         AS_BOX([Report this to ]AC_PACKAGE_BUGREPORT)
424        ])
425
426yat_gslcblas_message=
427AS_IF([test "x$YAT_CBLAS_LIB" = "x-lgslcblas"], [
428yat_gslcblas_message='
429  GSL CBLAS found. This is a reference implementation only.
430  Consider using hardware optimized BLAS.
431  ATLAS (http://math-atlas.sourceforge.net/) provides an
432  optimized BLAS library. It is supported by yat!
433'
434])
435
436AC_MSG_RESULT([----------------------------------------------------------------])
437AC_MSG_RESULT([Creating yat configuration])
438# Create output.
439AC_OUTPUT
440
441
442# Some more messages.
443AC_MSG_RESULT([
444yat is configured as follows:
445
446  Build Shared Library: $enable_shared
447  Build Static Library: $enable_static
448  Build Documentation:  $doxygen_message
449
450Options used to compile and link:
451  VERSION     = $VERSION
452  CXX         = $CXX
453  CPPFLAGS    = $CPPFLAGS
454  YAT_CPPFLAGS= $AM_CPPFLAGS
455  CXXFLAGS    = $CXXFLAGS
456  YAT_CXXFLAGS= $AM_CXXFLAGS
457  LD          = $LD
458  LDFLAGS     = $LDFLAGS
459  YAT_LDFLAGS = $AM_LDFLAGS
460  LIBS        = $LIBS
461  YAT_LIBS    = $YAT_LIBS
462${yat_gslcblas_message}dnl
463----------------------------------------------------------------
464Now type `make'. dnl
465])
Note: See TracBrowser for help on using the repository browser.