Import volk_3.1.0-3.debian.tar.xz
authorA. Maitland Bottoms <bottoms@debian.org>
Sat, 16 Dec 2023 14:31:28 +0000 (09:31 -0500)
committerA. Maitland Bottoms <bottoms@debian.org>
Sat, 16 Dec 2023 14:31:28 +0000 (09:31 -0500)
[dgit import tarball volk 3.1.0-3 volk_3.1.0-3.debian.tar.xz]

29 files changed:
changelog [new file with mode: 0644]
control [new file with mode: 0644]
copyright [new file with mode: 0644]
libvolk-bin.install [new file with mode: 0644]
libvolk-bin.manpages [new file with mode: 0644]
libvolk-dev.install [new file with mode: 0644]
libvolk-doc.doc-base [new file with mode: 0644]
libvolk-doc.docs [new file with mode: 0644]
libvolk3.1.install [new file with mode: 0644]
not-not-installed [new file with mode: 0644]
patches/0001-Allow-for-rounding-error-in-float-to-int-conversions.patch [new file with mode: 0644]
patches/0002-Allow-for-rounding-error-in-volk_32fc_s32f_magnitude.patch [new file with mode: 0644]
patches/0003-Remove-broken-sse_32-kernels.patch [new file with mode: 0644]
patches/0004-Fix-flaky-fm_detect-test.patch [new file with mode: 0644]
patches/0005-Fix-flaky-mod_range-test.patch [new file with mode: 0644]
patches/0006-Allow-for-rounding-error-in-float-to-int-interleave.patch [new file with mode: 0644]
patches/0007-Express-version-information-in-decimal.patch [new file with mode: 0644]
patches/doxygen-pdf [new file with mode: 0644]
patches/omit-doxygen-build-paths [new file with mode: 0644]
patches/optional-static-apps [new file with mode: 0644]
patches/series [new file with mode: 0644]
patches/update-doxygen [new file with mode: 0644]
rules [new file with mode: 0755]
source/format [new file with mode: 0644]
upstream/metadata [new file with mode: 0644]
volk-config-info.1 [new file with mode: 0644]
volk_modtool.1 [new file with mode: 0644]
volk_profile.1 [new file with mode: 0644]
watch [new file with mode: 0644]

diff --git a/changelog b/changelog
new file mode 100644 (file)
index 0000000..9c32224
--- /dev/null
+++ b/changelog
@@ -0,0 +1,615 @@
+volk (3.1.0-3) unstable; urgency=medium
+
+  * add powerpc to cpu-features dependency
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Sat, 16 Dec 2023 09:31:28 -0500
+
+volk (3.1.0-2) unstable; urgency=medium
+
+  * Avoid ORC on x32, led to test failures
+  * include argilo-volk/all-i386-patches
+  * update available cpu-features architecture list
+  * Express version information in decimal
+  * add debian/upstream/metadata
+  * clean __pycahe__ (Closes: #1048046)
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Fri, 15 Dec 2023 17:57:14 -0500
+
+volk (3.1.0-1) experimental; urgency=medium
+
+  * New upstream release
+    Improved CMake build
+    Better tests
+    New kernel API (old API still available)
+    New and Updated kernels
+  * Upload to experimental for soversion bump
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Tue, 05 Dec 2023 18:12:20 -0500
+
+volk (3.0.0-2) unstable; urgency=medium
+
+  * upload to unstable
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Sat, 15 Jul 2023 21:58:53 -0400
+
+volk (3.0.0-1) experimental; urgency=medium
+
+  * New upstream release
+     - License switch to LGPLv3+
+     - Fix build for 32 bit arm with neon
+     - Add experimental support for MIPS and RISC-V
+  * Upload to experimental for package renames and soversion bump
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Sat, 14 Jan 2023 14:01:06 -0500
+
+volk (2.5.2-3) unstable; urgency=medium
+
+  * orc 1:0.4.33-1 dropped building static library,
+  so now volk will drop building its static library too. (Closes: #1026593)
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Tue, 20 Dec 2022 20:03:23 -0500
+
+volk (2.5.2-2) unstable; urgency=medium
+
+  * revert changes to kernels/volk/volk_8u_x2_encodeframepolar_8u.h
+    made by make-acc-happy patch since version 1.3-1 (Closes: #1021856)
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Sat, 15 Oct 2022 23:41:48 -0400
+
+volk (2.5.2-1) unstable; urgency=medium
+
+  * New upstream release.
+  * volk_8u_x4_conv_k7_r2_8u
+    - Add NEON implementation `neonspiral` via `sse2neon.h`
+  * Fixes
+    - Fix out-of-bounds reads
+    - Fix broken neon kernels
+    - Fix float to int conversion
+  * CMake
+    - Suppress superfluous warning
+    - Fix Python install path calculation and documentation
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Sun, 04 Sep 2022 12:00:56 -0400
+
+volk (2.5.1-2) unstable; urgency=medium
+
+  * VolkPython use posix prefix scheme (Closes: #1009394)
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Tue, 12 Apr 2022 18:39:33 -0400
+
+volk (2.5.1-1) unstable; urgency=medium
+
+  * New upstream release.
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Sun, 13 Feb 2022 00:18:58 -0500
+
+volk (2.5.0-2) unstable; urgency=medium
+
+  * upload to unstable
+  * with some upstream bugfixes
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Thu, 21 Oct 2021 23:30:05 -0400
+
+volk (2.5.0-1) experimental; urgency=medium
+
+  * New upstream release
+  * Use libcpu-features-dev on powerpc and x32 (Closes: #978602)
+  * Mention volk-config-info and volk_modtool in description (Closes: #989263)
+  * Upload to experimental for soversion bump
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Thu, 10 Jun 2021 18:29:47 -0400
+
+volk (2.4.1-2) unstable; urgency=medium
+
+  [ Shengjing Zhu ]
+  * Use system cpu_features package
+
+  [ A. Maitland Bottoms ]
+  * Adopt Use system cpu_features package patch (Closes: #978096)
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Sun, 27 Dec 2020 15:16:07 -0500
+
+volk (2.4.1-1) unstable; urgency=medium
+
+  * New upstream release
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Thu, 17 Dec 2020 23:53:21 -0500
+
+volk (2.4.0-4) unstable; urgency=medium
+
+  * skip cpu_features on "Unsupported OS" kFreeBSD
+  * bump Standards-Version - no other changes.
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Tue, 15 Dec 2020 19:53:16 -0500
+
+volk (2.4.0-3) unstable; urgency=medium
+
+  * Fix binary-indep build (Closes: #976300)
+  * Upload to unstable
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Thu, 03 Dec 2020 20:43:29 -0500
+
+volk (2.4.0-2) experimental; urgency=medium
+
+  * Make use of cpu_features a CMake option with sensible defaults per arch
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Mon, 30 Nov 2020 16:19:19 -0500
+
+volk (2.4.0-1) experimental; urgency=medium
+
+  * New upstream release
+  * cpu_features git submodule packaged as cpu-features source component.
+  * Upload to experimental for soversion bump
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Sun, 22 Nov 2020 12:35:43 -0500
+
+volk (2.3.0-3) unstable; urgency=medium
+
+  * update to v2.3.0-14-g91e5d07
+    emit an emms instruction after using the mmx extension
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Tue, 30 Jun 2020 19:48:20 -0400
+
+volk (2.3.0-2) unstable; urgency=medium
+
+  * Upload to unstable
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Mon, 11 May 2020 07:26:03 -0400
+
+volk (2.3.0-1) experimental; urgency=medium
+
+  * New upstream release, to experimental for soversion bump
+  * Kernels
+    - volk: accurate exp kernel
+        - exp: Rename SSE4.1 to SSE2 kernel
+    - Add 32f_s32f_add_32f kernel
+        - This kernel adds in vector + scalar functionality
+    - Fix the broken index max kernels
+    - Treat the mod_range puppet as such
+    - Add puppet for power spectral density kernel
+    - Updated log10 calcs to use faster log2 approach
+    - fix: Use unaligned load
+    - divide: Optimize complexmultiplyconjugate
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Sat, 09 May 2020 15:42:23 -0400
+
+volk (2.2.1-3) unstable; urgency=medium
+
+  * update to v2.2.1-34-gd4756c5
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Sun, 05 Apr 2020 10:37:46 -0400
+
+volk (2.2.1-2) unstable; urgency=medium
+
+  * update to v2.2.1-11-gfaf230e
+  * cmake: Remove the ORC from the VOLK public link interface
+  * Fix the broken index max kernels
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Fri, 27 Mar 2020 21:48:10 -0400
+
+volk (2.2.1-1) unstable; urgency=high
+
+  * New upstream bugfix release
+    reason for high urgency:
+    - Fix loop bound in AVX rotator (only one fixed in 2.2.0-3)
+    - Fix out-of-bounds read in AVX2 square dist kernel
+    - Fix length checks in AVX2 index max kernels
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Mon, 24 Feb 2020 18:08:05 -0500
+
+volk (2.2.0-3) unstable; urgency=high
+
+  * Update to v2.2.0-6-g5701f8f
+    reason for high urgency:
+    - Fix loop bound in AVX rotator
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Sun, 23 Feb 2020 23:49:18 -0500
+
+volk (2.2.0-2) unstable; urgency=medium
+
+  * Upload to unstable
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Tue, 18 Feb 2020 17:56:58 -0500
+
+volk (2.2.0-1) experimental; urgency=medium
+
+  * New upstream release
+    - Remove build dependency on python six
+    - Fixup VolkConfigVersion
+    - add volk_version.h
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Sun, 16 Feb 2020 18:25:20 -0500
+
+volk (2.1.0-2) unstable; urgency=medium
+
+  * Upload to unstable
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Sun, 05 Jan 2020 23:17:57 -0500
+
+volk (2.1.0-1) experimental; urgency=medium
+
+  * New upstream release
+    - The AVX FMA rotator bug is fixed
+    - VOLK offers `volk::vector<>` for C++ to follow RAII
+    - Use C++17 `std::filesystem`
+        - This enables VOLK to be built without Boost if available!
+    - lots of bugfixes
+    - more optimized kernels, especially more NEON versions
+  * Upload to experimental for new ABI library package libvolk2.1
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Sun, 22 Dec 2019 10:27:36 -0500
+
+volk (2.0.0-3) unstable; urgency=medium
+
+  * update to v2.0.0-4-gf04a46f
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Thu, 14 Nov 2019 22:47:23 -0500
+
+volk (2.0.0-2) unstable; urgency=medium
+
+  * Upload to unstable
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Mon, 12 Aug 2019 22:49:11 -0400
+
+volk (2.0.0-1) experimental; urgency=medium
+
+  * New upstream release
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Wed, 07 Aug 2019 23:31:20 -0400
+
+volk (1.4-4) unstable; urgency=medium
+
+  * working volk_modtool with Python 3
+  * build and install libvolk.a
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Mon, 29 Oct 2018 01:32:05 -0400
+
+volk (1.4-3) unstable; urgency=medium
+
+  * update to v1.4-9-g297fefd
+    Added an AVX protokernel for volk_32fc_x2_32f_square_dist_scalar_mult_32f
+    fixed a buffer over-read and over-write in
+     volk_32fc_x2_s32f_square_dist_scalar_mult_32f_a_avx
+    Fix 32u_reverse_32u for ARM
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Sat, 12 May 2018 15:25:04 -0400
+
+volk (1.4-2) unstable; urgency=medium
+
+  * Upload to unstable, needed by gnuradio (>= 3.7.12.0)
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Tue, 03 Apr 2018 01:03:19 -0400
+
+volk (1.4-1) experimental; urgency=medium
+
+  * New upstream release
+    upstream changelog http://libvolk.org/release-v14.html
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Tue, 27 Mar 2018 22:57:42 -0400
+
+volk (1.3.1-1) unstable; urgency=medium
+
+  * New upstream bugfix release
+  * Refresh all debian patches for use with git am
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Tue, 27 Mar 2018 21:54:29 -0400
+
+volk (1.3-3) unstable; urgency=medium
+
+  * update to v1.3-23-g0109b2e
+  * update debian/libvolk1-dev.abi.tar.gz.amd64
+  * Add breaks/replaces gnuradio (<=3.7.2.1) (LP: #1614235)
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Sun, 04 Feb 2018 13:12:21 -0500
+
+volk (1.3-2) unstable; urgency=medium
+
+  * update to v1.3-16-g28b03a9
+    apps: fix profile update reading end of lines
+    qa: lower tolerance for 32fc_mag to fix issue #96
+  * include upstream master patch to sort input files
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Sun, 27 Aug 2017 13:44:55 -0400
+
+volk (1.3-1) unstable; urgency=medium
+
+  * New upstream release
+  * The index_max kernels were named with the wrong output datatype. To
+    fix this there are new kernels that return a 32u (int32_t) and the
+    existing kernels had their signatures changed to return 16u (int16_t).
+  * The output to stdout and stderr has been shuffled around. There is no
+    longer a message that prints what VOLK machine is being used and the
+    warning messages go to stderr rather than stdout.
+  * The 32fc_index_max kernels previously were only accurate to the SSE
+    register width (4 points). This was a pretty serious and long-lived
+    bug that's been fixed and the QA updated appropriately.
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Sat, 02 Jul 2016 16:30:47 -0400
+
+volk (1.2.2-2) unstable; urgency=medium
+
+  * update to v1.2.2-11-g78c8bc4 (to follow gnuradio maint branch)
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Sun, 19 Jun 2016 14:44:15 -0400
+
+volk (1.2.2-1) unstable; urgency=medium
+
+  * New upstream release
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Fri, 08 Apr 2016 00:12:10 -0400
+
+volk (1.2.1-2) unstable; urgency=medium
+
+  * Upstream patches:
+    Fix some CMake complaints
+    The fix for compilation with cmake 3.5
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Wed, 23 Mar 2016 17:47:54 -0400
+
+volk (1.2.1-1) unstable; urgency=medium
+
+  * New upstream release
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Sun, 07 Feb 2016 19:38:32 -0500
+
+volk (1.2-1) unstable; urgency=medium
+
+  * New upstream release
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Thu, 24 Dec 2015 20:28:13 -0500
+
+volk (1.1.1-5) experimental; urgency=medium
+
+  * update to v1.1.1-22-gef53547 to support gnuradio 3.7.9
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Fri, 11 Dec 2015 13:12:55 -0500
+
+volk (1.1.1-4) unstable; urgency=medium
+
+  * more lintian fixes
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Wed, 25 Nov 2015 21:49:58 -0500
+
+volk (1.1.1-3) unstable; urgency=medium
+
+  * Lintian fixes Pre-Depends
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Thu, 19 Nov 2015 21:24:27 -0500
+
+volk (1.1.1-2) unstable; urgency=medium
+
+  * Note that libvolk1-dev replaces files in gnuradio-dev versions <<3.7.8
+    (Closes: #802646) again. Thanks Andreas Beckmann.
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Fri, 13 Nov 2015 18:45:49 -0500
+
+volk (1.1.1-1) unstable; urgency=medium
+
+  * New upstream release
+  * New architectures exist for the AVX2 and FMA ISAs.
+  * The profiler now generates buffers that are vlen + a tiny amount and
+    generates random data to fill buffers. This is intended to catch bugs
+    in protokernels that write beyond num_points.
+  * Note that libvolk1-dev replaces files in earlier gnuradio-dev versions
+    (Closes: #802646)
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Sun, 01 Nov 2015 18:45:43 -0500
+
+volk (1.1-4) unstable; urgency=medium
+
+  * update to v1.1-12-g264addc
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Tue, 29 Sep 2015 23:41:50 -0400
+
+volk (1.1-3) unstable; urgency=low
+
+  * drop dh_acc to get reproducible builds
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Fri, 11 Sep 2015 22:57:06 -0400
+
+volk (1.1-2) unstable; urgency=low
+
+  * use dh-acc
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Mon, 07 Sep 2015 15:45:20 -0400
+
+volk (1.1-1) unstable; urgency=medium
+
+  * re-organize package naming convention
+  * New upstream release tag v1.1
+  New architectures exist for the AVX2 and FMA ISAs. Along
+  with the build-system support the following kernels have
+  no proto-kernels taking advantage of these architectures:
+
+  * 32f_x2_dot_prod_32f
+  * 32fc_x2_multiply_32fc
+  * 64_byteswap
+  * 32f_binary_slicer_8i
+  * 16u_byteswap
+  * 32u_byteswap
+
+  QA/profiler
+  -----------
+
+  The profiler now generates buffers that are vlen + a tiny
+  amount and generates random data to fill buffers. This is
+  intended to catch bugs in protokernels that write beyond
+  num_points.
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Wed, 26 Aug 2015 09:22:48 -0400
+
+volk (1.0.2-2) unstable; urgency=low
+
+  * Use SOURCE_DATE_EPOCH from the environment, if defined,
+    rather than current date and time to implement volk_build_date()
+    (embedding build date in a library does not help reproducible builds)
+  * add watch file
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Sat, 15 Aug 2015 17:43:15 -0400
+
+volk (1.0.2-1) unstable; urgency=medium
+
+  * Maintenance release 24 Jul 2015 by Nathan West
+  * The major change is the CMake logic to add ASM protokernels. Rather
+    than depending on CFLAGS and ASMFLAGS we use the results of VOLK's
+    built in has_ARCH tests. All configurations should work the same as
+    before, but manually specifying CFLAGS and ASMFLAGS on the cmake call
+    for ARM native builds should no longer be necessary.
+  * The 32fc_s32fc_x2_rotator_32fc generic protokernel now includes a
+    previously implied header.
+  * Finally, there is a fix to return the "best" protokernel to the
+    dispatcher when no volk_config exists. Thanks to Alexandre Raymond for
+    pointing this out.
+  * with maint branch patch:
+      kernels-add-missing-include-arm_neon.h
+  * removed unused build-dependency on liboil0.3-dev (closes: #793626)
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Wed, 05 Aug 2015 00:43:40 -0400
+
+volk (1.0.1-1) unstable; urgency=low
+
+  * Maintenance Release v1.0.1 08 Jul 2015 by Nathan West
+    This is a maintenance release with bug fixes since the initial release of
+    v1.0 in April.
+
+  * Contributors
+
+    The following authors have contributed code to this release:
+
+    Doug Geiger doug.geiger@bioradiation.net
+    Elliot Briggs elliot.briggs@gmail.com
+    Marcus Mueller marcus@hostalia.de
+    Nathan West nathan.west@okstate.edu
+    Tom Rondeau tom@trondeau.com
+
+  * Kernels
+
+    Several bug fixes in different kernels. The NEON implementations of the
+    following kernels have been fixed:
+
+      32f_x2_add_32f
+      32f_x2_dot_prod_32f
+      32fc_s32fc_multiply_32fc
+      32fc_x2_multiply_32fc
+
+   Additionally the NEON asm based 32f_x2_add_32f protokernels were not being
+   used and are now included and available for use via the dispatcher.
+
+   The 32f_s32f_x2_fm_detect_32f kernel now has a puppet. This solves QA seg
+   faults on 32-bit machines and provide a better test for this kernel.
+
+   The 32fc_s32fc_x2_rotator_32fc generic protokernel replaced cabsf with
+   hypotf for better Android support.
+
+  * Building
+
+    Static builds now trigger the applications (volk_profile and
+    volk-config-info) to be statically linked.
+
+    The file gcc_x86_cpuid.h has been removed since it was no longer being
+    used. Previously it provided cpuid functionality for ancient compilers
+    that we do not support.
+
+    All build types now use -Wall.
+
+  * QA and Testing
+
+   The documentation around the --update option to volk_profile now makes it
+   clear that the option will only profile kernels without entries in
+   volk_profile. The signature of run_volk_tests with expanded args changed
+   signed types to unsigned types to reflect the actual input.
+
+   The remaining changes are all non-functional changes to address issues
+   from Coverity.
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Fri, 10 Jul 2015 17:57:42 -0400
+
+volk (1.0-5) unstable; urgency=medium
+
+  * native-armv7-build-support skips neon on Debian armel (Closes: #789972)
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Sat, 04 Jul 2015 12:36:36 -0400
+
+volk (1.0-4) unstable; urgency=low
+
+  * update native-armv7-build-support patch from gnuradio volk package
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Thu, 25 Jun 2015 16:38:49 -0400
+
+volk (1.0-3) unstable; urgency=medium
+
+  * Add Breaks/Replaces (Closes: #789893, #789894)
+  * Allow failing tests
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Thu, 25 Jun 2015 12:46:06 -0400
+
+volk (1.0-2) unstable; urgency=medium
+
+  * kernels-add-missing-math.h-include-to-rotator
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Wed, 24 Jun 2015 21:09:32 -0400
+
+volk (1.0-1) unstable; urgency=low
+
+  * Initial package (Closes: #782417)
+  Initial Release 11 Apr 2015 by Nathan West
+
+  VOLK 1.0 is available. This is the first release of VOLK as an independently
+  tracked sub-project of GNU Radio.
+
+  * Contributors
+
+  VOLK has been tracked separately from GNU Radio since 2014 Dec 23.
+  Contributors between the split and the initial release are
+
+  Albert Holguin aholguin_77@yahoo.com
+  Doug Geiger doug.geiger@bioradiation.net
+  Elliot Briggs elliot.briggs@gmail.com
+  Julien Olivain julien.olivain@lsv.ens-cachan.fr
+  Michael Dickens michael.dickens@ettus.com
+  Nathan West nathan.west@okstate.edu
+  Tom Rondeau tom@trondeau.com
+
+  * QA
+
+  The test and profiler have significantly changed. The profiler supports
+  run-time changes to vlen and iters to help kernel development and provide
+  more flexibility on embedded systems. Additionally there is a new option
+  to update an existing volk_profile results file with only new kernels which
+  will save time when updating to newer versions of VOLK
+
+  The QA system creates a static list of kernels and test cases. The QA
+  testing and profiler iterate over this static list rather than each source
+  file keeping its own list. The QA also emits XML results to
+  lib/.unittest/kernels.xml which is formatted similarly to JUnit results.
+
+  * Modtool
+
+  Modtool was updated to support the QA and profiler changes.
+
+  * Kernels
+
+  New proto-kernels:
+
+  16ic_deinterleave_real_8i_neon
+  16ic_s32f_deinterleave_32f_neon
+  fix preprocessor errors for some compilers on byteswap and popcount puppets
+
+  ORC was moved to the asm kernels directory.
+  volk_malloc
+
+  The posix_memalign implementation of Volk_malloc now falls back to a standard
+  malloc if alignment is 1.
+
+  * Miscellaneous
+
+  Several build system and cmake changes have made it possible to build VOLK
+  both independently with proper soname versions and in-tree for projects
+  such as GNU Radio.
+
+  The static builds take advantage of cmake object libraries to speed up builds.
+
+  Finally, there are a number of changes to satisfy compiler warnings and make
+  QA work on multiple machines.
+
+ -- A. Maitland Bottoms <bottoms@debian.org>  Sun, 12 Apr 2015 23:20:41 -0400
diff --git a/control b/control
new file mode 100644 (file)
index 0000000..a104ede
--- /dev/null
+++ b/control
@@ -0,0 +1,83 @@
+Source: volk
+Section: libdevel
+Priority: optional
+Maintainer: A. Maitland Bottoms <bottoms@debian.org>
+Build-Depends: cmake,
+               debhelper-compat (= 13),
+               dh-python,
+               libcpu-features-dev [amd64 arm64 armel armhf i386 mips64el ppc64 ppc64el riscv64 s390x powerpc x32],
+               liborc-0.4-dev [!x32],
+               python3-dev,
+               python3-mako
+Build-Depends-Indep: doxygen, graphviz
+Standards-Version: 4.6.2
+Rules-Requires-Root: no
+Homepage: https://libvolk.org
+Vcs-Browser: https://salsa.debian.org/bottoms/pkg-volk
+Vcs-Git: https://salsa.debian.org/bottoms/pkg-volk.git
+
+Package: libvolk3.1
+Section: libs
+Architecture: any
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Multi-Arch: same
+Recommends: libvolk-bin
+Suggests: libvolk-dev
+Description: vector optimized functions
+ Vector-Optimized Library of Kernels is designed to help applications
+ work with the processor's SIMD instruction sets. These are very
+ powerful vector operations that can give signal processing a huge
+ boost in performance.
+
+Package: libvolk-dev
+Architecture: any
+Pre-Depends: ${misc:Pre-Depends}
+Depends: libvolk3.1 (=${binary:Version}), ${misc:Depends}
+Breaks: libvolk1-dev, libvolk1.0-dev, libvolk2-dev
+Replaces: libvolk1-dev, libvolk1.0-dev, libvolk2-dev
+Suggests: libvolk-doc
+Multi-Arch: same
+Description: vector optimized function headers
+ Vector-Optimized Library of Kernels is designed to help applications
+ work with the processor's SIMD instruction sets. These are very
+ powerful vector operations that can give signal processing a huge
+ boost in performance.
+ .
+ This package contains the header files.
+ For documentation, see libvolk-doc.
+
+Package: libvolk-bin
+Section: libs
+Architecture: any
+Pre-Depends: ${misc:Pre-Depends}
+Depends: libvolk3.1 (=${binary:Version}),
+         ${misc:Depends},
+         ${python3:Depends},
+         ${shlibs:Depends}
+Breaks: libvolk1-bin, libvolk1.0-bin, libvolk2-bin
+Replaces: libvolk1-bin, libvolk1.0-bin, libvolk2-bin
+Description: vector optimized runtime tools
+ Vector-Optimized Library of Kernels is designed to help applications
+ work with the processor's SIMD instruction sets. These are very
+ powerful vector operations that can give signal processing a huge
+ boost in performance.
+ .
+ This package includes: the volk_profile tool to customize settings for
+ the system; volk_modtool to create new optimized modules; and
+ volk-config-info to show settings.
+
+Package: libvolk-doc
+Section: doc
+Architecture: all
+Multi-Arch: foreign
+Depends: ${misc:Depends}
+Recommends: www-browser
+Description: vector optimized library documentation
+ Vector-Optimized Library of Kernels is designed to help applications
+ work with the processor's SIMD instruction sets. These are very
+ powerful vector operations that can give signal processing a huge
+ boost in performance.
+ .
+ This package includes the Doxygen generated documentation in
+ /usr/share/doc/libvolk-dev/html/index.html
diff --git a/copyright b/copyright
new file mode 100644 (file)
index 0000000..440c5dc
--- /dev/null
+++ b/copyright
@@ -0,0 +1,152 @@
+Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Upstream-Name: volk
+Upstream-Contact: http://libvolk.org/
+Source:
+ https://github.com/gnuradio/volk
+Comment:
+ Debian packages by A. Maitland Bottoms <bottoms@debian.org>
+ .
+ Upstream Maintainers:
+  Johannes Demel <demel@uni-bremen.de>
+  Michael Dickens <michael.dickens@ettus.com>
+Copyright: 2014-2023 Free Software Foundation, Inc.
+License: LGPL-3+
+
+Files: *
+Copyright: 2006, 2009-2023, Free Software Foundation, Inc.
+License: LGPL-3+
+
+Files: apps/volk_profile.h
+Copyright: 2014-2020 Free Software Foundation, Inc.
+License: LGPL-3+
+
+Files: appveyor.yml
+Copyright: 2016 Paul Cercueil <paul.cercueil@analog.com>
+License: LGPL-3+
+
+Files: cmake/*
+Copyright: 2014-2020 Free Software Foundation, Inc.
+License: LGPL-3+
+
+Files: cmake/Modules/*
+Copyright: 2006, 2009-2020, Free Software Foundation, Inc.
+License: LGPL-3+
+
+Files: cmake/Modules/CMakeParseArgumentsCopy.cmake
+Copyright: 2010 Alexander Neundorf <neundorf@kde.org>
+License: Kitware-BSD
+ All rights reserved.
+ .
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ .
+ * Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+ .
+ * Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+ .
+ * Neither the names of Kitware, Inc., the Insight Software Consortium,
+   nor the names of their contributors may be used to endorse or promote
+   products derived from this software without specific prior written
+   permission.
+ .
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Files: cmake/Modules/FindORC.cmake
+  cmake/Modules/VolkConfig.cmake.in
+Copyright: 2014-2015 Free Software Foundation, Inc.
+License: LGPL-3+
+
+Files: cmake/msvc/*
+Copyright: 2006-2008, Alexander Chemeris
+License: BSD-2-clause
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+ .
+   1. Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+ .
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+ .
+   3. The name of the author may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+ .
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Files: debian/*
+Copyright: 2015-2020 Free Software Foundation, Inc
+License: LGPL-3+
+Comment: assigned by A. Maitland Bottoms <bottoms@debian.org>
+
+Files: docs/*
+Copyright: 2014-2015 Free Software Foundation, Inc.
+License: LGPL-3+
+
+Files: gen/archs.xml
+  gen/machines.xml
+Copyright: 2014-2015 Free Software Foundation, Inc.
+License: LGPL-3+
+
+Files: include/volk/volk_common.h
+  include/volk/volk_complex.h
+  include/volk/volk_prefs.h
+Copyright: 2014-2015 Free Software Foundation, Inc.
+License: LGPL-3+
+
+Files: kernels/volk/asm/*
+Copyright: 2014-2015 Free Software Foundation, Inc.
+License: LGPL-3+
+
+Files: kernels/volk/volk_16u_byteswappuppet_16u.h
+  kernels/volk/volk_32u_byteswappuppet_32u.h
+  kernels/volk/volk_64u_byteswappuppet_64u.h
+Copyright: 2014-2015 Free Software Foundation, Inc.
+License: LGPL-3+
+
+Files: lib/kernel_tests.h
+  lib/qa_utils.cc
+  lib/qa_utils.h
+  lib/volk_prefs.c
+Copyright: 2014-2015 Free Software Foundation, Inc.
+License: LGPL-3+
+
+License: LGPL-3+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+ .
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ .
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ .
+ On Debian systems, the complete text of the GNU Lesser General
+ Public License version 3 can be found in "/usr/share/common-licenses/LGPL-3".
diff --git a/libvolk-bin.install b/libvolk-bin.install
new file mode 100644 (file)
index 0000000..2f34922
--- /dev/null
@@ -0,0 +1,2 @@
+usr/bin/volk*
+usr/lib/python3*/site-packages/* usr/lib/python3/dist-packages/
diff --git a/libvolk-bin.manpages b/libvolk-bin.manpages
new file mode 100644 (file)
index 0000000..95bae9e
--- /dev/null
@@ -0,0 +1,3 @@
+debian/volk-config-info.1
+debian/volk_modtool.1
+debian/volk_profile.1
diff --git a/libvolk-dev.install b/libvolk-dev.install
new file mode 100644 (file)
index 0000000..4b391be
--- /dev/null
@@ -0,0 +1,4 @@
+usr/include/*
+usr/lib/*/*volk*so
+usr/lib/*/cmake/volk
+usr/lib/*/pkgconfig/*volk*
diff --git a/libvolk-doc.doc-base b/libvolk-doc.doc-base
new file mode 100644 (file)
index 0000000..1174c64
--- /dev/null
@@ -0,0 +1,19 @@
+Document: libvolk-doc
+Title: Vector-Optimized Library of Kernels Reference Manual
+Author: GNU Radio Developers
+Abstract: VOLK is the Vector-Optimized Library of Kernels.
+ It is a library that contains kernels of hand-written SIMD code for
+ different mathematical operations. Since each SIMD architecture can
+ be very different and no compiler has yet come along to handle
+ vectorization properly or highly efficiently, VOLK approaches the
+ problem differently. For each architecture or platform that a
+ developer wishes to vectorize for, a new proto-kernel is added to
+ VOLK. At runtime, VOLK will select the correct proto-kernel. In this
+ way, the users of VOLK call a kernel for performing the operation
+ that is platform/architecture agnostic. This allows us to write
+ portable SIMD code.
+Section: Programming/C++
+
+Format: HTML
+Index: /usr/share/doc/libvolk-dev/html/index.html
+Files: /usr/share/doc/libvolk-dev/html/*.html
diff --git a/libvolk-doc.docs b/libvolk-doc.docs
new file mode 100644 (file)
index 0000000..87dd314
--- /dev/null
@@ -0,0 +1 @@
+obj-*/html
diff --git a/libvolk3.1.install b/libvolk3.1.install
new file mode 100644 (file)
index 0000000..e4252f4
--- /dev/null
@@ -0,0 +1 @@
+usr/lib/*/libvolk.so.*
diff --git a/not-not-installed b/not-not-installed
new file mode 100644 (file)
index 0000000..6f354d0
--- /dev/null
@@ -0,0 +1,6 @@
+usr/bin/list_cpu_features
+usr/lib/*/cmake/CpuFeatures/CpuFeaturesConfig.cmake
+usr/lib/*/cmake/CpuFeatures/CpuFeaturesConfigVersion.cmake
+usr/lib/*/cmake/CpuFeatures/CpuFeaturesTargets-relwithdebinfo.cmake
+usr/lib/*/cmake/CpuFeatures/CpuFeaturesTargets.cmake
+usr/lib/*/libcpu_features.a
diff --git a/patches/0001-Allow-for-rounding-error-in-float-to-int-conversions.patch b/patches/0001-Allow-for-rounding-error-in-float-to-int-conversions.patch
new file mode 100644 (file)
index 0000000..ce259bc
--- /dev/null
@@ -0,0 +1,31 @@
+From f9aed341bcf68cf68248e82c6ea883d937a9ab7e Mon Sep 17 00:00:00 2001
+From: Clayton Smith <argilo@gmail.com>
+Date: Fri, 8 Dec 2023 12:25:56 -0500
+Subject: [PATCH 1/6] Allow for rounding error in float-to-int conversions
+
+Signed-off-by: Clayton Smith <argilo@gmail.com>
+---
+ lib/kernel_tests.h | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/lib/kernel_tests.h b/lib/kernel_tests.h
+index 5ef3324..0f59de1 100644
+--- a/lib/kernel_tests.h
++++ b/lib/kernel_tests.h
+@@ -121,10 +121,10 @@ std::vector<volk_test_case_t> init_test_list(volk_test_params_t test_params)
+     QA(VOLK_INIT_TEST(volk_32fc_x2_multiply_conjugate_32fc, test_params))
+     QA(VOLK_INIT_TEST(volk_32fc_x2_divide_32fc, test_params))
+     QA(VOLK_INIT_TEST(volk_32fc_conjugate_32fc, test_params))
+-    QA(VOLK_INIT_TEST(volk_32f_s32f_convert_16i, test_params))
+-    QA(VOLK_INIT_TEST(volk_32f_s32f_convert_32i, test_params))
++    QA(VOLK_INIT_TEST(volk_32f_s32f_convert_16i, test_params.make_tol(1)))
++    QA(VOLK_INIT_TEST(volk_32f_s32f_convert_32i, test_params.make_tol(1)))
+     QA(VOLK_INIT_TEST(volk_32f_convert_64f, test_params))
+-    QA(VOLK_INIT_TEST(volk_32f_s32f_convert_8i, test_params))
++    QA(VOLK_INIT_TEST(volk_32f_s32f_convert_8i, test_params.make_tol(1)))
+     QA(VOLK_INIT_TEST(volk_32fc_convert_16ic, test_params))
+     QA(VOLK_INIT_TEST(volk_32fc_s32f_power_spectrum_32f, test_params.make_tol(2e-6)))
+     QA(VOLK_INIT_TEST(volk_32fc_x2_square_dist_32f, test_params))
+-- 
+2.39.2
+
diff --git a/patches/0002-Allow-for-rounding-error-in-volk_32fc_s32f_magnitude.patch b/patches/0002-Allow-for-rounding-error-in-volk_32fc_s32f_magnitude.patch
new file mode 100644 (file)
index 0000000..7022a2e
--- /dev/null
@@ -0,0 +1,26 @@
+From 1828eae1d2e4a758acf5131e004dc0cccec04c1e Mon Sep 17 00:00:00 2001
+From: Clayton Smith <argilo@gmail.com>
+Date: Fri, 8 Dec 2023 14:02:12 -0500
+Subject: [PATCH 2/6] Allow for rounding error in volk_32fc_s32f_magnitude_16i
+
+Signed-off-by: Clayton Smith <argilo@gmail.com>
+---
+ lib/kernel_tests.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lib/kernel_tests.h b/lib/kernel_tests.h
+index 5ef3324..d5f9442 100644
+--- a/lib/kernel_tests.h
++++ b/lib/kernel_tests.h
+@@ -113,7 +113,7 @@ std::vector<volk_test_case_t> init_test_list(volk_test_params_t test_params)
+     QA(VOLK_INIT_TEST(volk_32fc_index_max_32u, test_params))
+     QA(VOLK_INIT_TEST(volk_32fc_index_min_16u, test_params))
+     QA(VOLK_INIT_TEST(volk_32fc_index_min_32u, test_params))
+-    QA(VOLK_INIT_TEST(volk_32fc_s32f_magnitude_16i, test_params))
++    QA(VOLK_INIT_TEST(volk_32fc_s32f_magnitude_16i, test_params.make_tol(1)))
+     QA(VOLK_INIT_TEST(volk_32fc_magnitude_32f, test_params_inacc_tenth))
+     QA(VOLK_INIT_TEST(volk_32fc_magnitude_squared_32f, test_params))
+     QA(VOLK_INIT_TEST(volk_32fc_x2_add_32fc, test_params))
+-- 
+2.39.2
+
diff --git a/patches/0003-Remove-broken-sse_32-kernels.patch b/patches/0003-Remove-broken-sse_32-kernels.patch
new file mode 100644 (file)
index 0000000..e002775
--- /dev/null
@@ -0,0 +1,292 @@
+From 874d95c3ef837cfb90b47b063447f15db6cdbd5d Mon Sep 17 00:00:00 2001
+From: Clayton Smith <argilo@gmail.com>
+Date: Fri, 8 Dec 2023 16:53:53 -0500
+Subject: [PATCH 3/6] Remove broken sse_32 kernels
+
+Signed-off-by: Clayton Smith <argilo@gmail.com>
+---
+ .../volk_32fc_x2_conjugate_dot_prod_32fc.h    | 131 ------------------
+ kernels/volk/volk_32fc_x2_dot_prod_32fc.h     | 126 -----------------
+ 2 files changed, 257 deletions(-)
+
+diff --git a/kernels/volk/volk_32fc_x2_conjugate_dot_prod_32fc.h b/kernels/volk/volk_32fc_x2_conjugate_dot_prod_32fc.h
+index b1c1938..c71c7a3 100644
+--- a/kernels/volk/volk_32fc_x2_conjugate_dot_prod_32fc.h
++++ b/kernels/volk/volk_32fc_x2_conjugate_dot_prod_32fc.h
+@@ -567,136 +567,5 @@ static inline void volk_32fc_x2_conjugate_dot_prod_32fc_a_sse(lv_32fc_t* result,
+ }
+ #endif
+-#if LV_HAVE_SSE && LV_HAVE_32
+-static inline void volk_32fc_x2_conjugate_dot_prod_32fc_a_sse_32(lv_32fc_t* result,
+-                                                                 const lv_32fc_t* input,
+-                                                                 const lv_32fc_t* taps,
+-                                                                 unsigned int num_points)
+-{
+-
+-    const unsigned int num_bytes = num_points * 8;
+-
+-    __VOLK_ATTR_ALIGNED(16)
+-    static const uint32_t conjugator[4] = {
+-        0x00000000, 0x80000000, 0x00000000, 0x80000000
+-    };
+-
+-    int bound = num_bytes >> 4;
+-    int leftovers = num_bytes % 16;
+-
+-    __VOLK_ASM __VOLK_VOLATILE(
+-        "     #pushl  %%ebp\n\t"
+-        "     #movl   %%esp, %%ebp\n\t"
+-        "     #movl   12(%%ebp), %%eax                # input\n\t"
+-        "     #movl   16(%%ebp), %%edx                # taps\n\t"
+-        "     #movl   20(%%ebp), %%ecx                # n_bytes\n\t"
+-        "  movaps  0(%[conjugator]), %%xmm1\n\t"
+-        "     xorps   %%xmm6, %%xmm6          # zero accumulators\n\t"
+-        "     movaps  0(%[eax]), %%xmm0\n\t"
+-        "     xorps   %%xmm7, %%xmm7          # zero accumulators\n\t"
+-        "     movaps  0(%[edx]), %%xmm2\n\t"
+-        "  movl    %[ecx], (%[out])\n\t"
+-        "     shrl    $5, %[ecx]              # ecx = n_2_ccomplex_blocks / 2\n\t"
+-
+-        "  xorps   %%xmm1, %%xmm2\n\t"
+-        "     jmp     .%=L1_test\n\t"
+-        "     # 4 taps / loop\n\t"
+-        "     # something like ?? cycles / loop\n\t"
+-        ".%=Loop1:    \n\t"
+-        "# complex prod: C += A * B,  w/ temp Z & Y (or B), xmmPN=$0x8000000080000000\n\t"
+-        "#    movaps  (%[eax]), %%xmmA\n\t"
+-        "#    movaps  (%[edx]), %%xmmB\n\t"
+-        "#    movaps  %%xmmA, %%xmmZ\n\t"
+-        "#    shufps  $0xb1, %%xmmZ, %%xmmZ   # swap internals\n\t"
+-        "#    mulps   %%xmmB, %%xmmA\n\t"
+-        "#    mulps   %%xmmZ, %%xmmB\n\t"
+-        "#    # SSE replacement for: pfpnacc %%xmmB, %%xmmA\n\t"
+-        "#    xorps   %%xmmPN, %%xmmA\n\t"
+-        "#    movaps  %%xmmA, %%xmmZ\n\t"
+-        "#    unpcklps %%xmmB, %%xmmA\n\t"
+-        "#    unpckhps %%xmmB, %%xmmZ\n\t"
+-        "#    movaps  %%xmmZ, %%xmmY\n\t"
+-        "#    shufps  $0x44, %%xmmA, %%xmmZ   # b01000100\n\t"
+-        "#    shufps  $0xee, %%xmmY, %%xmmA   # b11101110\n\t"
+-        "#    addps   %%xmmZ, %%xmmA\n\t"
+-        "#    addps   %%xmmA, %%xmmC\n\t"
+-        "# A=xmm0, B=xmm2, Z=xmm4\n\t"
+-        "# A'=xmm1, B'=xmm3, Z'=xmm5\n\t"
+-        "     movaps  16(%[edx]), %%xmm3\n\t"
+-        "     movaps  %%xmm0, %%xmm4\n\t"
+-        "  xorps   %%xmm1, %%xmm3\n\t"
+-        "     mulps   %%xmm2, %%xmm0\n\t"
+-        "     movaps  16(%[eax]), %%xmm1\n\t"
+-        "     shufps  $0xb1, %%xmm4, %%xmm4   # swap internals\n\t"
+-        "     movaps  %%xmm1, %%xmm5\n\t"
+-        "     addps   %%xmm0, %%xmm6\n\t"
+-        "     mulps   %%xmm3, %%xmm1\n\t"
+-        "     shufps  $0xb1, %%xmm5, %%xmm5   # swap internals\n\t"
+-        "     addps   %%xmm1, %%xmm6\n\t"
+-        "  movaps  0(%[conjugator]), %%xmm1\n\t"
+-        "     mulps   %%xmm4, %%xmm2\n\t"
+-        "     movaps  32(%[eax]), %%xmm0\n\t"
+-        "     addps   %%xmm2, %%xmm7\n\t"
+-        "     mulps   %%xmm5, %%xmm3\n\t"
+-        "     addl    $32, %[eax]\n\t"
+-        "     movaps  32(%[edx]), %%xmm2\n\t"
+-        "     addps   %%xmm3, %%xmm7\n\t"
+-        "  xorps   %%xmm1, %%xmm2\n\t"
+-        "     addl    $32, %[edx]\n\t"
+-        ".%=L1_test:\n\t"
+-        "     decl    %[ecx]\n\t"
+-        "     jge     .%=Loop1\n\t"
+-        "     # We've handled the bulk of multiplies up to here.\n\t"
+-        "     # Let's sse if original n_2_ccomplex_blocks was odd.\n\t"
+-        "     # If so, we've got 2 more taps to do.\n\t"
+-        "     movl    0(%[out]), %[ecx]               # n_2_ccomplex_blocks\n\t"
+-        "  shrl    $4, %[ecx]\n\t"
+-        "     andl    $1, %[ecx]\n\t"
+-        "     je      .%=Leven\n\t"
+-        "     # The count was odd, do 2 more taps.\n\t"
+-        "     # Note that we've already got mm0/mm2 preloaded\n\t"
+-        "     # from the main loop.\n\t"
+-        "     movaps  %%xmm0, %%xmm4\n\t"
+-        "     mulps   %%xmm2, %%xmm0\n\t"
+-        "     shufps  $0xb1, %%xmm4, %%xmm4   # swap internals\n\t"
+-        "     addps   %%xmm0, %%xmm6\n\t"
+-        "     mulps   %%xmm4, %%xmm2\n\t"
+-        "     addps   %%xmm2, %%xmm7\n\t"
+-        ".%=Leven:\n\t"
+-        "     # neg inversor\n\t"
+-        "  #movl 8(%%ebp), %[eax] \n\t"
+-        "     xorps   %%xmm1, %%xmm1\n\t"
+-        "  movl       $0x80000000, (%[out])\n\t"
+-        "     movss   (%[out]), %%xmm1\n\t"
+-        "     shufps  $0x11, %%xmm1, %%xmm1   # b00010001 # 0 -0 0 -0\n\t"
+-        "     # pfpnacc\n\t"
+-        "     xorps   %%xmm1, %%xmm6\n\t"
+-        "     movaps  %%xmm6, %%xmm2\n\t"
+-        "     unpcklps %%xmm7, %%xmm6\n\t"
+-        "     unpckhps %%xmm7, %%xmm2\n\t"
+-        "     movaps  %%xmm2, %%xmm3\n\t"
+-        "     shufps  $0x44, %%xmm6, %%xmm2   # b01000100\n\t"
+-        "     shufps  $0xee, %%xmm3, %%xmm6   # b11101110\n\t"
+-        "     addps   %%xmm2, %%xmm6\n\t"
+-        "                                     # xmm6 = r1 i2 r3 i4\n\t"
+-        "     #movl   8(%%ebp), %[eax]                # @result\n\t"
+-        "     movhlps %%xmm6, %%xmm4          # xmm4 = r3 i4 ?? ??\n\t"
+-        "     addps   %%xmm4, %%xmm6          # xmm6 = r1+r3 i2+i4 ?? ??\n\t"
+-        "     movlps  %%xmm6, (%[out])                # store low 2x32 bits (complex) "
+-        "to memory\n\t"
+-        "     #popl   %%ebp\n\t"
+-        :
+-        : [eax] "r"(input),
+-          [edx] "r"(taps),
+-          [ecx] "r"(num_bytes),
+-          [out] "r"(result),
+-          [conjugator] "r"(conjugator));
+-
+-    for (; leftovers > 0; leftovers -= 8) {
+-        *result += (input[(bound << 1)] * lv_conj(taps[(bound << 1)]));
+-    }
+-}
+-#endif /*LV_HAVE_SSE*/
+-
+ #endif /*INCLUDED_volk_32fc_x2_conjugate_dot_prod_32fc_a_H*/
+diff --git a/kernels/volk/volk_32fc_x2_dot_prod_32fc.h b/kernels/volk/volk_32fc_x2_dot_prod_32fc.h
+index 16851f8..7d9d4d4 100644
+--- a/kernels/volk/volk_32fc_x2_dot_prod_32fc.h
++++ b/kernels/volk/volk_32fc_x2_dot_prod_32fc.h
+@@ -651,132 +651,6 @@ static inline void volk_32fc_x2_dot_prod_32fc_a_sse_64(lv_32fc_t* result,
+ #endif
+-#if LV_HAVE_SSE && LV_HAVE_32
+-
+-static inline void volk_32fc_x2_dot_prod_32fc_a_sse_32(lv_32fc_t* result,
+-                                                       const lv_32fc_t* input,
+-                                                       const lv_32fc_t* taps,
+-                                                       unsigned int num_points)
+-{
+-
+-    volk_32fc_x2_dot_prod_32fc_generic(result, input, taps, num_points);
+-
+-#if 0
+-  const unsigned int num_bytes = num_points*8;
+-  unsigned int isodd = num_points & 1;
+-
+-  __VOLK_ASM __VOLK_VOLATILE
+-    (
+-     "        #pushl  %%ebp\n\t"
+-     "        #movl   %%esp, %%ebp\n\t"
+-     "        movl    12(%%ebp), %%eax                # input\n\t"
+-     "        movl    16(%%ebp), %%edx                # taps\n\t"
+-     "        movl    20(%%ebp), %%ecx                # n_bytes\n\t"
+-     "        xorps   %%xmm6, %%xmm6          # zero accumulators\n\t"
+-     "        movaps  0(%%eax), %%xmm0\n\t"
+-     "        xorps   %%xmm7, %%xmm7          # zero accumulators\n\t"
+-     "        movaps  0(%%edx), %%xmm2\n\t"
+-     "        shrl    $5, %%ecx               # ecx = n_2_ccomplex_blocks / 2\n\t"
+-     "        jmp     .%=L1_test\n\t"
+-     "        # 4 taps / loop\n\t"
+-     "        # something like ?? cycles / loop\n\t"
+-     ".%=Loop1:       \n\t"
+-     "# complex prod: C += A * B,  w/ temp Z & Y (or B), xmmPN=$0x8000000080000000\n\t"
+-     "#       movaps  (%%eax), %%xmmA\n\t"
+-     "#       movaps  (%%edx), %%xmmB\n\t"
+-     "#       movaps  %%xmmA, %%xmmZ\n\t"
+-     "#       shufps  $0xb1, %%xmmZ, %%xmmZ   # swap internals\n\t"
+-     "#       mulps   %%xmmB, %%xmmA\n\t"
+-     "#       mulps   %%xmmZ, %%xmmB\n\t"
+-     "#       # SSE replacement for: pfpnacc %%xmmB, %%xmmA\n\t"
+-     "#       xorps   %%xmmPN, %%xmmA\n\t"
+-     "#       movaps  %%xmmA, %%xmmZ\n\t"
+-     "#       unpcklps %%xmmB, %%xmmA\n\t"
+-     "#       unpckhps %%xmmB, %%xmmZ\n\t"
+-     "#       movaps  %%xmmZ, %%xmmY\n\t"
+-     "#       shufps  $0x44, %%xmmA, %%xmmZ   # b01000100\n\t"
+-     "#       shufps  $0xee, %%xmmY, %%xmmA   # b11101110\n\t"
+-     "#       addps   %%xmmZ, %%xmmA\n\t"
+-     "#       addps   %%xmmA, %%xmmC\n\t"
+-     "# A=xmm0, B=xmm2, Z=xmm4\n\t"
+-     "# A'=xmm1, B'=xmm3, Z'=xmm5\n\t"
+-     "        movaps  16(%%eax), %%xmm1\n\t"
+-     "        movaps  %%xmm0, %%xmm4\n\t"
+-     "        mulps   %%xmm2, %%xmm0\n\t"
+-     "        shufps  $0xb1, %%xmm4, %%xmm4   # swap internals\n\t"
+-     "        movaps  16(%%edx), %%xmm3\n\t"
+-     "        movaps  %%xmm1, %%xmm5\n\t"
+-     "        addps   %%xmm0, %%xmm6\n\t"
+-     "        mulps   %%xmm3, %%xmm1\n\t"
+-     "        shufps  $0xb1, %%xmm5, %%xmm5   # swap internals\n\t"
+-     "        addps   %%xmm1, %%xmm6\n\t"
+-     "        mulps   %%xmm4, %%xmm2\n\t"
+-     "        movaps  32(%%eax), %%xmm0\n\t"
+-     "        addps   %%xmm2, %%xmm7\n\t"
+-     "        mulps   %%xmm5, %%xmm3\n\t"
+-     "        addl    $32, %%eax\n\t"
+-     "        movaps  32(%%edx), %%xmm2\n\t"
+-     "        addps   %%xmm3, %%xmm7\n\t"
+-     "        addl    $32, %%edx\n\t"
+-     ".%=L1_test:\n\t"
+-     "        decl    %%ecx\n\t"
+-     "        jge     .%=Loop1\n\t"
+-     "        # We've handled the bulk of multiplies up to here.\n\t"
+-     "        # Let's sse if original n_2_ccomplex_blocks was odd.\n\t"
+-     "        # If so, we've got 2 more taps to do.\n\t"
+-     "        movl    20(%%ebp), %%ecx                # n_2_ccomplex_blocks\n\t"
+-     "  shrl    $4, %%ecx\n\t"
+-     "        andl    $1, %%ecx\n\t"
+-     "        je      .%=Leven\n\t"
+-     "        # The count was odd, do 2 more taps.\n\t"
+-     "        # Note that we've already got mm0/mm2 preloaded\n\t"
+-     "        # from the main loop.\n\t"
+-     "        movaps  %%xmm0, %%xmm4\n\t"
+-     "        mulps   %%xmm2, %%xmm0\n\t"
+-     "        shufps  $0xb1, %%xmm4, %%xmm4   # swap internals\n\t"
+-     "        addps   %%xmm0, %%xmm6\n\t"
+-     "        mulps   %%xmm4, %%xmm2\n\t"
+-     "        addps   %%xmm2, %%xmm7\n\t"
+-     ".%=Leven:\n\t"
+-     "        # neg inversor\n\t"
+-     "  movl 8(%%ebp), %%eax \n\t"
+-     "        xorps   %%xmm1, %%xmm1\n\t"
+-     "  movl  $0x80000000, (%%eax)\n\t"
+-     "        movss   (%%eax), %%xmm1\n\t"
+-     "        shufps  $0x11, %%xmm1, %%xmm1   # b00010001 # 0 -0 0 -0\n\t"
+-     "        # pfpnacc\n\t"
+-     "        xorps   %%xmm1, %%xmm6\n\t"
+-     "        movaps  %%xmm6, %%xmm2\n\t"
+-     "        unpcklps %%xmm7, %%xmm6\n\t"
+-     "        unpckhps %%xmm7, %%xmm2\n\t"
+-     "        movaps  %%xmm2, %%xmm3\n\t"
+-     "        shufps  $0x44, %%xmm6, %%xmm2   # b01000100\n\t"
+-     "        shufps  $0xee, %%xmm3, %%xmm6   # b11101110\n\t"
+-     "        addps   %%xmm2, %%xmm6\n\t"
+-     "                                        # xmm6 = r1 i2 r3 i4\n\t"
+-     "        #movl   8(%%ebp), %%eax         # @result\n\t"
+-     "        movhlps %%xmm6, %%xmm4          # xmm4 = r3 i4 ?? ??\n\t"
+-     "        addps   %%xmm4, %%xmm6          # xmm6 = r1+r3 i2+i4 ?? ??\n\t"
+-     "        movlps  %%xmm6, (%%eax)         # store low 2x32 bits (complex) to memory\n\t"
+-     "        #popl   %%ebp\n\t"
+-     :
+-     :
+-     : "eax", "ecx", "edx"
+-     );
+-
+-
+-  int getem = num_bytes % 16;
+-
+-  if(isodd) {
+-    *result += (input[num_points - 1] * taps[num_points - 1]);
+-  }
+-
+-  return;
+-#endif
+-}
+-
+-#endif /*LV_HAVE_SSE*/
+-
+ #ifdef LV_HAVE_SSE3
+ #include <pmmintrin.h>
+-- 
+2.39.2
+
diff --git a/patches/0004-Fix-flaky-fm_detect-test.patch b/patches/0004-Fix-flaky-fm_detect-test.patch
new file mode 100644 (file)
index 0000000..02ebdca
--- /dev/null
@@ -0,0 +1,70 @@
+From e6fa6a54bd79764cebc855f58ca4db32c25584a2 Mon Sep 17 00:00:00 2001
+From: Clayton Smith <argilo@gmail.com>
+Date: Fri, 8 Dec 2023 18:57:02 -0500
+Subject: [PATCH 4/6] Fix flaky fm_detect test
+
+Signed-off-by: Clayton Smith <argilo@gmail.com>
+---
+ kernels/volk/volk_32f_x2_fm_detectpuppet_32f.h | 8 ++++----
+ lib/kernel_tests.h                             | 5 +++--
+ 2 files changed, 7 insertions(+), 6 deletions(-)
+
+diff --git a/kernels/volk/volk_32f_x2_fm_detectpuppet_32f.h b/kernels/volk/volk_32f_x2_fm_detectpuppet_32f.h
+index e4196d5..b490154 100644
+--- a/kernels/volk/volk_32f_x2_fm_detectpuppet_32f.h
++++ b/kernels/volk/volk_32f_x2_fm_detectpuppet_32f.h
+@@ -20,7 +20,7 @@ static inline void volk_32f_x2_fm_detectpuppet_32f_a_avx(float* outputVector,
+                                                          float* saveValue,
+                                                          unsigned int num_points)
+ {
+-    const float bound = 1.0f;
++    const float bound = 2.0f;
+     volk_32f_s32f_32f_fm_detect_32f_a_avx(
+         outputVector, inputVector, bound, saveValue, num_points);
+@@ -35,7 +35,7 @@ static inline void volk_32f_x2_fm_detectpuppet_32f_a_sse(float* outputVector,
+                                                          float* saveValue,
+                                                          unsigned int num_points)
+ {
+-    const float bound = 1.0f;
++    const float bound = 2.0f;
+     volk_32f_s32f_32f_fm_detect_32f_a_sse(
+         outputVector, inputVector, bound, saveValue, num_points);
+@@ -49,7 +49,7 @@ static inline void volk_32f_x2_fm_detectpuppet_32f_generic(float* outputVector,
+                                                            float* saveValue,
+                                                            unsigned int num_points)
+ {
+-    const float bound = 1.0f;
++    const float bound = 2.0f;
+     volk_32f_s32f_32f_fm_detect_32f_generic(
+         outputVector, inputVector, bound, saveValue, num_points);
+@@ -73,7 +73,7 @@ static inline void volk_32f_x2_fm_detectpuppet_32f_u_avx(float* outputVector,
+                                                          float* saveValue,
+                                                          unsigned int num_points)
+ {
+-    const float bound = 1.0f;
++    const float bound = 2.0f;
+     volk_32f_s32f_32f_fm_detect_32f_u_avx(
+         outputVector, inputVector, bound, saveValue, num_points);
+diff --git a/lib/kernel_tests.h b/lib/kernel_tests.h
+index 5ef3324..c90e7d8 100644
+--- a/lib/kernel_tests.h
++++ b/lib/kernel_tests.h
+@@ -64,8 +64,9 @@ std::vector<volk_test_case_t> init_test_list(volk_test_params_t test_params)
+                       test_params_rotator))
+     QA(VOLK_INIT_PUPP(
+         volk_8u_conv_k7_r2puppet_8u, volk_8u_x4_conv_k7_r2_8u, test_params.make_tol(0)))
+-    QA(VOLK_INIT_PUPP(
+-        volk_32f_x2_fm_detectpuppet_32f, volk_32f_s32f_32f_fm_detect_32f, test_params))
++    QA(VOLK_INIT_PUPP(volk_32f_x2_fm_detectpuppet_32f,
++                      volk_32f_s32f_32f_fm_detect_32f,
++                      test_params.make_absolute(1e-6)))
+     QA(VOLK_INIT_TEST(volk_16ic_s32f_deinterleave_real_32f, test_params))
+     QA(VOLK_INIT_TEST(volk_16ic_deinterleave_real_8i, test_params))
+     QA(VOLK_INIT_TEST(volk_16ic_deinterleave_16i_x2, test_params))
+-- 
+2.39.2
+
diff --git a/patches/0005-Fix-flaky-mod_range-test.patch b/patches/0005-Fix-flaky-mod_range-test.patch
new file mode 100644 (file)
index 0000000..29ef13b
--- /dev/null
@@ -0,0 +1,80 @@
+From 2561b46ffd9c18cc8972b48a111e5dfaa79dfca3 Mon Sep 17 00:00:00 2001
+From: Clayton Smith <argilo@gmail.com>
+Date: Fri, 8 Dec 2023 19:27:45 -0500
+Subject: [PATCH 5/6] Fix flaky mod_range test
+
+Signed-off-by: Clayton Smith <argilo@gmail.com>
+---
+ kernels/volk/volk_32f_s32f_mod_rangepuppet_32f.h | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/kernels/volk/volk_32f_s32f_mod_rangepuppet_32f.h b/kernels/volk/volk_32f_s32f_mod_rangepuppet_32f.h
+index 3e0bc43..3a17859 100644
+--- a/kernels/volk/volk_32f_s32f_mod_rangepuppet_32f.h
++++ b/kernels/volk/volk_32f_s32f_mod_rangepuppet_32f.h
+@@ -19,7 +19,7 @@ static inline void volk_32f_s32f_mod_rangepuppet_32f_generic(float* output,
+                                                              unsigned int num_points)
+ {
+     volk_32f_s32f_s32f_mod_range_32f_generic(
+-        output, input, bound - 3.141f, bound, num_points);
++        output, input, bound - 3.131f, bound, num_points);
+ }
+ #endif
+@@ -31,7 +31,7 @@ static inline void volk_32f_s32f_mod_rangepuppet_32f_u_sse(float* output,
+                                                            unsigned int num_points)
+ {
+     volk_32f_s32f_s32f_mod_range_32f_u_sse(
+-        output, input, bound - 3.141f, bound, num_points);
++        output, input, bound - 3.131f, bound, num_points);
+ }
+ #endif
+ #ifdef LV_HAVE_SSE
+@@ -41,7 +41,7 @@ static inline void volk_32f_s32f_mod_rangepuppet_32f_a_sse(float* output,
+                                                            unsigned int num_points)
+ {
+     volk_32f_s32f_s32f_mod_range_32f_a_sse(
+-        output, input, bound - 3.141f, bound, num_points);
++        output, input, bound - 3.131f, bound, num_points);
+ }
+ #endif
+@@ -52,7 +52,7 @@ static inline void volk_32f_s32f_mod_rangepuppet_32f_u_sse2(float* output,
+                                                             unsigned int num_points)
+ {
+     volk_32f_s32f_s32f_mod_range_32f_u_sse2(
+-        output, input, bound - 3.141f, bound, num_points);
++        output, input, bound - 3.131f, bound, num_points);
+ }
+ #endif
+ #ifdef LV_HAVE_SSE2
+@@ -62,7 +62,7 @@ static inline void volk_32f_s32f_mod_rangepuppet_32f_a_sse2(float* output,
+                                                             unsigned int num_points)
+ {
+     volk_32f_s32f_s32f_mod_range_32f_a_sse2(
+-        output, input, bound - 3.141f, bound, num_points);
++        output, input, bound - 3.131f, bound, num_points);
+ }
+ #endif
+@@ -73,7 +73,7 @@ static inline void volk_32f_s32f_mod_rangepuppet_32f_u_avx(float* output,
+                                                            unsigned int num_points)
+ {
+     volk_32f_s32f_s32f_mod_range_32f_u_avx(
+-        output, input, bound - 3.141f, bound, num_points);
++        output, input, bound - 3.131f, bound, num_points);
+ }
+ #endif
+ #ifdef LV_HAVE_AVX
+@@ -83,7 +83,7 @@ static inline void volk_32f_s32f_mod_rangepuppet_32f_a_avx(float* output,
+                                                            unsigned int num_points)
+ {
+     volk_32f_s32f_s32f_mod_range_32f_a_avx(
+-        output, input, bound - 3.141f, bound, num_points);
++        output, input, bound - 3.131f, bound, num_points);
+ }
+ #endif
+ #endif
+-- 
+2.39.2
+
diff --git a/patches/0006-Allow-for-rounding-error-in-float-to-int-interleave.patch b/patches/0006-Allow-for-rounding-error-in-float-to-int-interleave.patch
new file mode 100644 (file)
index 0000000..d93568a
--- /dev/null
@@ -0,0 +1,30 @@
+From b5992f21b74b129094afe0f2d3e31d5aeb50844c Mon Sep 17 00:00:00 2001
+From: Clayton Smith <argilo@gmail.com>
+Date: Fri, 8 Dec 2023 21:34:26 -0500
+Subject: [PATCH 6/6] Allow for rounding error in float-to-int interleave
+
+Signed-off-by: Clayton Smith <argilo@gmail.com>
+---
+ lib/kernel_tests.h | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/lib/kernel_tests.h
++++ b/lib/kernel_tests.h
+@@ -104,7 +104,7 @@
+     QA(VOLK_INIT_TEST(volk_32fc_deinterleave_32f_x2, test_params))
+     QA(VOLK_INIT_TEST(volk_32fc_accumulator_s32fc, test_params.make_absolute(3e-2)))
+     QA(VOLK_INIT_TEST(volk_32fc_deinterleave_64f_x2, test_params))
+-    QA(VOLK_INIT_TEST(volk_32fc_s32f_deinterleave_real_16i, test_params))
++    QA(VOLK_INIT_TEST(volk_32fc_s32f_deinterleave_real_16i, test_params.make_tol(1)))
+     QA(VOLK_INIT_TEST(volk_32fc_deinterleave_imag_32f, test_params))
+     QA(VOLK_INIT_TEST(volk_32fc_deinterleave_real_32f, test_params))
+     QA(VOLK_INIT_TEST(volk_32fc_deinterleave_real_64f, test_params))
+@@ -132,7 +132,7 @@
+     QA(VOLK_INIT_TEST(volk_32fc_x2_s32f_square_dist_scalar_mult_32f, test_params))
+     QA(VOLK_INIT_TEST(volk_32f_x2_divide_32f, test_params))
+     QA(VOLK_INIT_TEST(volk_32f_x2_dot_prod_32f, test_params.make_absolute(1.5e-2)))
+-    QA(VOLK_INIT_TEST(volk_32f_x2_s32f_interleave_16ic, test_params))
++    QA(VOLK_INIT_TEST(volk_32f_x2_s32f_interleave_16ic, test_params.make_tol(1)))
+     QA(VOLK_INIT_TEST(volk_32f_x2_interleave_32fc, test_params))
+     QA(VOLK_INIT_TEST(volk_32f_x2_max_32f, test_params))
+     QA(VOLK_INIT_TEST(volk_32f_x2_min_32f, test_params))
diff --git a/patches/0007-Express-version-information-in-decimal.patch b/patches/0007-Express-version-information-in-decimal.patch
new file mode 100644 (file)
index 0000000..3848974
--- /dev/null
@@ -0,0 +1,68 @@
+From 8b5183be984e27103ef2472244dac98ab3db0b32 Mon Sep 17 00:00:00 2001
+From: Clayton Smith <argilo@gmail.com>
+Date: Mon, 11 Dec 2023 14:10:20 -0500
+Subject: [PATCH 7/7] Express version information in decimal
+
+Signed-off-by: Clayton Smith <argilo@gmail.com>
+---
+ CMakeLists.txt                 | 17 ++++-------------
+ include/volk/volk_version.h.in |  8 ++++----
+ 2 files changed, 8 insertions(+), 17 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2416eb2..2ff536a 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -80,19 +80,10 @@ set(VERSION_INFO_MINOR_VERSION 1)
+ set(VERSION_INFO_MAINT_VERSION 0)
+ include(VolkVersion) #setup version info
+-macro(set_version_str VAR)
+-  set(IN_VER ${VERSION_INFO_${VAR}_VERSION})
+-  string(LENGTH "${IN_VER}" VER_LEN)
+-  if(${VER_LEN} EQUAL 1)
+-    set(VOLK_VERSION_${VAR} "0${IN_VER}")
+-  else()
+-    set(VOLK_VERSION_${VAR} "${IN_VER}")
+-  endif()
+-endmacro()
+-
+-set_version_str(MAJOR)
+-set_version_str(MINOR)
+-set_version_str(MAINT)
++math(EXPR VOLK_VERSION_DECIMAL
++    "${VERSION_INFO_MAJOR_VERSION} * 10000
++    + ${VERSION_INFO_MINOR_VERSION} * 100
++    + ${VERSION_INFO_MAINT_VERSION}")
+ configure_file(
+     ${CMAKE_SOURCE_DIR}/include/volk/volk_version.h.in
+diff --git a/include/volk/volk_version.h.in b/include/volk/volk_version.h.in
+index e565048..5fce7d3 100644
+--- a/include/volk/volk_version.h.in
++++ b/include/volk/volk_version.h.in
+@@ -20,9 +20,9 @@ __VOLK_DECL_BEGIN
+  * some specific API is present and functional.
+  */
+-#define VOLK_VERSION_MAJOR @VOLK_VERSION_MAJOR@
+-#define VOLK_VERSION_MINOR @VOLK_VERSION_MINOR@
+-#define VOLK_VERSION_MAINT @VOLK_VERSION_MAINT@
++#define VOLK_VERSION_MAJOR @VERSION_INFO_MAJOR_VERSION@
++#define VOLK_VERSION_MINOR @VERSION_INFO_MINOR_VERSION@
++#define VOLK_VERSION_MAINT @VERSION_INFO_MAINT_VERSION@
+ /*
+  * VOLK_VERSION % 100 is the MAINT version
+@@ -30,7 +30,7 @@ __VOLK_DECL_BEGIN
+  * (VOLK_VERSION / 100) / 100 is the MAJOR version
+  */
+-#define VOLK_VERSION @VOLK_VERSION_MAJOR@@VOLK_VERSION_MINOR@@VOLK_VERSION_MAINT@
++#define VOLK_VERSION @VOLK_VERSION_DECIMAL@
+ __VOLK_DECL_END
+-- 
+2.39.2
+
diff --git a/patches/doxygen-pdf b/patches/doxygen-pdf
new file mode 100644 (file)
index 0000000..6babbfc
--- /dev/null
@@ -0,0 +1,86 @@
+Author: A. Maitland Bottoms <bottoms@debian.org>
+Forwarded: not-needed
+Description: doxygen pdf
+ Work-In-Progress Debian inclusion of PDF format documentation.
+
+--- a/docs/CMakeLists.txt
++++ b/docs/CMakeLists.txt
+@@ -5,10 +5,18 @@
+ # SPDX-License-Identifier: LGPL-3.0-or-later
+ #
++option(ENABLE_DOXYGEN_PDF "Build Doxygen PDF" OFF)
+ find_package(Doxygen)
+ if(DOXYGEN_FOUND)
+-
+ message(STATUS "Doxygen found. Building docs ...")
++find_package(LATEX COMPONENTS PDFLATEX)
++
++if(ENABLE_DOXYGEN_PDF AND LATEX_FOUND)
++    set(enable_pdf_docs YES)
++    message(STATUS "latex found. Building PDF docs ...")
++else()
++    set(enable_pdf_docs NO)
++endif()
+ configure_file(
+     ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in
+@@ -21,4 +29,11 @@
+     COMMENT "Generating documentation with Doxygen" VERBATIM
+ )
++add_custom_target(volk_pdf_doc
++    make
++    DEPENDS volk_doc
++    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/latex
++    COMMENT "Generating PDF documentation with Doxygen" VERBATIM
++)
++
+ endif(DOXYGEN_FOUND)
+--- a/docs/Doxyfile.in
++++ b/docs/Doxyfile.in
+@@ -1894,7 +1894,7 @@
+ # If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
+ # The default value is: YES.
+-GENERATE_LATEX         = NO
++GENERATE_LATEX         = @enable_pdf_docs@
+ # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
+ # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+@@ -1914,7 +1914,7 @@
+ # the output language.
+ # This tag requires that the tag GENERATE_LATEX is set to YES.
+-LATEX_CMD_NAME         = latex
++LATEX_CMD_NAME         = xelatex
+ # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
+ # index for LaTeX.
+@@ -1951,7 +1951,7 @@
+ # The default value is: a4.
+ # This tag requires that the tag GENERATE_LATEX is set to YES.
+-PAPER_TYPE             = a4
++PAPER_TYPE             = letter
+ # The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
+ # that should be included in the LaTeX output. The package can be specified just
+@@ -1963,7 +1963,7 @@
+ # If left blank no extra packages will be included.
+ # This tag requires that the tag GENERATE_LATEX is set to YES.
+-EXTRA_PACKAGES         =
++EXTRA_PACKAGES         = {unicode-math}
+ # The LATEX_HEADER tag can be used to specify a user-defined LaTeX header for
+ # the generated LaTeX document. The header should contain everything until the
+@@ -2429,7 +2429,7 @@
+ # set to NO
+ # The default value is: YES.
+-HAVE_DOT               = NO
++HAVE_DOT               = YES
+ # The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
+ # to run in parallel. When set to 0 doxygen will base this on the number of
diff --git a/patches/omit-doxygen-build-paths b/patches/omit-doxygen-build-paths
new file mode 100644 (file)
index 0000000..f916c35
--- /dev/null
@@ -0,0 +1,77 @@
+From 58cc2b105211f0e5beab4dc228b478ebe105be06 Mon Sep 17 00:00:00 2001
+From: "A. Maitland Bottoms" <bottoms@debian.org>
+Date: Sun, 4 Sep 2022 21:37:45 -0400
+Subject: [PATCH] omit doxygen build paths
+
+Use reproducible-builds friendly configuration settings.
+
+Signed-off-by: A. Maitland Bottoms <bottoms@debian.org>
+---
+ docs/Doxyfile.in | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
+
+--- a/docs/Doxyfile.in
++++ b/docs/Doxyfile.in
+@@ -157,7 +157,7 @@
+ # will be relative from the directory where doxygen is started.
+ # This tag requires that the tag FULL_PATH_NAMES is set to YES.
+-STRIP_FROM_PATH        =
++STRIP_FROM_PATH        = @CMAKE_BINARY_DIR@ @CMAKE_SOURCE_DIR@
+ # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
+ # path mentioned in the documentation of a class, which tells the reader which
+@@ -166,7 +166,7 @@
+ # specify the list of include paths that are normally passed to the compiler
+ # using the -I flag.
+-STRIP_FROM_INC_PATH    =
++STRIP_FROM_INC_PATH    = @CMAKE_SOURCE_DIR@ @CMAKE_BINARY_DIR@
+ # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
+ # less readable) file names. This can be useful is your file systems doesn't
+@@ -637,7 +637,7 @@
+ # will mention the files that were used to generate the documentation.
+ # The default value is: YES.
+-SHOW_USED_FILES        = YES
++SHOW_USED_FILES        = NO
+ # Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
+ # will remove the Files entry from the Quick Index and from the Folder Tree View
+@@ -832,7 +832,7 @@
+ # Note that relative paths are relative to the directory from which doxygen is
+ # run.
+-EXCLUDE                = @CMAKE_BINARY_DIR@ @CMAKE_SOURCE_DIR@/cpu_features @CMAKE_SOURCE_DIR@/README.md @CMAKE_SOURCE_DIR@/docs/AUTHORS_RESUBMITTING_UNDER_LGPL_LICENSE.md
++EXCLUDE                = @CMAKE_BINARY_DIR@ @CMAKE_SOURCE_DIR@/cpu_features @CMAKE_SOURCE_DIR@/README.md @CMAKE_SOURCE_DIR@/cmake @CMAKE_SOURCE_DIR@/docs/AUTHORS_RESUBMITTING_UNDER_LGPL_LICENSE.md @CMAKE_SOURCE_DIR@/apps @CMAKE_SOURCE_DIR@/lib/*qa* @CMAKE_SOURCE_DIR@/tmpl
+ # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+ # directories that are symbolic links (a Unix file system feature) are excluded
+@@ -979,7 +979,7 @@
+ # link to the documentation.
+ # The default value is: YES.
+-REFERENCES_LINK_SOURCE = YES
++REFERENCES_LINK_SOURCE = NO
+ # If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
+ # source code will show a tooltip with additional information such as prototype,
+@@ -989,7 +989,7 @@
+ # The default value is: YES.
+ # This tag requires that the tag SOURCE_BROWSER is set to YES.
+-SOURCE_TOOLTIPS        = YES
++SOURCE_TOOLTIPS        = NO
+ # If the USE_HTAGS tag is set to YES then the references to source code will
+ # point to the HTML generated by the htags(1) tool instead of doxygen built-in
+@@ -1099,7 +1099,7 @@
+ # that doxygen normally uses.
+ # This tag requires that the tag GENERATE_HTML is set to YES.
+-HTML_FOOTER            =
++HTML_FOOTER            = ""
+ # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
+ # sheet that is used by each HTML page. It can be used to fine-tune the look of
diff --git a/patches/optional-static-apps b/patches/optional-static-apps
new file mode 100644 (file)
index 0000000..8cb050d
--- /dev/null
@@ -0,0 +1,25 @@
+Author: A. Maitland Bottoms <bottoms@debian.org>
+Forwarded: not-needed
+Description: optional static apps
+ For Debian, build apps with static libs if ENABLE_STATIC_APPS.
+
+--- a/apps/CMakeLists.txt
++++ b/apps/CMakeLists.txt
+@@ -44,7 +44,7 @@
+ endif()
+ target_link_libraries(volk_profile PRIVATE std::filesystem)
+-if(ENABLE_STATIC_LIBS)
++if(ENABLE_STATIC_LIBS AND ENABLE_STATIC_APPS)
+     target_link_libraries(volk_profile PRIVATE volk_static)
+     set_target_properties(volk_profile PROPERTIES LINK_FLAGS "-static")
+ else()
+@@ -61,7 +61,7 @@
+ add_executable(volk-config-info volk-config-info.cc ${CMAKE_CURRENT_SOURCE_DIR}/volk_option_helpers.cc
+         )
+-if(ENABLE_STATIC_LIBS)
++if(ENABLE_STATIC_LIBS AND ENABLE_STATIC_APPS)
+     target_link_libraries(volk-config-info volk_static)
+     set_target_properties(volk-config-info PROPERTIES LINK_FLAGS "-static")
+ else()
diff --git a/patches/series b/patches/series
new file mode 100644 (file)
index 0000000..620cb57
--- /dev/null
@@ -0,0 +1,11 @@
+0001-Allow-for-rounding-error-in-float-to-int-conversions.patch
+0002-Allow-for-rounding-error-in-volk_32fc_s32f_magnitude.patch
+0003-Remove-broken-sse_32-kernels.patch
+0004-Fix-flaky-fm_detect-test.patch
+0005-Fix-flaky-mod_range-test.patch
+0006-Allow-for-rounding-error-in-float-to-int-interleave.patch
+0007-Express-version-information-in-decimal.patch
+optional-static-apps
+omit-doxygen-build-paths
+update-doxygen
+doxygen-pdf
diff --git a/patches/update-doxygen b/patches/update-doxygen
new file mode 100644 (file)
index 0000000..d856a1e
--- /dev/null
@@ -0,0 +1,2134 @@
+Author: A. Maitland Bottoms <bottoms@debian.org>
+Forwarded: not-needed
+Description: update doxygen
+ For Debian version of Doxygen.
+
+--- a/docs/Doxyfile.in
++++ b/docs/Doxyfile.in
+@@ -1,4 +1,4 @@
+-# Doxyfile 1.8.6
++# Doxyfile 1.9.4
+ # This file describes the settings to be used by the documentation system
+ # doxygen (www.doxygen.org) for a project.
+@@ -12,16 +12,25 @@
+ # For lists, items can also be appended using:
+ # TAG += value [value, ...]
+ # Values that contain spaces should be placed between quotes (\" \").
++#
++# Note:
++#
++# Use doxygen to compare the used configuration file with the template
++# configuration file:
++# doxygen -x [configFile]
++# Use doxygen to compare the used configuration file with the template
++# configuration file without replacing the environment variables:
++# doxygen -x_noenv [configFile]
+ #---------------------------------------------------------------------------
+ # Project related configuration options
+ #---------------------------------------------------------------------------
+-# This tag specifies the encoding used for all characters in the config file
+-# that follow. The default is UTF-8 which is also the encoding used for all text
+-# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
+-# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
+-# for the list of possible encodings.
++# This tag specifies the encoding used for all characters in the configuration
++# file that follow. The default is UTF-8 which is also the encoding used for all
++# text before the first occurrence of this tag. Doxygen uses libiconv (or the
++# iconv built into libc) for the transcoding. See
++# https://www.gnu.org/software/libiconv/ for the list of possible encodings.
+ # The default value is: UTF-8.
+ DOXYFILE_ENCODING      = UTF-8
+@@ -46,10 +55,10 @@
+ PROJECT_BRIEF          = "Architecture-tuned implementations of math kernels"
+-# With the PROJECT_LOGO tag one can specify an logo or icon that is included in
+-# the documentation. The maximum height of the logo should not exceed 55 pixels
+-# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo
+-# to the output directory.
++# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
++# in the documentation. The maximum height of the logo should not exceed 55
++# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
++# the logo to the output directory.
+ PROJECT_LOGO           = @CMAKE_SOURCE_DIR@/docs/volk_logo_small.png
+@@ -58,44 +67,61 @@
+ # entered, it will be relative to the location where doxygen was started. If
+ # left blank the current directory will be used.
+-# TODO: configure this to be a special docs directory. nw tried, but running
+-# make doc won' create the directory, but with doxygen it will.  why?
+-
+ OUTPUT_DIRECTORY       =
+-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub-
+-# directories (in 2 levels) under the output directory of each output format and
+-# will distribute the generated files over these directories. Enabling this
++# If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096
++# sub-directories (in 2 levels) under the output directory of each output format
++# and will distribute the generated files over these directories. Enabling this
+ # option can be useful when feeding doxygen a huge amount of source files, where
+ # putting all generated files in the same directory would otherwise causes
+-# performance problems for the file system.
++# performance problems for the file system. Adapt CREATE_SUBDIRS_LEVEL to
++# control the number of sub-directories.
+ # The default value is: NO.
+ CREATE_SUBDIRS         = NO
++# Controls the number of sub-directories that will be created when
++# CREATE_SUBDIRS tag is set to YES. Level 0 represents 16 directories, and every
++# level increment doubles the number of directories, resulting in 4096
++# directories at level 8 which is the default and also the maximum value. The
++# sub-directories are organized in 2 levels, the first level always has a fixed
++# numer of 16 directories.
++# Minimum value: 0, maximum value: 8, default value: 8.
++# This tag requires that the tag CREATE_SUBDIRS is set to YES.
++
++CREATE_SUBDIRS_LEVEL   = 8
++
++# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
++# characters to appear in the names of generated files. If set to NO, non-ASCII
++# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
++# U+3044.
++# The default value is: NO.
++
++ALLOW_UNICODE_NAMES    = NO
++
+ # The OUTPUT_LANGUAGE tag is used to specify the language in which all
+ # documentation generated by doxygen is written. Doxygen will use this
+ # information to generate all constant output in the proper language.
+-# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
+-# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
+-# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
+-# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
+-# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
+-# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
+-# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
+-# Ukrainian and Vietnamese.
++# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Bulgarian,
++# Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, English
++# (United States), Esperanto, Farsi (Persian), Finnish, French, German, Greek,
++# Hindi, Hungarian, Indonesian, Italian, Japanese, Japanese-en (Japanese with
++# English messages), Korean, Korean-en (Korean with English messages), Latvian,
++# Lithuanian, Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese,
++# Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish,
++# Swedish, Turkish, Ukrainian and Vietnamese.
+ # The default value is: English.
+ OUTPUT_LANGUAGE        = English
+-# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member
++# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
+ # descriptions after the members that are listed in the file and class
+ # documentation (similar to Javadoc). Set to NO to disable this.
+ # The default value is: YES.
+ BRIEF_MEMBER_DESC      = YES
+-# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief
++# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
+ # description of a member or function before the detailed description
+ #
+ # Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+@@ -140,7 +166,7 @@
+ INLINE_INHERITED_MEMB  = NO
+-# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path
++# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
+ # before files name in the file list and in the header files. If set to NO the
+ # shortest path that makes the file name unique will be used
+ # The default value is: YES.
+@@ -157,7 +183,8 @@
+ # will be relative from the directory where doxygen is started.
+ # This tag requires that the tag FULL_PATH_NAMES is set to YES.
+-STRIP_FROM_PATH        = @CMAKE_BINARY_DIR@ @CMAKE_SOURCE_DIR@
++STRIP_FROM_PATH        = @CMAKE_BINARY_DIR@ \
++                         @CMAKE_SOURCE_DIR@
+ # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
+ # path mentioned in the documentation of a class, which tells the reader which
+@@ -166,7 +193,8 @@
+ # specify the list of include paths that are normally passed to the compiler
+ # using the -I flag.
+-STRIP_FROM_INC_PATH    = @CMAKE_SOURCE_DIR@ @CMAKE_BINARY_DIR@
++STRIP_FROM_INC_PATH    = @CMAKE_SOURCE_DIR@ \
++                         @CMAKE_BINARY_DIR@
+ # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
+ # less readable) file names. This can be useful is your file systems doesn't
+@@ -184,6 +212,16 @@
+ JAVADOC_AUTOBRIEF      = NO
++# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line
++# such as
++# /***************
++# as being the beginning of a Javadoc-style comment "banner". If set to NO, the
++# Javadoc-style will behave just like regular comments and it will not be
++# interpreted by doxygen.
++# The default value is: NO.
++
++JAVADOC_BANNER         = NO
++
+ # If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
+ # line (until the first dot) of a Qt-style comment as the brief description. If
+ # set to NO, the Qt-style will behave just like regular Qt-style comments (thus
+@@ -204,15 +242,23 @@
+ MULTILINE_CPP_IS_BRIEF = NO
++# By default Python docstrings are displayed as preformatted text and doxygen's
++# special commands cannot be used. By setting PYTHON_DOCSTRING to NO the
++# doxygen's special commands can be used and the contents of the docstring
++# documentation blocks is shown as doxygen documentation.
++# The default value is: YES.
++
++PYTHON_DOCSTRING       = YES
++
+ # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
+ # documentation from any documented member that it re-implements.
+ # The default value is: YES.
+ INHERIT_DOCS           = YES
+-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a
+-# new page for each member. If set to NO, the documentation of a member will be
+-# part of the file/class/namespace that contains it.
++# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
++# page for each member. If set to NO, the documentation of a member will be part
++# of the file/class/namespace that contains it.
+ # The default value is: NO.
+ SEPARATE_MEMBER_PAGES  = NO
+@@ -227,20 +273,19 @@
+ # the documentation. An alias has the form:
+ # name=value
+ # For example adding
+-# "sideeffect=@par Side Effects:\n"
++# "sideeffect=@par Side Effects:^^"
+ # will allow you to put the command \sideeffect (or @sideeffect) in the
+ # documentation, which will result in a user-defined paragraph with heading
+-# "Side Effects:". You can put \n's in the value part of an alias to insert
+-# newlines.
++# "Side Effects:". Note that you cannot put \n's in the value part of an alias
++# to insert newlines (in the resulting output). You can put ^^ in the value part
++# of an alias to insert a newline as if a physical newline was in the original
++# file. When you need a literal { or } or , in the value part of an alias you
++# have to escape them by means of a backslash (\), this can lead to conflicts
++# with the commands \{ and \} for these it is advised to use the version @{ and
++# @} or use a double escape (\\{ and \\})
+ ALIASES                =
+-# This tag can be used to specify a number of word-keyword mappings (TCL only).
+-# A mapping has the form "name=value". For example adding "class=itcl::class"
+-# will allow you to use the command class in the itcl::class meaning.
+-
+-TCL_SUBST              =
+-
+ # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+ # only. Doxygen will then generate output that is more tailored for C. For
+ # instance, some of the names that are used will be different. The list of all
+@@ -269,25 +314,40 @@
+ OPTIMIZE_OUTPUT_VHDL   = NO
++# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice
++# sources only. Doxygen will then generate output that is more tailored for that
++# language. For instance, namespaces will be presented as modules, types will be
++# separated into more groups, etc.
++# The default value is: NO.
++
++OPTIMIZE_OUTPUT_SLICE  = NO
++
+ # Doxygen selects the parser to use depending on the extension of the files it
+ # parses. With this tag you can assign which parser to use for a given
+ # extension. Doxygen has a built-in mapping, but you can override or extend it
+ # using this tag. The format is ext=language, where ext is a file extension, and
+-# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
+-# C#, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL. For instance to make
+-# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C
+-# (default is Fortran), use: inc=Fortran f=C.
++# language is one of the parsers supported by doxygen: IDL, Java, JavaScript,
++# Csharp (C#), C, C++, Lex, D, PHP, md (Markdown), Objective-C, Python, Slice,
++# VHDL, Fortran (fixed format Fortran: FortranFixed, free formatted Fortran:
++# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser
++# tries to guess whether the code is fixed or free formatted code, this is the
++# default for Fortran type files). For instance to make doxygen treat .inc files
++# as Fortran files (default is PHP), and .f files as C (default is Fortran),
++# use: inc=Fortran f=C.
+ #
+-# Note For files without extension you can use no_extension as a placeholder.
++# Note: For files without extension you can use no_extension as a placeholder.
+ #
+ # Note that for custom extensions you also need to set FILE_PATTERNS otherwise
+-# the files are not read by doxygen.
++# the files are not read by doxygen. When specifying no_extension you should add
++# * to the FILE_PATTERNS.
++#
++# Note see also the list of default file extension mappings.
+ EXTENSION_MAPPING      =
+ # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
+ # according to the Markdown format, which allows for more readable
+-# documentation. See http://daringfireball.net/projects/markdown/ for details.
++# documentation. See https://daringfireball.net/projects/markdown/ for details.
+ # The output of markdown processing is further processed by doxygen, so you can
+ # mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
+ # case of backward compatibilities issues.
+@@ -295,10 +355,19 @@
+ MARKDOWN_SUPPORT       = YES
++# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up
++# to that level are automatically included in the table of contents, even if
++# they do not have an id attribute.
++# Note: This feature currently applies only to Markdown headings.
++# Minimum value: 0, maximum value: 99, default value: 5.
++# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.
++
++TOC_INCLUDE_HEADINGS   = 5
++
+ # When enabled doxygen tries to link words that correspond to documented
+ # classes, or namespaces to their corresponding documentation. Such a link can
+-# be prevented in individual cases by by putting a % sign in front of the word
+-# or globally by setting AUTOLINK_SUPPORT to NO.
++# be prevented in individual cases by putting a % sign in front of the word or
++# globally by setting AUTOLINK_SUPPORT to NO.
+ # The default value is: YES.
+ AUTOLINK_SUPPORT       = YES
+@@ -320,7 +389,7 @@
+ CPP_CLI_SUPPORT        = NO
+ # Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
+-# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
++# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen
+ # will parse them like normal C++ but will assume all classes use public instead
+ # of private inheritance when no explicit protection keyword is present.
+ # The default value is: NO.
+@@ -338,13 +407,20 @@
+ IDL_PROPERTY_SUPPORT   = YES
+ # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+-# tag is set to YES, then doxygen will reuse the documentation of the first
++# tag is set to YES then doxygen will reuse the documentation of the first
+ # member in the group (if any) for the other members of the group. By default
+ # all members of a group must be documented explicitly.
+ # The default value is: NO.
+ DISTRIBUTE_GROUP_DOC   = NO
++# If one adds a struct or class to a group and this option is enabled, then also
++# any nested class or struct is added to the same group. By default this option
++# is disabled and one has to add nested compounds explicitly via \ingroup.
++# The default value is: NO.
++
++GROUP_NESTED_COMPOUNDS = NO
++
+ # Set the SUBGROUPING tag to YES to allow class member groups of the same type
+ # (for instance a group of public functions) to be put as a subgroup of that
+ # type (e.g. under the Public Functions section). Set it to NO to prevent
+@@ -399,11 +475,24 @@
+ LOOKUP_CACHE_SIZE      = 0
++# The NUM_PROC_THREADS specifies the number of threads doxygen is allowed to use
++# during processing. When set to 0 doxygen will based this on the number of
++# cores available in the system. You can set it explicitly to a value larger
++# than 0 to get more control over the balance between CPU load and processing
++# speed. At this moment only the input processing can be done using multiple
++# threads. Since this is still an experimental feature the default is set to 1,
++# which effectively disables parallel processing. Please report any issues you
++# encounter. Generating dot graphs in parallel is controlled by the
++# DOT_NUM_THREADS setting.
++# Minimum value: 0, maximum value: 32, default value: 1.
++
++NUM_PROC_THREADS       = 1
++
+ #---------------------------------------------------------------------------
+ # Build related configuration options
+ #---------------------------------------------------------------------------
+-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
++# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
+ # documentation are documented, even if no documentation was available. Private
+ # class members and static file members will be hidden unless the
+ # EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
+@@ -413,35 +502,41 @@
+ EXTRACT_ALL            = YES
+-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will
++# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
+ # be included in the documentation.
+ # The default value is: NO.
+ EXTRACT_PRIVATE        = NO
+-# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
++# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual
++# methods of a class will be included in the documentation.
++# The default value is: NO.
++
++EXTRACT_PRIV_VIRTUAL   = NO
++
++# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
+ # scope will be included in the documentation.
+ # The default value is: NO.
+ EXTRACT_PACKAGE        = NO
+-# If the EXTRACT_STATIC tag is set to YES all static members of a file will be
++# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
+ # included in the documentation.
+ # The default value is: NO.
+ EXTRACT_STATIC         = YES
+-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined
+-# locally in source files will be included in the documentation. If set to NO
++# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
++# locally in source files will be included in the documentation. If set to NO,
+ # only classes defined in header files are included. Does not have any effect
+ # for Java sources.
+ # The default value is: YES.
+ EXTRACT_LOCAL_CLASSES  = YES
+-# This flag is only useful for Objective-C code. When set to YES local methods,
++# This flag is only useful for Objective-C code. If set to YES, local methods,
+ # which are defined in the implementation section but not in the interface are
+-# included in the documentation. If set to NO only methods in the interface are
++# included in the documentation. If set to NO, only methods in the interface are
+ # included.
+ # The default value is: NO.
+@@ -456,6 +551,13 @@
+ EXTRACT_ANON_NSPACES   = NO
++# If this flag is set to YES, the name of an unnamed parameter in a declaration
++# will be determined by the corresponding definition. By default unnamed
++# parameters remain unnamed in the output.
++# The default value is: YES.
++
++RESOLVE_UNNAMED_PARAMS = YES
++
+ # If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
+ # undocumented members inside documented classes or files. If set to NO these
+ # members will be included in the various overviews, but no documentation
+@@ -466,21 +568,21 @@
+ # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
+ # undocumented classes that are normally visible in the class hierarchy. If set
+-# to NO these classes will be included in the various overviews. This option has
+-# no effect if EXTRACT_ALL is enabled.
++# to NO, these classes will be included in the various overviews. This option
++# has no effect if EXTRACT_ALL is enabled.
+ # The default value is: NO.
+ HIDE_UNDOC_CLASSES     = YES
+ # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
+-# (class|struct|union) declarations. If set to NO these declarations will be
+-# included in the documentation.
++# declarations. If set to NO, these declarations will be included in the
++# documentation.
+ # The default value is: NO.
+ HIDE_FRIEND_COMPOUNDS  = NO
+ # If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
+-# documentation blocks found inside the body of a function. If set to NO these
++# documentation blocks found inside the body of a function. If set to NO, these
+ # blocks will be appended to the function's detailed documentation block.
+ # The default value is: NO.
+@@ -493,22 +595,42 @@
+ INTERNAL_DOCS          = NO
+-# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
+-# names in lower-case letters. If set to YES upper-case letters are also
+-# allowed. This is useful if you have classes or files whose names only differ
+-# in case and if your file system supports case sensitive file names. Windows
+-# and Mac users are advised to set this option to NO.
++# With the correct setting of option CASE_SENSE_NAMES doxygen will better be
++# able to match the capabilities of the underlying filesystem. In case the
++# filesystem is case sensitive (i.e. it supports files in the same directory
++# whose names only differ in casing), the option must be set to YES to properly
++# deal with such files in case they appear in the input. For filesystems that
++# are not case sensitive the option should be set to NO to properly deal with
++# output files written for symbols that only differ in casing, such as for two
++# classes, one named CLASS and the other named Class, and to also support
++# references to files without having to specify the exact matching casing. On
++# Windows (including Cygwin) and MacOS, users should typically set this option
++# to NO, whereas on Linux or other Unix flavors it should typically be set to
++# YES.
+ # The default value is: system dependent.
+ CASE_SENSE_NAMES       = NO
+ # If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
+-# their full class and namespace scopes in the documentation. If set to YES the
++# their full class and namespace scopes in the documentation. If set to YES, the
+ # scope will be hidden.
+ # The default value is: NO.
+ HIDE_SCOPE_NAMES       = NO
++# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
++# append additional text to a page's title, such as Class Reference. If set to
++# YES the compound reference will be hidden.
++# The default value is: NO.
++
++HIDE_COMPOUND_REFERENCE= NO
++
++# If the SHOW_HEADERFILE tag is set to YES then the documentation for a class
++# will show which file needs to be included to use the class.
++# The default value is: YES.
++
++SHOW_HEADERFILE        = YES
++
+ # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
+ # the files that are included by a file in the documentation of that file.
+ # The default value is: YES.
+@@ -536,14 +658,14 @@
+ # If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
+ # (detailed) documentation of file and class members alphabetically by member
+-# name. If set to NO the members will appear in declaration order.
++# name. If set to NO, the members will appear in declaration order.
+ # The default value is: YES.
+ SORT_MEMBER_DOCS       = YES
+ # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
+ # descriptions of file, namespace and class members alphabetically by member
+-# name. If set to NO the members will appear in declaration order. Note that
++# name. If set to NO, the members will appear in declaration order. Note that
+ # this will also influence the order of the classes in the class list.
+ # The default value is: NO.
+@@ -588,27 +710,25 @@
+ STRICT_PROTO_MATCHING  = NO
+-# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the
+-# todo list. This list is created by putting \todo commands in the
+-# documentation.
++# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
++# list. This list is created by putting \todo commands in the documentation.
+ # The default value is: YES.
+ GENERATE_TODOLIST      = YES
+-# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the
+-# test list. This list is created by putting \test commands in the
+-# documentation.
++# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
++# list. This list is created by putting \test commands in the documentation.
+ # The default value is: YES.
+ GENERATE_TESTLIST      = YES
+-# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug
++# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
+ # list. This list is created by putting \bug commands in the documentation.
+ # The default value is: YES.
+ GENERATE_BUGLIST       = YES
+-# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO)
++# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
+ # the deprecated list. This list is created by putting \deprecated commands in
+ # the documentation.
+ # The default value is: YES.
+@@ -633,8 +753,8 @@
+ MAX_INITIALIZER_LINES  = 30
+ # Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
+-# the bottom of the documentation of classes and structs. If set to YES the list
+-# will mention the files that were used to generate the documentation.
++# the bottom of the documentation of classes and structs. If set to YES, the
++# list will mention the files that were used to generate the documentation.
+ # The default value is: YES.
+ SHOW_USED_FILES        = NO
+@@ -668,7 +788,8 @@
+ # output files in an output format independent way. To create the layout file
+ # that represents doxygen's defaults, run doxygen with the -l option. You can
+ # optionally specify a file name after the option, if omitted DoxygenLayout.xml
+-# will be used as the name of the layout file.
++# will be used as the name of the layout file. See also section "Changing the
++# layout of pages" for information.
+ #
+ # Note that if you run doxygen from a directory containing a file called
+ # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
+@@ -679,11 +800,10 @@
+ # The CITE_BIB_FILES tag can be used to specify one or more bib files containing
+ # the reference definitions. This must be a list of .bib files. The .bib
+ # extension is automatically appended if omitted. This requires the bibtex tool
+-# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
++# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info.
+ # For LaTeX the style of the bibliography can be controlled using
+ # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
+-# search path. Do not use file names with spaces, bibtex cannot handle them. See
+-# also \cite for info how to create references.
++# search path. See also \cite for info how to create references.
+ CITE_BIB_FILES         =
+@@ -699,7 +819,7 @@
+ QUIET                  = NO
+ # The WARNINGS tag can be used to turn on/off the warning messages that are
+-# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES
++# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
+ # this implies that the warnings are on.
+ #
+ # Tip: Turn warnings on while writing the documentation.
+@@ -707,7 +827,7 @@
+ WARNINGS               = YES
+-# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate
++# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
+ # warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
+ # will automatically be disabled.
+ # The default value is: YES.
+@@ -715,34 +835,66 @@
+ WARN_IF_UNDOCUMENTED   = YES
+ # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
+-# potential errors in the documentation, such as not documenting some parameters
+-# in a documented function, or documenting parameters that don't exist or using
+-# markup commands wrongly.
++# potential errors in the documentation, such as documenting some parameters in
++# a documented function twice, or documenting parameters that don't exist or
++# using markup commands wrongly.
+ # The default value is: YES.
+ WARN_IF_DOC_ERROR      = YES
++# If WARN_IF_INCOMPLETE_DOC is set to YES, doxygen will warn about incomplete
++# function parameter documentation. If set to NO, doxygen will accept that some
++# parameters have no documentation without warning.
++# The default value is: YES.
++
++WARN_IF_INCOMPLETE_DOC = YES
++
+ # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
+ # are documented, but have no documentation for their parameters or return
+-# value. If set to NO doxygen will only warn about wrong or incomplete parameter
+-# documentation, but not about the absence of documentation.
++# value. If set to NO, doxygen will only warn about wrong parameter
++# documentation, but not about the absence of documentation. If EXTRACT_ALL is
++# set to YES then this flag will automatically be disabled. See also
++# WARN_IF_INCOMPLETE_DOC
+ # The default value is: NO.
+ WARN_NO_PARAMDOC       = NO
++# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
++# a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS
++# then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but
++# at the end of the doxygen process doxygen will return with a non-zero status.
++# Possible values are: NO, YES and FAIL_ON_WARNINGS.
++# The default value is: NO.
++
++WARN_AS_ERROR          = NO
++
+ # The WARN_FORMAT tag determines the format of the warning messages that doxygen
+ # can produce. The string should contain the $file, $line, and $text tags, which
+ # will be replaced by the file and line number from which the warning originated
+ # and the warning text. Optionally the format may contain $version, which will
+ # be replaced by the version of the file (if it could be obtained via
+ # FILE_VERSION_FILTER)
++# See also: WARN_LINE_FORMAT
+ # The default value is: $file:$line: $text.
+ WARN_FORMAT            = "$file:$line: $text"
++# In the $text part of the WARN_FORMAT command it is possible that a reference
++# to a more specific place is given. To make it easier to jump to this place
++# (outside of doxygen) the user can define a custom "cut" / "paste" string.
++# Example:
++# WARN_LINE_FORMAT = "'vi $file +$line'"
++# See also: WARN_FORMAT
++# The default value is: at line $line of file $file.
++
++WARN_LINE_FORMAT       = "at line $line of file $file"
++
+ # The WARN_LOGFILE tag can be used to specify a file to which warning and error
+ # messages should be written. If left blank the output is written to standard
+-# error (stderr).
++# error (stderr). In case the file specified cannot be opened for writing the
++# warning and error messages are written to standard error. When as file - is
++# specified the warning and error messages are written to standard output
++# (stdout).
+ WARN_LOGFILE           =
+@@ -753,7 +905,7 @@
+ # The INPUT tag is used to specify the files and/or directories that contain
+ # documented source files. You may enter file names like myfile.cpp or
+ # directories like /usr/src/myproject. Separate the files or directories with
+-# spaces.
++# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
+ # Note: If this tag is empty the current directory is searched.
+ INPUT                  = @CMAKE_SOURCE_DIR@
+@@ -761,20 +913,29 @@
+ # This tag can be used to specify the character encoding of the source files
+ # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
+ # libiconv (or the iconv built into libc) for the transcoding. See the libiconv
+-# documentation (see: http://www.gnu.org/software/libiconv) for the list of
+-# possible encodings.
++# documentation (see:
++# https://www.gnu.org/software/libiconv/) for the list of possible encodings.
+ # The default value is: UTF-8.
+ INPUT_ENCODING         = UTF-8
+ # If the value of the INPUT tag contains directories, you can use the
+ # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
+-# *.h) to filter out the source-files in the directories. If left blank the
+-# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii,
+-# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp,
+-# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown,
+-# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf,
+-# *.qsf, *.as and *.js.
++# *.h) to filter out the source-files in the directories.
++#
++# Note that for custom extensions or not directly supported extensions you also
++# need to set EXTENSION_MAPPING for the extension otherwise the files are not
++# read by doxygen.
++#
++# Note the list of default checked file patterns might differ from the list of
++# default file extension mappings.
++#
++# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
++# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
++# *.hh, *.hxx, *.hpp, *.h++, *.l, *.cs, *.d, *.php, *.php4, *.php5, *.phtml,
++# *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C
++# comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd,
++# *.vhdl, *.ucf, *.qsf and *.ice.
+ FILE_PATTERNS          = *.c \
+                          *.cc \
+@@ -832,7 +993,14 @@
+ # Note that relative paths are relative to the directory from which doxygen is
+ # run.
+-EXCLUDE                = @CMAKE_BINARY_DIR@ @CMAKE_SOURCE_DIR@/cpu_features @CMAKE_SOURCE_DIR@/README.md @CMAKE_SOURCE_DIR@/cmake @CMAKE_SOURCE_DIR@/docs/AUTHORS_RESUBMITTING_UNDER_LGPL_LICENSE.md @CMAKE_SOURCE_DIR@/apps @CMAKE_SOURCE_DIR@/lib/*qa* @CMAKE_SOURCE_DIR@/tmpl
++EXCLUDE                = @CMAKE_BINARY_DIR@ \
++                         @CMAKE_SOURCE_DIR@/cpu_features \
++                         @CMAKE_SOURCE_DIR@/README.md \
++                         @CMAKE_SOURCE_DIR@/cmake \
++                         @CMAKE_SOURCE_DIR@/docs/AUTHORS_RESUBMITTING_UNDER_LGPL_LICENSE.md \
++                         @CMAKE_SOURCE_DIR@/apps \
++                         @CMAKE_SOURCE_DIR@/lib/*qa* \
++                         @CMAKE_SOURCE_DIR@/tmpl
+ # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+ # directories that are symbolic links (a Unix file system feature) are excluded
+@@ -854,7 +1022,7 @@
+ # (namespaces, classes, functions, etc.) that should be excluded from the
+ # output. The symbol name can be a fully qualified name, a word, or if the
+ # wildcard * is used, a substring. Examples: ANamespace, AClass,
+-# AClass::ANamespace, ANamespace::*Test
++# ANamespace::AClass, ANamespace::*Test
+ #
+ # Note that the wildcards are matched against the file with absolute path, so to
+ # exclude all test directories use the pattern */test/*
+@@ -901,6 +1069,10 @@
+ # Note that the filter must not add or remove lines; it is applied before the
+ # code is scanned, but not when the output code is generated. If lines are added
+ # or removed, the anchors will not be placed correctly.
++#
++# Note that for custom extensions or not directly supported extensions you also
++# need to set EXTENSION_MAPPING for the extension otherwise the files are not
++# properly processed by doxygen.
+ INPUT_FILTER           =
+@@ -910,11 +1082,15 @@
+ # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
+ # filters are used. If the FILTER_PATTERNS tag is empty or if none of the
+ # patterns match the file name, INPUT_FILTER is applied.
++#
++# Note that for custom extensions or not directly supported extensions you also
++# need to set EXTENSION_MAPPING for the extension otherwise the files are not
++# properly processed by doxygen.
+ FILTER_PATTERNS        =
+ # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+-# INPUT_FILTER ) will also be used to filter the input files that are used for
++# INPUT_FILTER) will also be used to filter the input files that are used for
+ # producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
+ # The default value is: NO.
+@@ -962,7 +1138,7 @@
+ STRIP_CODE_COMMENTS    = YES
+ # If the REFERENCED_BY_RELATION tag is set to YES then for each documented
+-# function all documented functions referencing it will be listed.
++# entity all documented functions referencing it will be listed.
+ # The default value is: NO.
+ REFERENCED_BY_RELATION = NO
+@@ -974,7 +1150,7 @@
+ REFERENCES_RELATION    = NO
+ # If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
+-# to YES, then the hyperlinks from functions in REFERENCES_RELATION and
++# to YES then the hyperlinks from functions in REFERENCES_RELATION and
+ # REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
+ # link to the documentation.
+ # The default value is: YES.
+@@ -994,12 +1170,12 @@
+ # If the USE_HTAGS tag is set to YES then the references to source code will
+ # point to the HTML generated by the htags(1) tool instead of doxygen built-in
+ # source browser. The htags tool is part of GNU's global source tagging system
+-# (see http://www.gnu.org/software/global/global.html). You will need version
++# (see https://www.gnu.org/software/global/global.html). You will need version
+ # 4.8.6 or higher.
+ #
+ # To use it do the following:
+ # - Install the latest version of global
+-# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
++# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file
+ # - Make sure the INPUT points to the root of the source tree
+ # - Run doxygen as normal
+ #
+@@ -1021,6 +1197,46 @@
+ VERBATIM_HEADERS       = YES
++# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the
++# clang parser (see:
++# http://clang.llvm.org/) for more accurate parsing at the cost of reduced
++# performance. This can be particularly helpful with template rich C++ code for
++# which doxygen's built-in parser lacks the necessary type information.
++# Note: The availability of this option depends on whether or not doxygen was
++# generated with the -Duse_libclang=ON option for CMake.
++# The default value is: NO.
++
++CLANG_ASSISTED_PARSING = NO
++
++# If the CLANG_ASSISTED_PARSING tag is set to YES and the CLANG_ADD_INC_PATHS
++# tag is set to YES then doxygen will add the directory of each input to the
++# include path.
++# The default value is: YES.
++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
++
++CLANG_ADD_INC_PATHS    = YES
++
++# If clang assisted parsing is enabled you can provide the compiler with command
++# line options that you would normally use when invoking the compiler. Note that
++# the include paths will already be set by doxygen for the files and directories
++# specified with INPUT and INCLUDE_PATH.
++# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
++
++CLANG_OPTIONS          =
++
++# If clang assisted parsing is enabled you can provide the clang parser with the
++# path to the directory containing a file called compile_commands.json. This
++# file is the compilation database (see:
++# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) containing the
++# options used when the source files were built. This is equivalent to
++# specifying the -p option to a clang tool, such as clang-check. These options
++# will then be passed to the parser. Any options specified with CLANG_OPTIONS
++# will be added as well.
++# Note: The availability of this option depends on whether or not doxygen was
++# generated with the -Duse_libclang=ON option for CMake.
++
++CLANG_DATABASE_PATH    =
++
+ #---------------------------------------------------------------------------
+ # Configuration options related to the alphabetical class index
+ #---------------------------------------------------------------------------
+@@ -1032,13 +1248,6 @@
+ ALPHABETICAL_INDEX     = YES
+-# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
+-# which the alphabetical index list will be split.
+-# Minimum value: 1, maximum value: 20, default value: 5.
+-# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+-
+-COLS_IN_ALPHA_INDEX    = 5
+-
+ # In case all classes in a project start with a common prefix, all classes will
+ # be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
+ # can be used to specify a prefix (or a list of prefixes) that should be ignored
+@@ -1051,7 +1260,7 @@
+ # Configuration options related to the HTML output
+ #---------------------------------------------------------------------------
+-# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output
++# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
+ # The default value is: YES.
+ GENERATE_HTML          = YES
+@@ -1099,7 +1308,7 @@
+ # that doxygen normally uses.
+ # This tag requires that the tag GENERATE_HTML is set to YES.
+-HTML_FOOTER            = ""
++HTML_FOOTER            =
+ # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
+ # sheet that is used by each HTML page. It can be used to fine-tune the look of
+@@ -1113,13 +1322,15 @@
+ HTML_STYLESHEET        =
+-# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional user-
+-# defined cascading style sheet that is included after the standard style sheets
++# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
++# cascading style sheets that are included after the standard style sheets
+ # created by doxygen. Using this option one can overrule certain style aspects.
+ # This is preferred over using HTML_STYLESHEET since it does not replace the
+ # standard style sheet and is therefore more robust against future updates.
+-# Doxygen will copy the style sheet file to the output directory. For an example
+-# see the documentation.
++# Doxygen will copy the style sheet files to the output directory.
++# Note: The order of the extra style sheet files is of importance (e.g. the last
++# style sheet in the list overrules the setting of the previous ones in the
++# list). For an example see the documentation.
+ # This tag requires that the tag GENERATE_HTML is set to YES.
+ HTML_EXTRA_STYLESHEET  =
+@@ -1135,9 +1346,9 @@
+ HTML_EXTRA_FILES       =
+ # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
+-# will adjust the colors in the stylesheet and background images according to
+-# this color. Hue is specified as an angle on a colorwheel, see
+-# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
++# will adjust the colors in the style sheet and background images according to
++# this color. Hue is specified as an angle on a color-wheel, see
++# https://en.wikipedia.org/wiki/Hue for more information. For instance the value
+ # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
+ # purple, and 360 is red again.
+ # Minimum value: 0, maximum value: 359, default value: 220.
+@@ -1146,7 +1357,7 @@
+ HTML_COLORSTYLE_HUE    = 220
+ # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
+-# in the HTML output. For a value of 0 the output will use grayscales only. A
++# in the HTML output. For a value of 0 the output will use gray-scales only. A
+ # value of 255 will produce the most vivid colors.
+ # Minimum value: 0, maximum value: 255, default value: 100.
+ # This tag requires that the tag GENERATE_HTML is set to YES.
+@@ -1166,12 +1377,24 @@
+ # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+ # page will contain the date and time when the page was generated. Setting this
+-# to NO can help when comparing the output of multiple runs.
+-# The default value is: YES.
++# to YES can help to show when doxygen was last run and thus if the
++# documentation is up to date.
++# The default value is: NO.
+ # This tag requires that the tag GENERATE_HTML is set to YES.
+ HTML_TIMESTAMP         = NO
++# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML
++# documentation will contain a main index with vertical navigation menus that
++# are dynamically created via JavaScript. If disabled, the navigation index will
++# consists of multiple levels of tabs that are statically embedded in every HTML
++# page. Disable this option to support browsers that do not have JavaScript,
++# like the Qt help browser.
++# The default value is: YES.
++# This tag requires that the tag GENERATE_HTML is set to YES.
++
++HTML_DYNAMIC_MENUS     = YES
++
+ # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+ # documentation will contain sections that can be hidden and shown after the
+ # page has loaded.
+@@ -1195,13 +1418,14 @@
+ # If the GENERATE_DOCSET tag is set to YES, additional index files will be
+ # generated that can be used as input for Apple's Xcode 3 integrated development
+-# environment (see: http://developer.apple.com/tools/xcode/), introduced with
+-# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
+-# Makefile in the HTML output directory. Running make will produce the docset in
+-# that directory and running make install will install the docset in
++# environment (see:
++# https://developer.apple.com/xcode/), introduced with OSX 10.5 (Leopard). To
++# create a documentation set, doxygen will generate a Makefile in the HTML
++# output directory. Running make will produce the docset in that directory and
++# running make install will install the docset in
+ # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
+-# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+-# for more information.
++# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy
++# genXcode/_index.html for more information.
+ # The default value is: NO.
+ # This tag requires that the tag GENERATE_HTML is set to YES.
+@@ -1215,6 +1439,13 @@
+ DOCSET_FEEDNAME        = "Doxygen generated docs"
++# This tag determines the URL of the docset feed. A documentation feed provides
++# an umbrella under which multiple documentation sets from a single provider
++# (such as a company or product suite) can be grouped.
++# This tag requires that the tag GENERATE_DOCSET is set to YES.
++
++DOCSET_FEEDURL         =
++
+ # This tag specifies a string that should uniquely identify the documentation
+ # set bundle. This should be a reverse domain-name style string, e.g.
+ # com.mycompany.MyDocSet. Doxygen will append .docset to the name.
+@@ -1240,8 +1471,12 @@
+ # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
+ # additional HTML index files: index.hhp, index.hhc, and index.hhk. The
+ # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
+-# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
+-# Windows.
++# on Windows. In the beginning of 2021 Microsoft took the original page, with
++# a.o. the download links, offline the HTML help workshop was already many years
++# in maintenance mode). You can download the HTML help workshop from the web
++# archives at Installation executable (see:
++# http://web.archive.org/web/20160201063255/http://download.microsoft.com/downlo
++# ad/0/A/9/0A939EF6-E31C-430F-A3DF-DFAE7960D564/htmlhelp.exe).
+ #
+ # The HTML Help Workshop contains a compiler that can convert all HTML output
+ # generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
+@@ -1263,28 +1498,29 @@
+ CHM_FILE               =
+ # The HHC_LOCATION tag can be used to specify the location (absolute path
+-# including file name) of the HTML help compiler ( hhc.exe). If non-empty
++# including file name) of the HTML help compiler (hhc.exe). If non-empty,
+ # doxygen will try to run the HTML help compiler on the generated index.hhp.
+ # The file has to be specified with full path.
+ # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+ HHC_LOCATION           =
+-# The GENERATE_CHI flag controls if a separate .chi index file is generated (
+-# YES) or that it should be included in the master .chm file ( NO).
++# The GENERATE_CHI flag controls if a separate .chi index file is generated
++# (YES) or that it should be included in the main .chm file (NO).
+ # The default value is: NO.
+ # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+ GENERATE_CHI           = NO
+-# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc)
++# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
+ # and project file content.
+ # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+ CHM_INDEX_ENCODING     =
+-# The BINARY_TOC flag controls whether a binary table of contents is generated (
+-# YES) or a normal table of contents ( NO) in the .chm file.
++# The BINARY_TOC flag controls whether a binary table of contents is generated
++# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
++# enables the Previous and Next buttons.
+ # The default value is: NO.
+ # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+@@ -1315,7 +1551,8 @@
+ # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
+ # Project output. For more information please see Qt Help Project / Namespace
+-# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
++# (see:
++# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace).
+ # The default value is: org.doxygen.Project.
+ # This tag requires that the tag GENERATE_QHP is set to YES.
+@@ -1323,8 +1560,8 @@
+ # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
+ # Help Project output. For more information please see Qt Help Project / Virtual
+-# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
+-# folders).
++# Folders (see:
++# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders).
+ # The default value is: doc.
+ # This tag requires that the tag GENERATE_QHP is set to YES.
+@@ -1332,30 +1569,30 @@
+ # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
+ # filter to add. For more information please see Qt Help Project / Custom
+-# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+-# filters).
++# Filters (see:
++# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters).
+ # This tag requires that the tag GENERATE_QHP is set to YES.
+ QHP_CUST_FILTER_NAME   =
+ # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
+ # custom filter to add. For more information please see Qt Help Project / Custom
+-# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+-# filters).
++# Filters (see:
++# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters).
+ # This tag requires that the tag GENERATE_QHP is set to YES.
+ QHP_CUST_FILTER_ATTRS  =
+ # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+ # project's filter section matches. Qt Help Project / Filter Attributes (see:
+-# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
++# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes).
+ # This tag requires that the tag GENERATE_QHP is set to YES.
+ QHP_SECT_FILTER_ATTRS  =
+-# The QHG_LOCATION tag can be used to specify the location of Qt's
+-# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
+-# generated .qhp file.
++# The QHG_LOCATION tag can be used to specify the location (absolute path
++# including file name) of Qt's qhelpgenerator. If non-empty doxygen will try to
++# run qhelpgenerator on the generated .qhp file.
+ # This tag requires that the tag GENERATE_QHP is set to YES.
+ QHG_LOCATION           =
+@@ -1397,17 +1634,29 @@
+ # index structure (just like the one that is generated for HTML Help). For this
+ # to work a browser that supports JavaScript, DHTML, CSS and frames is required
+ # (i.e. any modern browser). Windows users are probably better off using the
+-# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can
+-# further fine-tune the look of the index. As an example, the default style
+-# sheet generated by doxygen has an example that shows how to put an image at
+-# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
+-# the same information as the tab index, you could consider setting
+-# DISABLE_INDEX to YES when enabling this option.
++# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
++# further fine tune the look of the index (see "Fine-tuning the output"). As an
++# example, the default style sheet generated by doxygen has an example that
++# shows how to put an image at the root of the tree instead of the PROJECT_NAME.
++# Since the tree basically has the same information as the tab index, you could
++# consider setting DISABLE_INDEX to YES when enabling this option.
+ # The default value is: NO.
+ # This tag requires that the tag GENERATE_HTML is set to YES.
+ GENERATE_TREEVIEW      = YES
++# When both GENERATE_TREEVIEW and DISABLE_INDEX are set to YES, then the
++# FULL_SIDEBAR option determines if the side bar is limited to only the treeview
++# area (value NO) or if it should extend to the full height of the window (value
++# YES). Setting this to YES gives a layout similar to
++# https://docs.readthedocs.io with more room for contents, but less room for the
++# project logo, title, and description. If either GENERATE_TREEVIEW or
++# DISABLE_INDEX is set to NO, this option has no effect.
++# The default value is: NO.
++# This tag requires that the tag GENERATE_HTML is set to YES.
++
++FULL_SIDEBAR           = NO
++
+ # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
+ # doxygen will group on one line in the generated HTML documentation.
+ #
+@@ -1425,13 +1674,31 @@
+ TREEVIEW_WIDTH         = 250
+-# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to
++# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
+ # external symbols imported via tag files in a separate window.
+ # The default value is: NO.
+ # This tag requires that the tag GENERATE_HTML is set to YES.
+ EXT_LINKS_IN_WINDOW    = NO
++# If the OBFUSCATE_EMAILS tag is set to YES, doxygen will obfuscate email
++# addresses.
++# The default value is: YES.
++# This tag requires that the tag GENERATE_HTML is set to YES.
++
++OBFUSCATE_EMAILS       = YES
++
++# If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg
++# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see
++# https://inkscape.org) to generate formulas as SVG images instead of PNGs for
++# the HTML output. These images will generally look nicer at scaled resolutions.
++# Possible values are: png (the default) and svg (looks nicer but requires the
++# pdf2svg or inkscape tool).
++# The default value is: png.
++# This tag requires that the tag GENERATE_HTML is set to YES.
++
++HTML_FORMULA_FORMAT    = png
++
+ # Use this tag to change the font size of LaTeX formulas included as images in
+ # the HTML documentation. When you change the font size after a successful
+ # doxygen run you need to manually remove any form_*.png images from the HTML
+@@ -1441,7 +1708,7 @@
+ FORMULA_FONTSIZE       = 10
+-# Use the FORMULA_TRANPARENT tag to determine whether or not the images
++# Use the FORMULA_TRANSPARENT tag to determine whether or not the images
+ # generated for formulas are transparent PNGs. Transparent PNGs are not
+ # supported properly for IE 6.0, but are supported on all modern browsers.
+ #
+@@ -1452,9 +1719,15 @@
+ FORMULA_TRANSPARENT    = YES
++# The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands
++# to create new LaTeX commands to be used in formulas as building blocks. See
++# the section "Including formulas" for details.
++
++FORMULA_MACROFILE      =
++
+ # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
+-# http://www.mathjax.org) which uses client side Javascript for the rendering
+-# instead of using prerendered bitmaps. Use this if you do not have LaTeX
++# https://www.mathjax.org) which uses client side JavaScript for the rendering
++# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
+ # installed or if you want to formulas look prettier in the HTML output. When
+ # enabled you may also need to install MathJax separately and configure the path
+ # to it using the MATHJAX_RELPATH option.
+@@ -1463,11 +1736,29 @@
+ USE_MATHJAX            = NO
++# With MATHJAX_VERSION it is possible to specify the MathJax version to be used.
++# Note that the different versions of MathJax have different requirements with
++# regards to the different settings, so it is possible that also other MathJax
++# settings have to be changed when switching between the different MathJax
++# versions.
++# Possible values are: MathJax_2 and MathJax_3.
++# The default value is: MathJax_2.
++# This tag requires that the tag USE_MATHJAX is set to YES.
++
++MATHJAX_VERSION        = MathJax_2
++
+ # When MathJax is enabled you can set the default output format to be used for
+-# the MathJax output. See the MathJax site (see:
+-# http://docs.mathjax.org/en/latest/output.html) for more details.
++# the MathJax output. For more details about the output format see MathJax
++# version 2 (see:
++# http://docs.mathjax.org/en/v2.7-latest/output.html) and MathJax version 3
++# (see:
++# http://docs.mathjax.org/en/latest/web/components/output.html).
+ # Possible values are: HTML-CSS (which is slower, but has the best
+-# compatibility), NativeMML (i.e. MathML) and SVG.
++# compatibility. This is the name for Mathjax version 2, for MathJax version 3
++# this will be translated into chtml), NativeMML (i.e. MathML. Only supported
++# for NathJax 2. For MathJax version 3 chtml will be used instead.), chtml (This
++# is the name for Mathjax version 3, for MathJax version 2 this will be
++# translated into HTML-CSS) and SVG.
+ # The default value is: HTML-CSS.
+ # This tag requires that the tag USE_MATHJAX is set to YES.
+@@ -1480,22 +1771,29 @@
+ # MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
+ # Content Delivery Network so you can quickly see the result without installing
+ # MathJax. However, it is strongly recommended to install a local copy of
+-# MathJax from http://www.mathjax.org before deployment.
+-# The default value is: http://cdn.mathjax.org/mathjax/latest.
++# MathJax from https://www.mathjax.org before deployment. The default value is:
++# - in case of MathJax version 2: https://cdn.jsdelivr.net/npm/mathjax@2
++# - in case of MathJax version 3: https://cdn.jsdelivr.net/npm/mathjax@3
+ # This tag requires that the tag USE_MATHJAX is set to YES.
+ MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
+ # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
+ # extension names that should be enabled during MathJax rendering. For example
++# for MathJax version 2 (see
++# https://docs.mathjax.org/en/v2.7-latest/tex.html#tex-and-latex-extensions):
+ # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
++# For example for MathJax version 3 (see
++# http://docs.mathjax.org/en/latest/input/tex/extensions/index.html):
++# MATHJAX_EXTENSIONS = ams
+ # This tag requires that the tag USE_MATHJAX is set to YES.
+ MATHJAX_EXTENSIONS     =
+ # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
+ # of code that will be used on startup of the MathJax code. See the MathJax site
+-# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
++# (see:
++# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. For an
+ # example see the documentation.
+ # This tag requires that the tag USE_MATHJAX is set to YES.
+@@ -1523,12 +1821,12 @@
+ SEARCHENGINE           = YES
+ # When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+-# implemented using a web server instead of a web client using Javascript. There
+-# are two flavours of web server based searching depending on the
+-# EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for
+-# searching and an index file used by the script. When EXTERNAL_SEARCH is
+-# enabled the indexing and searching needs to be provided by external tools. See
+-# the section "External Indexing and Searching" for details.
++# implemented using a web server instead of a web client using JavaScript. There
++# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
++# setting. When disabled, doxygen will generate a PHP script for searching and
++# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
++# and searching needs to be provided by external tools. See the section
++# "External Indexing and Searching" for details.
+ # The default value is: NO.
+ # This tag requires that the tag SEARCHENGINE is set to YES.
+@@ -1540,9 +1838,10 @@
+ # external search engine pointed to by the SEARCHENGINE_URL option to obtain the
+ # search results.
+ #
+-# Doxygen ships with an example indexer ( doxyindexer) and search engine
++# Doxygen ships with an example indexer (doxyindexer) and search engine
+ # (doxysearch.cgi) which are based on the open source search engine library
+-# Xapian (see: http://xapian.org/).
++# Xapian (see:
++# https://xapian.org/).
+ #
+ # See the section "External Indexing and Searching" for details.
+ # The default value is: NO.
+@@ -1553,10 +1852,11 @@
+ # The SEARCHENGINE_URL should point to a search engine hosted by a web server
+ # which will return the search results when EXTERNAL_SEARCH is enabled.
+ #
+-# Doxygen ships with an example indexer ( doxyindexer) and search engine
++# Doxygen ships with an example indexer (doxyindexer) and search engine
+ # (doxysearch.cgi) which are based on the open source search engine library
+-# Xapian (see: http://xapian.org/). See the section "External Indexing and
+-# Searching" for details.
++# Xapian (see:
++# https://xapian.org/). See the section "External Indexing and Searching" for
++# details.
+ # This tag requires that the tag SEARCHENGINE is set to YES.
+ SEARCHENGINE_URL       =
+@@ -1591,7 +1891,7 @@
+ # Configuration options related to the LaTeX output
+ #---------------------------------------------------------------------------
+-# If the GENERATE_LATEX tag is set to YES doxygen will generate LaTeX output.
++# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
+ # The default value is: YES.
+ GENERATE_LATEX         = NO
+@@ -1607,22 +1907,36 @@
+ # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+ # invoked.
+ #
+-# Note that when enabling USE_PDFLATEX this option is only used for generating
+-# bitmaps for formulas in the HTML output, but not in the Makefile that is
+-# written to the output directory.
+-# The default file is: latex.
++# Note that when not enabling USE_PDFLATEX the default is latex when enabling
++# USE_PDFLATEX the default is pdflatex and when in the later case latex is
++# chosen this is overwritten by pdflatex. For specific output languages the
++# default can have been set differently, this depends on the implementation of
++# the output language.
+ # This tag requires that the tag GENERATE_LATEX is set to YES.
+ LATEX_CMD_NAME         = latex
+ # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
+ # index for LaTeX.
++# Note: This tag is used in the Makefile / make.bat.
++# See also: LATEX_MAKEINDEX_CMD for the part in the generated output file
++# (.tex).
+ # The default file is: makeindex.
+ # This tag requires that the tag GENERATE_LATEX is set to YES.
+ MAKEINDEX_CMD_NAME     = makeindex
+-# If the COMPACT_LATEX tag is set to YES doxygen generates more compact LaTeX
++# The LATEX_MAKEINDEX_CMD tag can be used to specify the command name to
++# generate index for LaTeX. In case there is no backslash (\) as first character
++# it will be automatically added in the LaTeX code.
++# Note: This tag is used in the generated output file (.tex).
++# See also: MAKEINDEX_CMD_NAME for the part in the Makefile / make.bat.
++# The default value is: makeindex.
++# This tag requires that the tag GENERATE_LATEX is set to YES.
++
++LATEX_MAKEINDEX_CMD    = makeindex
++
++# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
+ # documents. This may be useful for small projects and may help to save some
+ # trees in general.
+ # The default value is: NO.
+@@ -1640,39 +1954,57 @@
+ PAPER_TYPE             = a4
+ # The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
+-# that should be included in the LaTeX output. To get the times font for
+-# instance you can specify
+-# EXTRA_PACKAGES=times
++# that should be included in the LaTeX output. The package can be specified just
++# by its name or with the correct syntax as to be used with the LaTeX
++# \usepackage command. To get the times font for instance you can specify :
++# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
++# To use the option intlimits with the amsmath package you can specify:
++# EXTRA_PACKAGES=[intlimits]{amsmath}
+ # If left blank no extra packages will be included.
+ # This tag requires that the tag GENERATE_LATEX is set to YES.
+ EXTRA_PACKAGES         =
+-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
+-# generated LaTeX document. The header should contain everything until the first
+-# chapter. If it is left blank doxygen will generate a standard header. See
+-# section "Doxygen usage" for information on how to let doxygen write the
+-# default header to a separate file.
+-#
+-# Note: Only use a user-defined header if you know what you are doing! The
+-# following commands have a special meaning inside the header: $title,
+-# $datetime, $date, $doxygenversion, $projectname, $projectnumber. Doxygen will
+-# replace them by respectively the title of the page, the current date and time,
+-# only the current date, the version number of doxygen, the project name (see
+-# PROJECT_NAME), or the project number (see PROJECT_NUMBER).
++# The LATEX_HEADER tag can be used to specify a user-defined LaTeX header for
++# the generated LaTeX document. The header should contain everything until the
++# first chapter. If it is left blank doxygen will generate a standard header. It
++# is highly recommended to start with a default header using
++# doxygen -w latex new_header.tex new_footer.tex new_stylesheet.sty
++# and then modify the file new_header.tex. See also section "Doxygen usage" for
++# information on how to generate the default header that doxygen normally uses.
++#
++# Note: Only use a user-defined header if you know what you are doing!
++# Note: The header is subject to change so you typically have to regenerate the
++# default header when upgrading to a newer version of doxygen. The following
++# commands have a special meaning inside the header (and footer): For a
++# description of the possible markers and block names see the documentation.
+ # This tag requires that the tag GENERATE_LATEX is set to YES.
+ LATEX_HEADER           =
+-# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
+-# generated LaTeX document. The footer should contain everything after the last
+-# chapter. If it is left blank doxygen will generate a standard footer.
+-#
+-# Note: Only use a user-defined footer if you know what you are doing!
++# The LATEX_FOOTER tag can be used to specify a user-defined LaTeX footer for
++# the generated LaTeX document. The footer should contain everything after the
++# last chapter. If it is left blank doxygen will generate a standard footer. See
++# LATEX_HEADER for more information on how to generate a default footer and what
++# special commands can be used inside the footer. See also section "Doxygen
++# usage" for information on how to generate the default footer that doxygen
++# normally uses. Note: Only use a user-defined footer if you know what you are
++# doing!
+ # This tag requires that the tag GENERATE_LATEX is set to YES.
+ LATEX_FOOTER           =
++# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
++# LaTeX style sheets that are included after the standard style sheets created
++# by doxygen. Using this option one can overrule certain style aspects. Doxygen
++# will copy the style sheet files to the output directory.
++# Note: The order of the extra style sheet files is of importance (e.g. the last
++# style sheet in the list overrules the setting of the previous ones in the
++# list).
++# This tag requires that the tag GENERATE_LATEX is set to YES.
++
++LATEX_EXTRA_STYLESHEET =
++
+ # The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
+ # other source files which should be copied to the LATEX_OUTPUT output
+ # directory. Note that the files will be copied as-is; there are no commands or
+@@ -1690,9 +2022,11 @@
+ PDF_HYPERLINKS         = YES
+-# If the LATEX_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
+-# the PDF file directly from the LaTeX files. Set this option to YES to get a
+-# higher quality PDF documentation.
++# If the USE_PDFLATEX tag is set to YES, doxygen will use the engine as
++# specified with LATEX_CMD_NAME to generate the PDF file directly from the LaTeX
++# files. Set this option to YES, to get a higher quality PDF documentation.
++#
++# See also section LATEX_CMD_NAME for selecting the engine.
+ # The default value is: YES.
+ # This tag requires that the tag GENERATE_LATEX is set to YES.
+@@ -1700,8 +2034,7 @@
+ # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
+ # command to the generated LaTeX files. This will instruct LaTeX to keep running
+-# if errors occur, instead of asking the user for help. This option is also used
+-# when generating formulas in HTML.
++# if errors occur, instead of asking the user for help.
+ # The default value is: NO.
+ # This tag requires that the tag GENERATE_LATEX is set to YES.
+@@ -1714,29 +2047,35 @@
+ LATEX_HIDE_INDICES     = NO
+-# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
+-# code with syntax highlighting in the LaTeX output.
+-#
+-# Note that which sources are shown also depends on other settings such as
+-# SOURCE_BROWSER.
+-# The default value is: NO.
+-# This tag requires that the tag GENERATE_LATEX is set to YES.
+-
+-LATEX_SOURCE_CODE      = NO
+-
+ # The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+ # bibliography, e.g. plainnat, or ieeetr. See
+-# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
++# https://en.wikipedia.org/wiki/BibTeX and \cite for more info.
+ # The default value is: plain.
+ # This tag requires that the tag GENERATE_LATEX is set to YES.
+ LATEX_BIB_STYLE        = plain
++# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated
++# page will contain the date and time when the page was generated. Setting this
++# to NO can help when comparing the output of multiple runs.
++# The default value is: NO.
++# This tag requires that the tag GENERATE_LATEX is set to YES.
++
++LATEX_TIMESTAMP        = NO
++
++# The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute)
++# path from which the emoji images will be read. If a relative path is entered,
++# it will be relative to the LATEX_OUTPUT directory. If left blank the
++# LATEX_OUTPUT directory will be used.
++# This tag requires that the tag GENERATE_LATEX is set to YES.
++
++LATEX_EMOJI_DIRECTORY  =
++
+ #---------------------------------------------------------------------------
+ # Configuration options related to the RTF output
+ #---------------------------------------------------------------------------
+-# If the GENERATE_RTF tag is set to YES doxygen will generate RTF output. The
++# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
+ # RTF output is optimized for Word 97 and may not look too pretty with other RTF
+ # readers/editors.
+ # The default value is: NO.
+@@ -1751,7 +2090,7 @@
+ RTF_OUTPUT             = rtf
+-# If the COMPACT_RTF tag is set to YES doxygen generates more compact RTF
++# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
+ # documents. This may be useful for small projects and may help to save some
+ # trees in general.
+ # The default value is: NO.
+@@ -1771,9 +2110,9 @@
+ RTF_HYPERLINKS         = NO
+-# Load stylesheet definitions from file. Syntax is similar to doxygen's config
+-# file, i.e. a series of assignments. You only have to provide replacements,
+-# missing definitions are set to their default value.
++# Load stylesheet definitions from file. Syntax is similar to doxygen's
++# configuration file, i.e. a series of assignments. You only have to provide
++# replacements, missing definitions are set to their default value.
+ #
+ # See also section "Doxygen usage" for information on how to generate the
+ # default style sheet that doxygen normally uses.
+@@ -1782,8 +2121,8 @@
+ RTF_STYLESHEET_FILE    =
+ # Set optional variables used in the generation of an RTF document. Syntax is
+-# similar to doxygen's config file. A template extensions file can be generated
+-# using doxygen -e rtf extensionFile.
++# similar to doxygen's configuration file. A template extensions file can be
++# generated using doxygen -e rtf extensionFile.
+ # This tag requires that the tag GENERATE_RTF is set to YES.
+ RTF_EXTENSIONS_FILE    =
+@@ -1792,7 +2131,7 @@
+ # Configuration options related to the man page output
+ #---------------------------------------------------------------------------
+-# If the GENERATE_MAN tag is set to YES doxygen will generate man pages for
++# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
+ # classes and files.
+ # The default value is: NO.
+@@ -1816,6 +2155,13 @@
+ MAN_EXTENSION          = .3
++# The MAN_SUBDIR tag determines the name of the directory created within
++# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
++# MAN_EXTENSION with the initial . removed.
++# This tag requires that the tag GENERATE_MAN is set to YES.
++
++MAN_SUBDIR             =
++
+ # If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
+ # will generate one additional man file for each entity documented in the real
+ # man page(s). These additional files only source the real man page, but without
+@@ -1829,7 +2175,7 @@
+ # Configuration options related to the XML output
+ #---------------------------------------------------------------------------
+-# If the GENERATE_XML tag is set to YES doxygen will generate an XML file that
++# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
+ # captures the structure of the code including all documentation.
+ # The default value is: NO.
+@@ -1843,19 +2189,7 @@
+ XML_OUTPUT             = xml
+-# The XML_SCHEMA tag can be used to specify a XML schema, which can be used by a
+-# validating XML parser to check the syntax of the XML files.
+-# This tag requires that the tag GENERATE_XML is set to YES.
+-
+-XML_SCHEMA             =
+-
+-# The XML_DTD tag can be used to specify a XML DTD, which can be used by a
+-# validating XML parser to check the syntax of the XML files.
+-# This tag requires that the tag GENERATE_XML is set to YES.
+-
+-XML_DTD                =
+-
+-# If the XML_PROGRAMLISTING tag is set to YES doxygen will dump the program
++# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
+ # listings (including syntax highlighting and cross-referencing information) to
+ # the XML output. Note that enabling this will significantly increase the size
+ # of the XML output.
+@@ -1864,11 +2198,18 @@
+ XML_PROGRAMLISTING     = YES
++# If the XML_NS_MEMB_FILE_SCOPE tag is set to YES, doxygen will include
++# namespace members in file scope as well, matching the HTML output.
++# The default value is: NO.
++# This tag requires that the tag GENERATE_XML is set to YES.
++
++XML_NS_MEMB_FILE_SCOPE = NO
++
+ #---------------------------------------------------------------------------
+ # Configuration options related to the DOCBOOK output
+ #---------------------------------------------------------------------------
+-# If the GENERATE_DOCBOOK tag is set to YES doxygen will generate Docbook files
++# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
+ # that can be used to generate PDF.
+ # The default value is: NO.
+@@ -1886,10 +2227,10 @@
+ # Configuration options for the AutoGen Definitions output
+ #---------------------------------------------------------------------------
+-# If the GENERATE_AUTOGEN_DEF tag is set to YES doxygen will generate an AutoGen
+-# Definitions (see http://autogen.sf.net) file that captures the structure of
+-# the code including all documentation. Note that this feature is still
+-# experimental and incomplete at the moment.
++# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
++# AutoGen Definitions (see http://autogen.sourceforge.net/) file that captures
++# the structure of the code including all documentation. Note that this feature
++# is still experimental and incomplete at the moment.
+ # The default value is: NO.
+ GENERATE_AUTOGEN_DEF   = NO
+@@ -1898,7 +2239,7 @@
+ # Configuration options related to the Perl module output
+ #---------------------------------------------------------------------------
+-# If the GENERATE_PERLMOD tag is set to YES doxygen will generate a Perl module
++# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
+ # file that captures the structure of the code including all documentation.
+ #
+ # Note that this feature is still experimental and incomplete at the moment.
+@@ -1906,7 +2247,7 @@
+ GENERATE_PERLMOD       = NO
+-# If the PERLMOD_LATEX tag is set to YES doxygen will generate the necessary
++# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
+ # Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
+ # output from the Perl module output.
+ # The default value is: NO.
+@@ -1914,9 +2255,9 @@
+ PERLMOD_LATEX          = NO
+-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be nicely
++# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
+ # formatted so it can be parsed by a human reader. This is useful if you want to
+-# understand what is going on. On the other hand, if this tag is set to NO the
++# understand what is going on. On the other hand, if this tag is set to NO, the
+ # size of the Perl module output will be much smaller and Perl will parse it
+ # just the same.
+ # The default value is: YES.
+@@ -1936,14 +2277,14 @@
+ # Configuration options related to the preprocessor
+ #---------------------------------------------------------------------------
+-# If the ENABLE_PREPROCESSING tag is set to YES doxygen will evaluate all
++# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
+ # C-preprocessor directives found in the sources and include files.
+ # The default value is: YES.
+ ENABLE_PREPROCESSING   = YES
+-# If the MACRO_EXPANSION tag is set to YES doxygen will expand all macro names
+-# in the source code. If set to NO only conditional compilation will be
++# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
++# in the source code. If set to NO, only conditional compilation will be
+ # performed. Macro expansion can be done in a controlled way by setting
+ # EXPAND_ONLY_PREDEF to YES.
+ # The default value is: NO.
+@@ -1959,7 +2300,7 @@
+ EXPAND_ONLY_PREDEF     = NO
+-# If the SEARCH_INCLUDES tag is set to YES the includes files in the
++# If the SEARCH_INCLUDES tag is set to YES, the include files in the
+ # INCLUDE_PATH will be searched if a #include is found.
+ # The default value is: YES.
+ # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+@@ -1968,7 +2309,8 @@
+ # The INCLUDE_PATH tag can be used to specify one or more directories that
+ # contain include files that are not input files but should be processed by the
+-# preprocessor.
++# preprocessor. Note that the INCLUDE_PATH is not recursive, so the setting of
++# RECURSIVE has no effect here.
+ # This tag requires that the tag SEARCH_INCLUDES is set to YES.
+ INCLUDE_PATH           =
+@@ -2008,9 +2350,9 @@
+ EXPAND_AS_DEFINED      =
+ # If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
+-# remove all references to function-like macros that are alone on a line, have an
+-# all uppercase name, and do not end with a semicolon. Such function macros are
+-# typically used for boiler-plate code, and will confuse the parser if not
++# remove all references to function-like macros that are alone on a line, have
++# an all uppercase name, and do not end with a semicolon. Such function macros
++# are typically used for boiler-plate code, and will confuse the parser if not
+ # removed.
+ # The default value is: YES.
+ # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+@@ -2030,7 +2372,7 @@
+ # where loc1 and loc2 can be relative or absolute paths or URLs. See the
+ # section "Linking to external documentation" for more information about the use
+ # of tag files.
+-# Note: Each tag file must have an unique name (where the name does NOT include
++# Note: Each tag file must have a unique name (where the name does NOT include
+ # the path). If a tag file is not located in the directory in which doxygen is
+ # run, you must also specify the path to the tagfile here.
+@@ -2042,54 +2384,31 @@
+ GENERATE_TAGFILE       =
+-# If the ALLEXTERNALS tag is set to YES all external class will be listed in the
+-# class index. If set to NO only the inherited external classes will be listed.
++# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
++# the class index. If set to NO, only the inherited external classes will be
++# listed.
+ # The default value is: NO.
+ ALLEXTERNALS           = NO
+-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed in
+-# the modules index. If set to NO, only the current project's groups will be
++# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
++# in the modules index. If set to NO, only the current project's groups will be
+ # listed.
+ # The default value is: YES.
+ EXTERNAL_GROUPS        = YES
+-# If the EXTERNAL_PAGES tag is set to YES all external pages will be listed in
++# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
+ # the related pages index. If set to NO, only the current project's pages will
+ # be listed.
+ # The default value is: YES.
+ EXTERNAL_PAGES         = YES
+-# The PERL_PATH should be the absolute path and name of the perl script
+-# interpreter (i.e. the result of 'which perl').
+-# The default file (with absolute path) is: /usr/bin/perl.
+-
+-PERL_PATH              = /usr/bin/perl
+-
+ #---------------------------------------------------------------------------
+ # Configuration options related to the dot tool
+ #---------------------------------------------------------------------------
+-# If the CLASS_DIAGRAMS tag is set to YES doxygen will generate a class diagram
+-# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
+-# NO turns the diagrams off. Note that this option also works with HAVE_DOT
+-# disabled, but it is recommended to install and use dot, since it yields more
+-# powerful graphs.
+-# The default value is: YES.
+-
+-CLASS_DIAGRAMS         = NO
+-
+-# You can define message sequence charts within doxygen comments using the \msc
+-# command. Doxygen will then run the mscgen tool (see:
+-# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
+-# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+-# the mscgen tool resides. If left empty the tool is assumed to be found in the
+-# default search path.
+-
+-MSCGEN_PATH            =
+-
+ # You can include diagrams made with dia in doxygen documentation. Doxygen will
+ # then run dia to produce the diagram and insert it in the documentation. The
+ # DIA_PATH tag allows you to specify the directory where the dia binary resides.
+@@ -2097,7 +2416,7 @@
+ DIA_PATH               =
+-# If set to YES, the inheritance and collaboration graphs will hide inheritance
++# If set to YES the inheritance and collaboration graphs will hide inheritance
+ # and usage relations if the target is undocumented or is not a class.
+ # The default value is: YES.
+@@ -2108,7 +2427,7 @@
+ # http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
+ # Bell Labs. The other options in this section have no effect if this option is
+ # set to NO
+-# The default value is: NO.
++# The default value is: YES.
+ HAVE_DOT               = NO
+@@ -2122,7 +2441,7 @@
+ DOT_NUM_THREADS        = 0
+-# When you want a differently looking font n the dot files that doxygen
++# When you want a differently looking font in the dot files that doxygen
+ # generates you can specify the font name using DOT_FONTNAME. You need to make
+ # sure dot is able to find the font, which can be done by putting it in a
+ # standard location or by setting the DOTFONTPATH environment variable or by
+@@ -2146,13 +2465,16 @@
+ DOT_FONTPATH           =
+-# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
+-# each documented class showing the direct and indirect inheritance relations.
+-# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
++# If the CLASS_GRAPH tag is set to YES (or GRAPH) then doxygen will generate a
++# graph for each documented class showing the direct and indirect inheritance
++# relations. In case HAVE_DOT is set as well dot will be used to draw the graph,
++# otherwise the built-in generator will be used. If the CLASS_GRAPH tag is set
++# to TEXT the direct and indirect inheritance relations will be shown as texts /
++# links.
++# Possible values are: NO, YES, TEXT and GRAPH.
+ # The default value is: YES.
+-# This tag requires that the tag HAVE_DOT is set to YES.
+-CLASS_GRAPH            = YES
++CLASS_GRAPH            = TEXT
+ # If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
+ # graph for each documented class showing the direct and indirect implementation
+@@ -2164,13 +2486,14 @@
+ COLLABORATION_GRAPH    = YES
+ # If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
+-# groups, showing the direct groups dependencies.
++# groups, showing the direct groups dependencies. See also the chapter Grouping
++# in the manual.
+ # The default value is: YES.
+ # This tag requires that the tag HAVE_DOT is set to YES.
+ GROUP_GRAPHS           = YES
+-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
++# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
+ # collaboration diagrams in a style similar to the OMG's Unified Modeling
+ # Language.
+ # The default value is: NO.
+@@ -2187,10 +2510,32 @@
+ # but if the number exceeds 15, the total amount of fields shown is limited to
+ # 10.
+ # Minimum value: 0, maximum value: 100, default value: 10.
+-# This tag requires that the tag HAVE_DOT is set to YES.
++# This tag requires that the tag UML_LOOK is set to YES.
+ UML_LIMIT_NUM_FIELDS   = 10
++# If the DOT_UML_DETAILS tag is set to NO, doxygen will show attributes and
++# methods without types and arguments in the UML graphs. If the DOT_UML_DETAILS
++# tag is set to YES, doxygen will add type and arguments for attributes and
++# methods in the UML graphs. If the DOT_UML_DETAILS tag is set to NONE, doxygen
++# will not generate fields with class member information in the UML graphs. The
++# class diagrams will look similar to the default class diagrams but using UML
++# notation for the relationships.
++# Possible values are: NO, YES and NONE.
++# The default value is: NO.
++# This tag requires that the tag UML_LOOK is set to YES.
++
++DOT_UML_DETAILS        = NO
++
++# The DOT_WRAP_THRESHOLD tag can be used to set the maximum number of characters
++# to display on a single line. If the actual line length exceeds this threshold
++# significantly it will wrapped across multiple lines. Some heuristics are apply
++# to avoid ugly line breaks.
++# Minimum value: 0, maximum value: 1000, default value: 17.
++# This tag requires that the tag HAVE_DOT is set to YES.
++
++DOT_WRAP_THRESHOLD     = 17
++
+ # If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
+ # collaboration graphs will show the relations between templates and their
+ # instances.
+@@ -2222,7 +2567,8 @@
+ #
+ # Note that enabling this option will significantly increase the time of a run.
+ # So in most cases it will be better to enable call graphs for selected
+-# functions only using the \callgraph command.
++# functions only using the \callgraph command. Disabling a call graph can be
++# accomplished by means of the command \hidecallgraph.
+ # The default value is: NO.
+ # This tag requires that the tag HAVE_DOT is set to YES.
+@@ -2233,7 +2579,8 @@
+ #
+ # Note that enabling this option will significantly increase the time of a run.
+ # So in most cases it will be better to enable caller graphs for selected
+-# functions only using the \callergraph command.
++# functions only using the \callergraph command. Disabling a caller graph can be
++# accomplished by means of the command \hidecallergraph.
+ # The default value is: NO.
+ # This tag requires that the tag HAVE_DOT is set to YES.
+@@ -2255,12 +2602,24 @@
+ DIRECTORY_GRAPH        = YES
++# The DIR_GRAPH_MAX_DEPTH tag can be used to limit the maximum number of levels
++# of child directories generated in directory dependency graphs by dot.
++# Minimum value: 1, maximum value: 25, default value: 1.
++# This tag requires that the tag DIRECTORY_GRAPH is set to YES.
++
++DIR_GRAPH_MAX_DEPTH    = 1
++
+ # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+-# generated by dot.
++# generated by dot. For an explanation of the image formats see the section
++# output formats in the documentation of the dot tool (Graphviz (see:
++# http://www.graphviz.org/)).
+ # Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
+ # to make the SVG files visible in IE 9+ (other browsers do not have this
+ # requirement).
+-# Possible values are: png, jpg, gif and svg.
++# Possible values are: png, jpg, jpg:cairo, jpg:cairo:gd, jpg:gd, jpg:gd:gd,
++# gif, gif:cairo, gif:cairo:gd, gif:gd, gif:gd:gd, svg, png:gd, png:gd:gd,
++# png:cairo, png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and
++# png:gdiplus:gdiplus.
+ # The default value is: png.
+ # This tag requires that the tag HAVE_DOT is set to YES.
+@@ -2303,6 +2662,24 @@
+ DIAFILE_DIRS           =
++# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
++# path where java can find the plantuml.jar file or to the filename of jar file
++# to be used. If left blank, it is assumed PlantUML is not used or called during
++# a preprocessing step. Doxygen will generate a warning when it encounters a
++# \startuml command in this case and will not generate output for the diagram.
++
++PLANTUML_JAR_PATH      =
++
++# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a
++# configuration file for plantuml.
++
++PLANTUML_CFG_FILE      =
++
++# When using plantuml, the specified paths are searched for files specified by
++# the !include statement in a plantuml block.
++
++PLANTUML_INCLUDE_PATH  =
++
+ # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
+ # that will be shown in the graph. If the number of nodes in a graph becomes
+ # larger than this value, doxygen will truncate the graph, which is visualized
+@@ -2339,7 +2716,7 @@
+ DOT_TRANSPARENT        = NO
+-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
++# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
+ # files in one run (i.e. multiple -o and -T options on the command line). This
+ # makes dot run faster, but since only newer versions of dot (>1.8.10) support
+ # this, this feature is disabled by default.
+@@ -2351,14 +2728,18 @@
+ # If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
+ # explaining the meaning of the various boxes and arrows in the dot generated
+ # graphs.
++# Note: This tag requires that UML_LOOK isn't set, i.e. the doxygen internal
++# graphical representation for inheritance and collaboration diagrams is used.
+ # The default value is: YES.
+ # This tag requires that the tag HAVE_DOT is set to YES.
+ GENERATE_LEGEND        = YES
+-# If the DOT_CLEANUP tag is set to YES doxygen will remove the intermediate dot
++# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate
+ # files that are used to generate the various graphs.
++#
++# Note: This setting is not only used for dot files but also for msc temporary
++# files.
+ # The default value is: YES.
+-# This tag requires that the tag HAVE_DOT is set to YES.
+ DOT_CLEANUP            = YES
+--- a/docs/DoxygenLayout.xml
++++ b/docs/DoxygenLayout.xml
+@@ -1,22 +1,36 @@
+ <doxygenlayout version="1.0">
+-  <!-- Generated by doxygen 1.8.6 -->
++  <!-- Generated by doxygen 1.9.4 -->
+   <!-- Navigation index tabs for HTML output -->
+   <navindex>
+     <tab type="mainpage" visible="yes" title=""/>
+     <tab type="pages" visible="yes" title="" intro=""/>
+     <tab type="modules" visible="yes" title="" intro=""/>
+-    <!--
+     <tab type="namespaces" visible="yes" title="">
+       <tab type="namespacelist" visible="yes" title="" intro=""/>
+       <tab type="namespacemembers" visible="yes" title="" intro=""/>
+     </tab>
++    <tab type="concepts" visible="yes" title="">
++    </tab>
++    <tab type="interfaces" visible="yes" title="">
++      <tab type="interfacelist" visible="yes" title="" intro=""/>
++      <tab type="interfaceindex" visible="$ALPHABETICAL_INDEX" title=""/>
++      <tab type="interfacehierarchy" visible="yes" title="" intro=""/>
++    </tab>
+     <tab type="classes" visible="yes" title="">
+       <tab type="classlist" visible="yes" title="" intro=""/>
+       <tab type="classindex" visible="$ALPHABETICAL_INDEX" title=""/>
+       <tab type="hierarchy" visible="yes" title="" intro=""/>
+       <tab type="classmembers" visible="yes" title="" intro=""/>
+     </tab>
+-    -->
++    <tab type="structs" visible="yes" title="">
++      <tab type="structlist" visible="yes" title="" intro=""/>
++      <tab type="structindex" visible="$ALPHABETICAL_INDEX" title=""/>
++    </tab>
++    <tab type="exceptions" visible="yes" title="">
++      <tab type="exceptionlist" visible="yes" title="" intro=""/>
++      <tab type="exceptionindex" visible="$ALPHABETICAL_INDEX" title=""/>
++      <tab type="exceptionhierarchy" visible="yes" title="" intro=""/>
++    </tab>
+     <tab type="files" visible="yes" title="">
+       <tab type="filelist" visible="yes" title="" intro=""/>
+       <tab type="globals" visible="yes" title="" intro=""/>
+@@ -27,7 +41,7 @@
+   <!-- Layout definition for a class page -->
+   <class>
+     <briefdescription visible="yes"/>
+-    <includes visible="$SHOW_INCLUDE_FILES"/>
++    <includes visible="$SHOW_HEADERFILE"/>
+     <inheritancegraph visible="$CLASS_GRAPH"/>
+     <collaborationgraph visible="$COLLABORATION_GRAPH"/>
+     <memberdecl>
+@@ -89,8 +103,14 @@
+     <memberdecl>
+       <nestednamespaces visible="yes" title=""/>
+       <constantgroups visible="yes" title=""/>
++      <interfaces visible="yes" title=""/>
+       <classes visible="yes" title=""/>
++      <concepts visible="yes" title=""/>
++      <structs visible="yes" title=""/>
++      <exceptions visible="yes" title=""/>
+       <typedefs title=""/>
++      <sequences title=""/>
++      <dictionaries title=""/>
+       <enums title=""/>
+       <functions title=""/>
+       <variables title=""/>
+@@ -100,6 +120,8 @@
+     <memberdef>
+       <inlineclasses title=""/>
+       <typedefs title=""/>
++      <sequences title=""/>
++      <dictionaries title=""/>
+       <enums title=""/>
+       <functions title=""/>
+       <variables title=""/>
+@@ -107,6 +129,15 @@
+     <authorsection visible="yes"/>
+   </namespace>
++  <!-- Layout definition for a concept page -->
++  <concept>
++    <briefdescription visible="yes"/>
++    <includes visible="$SHOW_HEADERFILE"/>
++    <definition visible="yes" title=""/>
++    <detaileddescription title=""/>
++    <authorsection visible="yes"/>
++  </concept>
++
+   <!-- Layout definition for a file page -->
+   <file>
+     <briefdescription visible="yes"/>
+@@ -115,11 +146,17 @@
+     <includedbygraph visible="$INCLUDED_BY_GRAPH"/>
+     <sourcelink visible="yes"/>
+     <memberdecl>
++      <interfaces visible="yes" title=""/>
+       <classes visible="yes" title=""/>
++      <structs visible="yes" title=""/>
++      <exceptions visible="yes" title=""/>
+       <namespaces visible="yes" title=""/>
++      <concepts visible="yes" title=""/>
+       <constantgroups visible="yes" title=""/>
+       <defines title=""/>
+       <typedefs title=""/>
++      <sequences title=""/>
++      <dictionaries title=""/>
+       <enums title=""/>
+       <functions title=""/>
+       <variables title=""/>
+@@ -130,6 +167,8 @@
+       <inlineclasses title=""/>
+       <defines title=""/>
+       <typedefs title=""/>
++      <sequences title=""/>
++      <dictionaries title=""/>
+       <enums title=""/>
+       <functions title=""/>
+       <variables title=""/>
+@@ -146,9 +185,12 @@
+       <dirs visible="yes" title=""/>
+       <files visible="yes" title=""/>
+       <namespaces visible="yes" title=""/>
++      <concepts visible="yes" title=""/>
+       <classes visible="yes" title=""/>
+       <defines title=""/>
+       <typedefs title=""/>
++      <sequences title=""/>
++      <dictionaries title=""/>
+       <enums title=""/>
+       <enumvalues title=""/>
+       <functions title=""/>
+@@ -168,6 +210,8 @@
+       <inlineclasses title=""/>
+       <defines title=""/>
+       <typedefs title=""/>
++      <sequences title=""/>
++      <dictionaries title=""/>
+       <enums title=""/>
+       <enumvalues title=""/>
+       <functions title=""/>
diff --git a/rules b/rules
new file mode 100755 (executable)
index 0000000..c881415
--- /dev/null
+++ b/rules
@@ -0,0 +1,26 @@
+#!/usr/bin/make -f
+DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
+export DEB_HOST_MULTIARCH
+#DEB_BUILD_MAINT_OPTIONS += hardening=+all
+#export DEB_BUILD_MAINT_OPTIONS
+#export DH_VERBOSE=1
+
+%:
+       dh $@ --with python3
+
+override_dh_auto_configure:
+       dh_auto_configure -- -DLIB_SUFFIX="/$(DEB_HOST_MULTIARCH)"
+#      -DENABLE_DOXYGEN_PDF=ON
+
+override_dh_auto_build-indep:
+       cmake --build obj-* --target all
+       cmake --build obj-* --target volk_doc
+#      cmake --build obj-* --target volk_pdf_doc
+
+override_dh_auto_install:
+       dh_auto_install
+       find debian -type d -empty -delete
+
+override_dh_auto_clean:
+       dh_auto_clean
+       rm -rf gen/__pycache__
diff --git a/source/format b/source/format
new file mode 100644 (file)
index 0000000..163aaf8
--- /dev/null
@@ -0,0 +1 @@
+3.0 (quilt)
diff --git a/upstream/metadata b/upstream/metadata
new file mode 100644 (file)
index 0000000..30bf7d4
--- /dev/null
@@ -0,0 +1,4 @@
+---
+Bug-Database: https://github.com/gnuradio/volk/issues
+Bug-Submit: https://github.com/gnuradio/volk/issues/new
+Repository-Browse: https://github.com/gnuradio/volk
diff --git a/volk-config-info.1 b/volk-config-info.1
new file mode 100644 (file)
index 0000000..e8d6efd
--- /dev/null
@@ -0,0 +1,45 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.40.10.
+.TH VOLK-CONFIG-INFO "1" "July 2014" "volk-config-info 0.1" "User Commands"
+.SH NAME
+volk-config-info \- pkgconfig-like tool for Vector Optimized Library of Kernels 0.1
+.SH DESCRIPTION
+.SS "Program options: volk-config-info [options]:"
+.TP
+\fB\-h\fR [ \fB\-\-help\fR ]
+print help message
+.TP
+\fB\-\-prefix\fR
+print VOLK installation prefix
+.TP
+\fB\-\-builddate\fR
+print VOLK build date (RFC2822 format)
+.TP
+\fB\-\-cc\fR
+print VOLK C compiler version
+.TP
+\fB\-\-cflags\fR
+print VOLK CFLAGS
+.TP
+\fB\-\-all\-machines\fR
+print VOLK machines built into library
+.TP
+\fB\-\-avail\-machines\fR
+print VOLK machines the current platform can use
+.TP
+\fB\-\-machine\fR
+print the VOLK machine that will be used
+.TP
+\fB\-v\fR [ \fB\-\-version\fR ]
+print VOLK version
+.SH "SEE ALSO"
+The full documentation for
+.B volk-config-info
+is maintained as a Texinfo manual.  If the
+.B info
+and
+.B volk-config-info
+programs are properly installed at your site, the command
+.IP
+.B info volk-config-info
+.PP
+should give you access to the complete manual.
diff --git a/volk_modtool.1 b/volk_modtool.1
new file mode 100644 (file)
index 0000000..752e7f5
--- /dev/null
@@ -0,0 +1,112 @@
+.TH GNURADIO "1" "August 2013" "volk_modtool 3.7" "User Commands"
+.SH NAME
+volk_modtool \- tailor VOLK modules
+.SH DESCRIPTION
+The volk_modtool tool is installed along with VOLK as a way of helping
+to construct, add to, and interogate the VOLK library or companion
+libraries.
+.P
+volk_modtool is installed into $prefix/bin.
+.P
+VOLK modtool enables creating standalone (out-of-tree) VOLK modules
+and provides a few tools for sharing VOLK kernels between VOLK
+modules.  If you need to design or work with VOLK kernels away from
+the canonical VOLK library, this is the tool.  If you need to tailor
+your own VOLK library for whatever reason, this is the tool.
+.P
+The canonical VOLK library installs a volk.h and a libvolk.so.  Your
+own library will install volk_$name.h and libvolk_$name.so.  Ya Gronk?
+Good.
+.P
+There isn't a substantial difference between the canonical VOLK
+module and any other VOLK module.  They're all peers.  Any module
+created via VOLK modtool will come complete with a default
+volk_modtool.cfg file associating the module with the base from which
+it came, its distinctive $name and its destination (or path).  These
+values (created from user input if VOLK modtool runs without a
+user-supplied config file or a default config file) serve as default
+values for some VOLK modtool actions.  It's more or less intended for
+the user to change directories to the top level of a created VOLK
+module and then run volk_modtool to take advantage of the values
+stored in the default volk_modtool.cfg file.
+.P
+Apart from creating new VOLK modules, VOLK modtool allows you to list
+the names of kernels in other modules, list the names of kernels in
+the current module, add kernels from another module into the current
+module, and remove kernels from the current module.  When moving
+kernels between modules, VOLK modtool does its best to keep the qa
+and profiling code for those kernels intact.  If the base has a test
+or a profiling call for some kernel, those calls will follow the
+kernel when VOLK modtool adds that kernel.  If QA or profiling
+requires a puppet kernel, the puppet kernel will follow the original
+kernel when VOLK modtool adds that original kernel.  VOLK modtool
+respects puppets.
+.P
+======================================================================
+.P
+.SH Installing a new VOLK Library:
+.P
+Run the command "volk_modtool -i". This will ask you three questions:
+.P
+  name: // the name to give your VOLK library: volk_<name>
+  destination: // directory new source tree is built under -- must exists.
+               // It will create <directory>/volk_<name>
+  base: // the directory containing the original VOLK source code
+.P
+This will build a new skeleton directory in the destination provided
+with the name volk_<name>. It will contain the necessary structure to
+build:
+.P
+  mkdir build
+  cd build
+  cmake -DCMAKE_INSTALL_PREFIX=/opt/volk ../
+  make
+  sudo make install
+.P
+Right now, the library is empty and contains no kernels. Kernels can
+be added from another VOLK library using the '-a' option. If not
+specified, the kernel will be extracted from the base VOLK
+directory. Using the '-b' allows us to specify another VOLK library to
+use for this purpose.
+.P
+  volk_modtool -a -n 32fc_x2_conjugate_dot_prod_32fc
+.P
+This will put the code for the new kernel into
+<destination>/volk_<name>/kernels/volk_<name>/
+.P
+Other kernels must be added by hand. See the following webpages for
+more information about creating VOLK kernels:
+  http://gnuradio.org/doc/doxygen/volk_guide.html
+  http://gnuradio.org/redmine/projects/gnuradio/wiki/Volk
+.P
+======================================================================
+.P
+.SH OPTIONS
+.P
+Options for Adding and Removing Kernels:
+  -a, --add_kernel
+       Add kernel from existing VOLK module. Uses the base VOLK module
+       unless -b is used. Use -n to specify the kernel name.
+       Requires: -n.
+       Optional: -b
+.P
+  -A, --add_all_kernels
+       Add all kernels from existing VOLK module. Uses the base VOLK
+       module unless -b is used.
+       Optional: -b
+.P
+  -x, --remove_kernel
+       Remove kernel from module. 
+       Required: -n.
+       Optional: -b
+.P
+Options for Listing Kernels:
+  -l, --list
+       Lists all kernels available in the base VOLK module.
+.P
+  -k, --kernels 
+       Lists all kernels in this VOLK module.
+.P
+  -r, --remote-list
+       Lists all kernels in another VOLK module that is specified
+       using the -b option.
diff --git a/volk_profile.1 b/volk_profile.1
new file mode 100644 (file)
index 0000000..405facb
--- /dev/null
@@ -0,0 +1,5 @@
+.TH UHD_FFT "1" "March 2012" "volk_profile 3.5" "User Commands"
+.SH NAME
+volk_profile \- Quality Assurance application for libvolk functions
+.SH DESCRIPTION
+Writes profile results to a file.
diff --git a/watch b/watch
new file mode 100644 (file)
index 0000000..0a64f71
--- /dev/null
+++ b/watch
@@ -0,0 +1,4 @@
+version=4
+ opts="filenamemangle=s%(?:.*?)?v?(\d[\d.]*@ARCHIVE_EXT@)%@PACKAGE@-$1%,uversionmangle=s/-rc/~rc/" \
+ https://github.com/gnuradio/volk/tags \
+ (?:.*?/)?v?@ANY_VERSION@@ARCHIVE_EXT@