Author: zaroth
Date: Thu Jun 9 11:52:58 2011
New Revision: 49814
URL: http://svn.gna.org/viewcvs/wesnoth?rev=49814&view=rev
Log:
added support for positional options in commandline_options
Modified:
trunk/src/commandline_options.cpp
trunk/src/game.cpp
trunk/src/game_controller.cpp
trunk/src/tests/test_commandline_options.cpp
Modified: trunk/src/commandline_options.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/commandline_options.cpp?rev=49814&r1=49813&r2=49814&view=diff
==============================================================================
--- trunk/src/commandline_options.cpp (original)
+++ trunk/src/commandline_options.cpp Thu Jun 9 11:52:58 2011
@@ -21,6 +21,7 @@
namespace po = boost::program_options;
+// this class is needed since boost has some templated operators>> declared
internally for tuples and we don't want them to interfere. Existence of such
operator>> apparently causes program_options to cause the custom class somehow
specially... well, the boost::tuple default operator>> format doesn't suit our
needs anyway.
class two_strings : public boost::tuple<std::string,std::string> {};
void validate(boost::any& v, const std::vector<std::string>& values,
@@ -175,9 +176,12 @@
all_.add(visible_).add(hidden_);
+ po::positional_options_description positional;
+ positional.add("data-dir",1);
+
po::variables_map vm;
const int parsing_style = po::command_line_style::default_style ^
po::command_line_style::allow_guessing;
- po::store(po::parse_command_line(argc_,argv_,all_,parsing_style),vm);
+
po::store(po::command_line_parser(argc_,argv_).options(all_).positional(positional).style(parsing_style).run(),vm);
if (vm.count("ai-config"))
multiplayer_ai_config =
parse_to_int_string_tuples_(vm["ai-config"].as<std::vector<std::string> >());
Modified: trunk/src/game.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/game.cpp?rev=49814&r1=49813&r2=49814&view=diff
==============================================================================
--- trunk/src/game.cpp (original)
+++ trunk/src/game.cpp Thu Jun 9 11:52:58 2011
@@ -192,6 +192,7 @@
throw config::error("directory not found");
}
// don't update font as we already updating it in game ctor
+ //font_manager_.update_font_path();
}
if(cmdline_opts.gunzip) {
const std::string input_file(*cmdline_opts.gunzip);
Modified: trunk/src/game_controller.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/game_controller.cpp?rev=49814&r1=49813&r2=49814&view=diff
==============================================================================
--- trunk/src/game_controller.cpp (original)
+++ trunk/src/game_controller.cpp Thu Jun 9 11:52:58 2011
@@ -306,25 +306,6 @@
} else if(val[0] == '-') {
std::cerr << "unknown option: " << val << std::endl;
//throw config::error("unknown option"); TODO will be
unnecessary here once commandline_options is completed
- } else {
- std::cerr << "Overriding data directory with " << val
<< std::endl;
-#ifdef _WIN32
- // use c_str to ensure that index 1 points to valid
element since c_str() returns null-terminated string
- if(val.c_str()[1] == ':') {
-#else
- if(val[0] == '/') {
-#endif
- game_config::path = val;
- } else {
- game_config::path = get_cwd() + '/' + val;
- }
-
- if(!is_directory(game_config::path)) {
- std::cerr << "Could not find directory '" <<
game_config::path << "'\n";
- throw config::error("directory not found");
- }
-
- font_manager_.update_font_path();
}
}
std::cerr << '\n';
Modified: trunk/src/tests/test_commandline_options.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/tests/test_commandline_options.cpp?rev=49814&r1=49813&r2=49814&view=diff
==============================================================================
--- trunk/src/tests/test_commandline_options.cpp (original)
+++ trunk/src/tests/test_commandline_options.cpp Thu Jun 9 11:52:58 2011
@@ -90,7 +90,6 @@
BOOST_CHECK(!co.version);
BOOST_CHECK(!co.windowed);
BOOST_CHECK(!co.with_replay);
-
}
BOOST_AUTO_TEST_CASE (test_default_options)
@@ -303,4 +302,80 @@
BOOST_CHECK(co.with_replay);
}
+BOOST_AUTO_TEST_CASE (test_positional_options)
+{
+ const char *argv[] =
+ {
+ "wesnoth",
+ "datadirfoo"
+ };
+ const int argc = sizeof(argv)/sizeof(const char *);
+ commandline_options co(argc,const_cast<char**>(argv));
+
+ BOOST_CHECK(!co.bpp);
+ BOOST_CHECK(!co.campaign);
+ BOOST_CHECK(!co.campaign_difficulty);
+ BOOST_CHECK(!co.campaign_scenario);
+ BOOST_CHECK(!co.clock);
+ BOOST_CHECK(!co.config_path);
+ BOOST_CHECK(!co.config_dir);
+ BOOST_CHECK(co.data_dir && *co.data_dir == "datadirfoo");
+ BOOST_CHECK(!co.debug);
+#ifdef DEBUG_WINDOW_LAYOUT_GRAPHS
+ BOOST_CHECK(!co.debug_dot_domain);
+ BOOST_CHECK(!co.debug_dot_level);
+#endif
+ BOOST_CHECK(!co.editor);
+ BOOST_CHECK(!co.fps);
+ BOOST_CHECK(!co.fullscreen);
+ BOOST_CHECK(!co.gunzip);
+ BOOST_CHECK(!co.gzip);
+ BOOST_CHECK(!co.help);
+ BOOST_CHECK(!co.log);
+ BOOST_CHECK(!co.load);
+ BOOST_CHECK(!co.logdomains);
+ BOOST_CHECK(!co.multiplayer);
+ BOOST_CHECK(!co.multiplayer_ai_config);
+ BOOST_CHECK(!co.multiplayer_algorithm);
+ BOOST_CHECK(!co.multiplayer_controller);
+ BOOST_CHECK(!co.multiplayer_era);
+ BOOST_CHECK(!co.multiplayer_label);
+ BOOST_CHECK(!co.multiplayer_parm);
+ BOOST_CHECK(!co.multiplayer_side);
+ BOOST_CHECK(!co.multiplayer_turns);
+ BOOST_CHECK(!co.max_fps);
+ BOOST_CHECK(!co.nocache);
+ BOOST_CHECK(!co.nodelay);
+ BOOST_CHECK(!co.nogui);
+ BOOST_CHECK(!co.nomusic);
+ BOOST_CHECK(!co.nosound);
+ BOOST_CHECK(!co.new_storyscreens);
+ BOOST_CHECK(!co.new_syntax);
+ BOOST_CHECK(!co.new_widgets);
+ BOOST_CHECK(!co.path);
+ BOOST_CHECK(!co.preprocess);
+ BOOST_CHECK(!co.preprocess_defines);
+ BOOST_CHECK(!co.preprocess_input_macros);
+ BOOST_CHECK(!co.preprocess_output_macros);
+ BOOST_CHECK(!co.preprocess_path);
+ BOOST_CHECK(!co.preprocess_target);
+ BOOST_CHECK(!co.proxy);
+ BOOST_CHECK(!co.proxy_address);
+ BOOST_CHECK(!co.proxy_password);
+ BOOST_CHECK(!co.proxy_port);
+ BOOST_CHECK(!co.proxy_user);
+ BOOST_CHECK(!co.resolution);
+ BOOST_CHECK(!co.rng_seed);
+ BOOST_CHECK(!co.server);
+ BOOST_CHECK(!co.screenshot);
+ BOOST_CHECK(!co.screenshot_map_file);
+ BOOST_CHECK(!co.screenshot_output_file);
+ BOOST_CHECK(!co.smallgui);
+ BOOST_CHECK(!co.test);
+ BOOST_CHECK(!co.validcache);
+ BOOST_CHECK(!co.version);
+ BOOST_CHECK(!co.windowed);
+ BOOST_CHECK(!co.with_replay);
+}
+
BOOST_AUTO_TEST_SUITE_END()
_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits