Releases: seqan/seqan3
3.4.0
New features
I/O
seqan3::sam_file_inputnow accepts user-defined tags (#3256).
Notable Bug-fixes
Alphabet
- Resolved an issue that prevented proper conversion, most notably in conjunction with
seqan3::bitpacked_sequence(#3268).
Alignment
- Fixed an issue that caused incorrect begin and end positions for banded alignments (#3269).
I/O
seqan3::sam_file_outputnow takes ownership of the given reference information (#3300).
API changes
Deprecations
seqan3::interleaved_bloom_filter: Use https://github.com/seqan/hibf instead.seqan3::argument_parser: Use https://github.com/seqan/sharg-parser instead.
Compiler
- Supported compiler:
- GCC 12, 13, 14, 15
- Clang 17, 18, 19, 20
- IntelOneAPI/IntelLLVM 2024, 2025
Dependencies
- We now use Doxygen version 1.9.8 to build our documentation (#3197).
- We bumped the minimal CMake version to 3.20 (#3314).
- Dependencies are now managed via CPM instead of submodules (#3328).
- The
build_systemdirectory was renamed tocmake(#3292).
Notes for package maintainers
Click to expand
For reference, you can have a look at the Debian package.
Alternative zlib implementation
If your distribution ships an alternative zlib library, for example, zlib-ng, some tests will fail:
The following tests FAILED:
164 - contrib/stream/gz_ostream_test (Failed)
166 - contrib/stream/bgzf_ostream_test (Failed)
203 - io/sam_file/sam_file_output_test (Failed)
210 - io/sequence_file/sequence_file_output_test (Failed)
224 - io/structure_file/structure_file_output_test (Failed)
This is because we are testing compression separately for some file formats and the expected output refers to (vanilla) zlib's output.
zlib-ng should be automatically detected and causes those checks to be skipped.
If this is not the case, or you are using another zlib alternative, you can manually skip those checks:
cmake <...> -DCMAKE_CXX_FLAGS="-DSEQAN3_TEST_SKIP_ZLIB_DEFLATE=1"
Dependencies
Dependencies are listed in cmake/package-lock.cmake.
We now use CPM for dependency management.
To use locally installed packages, pass -DCPM_USE_LOCAL_PACKAGES=ON to cmake, or set the environment variable CPM_USE_LOCAL_PACKAGES to ON. CPM documentation
If your locally installed packages has an older version, you may need to additionally pass the version to cmake.
The version variables can be found in cmake/package-lock.cmake.
For example, let's assume your googletest version is 1.14.0 instead of 1.15.2 listed in the package-lock.cmake.
CPM (or rather CMake's find_package) would not use your local version because 1.14.0 < 1.15.2.
Passing -DSEQAN3_GOOGLETEST_VERSION=1.14.0 to CMake will result in your local package being used.
If your local package version is newer, it should be used without any additional CMake arguments.
Post install tests
To configure tests with an installed seqan3 version, CPM needs to be available.
However, CPM isn't installed when seqan3 is installed.
To still configure the tests, you have to pass -DSEQAN3_TEST_CPM_DIR=<path> to your CMake command.
For example, -DSEQAN3_TEST_CPM_DIR=${SEQAN3_PACKAGE_SOURCE_DIRECTORY}/cmake ${SEQAN3_PACKAGE_SOURCE_DIRECTORY}/test/unit.
Where SEQAN3_PACKAGE_SOURCE_DIRECTORY is the downloaded source package.
SEQAN3_TEST_CPM_DIR points to the directory containing CPM.cmake.
What's Changed
Click to expand
- [MISC] Bump version by @eseiler in #3187
- [INFRA] Update contrib/std by @eseiler in #3189
- [INFRA] Update contrib by @eseiler in #3194
- [FEATURE] Clang support by @eseiler in #3195
- [FIX] Duplicate symbols by @eseiler in #3196
- [INFRA] Doxygen by @eseiler in #3197
- [FIX] API tests by @eseiler in #3199
- [DOC,INFRA] Doxygen groups by @eseiler in #3200
- [DOC] Fix alignment_result doc by @eseiler in #3204
- [FIX] std::result_of_t by @eseiler in #3208
- [FEATURE] libc++ support by @eseiler in #3209
- [FIX] libc++: header tests by @eseiler in #3210
- [FIX] libc++: performance tests by @eseiler in #3211
- [FIX] Disable SeqAn2 OpenMP benchmark on clang by @eseiler in #3214
- [INFRA] Add macOS libc++ CI by @eseiler in #3213
- [FIX] libc++: snippet tests by @eseiler in #3212
- [DOC] multiple use of section label by @eseiler in #3216
- fix: workaround compiling with debug mode by @SGSSGene in #3222
- [INFRA] Bump minimal CMake version by @eseiler in #3223
- [INFRA] Update documentation directory by @eseiler in #3226
- Patch/copyrightyear update by @SGSSGene in #3229
- [INFRA] Add IntelLLVM CI by @eseiler in #3225
- [INFRA] Rename master to main by @eseiler in #3230
- [FIX] Documentation by @eseiler in #3231
- [INFRA] Check markdown files for doxygen by @eseiler in #3233
- [DOC] Improve version selector by @eseiler in #3234
- doc,fix: variable bgzf_thread_count is no longer static by @SGSSGene in #3238
- [FIX] CPP23 by @eseiler in #3240
- [MISC] gcc 14 workaorund by @eseiler in #3241
- fix,doc: condition of the max number of 1s inside a shape. by @SGSSGene in #3243
- [MISC] Remove gcc14 workaround by @eseiler in #3245
- [MISC] Improve error message when using kmer_hash_view with invalid shapes by @eseiler in #3244
- [FEATURE] Allow setting warning stream for sam file by @eseiler in #3246
- [DOC] unknown tags will not throw by @eseiler in #3247
- [FIX] Missing include by @eseiler in #3252
- Refactor selection of Myers' bitparallel edit distance algorithm. by @rrahn in #3254
- [MISC] Refine unknown tag handling (HD/PG) by @eseiler in #3248
- [FIX] clang-18 by @eseiler in #3257
- [INFRA] Update SDSL by @eseiler in #3260
- [INFRA] Update contrib/std by @eseiler in #3261
- [FIX] Correctly propagate the constness of the inner range type. by @rrahn in #3262
- Fixes #3266: Incorrect begin/end of alignment for banded alignment by @rrahn in #3269
- Fix/issue_3264 by @rrahn in #3268
- [INFRA] CI and Compilers by @eseiler in #3270
- [FIX] Codecov by @eseiler in #3274
- [INFRA] Documentation preview by @eseiler in #3273
- [DOC] Remove vercel by @eseiler in #3275
- [MISC] clang-format-18 by @eseiler in #3276
- [INFRA] Nightly fixes by @eseiler in #3277
- [FIX] gcc-15: Better bogus memcpy fix by @eseiler in #3278
- Adds missing char8_t type to list of viable char types for which char adaption works. by @rrahn in #3279
- [INFRA] API Stability by @eseiler in #3281
- Updated PR for the printer design proposal by @rrahn in #3259
- [FEATURE] Accept user-defined tags by @eseiler in #3256
- [FIX] API tests by @eseiler in #3284
- Use explicit _MM_PERM_ENUM type for intrinsics. by @rrahn in #3285
- [INFRA] Use macos-14 by @eseiler in...
SeqAn 3.4.0-rc.4
This is the fourth release candidate for SeqAn 3.4.0
What's Changed (Selection)
- [INFRA] The SDSL dependency is now included as amalgamated header (#3334)
- [FIX,INFRA] SeqAn3 does no longer try to
find_packageitself (#3345) - [INFRA] Renamed SEQAN3_WITH_CEREAL to SEQAN3_HAS_CEREAL (#3337)
- [INFRA] gcc-15, clang-20, C++26 support (#3350, #3360, #3367, #3368)
Full Changelog: 3.4.0-rc.3...3.4.0-rc.4
SeqAn 3.4.0-rc.3
This is the third release candidate for SeqAn 3.4.0
What's Changed
- [INFRA] Bump RC by @eseiler in #3317
- [INFRA] Make packaging easier by @eseiler in #3318
- [INFRA] Update CPM Packages by @seqan-actions in #3316
- [FIX] cpp26: std::is_trivial_v is deprecated by @eseiler in #3319
- [DOC] Update by @eseiler in #3320
- [INFRA] Sanitizer CI by @eseiler in #3321
- [FIX,TEST] Do not check zlib output for alternative implementations by @eseiler in #3324
Full Changelog: 3.4.0-rc.2...3.4.0-rc.3
Notes for package maintainers
For reference, you can have a look at the Debian package.
Alternative zlib implementation
If your distribution ships an alternative zlib library, for example, zlib-ng, some tests will fail:
The following tests FAILED:
164 - contrib/stream/gz_ostream_test (Failed)
166 - contrib/stream/bgzf_ostream_test (Failed)
203 - io/sam_file/sam_file_output_test (Failed)
210 - io/sequence_file/sequence_file_output_test (Failed)
224 - io/structure_file/structure_file_output_test (Failed)
This is because we are testing compression separately for some file formats and the expected output refers to (vanilla) zlib's output.
zlib-ng should be automatically detected and causes those checks to be skipped.
If this is not the case, or you are using another zlib alternative, you can manually skip those checks:
cmake <...> -DCMAKE_CXX_FLAGS="-DSEQAN3_TEST_SKIP_ZLIB_DEFLATE=1"
Dependencies
Dependencies are listed in cmake/package-lock.cmake.
We now use CPM for dependency management.
To use locally installed packages, pass -DCPM_USE_LOCAL_PACKAGES=ON to cmake, or set the environment variable CPM_USE_LOCAL_PACKAGES to ON. CPM documentation
If your locally installed packages has an older version, you may need to additionally pass the version to cmake.
The version variables can be found in cmake/package-lock.cmake.
For example, let's assume your googletest version is 1.14.0 instead of 1.15.2 listed in the package-lock.cmake.
CPM (or rather CMake's find_package) would not use your local version because 1.14.0 < 1.15.2.
Passing -DSEQAN3_GOOGLETEST_VERSION=1.14.0 to CMake will result in your local package being used.
If your local package version is newer, it should be used without any additional CMake arguments.
Post install tests
To configure tests with an installed seqan3 version, CPM needs to be available.
However, CPM isn't installed when seqan3 is installed.
To still configure the tests, you have to pass -DSEQAN3_TEST_CPM_DIR=<path> to your CMake command.
For example, -DSEQAN3_TEST_CPM_DIR=${SEQAN3_PACKAGE_SOURCE_DIRECTORY}/cmake ${SEQAN3_PACKAGE_SOURCE_DIRECTORY}/test/unit.
Where SEQAN3_PACKAGE_SOURCE_DIRECTORY is the downloaded source package.
SEQAN3_TEST_CPM_DIR points to the directory containing CPM.cmake.
SeqAn 3.4.0-rc.2
This is the second release candidate for SeqAn 3.4.0
What's Changed
Click to expand
- Bump actions/cache from 3 to 4 by @dependabot in #3224
- [INFRA] Update documentation directory by @eseiler in #3226
- Bump peter-evans/create-or-update-comment from 3 to 4 by @dependabot in #3228
- Patch/copyrightyear update by @SGSSGene in #3229
- [INFRA] Add IntelLLVM CI by @eseiler in #3225
- [INFRA] Rename master to main by @eseiler in #3230
- [FIX] Documentation by @eseiler in #3231
- [INFRA] Check markdown files for doxygen by @eseiler in #3233
- [DOC] Improve version selector by @eseiler in #3234
- doc,fix: variable bgzf_thread_count is no longer static by @SGSSGene in #3238
- [FIX] CPP23 by @eseiler in #3240
- [MISC] gcc 14 workaorund by @eseiler in #3241
- fix,doc: condition of the max number of 1s inside a shape. by @SGSSGene in #3243
- [MISC] Remove gcc14 workaround by @eseiler in #3245
- [MISC] Improve error message when using kmer_hash_view with invalid shapes by @eseiler in #3244
- [FEATURE] Allow setting warning stream for sam file by @eseiler in #3246
- [DOC] unknown tags will not throw by @eseiler in #3247
- Bump fsfe/reuse-action from 2 to 3 by @dependabot in #3249
- [FIX] Missing include by @eseiler in #3252
- Refactor selection of Myers' bitparallel edit distance algorithm. by @rrahn in #3254
- [MISC] Refine unknown tag handling (HD/PG) by @eseiler in #3248
- [FIX] clang-18 by @eseiler in #3257
- [INFRA] Update SDSL by @eseiler in #3260
- [INFRA] Update contrib/std by @eseiler in #3261
- [FIX] Correctly propagate the constness of the inner range type. by @rrahn in #3262
- Bump fsfe/reuse-action from 3 to 4 by @dependabot in #3263
- Fixes #3266: Incorrect begin/end of alignment for banded alignment by @rrahn in #3269
- Fix/issue_3264 by @rrahn in #3268
- [INFRA] CI and Compilers by @eseiler in #3270
- [FIX] Codecov by @eseiler in #3274
- [INFRA] Documentation preview by @eseiler in #3273
- [DOC] Remove vercel by @eseiler in #3275
- [MISC] clang-format-18 by @eseiler in #3276
- [INFRA] Nightly fixes by @eseiler in #3277
- [FIX] gcc-15: Better bogus memcpy fix by @eseiler in #3278
- Adds missing char8_t type to list of viable char types for which char adaption works. by @rrahn in #3279
- [INFRA] API Stability by @eseiler in #3281
- Updated PR for the printer design proposal by @rrahn in #3259
- [FEATURE] Accept user-defined tags by @eseiler in #3256
- [FIX] API tests by @eseiler in #3284
- Use explicit _MM_PERM_ENUM type for intrinsics. by @rrahn in #3285
- [INFRA] Use macos-14 by @eseiler in #3287
- [INFRA] Fail CI if ctest finds no tests by @eseiler in #3290
- [MISC] Add -Wnrvo warning by @eseiler in #3289
- [INFRA] Acknowledge CMake 3.30 policies by @eseiler in #3291
- [INFRA] Use CPM by @eseiler in #3288
- [INFRA] Rename build_system to cmake by @eseiler in #3292
- [FIX] CI by @eseiler in #3293
- [FIX,INFRA] Cron: Always create comment body by @eseiler in #3294
- [INFRA] Remove GIT_TAG for URL download by @eseiler in #3295
- [INFRA] CPM find_package and package update cron by @eseiler in #3296
- [INFRA] Add clang-19 by @eseiler in #3298
- [INFRA] Extend SEQAN3_WORKAROUND_GCC_BOGUS_MEMCPY by @eseiler in #3297
- [FIX] sam_file_output by @eseiler in #3300
- [FIX] ciso646 is deprecated by @eseiler in #3302
- fix, doc: we don't have to talk about submodules anymore by @SGSSGene in #3301
- [TEST] Skip parallel tests on machines having a single CPU by @sanvila in #3303
- [INFRA] Update CPM Packages by @seqan-actions in #3304
- Bump fsfe/reuse-action from 4 to 5 by @dependabot in #3305
- [INFRA] Add CodeQL CI by @eseiler in #3306
- [FIX] CodeQL reports by @eseiler in #3307
- [INFRA] Update CPM Packages by @seqan-actions in #3308
- [INFRA] Add CodeChecker by @eseiler in #3310
- [INFRA] Update CPM Packages by @seqan-actions in #3311
- [FIX] version check URL, default for prompt by @eseiler in #3312
- [INFRA] Bump CMake by @eseiler in #3314
- [MISC] Use cpp23 by @eseiler in #3313
- [INFRA] Bump RC by @eseiler in #3315
Full Changelog: 3.4.0-rc.1...3.4.0-rc.2
SeqAn 3.4.0-rc.1
This is the first release candidate for SeqAn 3.4.0
SeqAn 3.4.0 offers support for GCC 11/12/13, and new clang 17
SeqAn 3.3.0
We are glad to announce the SeqAn 3.3.0 release that has a major compiler update:
We dropped GCC 10 and we added GCC 13 support.
While we will present essential changes of the 3.3.0 release in this message, you can also find a comprehensive list of the changes in our changelog.
- Get to know SeqAn3 with our tutorials.
- Visit our API documentation.
- Check out our SeqAn3 Cookbook with all the copy & paste snippets you need.
🎉 New Features
Alignment
- The function
seqan3::alignment_from_cigarcreates an alignment from a CIGAR vector (#3057) or a CIGAR string (#3077). - The function
seqan3::cigar_from_alignmentcreates a CIGAR vector from an alignment (#3057).
Alphabet
- Improved performance of vector assignment for alphabets by a factor 2.5 (#3038).
- Improved performance of
seqan3::dna4::complement()(#3026). - Char literals returning
std::vectorare nowconstexprif supported by the compiler (#3073).
I/O
- Made
seqan3::sam_file_header::program_info_teasier to copy (#3145). - Reading SAM/BAM files is 2x faster than before (#3106).
Search
- The uncompressed
seqan3::interleaved_bloom_filter(IBF) can now be constructed from a compressed IBF (#3082).
🐛 Notable bug fixes
Alignment
- Resolved an issue resulting in a wrong alignment score (#3098).
I/O
- Fixed writing an empty SAM-BAM file resulting in an invalid file (#3081).
seqan3::sequence_file_input_traitsnow allowscharas a sequence alphabet (#3128).
Utility
- Fixed spin delay having no effect on the PowerPC platform (#3129).
🛠️ Notable API changes
Alignment
- The fields
seqan3::field::offsetandseqan3::field::alignmenthave been removed fromseqan3::sam_record(#3058, #3089).
Forseqan3::field::offset, please check the soft clipping of the CIGAR string (seqan3::sam_record::cigar()).
Forseqan3::field::alignment, please useseqan3::alignment_from_cigar.
🔌 External dependencies
- Dropped support for GCC 10 (#3148).
- Added support for GCC 13 (#3148).
- We require at least CMake 3.16 for our test suite. Note that the minimum requirement for using SeqAn3 is unchanged (#3050).
- We now use Doxygen version 1.9.6 to build our documentation (#3116).
- Updated sdsl-lite to 3.0.3 (#3170, #3174).
- Compatibility with SeqAn2: SeqAn2's namespace was changed from
seqantoseqan2. For interoperability, an up-to-date checkout of SeqAn2's main branch is required (#3156).
SeqAn 3.3.0-rc.2
This is the second release candidate for SeqAn 3.3.0
SeqAn 3.3.0-rc.1
This is the first release candidate for SeqAn 3.3.0
SeqAn 3.2.0
We are excited to announce the SeqAn 3.2.0 release that has a major compiler update:
We dropped GCC 7, GCC 8, and GCC 9 and we added GCC 12 support.
As a consequence, we also dropped C++17 support and are fully C++20 compatible.
Furthermore, we could drop the range-v3 dependency completely, so be sure to delete the submodule after updating to SeqAn 3.2.0!
While we will present essential changes of the 3.2.0 release in this message, you can also find a comprehensive list of the changes in our changelog.
Get to know SeqAn3 with our tutorials.
- Visit our API documentation.
- See the porting guide for some help on porting from SeqAn2.
- Check out our SeqAn3 Cookbook. It contains a listing of code examples on how to perform particular tasks using the library.
🎉 New Features
We added GCC 12 support!
Alphabet
seqan3::cigarcan now be assigned fromstd::string_viewwhich is much faster (no allocations) than the former assignment fromseqan3::small_string.- The new view
seqan3::views::char_strictly_tobehaves likeseqan3::views::char_to, but throws on invalid input.
I/O
- The new option
seqan3::sequence_file_option::fasta_ignore_blanks_before_idlets you keep blanks before IDs when reading FASTA files.
This ensures a "perfekt roundtrip" when reading and writing FASTA files.
E.g., fasta_ignore_blanks_before_id = true (default):> some_idwill only store"some_id"as ID.
E.g., fasta_ignore_blanks_before_id = false:> some_idwill store" some_id"as ID.
Search
- Improved performance of
seqan3::counting_vector::operator+=by 25%.
Utility
- Added
seqan3::list_traits::repeat.
🛠️ Notable API changes
seqan3::views::to is no view anymore but C++23 conform
We replaced seqan3::views::to (implemented via range-v3) with seqan3::ranges::to (implemented in SeqAn3). seqan3::ranges::to provides a subset of C++23's std::ranges::to and will be replaced with the STL-equivalent in a future version.
Since it is not a view anymore, it cannot be properly deprecated. Please keep this in mind if you encounter errors with seqan3::views::to.
Example:
auto vec = std::views::iota(0, 10) | seqan3::views::to<std::vector>; // Before
auto vec = std::views::iota(0, 10) | seqan3::ranges::to<std::vector>(); // AfterRemoved several headers in seqan3/std/
All headers in seqan3/std/ except charconv and new have been deprecated, since their STL-equivalents are available in GCC >= 10. Please use the equivalent std includes.
Example:
// Before
#include <seqan3/std/bit>
#include <seqan3/std/charconv>
// After
#include <bit>
#include <seqan3/std/charconv>Removed namespace std::cpp20
The namespace std::cpp20 has been deprecated, since, e.g., the implementation of the std::back_inserter among others are now C++20-conform with GCC >= 10. Please use the std:: namespace.
Example:
std::ranges::copy(range, std::cpp20::back_inserter(other_range)); // Before
std::ranges::copy(range, std::back_inserter(other_range)); // After🐛 Notable bug fixes
Core
- Added missing implementations for AVX512 .
IO
- FASTA files containing IDs starting with
>, e.g.,> >MyID, are now parsed correctly.
Search
- Relaxed
kmer_hash_view::iteratordifference requirement . - Relaxed
seqan3::views::minimiserrequirements to be C++20-compatible. - Relaxed
seqan3::views::kmer_hashrequirements to be C++20-compatible.
Utility
seqan3::views::single_pass_inputcannot propagate thestd::ranges::output_rangeproperty because it cannot satisfy the following requirement:*it++ = value; // must be the same as *it = value; ++it; // but it actually would be the same as ++it; *it = value;
- Fixed signature of
seqan3::detail::store_sse4. This might have affected some public API. - Relaxed
seqan3::views::to_simdrequirements to be C++20-compatible.
🔌 External dependencies
- GCC 7, 8, and 9 have been removed.
- SeqAn 3.2.0 is known to compile with GCC 10.3, 11.3, and 12.1. Future versions might work, but were not yet available at the time of this release.
- Other compilers, e.g., clang, and MSVC, are known to not be compatible with SeqAn 3.2.0.
- We removed range-v3, and now require cereal 1.3.2 as well as sdsl-lite 3.0.1.
- We use doxygen 1.9.4 to build our documentation.
SeqAn 3.2.0-rc.1
This is the first release candidate for SeqAn 3.2.0
You can find a list of changes in our changelog.
Notable API-changes (not final)
- We removed the
std::cpp20namespace. We usestdinstead, since all supported compilers provide the C++20 versions of the entities we used withstd::cpp20. - We replaced
seqan3::views::towithseqan3::range::to. As planned for C++23, it is no longer a view, but a function object.seqan3::views::to<std::vector>changes toseqan3::range::to<std::vector>().
Dependencies
- cereal bumped to
1.3.2 - sdsl-lite bumped to
3.0.1 - range-v3 removed
- For documentation: doxygen bumped to
1.9.4