From 98b6177c5c191a037e1eab97157a36ba499be41b Mon Sep 17 00:00:00 2001
From: whh8b <whh8b@git.zephyr-software.com>
Date: Thu, 22 Oct 2015 15:59:44 +0000
Subject: [PATCH] Parse() options with variable output configuration.

---
 src/zipr.cpp         | 14 +++++++++++++-
 test/ZiprOptions.cpp |  2 +-
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/src/zipr.cpp b/src/zipr.cpp
index e331699..3207cfd 100644
--- a/src/zipr.cpp
+++ b/src/zipr.cpp
@@ -72,10 +72,15 @@ void ZiprImpl_t::Init()
 	bss_needed=0;
 	use_stratafier_mode=false;
 
+	ostream *error = &cout, *warn = NULL;
+
 	m_zipr_options.AddNamespace(new ZiprOptionsNamespace_t("global"));
 	m_zipr_options.AddNamespace(RegisterOptions(m_zipr_options.Namespace("global")));
 
-	m_zipr_options.Parse();
+	/*
+	 * Parse once to read the global and zipr options.
+	 */
+	m_zipr_options.Parse(NULL, NULL);
 	if (m_variant.RequirementMet()) {
 		/* setup the interface to the sql server */
 		BaseObj_t::SetInterface(&m_pqxx_interface);
@@ -106,6 +111,13 @@ void ZiprImpl_t::Init()
 	}
 	plugman = ZiprPluginManager_t(&memory_space, elfiop, m_firp, &m_zipr_options, &final_insn_locations);
 
+	/*
+	 * Parse again now that the plugins registered something.
+	 */
+	if (m_verbose)
+		warn = &cout;
+	m_zipr_options.Parse(error, warn);
+
 	if (!m_zipr_options.RequirementsMet()) {
 		m_zipr_options.PrintUsage(cout);
 		m_error = true;
diff --git a/test/ZiprOptions.cpp b/test/ZiprOptions.cpp
index 6c31a3b..47cd0e6 100644
--- a/test/ZiprOptions.cpp
+++ b/test/ZiprOptions.cpp
@@ -80,7 +80,7 @@ int main(int argc, char *argv[])
 	options.AddNamespace(&global_ns);
 	options.AddNamespace(&local_ns);
 
-	options.Parse(cout);
+	options.Parse(&cout);
 
 	if (!options.RequirementsMet())
 	{
-- 
GitLab