16#define SEQAN3_STR_HELPER(x) #x
17#define SEQAN3_STR(x) SEQAN3_STR_HELPER(x)
26#ifndef SEQAN3_DOXYGEN_ONLY
27# define SEQAN3_DOXYGEN_ONLY(x)
43#if defined(__GNUC__) && !defined(__llvm__) && !defined(__INTEL_COMPILER) && !defined(__INTEL_LLVM_COMPILER)
44# define SEQAN3_COMPILER_IS_GCC 1
46# define SEQAN3_COMPILER_IS_GCC 0
49#if SEQAN3_DOXYGEN_ONLY(1) 0
51# define SEQAN3_DISABLE_COMPILER_CHECK
58#if SEQAN3_COMPILER_IS_GCC && (__GNUC__ < 12)
59# error "At least GCC 12 is needed."
63#if defined(__INTEL_LLVM_COMPILER) && (__INTEL_LLVM_COMPILER < 20240000)
64# error "At least Intel OneAPI 2024 is needed."
68#if defined(__clang__) && defined(__clang_major__) && (__clang_major__ < 17)
69# error "At least Clang 17 is needed."
76#if defined(_LIBCPP_VERSION) && (_LIBCPP_VERSION < 170000)
77# error "At least libc++ 17 is required."
80#if defined(_GLIBCXX_RELEASE) && (_GLIBCXX_RELEASE < 12)
81# error "At least libstdc++ 12 is needed."
90# if (__cplusplus < 202100)
91# error "SeqAn3 requires C++23, make sure that you have set -std=c++23."
94# error "This is not a C++ compiler."
102#if __has_include(<seqan3/version.hpp>)
105# error SeqAn3 include directory not set correctly. Forgot to add -I ${INSTALLDIR}/include to your CXXFLAGS?
113#ifndef SEQAN3_HAS_ZLIB
114# if __has_include(<zlib.h>)
115# define SEQAN3_HAS_ZLIB 1
117# define SEQAN3_HAS_ZLIB 0
126#ifndef SEQAN3_HAS_BZIP2
127# if SEQAN3_HAS_ZLIB && __has_include(<bzlib.h>)
128# define SEQAN3_HAS_BZIP2 1
130# define SEQAN3_HAS_BZIP2 0
139#ifndef SEQAN3_HAS_CEREAL
140# if __has_include(<cereal/cereal.hpp>)
141# define SEQAN3_HAS_CEREAL 1
143# define SEQAN3_HAS_CEREAL 0
148#if !SEQAN3_HAS_CEREAL
154# define CEREAL_SERIALIZE_FUNCTION_NAME serialize
155# define CEREAL_LOAD_FUNCTION_NAME load
156# define CEREAL_SAVE_FUNCTION_NAME save
157# define CEREAL_LOAD_MINIMAL_FUNCTION_NAME load_minimal
158# define CEREAL_SAVE_MINIMAL_FUNCTION_NAME save_minimal
169# define SEQAN3_PRAGMA(non_string_literal) _Pragma(#non_string_literal)
173#ifndef SEQAN3_DEPRECATED_HEADER
174# ifndef SEQAN3_DISABLE_DEPRECATED_WARNINGS
175# define SEQAN3_DEPRECATED_HEADER(message) SEQAN3_PRAGMA(GCC warning message)
177# define SEQAN3_DEPRECATED_HEADER(message)
182#ifndef SEQAN3_REMOVE_DEPRECATED_340
183# ifndef SEQAN3_DEPRECATED_340
184# ifndef SEQAN3_DISABLE_DEPRECATED_WARNINGS
185# define SEQAN3_DEPRECATED_340 \
186 [[deprecated("This will be removed in SeqAn-3.4.0; please see the documentation.")]]
188# define SEQAN3_DEPRECATED_340
195#if defined(SEQAN3_WITH_CEREAL) && defined(SEQAN3_HAS_CEREAL) && SEQAN3_WITH_CEREAL != SEQAN3_HAS_CEREAL
196# error "SEQAN3_WITH_CEREAL is deprecated and has been replaced by SEQAN3_HAS_CEREAL. These two macros do not expand to the same value. Please use SEQAN3_HAS_CEREAL."
198#ifndef SEQAN3_DISABLE_DEPRECATED_WARNINGS
199# ifdef SEQAN3_WITH_CEREAL
200# pragma GCC warning "SEQAN3_WITH_CEREAL is deprecated and will be removed in the next version; please use SEQAN3_HAS_CEREAL instead."
202# define SEQAN3_WITH_CEREAL \
203 SEQAN3_PRAGMA(GCC warning "SEQAN3_WITH_CEREAL is deprecated and will be removed in the next version; please use SEQAN3_HAS_CEREAL instead.") \
207# ifndef SEQAN3_WITH_CEREAL
208# define SEQAN3_WITH_CEREAL SEQAN3_HAS_CEREAL
218#ifndef SEQAN3_WORKAROUND_VIEW_PERFORMANCE
220# define SEQAN3_WORKAROUND_VIEW_PERFORMANCE 1
223#ifndef SEQAN3_WORKAROUND_GCC_BOGUS_MEMCPY
224# if SEQAN3_COMPILER_IS_GCC
226# define SEQAN3_WORKAROUND_GCC_BOGUS_MEMCPY 1
230# define SEQAN3_CONCAT_STRING(x, y) SEQAN3_PRAGMA(x #y)
231# define SEQAN3_GCC_DIAGNOSTIC_IGNORE1(x, ...) \
232 SEQAN3_PRAGMA(GCC diagnostic push) \
233 SEQAN3_CONCAT_STRING(GCC diagnostic ignored, x)
234# define SEQAN3_GCC_DIAGNOSTIC_IGNORE2(x, y) \
235 SEQAN3_PRAGMA(GCC diagnostic push) \
236 SEQAN3_CONCAT_STRING(GCC diagnostic ignored, x) \
237 SEQAN3_CONCAT_STRING(GCC diagnostic ignored, y)
241# define SEQAN3_GCC_DIAGNOSTIC_IGNORE(x, y, n, ...) SEQAN3_GCC_DIAGNOSTIC_IGNORE##n(x, y)
244# define SEQAN3_WORKAROUND_GCC_BOGUS_MEMCPY_START(x, ...) SEQAN3_GCC_DIAGNOSTIC_IGNORE(x, ##__VA_ARGS__, 2, 1)
245# define SEQAN3_WORKAROUND_GCC_BOGUS_MEMCPY_STOP SEQAN3_PRAGMA(GCC diagnostic pop)
251# define SEQAN3_WORKAROUND_GCC_BOGUS_MEMCPY 0
268# define SEQAN3_WORKAROUND_GCC_BOGUS_MEMCPY_START(...)
277# define SEQAN3_WORKAROUND_GCC_BOGUS_MEMCPY_STOP
292#ifndef SEQAN3_WORKAROUND_GCC_NO_CXX11_ABI
293# if defined(_GLIBCXX_USE_CXX11_ABI) && _GLIBCXX_USE_CXX11_ABI == 0
294# define SEQAN3_WORKAROUND_GCC_NO_CXX11_ABI 1
296# define SEQAN3_WORKAROUND_GCC_NO_CXX11_ABI 0
307#if __cpp_lib_constexpr_vector >= 201907L && (defined(_LIBCPP_VERSION) || !defined(_GLIBCXX_DEBUG))
308# define SEQAN3_WORKAROUND_LITERAL constexpr
310# define SEQAN3_WORKAROUND_LITERAL inline
313#if SEQAN3_DOXYGEN_ONLY(1) 0
315# define SEQAN3_DISABLE_LEGACY_STD_DIAGNOSTIC
318#if defined(_GLIBCXX_USE_CXX11_ABI) && _GLIBCXX_USE_CXX11_ABI == 0
319# ifndef SEQAN3_DISABLE_LEGACY_STD_DIAGNOSTIC
321 "We do not actively support compiler that have -D_GLIBCXX_USE_CXX11_ABI=0 set, and it might be that SeqAn does not compile due to this. It is known that all compiler of CentOS 7 / RHEL 7 set this flag by default (and that it cannot be overridden!). Note that these versions of the OSes are community-supported (see https://docs.seqan.de/seqan3/main_user/about_api.html#platform_stability for more details). You can disable this warning by setting -DSEQAN3_DISABLE_LEGACY_STD_DIAGNOSTIC."
331#undef SEQAN3_STR_HELPER
Provides SeqAn version macros and global variables.