Elements
6.2
A C++ base framework for the Euclid Software.
|
Class for managing all Elements programs. More...
#include <ProgramManager.h>
Public Member Functions | |
ProgramManager (std::unique_ptr< Program > program_ptr, const std::string &parent_project_version="", const std::string &parent_project_name="", const std::string &parent_project_vcs_version="", const std::string &parent_module_version="", const std::string &parent_module_name="", const std::vector< std::string > &search_dirs={}, const log4cpp::Priority::Value &elements_loglevel=log4cpp::Priority::DEBUG) | |
Constructor. More... | |
virtual | ~ProgramManager () |
Destructor. More... | |
ExitCode | run (int argc, char *argv[]) |
This is the public entry point, i.e., the only method called from the main. More... | |
std::string | getVersion () const |
This function returns the version of the program computed at compile time. This is the same as the project version that contains the program. More... | |
Static Public Member Functions | |
static void | onTerminate () noexcept |
This is the set_terminate handler that is used in the MAIN_FOR macro. More... | |
Private Member Functions | |
const Path::Item & | getProgramPath () const |
Getter. More... | |
const Path::Item & | getProgramName () const |
Getter. More... | |
void | setup (int argc, char *argv[]) |
Program setup taking care of command line options and logging initialization. More... | |
void | tearDown (const ExitCode &) |
const Program::VariablesMap | getProgramOptions (int argc, char *argv[]) |
Get the program options from the command line into thevariables_map. More... | |
void | logHeader (std::string program_name) const |
Log Header. More... | |
void | logFooter (std::string program_name) const |
Log Footer. More... | |
void | logAllOptions () const |
Log all program options. More... | |
void | logTheEnvironment () const |
Log the program environment. More... | |
void | bootstrapEnvironment (char *arg0) |
Bootstrap the Environment from the executable location and the install path computed at install time. More... | |
template<class charT > | |
void | checkCommandLineOptions (const boost::program_options::basic_parsed_options< charT > &cmd_line_options) |
check the explicit command line arguments. For the moment, it only checks if the configuration file being passed does exist. It exits with ExitCode::CONFIG if the file cannot be found. More... | |
Static Private Member Functions | |
static const Path::Item | getDefaultConfigFile (const Path::Item &program_name, const std::string &module_name="") |
Get a default configuration file name and path, to be used if not provided as a command line option. More... | |
static const Path::Item | setProgramName (char *arg0) |
Strip the path from argv[0] to set the program name. More... | |
static const Path::Item | setProgramPath (char *arg0) |
Strip the name from argv[0] to set the program path. More... | |
Private Attributes | |
Program::VariablesMap | m_variables_map {} |
Path::Item | m_program_name |
Path::Item | m_program_path |
std::unique_ptr< Program > | m_program_ptr |
std::string | m_parent_project_version |
std::string | m_parent_project_name |
std::string | m_parent_project_vcs_version |
std::string | m_parent_module_version |
std::string | m_parent_module_name |
std::vector< std::string > | m_search_dirs |
Environment | m_env |
log4cpp::Priority::Value | m_elements_loglevel |
Class for managing all Elements programs.
This base class offers solutions for the common needs of all Elements programs, such as those dealing with program options and logging.
Definition at line 55 of file ProgramManager.h.
|
explicit |
Constructor.
Definition at line 68 of file ProgramManager.cpp.
|
virtual |
Destructor.
Definition at line 483 of file ProgramManager.cpp.
|
private |
Bootstrap the Environment from the executable location and the install path computed at install time.
Definition at line 387 of file ProgramManager.cpp.
References std::vector< T >::begin(), std::vector< T >::cbegin(), std::vector< T >::cend(), std::vector< T >::insert(), Elements::Kernel::Path::joinPath(), m_env, m_program_name, m_program_path, m_search_dirs, Elements::Kernel::Path::multiPathAppend(), Elements::Kernel::Path::PATH_SEP, Elements::Kernel::Units::s, setProgramName(), setProgramPath(), std::vector< T >::size(), Elements::Kernel::Path::SUFFIXES, std::transform(), and Elements::Kernel::Path::VARIABLE.
Referenced by setup().
|
private |
check the explicit command line arguments. For the moment, it only checks if the configuration file being passed does exist. It exits with ExitCode::CONFIG if the file cannot be found.
Definition at line 140 of file ProgramManager.cpp.
References Elements::CONFIG, and Elements::USAGE.
Referenced by getProgramOptions().
|
staticprivate |
Get a default configuration file name and path, to be used if not provided as a command line option.
Get default config file.
Definition at line 95 of file ProgramManager.cpp.
References std::string::empty(), Elements::Kernel::getConfigurationLocations(), Elements::Kernel::getConfigurationPath(), and Elements::Examples::log.
Referenced by getProgramOptions().
|
private |
Getter.
Definition at line 86 of file ProgramManager.cpp.
References m_program_name.
Referenced by getProgramOptions().
|
private |
Get the program options from the command line into thevariables_map.
Definition at line 162 of file ProgramManager.cpp.
References checkCommandLineOptions(), Elements::Kernel::Units::e, std::exit(), getDefaultConfigFile(), getProgramName(), getVersion(), m_parent_module_name, m_program_ptr, and Elements::OK.
Referenced by setup().
|
private |
Getter.
Definition at line 82 of file ProgramManager.cpp.
References m_program_path.
string Elements::ProgramManager::getVersion | ( | ) | const |
This function returns the version of the program computed at compile time. This is the same as the project version that contains the program.
Definition at line 476 of file ProgramManager.cpp.
References m_parent_project_name, and m_parent_project_vcs_version.
Referenced by getProgramOptions().
|
private |
Log all program options.
Definition at line 301 of file ProgramManager.cpp.
References Elements::Examples::log, m_elements_loglevel, and m_variables_map.
Referenced by setup().
|
private |
Log Footer.
Definition at line 291 of file ProgramManager.cpp.
References Elements::Examples::log, and m_elements_loglevel.
Referenced by tearDown().
|
private |
Log Header.
Definition at line 281 of file ProgramManager.cpp.
References Elements::Examples::log, m_elements_loglevel, m_program_name, and m_program_path.
Referenced by setup().
|
private |
Log the program environment.
Definition at line 372 of file ProgramManager.cpp.
References Elements::Examples::log, m_env, and Elements::Kernel::Path::VARIABLE.
Referenced by setup().
|
staticnoexcept |
This is the set_terminate handler that is used in the MAIN_FOR macro.
Definition at line 485 of file ProgramManager.cpp.
References std::_Exit(), Elements::System::backTrace(), std::current_exception(), Elements::Exception::exitCode(), Elements::Examples::log, Elements::NOT_OK, std::rethrow_exception(), std::exception::what(), and Elements::Exception::what().
ExitCode Elements::ProgramManager::run | ( | int | argc, |
char * | argv[] | ||
) |
This is the public entry point, i.e., the only method called from the main.
argc | Command line argument number |
argv | Command line arguments |
Definition at line 465 of file ProgramManager.cpp.
References m_program_ptr, m_variables_map, setup(), and tearDown().
|
staticprivate |
Strip the path from argv[0] to set the program name.
arg0 | The first element of the command line, i.e., argv[0] |
Definition at line 125 of file ProgramManager.cpp.
References Elements::System::getExecutablePath().
Referenced by bootstrapEnvironment().
|
staticprivate |
Strip the name from argv[0] to set the program path.
arg0 | The first element of the command line, i.e., argv[0] |
Definition at line 132 of file ProgramManager.cpp.
References Elements::System::getExecutablePath().
Referenced by bootstrapEnvironment().
|
private |
Program setup taking care of command line options and logging initialization.
Definition at line 419 of file ProgramManager.cpp.
References std::_Exit(), bootstrapEnvironment(), Elements::CONFIG, Elements::Kernel::Units::e, getProgramOptions(), Elements::Examples::log, logAllOptions(), logHeader(), logTheEnvironment(), m_program_name, m_variables_map, Elements::Logging::setLevel(), and Elements::Logging::setLogFile().
Referenced by run().
|
private |
Definition at line 457 of file ProgramManager.cpp.
References Elements::Examples::log, logFooter(), and m_program_name.
Referenced by run().
|
private |
default info level for the Elements internal logging messages
Definition at line 272 of file ProgramManager.h.
Referenced by logAllOptions(), logFooter(), and logHeader().
|
private |
Local environment of the executable
Definition at line 267 of file ProgramManager.h.
Referenced by bootstrapEnvironment(), and logTheEnvironment().
|
private |
Name of the parent project.
Definition at line 254 of file ProgramManager.h.
Referenced by getProgramOptions().
|
private |
Version of the parent Elements module
Definition at line 249 of file ProgramManager.h.
|
private |
Name of the parent project. To avoid ambiguities and because a module can be moved from one project to another, the full version of the program will look like
m_parent_project_version [m_parent_project_name]
Definition at line 238 of file ProgramManager.h.
Referenced by getVersion().
|
private |
Internal version of the program. By convention, it is the same as the VCS version of the parent project
Definition at line 244 of file ProgramManager.h.
Referenced by getVersion().
|
private |
Internal version of the project
Definition at line 229 of file ProgramManager.h.
|
private |
Name of the executable (from argv[0])
Definition at line 211 of file ProgramManager.h.
Referenced by bootstrapEnvironment(), getProgramName(), logHeader(), setup(), and tearDown().
|
private |
Path of the executable (from argv[0])
Definition at line 216 of file ProgramManager.h.
Referenced by bootstrapEnvironment(), getProgramPath(), and logHeader().
|
private |
Pointer to a program interface, which provides two methods defineSpecificProgramOption() mainMethod()
Definition at line 224 of file ProgramManager.h.
Referenced by getProgramOptions(), and run().
|
private |
List of directories needed to update the runtime search environment (PATH, LD_LIBRARY_PATH, ELEMENTS_CONF_PATH, and ELEMENTS_AUX_PATH). This list contains the install locations of all the dependent projects.
Definition at line 262 of file ProgramManager.h.
Referenced by bootstrapEnvironment().
|
private |
This is the BOOST program options variable_map used to store all program options. It is similar to a std::map but the element can be of different types. See the pseudoMain() in ElementsExamples/src/program/Program.cpp to see how to retrieve options from this map.
Definition at line 206 of file ProgramManager.h.
Referenced by logAllOptions(), run(), and setup().