rpms/boost/F-7 boost-opt.patch,NONE,1.1 boost.spec,1.34,1.35
Petr Machata (pmachata)
fedora-extras-commits at redhat.com
Mon Nov 19 18:26:27 UTC 2007
Author: pmachata
Update of /cvs/pkgs/rpms/boost/F-7
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv3184
Modified Files:
boost.spec
Added Files:
boost-opt.patch
Log Message:
- Apply/testsuite ambiguous option patch from James Philbin
- Resolves: #369581
boost-opt.patch:
--- NEW FILE boost-opt.patch ---
--- libs/program_options/src/options_description.cpp
+++ libs/program_options/src/options_description.cpp
@@ -53,10 +53,10 @@
{
}
- bool
+ option_description::match_result
option_description::match(const std::string& option, bool approx) const
{
- bool result = false;
+ match_result result = no_match;
if (!m_long_name.empty()) {
if (*m_long_name.rbegin() == '*')
@@ -65,23 +65,26 @@
// prefix is OK.
if (option.find(m_long_name.substr(0, m_long_name.length()-1))
== 0)
- result = true;
+ result = approximate_match;
}
if (approx)
{
if (m_long_name.find(option) == 0)
- result = true;
+ if (m_long_name == option)
+ result = full_match;
+ else
+ result = approximate_match;
}
else
{
if (m_long_name == option)
- result = true;
+ result = full_match;
}
}
if (m_short_name == option)
- result = true;
+ result = full_match;
return result;
}
@@ -258,21 +261,38 @@
// case sensitivity and trailing '*' and so we can't use simple map.
for(unsigned i = 0; i < m_options.size(); ++i)
{
- if (m_options[i]->match(name, approx))
+ option_description::match_result r =
+ m_options[i]->match(name, approx);
+
+ if (r == option_description::no_match)
+ continue;
+
+ // If we have a full patch, and an approximate match,
+ // ignore approximate match instead of reporting error.
+ // Say, if we have options "all" and "all-chroots", then
+ // "--all" on the command line should select the first one,
+ // without ambiguity.
+ //
+ // For now, we don't check the situation when there are
+ // two full matches.
+
+ if (r == option_description::full_match)
{
- if (found != -1)
- {
- vector<string> alts;
- // FIXME: the use of 'key' here might not
- // be the best approach.
- alts.push_back(m_options[found]->key(name));
- alts.push_back(m_options[i]->key(name));
- boost::throw_exception(ambiguous_option(name, alts));
- }
- else
- {
- found = i;
- }
+ return m_options[i].get();
+ }
+
+ if (found != -1)
+ {
+ vector<string> alts;
+ // FIXME: the use of 'key' here might not
+ // be the best approach.
+ alts.push_back(m_options[found]->key(name));
+ alts.push_back(m_options[i]->key(name));
+ boost::throw_exception(ambiguous_option(name, alts));
+ }
+ else
+ {
+ found = i;
}
}
if (found != -1) {
--- libs/program_options/test/options_description_test.cpp
+++ libs/program_options/test/options_description_test.cpp
@@ -20,11 +20,20 @@
{
options_description desc;
desc.add_options()
- ("foo", new untyped_value())
- ("fee", new untyped_value())
- ("baz", new untyped_value());
+ ("foo", new untyped_value())
+ ("fee", new untyped_value())
+ ("baz", new untyped_value())
+ ("all", new untyped_value())
+ ("all-chroots", new untyped_value())
+ ("all-sessions", new untyped_value())
+ ;
BOOST_CHECK_EQUAL(desc.find("fo", true).long_name(), "foo");
+
+ BOOST_CHECK_EQUAL(desc.find("all", true).long_name(), "all");
+ BOOST_CHECK_EQUAL(desc.find("all-ch", true).long_name(), "all-chroots");
+
+
// BOOST_CHECK(desc.count_approx("foo") == 1);
// set<string> a = desc.approximations("f");
// BOOST_CHECK(a.size() == 2);
--- boost/program_options/options_description.hpp
+++ boost/program_options/options_description.hpp
@@ -78,10 +78,12 @@
virtual ~option_description();
+ enum match_result { no_match, full_match, approximate_match };
+
/** Given 'option', specified in the input source,
return 'true' is 'option' specifies *this.
*/
- bool match(const std::string& option, bool approx) const;
+ match_result match(const std::string& option, bool approx) const;
/** Return the key that should identify the option, in
particular in the variables_map class.
Index: boost.spec
===================================================================
RCS file: /cvs/pkgs/rpms/boost/F-7/boost.spec,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -r1.34 -r1.35
--- boost.spec 2 Apr 2007 14:42:09 -0000 1.34
+++ boost.spec 19 Nov 2007 18:25:53 -0000 1.35
@@ -1,7 +1,7 @@
Name: boost
Summary: The Boost C++ Libraries
Version: 1.33.1
-Release: 13%{?dist}
+Release: 14%{?dist}
License: Boost Software License (GPL-Compatible, Free Software License)
URL: http://www.boost.org/
Group: System Environment/Libraries
@@ -28,6 +28,7 @@
Patch7: boost-bind-gcc41.patch
Patch8: boost-cxxflags-debug.patch
Patch9: boost-python-vs-x86-64.patch
+Patch10: boost-opt.patch
%description
Boost provides free peer-reviewed portable C++ source libraries. The
@@ -78,6 +79,7 @@
%patch7 -p0
%patch8 -p0
%patch9 -p0
+%patch10 -p0
%build
#build bjam
@@ -183,6 +185,10 @@
%doc %{_docdir}/boost-%{version}
%changelog
+* Mon Nov 19 2007 Petr Machata <pmachata at redhat.com> - 1.33.1-14
+- Apply/testsuite ambiguous option patch from James Philbin
+- Resolves: #369581
+
* Mon Apr 02 2007 Benjamin Kosnik <bkoz at redhat.com> 1.33.1-13
- (#225622: Merge Review: boost)
Change static to devel-static.
More information about the fedora-extras-commits
mailing list