Skip to content

Releases: CLIUtils/CLI11

Version 1.5.3: Compiler compatibility

19 Apr 10:54
Compare
Choose a tag to compare

This version fixes older AppleClang compilers by removing the optimization for casting. The minimum version of Boost Optional supported has been clarified to be 1.58. CUDA 7.0 NVCC is now supported.

Version 1.5.2: LICENSE in single header mode

17 Apr 14:17
Compare
Choose a tag to compare

This is a quick patch release that makes LICENSE part of the single header file, making it easier to include. Minor cleanup from codacy. No significant code changes from 1.5.1.

Version 1.5.1: Access

12 Apr 07:27
Compare
Choose a tag to compare

This patch release adds better access to the App progromatically, to assist with writing custom converters to other formats. It also improves the help output, and uses a new feature in CLI11 1.5 to fix an old "quirk" in the way unlimited options and positionals interact.

  • Make mixing unlimited positionals and options more intuitive #102
  • Add missing getters get_options and get_description to App #105
  • The app name now can be set, and will override the auto name if present #105
  • Add (REQUIRED) for required options #104
  • Print simple name for Needs/Excludes #104
  • Use Needs instead of Requires in help print #104
  • Groups now are listed in the original definition order #106

Version 1.5: Optionals

09 Apr 14:10
Compare
Choose a tag to compare

This version introduced support for optionals, along with clarification and examples of custom conversion overloads. Enums now have been dropped from the automatic conversion system, allowing explicit protection for out-of-range ints (or a completely custom conversion). This version has some internal cleanup and improved support for the newest compilers. Several bugs were fixed, as well.

Note: This is the final release with requires, please switch to needs.

  • Fix unlimited short options eating two values before checking for positionals when no space present #90
  • Symmetric exclude text when excluding options, exclude can be called multiple times #64
  • Support for std::optional, std::experimental::optional, and boost::optional added if __has_include is supported #95
  • All macros/CMake variables now start with CLI11_ instead of just CLI_ #95
  • The internal stream was not being cleared before use in some cases. Fixed. #95
  • Using an emum now requires explicit conversion overload #97
  • The separator -- now is removed when it ends unlimited arguments #100

Other, non-user facing changes:

  • Added Macros.hpp with better C++ mode discovery #95
  • Deprecated macros added for all platforms
  • C++17 is now tested on supported platforms #95
  • Informational printout now added to CTest #95
  • Better single file generation #95
  • Added support for GTest on MSVC 2017 (but not in C++17 mode, will need next version of GTest)
  • Types now have a specific size, separate from the expected number - cleaner and more powerful internally #92
  • Examples now run as part of testing #99

Version 1.4: More feedback

10 Mar 10:18
Compare
Choose a tag to compare

This version adds lots of smaller fixes and additions after the refactor in version 1.3. More ways to download and use CLI11 in CMake have been added. INI files have improved support.

  • Lexical cast is now more strict than before #68 and fails on overflow #84
  • Added get_parent() to access the parent from a subcommand
  • Added ExistingPath validator #73
  • app.allow_ini_extras() added to allow extras in INI files #70
  • Multiline INI comments now supported
  • Descriptions can now be written with config_to_str #66
  • Double printing of error message fixed #77
  • Renamed requires to needs to avoid C++20 keyword #75, #82
  • MakeSingleHeader now works if outside of git #78
  • Adding install support for CMake #79, improved support for find_package #83, #84
  • Added support for Conan.io #83

Version 1.3: Refactor

01 Dec 14:09
Compare
Choose a tag to compare

This version focused on refactoring several key systems to ensure correct behavior in the interaction of different settings. Most caveats about features only working on the main App have been addressed, and extra arguments have been reworked. Inheritance of defaults makes configuring CLI11 much easier without having to subclass. Policies add new ways to handle multiple arguments to match your favorite CLI programs. Error messages and help messages are better and more flexible. Several bugs and odd behaviors in the parser have been fixed.

  • Added a version macro, CLI11_VERSION, along with *_MAJOR, *_MINOR, and *_PATCH, for programmatic access to the version.
  • Reworked the way defaults are set and inherited; explicit control given to user with ->option_defaults() #48
  • Hidden options now are based on an empty group name, instead of special "hidden" keyword #48
  • parse no longer returns (so CLI11_PARSE is always usable) #37
  • Added remaining() and remaining_size() #37
  • allow_extras and prefix_command are now valid on subcommands #37
  • Added take_last to only take last value passed #40
  • Added multi_option_policy and shortcuts to provide more control than just a take last policy #59
  • More detailed error messages in a few cases #41
  • Footers can be added to help #42
  • Help flags are easier to customize #43
  • Subcommand now support groups #46
  • CLI::RuntimeError added, for easy exit with error codes #45
  • The clang-format script is now no longer "hidden" #48
  • The order is now preserved for subcommands (list and callbacks) #49
  • Tests now run individually, utilizing CMake 3.10 additions if possible #50
  • Failure messages are now customizable, with a shorter default #52
  • Some improvements to error codes #53
  • require_subcommand now offers a two-argument form and negative values on the one-argument form are more useful #51
  • Subcommands no longer match after the max required number is obtained #51
  • Unlimited options no longer prioritize over remaining/unlimited positionals #51
  • Added ->transform which modifies the string parsed #54
  • Changed of API in validators to void(std::string &) (const for users), throwing providing nicer errors #54
  • Added CLI::ArgumentMismatch #56 and fixed missing failure if one arg expected #55
  • Support for minimum unlimited expected arguments #56
  • Single internal arg parse function #56
  • Allow options to be disabled from INI file, rename add_config to set_config #60

Converting from CLI11 1.2:

  • app.parse no longer returns a vector. Instead, use app.remaining(true).
  • "hidden" is no longer a special group name, instead use ""
  • Validators API has changed to return an error string; use .empty() to get the old bool back
  • Use .set_help_flag instead of accessing the help pointer directly (discouraged, but not removed yet)
  • add_config has been renamed to set_config
  • Errors thrown in some cases are slightly more specific

Version 1.2: Stability

23 Sep 03:16
Compare
Choose a tag to compare

This release focuses on making CLI11 behave properly in corner cases, and with config files on the command line. This includes fixes for a variety of reported issues. A few features were added to make life easier, as well; such as a new flag callback and a macro for the parse command.

  • Added functional form of flag #33, automatic on C++14
  • Fixed Config file search if passed on command line #30
  • Added CLI11_PARSE(app, argc, argv) macro for simple parse commands (does not support returning arg)
  • The name string can now contain spaces around commas #29
  • set_default_str now only sets string, and set_default_val will evaluate the default string given #26
  • Required positionals now take priority over subcommands #23
  • Extra requirements enforced by Travis

Version 1.1: Feedback

09 Jun 19:01
Compare
Choose a tag to compare

This release incorporates feedback from the release announcement. The examples are slowly being expanded, some corner cases improved, and some new functionality for tricky parsing situations.

  • Added simple support for enumerations, allow non-printable objects #12
  • Added app.parse_order() with original parse order (#13, #16)
  • Added prefix_command(), which is like allow_extras but instantly stops and returns. (#8, #17)
  • Removed Windows error (#10, #20)
  • Some improvements to CMake, detect Python and no dependencies on Python 2 (like Python 3) (#18, #21)

Version 1.0: Official release

01 Jun 15:10
Compare
Choose a tag to compare

This is the first stable release for CLI11. Future releases will try to remain backward compatible and will follow semantic versioning if possible. There were a few small changes since version 0.9:

  • Cleanup using clang-tidy and clang-format
  • Small improvements to Timers, easier to subclass Error
  • Move to 3-Clause BSD license

Version 0.9: Polish

24 Apr 00:54
Compare
Choose a tag to compare

This release focused on cleaning up the most exotic compiler warnings, fixing a few oddities of the config parser, and added a more natural method to check subcommands.

  • Better CMake named target (CLI11)
  • More warnings added, fixed
  • Ini output now includes =false when default_also is true
  • Ini no longer lists the help pointer
  • Added test for inclusion in multiple files and linking, fixed issues (rarely needed for CLI, but nice for tools)
  • Support for complex numbers
  • Subcommands now test true/false directly or with ->parsed(), cleaner parse