configure.ac

Code
Comments
Other
Rev Date Author Line
71 03 May 04 jari 1 ## Process this file with autoconf to produce a configure script.
71 03 May 04 jari 2 ##
71 03 May 04 jari 3 ## $Id$
2 19 Feb 03 jari 4
2119 12 Dec 09 peter 5 # Copyright (C) 2003 Daniel Dalevi, Jari Häkkinen
2119 12 Dec 09 peter 6 # Copyright (C) 2004 Jari Häkkinen
2119 12 Dec 09 peter 7 # Copyright (C) 2005, 2006 Jari Häkkinen, Peter Johansson
2119 12 Dec 09 peter 8 # Copyright (C) 2007, 2008 Jari Häkkinen, Peter Johansson, Markus Ringnér
2119 12 Dec 09 peter 9 # Copyright (C) 2009 Jari Häkkinen, Peter Johansson
2418 30 Jan 11 peter 10 # Copyright (C) 2010, 2011 Peter Johansson
2787 23 Jul 12 peter 11 # Copyright (C) 2012 Jari Häkkinen, Peter Johansson
4359 23 Aug 23 peter 12 # Copyright (C) 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 Peter Johansson
572 06 Apr 06 jari 13 #
4142 07 Feb 22 peter 14 # This file is part of the yat library, https://dev.thep.lu.se/yat
572 06 Apr 06 jari 15 #
675 10 Oct 06 jari 16 # The yat library is free software; you can redistribute it
572 06 Apr 06 jari 17 # and/or modify it under the terms of the GNU General Public License as
1486 09 Sep 08 jari 18 # published by the Free Software Foundation; either version 3 of the
572 06 Apr 06 jari 19 # License, or (at your option) any later version.
572 06 Apr 06 jari 20 #
675 10 Oct 06 jari 21 # The yat library is distributed in the hope that it will be useful,
572 06 Apr 06 jari 22 # but WITHOUT ANY WARRANTY; without even the implied warranty of
572 06 Apr 06 jari 23 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
572 06 Apr 06 jari 24 # General Public License for more details.
572 06 Apr 06 jari 25 #
572 06 Apr 06 jari 26 # You should have received a copy of the GNU General Public License
4142 07 Feb 22 peter 27 # along with yat. If not, see <https://www.gnu.org/licenses/>.
572 06 Apr 06 jari 28 #
923 01 Oct 07 jari 29 # If you grabbed the source from the subversion repository you should,
923 01 Oct 07 jari 30 # at top-level, execute:
923 01 Oct 07 jari 31 #      ./bootstrap
954 09 Oct 07 jari 32 # To push subsequent changes of this file into the build scripts you
954 09 Oct 07 jari 33 # must issue:
954 09 Oct 07 jari 34 #      autoreconf
572 06 Apr 06 jari 35
2300 20 Jul 10 peter 36
1785 08 Feb 09 peter 37 m4_include([m4/version.m4])
2729 19 Apr 12 peter 38 AC_INIT([yat],[my_VERSION],[libyat-users@lists.sourceforge.net],,
4142 07 Feb 22 peter 39         [https://dev.thep.lu.se/yat])
2729 19 Apr 12 peter 40 MY_VERSION
3367 06 Feb 15 peter 41 AC_PREREQ([2.64])
1128 23 Feb 08 jari 42 AC_CONFIG_SRCDIR([yat/utility/Matrix.h])
71 03 May 04 jari 43 AC_CONFIG_AUX_DIR([autotools])
1439 27 Aug 08 peter 44 dnl arg below should be the same as in Makefile.am
1785 08 Feb 09 peter 45 AC_CONFIG_MACRO_DIR([m4])
71 03 May 04 jari 46 AC_PREFIX_DEFAULT([/usr/local])
2 19 Feb 03 jari 47
2487 27 May 11 peter 48 # Set default htmldir to ${docdir}/html
4094 14 Sep 21 peter 49 AS_VAR_IF([$htmldir], ['${docdir}'], [htmldir='${docdir}/html'])
2487 27 May 11 peter 50
1606 30 Oct 08 peter 51 AC_SUBST([YAT_LT_VERSION], [YAT_LT_VERSION_INFO])
2729 19 Apr 12 peter 52 AC_DEFINE([YAT_VERSION], ["my_VERSION"], [version])
1097 17 Feb 08 jari 53
2131 23 Dec 09 peter 54 AC_CONFIG_HEADERS([config.h])
2866 11 Nov 12 peter 55 AM_INIT_AUTOMAKE([1.11 std-options color-tests parallel-tests
2866 11 Nov 12 peter 56                   silent-rules subdir-objects])
2 19 Feb 03 jari 57
952 09 Oct 07 jari 58 # Set default programming language
952 09 Oct 07 jari 59 AC_LANG(C++)
952 09 Oct 07 jari 60
1662 18 Dec 08 peter 61 # propagate selected configure variables to DISTCHECK_CONFIGURE_FLAGS
1662 18 Dec 08 peter 62 for var in CPPFLAGS CXX CXXFLAGS CXXCPP LDFLAGS LIBS; do
1662 18 Dec 08 peter 63   eval isset=\${$var+set}
1662 18 Dec 08 peter 64   if test "$isset" = 'set' ; then
1662 18 Dec 08 peter 65     eval val=$`echo $var`
1662 18 Dec 08 peter 66     DISTCHECK_CONFIGURE_FLAGS="${DISTCHECK_CONFIGURE_FLAGS}'${var}=${val}' "
1662 18 Dec 08 peter 67   fi
1662 18 Dec 08 peter 68 done
2739 07 Jun 12 peter 69 AC_SUBST(DISTCHECK_CONFIGURE_FLAGS)
1662 18 Dec 08 peter 70
2881 18 Nov 12 peter 71 # record if CXXFLAGS was set by user for further use below
2881 18 Nov 12 peter 72 AS_IF([test "${CXXFLAGS+set}" = set], [
2881 18 Nov 12 peter 73   CXXFLAGS_set_by_user=yes
2881 18 Nov 12 peter 74 ],[
3214 05 May 14 peter 75   AS_IF([test "${INTERNAL_CXXFLAGS+set}" = set], [
3214 05 May 14 peter 76     CXXFLAGS_set_by_user=yes
3214 05 May 14 peter 77   ], [
3214 05 May 14 peter 78     CXXFLAGS_set_by_user=no
3214 05 May 14 peter 79   ])
2881 18 Nov 12 peter 80   # set CXXFLAGS to avoid expansion in AC_PROG_CXX
2881 18 Nov 12 peter 81   CXXFLAGS=
2881 18 Nov 12 peter 82 ])
2881 18 Nov 12 peter 83
2 19 Feb 03 jari 84 # Checks for programs.
2945 07 Jan 13 peter 85 dnl FIXME remove m4_ifdef when we assume Automake 1.12
2945 07 Jan 13 peter 86 m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
2 19 Feb 03 jari 87 AC_PROG_CXX
3581 19 Jan 17 peter 88
3938 16 Jul 20 peter 89 yat_search_cxx11=no
3593 20 Jan 17 peter 90 AC_ARG_ENABLE([cxx11],
3666 25 Jul 17 peter 91   [AS_HELP_STRING([--enable-cxx11],
3938 16 Jul 20 peter 92                   [search for compiler options to build with C++11 support])],
3666 25 Jul 17 peter 93   [AS_CASE([$enable_cxx11],
3938 16 Jul 20 peter 94            [yes], [yat_search_cxx11=yes],
3938 16 Jul 20 peter 95            [no], [AC_MSG_ERROR([invalid option: --disable-cxx11])],
3666 25 Jul 17 peter 96            [AC_MSG_ERROR([invalid argument for --enable-cxx11: $enable_cxx11])])
3938 16 Jul 20 peter 97   ])
3581 19 Jan 17 peter 98
3666 25 Jul 17 peter 99
3938 16 Jul 20 peter 100 YAT_CXX11([$yat_search_cxx11], [
3938 16 Jul 20 peter 101     yat_has_cxx11=yes
3938 16 Jul 20 peter 102     # If a C++11 compliant compiler was found, apply the old tests,
3938 16 Jul 20 peter 103     # just to be sure but with no option searching.
3938 16 Jul 20 peter 104     # no need to check for YAT_CXX_RVALUE
3938 16 Jul 20 peter 105     YAT_CXX_ATOMIC([], [yat_has_cxx11=no])
3938 16 Jul 20 peter 106     YAT_CXX_LOG2([], [yat_has_cxx11=no])
3938 16 Jul 20 peter 107     YAT_CXX_THROW_IF_NESTED([], [yat_has_cxx11=no])
3938 16 Jul 20 peter 108   ], [
3938 16 Jul 20 peter 109     yat_has_cxx11=no
3581 19 Jan 17 peter 110 ])
3938 16 Jul 20 peter 111 AS_VAR_IF([yat_has_cxx11], [no], [
3938 16 Jul 20 peter 112   AC_MSG_FAILURE([$CXX is not a C++11 compiler])
3938 16 Jul 20 peter 113 ])
4102 22 Sep 21 peter 114 # test for some features available in modern C++ versions (but not in c++11)
4102 22 Sep 21 peter 115 YAT_FUNC_STRING_ENDS_WITH
4102 22 Sep 21 peter 116 YAT_FUNC_STRING_STARTS_WITH
4102 22 Sep 21 peter 117 YAT_FUNC_STRING_CONTAINS
3581 19 Jan 17 peter 118
1077 12 Feb 08 jari 119 AC_PROG_SED
3995 26 Sep 20 peter 120 LT_INIT
2 19 Feb 03 jari 121
2673 03 Dec 11 peter 122 # find the compiler vendor: gnu, intel, etc
2673 03 Dec 11 peter 123 AX_COMPILER_VENDOR
2673 03 Dec 11 peter 124
3823 16 Jul 19 peter 125 AC_ARG_VAR([DOXYGEN], [path to doxygen program])
1998 13 Jun 09 peter 126 have_doxygen=no
3823 16 Jul 19 peter 127
3823 16 Jul 19 peter 128 # Let the user turn off usage of doxygen
3823 16 Jul 19 peter 129 AS_VAR_IF([DOXYGEN], [no], [
3823 16 Jul 19 peter 130   have_doxygen=notwanted
3823 16 Jul 19 peter 131 ], [
3823 16 Jul 19 peter 132   AC_PATH_PROG([DOXYGEN], [doxygen], [no])
3823 16 Jul 19 peter 133   AS_VAR_IF([DOXYGEN], [no], [
1397 06 Aug 08 peter 134    AC_MSG_WARN([unable to find doxygen application])
3823 16 Jul 19 peter 135   ], [ # if we found doxygen look that it's new enough
1440 27 Aug 08 peter 136    doxygen_min_version=1.5
1440 27 Aug 08 peter 137    AC_MSG_CHECKING([if doxygen is at least $doxygen_min_version])
1440 27 Aug 08 peter 138    doxygen_version=`$DOXYGEN --version`
1998 13 Jun 09 peter 139    AX_COMPARE_VERSION([$doxygen_version], [ge], [$doxygen_min_version],
2626 08 Nov 11 peter 140                       [have_doxygen=yes], [have_doxygen=old])
1440 27 Aug 08 peter 141    AC_MSG_RESULT([$doxygen_version])
3823 16 Jul 19 peter 142  ])
3823 16 Jul 19 peter 143 ])
1397 06 Aug 08 peter 144
1998 13 Jun 09 peter 145 AC_SUBST(have_doxygen)
1998 13 Jun 09 peter 146 AM_CONDITIONAL([DX_ENABLE_HTML], [test x$have_doxygen = xyes])
1209 06 Mar 08 peter 147
922 01 Oct 07 jari 148 # check for quiet_NaN support in OS
1358 24 Jun 08 peter 149 # Check at run-time, but if we are cross-compiling fall back on a
1358 24 Jun 08 peter 150 # compilation test
924 02 Oct 07 markus 151 AC_MSG_CHECKING([if std::numeric_limits<>::has_quiet_NaN is true])
924 02 Oct 07 markus 152 AC_RUN_IFELSE(
924 02 Oct 07 markus 153   [AC_LANG_PROGRAM(
1359 26 Jun 08 peter 154     [@%:@include <limits>],
924 02 Oct 07 markus 155     [return !std::numeric_limits<double>::has_quiet_NaN])],
2739 07 Jun 12 peter 156   [quiet_nan=yes
1358 24 Jun 08 peter 157    AC_MSG_RESULT($quiet_nan)],
2739 07 Jun 12 peter 158   [quiet_nan=no
1358 24 Jun 08 peter 159    AC_MSG_RESULT($quiet_nan)],
1358 24 Jun 08 peter 160   # if we are cross-compiling fall back on compilation test
1358 24 Jun 08 peter 161   [AC_MSG_RESULT(cross-compiling)
1358 24 Jun 08 peter 162    AC_MSG_CHECKING([for std::numeric_limits<>::quiet_NaN()])
1358 24 Jun 08 peter 163     AC_COMPILE_IFELSE(
1358 24 Jun 08 peter 164      [AC_LANG_PROGRAM(
1359 26 Jun 08 peter 165         [@%:@include <limits>
1358 24 Jun 08 peter 166          extern void f(double);],
1358 24 Jun 08 peter 167         [f(std::numeric_limits<double>::quiet_NaN())])],
1358 24 Jun 08 peter 168      [quiet_nan=yes],
1358 24 Jun 08 peter 169      [quiet_nan=no])
1358 24 Jun 08 peter 170    AC_MSG_RESULT($quiet_nan)])
2871 12 Nov 12 peter 171 # No support for quiet NAN is fatal -- sub-sequent compilation, or execution
2871 12 Nov 12 peter 172 # of created binary, will fail.
2871 12 Nov 12 peter 173 AS_IF([test x"$quiet_nan" = x"no"], [
3072 28 Aug 13 peter 174   AC_MSG_FAILURE([dnl
2872 12 Nov 12 peter 175 Support for quiet NAN required. yat will not work on this system!])
2871 12 Nov 12 peter 176 ])
2871 12 Nov 12 peter 177
1156 26 Feb 08 markus 178 # Check for infinity support for doubles in OS
1358 24 Jun 08 peter 179 # Check at run-time, but if we are cross-compiling fall back on a
1358 24 Jun 08 peter 180 # compilation test
1156 26 Feb 08 markus 181 AC_MSG_CHECKING([if std::numeric_limits<>::has_infinity is true])
1156 26 Feb 08 markus 182 AC_RUN_IFELSE(
1156 26 Feb 08 markus 183   [AC_LANG_PROGRAM(
1359 26 Jun 08 peter 184     [@%:@include <limits>],
1156 26 Feb 08 markus 185     [return !std::numeric_limits<double>::has_infinity])],
1358 24 Jun 08 peter 186   [has_infinity=yes
1358 24 Jun 08 peter 187    AC_MSG_RESULT($has_infinity)],
2739 07 Jun 12 peter 188   [has_infinity=no
1358 24 Jun 08 peter 189    AC_MSG_RESULT($has_infinity)],
1358 24 Jun 08 peter 190   # if we are cross-compiling fall back on compilation test
1358 24 Jun 08 peter 191   [AC_MSG_RESULT(cross-compiling)
1358 24 Jun 08 peter 192    AC_MSG_CHECKING([for std::numeric_limits<>::infinity()])
1358 24 Jun 08 peter 193     AC_COMPILE_IFELSE(
1358 24 Jun 08 peter 194      [AC_LANG_PROGRAM(
1359 26 Jun 08 peter 195         [@%:@include <limits>
1358 24 Jun 08 peter 196          extern void f(double);],
1358 24 Jun 08 peter 197         [f(std::numeric_limits<double>::infinity())])],
1358 24 Jun 08 peter 198      [has_infinity=yes],
1358 24 Jun 08 peter 199      [has_infinity=no])
1358 24 Jun 08 peter 200    AC_MSG_RESULT($has_infinity)])
2872 12 Nov 12 peter 201 # No support for infinity is fatal -- sub-sequent compilation, or execution
2872 12 Nov 12 peter 202 # of created binary, will fail.
2872 12 Nov 12 peter 203 AS_IF([test x"${has_infinity}" = x"no"], [
3072 28 Aug 13 peter 204   AC_MSG_FAILURE([dnl
2872 12 Nov 12 peter 205 Support for infinity required. yat will not work on this system!])
2872 12 Nov 12 peter 206 ])
922 01 Oct 07 jari 207
2872 12 Nov 12 peter 208
1500 15 Sep 08 peter 209 AC_MSG_CHECKING([g++ deprecation attribute])
1767 03 Feb 09 peter 210 AC_COMPILE_IFELSE(
2739 07 Jun 12 peter 211    [AC_LANG_PROGRAM([[void f() __attribute__ ((deprecated));]],)],
2739 07 Jun 12 peter 212    [AC_DEFINE([YAT_HAVE_GCC_DEPRECATED], [1],
2739 07 Jun 12 peter 213               [Define if compiler supports deprecated attribute, as in g++ 4.0])
1767 03 Feb 09 peter 214     AC_MSG_RESULT([yes])],
1767 03 Feb 09 peter 215    [AC_MSG_RESULT([no])] )
1156 26 Feb 08 markus 216
2103 06 Nov 09 peter 217 # Save user-defined environment settings for later restoration
2103 06 Nov 09 peter 218 APR_SAVE_THE_ENVIRONMENT(CPPFLAGS)
2103 06 Nov 09 peter 219 APR_SAVE_THE_ENVIRONMENT(CXXFLAGS)
2103 06 Nov 09 peter 220 APR_SAVE_THE_ENVIRONMENT(LDFLAGS)
2103 06 Nov 09 peter 221 APR_SAVE_THE_ENVIRONMENT(LIBS)
3088 26 Sep 13 peter 222 user_LIBS=$LIBS
2103 06 Nov 09 peter 223
3018 04 Apr 13 peter 224 AS_CASE([$host_os], [darwin*], [
3018 04 Apr 13 peter 225   YAT_LD_ADD_FLAG([LDFLAGS], [-Wl,-flat_namespace])
3018 04 Apr 13 peter 226 ])
3018 04 Apr 13 peter 227
3087 19 Sep 13 peter 228 # prefer using libtool in link tests
3087 19 Sep 13 peter 229 YAT_USE_LIBTOOL_PUSH
3087 19 Sep 13 peter 230
3960 01 Aug 20 peter 231 YAT_THREAD([
3960 01 Aug 20 peter 232   CPPFLAGS="$CPPFLAGS $YAT_THREAD_CPPFLAGS"
3960 01 Aug 20 peter 233   LIBS="$LIBS $YAT_THREAD_LIBS"
3960 01 Aug 20 peter 234 ], [
3960 01 Aug 20 peter 235   AC_MSG_FAILURE([$CXX does not work with std::thread])
3960 01 Aug 20 peter 236 ])
3960 01 Aug 20 peter 237
2103 06 Nov 09 peter 238 # Checks for libraries.
2103 06 Nov 09 peter 239 AC_MSG_NOTICE([checking for libraries])
3995 26 Sep 20 peter 240 LT_LIB_M
2877 15 Nov 12 peter 241 LIBS="$LIBM $LIBS"
3086 19 Sep 13 peter 242 # we store libs in YAT_STATIC_LIBS that are not suitable to link into
3086 19 Sep 13 peter 243 # libyat but are needed when creating applications linking against
3086 19 Sep 13 peter 244 # libyat. Typically these are static (only) libraries, but see ticket
3086 19 Sep 13 peter 245 # 737 for discussion.
3086 19 Sep 13 peter 246 YAT_STATIC_LIBS=
3088 26 Sep 13 peter 247 YAT_CHECK_LA_LIBS([
3086 19 Sep 13 peter 248   double cos(double x);
3086 19 Sep 13 peter 249   double foo(double x) { return cos(x); }
3088 26 Sep 13 peter 250 ], [$LIBS], [$LIBM], [YAT_STATIC_LIBS])
2103 06 Nov 09 peter 251
2103 06 Nov 09 peter 252 # GNU Scientific Library, GSL http://www.gnu.org/software/gsl/, checks
4279 26 Jan 23 peter 253 m4_define([YAT_REQUIRED_GSL_VERSION], [2.2])
3812 08 Jul 19 peter 254 YAT_CHECK_GSL([YAT_REQUIRED_GSL_VERSION], [],
3811 08 Jul 19 peter 255    [AC_MSG_FAILURE([dnl
3811 08 Jul 19 peter 256 GSL YAT_REQUIRED_GSL_VERSION (or newer) not found. The GNU Scientific Library
3072 28 Aug 13 peter 257 (GSL) library cannot be found. Please make sure GSL is installed.])
2873 13 Nov 12 peter 258 ])
2103 06 Nov 09 peter 259
2103 06 Nov 09 peter 260 # Boost http://www.boost.org
4252 18 Nov 22 peter 261 m4_define([YAT_REQUIRED_BOOST_VERSION], [1.66])
3811 08 Jul 19 peter 262 AX_BOOST_BASE([YAT_REQUIRED_BOOST_VERSION], [], [AC_MSG_FAILURE([dnl
3811 08 Jul 19 peter 263 Boost YAT_REQUIRED_BOOST_VERSION (or newer) not found. Please install boost, or provide
2873 13 Nov 12 peter 264 CPPFLAGS=-I/path/to/boost])
2873 13 Nov 12 peter 265 ])
2785 22 Jul 12 peter 266 # skip boost link tests if boost is not wanted (--without-boost)
2785 22 Jul 12 peter 267 AS_IF([test x"$want_boost" = x"yes"],[
2838 16 Sep 12 peter 268   YAT_CPP_ADD_FLAG([CPPFLAGS], [$BOOST_CPPFLAGS])
2838 16 Sep 12 peter 269   YAT_LD_ADD_FLAG([LDFLAGS], [$BOOST_LDFLAGS])
3761 19 Oct 18 peter 270   AX_BOOST_IOSTREAMS
3761 19 Oct 18 peter 271   LIBS="$BOOST_IOSTREAMS_LIB $LIBS"
3761 19 Oct 18 peter 272   # Check if $BOOST_IOSTREAMS_LIB is appropriate for libyat.la
3761 19 Oct 18 peter 273   YAT_CHECK_LA_LIBS([
3761 19 Oct 18 peter 274     @%:@include <boost/iostreams/filtering_stream.hpp>
3761 19 Oct 18 peter 275     int my_func(void)
3761 19 Oct 18 peter 276     { boost::iostreams::filtering_istream fis; return 0; }
3761 19 Oct 18 peter 277   ], [$BOOST_IOSTREAMS_LIB $user_LIBS],
3761 19 Oct 18 peter 278      [$BOOST_IOSTREAMS_LIB],
3761 19 Oct 18 peter 279      [YAT_STATIC_LIBS])
3761 19 Oct 18 peter 280
2785 22 Jul 12 peter 281 ])
2103 06 Nov 09 peter 282
3812 08 Jul 19 peter 283 # find library implementing BLAS C API, or use gslcblas
3812 08 Jul 19 peter 284 # We wait doing this test until after -L flags have been added to
3812 08 Jul 19 peter 285 # LDFLAGS from gsl and boost, so the search path is the same in the
3812 08 Jul 19 peter 286 # test as at make time and to avoid using the library (see ticket
3812 08 Jul 19 peter 287 # #922)
3812 08 Jul 19 peter 288 YAT_LIB_CBLAS([YAT_CBLAS_LIB=$CBLAS_LIB], [YAT_CBLAS_LIB=-lgslcblas])
3812 08 Jul 19 peter 289 LIBS="-lgsl $YAT_CBLAS_LIB $LIBS"
3812 08 Jul 19 peter 290
3812 08 Jul 19 peter 291 YAT_CHECK_LA_LIBS([
3812 08 Jul 19 peter 292   double gsl_cdf_hypergeometric_P(const unsigned int k, const unsigned int n1,
3812 08 Jul 19 peter 293                                   const unsigned int n2, const unsigned int t);
3812 08 Jul 19 peter 294   double yat_foo(void) { return gsl_cdf_hypergeometric_P(1,2,3,10); }
3812 08 Jul 19 peter 295 ], [$LIBS], [-lgsl], [YAT_STATIC_LIBS])
3812 08 Jul 19 peter 296
2673 03 Dec 11 peter 297 # see tickets #648 #687
2673 03 Dec 11 peter 298 AC_MSG_CHECKING([whether constructor in boost concept is supported])
2673 03 Dec 11 peter 299 AC_COMPILE_IFELSE([
2673 03 Dec 11 peter 300   AC_LANG_PROGRAM(
2673 03 Dec 11 peter 301     [
2673 03 Dec 11 peter 302      @%:@include <boost/concept_check.hpp>
2673 03 Dec 11 peter 303      template <typename T>
2673 03 Dec 11 peter 304      class MyConcept
2673 03 Dec 11 peter 305      {
2673 03 Dec 11 peter 306      public:
2673 03 Dec 11 peter 307        MyConcept(void) {}
2673 03 Dec 11 peter 308        BOOST_CONCEPT_USAGE(MyConcept){}
2673 03 Dec 11 peter 309      };
2673 03 Dec 11 peter 310     ],[
2673 03 Dec 11 peter 311      MyConcept<double> x;
2673 03 Dec 11 peter 312      x = x;
2673 03 Dec 11 peter 313     ])
2673 03 Dec 11 peter 314   ],
2673 03 Dec 11 peter 315   [AC_MSG_RESULT([yes])
2673 03 Dec 11 peter 316    AC_DEFINE([YAT_HAVE_BOOST_CONCEPT_WITH_CONSTRUCTOR],[1],
2673 03 Dec 11 peter 317              [define if compiler supports boost concept with constructor])
2673 03 Dec 11 peter 318   ],
2673 03 Dec 11 peter 319   [AC_MSG_RESULT([no])]
2673 03 Dec 11 peter 320 )
2673 03 Dec 11 peter 321
3198 29 Apr 14 peter 322 # Check if boost::iterator_facade::operator-> works with a proxy class
3198 29 Apr 14 peter 323 # as reference_type; otherwise workaround is needed in
3198 29 Apr 14 peter 324 # e.g. BamPairIterator. See ticket #790.
3198 29 Apr 14 peter 325 AC_MSG_CHECKING([if boost::iterator_facade::operator-> works])
3198 29 Apr 14 peter 326 AC_COMPILE_IFELSE(
3198 29 Apr 14 peter 327   [AC_LANG_PROGRAM(
3198 29 Apr 14 peter 328     [@%:@include <iterator>
3198 29 Apr 14 peter 329      @%:@include <boost/iterator/iterator_facade.hpp>
3198 29 Apr 14 peter 330      struct MyClass { void foo(void) const { } };
3198 29 Apr 14 peter 331      struct MyProxy { void foo(void) const { } };
3198 29 Apr 14 peter 332      // a nonsense class (only for compiler test purposes)
3198 29 Apr 14 peter 333      class MyIterator
3198 29 Apr 14 peter 334        : public boost::iterator_facade<
3198 29 Apr 14 peter 335         MyIterator, const MyClass, std::input_iterator_tag, MyProxy
3198 29 Apr 14 peter 336        >
3198 29 Apr 14 peter 337      {
3198 29 Apr 14 peter 338        friend class boost::iterator_core_access;
3198 29 Apr 14 peter 339        const MyProxy dereference(void) const { return MyProxy(); }
3198 29 Apr 14 peter 340        bool equal(const MyIterator& other) const { return true; }
3198 29 Apr 14 peter 341        void increment(void) {}
3198 29 Apr 14 peter 342      };
3198 29 Apr 14 peter 343     ],
3198 29 Apr 14 peter 344     [MyIterator iter; iter->foo();]
3198 29 Apr 14 peter 345     )
3198 29 Apr 14 peter 346   ],[
3198 29 Apr 14 peter 347     AC_MSG_RESULT([yes])
3198 29 Apr 14 peter 348     AC_DEFINE([YAT_HAVE_BOOST_ITERATOR_FACADE_PROXY_PTR], [1],
3198 29 Apr 14 peter 349               [Define to 1 if boost::iterator_facade::operator-> works])
3198 29 Apr 14 peter 350   ],[
3198 29 Apr 14 peter 351     AC_MSG_RESULT([no])
3198 29 Apr 14 peter 352   ])
3912 18 May 20 peter 353
3912 18 May 20 peter 354
3497 25 May 16 peter 355 # check for hts and samtools available from http://www.htslib.org
4277 25 Jan 23 peter 356 YAT_CHECK_HTSLIB([1.10])
3400 30 Mar 15 peter 357
2103 06 Nov 09 peter 358 #support for large files
2103 06 Nov 09 peter 359 AC_SYS_LARGEFILE
2103 06 Nov 09 peter 360 if test "$enable_largefile" = "no"; then
2739 07 Jun 12 peter 361   AC_DEFINE([YAT_LFS_DISABLED], 1,
2103 06 Nov 09 peter 362             [defined to 1 if large file support is disabled])
2103 06 Nov 09 peter 363 fi
2103 06 Nov 09 peter 364
2881 18 Nov 12 peter 365 AC_DEFINE([HAVE_INLINE], [1], [Define if inline is available on system])
2986 18 Feb 13 peter 366 # default is same as --disable-debug
2881 18 Nov 12 peter 367 AC_ARG_ENABLE([debug],
2986 18 Feb 13 peter 368   [AS_HELP_STRING([--enable-debug],[turn on debug options and code])],
2986 18 Feb 13 peter 369         [], [enable_debug=no])
2881 18 Nov 12 peter 370
2882 18 Nov 12 peter 371 # If neither --enable-assert nor --disable-assert, set enable_assert
2882 18 Nov 12 peter 372 # to same as enable_debug
2882 18 Nov 12 peter 373 AC_ARG_ENABLE([assert],
2882 18 Nov 12 peter 374               [AS_HELP_STRING([--enable-assert], [turn on assertions])],
2882 18 Nov 12 peter 375               [], [enable_assert=$enable_debug])
2882 18 Nov 12 peter 376
2103 06 Nov 09 peter 377 # we use prefix INTERNAL_ for variables that are solely needed for
2103 06 Nov 09 peter 378 # building yat, i.e., they are not needed for a user of yat and are
2103 06 Nov 09 peter 379 # not propagated to yat-config or yat.m4.
3214 05 May 14 peter 380 AC_ARG_VAR([INTERNAL_CPPFLAGS],
3214 05 May 14 peter 381            [Similar to CPPFLAGS but value is not propagated to yat-config])
3214 05 May 14 peter 382 AC_ARG_VAR([INTERNAL_CXXFLAGS],
3214 05 May 14 peter 383            [Similar to CXXFLAGS but value is not propagated to yat-config])
3214 05 May 14 peter 384 AC_ARG_VAR([INTERNAL_LDFLAGS],
3214 05 May 14 peter 385            [Similar to LDFLAGS but value is not propagated to yat-config])
3214 05 May 14 peter 386
2881 18 Nov 12 peter 387 AS_IF([test "${enable_debug}" = "yes"], [
2881 18 Nov 12 peter 388   AC_DEFINE([YAT_DEBUG], [1], [Define to activate yat assertioons])
2881 18 Nov 12 peter 389   YAT_CXX_ADD_FLAG([INTERNAL_CXXFLAGS], [-Wall -pedantic -g -O])
2881 18 Nov 12 peter 390 ], [
2103 06 Nov 09 peter 391   # avoid defining GSL_RANGE_CHECK_OFF if GSL_RANGE_CHECK is already defined
2107 07 Nov 09 peter 392   AC_CHECK_DECL([GSL_RANGE_CHECK],[],
2881 18 Nov 12 peter 393                 [AC_DEFINE([GSL_RANGE_CHECK_OFF], [1],
2881 18 Nov 12 peter 394                            [Define to turn off GSL range checks])])
2881 18 Nov 12 peter 395   # If CXXFLAGS not set by user, set it to default value
2881 18 Nov 12 peter 396   AS_IF([test x$CXXFLAGS_set_by_user != xyes], [
2881 18 Nov 12 peter 397     YAT_CXX_ADD_FLAG([INTERNAL_CXXFLAGS],[-O3])
2881 18 Nov 12 peter 398   ])
2881 18 Nov 12 peter 399 ])
2103 06 Nov 09 peter 400
2882 18 Nov 12 peter 401 AS_IF([test x"$enable_assert" = x"no"], [
2882 18 Nov 12 peter 402   AC_DEFINE([NDEBUG], [1], [Define to turn off assertions])
2882 18 Nov 12 peter 403 ])
2882 18 Nov 12 peter 404
2673 03 Dec 11 peter 405 # turn off compiler warning #654 from intel compiler
2673 03 Dec 11 peter 406 AS_IF([test x"$ax_cv_cxx_compiler_vendor" = x"intel"], [
2673 03 Dec 11 peter 407   YAT_CXX_ADD_FLAG([CXXFLAGS], ['-diag-disable 654'])
2673 03 Dec 11 peter 408 ])
2673 03 Dec 11 peter 409
2781 21 Jul 12 peter 410 # Turns warnings to errors in compilation tests. Only put tests that
2781 21 Jul 12 peter 411 # should be warning sensitive below this point. Can't find any
2781 21 Jul 12 peter 412 # mechanism to revert AC_LANG_WERROR
2781 21 Jul 12 peter 413 AC_LANG_WERROR
2781 21 Jul 12 peter 414
2781 21 Jul 12 peter 415 # GCC 4.0.1 on OSX complains about -pthread (issue #713)
2781 21 Jul 12 peter 416 AS_IF([AS_ECHO(["$CPPFLAGS"]) | $GREP '\-pthread' > /dev/null],
2781 21 Jul 12 peter 417   [AX_CHECK_PREPROC_FLAG([-pthread], [],
2781 21 Jul 12 peter 418      [CPPFLAGS=`AS_ECHO(["$CPPFLAGS"]) | $SED 's%-pthread%%'`],
2781 21 Jul 12 peter 419      [$INTERNAL_CPPFLAGS])
2781 21 Jul 12 peter 420 ])
2781 21 Jul 12 peter 421
3295 25 Jul 14 peter 422 # When compiling boost::Mutable_*Iterator some versions of clang complains:
3295 25 Jul 14 peter 423 # warning: unsequenced modification and access to 'i' [-Wunsequenced]
3295 25 Jul 14 peter 424 # Test if compiler gives that warning, and if it does turn it off.
3295 25 Jul 14 peter 425 yat_save_CXXFLAGS=$CXXFLAGS
3295 25 Jul 14 peter 426 AC_MSG_CHECKING([whether 'boost/concept_check.hpp' causes compiler warnings])
3295 25 Jul 14 peter 427 CXXFLAGS="$INTERNAL_CXXFLAGS $CXXFLAGS"
3295 25 Jul 14 peter 428 AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
3295 25 Jul 14 peter 429   [
3295 25 Jul 14 peter 430     @%:@include <boost/concept_check.hpp>
3295 25 Jul 14 peter 431   ],[
3295 25 Jul 14 peter 432     BOOST_CONCEPT_ASSERT((boost::Mutable_RandomAccessIterator<double* >));
3295 25 Jul 14 peter 433   ])
3295 25 Jul 14 peter 434 ], [ # IF-SUCCESSFUL
3295 25 Jul 14 peter 435   AC_MSG_RESULT([no])
3295 25 Jul 14 peter 436   # restore CXXFLAGS
3295 25 Jul 14 peter 437   CXXFLAGS=$yat_save_CXXFLAGS
3295 25 Jul 14 peter 438 ], [ # IF-FAILED
3295 25 Jul 14 peter 439   AC_MSG_RESULT([yes])
3295 25 Jul 14 peter 440   CXXFLAGS=$yat_save_CXXFLAGS
3295 25 Jul 14 peter 441   YAT_CXX_ADD_FLAG([CXXFLAGS], [-Wno-unsequenced])
3295 25 Jul 14 peter 442 ])
3295 25 Jul 14 peter 443
2739 07 Jun 12 peter 444 AC_CONFIG_FILES([build_support/gen_yat_pc.sh],
2418 30 Jan 11 peter 445                 [chmod +x build_support/gen_yat_pc.sh])
945 07 Oct 07 peter 446 AC_CONFIG_FILES([Makefile
1438 26 Aug 08 peter 447      doc/first_page.doxygen
3036 03 Jun 13 peter 448                  test/defs.sh
2739 07 Jun 12 peter 449 ])
945 07 Oct 07 peter 450
2131 23 Dec 09 peter 451 AC_CONFIG_HEADERS([yat/utility/config_public.h])
3690 13 Sep 17 peter 452 canonical_abs_top_srcdir=`cd $srcdir && pwd -P`
3690 13 Sep 17 peter 453 AC_SUBST([canonical_abs_top_srcdir])
3690 13 Sep 17 peter 454 canonical_abs_top_builddir=`pwd -P`
3690 13 Sep 17 peter 455 AC_SUBST([canonical_abs_top_builddir])
3690 13 Sep 17 peter 456
2455 29 Mar 11 peter 457 # for the test suite
2455 29 Mar 11 peter 458 yat_abs_top_srcdir=`cd $srcdir && pwd`
2739 07 Jun 12 peter 459 AC_DEFINE_UNQUOTED([YAT_ABS_TOP_SRCDIR], ["$yat_abs_top_srcdir"],
2455 29 Mar 11 peter 460                    [Define to absolute path to top yat src dir])
1500 15 Sep 08 peter 461
2739 07 Jun 12 peter 462 # Reset flags
1892 13 Apr 09 peter 463 APR_RESTORE_THE_ENVIRONMENT(CPPFLAGS, YAT_)
1892 13 Apr 09 peter 464 APR_RESTORE_THE_ENVIRONMENT(CXXFLAGS, YAT_)
1892 13 Apr 09 peter 465 APR_RESTORE_THE_ENVIRONMENT(LDFLAGS, YAT_)
2009 20 Jun 09 peter 466 APR_RESTORE_THE_ENVIRONMENT(LIBS, YAT_)
1348 21 Jun 08 peter 467
3111 10 Nov 13 peter 468 # Set some variables useful when linking
3111 10 Nov 13 peter 469 AC_SUBST([YAT_STATIC_LIBS])
3111 10 Nov 13 peter 470
3111 10 Nov 13 peter 471 # libs used in libyat.la
3111 10 Nov 13 peter 472 yat_libyat_la_LIBADD="$YAT_LIBS"
3111 10 Nov 13 peter 473 # We avoid linking in cblas in libyat.la, to let users choose
3111 10 Nov 13 peter 474 # favourite cblas library at link time.
3111 10 Nov 13 peter 475 YAT_VAR_REMOVE([yat_libyat_la_LIBADD], [$YAT_CBLAS_LIB])
3111 10 Nov 13 peter 476 # we avoid linking in YAT_STATIC_LIBS as they have been detected to
3111 10 Nov 13 peter 477 # not be suitable libtool archive.
3111 10 Nov 13 peter 478 YAT_VAR_REMOVE([yat_libyat_la_LIBADD], [$YAT_STATIC_LIBS])
3111 10 Nov 13 peter 479 AC_SUBST([yat_libyat_la_LIBADD])
3111 10 Nov 13 peter 480
3111 10 Nov 13 peter 481 # Primary LIBS are same as linked into libyat.la excluding LIBM
3111 10 Nov 13 peter 482 YAT_PRIMARY_LIBS=$yat_libyat_la_LIBADD
3085 19 Sep 13 peter 483 YAT_VAR_REMOVE([YAT_PRIMARY_LIBS], [$LIBM])
1914 24 Apr 09 peter 484 AC_SUBST(YAT_PRIMARY_LIBS)
3111 10 Nov 13 peter 485
3111 10 Nov 13 peter 486 # Assign LIBS variables for yat.pc
3366 03 Dec 14 peter 487 YAT_PC_LIBS_PRIVATE=$YAT_LIBS
3366 03 Dec 14 peter 488
3111 10 Nov 13 peter 489 # Dependency to GSL is noted via 'Requires' field
3366 03 Dec 14 peter 490 YAT_VAR_REMOVE([YAT_PC_LIBS_PRIVATE], [-lgsl $YAT_CBLAS_LIB $LIBM])
3966 11 Aug 20 peter 491 YAT_PC_REQUIRES="gsl >= YAT_REQUIRED_GSL_VERSION"
3366 03 Dec 14 peter 492
3883 24 Mar 20 peter 493 # ignore this whole htslib thing if --without-htslib
3400 30 Mar 15 peter 494 AS_IF([test x$with_htslib != x"no"], [
3365 01 Dec 14 peter 495   # htslib comes with a pc file, so we can require htslib in yat.pc
3883 24 Mar 20 peter 496   YAT_VAR_REMOVE([YAT_PC_LIBS_PRIVATE], [$HTS_LIBS -lz])
3966 11 Aug 20 peter 497   YAT_PC_REQUIRES="$YAT_PC_REQUIRES htslib"
3365 01 Dec 14 peter 498 ])
3366 03 Dec 14 peter 499
3366 03 Dec 14 peter 500 # Having libs declared as LIBS.private in yat.pc assumes that libs
3366 03 Dec 14 peter 501 # have been linked into libyat. Therefore for each lib check if it is
3366 03 Dec 14 peter 502 # mentioned in $yat_libyat_la_LIBADD, and if it's not move
3366 03 Dec 14 peter 503 # lib to LIBS variable.
3366 03 Dec 14 peter 504 for lib in $YAT_PC_LIBS_PRIVATE; do
3366 03 Dec 14 peter 505   YAT_SET_CONTAINS([$yat_libyat_la_LIBADD], [$lib], [
3366 03 Dec 14 peter 506   ], [
3366 03 Dec 14 peter 507     # move lib from $YAT_PC_LIBS_PRIVATE to $YAT_PC_LIBS
3966 11 Aug 20 peter 508     YAT_VAR_REMOVE([YAT_PC_LIBS_PRIVATE], [$lib])
3366 03 Dec 14 peter 509     YAT_PC_LIBS="$YAT_PC_LIBS $lib"
3366 03 Dec 14 peter 510   ])
3366 03 Dec 14 peter 511 done
3366 03 Dec 14 peter 512
3111 10 Nov 13 peter 513 AC_SUBST([YAT_PC_LIBS])
3365 01 Dec 14 peter 514 AC_SUBST([YAT_PC_REQUIRES])
3366 03 Dec 14 peter 515 AC_SUBST([YAT_PC_LIBS_PRIVATE])
3366 03 Dec 14 peter 516 AC_SUBST([YAT_PC_REQUIRES_PRIVATE])
3111 10 Nov 13 peter 517
3715 10 Nov 17 peter 518 # propagate some variables to 'yat-config'
3715 10 Nov 17 peter 519 AC_ARG_VAR([YAT_CONFIG_CPPFLAGS],
3715 10 Nov 17 peter 520            [Similar to CPPFLAGS but value is only propagated to yat-config])
3715 10 Nov 17 peter 521 AC_ARG_VAR([YAT_CONFIG_CXXFLAGS],
3715 10 Nov 17 peter 522            [Similar to CXXFLAGS but value is only propagated to yat-config])
3715 10 Nov 17 peter 523 AC_ARG_VAR([YAT_CONFIG_LDFLAGS],
3715 10 Nov 17 peter 524            [Similar to LDFLAGS but value is only propagated to yat-config])
3715 10 Nov 17 peter 525 AC_SUBST([YAT_CONFIG_CPPFLAGS])
3715 10 Nov 17 peter 526 AC_SUBST([YAT_CONFIG_CXXFLAGS])
3715 10 Nov 17 peter 527 AC_SUBST([YAT_CONFIG_LDFLAGS])
3715 10 Nov 17 peter 528
3716 10 Nov 17 peter 529 AC_SUBST([GXX])
1897 15 Apr 09 peter 530 AC_SUBST(YAT_LIBS)
1914 24 Apr 09 peter 531 AC_SUBST(YAT_CBLAS_LIB)
1897 15 Apr 09 peter 532
1892 13 Apr 09 peter 533 # set and AC_SUBST variables that are interpreted by Automake
2827 12 Sep 12 peter 534 AM_CPPFLAGS="$INTERNAL_CPPFLAGS $YAT_CPPFLAGS"
1892 13 Apr 09 peter 535 AM_CXXFLAGS="$INTERNAL_CXXFLAGS $YAT_CXXFLAGS"
1892 13 Apr 09 peter 536 AM_LDFLAGS="$INTERNAL_LDFLAGS $YAT_LDFLAGS"
1479 09 Sep 08 peter 537
1479 09 Sep 08 peter 538 AC_SUBST(AM_CPPFLAGS)
1479 09 Sep 08 peter 539 AC_SUBST(AM_CXXFLAGS)
1479 09 Sep 08 peter 540 AC_SUBST(AM_LDFLAGS)
3035 12 May 13 peter 541 AC_SUBST([enable_shared])
3035 12 May 13 peter 542 AC_SUBST([enable_static])
1479 09 Sep 08 peter 543
3110 09 Nov 13 peter 544 # Name of directory libtool put stuff int - needed for some tests
3110 09 Nov 13 peter 545 AC_SUBST([lt_cv_objdir])
3110 09 Nov 13 peter 546
4326 12 Mar 23 peter 547 YAT_AM_LOCAL([yat_am_local.am])
4326 12 Mar 23 peter 548 YAT_SVN_RELEASE([],
3246 28 May 14 peter 549   [$(YAT_MAJOR_VERSION).$(YAT_MINOR_VERSION)],
3246 28 May 14 peter 550   [libyat@frs.sourceforge.net:/home/frs/project/l/li/libyat],
4142 07 Feb 22 peter 551   [https://sourceforge.net/projects/libyat/files/$(distdir).tar.gz/files],
4142 07 Feb 22 peter 552   [https://dev.thep.lu.se/yat/browser/tags/$(VERSION)/NEWS])
1892 13 Apr 09 peter 553
3037 04 Jun 13 peter 554 # make shell tests work in VPATH builds
3037 04 Jun 13 peter 555 AC_CONFIG_LINKS([test/init.sh:test/init.sh])
3037 04 Jun 13 peter 556
2627 08 Nov 11 peter 557 # set some variable for final message
2627 08 Nov 11 peter 558 AS_CASE([$have_doxygen],
2627 08 Nov 11 peter 559         [yes], [doxygen_message=yes],
2627 08 Nov 11 peter 560         [no], [doxygen_message="no (doxygen not found)"],
2627 08 Nov 11 peter 561         [old], [doxygen_message="no (\`$DOXYGEN' too old)"],
3823 16 Jul 19 peter 562         [notwanted], [doxygen_message="no"],
2627 08 Nov 11 peter 563         [AC_MSG_WARN([unexpected value \$have_doxygen: '$have_doxygen'])
2627 08 Nov 11 peter 564          AS_BOX([Report this to ]AC_PACKAGE_BUGREPORT)
2627 08 Nov 11 peter 565         ])
2627 08 Nov 11 peter 566
2627 08 Nov 11 peter 567 yat_gslcblas_message=
2627 08 Nov 11 peter 568 AS_IF([test "x$YAT_CBLAS_LIB" = "x-lgslcblas"], [
2627 08 Nov 11 peter 569 yat_gslcblas_message='
2627 08 Nov 11 peter 570   GSL CBLAS found. This is a reference implementation only.
2627 08 Nov 11 peter 571   Consider using hardware optimized BLAS.
2627 08 Nov 11 peter 572   ATLAS (http://math-atlas.sourceforge.net/) provides an
2627 08 Nov 11 peter 573   optimized BLAS library. It is supported by yat!
2627 08 Nov 11 peter 574 '
2627 08 Nov 11 peter 575 ])
2627 08 Nov 11 peter 576
1060 08 Feb 08 jari 577 # Create output.
1060 08 Feb 08 jari 578 AC_OUTPUT
1060 08 Feb 08 jari 579
2627 08 Nov 11 peter 580
694 25 Oct 06 peter 581 # Some more messages.
2627 08 Nov 11 peter 582 AC_MSG_RESULT([
2627 08 Nov 11 peter 583 yat is configured as follows:
2627 08 Nov 11 peter 584
2627 08 Nov 11 peter 585   Build Shared Library: $enable_shared
2627 08 Nov 11 peter 586   Build Static Library: $enable_static
2627 08 Nov 11 peter 587   Build Documentation:  $doxygen_message
3400 30 Mar 15 peter 588   With Bam Support:     $with_htslib
2627 08 Nov 11 peter 589
2627 08 Nov 11 peter 590 Options used to compile and link:
2627 08 Nov 11 peter 591   VERSION     = $VERSION
2627 08 Nov 11 peter 592   CXX         = $CXX
2627 08 Nov 11 peter 593   CPPFLAGS    = $CPPFLAGS
2628 08 Nov 11 peter 594   YAT_CPPFLAGS= $AM_CPPFLAGS
2627 08 Nov 11 peter 595   CXXFLAGS    = $CXXFLAGS
2628 08 Nov 11 peter 596   YAT_CXXFLAGS= $AM_CXXFLAGS
2627 08 Nov 11 peter 597   LD          = $LD
2627 08 Nov 11 peter 598   LDFLAGS     = $LDFLAGS
2628 08 Nov 11 peter 599   YAT_LDFLAGS = $AM_LDFLAGS
2627 08 Nov 11 peter 600   LIBS        = $LIBS
2627 08 Nov 11 peter 601   YAT_LIBS    = $YAT_LIBS
2627 08 Nov 11 peter 602 ${yat_gslcblas_message}dnl
2627 08 Nov 11 peter 603 ----------------------------------------------------------------
2627 08 Nov 11 peter 604 Now type `make'. dnl
2627 08 Nov 11 peter 605 ])