Compare commits

..

6 Commits

Author SHA1 Message Date
Beman Dawes
1691b70d64 Release 1.40.0
[SVN r55802]
2009-08-27 16:24:59 +00:00
Troy D. Straszheim
67ba23b8d9 Add basic copyright/license to keep cmake out of the inspection report
[SVN r55095]
2009-07-22 21:51:01 +00:00
Vladimir Prus
c3cb7cf05d Merge from trunk
[SVN r54884]
2009-07-11 12:00:18 +00:00
Jeremiah Willcock
bdbd3dfc42 Fixed almost all tab and min/max issues found by inspect tool
[SVN r53142]
2009-05-20 19:41:20 +00:00
Douglas Gregor
15c990b7af Fix CMake build of Program Options DLL tests
[SVN r52847]
2009-05-08 06:13:08 +00:00
Douglas Gregor
1a884cef74 Fix CMake test builds for ProgramOptions and Units libraries.
[SVN r52843]
2009-05-07 23:53:56 +00:00
13 changed files with 84 additions and 34 deletions

View File

@@ -1,3 +1,9 @@
#
# Copyright Troy D. Straszheim
#
# Distributed under the Boost Software License, Version 1.0.
# See http://www.boost.org/LICENSE_1_0.txt
#
#----------------------------------------------------------------------------
# This file was automatically generated from the original CMakeLists.txt file
# Add a variable to hold the headers for the library

View File

@@ -77,7 +77,7 @@ int main(int ac, char* av[])
cout << "Listen port is " << portnum << "\n";
}
catch(exception& e)
catch(std::exception& e)
{
cout << e.what() << "\n";
return 1;

View File

@@ -94,7 +94,7 @@ int main(int ac, char* av[])
<< vm["magic"].as<magic_number>().n << "\"\n";
}
}
catch(exception& e)
catch(std::exception& e)
{
cout << e.what() << "\n";
}

View File

@@ -8,6 +8,8 @@
#include <boost/program_options/detail/convert.hpp>
#include <iterator>
namespace boost { namespace program_options {
namespace detail {

View File

@@ -55,13 +55,12 @@ namespace boost { namespace program_options {
{
static std::basic_string<charT> empty;
if (v.size() > 1)
throw validation_error("multiple values not allowed");
if (v.size() == 1)
boost::throw_exception(validation_error("multiple values not allowed"));
else if (v.size() == 1)
return v.front();
else if (allow_empty)
return empty;
else
throw validation_error("at least one value required");
else if (!allow_empty)
boost::throw_exception(validation_error("at least one value required"));
return empty;
}
/* Throws multiple_occurrences if 'value' is not empty. */

View File

@@ -41,7 +41,7 @@ namespace boost { namespace program_options {
add(const char* name, int max_count);
/** Returns the maximum number of positional options that can
be present. Can return numeric_limits<unsigned>::max() to
be present. Can return (numeric_limits<unsigned>::max)() to
indicate unlimited number. */
unsigned max_total_count() const;

View File

@@ -1,3 +1 @@
boost_module(program_options DEPENDS any bind smart_ptr tokenizer)
# bind is needed because of a dependency on boost/mem_fn.hpp
boost_module(program_options DEPENDS any bind smart_ptr test tokenizer)

View File

@@ -1,3 +1,9 @@
#
# Copyright Troy D. Straszheim
#
# Distributed under the Boost Software License, Version 1.0.
# See http://www.boost.org/LICENSE_1_0.txt
#
boost_add_library(boost_program_options
cmdline.cpp config_file.cpp options_description.cpp parsers.cpp
variables_map.cpp value_semantic.cpp positional_options.cpp

View File

@@ -152,7 +152,7 @@ namespace boost { namespace program_options { namespace detail {
error = "style disallows all characters for short options";
if (error)
throw invalid_command_line_style(error);
boost::throw_exception(invalid_command_line_style(error));
// Need to check that if guessing and long disguise are enabled
// -f will mean the same as -foo
@@ -196,24 +196,24 @@ namespace boost { namespace program_options { namespace detail {
if (m_additional_parser)
style_parsers.push_back(
bind(&cmdline::handle_additional_parser, this, _1));
boost::bind(&cmdline::handle_additional_parser, this, _1));
if (m_style & allow_long)
style_parsers.push_back(
bind(&cmdline::parse_long_option, this, _1));
boost::bind(&cmdline::parse_long_option, this, _1));
if ((m_style & allow_long_disguise))
style_parsers.push_back(
bind(&cmdline::parse_disguised_long_option, this, _1));
boost::bind(&cmdline::parse_disguised_long_option, this, _1));
if ((m_style & allow_short) && (m_style & allow_dash_for_short))
style_parsers.push_back(
bind(&cmdline::parse_short_option, this, _1));
boost::bind(&cmdline::parse_short_option, this, _1));
if ((m_style & allow_short) && (m_style & allow_slash_for_short))
style_parsers.push_back(bind(&cmdline::parse_dos_option, this, _1));
style_parsers.push_back(boost::bind(&cmdline::parse_dos_option, this, _1));
style_parsers.push_back(bind(&cmdline::parse_terminator, this, _1));
style_parsers.push_back(boost::bind(&cmdline::parse_terminator, this, _1));
vector<option> result;
while(!args.empty())
@@ -326,8 +326,8 @@ namespace boost { namespace program_options { namespace detail {
if (opt.position_key != -1) {
if (position >= m_positional->max_total_count())
{
throw too_many_positional_options_error(
"too many positional options");
boost::throw_exception(too_many_positional_options_error(
"too many positional options"));
}
opt.string_key = m_positional->name_for_position(position);
++position;
@@ -380,8 +380,8 @@ namespace boost { namespace program_options { namespace detail {
if (present_tokens >= min_tokens)
{
if (!opt.value.empty() && max_tokens == 0) {
throw invalid_command_line_syntax(opt.string_key,
invalid_command_line_syntax::extra_parameter);
boost::throw_exception(invalid_command_line_syntax(opt.string_key,
invalid_command_line_syntax::extra_parameter));
}
// If an option wants, at minimum, N tokens, we grab them
@@ -406,8 +406,8 @@ namespace boost { namespace program_options { namespace detail {
}
else
{
throw invalid_command_line_syntax(opt.string_key,
invalid_command_line_syntax::missing_parameter);
boost::throw_exception(invalid_command_line_syntax(opt.string_key,
invalid_command_line_syntax::missing_parameter));
}
}
@@ -427,8 +427,8 @@ namespace boost { namespace program_options { namespace detail {
name = tok.substr(2, p-2);
adjacent = tok.substr(p+1);
if (adjacent.empty())
throw invalid_command_line_syntax(name,
invalid_command_line_syntax::empty_adjacent_parameter);
boost::throw_exception( invalid_command_line_syntax(name,
invalid_command_line_syntax::empty_adjacent_parameter));
}
else
{

View File

@@ -67,10 +67,16 @@ namespace boost { namespace program_options {
woption result;
result.string_key = opt.string_key;
result.position_key = opt.position_key;
result.unregistered = opt.unregistered;
std::transform(opt.value.begin(), opt.value.end(),
back_inserter(result.value),
bind(from_utf8, _1));
boost::bind(from_utf8, _1));
std::transform(opt.original_tokens.begin(),
opt.original_tokens.end(),
back_inserter(result.original_tokens),
boost::bind(from_utf8, _1));
return result;
}
}

View File

@@ -74,11 +74,13 @@ namespace boost { namespace program_options {
try {
d.semantic()->parse(v.value(), options.options[i].value, utf8);
}
#ifndef BOOST_NO_EXCEPTIONS
catch(validation_error& e)
{
e.set_option_name(name);
throw;
}
#endif
v.m_value_semantic = d.semantic();
// The option is not composing, and the value is explicitly
@@ -133,7 +135,16 @@ namespace boost { namespace program_options {
k != vm.end();
++k)
{
k->second.m_value_semantic->notify(k->second.value());
/* Users might wish to use variables_map to store their own values
that are not parsed, and therefore will not have value_semantics
defined. Do no crash on such values. In multi-module programs,
one module might add custom values, and the 'notify' function
will be called after that, so we check that value_sematics is
not NULL. See:
https://svn.boost.org/trac/boost/ticket/2782
*/
if (k->second.m_value_semantic)
k->second.m_value_semantic->notify(k->second.value());
}
}

View File

@@ -1,15 +1,33 @@
#
# Copyright Troy D. Straszheim
#
# Distributed under the Boost Software License, Version 1.0.
# See http://www.boost.org/LICENSE_1_0.txt
#
boost_additional_test_dependencies(program_options BOOST_DEPENDS test)
set(PROGRAM_OPTIONS_LIBRARIES
boost_program_options
boost_test_exec_monitor)
set(BOOST_TEST_EXEC_MONITOR_SUFFIX "")
if (NOT BUILD_SINGLE_THREADED)
set(BOOST_TEST_EXEC_MONITOR_SUFFIX "-mt")
endif()
set(BOOST_TEST_EXEC_MONITOR_SUFFIX "${BOOST_TEST_EXEC_MONITOR_SUFFIX}-static")
if (NOT BUILD_RELEASE)
set(BOOST_TEST_EXEC_MONITOR_SUFFIX "${BOOST_TEST_EXEC_MONITOR_SUFFIX}-debug")
endif()
macro(program_options_test_run TESTNAME)
boost_test_run(${TESTNAME}
DEPENDS boost_program_options boost_test_exec_monitor STATIC)
STATIC
DEPENDS boost_program_options boost_test_exec_monitor )
boost_test_run("${TESTNAME}_dll"
"${TESTNAME}.cpp"
DEPENDS boost_program_options boost_test_exec_monitor-static SHARED)
${TESTNAME}.cpp
SHARED
DEPENDS boost_program_options
"boost_test_exec_monitor${BOOST_TEST_EXEC_MONITOR_SUFFIX}")
endmacro(program_options_test_run)
program_options_test_run(options_description_test)

View File

@@ -34,9 +34,13 @@ void test_unicode_to_unicode()
args.push_back(L"--foo=\x044F");
variables_map vm;
store(wcommand_line_parser(args).options(desc).run(), vm);
basic_parsed_options<wchar_t> parsed =
wcommand_line_parser(args).options(desc).run();
store(parsed, vm);
BOOST_CHECK(vm["foo"].as<wstring>() == L"\x044F");
BOOST_CHECK(vm["foo"].as<wstring>() == L"\x044F");
BOOST_CHECK(parsed.options[0].original_tokens.size() == 1);
BOOST_CHECK(parsed.options[0].original_tokens[0] == L"--foo=\x044F");
}
// Test that unicode input is property converted into