Project
Loading...
Searching...
No Matches
ConfigParamDiscovery.cxx
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
14#include "Framework/Signpost.h"
16#include <TFile.h>
17#include <TMap.h>
18#include <TObjString.h>
19
20O2_DECLARE_DYNAMIC_LOG(config_parameter_discovery);
21
22namespace o2::framework
23{
24
25std::vector<ConfigParamSpec> ConfigParamDiscovery::discover(ConfigParamRegistry& registry, int argc, char** argv)
26{
27 std::vector<char const*> capabilitiesSpecs = {
28 "O2Framework:DiscoverAODOptionsInCommandLineCapability",
29 "O2Framework:DiscoverMetadataInAODCapability",
30 "O2Framework:DiscoverMetadataInCommandLineCapability",
31 };
32
33 // Load all the requested plugins and discover what we can do.
34 O2_SIGNPOST_ID_GENERATE(sid, config_parameter_discovery);
35 std::vector<LoadablePlugin> plugins;
36 for (auto spec : capabilitiesSpecs) {
37 O2_SIGNPOST_EVENT_EMIT(config_parameter_discovery, sid, "capability", "Parsing Capability plugin: %{public}s", spec);
38 auto morePlugins = PluginManager::parsePluginSpecString(spec);
39 for (auto& extra : morePlugins) {
40 plugins.push_back(extra);
41 }
42 }
43
44 std::vector<Capability> availableCapabilities;
45 std::vector<char const*> configDiscoverySpec = {};
46 PluginManager::loadFromPlugin<Capability, CapabilityPlugin>(plugins, availableCapabilities);
47 for (auto& capability : availableCapabilities) {
48 O2_SIGNPOST_EVENT_EMIT(config_parameter_discovery, sid, "capability", "- Using Capability of : %{public}s",
49 capability.name.c_str());
50
51 if (capability.checkIfNeeded(registry, argc, argv)) {
52 O2_SIGNPOST_EVENT_EMIT(config_parameter_discovery, sid, "capability", "- Required: %{}s",
53 capability.requiredPlugin);
54 configDiscoverySpec.push_back(capability.requiredPlugin);
55 } else {
56 O2_SIGNPOST_EVENT_EMIT(config_parameter_discovery, sid, "capability", "- No requirements added");
57 }
58 }
59
60 std::vector<LoadablePlugin> configDiscoveryPlugins;
61 for (auto spec : configDiscoverySpec) {
62 O2_SIGNPOST_EVENT_EMIT(config_parameter_discovery, sid, "discovery", "Parsing ConfigDiscovery plugin: %{public}s", spec);
63 auto morePlugins = PluginManager::parsePluginSpecString(spec);
64 for (auto& extra : morePlugins) {
65 configDiscoveryPlugins.push_back(extra);
66 }
67 }
68
69 std::vector<ConfigDiscovery> availableConfigDiscovery;
70 PluginManager::loadFromPlugin<ConfigDiscovery, ConfigDiscoveryPlugin>(configDiscoveryPlugins, availableConfigDiscovery);
71 std::vector<ConfigParamSpec> result;
72 for (auto& configDiscovery : availableConfigDiscovery) {
73 O2_SIGNPOST_EVENT_EMIT(config_parameter_discovery, sid, "discovery", "Parsing extra configuration as needed");
74 auto extras = configDiscovery.discover(registry, argc, argv);
75 for (auto& extra : extras) {
76 result.push_back(extra);
77 }
78 registry.loadExtra(extras);
79 }
80 return result;
81}
82
83} // namespace o2::framework
#define O2_DECLARE_DYNAMIC_LOG(name)
Definition Signpost.h:473
#define O2_SIGNPOST_ID_GENERATE(name, log)
Definition Signpost.h:490
#define O2_SIGNPOST_EVENT_EMIT(log, id, name, format,...)
Definition Signpost.h:495
void loadExtra(std::vector< ConfigParamSpec > &extras)
GLuint64EXT * result
Definition glcorearb.h:5662
Defining PrimaryVertex explicitly as messageable.
Definition TFIDInfo.h:20
static std::vector< ConfigParamSpec > discover(ConfigParamRegistry &, int, char **)
static std::vector< LoadablePlugin > parsePluginSpecString(char const *str)
Parse a comma separated list of <library>:<plugin-name> plugin declarations.