For the impatient ================= The latest source code can be downloaded from github and compiled using: git clone --recurse-submodules https://github.com/samtools/htslib.git git clone https://github.com/samtools/bcftools.git cd bcftools # The following is optional: # autoheader && autoconf && ./configure --enable-libgsl --enable-perl-filters make IMPORTANT: --- In order to use the BCFtools plugins, this environment variable must be set and point to the correct location export BCFTOOLS_PLUGINS=/path/to/bcftools/plugins --- Note that if also the polysomy command or support for Perl filtering should be included, the compilation instructions differ, see Optional Compilation with GSL and Optional Compilation with Perl below. System Requirements =================== BCFtools and HTSlib depend on the following libraries: BCFtools: zlib gsl (optional, for the 'polysomy' command) libperl (optional, to support filters using perl syntax) HTSlib: zlib libbz2 liblzma libcurl (optional but strongly recommended, for network access) libcrypto (optional, for Amazon S3 support; not needed on MacOS) Building them requires development files to be installed on the build machine; note that MacOS and some Linux distributions package these separately from the library itself. See the "System Specific Details" below for guidance on how to install these on a variety of systems. The bzip2 and liblzma dependencies can be removed if full CRAM support is not needed - see HTSlib's INSTALL file for details. To build BCFtools, you will need: GNU make C compiler (e.g. gcc or clang) In addition, building the configure script requires: autoheader autoconf Running the configure script uses awk, along with a number of standard UNIX tools (cat, cp, grep, mv, rm, sed, among others). Almost all installations will have these already. Running the test harness (make test) uses: bash perl Building Configure ================== This step is only needed if configure.ac has been changed, or if configure does not exist (for example, when building from a git clone). The configure script and config.h.in can be built by running: autoheader autoconf If you have a full GNU autotools install, you can alternatively run: autoreconf Warnings like "AC_CONFIG_SUBDIRS: you should use literals" can be ignored or suppressed using 'autoconf -Wno-syntax'. Compilation =========== 'cd' to the bcftools directory containing the package's source and type: ./configure make If installing from a release (as opposed to from GitHub), the BCFtools release tarball contains a copy of HTSlib which will be used to build BCFtools. If you already have a system-installed HTSlib or another HTSlib that you would prefer to build against, you can arrange this by using the configure script's --with-htslib option. Use --with-htslib=DIR to point to an HTSlib source tree or installation in DIR (if the desired source tree has been configured to build in a separate build directory, DIR should refer to the build directory); or use --with-htslib=system to ignore any nearby HTSlib source tree and use only a system-installed HTSlib. When --with-htslib is not used, configure looks for an HTSlib source tree within or alongside the BCFtools source directory; if there are several likely candidates, you will have to use --with-htslib to choose one. When using make without running configure first, the directory ../htslib is used. Optional Compilation with Perl ============================== The '-i' and '-e' options can take external perl scripts for a more sophisticated filtering. This option can be enabled by supplying the --enable-perl-filters option to configure before running make: ./configure --enable-perl-filters Note that enabling this option changes the license from MIT to GPL because bcftools need to be built with perl -MExtUtils::Embed -e ccopts -e ldopts Note that when compiling on MacOS, the default options for linking with Perl provided by the system sometimes do not work. It was reported that removing the occurrence of -arch i386 from config.mk solved the problem. Optional Compilation with GSL ============================= The 'polysomy' command depends on the GNU Scientific Library (GSL) and is not enabled by default. In order to compile it, supply the --enable-libgsl option to configure before running make: ./configure --enable-libgsl The GNU Scientific Library depends on the cblas library. The configure script will look for both libcblas and libgslcblas, in that order. If you have more than one version of cblas installed and want to override its choice you can do this by using either --with-cblas=cblas or --with-cblas=gslcblas. Note that GSL is distributed under the GNU General Public License (GPL). When --enable-libgsl is used to compile bcftools, the resulting program will also be GPL licensed. If you want to distribute the program, you MUST do so under terms compatible with that license. A copy of the GPL is included in the LICENSE file, or can be downloaded from . In the default compilation mode the program is dual licensed and you may choose to be licensed under the terms of the MIT/Expat license or the GNU General Public License (GPL). Information on the GNU Scientific Library, including the rationale for its choice of license can be found at . Installation ============ Type 'make install' to install the bcftools executable and associated scripts and a manual page. The default is to install in /usr/local. This can be changed by using the configure script's --prefix option: ./configure --prefix=/path/to/install/dir The install target also understands DESTDIR and the other usual installation directory variables. The bgzip and tabix utilities are provided by HTSlib. If you have not also installed HTSlib separately, you may wish to install these utilities by hand by copying bcftools-1.x/htslib-1.x/{bgzip,tabix} to the same bin directory to which you have installed bcftools et al. System Specific Details ======================= Installing the prerequisites is system dependent and there is more than one correct way of satisfying these, including downloading them from source, compiling and installing them yourself. For people with super-user access, we provide an example set of commands below for installing the dependencies on a variety of operating system distributions. Note these are not specific recommendations on distribution, compiler or SSL implementation. It is assumed you already have the core set of packages for the given distribution - the lists may be incomplete if this is not the case. Intel Compiler -------------- At some optimisation levels the Intel compiler may use approximate floating point mathematics. We do not believe this to produce substantially erroneous results, but it can cause the test harness to fail due to minor fluctuations in the least significiant digits. If you wish to use icc with the test harness, it is recommended you use the "-fp-model precise" icc option. Debian / Ubuntu --------------- sudo apt-get update # Ensure the package list is up to date sudo apt-get install autoconf automake make gcc perl zlib1g-dev libbz2-dev liblzma-dev libcurl4-gnutls-dev libssl-dev libperl-dev libgsl0-dev Note: libcurl4-openssl-dev can be used as an alternative to libcurl4-gnutls-dev. RedHat / CentOS --------------- Note: To install gsl-devel, it may be necessary to enable the "crb" repository. dnf --enablerepo=crb install gsl-devel sudo yum install autoconf automake make gcc perl-Data-Dumper zlib-devel bzip2 bzip2-devel xz-devel curl-devel openssl-devel gsl-devel perl-ExtUtils-Embed Note: On some versions, Perl FindBin will need to be installed to make the tests work. sudo yum install perl-FindBin Alpine Linux ------------ Note: To install gsl-dev, it may be necessary to enable the "community" repository in /etc/apk/repositories. Note: some older Alpine versions use libressl-dev rather than openssl-dev. doas apk update # Ensure the package list is up to date doas apk add autoconf automake make gcc musl-dev perl bash zlib-dev bzip2-dev xz-dev curl-dev openssl-dev gsl-dev perl-dev OpenSUSE -------- sudo zypper install autoconf automake make gcc perl zlib-devel libbz2-devel xz-devel libcurl-devel libopenssl-devel gsl-devel MacOS, assuming Xcode is installed: ----- xz gsl (optional) Windows MSYS2/MINGW64 --------------------- The configure script must be used as without it the compilation will likely fail. Follow MSYS2 installation instructions at https://www.msys2.org/wiki/MSYS2-installation/ Then relaunch to MSYS2 shell using the "MSYS2 MinGW x64" executable. Once in that environment (check $MSYSTEM equals "MINGW64") install the compilers using pacman -S and the following package list: base-devel mingw-w64-x86_64-toolchain mingw-w64-x86_64-libdeflate mingw-w64-x86_64-zlib mingw-w64-x86_64-bzip2 mingw-w64-x86_64-xz mingw-w64-x86_64-curl mingw-w64-x86_64-autotools mingw-w64-x86_64-tools-git (The last is only needed for building libraries compatible with MSVC.)