Elements  5.8
A C++ base framework for the Euclid Software.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Main.h
Go to the documentation of this file.
1 
26 #ifndef ELEMENTSKERNEL_ELEMENTSKERNEL_MAIN_H_
27 #define ELEMENTSKERNEL_ELEMENTSKERNEL_MAIN_H_
28 
29 #include <exception> // for set_terminate
30 #include <memory> // for unique_ptr
31 #include <log4cpp/Priority.hh>
32 
33 #include "ElementsKernel/Exit.h" // for ExitCode
34 #include "ElementsKernel/ProgramManager.h" // for ProgramManager
35 #include "ElementsKernel/Export.h" // for ELEMENTS_API
36 #include "ElementsKernel/Unused.h" // for ELEMENTS_UNUSED
37 
38 #include "ThisProject.h"
39 #include "ThisElementsModule.h"
40 
41 #ifndef ELEMENTS_DEFAULT_LOGLEVEL
42 # define ELEMENTS_DEFAULT_LOGLEVEL DEBUG
43 #endif
44 
52 #define CREATE_MANAGER_WITH_ARGS(MANAGER, ELEMENTS_PROGRAM, ...) \
53  Elements::ProgramManager MANAGER {std::unique_ptr<Elements::Program>{new ELEMENTS_PROGRAM{__VA_ARGS__}}, \
54  THIS_PROJECT_VERSION_STRING, THIS_PROJECT_NAME_STRING, \
55  THIS_PROJECT_VCS_VERSION, \
56  THIS_MODULE_VERSION_STRING, THIS_MODULE_NAME_STRING, \
57  THIS_PROJECT_SEARCH_DIRS, \
58  log4cpp::Priority::ELEMENTS_DEFAULT_LOGLEVEL}
59 
67 #define CREATE_MANAGER(ELEMENTS_PROGRAM_NAME, MANAGER) \
68  CREATE_MANAGER_WITH_ARGS(MANAGER, ELEMENTS_PROGRAM_NAME, )
69 
87 #define MAIN_FOR_WITH_ARGS(ELEMENTS_PROGRAM, ...) \
88  ELEMENTS_UNUSED const auto installed = {std::set_terminate(&Elements::ProgramManager::onTerminate)}; \
89  ELEMENTS_API int main(int argc, char* argv[]) \
90  { \
91  CREATE_MANAGER_WITH_ARGS(manager, ELEMENTS_PROGRAM, __VA_ARGS__); \
92  Elements::ExitCode exit_code = manager.run(argc, argv); \
93  return static_cast<Elements::ExitCodeType>(exit_code); \
94  }
95 
113 #define MAIN_FOR(ELEMENTS_PROGRAM_NAME) \
114  MAIN_FOR_WITH_ARGS(ELEMENTS_PROGRAM_NAME, )
115 
116 #endif // ELEMENTSKERNEL_ELEMENTSKERNEL_MAIN_H_
117 
Macro to silence unused variables warnings from the compiler.
defines the macros to be used for explicit export of the symbols
define a list of standard exit codes for executables