summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Goulish <mgoulish@apache.org>2011-05-17 14:43:53 +0000
committerMichael Goulish <mgoulish@apache.org>2011-05-17 14:43:53 +0000
commitcc77efaa96a95173fd009a3a5f855e2507da643c (patch)
treeccea85059b2e7fa2283b63046a57e4229fbc2886
parent9edbda4f8744a45aec18bdfafddf8e3879d14c9c (diff)
downloadqpid-python-cc77efaa96a95173fd009a3a5f855e2507da643c.tar.gz
Remove support for archaic Boost version 1_32 ( 103200 ).
( As promised, long ago. ) git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1104291 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/cpp/include/qpid/Options.h88
-rw-r--r--qpid/cpp/src/qpid/Options.cpp269
-rw-r--r--qpid/cpp/src/tests/.valgrind.supp74
3 files changed, 0 insertions, 431 deletions
diff --git a/qpid/cpp/include/qpid/Options.h b/qpid/cpp/include/qpid/Options.h
index 078a6b4d95..63d91c2d72 100644
--- a/qpid/cpp/include/qpid/Options.h
+++ b/qpid/cpp/include/qpid/Options.h
@@ -133,77 +133,6 @@ inline po::value_semantic* optValue(bool& value) { return po::bool_switch(&value
-/*
- * ---------------------------------------------
- * Explanation for Boost 103200 conditional code
- * ---------------------------------------------
- *
- * This boost version has an implementation of the program_options library
- * that has no provision for allowing unregistered options to pass by.
- *
- * But that means that, if you have a program that loads optional modules
- * after start-up, and those modules each have their own set of options,
- * then if you parse the command line too soon, you will get spurious
- * reports of unrecognized options -- and the program will exit!
- *
- * And we must process the command-line before module-loading, because we
- * need to look at the "bootstrap" options.
- *
- * This conditional code:
- *
- * 1. implements it's own functor class, derived from the Boost
- * "options_description_easy_init" class. This functor is used
- * to process added options and do the functor chaining, so that
- * I can snoop on the arguments before doing an explicit call
- * to its parent.
- *
- * 2. It implements two static vectors, one to hold long names, and
- * one for short names, so that options declared by modules are
- * not forgotten when their options_description goes out of scope.
- *
- * I will be thrilled to personally delete this code if we ever decide
- * that qpid doesn't really need to support this antique version of Boost.
- *
- */
-
-#if ( BOOST_VERSION == 103200 )
-struct Options;
-
-
-struct
-options_description_less_easy_init
- : public po::options_description_easy_init
-{
- options_description_less_easy_init ( Options * my_owner,
- po::options_description * my_parents_owner
- )
- : po::options_description_easy_init(my_parents_owner)
- {
- owner = my_owner;
- }
-
-
- options_description_less_easy_init&
- operator()(char const * name,
- char const * description);
-
-
- options_description_less_easy_init&
- operator()(char const * name,
- const po::value_semantic* s);
-
-
- options_description_less_easy_init&
- operator()(const char* name,
- const po::value_semantic* s,
- const char* description);
-
-
- Options * owner;
-};
-#endif
-
-
struct Options : public po::options_description {
struct Exception : public qpid::Exception {
@@ -222,26 +151,9 @@ struct Options : public po::options_description {
bool allowUnknown = false);
- #if ( BOOST_VERSION == 103200 )
- options_description_less_easy_init m_less_easy;
-
- options_description_less_easy_init addOptions() {
- return m_less_easy;
- }
-
- bool
- is_registered_option ( std::string s );
-
- void
- register_names ( std::string s );
-
- static std::vector<std::string> long_names;
- static std::vector<std::string> short_names;
- #else
boost::program_options::options_description_easy_init addOptions() {
return add_options();
}
- #endif
};
diff --git a/qpid/cpp/src/qpid/Options.cpp b/qpid/cpp/src/qpid/Options.cpp
index 499fb71bc3..4b13e349f5 100644
--- a/qpid/cpp/src/qpid/Options.cpp
+++ b/qpid/cpp/src/qpid/Options.cpp
@@ -30,23 +30,6 @@ namespace qpid {
using namespace std;
-/*
- * ---------------------------------------------
- * Explanation for Boost 103200 conditional code
- * ---------------------------------------------
- *
- * Please see large comment in Options.h .
- *
- */
-
-#if ( BOOST_VERSION == 103200 )
-std::vector<std::string> Options::long_names;
-std::vector<std::string> Options::short_names;
-#endif
-
-
-
-
namespace {
struct EnvOptMapper {
@@ -69,49 +52,11 @@ struct EnvOptMapper {
static const std::string prefix("QPID_");
if (envVar.substr(0, prefix.size()) == prefix) {
string env = envVar.substr(prefix.size());
-#if (BOOST_VERSION >= 103300)
typedef const std::vector< boost::shared_ptr<po::option_description> > OptDescs;
OptDescs::const_iterator i =
find_if(opts.options().begin(), opts.options().end(), boost::bind(matchStr, env, _1));
if (i != opts.options().end())
return (*i)->long_name();
-#else
- /*
- * For Boost version 103200 and below.
- *
- * In Boost version 103200, the options_description::options member,
- * used above, is private. So what I will do here is use the
- * count() funtion, which returns a 1 or 0 indicating presence or
- * absence of the environment variable.
- *
- * If it is present, I will return its name. Env vars do not have
- * short and long forms, so the name is synonymous with the long
- * name. (This would not work for command line args.)
- * And if it's absent -- an empty string.
- */
-
-
- /*
- * The env vars come in unaltered, i.e. QPID_FOO, but the
- * options are stored normalized as "qpid-foo". Change the
- * local variable "env" so it can be found by "opts".
- */
- for (std::string::iterator i = env.begin(); i != env.end(); ++i)
- {
- *i = (*i == '_')
- ? '-'
- : ::tolower(*i);
- }
-
- if ( opts.count(env.c_str()) > 0 )
- {
- return env.c_str();
- }
- else
- {
- return string();
- }
-#endif
}
return string();
}
@@ -166,10 +111,6 @@ std::string prettyArg(const std::string& name, const std::string& value) {
Options::Options(const string& name) :
po::options_description(name)
-
-#if ( BOOST_VERSION == 103200 )
- , m_less_easy(this, this)
-#endif
{
}
@@ -186,7 +127,6 @@ void Options::parse(int argc, char const* const* argv, const std::string& config
parsing="command line options";
if (argc > 0 && argv != 0) {
if (allowUnknown) {
-#if (BOOST_VERSION >= 103300)
// This hideous workaround is required because boost 1.33 has a bug
// that causes 'allow_unregistered' to not work.
po::command_line_parser clp = po::command_line_parser(argc, const_cast<char**>(argv)).
@@ -200,113 +140,6 @@ void Options::parse(int argc, char const* const* argv, const std::string& config
filtopts.options.push_back (*i);
po::store(filtopts, vm);
-#elif ( BOOST_VERSION == 103200 )
-
- /*
- * "Tokenize" the argv to get rid of equals signs.
- */
- vector<string> tokenized_argv;
- vector<string>::iterator iter;
-
- for ( int i = 0; i < argc; ++ i )
- {
- string s = argv[i];
- size_t equals_pos = s.find_first_of ( '=' );
-
- if ( string::npos == equals_pos ) // There's no equals sign. This is a token.
- {
- tokenized_argv.push_back(s);
- }
- else
- {
- // Two tokens -- before and after the equals position.
- tokenized_argv.push_back ( s.substr(0, equals_pos) );
- tokenized_argv.push_back ( s.substr(equals_pos+1) );
- }
- }
-
-
- /*
- * Now "filter" the tokenized argv, to get rid of all
- * unrecognized options. Because Boost 103200 has no
- * facility for dealing gracefully with "unregistered"
- * options.
- */
- vector<string> filtered_argv;
- vector<string>::iterator the_end = tokenized_argv.end();
-
- // The program-name gets in for free...
- iter = tokenized_argv.begin();
- filtered_argv.push_back ( * iter );
- ++ iter;
-
- // ...but all other args get checked.
- while ( iter < the_end )
- {
- /*
- * If this is an argument that is registered,
- * copy it to filtered_argv and also copy all
- * of its arguments.
- */
- if ( is_registered_option ( * iter ) )
- {
- // Store this recognized arg.
- filtered_argv.push_back ( * iter );
- ++ iter;
-
- // Copy all values for the above arg.
- // Args are tokens that do not start with a minus.
- while ( (iter < the_end) && ((* iter)[0] != '-') )
- {
- filtered_argv.push_back ( * iter );
- ++ iter;
- }
- }
- else
- {
- // Skip this unrecognized arg.
- ++ iter;
-
- // Copy all values for the above arg.
- // Values are tokens that do not start with a minus.
- while ( (iter < the_end) && ( '-' != (*iter)[0] ) )
- {
- ++ iter;
- }
- }
- }
-
- // Make an array of temporary C strings, because
- // the interface I can use wants it that way.
- int new_argc = filtered_argv.size();
- char ** new_argv = new char * [ new_argc ];
- int i = 0;
-
- // cout << "NEW ARGV: |";
- for ( iter = filtered_argv.begin();
- iter < filtered_argv.end();
- ++ iter, ++ i
- )
- {
- new_argv[i] = strdup( (* iter).c_str() );
- // cout << " " << new_argv[i] ;
- }
- // cout << "|\n";
-
-
- // Use the array of C strings.
- po::basic_parsed_options<char> bpo = po::parse_command_line(new_argc, const_cast<char**>(new_argv), *this);
- po::store(bpo, vm);
-
-
- // Now free the temporary C strings.
- for ( i = 0; i < new_argc; ++ i )
- {
- free ( new_argv[i] );
- }
- delete[] new_argv;
-
-#endif
}
else
po::store(po::parse_command_line(argc, const_cast<char**>(argv), *this), vm);
@@ -363,107 +196,5 @@ CommonOptions::CommonOptions(const string& name, const string& configfile)
}
-
-
-#if ( BOOST_VERSION == 103200 )
-options_description_less_easy_init&
-options_description_less_easy_init::operator()(char const * name,
- char const * description)
-{
- // Snoop on the arguments....
- owner->register_names ( name );
- // ... then call parent function explicitly.
- po::options_description_easy_init::operator() ( name, description );
- return * this;
-}
-
-
-options_description_less_easy_init&
-options_description_less_easy_init::operator()(char const * name,
- const po::value_semantic* s)
-{
- // Snoop on the arguments....
- owner->register_names ( name );
- // ... then call parent function explicitly.
- po::options_description_easy_init::operator() ( name, s );
- return * this;
-}
-
-
-options_description_less_easy_init&
-options_description_less_easy_init::operator()(const char* name,
- const po::value_semantic* s,
- const char* description)
-{
- // Snoop on the arguments....
- owner->register_names ( name );
- // ... then call parent function explicitly.
- po::options_description_easy_init::operator() ( name, s, description );
- return * this;
-}
-
-
-
-
-
-void
-Options::register_names ( std::string s )
-{
-
- std::string::size_type comma_pos = s.find_first_of ( ',' );
-
- if ( std::string::npos == comma_pos )
- {
- // There is no short-name.
- long_names.push_back ( s );
- }
- else
- {
- std::string long_name = s.substr(0, comma_pos),
- short_name = s.substr(comma_pos+1);
- long_names .push_back ( long_name );
- short_names.push_back ( short_name );
- }
-
- /*
- * There is no way to tell when the adding of new options is finished,
- * so I re-sort after each one.
- */
- std::sort ( long_names .begin(), long_names .end() );
- std::sort ( short_names.begin(), short_names.end() );
-}
-
-
-
-
-
-bool
-Options::is_registered_option ( std::string s )
-{
- std::string without_dashes = s.substr ( s.find_first_not_of ( '-' ) );
- std::vector<std::string>::iterator i;
-
- // Look among the long names.
- i = std::find ( long_names.begin(),
- long_names.end(),
- without_dashes
- );
- if ( i != long_names.end() )
- return true;
-
- // Look among the short names.
- i = std::find ( short_names.begin(),
- short_names.end(),
- without_dashes
- );
- if ( i != short_names.end() )
- return true;
-
-
- return false;
-}
-#endif
-
-
} // namespace qpid
diff --git a/qpid/cpp/src/tests/.valgrind.supp b/qpid/cpp/src/tests/.valgrind.supp
index 0e3e045437..2c6a1509ff 100644
--- a/qpid/cpp/src/tests/.valgrind.supp
+++ b/qpid/cpp/src/tests/.valgrind.supp
@@ -73,61 +73,6 @@
}
{
- boost 103200 -- we think Boost is responsible for these leaks.
- Memcheck:Leak
- fun:_Znwm
- fun:_ZN5boost15program_options??options_description*
-}
-
-{
- boost 103200 -- we think Boost is responsible for these leaks.
- Memcheck:Leak
- fun:_Znwm
- fun:_ZN5boost9unit_test9test_case*
-}
-
-{
- boost 103200 -- we think Boost is responsible for these leaks.
- Memcheck:Leak
- fun:calloc
- fun:_dlerror_run
- fun:dlopen@@GLIBC_2.2.5
- fun:_ZN4qpid3sys5Shlib4loadEPKc
- fun:_Z9testShlibv
- fun:_ZN5boost9unit_test9ut_detail17unit_test_monitor8functionEv
- obj:/usr/lib64/libboost_unit_test_framework.so.1.32.0
- fun:_ZN5boost17execution_monitor7executeEbi
- fun:_ZN5boost9unit_test9ut_detail17unit_test_monitor21execute_and_translateEPNS0_9test_caseEMS3_FvvEi
- fun:_ZN5boost9unit_test9test_case3runEv
- fun:_ZN5boost9unit_test10test_suite6do_runEv
- fun:_ZN5boost9unit_test9test_case3runEv
- fun:main
-}
-
-{
- boost 103200 -- we think Boost is responsible for these leaks.
- Memcheck:Leak
- fun:calloc
- fun:_dl_allocate_tls
- fun:pthread_create@@GLIBC_2.2.5
- fun:_ZN4qpid6broker5Timer5startEv
- fun:_ZN4qpid6broker5TimerC1Ev
- fun:_ZN4qpid6broker10DtxManagerC1Ev
- fun:_ZN4qpid6broker6BrokerC1ERKNS1_7OptionsE
- fun:_ZN4qpid6broker6Broker6createERKNS1_7OptionsE
- fun:_ZN15SessionFixtureTI15ProxyConnectionEC2Ev
- fun:_Z14testQueueQueryv
- fun:_ZN5boost9unit_test9ut_detail17unit_test_monitor8functionEv
- obj:/usr/lib64/libboost_unit_test_framework.so.1.32.0
- fun:_ZN5boost17execution_monitor7executeEbi
- fun:_ZN5boost9unit_test9ut_detail17unit_test_monitor21execute_and_translateEPNS0_9test_caseEMS3_FvvEi
- fun:_ZN5boost9unit_test9test_case3runEv
- fun:_ZN5boost9unit_test10test_suite6do_runEv
- fun:_ZN5boost9unit_test9test_case3runEv
- fun:main
-}
-
-{
INVESTIGATE
Memcheck:Leak
fun:calloc
@@ -155,25 +100,6 @@
}
{
- boost 103200 -- mgoulish -- fix this, sometime
- Memcheck:Leak
- fun:*
- fun:*
- obj:*
- fun:*
- fun:_ZN4qpid34options_description_less_easy_initclEPKcPKN5boost15program_options14value_semanticES2_
-}
-
-{
- boost 103200 -- mgoulish -- fix this, sometime
- Memcheck:Leak
- fun:*
- fun:*
- fun:*
- fun:_ZN4qpid34options_description_less_easy_initclEPKcPKN5boost15program_options14value_semanticES2_
-}
-
-{
INVESTIGATE
Memcheck:Param
socketcall.sendto(msg)