* Fix Issue #3748
Sorted command line options output

* Missing link library failing tests
This commit is contained in:
Justin Randall 2022-03-11 02:41:56 +08:00 committed by GitHub
commit 8db9b39bfd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 41 additions and 3 deletions

View file

@ -90,7 +90,8 @@ target_link_libraries(
ipc_flatbuffers_lib
${CRYPTOPP_LIBRARY}
${CMAKE_DL_LIBS}
Boost::boost)
Boost::boost
Boost::program_options)
if(NANO_STACKTRACE_BACKTRACE)
target_link_libraries(nano_lib backtrace)

View file

@ -2,6 +2,7 @@
#include <boost/dll/runtime_symbol_info.hpp>
#include <boost/filesystem.hpp>
#include <boost/program_options.hpp>
#include <cstddef>
#include <iostream>
@ -196,3 +197,23 @@ void assert_internal (char const * check_expr, char const * func, char const * f
abort ();
}
// Issue #3748
void nano::sort_options_description (const boost::program_options::options_description & source, boost::program_options::options_description & target)
{
// Grab all of the options, get the option display name, stick it in a map using the display name as
// the key (the map will sort) and the value as the option itself.
const auto & options = source.options ();
std::map<std::string, boost::shared_ptr<boost::program_options::option_description>> sorted_options;
for (const auto & option : options)
{
auto pair = std::make_pair (option->canonical_display_name (2), option);
sorted_options.insert (pair);
}
// Rebuild for display purposes only.
for (const auto & option_pair : sorted_options)
{
target.add (option_pair.second);
}
}

View file

@ -22,6 +22,11 @@ namespace system
{
class error_code;
}
namespace program_options
{
class options_description;
}
}
void assert_internal (char const * check_expr, char const * func, char const * file, unsigned int line, bool is_release_assert, std::string_view error = "");
@ -203,4 +208,7 @@ constexpr TARGET_TYPE narrow_cast (SOURCE_TYPE const & val)
debug_assert (val == static_cast<SOURCE_TYPE> (res));
return res;
}
// Issue #3748
void sort_options_description (const boost::program_options::options_description & source, boost::program_options::options_description & target);
}

View file

@ -2033,7 +2033,11 @@ int main (int argc, char * const * argv)
}
else
{
std::cout << description << std::endl;
// Issue #3748
// Regardless how the options were added, output the options in alphabetical order so they are easy to find.
boost::program_options::options_description sorted_description ("Command line options");
nano::sort_options_description (description, sorted_description);
std::cout << sorted_description << std::endl;
result = -1;
}
}

View file

@ -156,7 +156,11 @@ int main (int argc, char * const * argv)
}
else
{
std::cout << description << std::endl;
// Issue #3748
// Regardless how the options were added, output the options in alphabetical order so they are easy to find.
boost::program_options::options_description sorted_description ("Command line options");
nano::sort_options_description (description, sorted_description);
std::cout << sorted_description << std::endl;
}
return 1;