aboutsummaryrefslogtreecommitdiff
path: root/cmake
AgeCommit message (Collapse)Author
12 daysMerge bitcoin/bitcoin#31231: cmake: Fix `IF_CHECK_PASSED` option handlingmerge-script
97a18c85458b898fe5e3abda9528a2de442766ad cmake: Fix `IF_CHECK_PASSED` option handling (Hennadii Stepanov) Pull request description: `IF_CHECK_PASSED` is a multi-value keyword, resulting in a list value. Convert it to a string before applying any `string()` command. Split from https://github.com/bitcoin/bitcoin/pull/30861. No current CMake code is affected by this bug. ACKs for top commit: theuni: utACK 97a18c85458b898fe5e3abda9528a2de442766ad Tree-SHA512: d2556ca38c35a8992175e9f948c2028a789e71c2b2d5fdf365b31710c8ed3d5edf5d0363853c5d750d29abb58cfda3c78cdc2971a627e5b4c61aca4ec2a33356
2024-11-11Merge bitcoin/bitcoin#31181: cmake: Revamp `FindLibevent` modulemerge-script
5a96767e3f531ba9e8a676eec47727421f9f589f depends, libevent: Do not install *.pc files and remove patches for them (Hennadii Stepanov) ffda355b5a2113fa0f7db8015f7b08bf1351e245 cmake, refactor: Move `HAVE_EVHTTP_...` to `libevent` interface (Hennadii Stepanov) b619bdc3303217f4415342fe60e586e18fa48308 cmake: Revamp `FindLibevent` module (Hennadii Stepanov) Pull request description: This PR generalizes the use of `find_package` / `pkg_check_modules`, prioritizing the former. Addresses https://github.com/bitcoin/bitcoin/pull/30903#issuecomment-2444700876: > We should also follow up with refactoring the libevent module, to more generically use CMake/pkg-config, rather than restricting the CMake usage to `vcpkg`. At that point, we'd likely be able to dump pkg-config for the depends path entirely. Similar to https://github.com/bitcoin/bitcoin/pull/30903. ACKs for top commit: fanquake: ACK 5a96767e3f531ba9e8a676eec47727421f9f589f Tree-SHA512: 181020c16ccd2821e718c73f264badcdc5e62980c4a8d9691e759efe2ea00da2326e26308d1dcfdeac01e9e27930428ecace9f36941deee951b751b138d7266c
2024-11-11Merge bitcoin/bitcoin#26593: tracing: Only prepare tracepoint arguments when ↵merge-script
actually tracing 0de3e96e333090548a43e5e870c4cb8941d6baf1 tracing: use bitcoind pid in bcc tracing examples (0xb10c) 411c6cfc6c2e488e407f057b646730e63806ed8a tracing: only prepare tracepoint args if attached (0xb10c) d524c1ec06643208c189089089e84f6e1cd0abad tracing: dedup TRACE macros & rename to TRACEPOINT (0xb10c) Pull request description: Currently, if the tracepoints are compiled (e.g. in depends and release builds), we always prepare the tracepoint arguments regardless of the tracepoints being used or not. We made sure that the argument preparation is as cheap as possible, but we can almost completely eliminate any overhead for users not interested in the tracepoints (the vast majority), by gating the tracepoint argument preparation with an `if(something is attached to this tracepoint)`. To achieve this, we use the optional semaphore feature provided by SystemTap. The first commit simplifies and deduplicates our tracepoint macros from 13 TRACEx macros to a single TRACEPOINT macro. This makes them easier to use and also avoids more duplicate macro definitions in the second commit. The Linux tracing tools I'm aware of (bcc, bpftrace, libbpf, and systemtap) all support the semaphore gating feature. Thus, all existing tracepoints and their argument preparation is gated in the second commit. For details, please refer to the commit messages and the updated documentation in `doc/tracing.md`. Also adding unit tests that include all tracepoint macros to make sure there are no compiler problems with them (e.g. some varadiac extension not supported). Reviewers might want to check: - Do the tracepoints still work for you? Do the examples in `contrib/tracing/` run on your system (as bpftrace frequently breaks on every new version, please test master too if it should't work for you)? Do the CI interface tests still pass? - Is the new documentation clear? - The `TRACEPOINT_SEMAPHORE(event, context)` macros places global variables in our global namespace. Is this something we strictly want to avoid or maybe move to all `TRACEPOINT_SEMAPHORE`s to a separate .cpp file or even namespace? I like having the `TRACEPOINT_SEMAPHORE()` in same file as the `TRACEPOINT()`, but open for suggestion on alternative approaches. - Are newly added tracepoints in the unit tests visible when using `readelf -n build/src/test/test_bitcoin`? You can run the new unit tests with `./build/src/test/test_bitcoin --run_test=util_trace_tests* --log_level=all`. <details><summary>Two of the added unit tests demonstrate that we are only processing the tracepoint arguments when attached by having a test-failure condition in the tracepoint argument preparation. The following bpftrace script can be used to demonstrate that the tests do indeed fail when attached to the tracepoints.</summary> `fail_tests.bt`: ```c #!/usr/bin/env bpftrace usdt:./build/src/test/test_bitcoin:test:check_if_attached { printf("the 'check_if_attached' test should have failed\n"); } usdt:./build/src/test/test_bitcoin:test:expensive_section { printf("the 'expensive_section' test should have failed\n"); } ``` Run the unit tests with `./build/src/test/test_bitcoin` and start `bpftrace fail_tests.bt -p $(pidof test_bitcoin)` in a separate terminal. The unit tests should fail with: ``` Running 594 test cases... test/util_trace_tests.cpp(31): error: in "util_trace_tests/test_tracepoint_check_if_attached": check false has failed test/util_trace_tests.cpp(51): error: in "util_trace_tests/test_tracepoint_manual_tracepoint_active_check": check false has failed *** 2 failures are detected in the test module "Bitcoin Core Test Suite" ``` </details> These links might provide more contextual information for reviewers: - [How SystemTap Userspace Probes Work by eklitzke](https://eklitzke.org/how-sytemtap-userspace-probes-work) (actually an example on Bitcoin Core; mentions that with semaphores "the overhead for an untraced process is effectively zero.") - [libbpf comment on USDT semaphore handling](https://github.com/libbpf/libbpf/blob/1596a09b5de2a50ab8d44218fc29b6d42f886305/src/usdt.c#L83-L92) (can recommend the whole comment for background on how the tracepoints and tracing tools work together) - https://sourceware.org/systemtap/wiki/UserSpaceProbeImplementation#Semaphore_Handling ACKs for top commit: willcl-ark: utACK 0de3e96e333090548a43e5e870c4cb8941d6baf1 laanwj: re-ACK 0de3e96e333090548a43e5e870c4cb8941d6baf1 jb55: utACK 0de3e96e333090548a43e5e870c4cb8941d6baf1 vasild: ACK 0de3e96e333090548a43e5e870c4cb8941d6baf1 Tree-SHA512: 0e5e0dc5e0353beaf5c446e4be03d447e64228b1be71ee9972fde1d6fac3fac71a9d73c6ce4fa68975f87db2b2bf6eee2009921a2a145e24d83a475d007a559b
2024-11-06cmake, refactor: Move `HAVE_EVHTTP_...` to `libevent` interfaceHennadii Stepanov
2024-11-06cmake: Revamp `FindLibevent` moduleHennadii Stepanov
This change generalizes the use of `find_package` / `pkg_check_modules`, prioritizing the former.
2024-11-06Merge bitcoin/bitcoin#31173: cmake: Add `FindQRencode` module and enable ↵merge-script
`libqrencode` package for MSVC 9e5089dbb02ef8a32f484aab682ad06748e1a532 build, msvc: Enable `libqrencode` vcpkg package (Hennadii Stepanov) 30089b0cb61c1c40d6338877ffd5d72b31024271 cmake: Add `FindQRencode` module (Hennadii Stepanov) Pull request description: This PR introduces the `FindQRencode` CMake module, following the official CMake [guidelines](https://cmake.org/cmake/help/latest/manual/cmake-developer.7.html#find-modules) for managing [upstream libraries](https://github.com/fukuchi/libqrencode) that lack a config file package. This module enhances flexibility in locating the `libqrencode` library by making the use of `pkg-config` optional. With this update, `libqrencode` can be detected on systems where either `pkg-config` or the `libqrencode.pc` file is unavailable, such as Windows environments using the vcpkg package manager. However, if `libqrencode.pc` is available, it remains beneficial as the only direct source of the library's version information. Additionally, the `libqrencode` vcpkg package is enabled for MSVC builds. Here is a diff for configuration output on Ubuntu 24.10: ```diff -- Detecting CXX compile features - done -- Found SQLite3: /usr/include (found suitable version "3.46.1", minimum required is "3.7.17") -- Found PkgConfig: /usr/bin/pkg-config (found version "1.8.1") --- Checking for module 'libqrencode' --- Found libqrencode, version 4.1.1 +-- Found QRencode: /usr/lib/x86_64-linux-gnu/libqrencode.so (found version "4.1.1") -- Found Qt: /usr/lib/x86_64-linux-gnu/cmake/Qt5 (found suitable version "5.15.15", minimum required is "5.11.3") -- Performing Test CXX_SUPPORTS__WERROR -- Performing Test CXX_SUPPORTS__WERROR - Success ``` ACKs for top commit: fanquake: ACK 9e5089dbb02ef8a32f484aab682ad06748e1a532 Tree-SHA512: bb9baca64386772f2f4752b1cbff1230792562ca6b2e37c56ad28580b55b1ae6ff65c2cf0d8ab026111d7b5a056d7ac672496a3cfd1a81e4fdd2b84c8cf75fff
2024-11-06cmake: Fix `IF_CHECK_PASSED` option handlingHennadii Stepanov
`IF_CHECK_PASSED` is a multi-value keyword, resulting in a list value. Convert it to a string before applying any `string()` command.
2024-11-05cmake: Add `FindQRencode` moduleHennadii Stepanov
2024-11-04build: Unify `-logsourcelocations` formatHennadii Stepanov
2024-10-29Merge bitcoin/bitcoin#30903: cmake: Add `FindZeroMQ` modulemerge-script
915640e191b6a17a245f0502bc399d82a6502ccf depends: zeromq: don't install .pc files and remove patches for them (Cory Fields) 6b8a74463b5ce5d5d22263f220900f3587f730bd cmake: Add `FindZeroMQ` module (Hennadii Stepanov) Pull request description: This PR introduces the `FindZeroMQ` module, which first attempts to find the `libzmq` library using CMake's `find_package()` and falls back to `pkg_check_modules()` if unsuccessful. Addresses https://github.com/bitcoin/bitcoin/issues/30876 for the ZeroMQ package. ACKs for top commit: fanquake: ACK 915640e191b6a17a245f0502bc399d82a6502ccf Tree-SHA512: 2f17bae21be5d3f280a13425d22f5d1b2e23837a8aaf5ec89c433767509de030a42d598b261e102bdb5b860d8ede98013c124c3d25e081e956d4ee3a81b2584f
2024-10-28tracing: dedup TRACE macros & rename to TRACEPOINT0xb10c
This deduplicates the TRACEx macros by using systemtaps STAP_PROBEV[0] variadic macro instead of the DTrace compability DTRACE_PROBE[1] macros. Bitcoin Core never had DTrace tracepoints, so we don't need to use the drop-in replacement for it. As noted in pr25541[2], these macros aren't compatibile with DTrace on macOS anyway. This also renames the TRACEx macro to TRACEPOINT to clarify what the macro does: inserting a tracepoint vs tracing (logging) something. [0]: https://sourceware.org/git/?p=systemtap.git;a=blob;f=includes/sys/sdt.h;h=24d5e01c37805e55c36f7202e5d4e821b85167a1;hb=ecab2afea46099b4e7dfd551462689224afdbe3a#l407 [1]: https://sourceware.org/git/?p=systemtap.git;a=blob;f=includes/sys/sdt.h;h=24d5e01c37805e55c36f7202e5d4e821b85167a1;hb=ecab2afea46099b4e7dfd551462689224afdbe3a#l490 [2]: https://github.com/bitcoin/bitcoin/pull/25541/files#diff-553886c5f808e01e3452c7b21e879cc355da388ef7680bf310f6acb926d43266R30-R31 Co-authored-by: Martin Leitner-Ankerl <martin.ankerl@gmail.com>
2024-10-28scripted-diff: Rename `PACKAGE_*` variables to `CLIENT_*`Hennadii Stepanov
This change ensures consistent use of the `CLIENT_` namespace everywhere in the repository. -BEGIN VERIFY SCRIPT- ren() { sed -i "s/\<$1\>/$2/g" $( git grep -l "$1" ./cmake ./src :\(exclude\)./src/secp256k1 ./test ) ; } ren PACKAGE_NAME CLIENT_NAME ren PACKAGE_VERSION CLIENT_VERSION_STRING ren PACKAGE_URL CLIENT_URL ren PACKAGE_BUGREPORT CLIENT_BUGREPORT -END VERIFY SCRIPT-
2024-10-28build: Rename `PACKAGE_*` variables to `CLIENT_*`Hennadii Stepanov
The use of `PACKAGE_NAME` for the project's variable name is problematic, as this name is commonly used in CMake's interface variables. If third-party CMake code handles with scopes improperly, our `PACKAGE_NAME` variable could end up with an unexpected value. This change avoids such conflicts by renaming all `PACKAGE_*` variables to `CLIENT_*`.
2024-10-25cmake: Add `FindZeroMQ` moduleHennadii Stepanov
2024-10-24build: drop miniupnpc dependencyAntoine Poinsot
2024-10-10scripted-diff: drop config/ subdir for bitcoin-config.h, rename to ↵Sebastian Falbesoner
bitcoin-build-config.h Follow-up for PR #30856, commit 0dd66251. -BEGIN VERIFY SCRIPT- sed -i "s|config/bitcoin-config\.h|bitcoin-build-config.h|g" $(git grep -l config/bitcoin-config\.h) sed -i "s|bitcoin-config\.h|bitcoin-build-config.h|g" $(git grep -l "bitcoin-config\.h" ./src ./test ./cmake) git mv ./cmake/bitcoin-config.h.in ./cmake/bitcoin-build-config.h.in -END VERIFY SCRIPT-
2024-10-01cmake: Avoid hardcoding Qt's major version in Find moduleHennadii Stepanov
This change facilitates future migration to Qt 6.
2024-09-30build: Drop libnatpmp from build systemlaanwj
2024-09-12build: Minimize I/O operations in GenerateHeaderFromJson.cmakeLőrinc
Tested the performance with: > time cmake -DJSON_SOURCE_PATH=src/secp256k1/src/wycheproof/ecdsa_secp256k1_sha256_bitcoin_test.json -DHEADER_PATH=build/after/ecdsa_secp256k1_sha256_bitcoin_test.json -P cmake/script/GenerateHeaderFromJson.cmake Before: > 3.57s user 6.01s system 94% cpu 10.136 total After: > 0.17s user 0.01s system 98% cpu 0.187 total
2024-09-12build: Minimize I/O operations in GenerateHeaderFromRaw.cmakeLőrinc
Replaced multiple file writes with a single string template write. The raw content is first grouped into 8 byte chunks, followed by another regex replace which wraps them in `std::byte`. Tested the output with `diff -w` and they're the same - only whitespace differences because slightly different source formatting. Tested the performance with: > time cmake -DRAW_SOURCE_PATH=src/bench/data/block413567.raw -DHEADER_PATH=build/after/block413567.raw.h -DRAW_NAMESPACE=benchmark::data -P cmake/script/GenerateHeaderFromRaw.cmake Before: > 15.41s user 23.06s system 97% cpu 39.593 total After: > 0.77s user 0.06s system 97% cpu 0.849 total
2024-09-12Revert "build: Minimize I/O operations in `GenerateHeaderFrom{Json,Raw}.cmake`"Hennadii Stepanov
This reverts commit b07fe666f27e2b2515d2cb5a0339512045e64761.
2024-09-12Merge bitcoin/bitcoin#30803: build: Minor build system fixes and amendmentsmerge-script
1cc93fe7b40f10a7d1d1189058af98a2bce31381 build: Delete dead code that implements `IF_CHECK_FAILED` option (Hennadii Stepanov) 341ad238091d4df520c70f1757b017e6f6620f24 build: Delete MSVC special case for `BUILD_FOR_FUZZING` option (Hennadii Stepanov) fdad128b528bc8622bc6d8343026c28b18260f64 build: Stop enabling CMake's CMP0141 policy (Hennadii Stepanov) b2a6f545b4f6e3442ae51f66a6f3c1de92d00a1b doc: Drop `ctest` command from Windows cross-compiling instructions (Hennadii Stepanov) 73b618582dcf06dd01be062fe0f81060cfcb48d8 build: Print `CMAKE_CXX_COMPILER_ARG1` in summary (Hennadii Stepanov) f03c9420958de31fdfecec5fa3e23134aac61803 build, test: Add missed log options (Hennadii Stepanov) 6f2cb0eafdef81fb9464a4679c3a5905d19e5103 doc: Amend comment about ZeroMQ config files (Hennadii Stepanov) Pull request description: This PR addresses the following comments: - https://github.com/bitcoin/bitcoin/pull/30454#discussion_r1742342524 - https://github.com/bitcoin/bitcoin/pull/30454#discussion_r1728692369 - https://github.com/bitcoin/bitcoin/pull/30454#discussion_r1736110362 - https://github.com/bitcoin/bitcoin/pull/30454#discussion_r1742931121 - https://github.com/bitcoin/bitcoin/pull/30454#discussion_r1747723657 - https://github.com/bitcoin/bitcoin/pull/30454#discussion_r1742328675 - https://github.com/bitcoin/bitcoin/pull/30454#discussion_r1723106474 ACKs for top commit: sipsorcery: tACK 1cc93fe7b40f10a7d1d1189058af98a2bce31381 (win11 msvc). maflcko: re-ACK 1cc93fe7b40f10a7d1d1189058af98a2bce31381 Tree-SHA512: a390797bb4d3b7eb9163653b6c9c324e7a01090f6cdda74df7349a24a5c4a2084e5912878747f56561315afc70cae9adb1c363f47ceb0af96004ea591d25171b
2024-09-12Merge bitcoin/bitcoin#30838: build: Use CMake's default permissions in macOS ↵merge-script
`deploy` target 5ba03e7d35e1b47ba864c9ae3c94af97cd3ae10b build: Use CMake's default permissions in macOS `deploy` target (Hennadii Stepanov) Pull request description: This PR ensures that the file permissions in macOS `zip` archives are independent of the user's `umask` value. Fixes https://github.com/bitcoin/bitcoin/issues/30815. ACKs for top commit: fanquake: ACK 5ba03e7d35e1b47ba864c9ae3c94af97cd3ae10b - I'm going to merge this now so we return to usable (comparable) guix builds. Tree-SHA512: 78f724cd3ffd5c1fd5fc1b4832f1e8154c62723f3de5ac9599f44715cbd08a3dfbb806801411c55069773d2e34c9f8cab25585dbad2f032c36b68dd83cb51847
2024-09-12Merge bitcoin/bitcoin#30842: build: Minimize I/O operations in ↵merge-script
`GenerateHeaderFrom{Json,Raw}.cmake` b07fe666f27e2b2515d2cb5a0339512045e64761 build: Minimize I/O operations in `GenerateHeaderFrom{Json,Raw}.cmake` (Hennadii Stepanov) Pull request description: This PR aims to reduce build time by replacing multiple `file(WRITE|APPEND ...)` commands with a single `file(WRITE ...)` command. Due to differences in implementation (e.g., filesystem design, system calls, caching), a noticeable improvement in build time is observed only on Windows. Additionally, the code has been refactored to remove the `remainder` local variables. ACKs for top commit: sipsorcery: tACK b07fe666f27e2b2515d2cb5a0339512045e64761 maflcko: review ACK b07fe666f27e2b2515d2cb5a0339512045e64761 TheCharlatan: ACK b07fe666f27e2b2515d2cb5a0339512045e64761 Tree-SHA512: 6ed3ae8fe7d8859af38d83918eddf7cb318607787863b95589f4a7a45a36f8c4bd1c01e366078d0515115c121bc857dc63471e52ff26fc49edbc8bb69875e947
2024-09-10build: Use CMake's default permissions in macOS `deploy` targetHennadii Stepanov
This change fixes reproducibility issue with macOS Guix builds.
2024-09-08build: Delete dead code that implements `IF_CHECK_FAILED` optionHennadii Stepanov
2024-09-07build: Minimize I/O operations in `GenerateHeaderFrom{Json,Raw}.cmake`Hennadii Stepanov
2024-09-06build: Print `CMAKE_CXX_COMPILER_ARG1` in summaryHennadii Stepanov
When `-DCMAKE_CXX_COMPILER='clang++;-stdlib=libc++;-m32'` is provided, `-stdlib=libc++ -m32` flags are printed in the summary now.
2024-09-06cmake: add USE_SOURCE_PERMISSIONS to all configure_file usagefanquake
`USE_SOURCE_PERMISSIONS` is the default, so this should not change behaviour. However, being explicit makes it clear what we are doing. Related to #30815. See https://cmake.org/cmake/help/latest/command/configure_file.html#options.
2024-09-05cmake: scope Boost Test check to vcpkgfanquake
This check was added for vcpkg, given how it packages Boost. However, we don't need to run the check for other platforms, and it's quite slow. So, scope it to VCPKG. On my machine, this reduces the time to run `cmake -B build` from ~12 seconds, to ~6 seconds. Fixes: #30787
2024-09-05Merge bitcoin/bitcoin#30796: test: Use std::span and std::string_view for ↵merge-script
raw data faecca9a85c1c1917d024f55cca34d19cc94f3b9 test: Use span for raw data (MarcoFalke) fac973647d69dd14089cee9972e8dfa0074c8a97 test: Use string_view for json_tests (MarcoFalke) Pull request description: The build system converts raw data into a C++ header file for tests. This change modernizes the code to use the convenience wrappers `std::span` and `std::string_view`, so that redundant copies can be avoided. ACKs for top commit: fjahr: re-ACK https://github.com/bitcoin/bitcoin/commit/faecca9a85c1c1917d024f55cca34d19cc94f3b9 TheCharlatan: ACK faecca9a85c1c1917d024f55cca34d19cc94f3b9 stickies-v: ACK faecca9a85c1c1917d024f55cca34d19cc94f3b9 hebasto: ACK faecca9a85c1c1917d024f55cca34d19cc94f3b9, I have reviewed the code and the generated headers. Tree-SHA512: 1f4951c54aff11ba27c41fb70f2821bdb79e06ca0abae734b970bd0d64dda9d8cced824a891fd51b3e9d4e5715ee9eb49ed5d369010a45eca7c3bec9f8641235
2024-09-05test: Use span for raw dataMarcoFalke
This change allows to drop brittle sizeof calls in favor of the std::span::size method. Other improvements include: * Use of a namespace to mark test and bench data * Use of the modern std::byte * Drop of a no longer used std::vector copy and the bench/data module
2024-09-04build: Add `JOBS` variable support to `CoverageFuzz.cmake` scriptHennadii Stepanov
2024-09-04build: Add missed `-g` for "Coverage" build configurationHennadii Stepanov
2024-09-04build: Add `COMMAND_ERROR_IS_FATAL` to every process in coverage scripsHennadii Stepanov
2024-09-03scripted-diff: fuzz: Rename fuzz_seed_corpus to fuzz_corporaMarcoFalke
-BEGIN VERIFY SCRIPT- ren() { sed -i "s:\<$1\>:$2:g" $( git grep -l "$1" ) ; } ren fuzz_seed_corpus fuzz_corpora ren FUZZ_SEED_CORPUS_DIR FUZZ_CORPORA_DIR -END VERIFY SCRIPT-
2024-09-03test: Use string_view for json_testsMarcoFalke
This avoids a static constructor of the global std::string, and rules out possibly expensive and implicit copies of the string completely.
2024-08-29doc: Drop mentions of `share/genbuild.sh`Hennadii Stepanov
2024-08-16cmake: Add `Coverage` and `CoverageFuzz` scriptsHennadii Stepanov
2024-08-16cmake: Add `Maintenance` moduleHennadii Stepanov
2024-08-16cmake: Add `APPEND_{CPP,C,CXX,LD}FLAGS` cache variablesHennadii Stepanov
The content of those variables is appended to the each target after the flags added by the build system.
2024-08-16cmake: Add `AddWindowsResources` moduleHennadii Stepanov
2024-08-16cmake: Add `WITH_DBUS` optionHennadii Stepanov
2024-08-16cmake: Add `libqrencode` optional package supportHennadii Stepanov
2024-08-16cmake: Build `bitcoin-qt` executableHennadii Stepanov
2024-08-16cmake: Add Python-based testsHennadii Stepanov
2024-08-16cmake: Add external signer supportHennadii Stepanov
2024-08-16cmake: Add `systemtap-sdt` optional package supportHennadii Stepanov
2024-08-16cmake: Add `libminiupnpc` optional package supportHennadii Stepanov
2024-08-16cmake: Add `libnatpmp` optional package supportHennadii Stepanov