26 #ifndef ELEMENTSKERNEL_ELEMENTSKERNEL_MAIN_H_ 27 #define ELEMENTSKERNEL_ELEMENTSKERNEL_MAIN_H_ 31 #include <log4cpp/Priority.hh> 38 #include "ThisProject.h" 39 #include "ThisElementsModule.h" 41 #ifndef ELEMENTS_DEFAULT_LOGLEVEL 42 # define ELEMENTS_DEFAULT_LOGLEVEL DEBUG 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} 67 #define CREATE_MANAGER(ELEMENTS_PROGRAM_NAME, MANAGER) \ 68 CREATE_MANAGER_WITH_ARGS(MANAGER, ELEMENTS_PROGRAM_NAME, ) 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[]) \ 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); \ 113 #define MAIN_FOR(ELEMENTS_PROGRAM_NAME) \ 114 MAIN_FOR_WITH_ARGS(ELEMENTS_PROGRAM_NAME, ) 116 #endif // ELEMENTSKERNEL_ELEMENTSKERNEL_MAIN_H_ 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