From f5f62a29c977d1bfb67e7ed7b0a963e3a1fe89ce Mon Sep 17 00:00:00 2001
From: Markus Frank <markus.frank@cern.ch>
Date: Wed, 10 Feb 2016 17:48:28 +0000
Subject: [PATCH] Fix plugin runner to properly accept arguments

---
 UtilityApps/src/plugin_runner.cpp | 17 ++++++-----------
 UtilityApps/src/run_plugin.h      |  3 ++-
 2 files changed, 8 insertions(+), 12 deletions(-)

diff --git a/UtilityApps/src/plugin_runner.cpp b/UtilityApps/src/plugin_runner.cpp
index 29a864873..698f8f99a 100644
--- a/UtilityApps/src/plugin_runner.cpp
+++ b/UtilityApps/src/plugin_runner.cpp
@@ -28,28 +28,19 @@ namespace {
 
 //______________________________________________________________________________
 int main(int argc,char** argv)  {
-  char plugin_runner[64] = "plugin_runner";
-  string plugin;
   Args arguments;
-  vector<const char*> options;
-  options.push_back(plugin_runner);
   for(int i=1; i<argc;++i) {
     if ( argv[i][0]=='-' ) {
       if ( arguments.handle(i,argc,argv) )
         continue;
-      else if ( strncmp(argv[i],"-plugin",2)==0 )
-        plugin = argv[++i];
-      else
-        options.push_back(argv[i]);
     }
     else {
       usage();
     }
   }
-  if ( plugin.empty() )
+  if ( arguments.plugins.empty() )
     usage();
 
-  options.push_back(0);
   LCDD& lcdd = dd4hep_instance();
   // Load compact files if required by plugin
   if ( !arguments.geo_files.empty() )   {
@@ -61,7 +52,11 @@ int main(int argc,char** argv)  {
   // Create volume manager and populate it required
   if ( arguments.volmgr  ) run_plugin(lcdd,"DD4hepVolumeManager",0,0);
   // Execute plugin
-  run_plugin(lcdd,plugin.c_str(),(int)(options.size()-1),(char**)&options[0]);
+  for(size_t i=0; i<arguments.plugins.size(); ++i)   {
+    std::vector<const char*>& plug = arguments.plugins[i];
+    int num_arg = int(plug.size())-2;
+    run_plugin(lcdd,plug[0], num_arg,(char**)&plug[1]);
+  }
   if ( arguments.destroy ) delete &lcdd;
   return 0;
 }
diff --git a/UtilityApps/src/run_plugin.h b/UtilityApps/src/run_plugin.h
index 03c32a783..ca1dd82d4 100644
--- a/UtilityApps/src/run_plugin.h
+++ b/UtilityApps/src/run_plugin.h
@@ -147,10 +147,11 @@ namespace {
         // Need to interprete plugin args here locally.....
         plugins.push_back(std::vector<const char*>());
         plugins.back().push_back(argv[++i]);
-        for(; i<argc; ++i)   {
+        for( ++i; i < argc; ++i )   {
           if ( argv[i][0]=='-' ) { --i; break; }
           plugins.back().push_back(argv[i]);
         }
+        plugins.back().push_back(0);
       }
       else 
         return 0;
-- 
GitLab