diff options
author | Alan Conway <aconway@apache.org> | 2007-06-27 00:12:26 +0000 |
---|---|---|
committer | Alan Conway <aconway@apache.org> | 2007-06-27 00:12:26 +0000 |
commit | d032f5584b0f1de890844a2796d6ba158b011fca (patch) | |
tree | 7ffc500423a1cee3c39d2a5e27d301057fbcd0e9 /cpp/src/qpid/Options.cpp | |
parent | 2e15ee024a7f47bda7bd6ea5991657a820bd0714 (diff) | |
download | qpid-python-d032f5584b0f1de890844a2796d6ba158b011fca.tar.gz |
Make check now starts a broker on a dynamically assigned port, so
multiple qpid builds on one host will not conflict.
* src/tests/run_test, start_broker, kill_broker:
Broker writes port to file, run_test sets QPID_PORT
in environment of all tests.
* src/tests/topic_publisher.cpp, topic_listener.cpp, client_test.cpp:
All test clients use TestOptions to parse options from args and env.
* src/qpid/Options.h: Renamed from CommonOptions.h
Simplified use of Options class.
* src/qpid/Url.h: Renamed defaultPort constant.
* src/tests/logging.cpp:
* src/tests/interop_runner.cpp:
* src/tests/TestOptions.h:
* src/qpidd.cpp:
* src/qpid/log/Options.cpp:
* src/qpid/log/Logger.cpp:
* src/qpid/broker/Broker.cpp:
Updated for changes to Options.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@550993 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/Options.cpp')
-rw-r--r-- | cpp/src/qpid/Options.cpp | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/cpp/src/qpid/Options.cpp b/cpp/src/qpid/Options.cpp new file mode 100644 index 0000000000..18a3f726f9 --- /dev/null +++ b/cpp/src/qpid/Options.cpp @@ -0,0 +1,92 @@ +/* + * + * Copyright (c) 2006 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "Options.h" +#include "qpid/Exception.h" +#include <fstream> +#include <algorithm> +#include <iostream> + +namespace qpid { + +using namespace std; + +namespace { +const std::string prefix("QPID_"); +char env2optchar(char env) { return (env=='_') ? '-' : tolower(env); } + +struct Mapper { + Mapper(const Options& o) : opts(o) {} + string operator()(const string& env) { + if (env.substr(0, prefix.size()) == prefix) { + string opt = env.substr(prefix.size()); + transform(opt.begin(), opt.end(), opt.begin(), env2optchar); + // Ignore env vars that don't match to known options. + if (opts.find_nothrow(opt, false)) + return opt; + } + return string(); + } + const Options& opts; +}; + +} +std::string prettyArg(const std::string& name, const std::string& value) { + return value.empty() ? name : name+" (="+value+")"; +} + +Options::Options(const string& name) : po::options_description(name) {} + +void Options::parse(int argc, char** argv, const std::string& configFile) +{ + string parsing; + try { + po::variables_map vm; + parsing="command line options"; + po::store(po::parse_command_line(argc, argv, *this), vm); + parsing="environment variables"; + po::store(po::parse_environment(*this, Mapper(*this)), vm); + po::notify(vm); // configFile may be updated from arg/env options. + if (!configFile.empty()) { + parsing="configuration file "+configFile; + ifstream conf(configFile.c_str()); + if (conf.good()) { + conf.exceptions(ifstream::failbit|ifstream::badbit); + po::store(po::parse_config_file(conf, *this), vm); + } + } + po::notify(vm); + } + catch (const std::exception& e) { + ostringstream msg; + msg << "Error in " << parsing << ": " << e.what() << endl; + if (find_nothrow("help", false)) + msg << "Use --help to see valid options" << endl; + throw Exception(msg.str()); + } +} + +CommonOptions::CommonOptions(const string& name) : Options(name) { + addOptions() + ("help,h", optValue(help), "Print help message.") + ("version,v", optValue(version), "Print version information.") + ("config", optValue(config, "FILE"), "Configuation file."); +} + +} // namespace qpid + |