README

Code
Comments
Other
Rev Date Author Line
2734 11 May 12 peter 1 $Id$
2 19 Feb 03 jari 2
1939 01 May 09 peter 3 = About yat =
573 06 Apr 06 jari 4
1939 01 May 09 peter 5 This directory contains the yat library. For an overview of the
1939 01 May 09 peter 6 project, visit
2733 11 May 12 peter 7
1939 01 May 09 peter 8     http://dev.thep.lu.se/yat
573 06 Apr 06 jari 9
1939 01 May 09 peter 10
1939 01 May 09 peter 11 = Configuring and building yat =
1939 01 May 09 peter 12
1262 08 Apr 08 jari 13  1. If you checked out this project from the subversion repository you
1262 08 Apr 08 jari 14     must run '`bootstrap`' to initialize the build system.
1262 08 Apr 08 jari 15  2. Issue '`./configure`' to create the Makefiles. Optionally run
1262 08 Apr 08 jari 16     configure with '`--enable-debug`', which will turn on debug
1262 08 Apr 08 jari 17     options.
1262 08 Apr 08 jari 18  3. Compile with '`make`'.
2213 12 Mar 10 peter 19  4. '`make doc`' will generate documentation.
2213 12 Mar 10 peter 20  5. Optionally do '`make check`' to run test programs.
1303 14 May 08 peter 21  6. Issue '`make install`' to install the package on your system,
1303 14 May 08 peter 22     documentation will not be installed if documentation was not
1939 01 May 09 peter 23     generated above. Default installation location is `/usr/local`;
1303 14 May 08 peter 24     this can be changed with
1303 14 May 08 peter 25     '`./configure --prefix=/dir/to/install/to`'.
2437 12 Mar 11 peter 26  7. Optionally do '`make installcheck`' to verify that intallation
2437 12 Mar 11 peter 27     completed correctly.
573 06 Apr 06 jari 28
1939 01 May 09 peter 29 The `configure` script has additional options; `./configure --help`
1939 01 May 09 peter 30 will offer you those choices or refer to Requirements below.
848 28 Apr 07 jari 31
3734 22 Apr 18 peter 32 = Compile Flag Variables =
3734 22 Apr 18 peter 33
3734 22 Apr 18 peter 34 Compile flags (`CPPFLAGS` (preprocessor), `CXXFLAGS` (compiler),
4252 18 Nov 22 peter 35 and `LDFLAGS` (linker)) can be set at via configure, e.g.:
3734 22 Apr 18 peter 36
3734 22 Apr 18 peter 37   #> ./configure CPPFLAGS=-I/my/local/path/include
3734 22 Apr 18 peter 38
3734 22 Apr 18 peter 39 This setting will be used both when building the source into libyat as
3734 22 Apr 18 peter 40 well as propagated into script `yat-config`. If you only want the
3734 22 Apr 18 peter 41 variable propagated to `yat-config`, you can instead set variables
3734 22 Apr 18 peter 42 with prefix `YAT_CONFIG_`:
3734 22 Apr 18 peter 43
3734 22 Apr 18 peter 44
3734 22 Apr 18 peter 45   #> ./configure YAT_CONFIG_CXXFLAGS=
3734 22 Apr 18 peter 46
3734 22 Apr 18 peter 47 Similarly, if you only want the variable used when building libyat,
3734 22 Apr 18 peter 48 and not propagated to output of `yat-config` or `pkg-config`, you can
3734 22 Apr 18 peter 49 use flags with prefix `INTERNAL_`:
3734 22 Apr 18 peter 50
3734 22 Apr 18 peter 51   #> ./configure INTERNAL_CXXFLAGS="-g 03"
3734 22 Apr 18 peter 52
1059 08 Feb 08 jari 53 = Requirements =
1059 08 Feb 08 jari 54
3939 16 Jul 20 peter 55 From version 0.18, yat needs a C++11 compliant compiler to build. In
3939 16 Jul 20 peter 56 addition, there are a few packages and programs required for compiling
3939 16 Jul 20 peter 57 yat and generate supporting material. The configure script will look
3939 16 Jul 20 peter 58 for required programs and report failure to meet the
3939 16 Jul 20 peter 59 requirements. Here we list some of the requirements, but omit required
3939 16 Jul 20 peter 60 standard utilities such as echo and sed since these are normally
3939 16 Jul 20 peter 61 available.
1059 08 Feb 08 jari 62
1262 08 Apr 08 jari 63 == Required packages ==
1059 08 Feb 08 jari 64
1262 08 Apr 08 jari 65 === GSL ===
1059 08 Feb 08 jari 66
1262 08 Apr 08 jari 67 GNU Scientific Library, [http://www.gnu.org/software/gsl/ GSL] version
4279 26 Jan 23 peter 68 2.2 or later. If you have GSL installed in a non-standard location,
2129 23 Dec 09 peter 69 `./configure --with-gsl=DIR` can be useful to provide the location of
2129 23 Dec 09 peter 70 GSL. The `gsl-config` script, which is used to retrieve needed
2129 23 Dec 09 peter 71 compiler and linker flags, is expected to be found in `DIR/bin/`. The
2129 23 Dec 09 peter 72 check for existing GSL can be turned off with option
2129 23 Dec 09 peter 73 `--without-gsl`. This can be useful, for example, if gsl-config is not
2129 23 Dec 09 peter 74 available at configure time but header file will be available at make
2129 23 Dec 09 peter 75 time.
1059 08 Feb 08 jari 76
1262 08 Apr 08 jari 77 === BLAS ===
1059 08 Feb 08 jari 78
1262 08 Apr 08 jari 79 A C implementation of Basic Linear Algebra Subprograms
1262 08 Apr 08 jari 80 ([http://www.netlib.org/blas BLAS]) is required. GSL comes with a
1262 08 Apr 08 jari 81 reference implementation, but you should consider getting a hardware
1262 08 Apr 08 jari 82 optimized implementation. ATLAS provides optimized BLAS (see below).
1059 08 Feb 08 jari 83
1939 01 May 09 peter 84 The `configure` script searches for many different BLAS libraries in a
2019 04 Aug 09 peter 85 specific order (for details refer to `m4/yat_cblas.m4`). If you want
2019 04 Aug 09 peter 86 to use a specific CBLAS library, `./configure --with-cblas=LIB` may be
2028 16 Aug 09 peter 87 useful. Note, however, that the chosen/detected CBLAS library is not
2028 16 Aug 09 peter 88 hard-coded into the installed libyat, but a user can choose a
2029 18 Aug 09 peter 89 different CBLAS when she links her application. A way to access which
2028 16 Aug 09 peter 90 CBLAS was detected during the configuration is to access the
2028 16 Aug 09 peter 91 yat-config script directly or via the autoconf macros included in the
2028 16 Aug 09 peter 92 distribution. If you do want to hard-code a choice of CBLAS into the
2028 16 Aug 09 peter 93 installed libyat, you may provide the appropriate value to LIBS. The
2028 16 Aug 09 peter 94 following line, for example:
1939 01 May 09 peter 95
2733 11 May 12 peter 96   #> ./configure LIBS=-lcblas
2028 16 Aug 09 peter 97
2410 13 Jan 11 peter 98 will hard-code the choice of -lcblas into libyat.
2028 16 Aug 09 peter 99
1325 24 May 08 peter 100 === Boost ===
1325 24 May 08 peter 101
4252 18 Nov 22 peter 102 [http://www.boost.org Boost] version 1.66 or later. If you have Boost
1939 01 May 09 peter 103 installed in a non-standard location, `./configure --with-boost=DIR`
1939 01 May 09 peter 104 can be useful to provide the location of Boost. Boost header files are
2786 22 Jul 12 peter 105 expected to be found in `DIR/include/` and boost libraries are
2916 19 Dec 12 peter 106 expected to be found in `DIR/lib/`. The `configure` script tries to
3763 19 Oct 18 peter 107 detect libraries `boost_thread`, `boost_thread` and
3763 19 Oct 18 peter 108 `boost_iostreams`. The name of a boost library typically depends on
3763 19 Oct 18 peter 109 its configuration (see boost's naming convention) and there may be
3763 19 Oct 18 peter 110 several versions/configurations of the same library installed. The
3763 19 Oct 18 peter 111 `configure` tries to pick one of the available libraries, wchih can be
3763 19 Oct 18 peter 112 overridden with `./configure --with-boost-thread=foo`, `configure
3763 19 Oct 18 peter 113 --with-boost-system=foo`, and `--with-boost-iostreams=foo`,
2916 19 Dec 12 peter 114 respectively. The check for boost can be turned off with
2916 19 Dec 12 peter 115 `--without-boost`.
1325 24 May 08 peter 116
1262 08 Apr 08 jari 117 === quiet nan ===
1059 08 Feb 08 jari 118
1262 08 Apr 08 jari 119 Quiet NaN's must be supported.
1059 08 Feb 08 jari 120
1353 23 Jun 08 peter 121 === infinity ===
1353 23 Jun 08 peter 122
1353 23 Jun 08 peter 123 infinity for type double must be supported.
1353 23 Jun 08 peter 124
1262 08 Apr 08 jari 125 == Optional packages ==
1059 08 Feb 08 jari 126
3492 23 May 16 peter 127 === HTSLIB and Samtools ===
2943 04 Jan 13 peter 128
3883 24 Mar 20 peter 129 In order to enable functionality related to bam files htslib
4276 25 Jan 23 peter 130 (http://www.htslib.org) version 1.10 (or newer) must be
4276 25 Jan 23 peter 131 available. Header file <htslib/sam.h> is required as well as
4276 25 Jan 23 peter 132 'libhts'. If you have header files installed outside compiler's search
4276 25 Jan 23 peter 133 path (in e.g. '/path/to/htslib/sam.h', you can help the compiler with
4276 25 Jan 23 peter 134 `./configure CPPFLAGS=-I/path/to`. If library is installed outside
4276 25 Jan 23 peter 135 linker's search path, in e.g. `<libdir>`, you can run `./configure
4276 25 Jan 23 peter 136 LDFLAGS=-L<lib dir>`. You can build yat without bam support by running
4276 25 Jan 23 peter 137 `./configure --without-htslib`.
2943 04 Jan 13 peter 138
3500 26 May 16 peter 139 The samtools program (version 1.2 or newer) is needed for some tests
3483 17 Mar 16 peter 140 related to bam functionality. If samtools is not found by configure,
3483 17 Mar 16 peter 141 these tests will be skipped. If you have samtools available outside
3483 17 Mar 16 peter 142 PATH, you can help configure to find it with `./configure
3483 17 Mar 16 peter 143 SAMTOOLS=/path/to/samtools`.
3364 25 Nov 14 peter 144
3763 19 Oct 18 peter 145 The bcftools program is needed for some tests. If bcftools is not
3763 19 Oct 18 peter 146 found by configure, these tests will be skipped. If you have bcftools
3763 19 Oct 18 peter 147 available outside your PATH, you can help configure to find it with
3763 19 Oct 18 peter 148 `./configure BCFTOOLS=/path/to/bcftools`.
3763 19 Oct 18 peter 149
2943 04 Jan 13 peter 150 === ZLIB ===
2943 04 Jan 13 peter 151
2943 04 Jan 13 peter 152 Zlib available from http://www.zlib.net/ is required to build samtools
2943 04 Jan 13 peter 153 and consequently needed to build yat too, unless you turn off samtools
2943 04 Jan 13 peter 154 support (please refer to samtools section above). Header file `zlib.h`
2943 04 Jan 13 peter 155 and library libz are required. If installed in an unconventional
2943 04 Jan 13 peter 156 location you can help the compiler/linker with `CPPFLAGS=-I<include
2943 04 Jan 13 peter 157 dir>` and `LDFLAGS=-L<lib dir>`, respectively.
2943 04 Jan 13 peter 158
1262 08 Apr 08 jari 159 === ATLAS ===
1262 08 Apr 08 jari 160
1059 08 Feb 08 jari 161 GSL supplies a reference implementation of BLAS. You may want to
1262 08 Apr 08 jari 162 consider using hardware optimized BLAS. The
1262 08 Apr 08 jari 163 [http://math-atlas.sourceforge.net/ ATLAS] software provides an
1262 08 Apr 08 jari 164 automatic hardware optimized BLAS library.
1059 08 Feb 08 jari 165
1059 08 Feb 08 jari 166 The detection of ATLAS is supported by the yat configuration script
1059 08 Feb 08 jari 167 but in many cases the ATLAS libraries are installed in
1262 08 Apr 08 jari 168 non-conventional directory locations. As an example, on Fedora 8,
1262 08 Apr 08 jari 169 ATLAS libraries are
1059 08 Feb 08 jari 170 located in /usr/lib/atlas or /usr/lib64/atlas depending on your
1059 08 Feb 08 jari 171 hardware architecture. If you have ATLAS installed and the configure
1059 08 Feb 08 jari 172 script fails to locate it, try to add the location to the atlas
1078 12 Feb 08 jari 173 libraries when running configure:
1059 08 Feb 08 jari 174
2733 11 May 12 peter 175   #> ./configure LDFLAGS="-L/usr/lib64/atlas"
1059 08 Feb 08 jari 176
3939 16 Jul 20 peter 177 === C++11 Compliant Compiler ===
3581 19 Jan 17 peter 178
3939 16 Jul 20 peter 179 The configure script will test that the compiler is in C++11 mode and
3939 16 Jul 20 peter 180 supports features such as rvalue and std::atomic. If you run configure
3939 16 Jul 20 peter 181 with option --enable-cxx11
3581 19 Jan 17 peter 182
3602 22 Jan 17 peter 183   #> ./configure --enable-cxx11
3581 19 Jan 17 peter 184
3939 16 Jul 20 peter 185 and the compiler is not in C++11 mode, the configure script will try
3939 16 Jul 20 peter 186 different options such as '-std=cxx11' to turn on support for C++11
3939 16 Jul 20 peter 187 features.
3581 19 Jan 17 peter 188
1262 08 Apr 08 jari 189 === Doxygen ===
1059 08 Feb 08 jari 190
1442 27 Aug 08 peter 191 [http://www.doxygen.org/ Doxygen] 1.5 (or newer) is required for
2557 23 Aug 11 peter 192 generation of the API documentation. If doxygen application is
3823 16 Jul 19 peter 193 missing, generation of API documentation is disabled. You can turn off
3823 16 Jul 19 peter 194 doxygen usage with
1262 08 Apr 08 jari 195
3823 16 Jul 19 peter 196   #> ./configure DOXYGEN=no
3823 16 Jul 19 peter 197
1272 09 Apr 08 peter 198 = Documentation =
1262 08 Apr 08 jari 199
2488 27 May 11 peter 200 The API documentation for the latest release is available in HTML and
2488 27 May 11 peter 201 can be found through http://dev.thep.lu.se/yat. If you wish to build a
2488 27 May 11 peter 202 local copy, issue `make doc` and you will find the documents in
2870 12 Nov 12 peter 203 directory `doc/html/`.
1262 08 Apr 08 jari 204
1368 10 Jul 08 peter 205 = Developers =
1368 10 Jul 08 peter 206
2733 11 May 12 peter 207 See file README.developer for developer specific information.
1368 10 Jul 08 peter 208
2080 17 Oct 09 peter 209 = Mac OS X =
2080 17 Oct 09 peter 210
2080 17 Oct 09 peter 211 On Mac OS X you can create a universal library, a library that works
2080 17 Oct 09 peter 212 on multiple systems. You can do this by specifying multiple `-arch`
2080 17 Oct 09 peter 213 options to the compiler (but not to the preprocessor):
2080 17 Oct 09 peter 214
2080 17 Oct 09 peter 215  #> ./configure CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
2080 17 Oct 09 peter 216                 CXXCPP="g++ -E" --disable-dependency-tracking
2080 17 Oct 09 peter 217
2080 17 Oct 09 peter 218 This will produce a universal yat library with 4 architectures. If
2080 17 Oct 09 peter 219 your OS X does not support both Power-PC and Intel-based processors,
2080 17 Oct 09 peter 220 you can omit these architectures. Also, required libraries, GSL and
2080 17 Oct 09 peter 221 CBLAS, need to be available as universal libraries with desired
2080 17 Oct 09 peter 222 architectures.
2080 17 Oct 09 peter 223
1262 08 Apr 08 jari 224 ----------------------------------------------------------------------
1262 08 Apr 08 jari 225 {{{
2119 12 Dec 09 peter 226 Copyright (C) 2003 Jari Häkkinen, Peter Johansson
2119 12 Dec 09 peter 227 Copyright (C) 2004 Jari Häkkinen
2119 12 Dec 09 peter 228 Copyright (C) 2006, 2007, 2008 Jari Häkkinen, Peter Johansson
4359 23 Aug 23 peter 229 Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2022, 2023 Peter Johansson
1262 08 Apr 08 jari 230
1437 25 Aug 08 peter 231 This file is part of yat library, http://dev.thep.lu.se/yat
1262 08 Apr 08 jari 232
1262 08 Apr 08 jari 233 The yat library is free software; you can redistribute it and/or
1262 08 Apr 08 jari 234 modify it under the terms of the GNU General Public License as
1486 09 Sep 08 jari 235 published by the Free Software Foundation; either version 3 of the
1262 08 Apr 08 jari 236 License, or (at your option) any later version.
1262 08 Apr 08 jari 237
1262 08 Apr 08 jari 238 The yat library is distributed in the hope that it will be useful, but
1262 08 Apr 08 jari 239 WITHOUT ANY WARRANTY; without even the implied warranty of
1262 08 Apr 08 jari 240 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
1262 08 Apr 08 jari 241 General Public License for more details.
1262 08 Apr 08 jari 242
1262 08 Apr 08 jari 243 You should have received a copy of the GNU General Public License
1487 10 Sep 08 jari 244 along with yat. If not, see <http://www.gnu.org/licenses/>.
1262 08 Apr 08 jari 245 }}}