[med-svn] [seqan2] 01/01: New upstream version 2.3.2.001platform-issues10-6f85721+dfsg

Michael Crusoe misterc-guest at moszumanska.debian.org
Thu Jan 4 13:07:52 UTC 2018


This is an automated email from the git hooks/post-receive script.

misterc-guest pushed a commit to annotated tag upstream/2.3.2.001platform-issues10-6f85721+dfsg
in repository seqan2.

commit 49551449f5f2fd10f41a70446d23aec9a6e84932
Author: Michael R. Crusoe <michael.crusoe at gmail.com>
Date:   Wed Jan 3 09:11:34 2018 -0800

    New upstream version 2.3.2.001platform-issues10-6f85721+dfsg
---
 apps/alf/CMakeLists.txt                            |   2 +-
 apps/alf/alf.cpp                                   |   2 +-
 apps/bs_tools/CMakeLists.txt                       |   2 +-
 apps/dfi/CMakeLists.txt                            |   2 +-
 apps/fiona/CMakeLists.txt                          |   2 +-
 apps/fiona/compute_gain.cpp                        |   6 +-
 apps/fx_tools/CMakeLists.txt                       |   2 +-
 apps/gustaf/CMakeLists.txt                         |   2 +-
 apps/insegt/CMakeLists.txt                         |   2 +-
 apps/mason2/CMakeLists.txt                         |   2 +-
 apps/mason2/mason_genome.cpp                       |   2 +-
 apps/mason2/mason_variator.cpp                     |  10 +-
 apps/micro_razers/CMakeLists.txt                   |   2 +-
 apps/ngs_roi/CMakeLists.txt                        |   4 +-
 apps/pair_align/CMakeLists.txt                     |   2 +-
 apps/param_chooser/CMakeLists.txt                  |   2 +-
 apps/rabema/CMakeLists.txt                         |   4 +-
 apps/rabema/rabema_build_gold_standard.cpp         |   2 +-
 apps/rabema/rabema_evaluate.cpp                    |   4 +-
 apps/razers/CMakeLists.txt                         |   2 +-
 apps/razers3/CMakeLists.txt                        |   2 +-
 apps/rep_sep/CMakeLists.txt                        |   2 +-
 apps/sak/CMakeLists.txt                            |   4 +-
 apps/sam2matrix/CMakeLists.txt                     |   2 +-
 apps/samcat/CMakeLists.txt                         |   2 +-
 apps/searchjoin/CMakeLists.txt                     |   2 +-
 apps/searchjoin/db.h                               |   8 +-
 apps/seqan_tcoffee/CMakeLists.txt                  |   2 +-
 apps/seqcons2/CMakeLists.txt                       |   2 +-
 apps/sgip/CMakeLists.txt                           |   2 +-
 apps/snp_store/CMakeLists.txt                      |   2 +-
 apps/splazers/CMakeLists.txt                       |   2 +-
 apps/stellar/CMakeLists.txt                        |   2 +-
 apps/stellar/stellar.cpp                           |   2 +-
 apps/tree_recon/CMakeLists.txt                     |   2 +-
 apps/yara/CMakeLists.txt                           |   2 +-
 dox/CMakeLists.txt                                 |   2 +-
 .../align/local_alignment_waterman_eggert_impl.h   |  39 ++---
 include/seqan/arg_parse/arg_parse_argument.h       |  36 +----
 include/seqan/arg_parse/tool_doc.h                 |   7 -
 include/seqan/bam_io/bam_alignment_record_util.h   |   2 +-
 include/seqan/index/index_base.h                   |   2 +-
 include/seqan/index/index_fm_compressed_sa.h       |   6 +-
 include/seqan/index/index_fm_lf_table.h            |   2 +-
 .../seqan/index/index_fm_rank_dictionary_base.h    |   2 +-
 .../seqan/index/index_fm_rank_dictionary_levels.h  |   6 +-
 .../seqan/index/index_fm_rank_dictionary_naive.h   |   2 +-
 include/seqan/index/index_qgram.h                  |   2 +-
 include/seqan/modifier/modifier_padding.h          |  51 +-----
 include/seqan/platform.h                           |   4 +-
 include/seqan/seeds/seeds_global_chaining.h        | 162 ++++++++-----------
 include/seqan/stream/iter_stream.h                 | 178 +++++++++------------
 manual/source/Infrastructure/Use/Install.rst       |  42 ++---
 tests/align/test_alignment_algorithms_local.h      |  47 ------
 .../align/test_alignment_algorithms_local_banded.h |  32 ----
 tests/arg_parse/test_arg_parse.cpp                 |   1 -
 tests/arg_parse/test_arg_parse_argument.h          |  28 ----
 tests/modifier/test_modifier.cpp                   |   3 +-
 tests/modifier/test_modifier_string_padding.h      |  24 ---
 tests/seeds/test_seeds_global_chaining.cpp         |  26 ---
 util/cmake/SeqAnBuildSystem.cmake                  |  25 +--
 util/pkgconfig/seqan.pc.in                         |   4 +-
 util/skel/app_template/CMakeLists.txt              |   2 +-
 63 files changed, 257 insertions(+), 578 deletions(-)

diff --git a/apps/alf/CMakeLists.txt b/apps/alf/CMakeLists.txt
index 20b98cd..e198d89 100644
--- a/apps/alf/CMakeLists.txt
+++ b/apps/alf/CMakeLists.txt
@@ -56,7 +56,7 @@ endif (NOT SEQAN_PREFIX_SHARE_DOC)
 
 # Install alf in ${PREFIX}/bin directory
 install (TARGETS alf
-         DESTINATION ${CMAKE_INSTALL_BINDIR})
+         DESTINATION bin)
 
 # Install non-binary files for the package to "." for app builds and
 # ${PREFIX}/share/doc/alf for SeqAn release builds.
diff --git a/apps/alf/alf.cpp b/apps/alf/alf.cpp
index b4b45d8..813a377 100644
--- a/apps/alf/alf.cpp
+++ b/apps/alf/alf.cpp
@@ -74,7 +74,7 @@ int main(int argc, const char * argv[])
     // Options Section: Input / Output parameters.
     addSection(parser, "Input / Output");
     addOption(parser, seqan::ArgParseOption("i", "input-file", "Name of the multi-FASTA input file.", seqan::ArgParseArgument::INPUT_FILE));
-    setValidValues(parser, "input-file", seqan::SeqFileIn::getFileExtensions());
+    setValidValues(parser, "input-file", "fa fasta");
     setRequired(parser, "input-file");
     addOption(parser, seqan::ArgParseOption("o", "output-file", "Name of the file to which the tab-delimtied matrix with pairwise scores will be written to.  Default is to write to stdout.", seqan::ArgParseArgument::OUTPUT_FILE));
     setValidValues(parser, "output-file", "alf.tsv");
diff --git a/apps/bs_tools/CMakeLists.txt b/apps/bs_tools/CMakeLists.txt
index ebe3ab8..8732293 100644
--- a/apps/bs_tools/CMakeLists.txt
+++ b/apps/bs_tools/CMakeLists.txt
@@ -99,7 +99,7 @@ endif (NOT SEQAN_PREFIX_SHARE_DOC)
 
 # Install bs_tools in ${PREFIX}/bin directory
 install (TARGETS bisar casbar four2three
-         DESTINATION ${CMAKE_INSTALL_BINDIR})
+         DESTINATION bin)
 
 # Install non-binary files for the package to "." for app builds and
 # ${PREFIX}/share/doc/bs_tools for SeqAn release builds.
diff --git a/apps/dfi/CMakeLists.txt b/apps/dfi/CMakeLists.txt
index 1b9274a..ee9e7c6 100644
--- a/apps/dfi/CMakeLists.txt
+++ b/apps/dfi/CMakeLists.txt
@@ -56,7 +56,7 @@ endif (NOT SEQAN_PREFIX_SHARE_DOC)
 
 # Install dfi in ${PREFIX}/bin directory
 install (TARGETS dfi
-         DESTINATION ${CMAKE_INSTALL_BINDIR})
+         DESTINATION bin)
 
 # Install non-binary files for the package to "." for app builds and
 # ${PREFIX}/share/doc/dfi for SeqAn release builds.
diff --git a/apps/fiona/CMakeLists.txt b/apps/fiona/CMakeLists.txt
index 9e68130..babd267 100644
--- a/apps/fiona/CMakeLists.txt
+++ b/apps/fiona/CMakeLists.txt
@@ -83,7 +83,7 @@ if (NOT SEQAN_PREFIX_SHARE_DOC)
 endif (NOT SEQAN_PREFIX_SHARE_DOC)
 
 # Install fiona in ${PREFIX}/bin directory
-install (TARGETS fiona compute_gain DESTINATION ${CMAKE_INSTALL_BINDIR})
+install (TARGETS fiona compute_gain DESTINATION bin)
 
 # Install non-binary files for the package to "." for app builds and
 # ${PREFIX}/share/doc/fiona for SeqAn release builds.
diff --git a/apps/fiona/compute_gain.cpp b/apps/fiona/compute_gain.cpp
index 26876a8..523daa5 100644
--- a/apps/fiona/compute_gain.cpp
+++ b/apps/fiona/compute_gain.cpp
@@ -798,7 +798,7 @@ parseCommandLine(Options & options, int argc, char const ** argv)
     addOption(parser, seqan::ArgParseOption("g", "genome", "Genome file.", seqan::ArgParseOption::INPUT_FILE,
                                             "GENOME.fa"));
     setRequired(parser, "genome");
-    setValidValues(parser, "genome", seqan::SeqFileIn::getFileExtensions());
+    setValidValues(parser, "genome", "fa fasta");
 
     addOption(parser, seqan::ArgParseOption("", "pre", "Pre-correction SAM file.", seqan::ArgParseOption::INPUT_FILE,
                                             "PRE.{sam,bam}"));
@@ -1028,10 +1028,10 @@ int main(int argc, char const ** argv)
                     stop = atEnd(inPostBam);
                 else
                     stop = atEnd(inPostFastq);
-
+                
                 if (stop)
                     break;
-
+                
                 // Read next record into chunk.
                 try
                 {
diff --git a/apps/fx_tools/CMakeLists.txt b/apps/fx_tools/CMakeLists.txt
index 09a265d..b0e9d7e 100644
--- a/apps/fx_tools/CMakeLists.txt
+++ b/apps/fx_tools/CMakeLists.txt
@@ -55,7 +55,7 @@ endif (NOT SEQAN_PREFIX_SHARE_DOC)
 
 # Install fx_tools in ${PREFIX}/bin directory
 install (TARGETS fx_bam_coverage
-         DESTINATION ${CMAKE_INSTALL_BINDIR})
+         DESTINATION bin)
 
 # Install non-binary files for the package to "." for app builds and
 # ${PREFIX}/share/doc/fx_tools for SeqAn release builds.
diff --git a/apps/gustaf/CMakeLists.txt b/apps/gustaf/CMakeLists.txt
index a1b28ca..d8ae684 100644
--- a/apps/gustaf/CMakeLists.txt
+++ b/apps/gustaf/CMakeLists.txt
@@ -77,7 +77,7 @@ endif (NOT SEQAN_PREFIX_SHARE_DOC)
 
 # Install gustaf in ${PREFIX}/bin directory
 install (TARGETS gustaf gustaf_mate_joining
-         DESTINATION ${CMAKE_INSTALL_BINDIR})
+         DESTINATION bin)
 
 # Install non-binary files for the package to "." for app builds and
 # ${PREFIX}/share/doc/gustaf for SeqAn release builds.
diff --git a/apps/insegt/CMakeLists.txt b/apps/insegt/CMakeLists.txt
index d78484a..6adda64 100644
--- a/apps/insegt/CMakeLists.txt
+++ b/apps/insegt/CMakeLists.txt
@@ -61,7 +61,7 @@ endif (NOT SEQAN_PREFIX_SHARE_DOC)
 
 # Install insegt in ${PREFIX}/bin directory
 install (TARGETS insegt
-         DESTINATION ${CMAKE_INSTALL_BINDIR})
+         DESTINATION bin)
 
 # Install non-binary files for the package to "." for app builds and
 # ${PREFIX}/share/doc/insegt for SeqAn release builds.
diff --git a/apps/mason2/CMakeLists.txt b/apps/mason2/CMakeLists.txt
index 57dc904..eaf4345 100644
--- a/apps/mason2/CMakeLists.txt
+++ b/apps/mason2/CMakeLists.txt
@@ -143,7 +143,7 @@ install (TARGETS mason_frag_sequencing
                  mason_simulator
                  mason_splicing
                  mason_variator
-         DESTINATION ${CMAKE_INSTALL_BINDIR})
+         DESTINATION bin)
 
 # Install non-binary files for the package to "." for app builds and
 # ${PREFIX}/share/doc/mason2 for SeqAn release builds.
diff --git a/apps/mason2/mason_genome.cpp b/apps/mason2/mason_genome.cpp
index a41cf4d..76383cc 100644
--- a/apps/mason2/mason_genome.cpp
+++ b/apps/mason2/mason_genome.cpp
@@ -115,7 +115,7 @@ parseCommandLine(MasonGenomeOptions & options, int argc, char const ** argv)
     addSection(parser, "Output Options");
     addOption(parser, seqan::ArgParseOption("o", "out-file", "Output file.",
                                             seqan::ArgParseOption::OUTPUT_FILE, "FILE"));
-    setValidValues(parser, "out-file", seqan::SeqFileOut::getFileExtensions());
+    setValidValues(parser, "out-file", "fa fasta");
     setRequired(parser, "out-file");
 
     // Add Examples Section.
diff --git a/apps/mason2/mason_variator.cpp b/apps/mason2/mason_variator.cpp
index e75ffc2..cc27c96 100644
--- a/apps/mason2/mason_variator.cpp
+++ b/apps/mason2/mason_variator.cpp
@@ -710,7 +710,7 @@ public:
     {
         if (isNearN(seq, pos))
             return false;  // No SNP next to an N.
-
+        
         // We simulate an alternative base for each haplotype.
 
         seqan::Dna5 from = seq[pos];
@@ -1575,7 +1575,7 @@ public:
 
         vcfRecord.rID = svRecord.rId;
         vcfRecord.beginPos = svRecord.pos - 1;
-        vcfRecord.id = variants.getVariantName(variants.posToIdx(Variants::SV, svIdx));
+        vcfRecord.id = variants.getVariantName(variants.posToIdx(Variants::SV, svIdx)); 
         appendValue(vcfRecord.ref, contig[vcfRecord.beginPos]);
         vcfRecord.alt = "<INV>";
         vcfRecord.filter = "PASS";
@@ -1613,7 +1613,7 @@ public:
         seqan::VcfRecord vcfRecord;
         vcfRecord.rID = svRecord.rId;
         vcfRecord.beginPos = svRecord.pos - 1;
-        vcfRecord.id = variants.getVariantName(variants.posToIdx(Variants::SV, svIdx));
+        vcfRecord.id = variants.getVariantName(variants.posToIdx(Variants::SV, svIdx)); 
         vcfRecord.filter = "PASS";
         std::stringstream ss;
         ss << "SVTYPE=DUP;SVLEN=" << svRecord.size << ";END=" << svRecord.pos + svRecord.size
@@ -1814,12 +1814,12 @@ parseCommandLine(MasonVariatorOptions & options, int argc, char const ** argv)
     addOption(parser, seqan::ArgParseOption("", "meth-fasta-in", "Path to load original methylation levels from.  "
                                             "Methylation levels are simulated if omitted.",
                                             seqan::ArgParseOption::INPUT_FILE, "FILE"));
-    setValidValues(parser, "meth-fasta-in", seqan::SeqFileIn::getFileExtensions());
+    setValidValues(parser, "meth-fasta-in", "fa fasta");
 
     addOption(parser, seqan::ArgParseOption("", "meth-fasta-out", "Path to write methylation levels to as FASTA.  "
                                             "Only written if \\fB-of\\fP/\\fB--out-fasta\\fP is given.",
                                             seqan::ArgParseOption::OUTPUT_FILE, "FILE"));
-    setValidValues(parser, "meth-fasta-out", seqan::SeqFileOut::getFileExtensions());
+    setValidValues(parser, "meth-fasta-out", "fa fasta");
 
 
     // ----------------------------------------------------------------------
diff --git a/apps/micro_razers/CMakeLists.txt b/apps/micro_razers/CMakeLists.txt
index 4449ac4..5e2dd4f 100644
--- a/apps/micro_razers/CMakeLists.txt
+++ b/apps/micro_razers/CMakeLists.txt
@@ -62,7 +62,7 @@ endif (NOT SEQAN_PREFIX_SHARE_DOC)
 
 # Install micro_razers in ${PREFIX}/bin directory
 install (TARGETS micro_razers
-         DESTINATION ${CMAKE_INSTALL_BINDIR})
+         DESTINATION bin)
 
 # Install non-binary files for the package to "." for app builds and
 # ${PREFIX}/share/doc/micro_razers for SeqAn release builds.
diff --git a/apps/ngs_roi/CMakeLists.txt b/apps/ngs_roi/CMakeLists.txt
index 3633699..2ee38bd 100644
--- a/apps/ngs_roi/CMakeLists.txt
+++ b/apps/ngs_roi/CMakeLists.txt
@@ -77,7 +77,7 @@ endif (NOT SEQAN_PREFIX_SHARE_DOC)
 install (TARGETS bam2roi
                  roi_feature_projection
                  roi_plot_thumbnails
-         DESTINATION ${CMAKE_INSTALL_BINDIR})
+         DESTINATION bin)
 
 # Install helper scripts into ${PREFIX}/bin directory.
 install (FILES # Scripts for sorting.
@@ -88,7 +88,7 @@ install (FILES # Scripts for sorting.
                  tool_shed/roi_plot_9.sh
                  tool_shed/plot.awk
                  tool_shed/ps2pswLinks.gawk
-         DESTINATION ${CMAKE_INSTALL_BINDIR})
+         DESTINATION bin)
 
 # Install non-binary files for the package to "." for app builds and
 # ${PREFIX}/share/doc/ngs_roi for SeqAn release builds.
diff --git a/apps/pair_align/CMakeLists.txt b/apps/pair_align/CMakeLists.txt
index 7f1009a..70f9e5c 100644
--- a/apps/pair_align/CMakeLists.txt
+++ b/apps/pair_align/CMakeLists.txt
@@ -60,7 +60,7 @@ endif (NOT SEQAN_PREFIX_SHARE_DOC)
 
 # Install pair_align in ${PREFIX}/bin directory
 install (TARGETS pair_align
-         DESTINATION ${CMAKE_INSTALL_BINDIR})
+         DESTINATION bin)
 
 # Install non-binary files for the package to "." for app builds and
 # ${PREFIX}/share/doc/pair_align for SeqAn release builds.
diff --git a/apps/param_chooser/CMakeLists.txt b/apps/param_chooser/CMakeLists.txt
index 005ec4c..ef4cfeb 100644
--- a/apps/param_chooser/CMakeLists.txt
+++ b/apps/param_chooser/CMakeLists.txt
@@ -62,7 +62,7 @@ endif (NOT SEQAN_PREFIX_SHARE_DOC)
 
 # Install param_chooser in ${PREFIX}/bin directory
 install (TARGETS param_chooser
-         DESTINATION ${CMAKE_INSTALL_BINDIR})
+         DESTINATION bin)
 
 # Install non-binary files for the package to "." for app builds and
 # ${PREFIX}/share/doc/param_chooser for SeqAn release builds.
diff --git a/apps/rabema/CMakeLists.txt b/apps/rabema/CMakeLists.txt
index 96d322a..723e225 100644
--- a/apps/rabema/CMakeLists.txt
+++ b/apps/rabema/CMakeLists.txt
@@ -91,11 +91,11 @@ endif (NOT SEQAN_PREFIX_SHARE_DOC)
 install (TARGETS rabema_prepare_sam
                  rabema_build_gold_standard
                  rabema_evaluate
-         DESTINATION ${CMAKE_INSTALL_BINDIR})
+         DESTINATION bin)
 
 # Install rabema in /bin directory
 install (TARGETS rabema_prepare_sam rabema_build_gold_standard rabema_evaluate
-        DESTINATION ${CMAKE_INSTALL_BINDIR})
+        DESTINATION bin)
 
 # Install non-binary files for the package to "." for app builds and
 # ${PREFIX}/share/doc/pair_align for SeqAn release builds.
diff --git a/apps/rabema/rabema_build_gold_standard.cpp b/apps/rabema/rabema_build_gold_standard.cpp
index 1edbe30..08ac1fa 100644
--- a/apps/rabema/rabema_build_gold_standard.cpp
+++ b/apps/rabema/rabema_build_gold_standard.cpp
@@ -1003,7 +1003,7 @@ parseCommandLine(BuildGoldStandardOptions & options, int argc, char const ** arg
     addOption(parser, seqan::ArgParseOption("r", "reference", "Path to load reference FASTA from.",
                                             seqan::ArgParseArgument::INPUT_FILE, "FASTA"));
     setRequired(parser, "reference", true);
-    setValidValues(parser, "reference", seqan::SeqFileIn::getFileExtensions());
+    setValidValues(parser, "reference", "fa fasta");
     addOption(parser, seqan::ArgParseOption("b", "in-bam", "Path to load the \"perfect\" SAM/BAM file from.",
                                             seqan::ArgParseArgument::INPUT_FILE, "BAM"));
     setValidValues(parser, "in-bam", BamFileIn::getFileExtensions());
diff --git a/apps/rabema/rabema_evaluate.cpp b/apps/rabema/rabema_evaluate.cpp
index 67b3bf9..89c2707 100644
--- a/apps/rabema/rabema_evaluate.cpp
+++ b/apps/rabema/rabema_evaluate.cpp
@@ -1064,7 +1064,7 @@ parseCommandLine(RabemaEvaluationOptions & options, int argc, char const ** argv
     // setRequired(parser, "out-gsi", true);
     addOption(parser, seqan::ArgParseOption("r", "reference", "Path to load reference FASTA from.",
                                             seqan::ArgParseArgument::INPUT_FILE, "FASTA"));
-    setValidValues(parser, "reference", seqan::SeqFileIn::getFileExtensions());
+    setValidValues(parser, "reference", "fa fasta");
     setRequired(parser, "reference", true);
     addOption(parser, seqan::ArgParseOption("g", "in-gsi",
                                             "Path to load gold standard intervals from. If compressed using gzip, "
@@ -1229,7 +1229,7 @@ parseCommandLine(RabemaEvaluationOptions & options, int argc, char const ** argv
 
     getOptionValue(options.checkSorting, parser, "dont-check-sorting");
     options.checkSorting = !options.checkSorting;
-
+    
     options.showMissedIntervals = isSet(parser, "show-missed-intervals");
     options.showSuperflousIntervals = isSet(parser, "show-invalid-hits");
     options.showAdditionalIntervals = isSet(parser, "show-additional-hits");
diff --git a/apps/razers/CMakeLists.txt b/apps/razers/CMakeLists.txt
index 8b49881..be52d54 100644
--- a/apps/razers/CMakeLists.txt
+++ b/apps/razers/CMakeLists.txt
@@ -66,7 +66,7 @@ endif (NOT SEQAN_PREFIX_SHARE_DOC)
 
 # Install razers in ${PREFIX}/bin directory
 install (TARGETS razers
-         DESTINATION ${CMAKE_INSTALL_BINDIR})
+         DESTINATION bin)
 
 # Install non-binary files for the package to "." for app builds and
 # ${PREFIX}/share/doc/razers for SeqAn release builds.
diff --git a/apps/razers3/CMakeLists.txt b/apps/razers3/CMakeLists.txt
index 9ec8468..0eb5157 100644
--- a/apps/razers3/CMakeLists.txt
+++ b/apps/razers3/CMakeLists.txt
@@ -92,7 +92,7 @@ endif (NOT SEQAN_PREFIX_SHARE_DOC)
 
 # Install razers3 in ${PREFIX}/bin directory
 install (TARGETS razers3
-         DESTINATION ${CMAKE_INSTALL_BINDIR})
+         DESTINATION bin)
 
 # Install non-binary files for the package to "." for app builds and
 # ${PREFIX}/share/doc/razers3 for SeqAn release builds.
diff --git a/apps/rep_sep/CMakeLists.txt b/apps/rep_sep/CMakeLists.txt
index 2e11fe6..c8b6312 100644
--- a/apps/rep_sep/CMakeLists.txt
+++ b/apps/rep_sep/CMakeLists.txt
@@ -64,7 +64,7 @@ endif (NOT SEQAN_PREFIX_SHARE_DOC)
 
 # Install rep_sep in ${PREFIX}/bin directory
 install (TARGETS rep_sep
-         DESTINATION ${CMAKE_INSTALL_BINDIR})
+         DESTINATION bin)
 
 # Install non-binary files for the package to "." for app builds and
 # ${PREFIX}/share/doc/rep_sep for SeqAn release builds.
diff --git a/apps/sak/CMakeLists.txt b/apps/sak/CMakeLists.txt
index c5e9f5b..3687181 100644
--- a/apps/sak/CMakeLists.txt
+++ b/apps/sak/CMakeLists.txt
@@ -68,7 +68,7 @@ endif (NOT SEQAN_PREFIX_SHARE_DOC)
 
 # Install sak in ${PREFIX}/bin directory
 install (TARGETS sak
-         DESTINATION ${CMAKE_INSTALL_BINDIR})
+         DESTINATION bin)
 
 # Install non-binary files for the package to "." for app builds and
 # ${PREFIX}/share/doc/sak for SeqAn release builds.
@@ -77,7 +77,7 @@ install (FILES LICENSE
                ${CMAKE_CURRENT_BINARY_DIR}/README.sak.txt
          DESTINATION ${SEQAN_PREFIX_SHARE_DOC})
 install (FILES ${CMAKE_CURRENT_BINARY_DIR}/sak.1
-         DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
+         DESTINATION ${SEQAN_PREFIX_SHARE_DOC}/man)
 
 # ----------------------------------------------------------------------------
 # App Test
diff --git a/apps/sam2matrix/CMakeLists.txt b/apps/sam2matrix/CMakeLists.txt
index 3ea10b4..e0d60ad 100644
--- a/apps/sam2matrix/CMakeLists.txt
+++ b/apps/sam2matrix/CMakeLists.txt
@@ -56,7 +56,7 @@ endif (NOT SEQAN_PREFIX_SHARE_DOC)
 
 # Install sam2matrix in ${PREFIX}/bin directory
 install (TARGETS sam2matrix
-         DESTINATION ${CMAKE_INSTALL_BINDIR})
+         DESTINATION bin)
 
 # Install non-binary files for the package to "." for app builds and
 # ${PREFIX}/share/doc/sam2matrix for SeqAn release builds.
diff --git a/apps/samcat/CMakeLists.txt b/apps/samcat/CMakeLists.txt
index 7c1664a..1fada83 100644
--- a/apps/samcat/CMakeLists.txt
+++ b/apps/samcat/CMakeLists.txt
@@ -63,7 +63,7 @@ endif (NOT SEQAN_PREFIX_SHARE_DOC)
 
 # Install samcat in ${PREFIX}/bin directory
 install (TARGETS samcat
-         DESTINATION ${CMAKE_INSTALL_BINDIR})
+         DESTINATION bin)
 
 # Install non-binary files for the package to "." for app builds and
 # ${PREFIX}/share/doc/samcat for SeqAn release builds.
diff --git a/apps/searchjoin/CMakeLists.txt b/apps/searchjoin/CMakeLists.txt
index ceeaab4..576df51 100644
--- a/apps/searchjoin/CMakeLists.txt
+++ b/apps/searchjoin/CMakeLists.txt
@@ -66,7 +66,7 @@ endif (NOT SEQAN_PREFIX_SHARE_DOC)
 
 # Install searchjoin in ${PREFIX}/bin directory
 install (TARGETS s4_search s4_join
-         DESTINATION ${CMAKE_INSTALL_BINDIR})
+         DESTINATION bin)
 
 # Install non-binary files for the package to "." for app builds and
 # ${PREFIX}/share/doc/searchjoin for SeqAn release builds.
diff --git a/apps/searchjoin/db.h b/apps/searchjoin/db.h
index 8d5e503..bec0120 100644
--- a/apps/searchjoin/db.h
+++ b/apps/searchjoin/db.h
@@ -130,25 +130,25 @@ namespace seqan
 template <>
 struct Fibre<TDbDnaSaSmall, FibreSA>
 {
-    typedef String<Pair<unsigned int, unsigned char, BitPacked<24, 8> >, DefaultIndexStringSpec<TDbDnaSaSmall>::Type> Type;
+    typedef String<Pair<unsigned int, unsigned char, BitPacked<24, 8> >, StringSpec<TDbDnaSaSmall>::Type> Type;
 };
 
 template <>
 struct Fibre<TDbGeoSaSmall, FibreSA>
 {
-    typedef String<Pair<unsigned int, unsigned char, BitPacked<24, 8> >, DefaultIndexStringSpec<TDbGeoSaSmall>::Type> Type;
+    typedef String<Pair<unsigned int, unsigned char, BitPacked<24, 8> >, StringSpec<TDbGeoSaSmall>::Type> Type;
 };
 
 template <>
 struct Fibre<TDbDnaSaHuge, FibreSA>
 {
-    typedef String<Pair<unsigned int, unsigned char, Pack>, DefaultIndexStringSpec<TDbDnaSaHuge>::Type> Type;
+    typedef String<Pair<unsigned int, unsigned char, Pack>, StringSpec<TDbDnaSaHuge>::Type> Type;
 };
 
 template <>
 struct Fibre<TDbGeoSaHuge, FibreSA>
 {
-    typedef String<Pair<unsigned int, unsigned char, Pack>, DefaultIndexStringSpec<TDbDnaSaHuge>::Type> Type;
+    typedef String<Pair<unsigned int, unsigned char, Pack>, StringSpec<TDbDnaSaHuge>::Type> Type;
 };
 }
 
diff --git a/apps/seqan_tcoffee/CMakeLists.txt b/apps/seqan_tcoffee/CMakeLists.txt
index c8df67c..66e85e2 100644
--- a/apps/seqan_tcoffee/CMakeLists.txt
+++ b/apps/seqan_tcoffee/CMakeLists.txt
@@ -56,7 +56,7 @@ endif (NOT SEQAN_PREFIX_SHARE_DOC)
 
 # Install seqan_tcoffee in ${PREFIX}/bin directory
 install (TARGETS seqan_tcoffee
-         DESTINATION ${CMAKE_INSTALL_BINDIR})
+         DESTINATION bin)
 
 # Install non-binary files for the package to "." for app builds and
 # ${PREFIX}/share/doc/seqan_tcoffee for SeqAn release builds.
diff --git a/apps/seqcons2/CMakeLists.txt b/apps/seqcons2/CMakeLists.txt
index 8edf724..8b5fcc2 100644
--- a/apps/seqcons2/CMakeLists.txt
+++ b/apps/seqcons2/CMakeLists.txt
@@ -62,7 +62,7 @@ endif (NOT SEQAN_PREFIX_SHARE_DOC)
 
 # Install seqcons2 in ${PREFIX}/bin directory
 install (TARGETS seqcons2
-         DESTINATION ${CMAKE_INSTALL_BINDIR})
+         DESTINATION bin)
 
 # Install non-binary files for the package to "." for app builds and
 # ${PREFIX}/share/doc/seqcons2 for SeqAn release builds.
diff --git a/apps/sgip/CMakeLists.txt b/apps/sgip/CMakeLists.txt
index 6f692c4..71a28ac 100755
--- a/apps/sgip/CMakeLists.txt
+++ b/apps/sgip/CMakeLists.txt
@@ -56,7 +56,7 @@ endif (NOT SEQAN_PREFIX_SHARE_DOC)
 
 # Install sgip in ${PREFIX}/bin directory
 install (TARGETS sgip
-         DESTINATION ${CMAKE_INSTALL_BINDIR})
+         DESTINATION bin)
 
 # Install non-binary files for the package to "." for app builds and
 # ${PREFIX}/share/doc/sgip for SeqAn release builds.
diff --git a/apps/snp_store/CMakeLists.txt b/apps/snp_store/CMakeLists.txt
index 797b248..e846ec3 100644
--- a/apps/snp_store/CMakeLists.txt
+++ b/apps/snp_store/CMakeLists.txt
@@ -71,7 +71,7 @@ endif (NOT SEQAN_PREFIX_SHARE_DOC)
 
 # Install snp_store in ${PREFIX}/bin directory
 install (TARGETS snp_store
-         DESTINATION ${CMAKE_INSTALL_BINDIR})
+         DESTINATION bin)
 
 # Install non-binary files for the package to "." for app builds and
 # ${PREFIX}/share/doc/snp_store for SeqAn release builds.
diff --git a/apps/splazers/CMakeLists.txt b/apps/splazers/CMakeLists.txt
index 35c8386..bb85d5d 100644
--- a/apps/splazers/CMakeLists.txt
+++ b/apps/splazers/CMakeLists.txt
@@ -68,7 +68,7 @@ endif (NOT SEQAN_PREFIX_SHARE_DOC)
 
 # Install splazers in ${PREFIX}/bin directory
 install (TARGETS splazers
-         DESTINATION ${CMAKE_INSTALL_BINDIR})
+         DESTINATION bin)
 
 # Install non-binary files for the package to "." for app builds and
 # ${PREFIX}/share/doc/splazers for SeqAn release builds.
diff --git a/apps/stellar/CMakeLists.txt b/apps/stellar/CMakeLists.txt
index f6e0499..a94d1bf 100644
--- a/apps/stellar/CMakeLists.txt
+++ b/apps/stellar/CMakeLists.txt
@@ -60,7 +60,7 @@ endif (NOT SEQAN_PREFIX_SHARE_DOC)
 
 # Install stellar in ${PREFIX}/bin directory
 install (TARGETS stellar
-         DESTINATION ${CMAKE_INSTALL_BINDIR})
+         DESTINATION bin)
 
 # Install non-binary files for the package to "." for app builds and
 # ${PREFIX}/share/doc/stellar for SeqAn release builds.
diff --git a/apps/stellar/stellar.cpp b/apps/stellar/stellar.cpp
index f253d47..604cd43 100644
--- a/apps/stellar/stellar.cpp
+++ b/apps/stellar/stellar.cpp
@@ -569,7 +569,7 @@ void _setParser(ArgumentParser & parser)
     setDefaultValue(parser, "o", "stellar.gff");
     addOption(parser, ArgParseOption("od", "outDisabled",
                                      "Name of output file for disabled query sequences.", ArgParseArgument::OUTPUT_FILE));
-    setValidValues(parser, "outDisabled", seqan::SeqFileOut::getFileExtensions());
+    setValidValues(parser, "outDisabled", "fa fasta");
     setDefaultValue(parser, "od", "stellar.disabled.fasta");
     addOption(parser, ArgParseOption("t", "no-rt", "Suppress printing running time."));
     hideOption(parser, "t");
diff --git a/apps/tree_recon/CMakeLists.txt b/apps/tree_recon/CMakeLists.txt
index 2b9a4fc..d39248f 100644
--- a/apps/tree_recon/CMakeLists.txt
+++ b/apps/tree_recon/CMakeLists.txt
@@ -56,7 +56,7 @@ endif (NOT SEQAN_PREFIX_SHARE_DOC)
 
 # Install tree_recon in ${PREFIX}/bin directory
 install (TARGETS tree_recon
-         DESTINATION ${CMAKE_INSTALL_BINDIR})
+         DESTINATION bin)
 
 # Install non-binary files for the package to "." for app builds and
 # ${PREFIX}/share/doc/tree_recon for SeqAn release builds.
diff --git a/apps/yara/CMakeLists.txt b/apps/yara/CMakeLists.txt
index fd14881..73ec26a 100644
--- a/apps/yara/CMakeLists.txt
+++ b/apps/yara/CMakeLists.txt
@@ -136,7 +136,7 @@ endif (NOT SEQAN_PREFIX_SHARE_DOC)
 
 # Install yara in ${PREFIX}/bin directory
 install (TARGETS yara_indexer yara_mapper
-         DESTINATION ${CMAKE_INSTALL_BINDIR})
+         DESTINATION bin)
 
 # Install non-binary files for the package to "." for app builds and
 # ${PREFIX}/share/doc/yara for SeqAn release builds.
diff --git a/dox/CMakeLists.txt b/dox/CMakeLists.txt
index e5e1189..74b4749 100644
--- a/dox/CMakeLists.txt
+++ b/dox/CMakeLists.txt
@@ -39,5 +39,5 @@ if (${SEQAN_BUILD_SYSTEM} MATCHES "SEQAN_RELEASE_LIBRARY") # includes SEQAN_RELE
         --out-dir ${CMAKE_BINARY_DIR}/dox/html)
 
     install (DIRECTORY ${CMAKE_BINARY_DIR}/dox/html
-             DESTINATION ${CMAKE_INSTALL_DOCDIR})
+             DESTINATION share/doc/seqan)
 endif ()
diff --git a/include/seqan/align/local_alignment_waterman_eggert_impl.h b/include/seqan/align/local_alignment_waterman_eggert_impl.h
index 741ca30..d80cfc3 100644
--- a/include/seqan/align/local_alignment_waterman_eggert_impl.h
+++ b/include/seqan/align/local_alignment_waterman_eggert_impl.h
@@ -188,12 +188,12 @@ TScoreValue getScore(LocalAlignmentFinder<TScoreValue> const & sw)
 // Function _smithWatermanGetMatrix()
 // ----------------------------------------------------------------------------
 
-template <typename TScoreValue, typename TScoreSpec, typename TStringH, typename TStringV>
+template <typename TScoreValue, typename TStringH, typename TStringV>
 TScoreValue
 _smithWatermanGetMatrix(LocalAlignmentFinder<TScoreValue> & sw,
                         TStringH const & strH,
                         TStringV const & strV,
-                        Score<TScoreValue, TScoreSpec> const & score_,
+                        Score<TScoreValue, Simple> const & score_,
                         TScoreValue cutoff)
 {
     // typedefs
@@ -220,6 +220,8 @@ _smithWatermanGetMatrix(LocalAlignmentFinder<TScoreValue> & sw,
     TStringIteratorH x = x_end;
     TStringIteratorV y;
 
+    TScoreValue score_match = scoreMatch(score_);
+    TScoreValue score_mismatch = scoreMismatch(score_);
     TScoreValue score_gap = scoreGapExtend(score_);
 
     TScoreValue h = 0;
@@ -261,15 +263,14 @@ _smithWatermanGetMatrix(LocalAlignmentFinder<TScoreValue> & sw,
             goPrevious(finger1, 0);
             goPrevious(finger2, 0);
 
-            TScoreValue currScore = score(score_, *x, cy);
             if (*x == cy)
             {
-                v = h + currScore;
+                v = h + score_match;
                 h = *finger2;
             }
             else
             {
-                TScoreValue s1 = h + currScore;
+                TScoreValue s1 = h + score_mismatch;
                 h = *finger2;
                 TScoreValue s2 = score_gap + ((h > v) ? h : v);
                 v = (s1 > s2) ? s1 : s2;
@@ -302,15 +303,12 @@ _smithWatermanGetMatrix(LocalAlignmentFinder<TScoreValue> & sw,
 // ----------------------------------------------------------------------------
 
 // declumping
-template <typename TScoreValue,
-          typename TSequenceH, typename TGapsSpecH,
-          typename TSequenceV, typename TGapsSpecV,
-          typename TScoreSpec>
+template <typename TScoreValue, typename TSequenceH, typename TGapsSpecH, typename TSequenceV, typename TGapsSpecV>
 void
 _smithWatermanDeclump(LocalAlignmentFinder<TScoreValue> & sw ,
                       Gaps<TSequenceH, TGapsSpecH> & gapsH,
                       Gaps<TSequenceV, TGapsSpecV> & gapsV,
-                      Score<TScoreValue, TScoreSpec> const & score_)
+                      Score<TScoreValue, Simple> const & score_)
 {
 //-------------------------------------------------------------------------
 //typedefs
@@ -366,6 +364,8 @@ _smithWatermanDeclump(LocalAlignmentFinder<TScoreValue> & sw ,
     TSequenceHIter x_stop = x_end;
 
 
+    TScoreValue score_match = scoreMatch(score_);
+    TScoreValue score_mismatch = scoreMismatch(score_);
     TScoreValue score_gap = scoreGapExtend(score_);
     TScoreValue h,v;
 
@@ -456,10 +456,9 @@ _smithWatermanDeclump(LocalAlignmentFinder<TScoreValue> & sw ,
         {
             goPrevious(finger0, 0);
             goPrevious(finger1, 0);
-            TScoreValue currScore = score(score_, *x, cy);
             if (*x == cy && !(sw.forbidden[position(finger0)]))
             {
-                v = h + currScore;
+                v = h + score_match;
                 h = *finger1;
             }
             else
@@ -475,7 +474,7 @@ _smithWatermanDeclump(LocalAlignmentFinder<TScoreValue> & sw ,
                 else
                 {
                     if(sw.forbidden[position(finger0)]) s1 = 0;
-                    else s1 = h + currScore;
+                    else s1 = h + score_mismatch;
                 }
 
                 h = *finger1;
@@ -523,16 +522,13 @@ _smithWatermanDeclump(LocalAlignmentFinder<TScoreValue> & sw ,
 // ----------------------------------------------------------------------------
 
 // Traceback.
-template <typename TSourceH, typename TGapsSpecH,
-          typename TSourceV, typename TGapsSpecV,
-          typename TScoreValue, typename TScoreSpec,
-          unsigned DIMENSION>
+template <typename TSourceH, typename TGapsSpecH, typename TSourceV, typename TGapsSpecV, typename TScoreValue, unsigned DIMENSION>
 typename Iterator<Matrix<TScoreValue, DIMENSION>, Standard >::Type
 _smithWatermanTrace(Gaps<TSourceH, TGapsSpecH> & gapsH,
                     Gaps<TSourceV, TGapsSpecV> & gapsV,
                     typename LocalAlignmentFinder<TScoreValue>::TBoolMatrix & fb_matrix,
                     Iter< Matrix<TScoreValue, DIMENSION>, PositionIterator > source_,
-                    Score<TScoreValue, TScoreSpec> const & scoring_) {
+                    Score<TScoreValue, Simple> const & scoring_) {
     //typedefs
     typedef Iter<Matrix<TScoreValue, DIMENSION>, PositionIterator > TMatrixIterator;
     typedef typename Position<Matrix<TScoreValue, DIMENSION> >::Type TPosition;
@@ -563,6 +559,7 @@ _smithWatermanTrace(Gaps<TSourceH, TGapsSpecH> & gapsH,
     TSourceIteratorV it_1 = iter(strV, pos_1, Standard());
     TSourceIteratorV it_1_end = end(strV);
 
+    TScoreValue score_mismatch = scoreMismatch(scoring_);
     TScoreValue score_gap = scoreGapExtend(scoring_);
 
     //-------------------------------------------------------------------------
@@ -589,7 +586,7 @@ _smithWatermanTrace(Gaps<TSourceH, TGapsSpecH> & gapsH,
                 d = 0;
             else{
                 goNext(it_, 1);
-                d = *it_ + score(scoring_, *it_0, *it_1);
+                d = *it_ + score_mismatch;
             }
 
             it_ = source_;
@@ -681,9 +678,7 @@ _getNextBestEndPosition(LocalAlignmentFinder<TScoreValue> & sw ,
 // ----------------------------------------------------------------------------
 
 // Wrapper that computes the matrix and does the backtracking for the best alignment
-template <typename TSourceH, typename TGapsSpecH,
-          typename TSourceV, typename TGapsSpecV,
-          typename TScoreValue, typename TScoreSpec>
+template <typename TSourceH, typename TGapsSpecH, typename TSourceV, typename TGapsSpecV, typename TScoreValue, typename TScoreSpec>
 TScoreValue
 _smithWaterman(Gaps<TSourceH, TGapsSpecH> & gapsH,
                Gaps<TSourceV, TGapsSpecV> & gapsV,
diff --git a/include/seqan/arg_parse/arg_parse_argument.h b/include/seqan/arg_parse/arg_parse_argument.h
index 03f473f..95ebf88 100644
--- a/include/seqan/arg_parse/arg_parse_argument.h
+++ b/include/seqan/arg_parse/arg_parse_argument.h
@@ -438,28 +438,6 @@ inline bool isOutputFileArgument(ArgParseArgument const & me)
 }
 
 // ----------------------------------------------------------------------------
-// Function isDirectoryArgument()
-// ----------------------------------------------------------------------------
-
-/*!
- * @fn ArgParseArgument#isDirectoryArgument
- * @headerfile <seqan/arg_parse.h>
- * @brief Returns whether the argument is a directorz argument.
- *
- * @signature bool isDirectoryArgument(arg);
- *
- * @param[in] arg The ArgParseArgument to query.
- *
- * @return bool <tt>true</tt> if it is a directory argument, <tt>false</tt> otherwise.
- */
-
-inline bool isDirectoryArgument(ArgParseArgument const & me)
-{
-    return me._argumentType == ArgParseArgument::INPUT_DIRECTORY ||
-           me._argumentType == ArgParseArgument::OUTPUT_DIRECTORY;
-}
-
-// ----------------------------------------------------------------------------
 // Function isOutputPrefixArgument()
 // ----------------------------------------------------------------------------
 
@@ -945,15 +923,7 @@ inline void _checkValue(ArgParseArgument const & me)
 {
     unsigned i = 0;
     for (std::vector<std::string>::const_iterator it = me.value.begin(); it != me.value.end(); ++it, ++i)
-    {
-        auto val = *it;
-
-        if (isDirectoryArgument(me)) // strip trailing slash for directories
-            if (val[length(val) - 1] == '/')
-                val.resize(length(val) - 1);
-
-        _checkValue(me, val, i);
-    }
+        _checkValue(me, *it, i);
 }
 
 // ----------------------------------------------------------------------------
@@ -1168,10 +1138,6 @@ inline std::string getFileExtension(ArgParseArgument const & me, unsigned pos =
     if (value.empty())
         return "";
 
-    if (isDirectoryArgument(me)) // strip trailing slash for directories
-        if (value[length(value) - 1] == '/')
-            value.resize(length(value) - 1);
-
     // If there is a list of valid values then we look for each of these in the path.
     if (!me.validValues.empty())
     {
diff --git a/include/seqan/arg_parse/tool_doc.h b/include/seqan/arg_parse/tool_doc.h
index 970c0e3..a19a983 100644
--- a/include/seqan/arg_parse/tool_doc.h
+++ b/include/seqan/arg_parse/tool_doc.h
@@ -444,13 +444,6 @@ public:
         std::fill_n(out, _layout.leftPadding, ' ');
         stream << _toText(listItem._term);
         unsigned pos = _layout.leftPadding + length(listItem._term);
-
-        if (empty(listItem._description))
-        {
-            stream << '\n';
-            return;
-        }
-
         if (pos + _layout.centerPadding > _layout.rightColumnTab)
         {
             stream << '\n';
diff --git a/include/seqan/bam_io/bam_alignment_record_util.h b/include/seqan/bam_io/bam_alignment_record_util.h
index 15d1ac1..1a7a02f 100644
--- a/include/seqan/bam_io/bam_alignment_record_util.h
+++ b/include/seqan/bam_io/bam_alignment_record_util.h
@@ -237,7 +237,7 @@ bamRecordToAlignment(Align<TSource, TSpec> & result, TReference & reference, Bam
     // TODO(holtgrew): Clipping better than copying infix? But is it generic?
     resize(rows(result), 2);
 
-    unsigned len = getAlignmentLengthInRef(record) - countPaddings(record.cigar);
+    unsigned len = record.beginPos + getAlignmentLengthInRef(record) - countPaddings(record.cigar);
 
     setSource(row(result, 0), reference);
     setClippedEndPosition(row(result, 0), record.beginPos + len);
diff --git a/include/seqan/index/index_base.h b/include/seqan/index/index_base.h
index 6aa2f5b..1cb2eb8 100644
--- a/include/seqan/index/index_base.h
+++ b/include/seqan/index/index_base.h
@@ -218,7 +218,7 @@ SEQAN_CONCEPT_REFINE(StringTrieConcept, (TIndex), (StringIndexConcept)) {};
  */
 
     template <typename TObject>
-    struct DefaultIndexStringSpec : StringSpec<TObject> {};
+    struct [[deprecated("Deprecated in favor of StringSpec.")]] DefaultIndexStringSpec : StringSpec<TObject> {};
 
 
 //////////////////////////////////////////////////////////////////////////////
diff --git a/include/seqan/index/index_fm_compressed_sa.h b/include/seqan/index/index_fm_compressed_sa.h
index 453fdd3..16fbc0c 100644
--- a/include/seqan/index/index_fm_compressed_sa.h
+++ b/include/seqan/index/index_fm_compressed_sa.h
@@ -84,8 +84,8 @@ typedef Tag<FibreSparseString_> const FibreSparseString;
 // ----------------------------------------------------------------------------
 
 template <typename TText, typename TSpec, typename TConfig>
-struct DefaultIndexStringSpec<CompressedSA<TText, TSpec, TConfig> > :
-    DefaultIndexStringSpec<TText> {};
+struct StringSpec<CompressedSA<TText, TSpec, TConfig> > :
+    StringSpec<TText> {};
 
 // ----------------------------------------------------------------------------
 // Metafunction Fibre
@@ -97,7 +97,7 @@ struct Fibre<CompressedSA<TText, TSpec, TConfig>, FibreSparseString>
     // TODO(esiragusa): Change SparseString spec to be SparseString<TValue, TSpec, TConfig>.
     typedef CompressedSA<TText, TSpec, TConfig>         TCSA;
     typedef typename SAValue<TText>::Type               TSAValue_;
-    typedef typename DefaultIndexStringSpec<TCSA>::Type TSASpec_;
+    typedef typename StringSpec<TCSA>::Type TSASpec_;
     typedef String<TSAValue_, TSASpec_>                 TSA_;
     typedef SparseString<TSA_, TConfig>                 Type;
 };
diff --git a/include/seqan/index/index_fm_lf_table.h b/include/seqan/index/index_fm_lf_table.h
index 64d8320..8da0a12 100644
--- a/include/seqan/index/index_fm_lf_table.h
+++ b/include/seqan/index/index_fm_lf_table.h
@@ -125,7 +125,7 @@ struct Fibre<LF<TText, TSpec, TConfig>, FibrePrefixSums>
 //    typedef Tuple<TSize_, ValueSize<TValue_>::VALUE>          Type;
 
     typedef typename Size<LF<TText, TSpec, TConfig> >::Type TSize_;
-    typedef typename DefaultIndexStringSpec<TText>::Type    TSpec_;
+    typedef typename StringSpec<TText>::Type                TSpec_;
     typedef String<TSize_,  TSpec_>                         Type;
 };
 
diff --git a/include/seqan/index/index_fm_rank_dictionary_base.h b/include/seqan/index/index_fm_rank_dictionary_base.h
index f45549c..6d8a5ba 100644
--- a/include/seqan/index/index_fm_rank_dictionary_base.h
+++ b/include/seqan/index/index_fm_rank_dictionary_base.h
@@ -121,7 +121,7 @@ struct RankDictionary;
 // ----------------------------------------------------------------------------
 
 template <typename TValue, template <typename, typename> class TRankDictionary, typename TSpec, typename TConfig>
-struct DefaultIndexStringSpec<RankDictionary<TValue, TRankDictionary<TSpec, TConfig> > >
+struct StringSpec<RankDictionary<TValue, TRankDictionary<TSpec, TConfig> > >
 {
     typedef typename TConfig::Fibre Type;
 };
diff --git a/include/seqan/index/index_fm_rank_dictionary_levels.h b/include/seqan/index/index_fm_rank_dictionary_levels.h
index 2eeeadd..8b0a446 100644
--- a/include/seqan/index/index_fm_rank_dictionary_levels.h
+++ b/include/seqan/index/index_fm_rank_dictionary_levels.h
@@ -354,7 +354,7 @@ struct Fibre<RankDictionary<TValue, Levels<TSpec, TConfig> >, FibreRanks>
 {
     typedef RankDictionary<TValue, Levels<TSpec, TConfig> >         TRankDictionary_;
     typedef RankDictionaryEntry_<TValue, Levels<TSpec, TConfig> >   TEntry_;
-    typedef typename DefaultIndexStringSpec<TRankDictionary_>::Type TFibreSpec_;
+    typedef typename StringSpec<TRankDictionary_>::Type             TFibreSpec_;
 
     typedef String<TEntry_, TFibreSpec_>                            Type;
 };
@@ -364,7 +364,7 @@ struct Fibre<RankDictionary<TValue, Levels<TSpec, TConfig> >, FibreSuperBlocks>
 {
     typedef RankDictionary<TValue, Levels<TSpec, TConfig> >                             TRankDictionary_;
     typedef typename RankDictionarySuperBlock_<TValue, Levels<TSpec, TConfig> >::Type   TSuperBlocks_;
-    typedef typename DefaultIndexStringSpec<TRankDictionary_>::Type                     TFibreSpec_;
+    typedef typename StringSpec<TRankDictionary_>::Type                                 TFibreSpec_;
 
     typedef String<TSuperBlocks_, TFibreSpec_>                                          Type;
 };
@@ -374,7 +374,7 @@ struct Fibre<RankDictionary<TValue, Levels<TSpec, TConfig> >, FibreUltraBlocks>
 {
     typedef RankDictionary<TValue, Levels<TSpec, TConfig> >                             TRankDictionary_;
     typedef typename RankDictionaryUltraBlock_<TValue, Levels<TSpec, TConfig> >::Type   TUltraBlocks_;
-    typedef typename DefaultIndexStringSpec<TRankDictionary_>::Type                     TFibreSpec_;
+    typedef typename StringSpec<TRankDictionary_>::Type                                 TFibreSpec_;
 
     typedef String<TUltraBlocks_, TFibreSpec_>                                          Type;
 };
diff --git a/include/seqan/index/index_fm_rank_dictionary_naive.h b/include/seqan/index/index_fm_rank_dictionary_naive.h
index dcd9ab0..1884c2e 100644
--- a/include/seqan/index/index_fm_rank_dictionary_naive.h
+++ b/include/seqan/index/index_fm_rank_dictionary_naive.h
@@ -61,7 +61,7 @@ struct Fibre<RankDictionary<TValue, Naive<TSpec, TConfig> >, FibreRanks>
 {
     typedef RankDictionary<TValue, Naive<TSpec, TConfig> >          TRankDictionary_;
     typedef typename Size<TRankDictionary_>::Type                   TSize_;
-    typedef typename DefaultIndexStringSpec<TRankDictionary_>::Type TFibreSpec_;
+    typedef typename StringSpec<TRankDictionary_>::Type TFibreSpec_;
 
     typedef String<TSize_, TFibreSpec_>                             Type;
 };
diff --git a/include/seqan/index/index_qgram.h b/include/seqan/index/index_qgram.h
index 7611d23..90ba86f 100644
--- a/include/seqan/index/index_qgram.h
+++ b/include/seqan/index/index_qgram.h
@@ -343,7 +343,7 @@ struct Fibre< Index<TText, TSpec>, FibreCounts> {
     typename Size< TText >::Type,
     typename Size< Index<TText, TSpec> >::Type
     >,
-    typename DefaultIndexStringSpec< Index<TText, TSpec> >::Type
+    typename StringSpec< Index<TText, TSpec> >::Type
     > Type;
 };
 
diff --git a/include/seqan/modifier/modifier_padding.h b/include/seqan/modifier/modifier_padding.h
index 88aad70..83bb805 100644
--- a/include/seqan/modifier/modifier_padding.h
+++ b/include/seqan/modifier/modifier_padding.h
@@ -165,7 +165,7 @@ struct DefaultIteratorSpec< ModifiedString<THost, ModPadding> >
  * @param [in,out] str  The modified string to be padded.
  * @param [in]     size The number of padded characters.
  * @param [in]     pad  The character to pad the sequence with.
- *
+ * 
  * @datarace Not thread-safe.
  */
 
@@ -211,51 +211,6 @@ length(ModifiedString<THost, ModPadding> const & me)
 }
 
 // ----------------------------------------------------------------------------
-// Function cargoValue()
-// ----------------------------------------------------------------------------
-
-template <typename THost>
-inline typename Reference<ModifiedString<THost, ModPadding> >::Type
-cargoValue(ModifiedString<THost, ModPadding> & me)
-{
-    return cargo(me)._paddedValue;
-}
-
-// NOTE(rrahn): The problem with the padding symbol is, that it is always stored as a member
-// of the modifier class. Hence, if the modifier is const all it's members are const.
-// Now, the cargo could be either defined mutable or, and this what we did right now, the
-// the const is cast-away. However, we use SFINAE to only apply this hack to the Host types,
-// for which this becomes relevant. That are Host types like the Segment class who copy pointer semantics, i.e.
-// the constness of the object is not propagated to the underlying source.
-
-// The default version, where Reference<THost const>::Type gives back a const reference.
-template <typename THost,
-          std::enable_if_t<std::is_same<std::remove_reference_t<
-                                            typename Reference<ModifiedString<THost, ModPadding>>::Type>,
-                                        std::add_const_t<std::remove_reference_t<
-                                            typename Reference<ModifiedString<THost, ModPadding>>::Type>>>::value,
-                           int> = 0>
-inline typename Reference<ModifiedString<THost, ModPadding> >::Type
-cargoValue(ModifiedString<THost, ModPadding> const & me)
-{
-    return cargo(me)._paddedValue;
-}
-
-// The version, where Reference<THost const>::Type gives back a non-const reference.
-template <typename THost,
-          std::enable_if_t<!std::is_same<std::remove_reference_t<
-                                            typename Reference<ModifiedString<THost, ModPadding>>::Type>,
-                                         std::add_const_t<std::remove_reference_t<
-                                            typename Reference<ModifiedString<THost, ModPadding>>::Type>>>::value,
-                           int> = 0>
-inline typename Reference<ModifiedString<THost, ModPadding> >::Type
-cargoValue(ModifiedString<THost, ModPadding> const & me)
-{
-    using TTargetType = typename Reference<ModifiedString<THost, ModPadding> >::Type;
-    return const_cast<TTargetType>(cargo(me)._paddedValue);
-}
-
-// ----------------------------------------------------------------------------
 // Function value()
 // ----------------------------------------------------------------------------
 
@@ -264,7 +219,7 @@ inline typename Reference<ModifiedString<THost, ModPadding> >::Type
 value(ModifiedString<THost, ModPadding> & me, TPosition const pos)
 {
     SEQAN_ASSERT_LT(pos, static_cast<TPosition>(length(me)));
-    return (SEQAN_LIKELY(pos < static_cast<TPosition>(length(host(me))))) ? host(me)[pos] : cargoValue(me);
+    return (SEQAN_LIKELY(pos < static_cast<TPosition>(length(host(me))))) ? host(me)[pos] : cargo(me)._paddedValue;
 }
 
 template <typename THost, typename TPosition>
@@ -272,7 +227,7 @@ inline typename Reference<ModifiedString<THost, ModPadding> const>::Type
 value(ModifiedString<THost, ModPadding> const & me, TPosition const pos)
 {
     SEQAN_ASSERT_LT(pos, static_cast<TPosition>(length(me)));
-        return (SEQAN_LIKELY(pos < static_cast<TPosition>(length(host(me))))) ? value(host(me), pos) : cargoValue(me);
+    return (SEQAN_LIKELY(pos < static_cast<TPosition>(length(host(me))))) ? value(host(me), pos) : cargo(me)._paddedValue;
 }
 
 // ----------------------------------------------------------------------------
diff --git a/include/seqan/platform.h b/include/seqan/platform.h
index e743c71..ab0c7ba 100644
--- a/include/seqan/platform.h
+++ b/include/seqan/platform.h
@@ -477,9 +477,9 @@ typedef int8_t __int8;     // nolint
     #include <endian.h>
 #endif // __GLIBC__
 
-#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__DragonFly__)
+#if defined(__FreeBSD__) || (defined(__has_include) && __has_include(<sys/endian.h>))
     #include <sys/endian.h>
-#endif // defined *BSD
+#endif // defined(__FreeBSD__)
 
 #ifndef SEQAN_BIG_ENDIAN
     #if (defined( _BYTE_ORDER  ) && ( _BYTE_ORDER   ==        _BIG_ENDIAN  )) || \
diff --git a/include/seqan/seeds/seeds_global_chaining.h b/include/seqan/seeds/seeds_global_chaining.h
index ee84323..5a6e867 100644
--- a/include/seqan/seeds/seeds_global_chaining.h
+++ b/include/seqan/seeds/seeds_global_chaining.h
@@ -62,23 +62,6 @@ typedef Tag<SparseChaining_> SparseChaining;
 // Functions
 // ===========================================================================
 
-template <typename TIntermediate>
-inline bool _checkScoreInvariant(TIntermediate const & list)
-{
-    if (list.empty())
-        return true;
-    auto it = list.begin();
-    auto score = it->i2;
-    ++it;
-    for (; it != list.end(); ++it)
-    {
-        if (score > it->i2)
-            return false;
-        score = it->i2;
-    }
-    return true;
-}
-
 /*!
  * @fn chainSeedsGlobally
  * @headerfile <seqan/seeds.h>
@@ -114,13 +97,6 @@ inline bool _checkScoreInvariant(TIntermediate const & list)
  */
 
 // TODO(holtgrew): Implement scored!
-// NOTE(rrahn): Some general notes regarding the sparse chaining algorithm by Gusfield.
-// From the text it is hard to follow the correct algorithm, as one usually expects the y-coordinates to
-// be increasing integers (sequence positions). However, the algorithm assumes the coordinates of the
-// rectangles to be placed in the fourth quadrant of the cartesian coordinate system (negative y-coordinates).
-// To adapt the algorithm for the positive sequence space we sort the y-coordinates in *L* in ascending order.
-// We then can use lower_bound and upper_bound on the sorted set to find the corresponding seed j as described in
-// the algorithm.
 template <typename TTargetContainer, typename TSeed, typename TSeedSetSpec>
 void
 chainSeedsGlobally(
@@ -177,8 +153,8 @@ chainSeedsGlobally(
     // -----------------------------------------------------------------------
     // Step 2: Build the chain.
     // -----------------------------------------------------------------------
-    // We build a list of "intermediate solutions" (referred to as *L* in the Gusfield book).
-    // Each such solution is represented by the triple (end position in dim1,
+    // We build a list of "intermediate solutions".  Each such
+    // solution is represented by the triple (end position in dim1,
     // value of best chain so far, last seed of the chain).
     typedef Triple<TPosition, TSize, unsigned> TIntermediateSolution;
     typedef std::multiset<TIntermediateSolution> TIntermediateSolutions;
@@ -186,99 +162,89 @@ chainSeedsGlobally(
 
     // For all interval points...
     TIntermediateSolutions intermediateSolutions;
-    for (TIntervalPointsIterator it_k = begin(intervalPoints), itEnd = end(intervalPoints); it_k != itEnd; ++it_k) {
+    for (TIntervalPointsIterator it = begin(intervalPoints), itEnd = end(intervalPoints); it != itEnd; ++it) {
         // The seed belonging ot the interval point is seed k.
-        TSeed const & seed_k = seeds[it_k->i3];
+        TSeed const & seedK = seeds[it->i3];
 
         // std::cout << "Processing interval point (" << it->i1 << ", " << it->i2 << ", " << it->i3 << ")" << std::endl;
-        if (it_k->i2) {  // Is is begin point.
-            // Find the closest seed j (in y-dimension) with an
-            // entry in L whose end coordinate is less or equal the begin position of k.
+        if (it->i2) {  // Is is begin point.
+            // Find the closest seed (in dimension 1) to seed k with an
+            // entry in intermediateSolutions whose end coordinate in
+            // dimension 1 is <= the begin coordinate in dimension 1
+            // of seedK.
             //
             // STL gives us upper_bound which returns a pointer to the
             // *first* one that compares greater than the reference
             // one.  Searching for the this one and decrementing the
             // result iterator gives the desired result.
-            TIntermediateSolution referenceSolution(beginPositionV(seed_k), std::numeric_limits<TSize>::max(), std::numeric_limits<unsigned>::max());
-            // std::cout << "    intermediateSolutions.upper_bound(" << beginPositionV(seed_k) << ")" << std::endl;
-            TIntermediateSolutionsIterator it_j = intermediateSolutions.upper_bound(referenceSolution);
-
-            // Special case not dealt with in the book: If L is empty or there is no chain
-            // that ends before k begins, simply continue with the next point in I.
-            if (intermediateSolutions.empty() || it_j == intermediateSolutions.begin())
-            {
-                continue;
+            TIntermediateSolution referenceSolution(beginPositionV(seedK), std::numeric_limits<TSize>::max(), std::numeric_limits<unsigned>::max());
+            // std::cout << "    intermediateSolutions.upper_bound(" << beginPositionV(seedK) << ")" << std::endl;
+            TIntermediateSolutionsIterator itJ = intermediateSolutions.upper_bound(referenceSolution);
+            if (itJ == intermediateSolutions.begin()) {
+                if (intermediateSolutions.size() > 0 &&
+                    intermediateSolutions.rbegin()->i1 <= beginPositionV(seedK)) {
+                    itJ = intermediateSolutions.end();
+                    --itJ;
+                } else {
+                    continue;
+                }
+            } else {
+                SEQAN_ASSERT_GT(intermediateSolutions.size(), 0u);  // TODO(holtgrew): Remove this assertion?
+                --itJ;
             }
-            // Go to the last value in L, i.e. l_j <= h_k.
-            --it_j;
-            // std::cout << "     --> " << seeds[it_j->i3] << std::endl;
+            // std::cout << "     --> " << seeds[itJ->i3] << std::endl;
             // Now, we have found such a seed j.
-            SEQAN_ASSERT_LEQ(endPositionV(seeds[it_j->i3]), beginPositionV(seed_k));
+            SEQAN_ASSERT_LEQ(endPositionV(seeds[itJ->i3]), endPositionV(seedK));
             // Update the intermediate solution value for k and set predecessor.
-            qualityOfChainEndingIn[it_k->i3] += it_j->i2;
+            qualityOfChainEndingIn[it->i3] += itJ->i2;
             // std::cout << "  UPDATE qualityOfChainEndingIn[" << it->i3 << "] == " << qualityOfChainEndingIn[it->i3] << std::endl;
-            predecessor[it_k->i3] = it_j->i3;
+            predecessor[it->i3] = itJ->i3;
             // std::cout << "         predecessor[" << it->i3 << "] == " << itJ->i3 << std::endl;
         } else {  // Is end point.
-            // Search for the first triple j in L with l_j >= l_k.
-            // Or to put it in differently, find the first chain that ends
-            // left and below the chain that ends in k. These are other possible solutions,
-            // that either result in a better score or must be deleted as the score of the chain ending in k
-            // is bigger. Hence, every other seed that could connect to both j and k, prefers the one with the higher
-            // score.
+            // Search for the first triple in intermediateSolutions
+            // where the end coordinate in dimension 1 is >= end
+            // coordinate in dimension 1 for seed k.  The corresponding
+            // seed is seed j.
             //
-            // We can use the lower_bound, which gives the first triple j such that l_j >= l_k
-            SEQAN_ASSERT_GT(endPositionV(seed_k), 0u);
-            TIntermediateSolution referenceSolution(endPositionV(seed_k), 0, std::numeric_limits<unsigned>::max());
-            TIntermediateSolutionsIterator it_j = intermediateSolutions.lower_bound(referenceSolution);
-
-            // If there was a valid solution in L...
-            if (it_j != intermediateSolutions.end())
-            {
+            // We work with upper_bound here which gives us the first
+            // value that is > so we have to work around this to get
+            // >= again...
+            SEQAN_ASSERT_GT(endPositionV(seedK), 0u);
+            TIntermediateSolution referenceSolution(endPositionV(seedK), 0, std::numeric_limits<unsigned>::max());
+            TIntermediateSolutionsIterator itSol = intermediateSolutions.upper_bound(referenceSolution);
+            if (itSol == intermediateSolutions.end()) {
+                // None found.  Insert a new triple for seed k.
+                TIntermediateSolution sol(endPositionV(seedK), qualityOfChainEndingIn[it->i3], it->i3);
+                // std::cout << "  INSERT (" << sol.i1 << ", " << sol.i2 << ", " << sol.i3 << ") " << __LINE__ << std::endl;
+                intermediateSolutions.insert(sol);
+            } else {
                 // Found this intermediate solution.
-                SEQAN_ASSERT_GEQ(it_j->i1, endPositionV(seed_k));
-                TSeed const & seed_j = seeds[it_j->i3];
-                // ... start a new chain at k if the vertical end of k is
-                // above the vertical end of the chain ending in j or if
-                // both k and j end at the same vertical position, while
-                // the score of the chain ending in k is bigger than the
-                // score of the chain ending in j.
-                if (endPositionV(seed_j) > endPositionV(seed_k) ||
-                    (endPositionV(seed_j) == endPositionV(seed_k) && qualityOfChainEndingIn[it_k->i3] > it_j->i2))
-                {
-                    TIntermediateSolution sol(endPositionV(seed_k), qualityOfChainEndingIn[it_k->i3], it_k->i3);
+                SEQAN_ASSERT_GEQ(itSol->i1, endPositionV(seedK));
+                TSeed const & seedJ = seeds[itSol->i3];
+                // Possibly start a new chain at k if the end1 is
+                // before the end1 of the chain ending in j or they
+                // end at the same coordinate in dim1 but k already
+                // has a higher quality than the whole chaing ending
+                // at j.
+                if (endPositionV(seedJ) > endPositionV(seedK) ||
+                    (endPositionV(seedJ) == endPositionV(seedK) && qualityOfChainEndingIn[it->i3] > itSol->i2)) {
+                    TIntermediateSolution sol(endPositionV(seedK), qualityOfChainEndingIn[it->i3], it->i3);
                     // std::cout << "  INSERT (" << sol.i1 << ", " << sol.i2 << ", " << sol.i3 << ")" << __LINE__  << std::endl;
                     intermediateSolutions.insert(sol);
+                }
+            }
 
-                    // Delete all intermediate solutions where end1 >= end1 of k and have a lower score than k
-                    // to ensure that the invariant of V(j) >= V(j'), with j' <= j holds.
-                    // Roughly then, there is no chain ending in a seed below the seed_k, that has a lower score
-                    // than the chain ending in seed_k. Thus the last value in `intermediateSolutions` will
-                    // always point to the optimal chain.
-                    TIntermediateSolutionsIterator itDel = intermediateSolutions.upper_bound(referenceSolution);
-                    TIntermediateSolutionsIterator itDelEnd = intermediateSolutions.end();
-                    while (itDel != itDelEnd)
-                    {
-                        TIntermediateSolutionsIterator ptr = itDel;
-                        ++itDel;
-                        if (qualityOfChainEndingIn[it_k->i3] > ptr->i2)
-                        {
-                            // std::cout << "  ERASE (" << ptr->i1 << ", " << ptr->i2 << ", " << ptr->i3 << ")" << std::endl;
-                            intermediateSolutions.erase(ptr);
-                        }
-                    }
+            // Delete all intermediate solutions where end1 >= end1 of k and have a lower quality than k.
+            TIntermediateSolutionsIterator itDel = intermediateSolutions.upper_bound(referenceSolution);
+            TIntermediateSolutionsIterator itDelEnd = intermediateSolutions.end();
+            while (itDel != itDelEnd) {
+                TIntermediateSolutionsIterator ptr = itDel;
+                ++itDel;
+                if (qualityOfChainEndingIn[it->i3] > ptr->i2) {
+                    // std::cout << "  ERASE (" << ptr->i1 << ", " << ptr->i2 << ", " << ptr->i3 << ")" << std::endl;
+                    intermediateSolutions.erase(ptr);
                 }
-            } // ... otherwise, add a triple for k in L if either L is empty or the last triple in
-              // L has a lower score than the chain ending in k.
-            else if (intermediateSolutions.empty() || (--it_j)->i2 < qualityOfChainEndingIn[it_k->i3])
-            {
-                // None found.  Insert a new triple for seed k.
-                TIntermediateSolution sol(endPositionV(seed_k), qualityOfChainEndingIn[it_k->i3], it_k->i3);
-                // std::cout << "  INSERT (" << sol.i1 << ", " << sol.i2 << ", " << sol.i3 << ") " << __LINE__ << std::endl;
-                intermediateSolutions.insert(sol);
             }
-            // Check if the invariant holds, that the scores in L are in a non-decreasing order.
-            SEQAN_ASSERT(_checkScoreInvariant(intermediateSolutions));
         }
     }
 
diff --git a/include/seqan/stream/iter_stream.h b/include/seqan/stream/iter_stream.h
index 661905b..6e1e9d7 100644
--- a/include/seqan/stream/iter_stream.h
+++ b/include/seqan/stream/iter_stream.h
@@ -61,7 +61,7 @@ struct StreamIterator {};
 /*!
  * @class StreamBuffer
  * @headerfile <seqan/stream.h>
- * @brief Reinterprets the std::basic_streambuf to grant access to protected member functions.
+ * @brief Buffer to use in stream.
  *
  * @signature template <typename TValue[, typenam TTraits]>
  *            class StreamBuffer : public std::basic_streambuf<TValue, TTraits>;
@@ -69,92 +69,65 @@ struct StreamIterator {};
  * @tparam TValue  The value type of the stream buffer.
  * @tparam TTraits The traits to use, defaults to <tt>std::char_traits<TValue></tt>.
  */
-// TODO(holtgrew): Add documentation for member functions.
 
- // Unfortunately some of the most useful members of basic_streambuf are
- // protected, so we define a subclass to cast and access them
-template <typename TValue, typename TTraits_ = std::char_traits<TValue>>
-struct StreamBuffer : public std::basic_streambuf<TValue, TTraits_>
-{
-    using TTraits      = TTraits_;
-    using TBasicStream = std::basic_streambuf<TValue, TTraits_>;
-
-    using TBasicStream::eback;
-    using TBasicStream::gptr;
-    using TBasicStream::egptr;
-    using TBasicStream::gbump;
-    using TBasicStream::underflow;
-
-    using TBasicStream::pbase;
-    using TBasicStream::pptr;
-    using TBasicStream::epptr;
-    using TBasicStream::pbump;
-    using TBasicStream::overflow;
-};
+// TODO(holtgrew): Add documentation for member functions.
 
-// NOTE(rrahn): This is a wrapper for the StreamBuffer class.
-// Since we usually work with std::basic_iostreams and their derivatives, we cannot simply cast a pointer to
-// std::basic_filebuf to StreamBuffer to expose it's protected member functions.
-// To do so, we only use the StreamBuffer to inherit from basic_streambuf (the base class of all buffer implementations.)
-// and only expose the protected member functions as public functions. We then store the original basic_streambuf
-// in this wrapper class and whenever access to the protected members is required we use a reinterpret_cast to convert
-// basic_streambuf* into the public StreamBuffer*. The reinterpret_cast has zero overhead.
-// This fixes an undetected error reported w/ the sanitizer option of gcc (https://github.com/seqan/seqan/issues/2104).
-template <typename TValue, typename TTraits_ = std::char_traits<TValue>>
-class StreamBufferWrapper
+// Unfortunately some of the most useful members of basic_streambuf are
+// protected, so we define a subclass to cast and access them
+template <typename TValue, typename TTraits_ = std::char_traits<TValue> >
+class StreamBuffer : public std::basic_streambuf<TValue, TTraits_>
 {
 public:
+    typedef TTraits_ TTraits;
+    typedef std::basic_streambuf<TValue, TTraits_> TBase;
 
-    typedef std::basic_streambuf<TValue, TTraits_> TBasicStreamBuffer;
-    typedef StreamBuffer<TValue, TTraits_>         TPubStreamBuffer_;
-    typedef typename TPubStreamBuffer_::TTraits    TTraits;
+    using TBase::eback;
+    using TBase::gptr;
+    using TBase::egptr;
 
-    TBasicStreamBuffer * streamBuf{nullptr};
-
-    StreamBufferWrapper() = default;
-
-    explicit StreamBufferWrapper(TBasicStreamBuffer * _basicStreamBuf) : streamBuf(_basicStreamBuf)
-    {}
+    using TBase::pbase;
+    using TBase::pptr;
+    using TBase::epptr;
 
     size_t chunkSize(Input)
     {
-        return baseBuf()->egptr() - baseBuf()->gptr();
+        return egptr() - gptr();
     }
 
     size_t chunkSize(Output)
     {
-        return baseBuf()->epptr() - baseBuf()->pptr();
+        return epptr() - pptr();
     }
 
     template <typename TOffset>
     void advanceChunk(TOffset ofs, Input)
     {
-        baseBuf()->gbump(ofs);
+        this->gbump(ofs);
     }
 
     template <typename TOffset>
     void advanceChunk(TOffset ofs, Output)
     {
-        baseBuf()->pbump(ofs);
+        this->pbump(ofs);
     }
 
     void reserveChunk(Input)
     {
-        if (baseBuf()->gptr() == baseBuf()->egptr())
-            baseBuf()->underflow();
+        if (gptr() == egptr())
+            this->underflow();
     }
 
     void reserveChunk(Output)
     {
-        if (baseBuf()->pptr() == baseBuf()->epptr())
-            baseBuf()->overflow(EOF);
+        if (pptr() == epptr())
+            this->overflow(EOF);
     }
 
     template <typename TOffset>
     typename std::streampos
     seekoff(TOffset ofs, std::ios_base::seekdir way, std::ios_base::openmode which)
     {
-        return streamBuf->pubseekoff(ofs, way, which);
+        return TBase::seekoff(ofs, way, which);
     }
 
     template <typename TOffset, typename TDirection>
@@ -176,9 +149,9 @@ public:
                 return;
 
             if (IsSameType<TDirection, Input>::VALUE)
-                baseBuf()->underflow();
+                this->underflow();
             else
-                baseBuf()->overflow();
+                this->overflow();
             left = chunkSize(dir);
 
             if (SEQAN_UNLIKELY(left == 0))
@@ -194,23 +167,18 @@ public:
                     if (IsSameType<TDirection, Input>::VALUE)
                     {
                         for (; ofs != 0; --ofs)
-                            baseBuf()->sbumpc();
+                            this->sbumpc();
                     }
                     if (IsSameType<TDirection, Output>::VALUE)
                     {
                         for (; ofs != 0; --ofs)
-                            baseBuf()->sputc('\0');
+                            this->sputc('\0');
                     }
                 }
                 return;
             }
         }
     }
-
-    TPubStreamBuffer_* baseBuf() const
-    {
-        return reinterpret_cast<TPubStreamBuffer_ *>(streamBuf);
-    }
 };
 
 // ----------------------------------------------------------------------------
@@ -248,13 +216,12 @@ template <typename TStream>
 class Iter<TStream, StreamIterator<Input> >
 {
 public:
-    typedef typename Value<TStream>::Type                    TValue;
-    typedef std::basic_istream<TValue>                       TIStream;
-    typedef std::basic_streambuf<TValue>                     TBasicBuffer;
-    typedef StreamBufferWrapper<TValue>                      TStreamBufferWrapper;
-    typedef typename TStreamBufferWrapper::TPubStreamBuffer_ TStreamBuffer;
+    typedef typename Value<TStream>::Type   TValue;
+    typedef std::basic_istream<TValue>      TIStream;
+    typedef std::basic_streambuf<TValue>    TBasicBuffer;
+    typedef StreamBuffer<TValue>            TStreamBuffer;
 
-    TStreamBufferWrapper streamBufWrapper{nullptr};
+    TStreamBuffer *streamBuf;
 
     /*!
      * @fn InputStreamIterator::Iter
@@ -269,15 +236,17 @@ public:
      *
      * Allows default construction, construction from stream, as well as from a @link StreamBuffer @endlink.
      */
-    Iter() = default;
+    Iter() : streamBuf()
+    {}
 
-    Iter(TIStream & stream) : streamBufWrapper(stream.rdbuf())
+    Iter(TIStream & stream) :
+        streamBuf(static_cast<StreamBuffer<TValue> *>(stream.rdbuf()))
     {
-        // printf("streamBuf: %p\n", streamBuf);
         stream.exceptions(std::ios_base::badbit);
     }
 
-    Iter(TBasicBuffer * buf) : streamBufWrapper(buf)
+    Iter(TStreamBuffer * buf) :
+        streamBuf(static_cast<StreamBuffer<TValue> *>(buf))
     {}
 };
 
@@ -299,13 +268,12 @@ template <typename TStream>
 class Iter<TStream, StreamIterator<Output> >
 {
 public:
-    typedef typename Value<TStream>::Type                    TValue;
-    typedef std::basic_ostream<TValue>                       TOStream;
-    typedef std::basic_streambuf<TValue>                     TBasicBuffer;
-    typedef StreamBufferWrapper<TValue>                      TStreamBufferWrapper;
-    typedef typename TStreamBufferWrapper::TPubStreamBuffer_ TStreamBuffer;
+    typedef typename Value<TStream>::Type   TValue;
+    typedef std::basic_ostream<TValue>      TOStream;
+    typedef std::basic_streambuf<TValue>    TBasicBuffer;
+    typedef StreamBuffer<TValue>            TStreamBuffer;
 
-    TStreamBufferWrapper streamBufWrapper{nullptr};
+    TStreamBuffer *streamBuf;
 
     /*!
      * @fn Iter::Iter
@@ -320,14 +288,17 @@ public:
      *
      * Allows default construction, construction from stream, as well as from a @link StreamBuffer @endlink.
      */
-    Iter() = default;
+    Iter() : streamBuf()
+    {}
 
-    Iter(TOStream & stream) : streamBufWrapper(stream.rdbuf())
+    Iter(TOStream & stream):
+        streamBuf(static_cast<StreamBuffer<TValue> *>(stream.rdbuf()))
     {
         stream.exceptions(std::ios_base::badbit);
     }
 
-    Iter(TBasicBuffer * buf) : streamBufWrapper(buf)
+    Iter(TBasicBuffer *buf):
+        streamBuf(static_cast<StreamBuffer<TValue> *>(buf))
     {}
 
     template <typename TValue2>
@@ -534,13 +505,13 @@ directionIterator(TContainer &cont, TDirection const &)
 template <typename TStream, typename TDirection, typename TSize>
 inline void reserveChunk(Iter<TStream, StreamIterator<TDirection> > &iter, TSize, Input dir)
 {
-    iter.streamBufWrapper.reserveChunk(dir);
+    iter.streamBuf->reserveChunk(dir);
 }
 
 template <typename TStream, typename TDirection, typename TSize>
 inline void reserveChunk(Iter<TStream, StreamIterator<TDirection> > &iter, TSize, Output dir)
 {
-    iter.streamBufWrapper.reserveChunk(dir);
+    iter.streamBuf->reserveChunk(dir);
 }
 
 // ----------------------------------------------------------------------------
@@ -552,7 +523,7 @@ inline void reserveChunk(Iter<TStream, StreamIterator<TDirection> > &iter, TSize
 template <typename TStream, typename TDirection, typename TSize>
 inline void advanceChunk(Iter<TStream, StreamIterator<TDirection> > &iter, TSize size)
 {
-    iter.streamBufWrapper.advanceChunk(size, TDirection());
+    iter.streamBuf->advanceChunk(size, TDirection());
 }
 
 // ----------------------------------------------------------------------------
@@ -579,8 +550,8 @@ template <typename TChunk, typename TStream, typename TDirection>
 inline void
 getChunk(TChunk &result, Iter<TStream, StreamIterator<Tag<TDirection> > > &iter, Tag<TDirection>)
 {
-    SEQAN_ASSERT(iter.streamBufWrapper.baseBuf() != nullptr);
-    getChunk(result, *iter.streamBufWrapper.baseBuf(), Tag<TDirection>());
+    SEQAN_ASSERT(iter.streamBuf != NULL);
+    getChunk(result, *iter.streamBuf, Tag<TDirection>());
 }
 
 // ----------------------------------------------------------------------------
@@ -591,15 +562,15 @@ template <typename TStream>
 inline typename Reference<Iter<TStream, StreamIterator<Input> > >::Type
 value(Iter<TStream, StreamIterator<Input> > &iter)
 {
-    SEQAN_ASSERT(iter.streamBufWrapper.baseBuf() != nullptr);
-    return iter.streamBufWrapper.baseBuf()->sgetc();
+    SEQAN_ASSERT(iter.streamBuf != NULL);
+    return iter.streamBuf->sgetc();
 }
 template <typename TStream>
 inline typename Reference<Iter<TStream, StreamIterator<Input> > const>::Type
 value(Iter<TStream, StreamIterator<Input> > const &iter)
 {
-    SEQAN_ASSERT(iter.streamBufWrapper.baseBuf() != nullptr);
-    return iter.streamBufWrapper.baseBuf()->sgetc();
+    SEQAN_ASSERT(iter.streamBuf != NULL);
+    return iter.streamBuf->sgetc();
 }
 
 // ----------------------------------------------------------------------------
@@ -629,13 +600,12 @@ setValue(Iter<TStream, StreamIterator<Output> > & iter, TValue const &val)
 {
     return setValue(const_cast<Iter<TStream, StreamIterator<Output> > const &>(iter), val);
 }
-
 template <typename TStream, typename TValue>
 inline void
 setValue(Iter<TStream, StreamIterator<Output> > const & iter, TValue const &val)
 {
-    SEQAN_ASSERT(iter.streamBufWrapper.baseBuf() != nullptr);
-    iter.streamBufWrapper.baseBuf()->sputc((typename Value<Iter<TStream, StreamIterator<Output> > >::Type)val);
+    SEQAN_ASSERT(iter.streamBuf != NULL);
+    iter.streamBuf->sputc((typename Value<Iter<TStream, StreamIterator<Output> > >::Type)val);
 }
 
 // ----------------------------------------------------------------------------
@@ -658,8 +628,8 @@ template <typename TStream>
 inline void
 goNext(Iter<TStream, StreamIterator<Input> > & iter)
 {
-    SEQAN_ASSERT(iter.streamBufWrapper.baseBuf() != nullptr);
-    iter.streamBufWrapper.baseBuf()->sbumpc();
+    SEQAN_ASSERT(iter.streamBuf != NULL);
+    iter.streamBuf->sbumpc();
 }
 
 template <typename TStream>
@@ -676,8 +646,8 @@ template <typename TContainer, typename TSpec>
 inline void
 operator++(Iter<TContainer, StreamIterator<Input> > & iter, int)
 {
-    SEQAN_ASSERT(iter.streamBufWrapper.baseBuf() != nullptr);
-    iter.streamBufWrapper.baseBuf()->sbumpc();
+    SEQAN_ASSERT(iter.streamBuf != NULL);
+    iter.streamBuf->sbumpc();
 }
 
 // ----------------------------------------------------------------------------
@@ -688,8 +658,8 @@ template <typename TStream, typename TOffset, typename TDirection>
 inline void
 goFurther(Iter<TStream, StreamIterator<TDirection> > &iter, TOffset ofs)
 {
-    SEQAN_ASSERT(iter.streamBufWrapper.baseBuf() != nullptr);
-    iter.streamBufWrapper.goFurther(ofs, TDirection());
+    SEQAN_ASSERT(iter.streamBuf != NULL);
+    iter.streamBuf->goFurther(ofs, TDirection());
 }
 
 // ----------------------------------------------------------------------------
@@ -700,8 +670,8 @@ template <typename TStream, typename TDirection>
 inline typename Position<Iter<TStream, StreamIterator<TDirection> > const>::Type
 position(Iter<TStream, StreamIterator<TDirection> > const & iter)
 {
-    SEQAN_ASSERT(iter.streamBufWrapper.baseBuf() != nullptr);
-    return iter.streamBufWrapper.baseBuf()->pubseekoff(0, std::ios_base::cur,
+    SEQAN_ASSERT(iter.streamBuf != NULL);
+    return iter.streamBuf->pubseekoff(0, std::ios_base::cur,
                                       (IsSameType<TDirection, Input>::VALUE)? std::ios_base::in: std::ios_base::out);
 }
 
@@ -713,8 +683,8 @@ template <typename TStream, typename TDirection, typename TPosition>
 inline void
 setPosition(Iter<TStream, StreamIterator<TDirection> > const & iter, TPosition pos)
 {
-    SEQAN_ASSERT(iter.streamBufWrapper.baseBuf() != nullptr);
-    iter.streamBufWrapper.baseBuf()->pubseekpos(pos, (IsSameType<TDirection, Input>::VALUE)? std::ios_base::in: std::ios_base::out);
+    SEQAN_ASSERT(iter.streamBuf != NULL);
+    iter.streamBuf->pubseekpos(pos, (IsSameType<TDirection, Input>::VALUE)? std::ios_base::in: std::ios_base::out);
 }
 
 // ----------------------------------------------------------------------------
@@ -728,13 +698,13 @@ atEnd(Iter<TStream, StreamIterator<Input> > const & iter)
     typedef typename Value<Iter<TStream, StreamIterator<Input> > >::Type TValue;
     typedef StreamBuffer<TValue> TStreamBuffer;
 
-    if (SEQAN_UNLIKELY(iter.streamBufWrapper.baseBuf() == nullptr))
+    if (SEQAN_UNLIKELY(iter.streamBuf == NULL))
     {
         return true;
     }
     else
     {
-        TStreamBuffer * const buf = iter.streamBufWrapper.baseBuf();
+        TStreamBuffer *buf = static_cast<TStreamBuffer*>(iter.streamBuf);
         if (SEQAN_LIKELY(buf->gptr() < buf->egptr()))
             return false;
         else
@@ -749,13 +719,13 @@ atEnd(Iter<TStream, StreamIterator<Output> > const & iter)
     typedef typename Value<Iter<TStream, StreamIterator<Input> > >::Type TValue;
     typedef StreamBuffer<TValue> TStreamBuffer;
 
-    if (SEQAN_UNLIKELY(iter.streamBufWrapper.baseBuf() == nullptr))
+    if (SEQAN_UNLIKELY(iter.streamBuf == NULL))
     {
         return true;
     }
     else
     {
-        TStreamBuffer * const buf = iter.streamBufWrapper.baseBuf();
+        TStreamBuffer *buf = static_cast<TStreamBuffer*>(iter.streamBuf);
         if (SEQAN_LIKELY(buf->pptr() < buf->epptr()))
             return false;
         else
diff --git a/manual/source/Infrastructure/Use/Install.rst b/manual/source/Infrastructure/Use/Install.rst
index e3ce7d4..85dadac 100644
--- a/manual/source/Infrastructure/Use/Install.rst
+++ b/manual/source/Infrastructure/Use/Install.rst
@@ -32,27 +32,27 @@ SeqAn is available natively on the following platforms.
     
     <br/>
 
-+-------------------------+----------------+-----------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| Operating System        | Package Name   | Command                                 | links                                                                                                                                                                  |
-+============+============+================+=========================================+========================================================================================================================================================================+
-| **G** |br| | Arch       | seqan (AUR)    |  *depends*                              | `info <https://aur.archlinux.org/packages/seqan/>`__                                                                                                                   |
-| **N** |br| +------------+----------------+-----------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| **U** |br| | Debian     | libseqan2-dev  | ``apt install libseqan2-dev``           | `info <https://packages.debian.org/search?keywords=libseqan2-dev>`__ | `contact <mailto:debian-med-packaging()lists.alioth.debian.org>`__                              |
-| / |br|     +------------+----------------+-----------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| **L** |br| | Fedora     | seqan-devel    | ``yum install seqan-devel``             | `info <https://apps.fedoraproject.org/packages/seqan-devel>`__ | `contact <mailto:sagitter()fedoraproject.org>`__                                                      |
-| **I** |br| +------------+----------------+-----------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| **N** |br| | Gentoo     | seqan          | ``emerge sci-biology/seqan``            | `info <https://packages.gentoo.org/packages/sci-biology/seqan>`__ | `contact <mailto:sci-biology at gentoo.org>`__                                                        |
-| **U** |br| +------------+----------------+-----------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| **X** |br| | Ubuntu     | libseqan2-dev  | ``apt install libseqan2-dev``           | `info <https://packages.ubuntu.com/search?keywords=libseqan2-dev&searchon=names&suite=all&section=all>`__ | `contact <mailto:ubuntu-devel-discuss at lists.ubuntu.com>`__ |
-+------------+------------+----------------+-----------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| **M** |br| | Homebrew   | seqan          | ``brew install homebrew/science/seqan`` | `info <http://braumeister.org/repos/Homebrew/homebrew-science/formula/seqan>`__ | `contact <mailto:tim()tim-smith.us>`__                                               |
-| **A** |br| +------------+----------------+-----------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| **C** |br| | MacPorts   | seqan          | ``port install seqan``                  | `info <https://trac.macports.org/browser/trunk/dports/science/seqan/Portfile>`__ | `contact <mailto:rene.rahn()fu-berlin.de>`__                                        |
-+------------+------------+----------------+-----------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| **B** |br| | FreeBSD    | seqan          | ``pkg install seqan``                   | `info <http://freshports.org/biology/seqan>`__ | `contact <mailto:h2+fbsdports()fsfe.org>`__                                                                           |
-| **S** |br| +------------+----------------+-----------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| **D** |br| | OpenBSD    | seqan          | ``pkg_add seqan``                       | `info <http://openports.se/biology/seqan>`__ | `contact <mailto:h2+fbsdports()fsfe.org>`__                                                                             |
-+------------+------------+----------------+-----------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
++---------------------------+--------------------+----------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| Operating System          | Package Name       | Command                                      | links                                                                                                                                                        |
++============+==============+====================+==============================================+==============================================================================================================================================================+
+| **G** |br| | Arch         |                    |                                              | `AUR <https://aur.archlinux.org/packages/?O=0&K=seqan>`__                                                                                                    |
+| **N** |br| +--------------+--------------------+----------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| **U** |br| | Debian       | libseqan2-dev      | ``apt install libseqan2-dev``                | `info <https://packages.debian.org/search?keywords=libseqan2-dev>`__ | `contact <mailto:debian-med-packaging()lists.alioth.debian.org>`__                    |
+| / |br|     +--------------+--------------------+----------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| **L** |br| | Fedora       | seqan-devel        | ``yum install seqan-devel``                  | `info <https://apps.fedoraproject.org/packages/seqan-devel>`__ | `contact <mailto:sagitter()fedoraproject.org>`__                                            |
+| **I** |br| +--------------+--------------------+----------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| **N** |br| | Gentoo       | seqan              | ``emerge sci-biology/seqan``                 | `info <https://packages.gentoo.org/packages/sci-biology/seqan>`__ | `contact <mailto:sci-biology at gentoo.org>`__                                              |
+| **U** |br| +--------------+--------------------+----------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| **X** |br| | Ubuntu       | seqan-dev          | ``apt install seqan-dev``                    | `info <http://packages.ubuntu.com/xenial/seqan-dev>`__ | `contact <mailto:ubuntu-motu()lists.ubuntu.com>`__                                                  |
++------------+--------------+--------------------+----------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| **M** |br| | Homebrew     | seqan              | ``brew install homebrew/science/seqan``      | `info <http://braumeister.org/repos/Homebrew/homebrew-science/formula/seqan>`__ | `contact <mailto:tim()tim-smith.us>`__                                     |
+| **A** |br| +--------------+--------------------+----------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| **C** |br| | MacPorts     | seqan              | ``port install seqan``                       | `info <https://trac.macports.org/browser/trunk/dports/science/seqan/Portfile>`__ | `contact <mailto:rene.rahn()fu-berlin.de>`__                              |
++------------+--------------+--------------------+----------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| **B** |br| | FreeBSD      | seqan              | ``pkg install seqan``                        | `info <http://freshports.org/biology/seqan>`__ | `contact <mailto:h2+fbsdports()fsfe.org>`__                                                                 |
+| **S** |br| +--------------+--------------------+----------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| **D** |br| | OpenBSD      | seqan              | ``pkg_add seqan``                            | `info <http://openports.se/biology/seqan>`__ | `contact <mailto:h2+fbsdports()fsfe.org>`__                                                                   |
++------------+--------------+--------------------+----------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
 
 You should execute the above commands in a terminal as the ``root`` user or prefix them with ``sudo``. If you have problems installing the package on your operating system, or it is outdated, please write to the contact shown above (and replace ``()`` in the e-mail-address with ``@``).
 
diff --git a/tests/align/test_alignment_algorithms_local.h b/tests/align/test_alignment_algorithms_local.h
index 99ce1c7..f6c1d73 100644
--- a/tests/align/test_alignment_algorithms_local.h
+++ b/tests/align/test_alignment_algorithms_local.h
@@ -607,53 +607,6 @@ SEQAN_DEFINE_TEST(test_align_local_alignment_enumeration_gaps)
 
         SEQAN_ASSERT_NOT(nextLocalAlignment(gapsH, gapsV, enumerator));
     }
-
-    // Test scoring matrix
-    {
-
-        std::stringstream ssH, ssV;
-
-        String<AminoAcid> strH("IGYELAPIPHTRTMDDFGNWWWKKWIHDDELNYFGTQLLIWHLQEKEGEQ");
-        String<AminoAcid> strV("KHSDQGQIALLIHNTLQDWRPKVECDSPRTMIRRDFDDPQLAPPPHTNHRGNM");
-
-        Gaps<String<AminoAcid>, ArrayGaps> gapsH(strH);
-        Gaps<String<AminoAcid>, ArrayGaps> gapsV(strV);
-
-        Blosum62 scoringScheme;
-        int cutoff =  40;
-
-        LocalAlignmentEnumerator<Blosum62, Unbanded> enumerator(scoringScheme, cutoff);
-
-        SEQAN_ASSERT(nextLocalAlignment(gapsH, gapsV, enumerator));
-        SEQAN_ASSERT_EQ(getScore(enumerator), 69);
-        ssH.clear(); ssH.str(""); ssH << gapsH;
-        SEQAN_ASSERT_EQ(ssH.str(), "GYELAP--IPHTRTMDDFGNWWWK-KWIH-DD-E-L---NYFGT-QLLIW---HLQEKEG");
-        ssV.clear(); ssV.str(""); ssV << gapsV;
-        SEQAN_ASSERT_EQ(ssV.str(), "G-QIA-LLI-HN-TLQD---W--RPK-VECDSPRTMIRRD-FDDPQLA--PPPHTNHR-G");
-
-        SEQAN_ASSERT(nextLocalAlignment(gapsH, gapsV, enumerator));
-        SEQAN_ASSERT_EQ(getScore(enumerator), 57);
-        ssH.clear(); ssH.str(""); ssH << gapsH;
-        SEQAN_ASSERT_EQ(ssH.str(), "KWIHDDELNYFGTQ--LLIWH--LQE---K-E");
-        ssV.clear(); ssV.str(""); ssV << gapsV;
-        SEQAN_ASSERT(ssV.str() == "K--HSDQ----G-QIALLI-HNTLQDWRPKVE");
-
-        SEQAN_ASSERT(nextLocalAlignment(gapsH, gapsV, enumerator));
-        SEQAN_ASSERT_EQ(getScore(enumerator), 51);
-        ssH.clear(); ssH.str(""); ssH << gapsH;
-        SEQAN_ASSERT_EQ(ssH.str(), "IGYE-LA---P-I----PHTRTMD---DFGNWWWKKWIHDD-EL------NYF-GTQL");
-        ssV.clear(); ssV.str(""); ssV << gapsV;
-        SEQAN_ASSERT_EQ(ssV.str(), "I-HNTLQDWRPKVECDSP--RTM-IRRDF----------DDPQLAPPPHTNH-RGN-M");
-
-        SEQAN_ASSERT(nextLocalAlignment(gapsH, gapsV, enumerator));
-        SEQAN_ASSERT_EQ(getScore(enumerator), 46);
-        ssH.clear(); ssH.str(""); ssH << gapsH;
-        SEQAN_ASSERT_EQ(ssH.str(), "I--GYE---LAPIP-HT--RTMDDFGN");
-        ssV.clear(); ssV.str(""); ssV << gapsV;
-        SEQAN_ASSERT_EQ(ssV.str(), "IRRDFDDPQLAP-PPHTNHR-----GN");
-
-        SEQAN_ASSERT_NOT(nextLocalAlignment(gapsH, gapsV, enumerator));
-    }
 }
 
 SEQAN_DEFINE_TEST(test_align_local_alignment_enumeration_fragment)
diff --git a/tests/align/test_alignment_algorithms_local_banded.h b/tests/align/test_alignment_algorithms_local_banded.h
index afe4148..846cf94 100644
--- a/tests/align/test_alignment_algorithms_local_banded.h
+++ b/tests/align/test_alignment_algorithms_local_banded.h
@@ -502,38 +502,6 @@ SEQAN_DEFINE_TEST(test_align_local_alignment_enumeration_banded_gaps)
 
         SEQAN_ASSERT_NOT(nextLocalAlignment(gapsH, gapsV, enumerator));
     }
-
-    // Test scoring matrix
-    {
-        std::stringstream ssH, ssV;
-
-        String<AminoAcid> strH("IGYELAPIPHTRTMDDFGNWWWKKWIHDDELNYFGTQLLIWHLQEKEGEQ");
-        String<AminoAcid> strV("KHSDQGQIALLIHNTLQDWRPKVECDSPRTMIRRDFDDPQLAPPPHTNHRGNM");
-
-        Gaps<String<AminoAcid>, ArrayGaps> gapsH(strH);
-        Gaps<String<AminoAcid>, ArrayGaps> gapsV(strV);
-
-        Blosum62 scoringScheme;
-        int cutoff =  40;
-
-        LocalAlignmentEnumerator<Blosum62, Banded> enumerator(scoringScheme, -20, 20, cutoff);
-
-        SEQAN_ASSERT(nextLocalAlignment(gapsH, gapsV, enumerator));
-        SEQAN_ASSERT_EQ(getScore(enumerator), 69);
-        ssH.clear(); ssH.str(""); ssH << gapsH;
-        SEQAN_ASSERT_EQ(ssH.str(), "GYELAP--IPHTRTMDDFGNWWWK-KWIH-DD-E--L--NYF-GTQLLIW---HLQEKEG");
-        ssV.clear(); ssV.str(""); ssV << gapsV;
-        SEQAN_ASSERT_EQ(ssV.str(), "G-QIA-LLI-H-NTLQD-----WRPK-VECDSPRTMIRRD-FDDPQ-LA-PPPHTNHR-G");
-
-        SEQAN_ASSERT(nextLocalAlignment(gapsH, gapsV, enumerator));
-        SEQAN_ASSERT_EQ(getScore(enumerator), 51);
-        ssH.clear(); ssH.str(""); ssH << gapsH;
-        SEQAN_ASSERT_EQ(ssH.str(), "IGYE-L---AP-I----PHTRTM--DDFGNWWWKKWIHDD-EL------NYF-GTQL");
-        ssV.clear(); ssV.str(""); ssV << gapsV;
-        SEQAN_ASSERT(ssV.str() == "I-HNTLQDWRPKVECDSP--RTMIRRDF----------DDPQLAPPPHTNH-RG-NM");
-
-        SEQAN_ASSERT_NOT(nextLocalAlignment(gapsH, gapsV, enumerator));
-    }
 }
 
 SEQAN_DEFINE_TEST(test_align_local_alignment_enumeration_banded_fragment)
diff --git a/tests/arg_parse/test_arg_parse.cpp b/tests/arg_parse/test_arg_parse.cpp
index 100ec59..aec4bcb 100644
--- a/tests/arg_parse/test_arg_parse.cpp
+++ b/tests/arg_parse/test_arg_parse.cpp
@@ -144,7 +144,6 @@ SEQAN_BEGIN_TESTSUITE(test_arg_parse)
     SEQAN_CALL_TEST(test_argument_invalid_cast);
     SEQAN_CALL_TEST(test_argument_min_max_boundaries);
     SEQAN_CALL_TEST(test_argument_valid_values);
-    SEQAN_CALL_TEST(test_argument_valid_values_directories);
 
     SEQAN_CALL_TEST(test_argument_parser);
     SEQAN_CALL_TEST(test_parse_non_const_cstring);
diff --git a/tests/arg_parse/test_arg_parse_argument.h b/tests/arg_parse/test_arg_parse_argument.h
index b46fb84..675e403 100644
--- a/tests/arg_parse/test_arg_parse_argument.h
+++ b/tests/arg_parse/test_arg_parse_argument.h
@@ -223,32 +223,4 @@ SEQAN_DEFINE_TEST(test_argument_valid_values)
                          "the given path 'not-a-validfile.qxt' does not have one of the valid file extensions [*.txt, *.fasta]; the file extension was overridden to be '.fa'");
 }
 
-SEQAN_DEFINE_TEST(test_argument_valid_values_directories)
-{
-    ArgParseArgument dirarg(ArgParseArgument::INPUT_DIRECTORY);
-    setValidValues(dirarg, ".dir1 .dir2");
-
-    _assignArgumentValue(dirarg, "directory.dir1");
-    SEQAN_ASSERT_EQ(value(dirarg.value, 0), "directory.dir1");
-
-    // Test getFileExtension() function.
-    SEQAN_ASSERT_EQ(getFileExtension(dirarg), ".dir1");
-
-    // different case should also work
-    _assignArgumentValue(dirarg, "directory.DIR1");
-    SEQAN_ASSERT_EQ(value(dirarg.value, 0), "directory.DIR1");
-
-    // also accept a trailing '/'
-    _assignArgumentValue(dirarg, "directory.dir2/");
-    SEQAN_ASSERT_EQ(value(dirarg.value, 0), "directory.dir2/");
-
-    // Test getFileExtension() function.
-    SEQAN_ASSERT_EQ(getFileExtension(dirarg), ".dir2");
-
-    // different case should also work
-    _assignArgumentValue(dirarg, "directory.DIR2/");
-    SEQAN_ASSERT_EQ(value(dirarg.value, 0), "directory.DIR2/");
-
-}
-
 #endif // SEQAN_TESTS_ARG_PARSE_TEST_ARG_PARSE_ARGUMENT_H_
diff --git a/tests/modifier/test_modifier.cpp b/tests/modifier/test_modifier.cpp
index ec6fc83..9b139a9 100644
--- a/tests/modifier/test_modifier.cpp
+++ b/tests/modifier/test_modifier.cpp
@@ -42,7 +42,7 @@
 #include "test_modifier_string_padding.h"
 
 
-SEQAN_BEGIN_TESTSUITE(test_modifier)
+SEQAN_BEGIN_TESTSUITE(test_modifier) 
 {
     // Test the modifier shortcuts.
     SEQAN_CALL_TEST(test_modifer_shortcuts_dna_string_reverse);
@@ -130,6 +130,5 @@ SEQAN_BEGIN_TESTSUITE(test_modifier)
     SEQAN_CALL_TEST(test_modified_string_padding_end);
     SEQAN_CALL_TEST(test_modified_string_padding_difference);
     SEQAN_CALL_TEST(test_modified_string_padding_iterator);
-    SEQAN_CALL_TEST(test_modified_string_padding_defect_2190);
 }
 SEQAN_END_TESTSUITE
diff --git a/tests/modifier/test_modifier_string_padding.h b/tests/modifier/test_modifier_string_padding.h
index b474429..063b620 100644
--- a/tests/modifier/test_modifier_string_padding.h
+++ b/tests/modifier/test_modifier_string_padding.h
@@ -181,28 +181,4 @@ SEQAN_DEFINE_TEST(test_modified_string_padding_iterator)
     SEQAN_ASSERT_EQ(*(it - 3), seq[12]);
 }
 
-SEQAN_DEFINE_TEST(test_modified_string_padding_defect_2190)
-{
-    using namespace seqan;
-
-    DnaString seq = "ACGTGGATAGCATCG";
-    auto seqInf = infix(seq, 0, length(seq));
-
-    auto test_const = [](auto const & modifier)
-    {
-        // using TRef = typename Reference<decltype(modifier)>::Type;
-        auto x = value(modifier, 1);
-        SEQAN_ASSERT_EQ(x, 'C');
-    };
-    { // Test working case, when reference of const modifier gives back a const reference to the value
-        ModifiedString<decltype(seq), ModPadding> modString(seq);
-        test_const(modString);
-    }
-
-    {  // Test defect, when reference of const modifier gives back a non-const reference to the value
-        ModifiedString<decltype(seqInf), ModPadding> modString(seqInf);
-        test_const(modString);
-    }
-}
-
 #endif  // #ifndef TESTS_MODIFIER_MODIFIER_STRING_PADDING_H_
diff --git a/tests/seeds/test_seeds_global_chaining.cpp b/tests/seeds/test_seeds_global_chaining.cpp
index f9e729f..3cb5b82 100644
--- a/tests/seeds/test_seeds_global_chaining.cpp
+++ b/tests/seeds/test_seeds_global_chaining.cpp
@@ -116,32 +116,6 @@ SEQAN_DEFINE_TEST(test_seeds_global_chaining_sparse_length)
         SEQAN_ASSERT_EQ(1u, length(result));
         SEQAN_ASSERT_EQ(TSeed(0, 93, 281, 342), result[0]);
     }
-
-    { // Issue #2082
-       TSeedSet seedSet;
-
-       addSeed(seedSet, TSeed(0, 0, 3), Single());
-       addSeed(seedSet, TSeed(2, 3, 2), Single());
-
-       TSeedChain result;
-       chainSeedsGlobally(result, seedSet, SparseChaining());
-
-       SEQAN_ASSERT_EQ(1u, length(result));
-       SEQAN_ASSERT_EQ(TSeed(0, 0, 3), result[0]);
-   }
-
-   { // Issue #2082
-        TSeedSet seedSet;
-
-        addSeed(seedSet, TSeed(0, 0, 100), Single());
-        addSeed(seedSet, TSeed(95, 95, 10), Single());
-
-        TSeedChain result;
-        chainSeedsGlobally(result, seedSet, SparseChaining());
-
-        SEQAN_ASSERT_EQ(1u, length(result));
-        SEQAN_ASSERT_EQ(TSeed(0, 0, 100), result[0]);
-    }
 }
 
 SEQAN_BEGIN_TESTSUITE(test_seeds_global_chaining)
diff --git a/util/cmake/SeqAnBuildSystem.cmake b/util/cmake/SeqAnBuildSystem.cmake
index d4e2ba8..e642f81 100644
--- a/util/cmake/SeqAnBuildSystem.cmake
+++ b/util/cmake/SeqAnBuildSystem.cmake
@@ -53,12 +53,6 @@ set(PythonInterp_FIND_VERSION_COUNT 2)
 include (SeqAnUsabilityAnalyzer)
 include (CheckCXXCompilerFlag)
 
-if (DEFINED CMAKE_INSTALL_DOCDIR)
-    set(CMAKE_INSTALL_DOCDIR_IS_SET ON)
-endif ()
-
-include (GNUInstallDirs)
-
 set (COMPILER_CLANG FALSE)
 set (COMPILER_GCC FALSE)
 set (COMPILER_LINTEL FALSE)
@@ -212,7 +206,7 @@ macro (seqan_build_system_init)
         # TODO(h-2): raise this to W4
         set (SEQAN_CXX_FLAGS "${SEQAN_CXX_FLAGS} /W3")
     else()
-        set (SEQAN_CXX_FLAGS "${SEQAN_CXX_FLAGS} -W -Wall -pedantic")
+        set (SEQAN_CXX_FLAGS "${SEQAN_CXX_FLAGS} -W -Wall -pedantic -fstrict-aliasing -Wstrict-aliasing")
         set (SEQAN_DEFINITIONS ${SEQAN_DEFINITIONS} -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64)
 
         # disable some warnings on ICC
@@ -395,24 +389,24 @@ macro (seqan_setup_library)
         install (FILES LICENSE
                        README.rst
                        CHANGELOG.rst
-                 DESTINATION ${CMAKE_INSTALL_DOCDIR})
+                 DESTINATION share/doc/seqan)
         # Install pkg-config file, except on Windows.
         if (NOT CMAKE_SYSTEM_NAME MATCHES Windows)
             configure_file("util/pkgconfig/seqan.pc.in" "${CMAKE_BINARY_DIR}/util/pkgconfig/seqan-${SEQAN_VERSION_MAJOR}.pc" @ONLY)
-            install(FILES "${CMAKE_BINARY_DIR}/util/pkgconfig/seqan-${SEQAN_VERSION_MAJOR}.pc" DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/pkgconfig)
+            install(FILES "${CMAKE_BINARY_DIR}/util/pkgconfig/seqan-${SEQAN_VERSION_MAJOR}.pc" DESTINATION lib/pkgconfig)
         endif (NOT CMAKE_SYSTEM_NAME MATCHES Windows)
         # Install FindSeqAn TODO(h-2) rename seqan-config.cmake to seqan-config${SEQAN_VERSION_MAJOR}.cmake after 2.x cycle
-        install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/util/cmake/seqan-config.cmake" DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/cmake/seqan/)
+        install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/util/cmake/seqan-config.cmake" DESTINATION lib/cmake/seqan/)
 
         # Install headers
         file (GLOB HEADERS
-              RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/include/
+              RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
               include/seqan/[A-z]*/[A-z]/[A-z]*.h
               include/seqan/[A-z]*/[A-z]*.h
               include/seqan/[A-z]*.h)
         foreach (HEADER ${HEADERS})
             get_filename_component (_DESTINATION ${HEADER} PATH)
-            install (FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/${HEADER} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${_DESTINATION})
+            install (FILES ${CMAKE_CURRENT_SOURCE_DIR}/${HEADER} DESTINATION ${_DESTINATION})
         endforeach ()
     endif ()
 
@@ -469,11 +463,8 @@ macro (seqan_setup_install_vars APP_NAME)
         set (SEQAN_PREFIX_SHARE ".")
         set (SEQAN_PREFIX_SHARE_DOC ".")
     else ()
-        if (NOT DEFINED CMAKE_INSTALL_DOCDIR_IS_SET)
-            set (CMAKE_INSTALL_DOCDIR "${CMAKE_INSTALL_DATAROOTDIR}/doc" CACHE STRING "Documentation root (DATAROOTDIR/doc)" FORCE)
-        endif ()
-        set (SEQAN_PREFIX_SHARE "${CMAKE_INSTALL_DATADIR}/${APP_NAME}")
-        set (SEQAN_PREFIX_SHARE_DOC "${CMAKE_INSTALL_DOCDIR}/${APP_NAME}")
+        set (SEQAN_PREFIX_SHARE "share/${APP_NAME}")
+        set (SEQAN_PREFIX_SHARE_DOC "share/doc/${APP_NAME}")
     endif ()
 endmacro (seqan_setup_install_vars)
 
diff --git a/util/pkgconfig/seqan.pc.in b/util/pkgconfig/seqan.pc.in
index 7dc4a00..8cc5f3f 100644
--- a/util/pkgconfig/seqan.pc.in
+++ b/util/pkgconfig/seqan.pc.in
@@ -1,4 +1,6 @@
-includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@
+prefix=@CMAKE_INSTALL_PREFIX@
+exec_prefix=${prefix}
+includedir=${prefix}/include
 
 Name: @CMAKE_PROJECT_NAME@
 Description: C++ library for biological sequence analysis
diff --git a/util/skel/app_template/CMakeLists.txt b/util/skel/app_template/CMakeLists.txt
index 1c72c2b..6d1aeca 100644
--- a/util/skel/app_template/CMakeLists.txt
+++ b/util/skel/app_template/CMakeLists.txt
@@ -48,7 +48,7 @@ endif (NOT SEQAN_PREFIX_SHARE_DOC)
 
 # Install %(NAME)s in ${PREFIX}/bin directory
 install (TARGETS %(NAME)s
-         DESTINATION ${CMAKE_INSTALL_BINDIR})
+         DESTINATION bin)
 
 # Install non-binary files for the package to "." for app builds and
 # ${PREFIX}/share/doc/%(NAME)s for SeqAn release builds.

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/seqan2.git



More information about the debian-med-commit mailing list