Releases: MethanePowered/CLI11
Release list
Version 2.7.2: Faster compiles
This patch release makes the precompiled and experimental module modes cheaper
for clients. Include-what-you-use is followed, more function bodies compile into
the library instead of into every translation unit, and the C++20 named module
now imports the precompiled implementation instead of the full header-only
library. It also fixes the Bazel precompiled build, which could give consumers
duplicate implementations.
Changed
- The C++20 named module uses the precompiled implementation and we lowered its
floor from C++23 to C++20.CLI11::Modulenow works for bothfind_package
andadd_subdirectory, and configure fails with a clear message if CMake is
older than 3.28. #1413 - Removed
<iostream>,<codecvt>,<iomanip>,<fstream>, and<locale>
from the declaration headers, so precompiled clients do not parse them.
App::exit()is now three overloads instead of one with stream default
arguments. #1411 - Moved the remaining non-template function bodies out of
App.hpp,
Option.hpp,Validators.hpp,TypeTools.hpp,ConfigFwd.hpp, and
FormatterFwd.hppinto theimpl/*_inl.hppfiles, so they compile into the
library in precompiled mode. Header-only mode is unchanged. #1415
#1416 #1417
Fixed
- Fixed the Bazel precompiled build:
CLI11_COMPILEand
CLI11_ENABLE_EXTRA_VALIDATORSnow propagate to consumers, which previously
got duplicate implementations from both the headers and the library. Added a
cli11_header_onlytarget, the Windowsshell32link, and more tests.
#1420 - Made
ExtraValidators_inl.hppuse the sameCLI11_ENABLE_EXTRA_VALIDATORS
test as its header, and gave the file permission validators the
CLI11_MODULE_INLINEmarker the other global validators have. #1415
Documentation
- Documented the precompiled mode in the README. #1412
- Added a minimal module example, corrected the
CLI11::Moduletarget name in
the book, and noted that macros such asCLI11_PARSEdo not come through an
import. #1413
Internal
- Added an
iwyupreset that runs include-what-you-use over the one precompiled
translation unit, with a mapping file for both standard libraries, and applied
its findings. #1418
Version 2.7.1: LTO link fix
This patch release fixes linking against the precompiled shared library when it
is built with link-time optimization.
Fixed
- Fixed missing symbols in the precompiled library under LTO:
Precompile.cpp
now explicitly instantiatesOption::ignore_case<App>and
ignore_underscore<App>, and the library always compiles the full validator
set unless CMake disables it. #1409
Documentation
- Added the changelog to the Doxygen site. #1405
- Titled the changelog entries and named the releases from them. #1406
Internal
- Moved the release checklist to a
prepare-releaseskill. #1407
v2.7.0
This version adds a FileSize validator, a PositionalOnly prefix command
mode, and more control over config file generation. It also contains a large set
of bug fixes from a systematic audit of the parsing, config, help formatting,
string handling, and type conversion code, along with performance improvements
that remove unnecessary copies in hot paths.
Added
- Added a
FileSizevalidator to check minimum and maximum file sizes.
#1305 - Added
PrefixCommandMode::PositionalOnly, which restores the pre-2.6.2 prefix
command behavior as an opt-in mode: only a positional argument or the--
separator triggers prefix mode, and unrecognized options are collected as
extras. #1382 - Added an option to write only the active subcommand defaults when generating a
config file. #1314
Changed
- Improved performance by removing unnecessary string and container copies in
parsing and validator hot paths. #1368 - Improved the performance of string splitting by replacing a
stringstream
with a find-based loop. #1396 - Sorted the
excludesandneedssets by name for stable help output.
#1308 - Removed
en_US.UTF-8from the unicode locale fallback list. #1312 - Modernization and portability fixes: added missing standard includes, exported
CLI::Numberfrom the C++20 module, and cleaned up the warning lists.
#1367 - Aligned the Meson build with wrapdb policy by removing
disable_auto_iffor
subprojects. #1349
Fixed
- Fixed
require_subcommandmaximum enforcement for dot notation and for
disabled fallthrough, dot-notation subcommands with Windows-style prefixes,
get_optionsconst/non-const consistency, and a crash when parsing with
argc == 0. #1363, #1384 - Fixed missing symbol export from the precompiled shared library on macOS.
#1387 - Fixed double indentation of nested option groups in help output. #1371,
#1379 - Fixed config reading and writing bugs: section headers with trailing comments,
one-line multiline comments, embedded delimiters with theJoinpolicy, and
multiline values for indented keys. #1369, #1361 - Fixed help formatting issues: hidden positionals appearing in the usage line,
long subcommand names running into their descriptions, andExtrasError
reporting the wrong error name. #1369 - Fixed
ignore_caseandignore_underscoreso both apply when used together.
#1358 - Fixed string handling edge cases in
split_up,remove_quotes,
append_codepoint, andescape_detect. #1364 - Fixed type conversion edge cases: negative input to unsigned types,
whitespace-only floating point input, containers of pairs with an odd element
count, large integer sums, and theJoinpolicy with default values.
#1362 - Fixed stale processed values being returned after
Option::clear(). #1360 - Fixed out-of-bounds reads in the non-codecvt narrow/widen conversion paths
used under C++26. #1359 - Fixed infinite recursion on subcommand option groups with fallthrough enabled.
#1316 - Fixed empty strings given to wrapper types such as
std::optionalto
consistently produce a default-constructed value. #1340 - Fixed
CLI::ExistingFileto reject an empty filename with a clear error.
#1351 - Fixed an empty description on a modified
Transformer. #1345 - Fixed unsigned wraparound in
split_program_namefor command lines without
spaces. #1339 - Fixed
FileOnDefaultPathwith an empty default path, andPositiveNumber
rejecting subnormal values. #1366 - Fixed compilation with libc++/clang in C++26 mode. #1326
- Fixed the case of the
shell32library name in CMake. #1347 - Removed the
statickeyword from the precompiled library definition in CMake.
#1304
Documentation
- Clarified the behavior of the
prefix_commandoverloads. #1310 - Documented the Catch2 dependency for the test build. #1342
- Corrected documentation errors, including the
AsSizeValueexample, the
App::required()doc, and validator comments. #1304, #1366 - Modernized some documentation. #1336
- Moved the tutorial book into the Doxygen documentation, modernized the HTML
output with doxygen-awesome-css, and reorganized the sidebar navigation.
#1390, #1392, #1397, #1398 - Corrected errors found in a documentation review. #1394
- Split the documentation into Guide and Examples sections and filled gaps in
the guide. #1400
Internal
- Added a
devCMake preset and workflow for faster local iteration using the
precompiled library and ccache. #1387 - Added a CUDA test for the single-header build. #1381
- Refactored the duplicated parse-completion pipeline and removed dead code.
#1365 - Moved static
std::stringreference initializers to helper functions.
#1335 - Routed formatter label fallback through an internal helper as a step toward
internationalization support. #1320 - Cleaned up the CMake logic for finding Catch2 and Boost, and corrected the
example test regular expressions. #1325, #1322 - Reorganized the GitHub workflows and reduced CI build times. #1323,
#1387 - Added C++26 CI coverage (GCC, and clang with modules), and made codecov wait
for all coverage uploads. #1388, #1391 - Tidied the configuration files in the root directory. #1393
- Attached the source packages to tagged releases, wrote the release notes from
the changelog, and added a CI check for a changelog entry on every build.
#1401, #1402, #1403
v2.6.2
update changelog for version 2.6.2 (#1297) update changelog and readme for release 2.6.2 --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Henry Schreiner <henry.fredrick.schreiner@cern.ch>
v2.6.1
code simplification (#1244) Based on #1242, I don't think this is required but it does remove that issue and checking on compiler explore it does simplify the generated code. --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
v2.6.0
Version update (#1219) update changelog for 2.6 release --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
v2.5.0
update version and changelog for 2.5 release (#1121) update readme, changelog, and version for 2.5 release --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Henry Schreiner <HenrySchreinerIII@gmail.com>
v2.4.2
chore: prepare version 2.4.2 (#1037) Prepare for release. --------- Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Philip Top <phlptp@gmail.com>
v2.4.1
chore: prepare for 2.4.1 (#1001) Quick release fixing the missing header. --------- Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Philip Top <phlptp@gmail.com>
v2.4.0
docs: release update (#974) Update the Readme and the changelog in preparation for a release. --------- Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com> Co-authored-by: Henry Schreiner <henry.fredrick.schreiner@cern.ch> Co-authored-by: Henry Schreiner <henryschreineriii@gmail.com>