You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by mg...@apache.org on 2011/05/17 16:43:54 UTC

svn commit: r1104291 - in /qpid/trunk/qpid/cpp: include/qpid/Options.h src/qpid/Options.cpp src/tests/.valgrind.supp

Author: mgoulish
Date: Tue May 17 14:43:53 2011
New Revision: 1104291

URL: http://svn.apache.org/viewvc?rev=1104291&view=rev
Log:
Remove support for archaic Boost version 1_32 ( 103200 ).
( As promised, long ago. )

Modified:
    qpid/trunk/qpid/cpp/include/qpid/Options.h
    qpid/trunk/qpid/cpp/src/qpid/Options.cpp
    qpid/trunk/qpid/cpp/src/tests/.valgrind.supp

Modified: qpid/trunk/qpid/cpp/include/qpid/Options.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/include/qpid/Options.h?rev=1104291&r1=1104290&r2=1104291&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/include/qpid/Options.h (original)
+++ qpid/trunk/qpid/cpp/include/qpid/Options.h Tue May 17 14:43:53 2011
@@ -133,77 +133,6 @@ inline po::value_semantic* optValue(bool
 
 
 
-/*
- *  ---------------------------------------------
- *  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_desc
                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
 };
 
 

Modified: qpid/trunk/qpid/cpp/src/qpid/Options.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/Options.cpp?rev=1104291&r1=1104290&r2=1104291&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/Options.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/Options.cpp Tue May 17 14:43:53 2011
@@ -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&
 
 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
         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
                         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 strin
 }
 
 
-
-
-#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
 

Modified: qpid/trunk/qpid/cpp/src/tests/.valgrind.supp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/tests/.valgrind.supp?rev=1104291&r1=1104290&r2=1104291&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/tests/.valgrind.supp (original)
+++ qpid/trunk/qpid/cpp/src/tests/.valgrind.supp Tue May 17 14:43:53 2011
@@ -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)



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org