6 static std::map
<std::string
, std::function
<extension_t
*()>>& extensions()
8 static std::map
<std::string
, std::function
<extension_t
*()>> v
;
12 void register_extension(const char* name
, std::function
<extension_t
*()> f
)
14 extensions()[name
] = f
;
17 std::function
<extension_t
*()> find_extension(const char* name
)
19 if (!extensions().count(name
)) {
20 // try to find extension xyz by loading libxyz.so
21 std::string libname
= std::string("lib") + name
+ ".so";
22 if (!dlopen(libname
.c_str(), RTLD_LAZY
)) {
23 fprintf(stderr
, "couldn't find extension '%s' (or library '%s')\n",
24 name
, libname
.c_str());
27 if (!extensions().count(name
)) {
28 fprintf(stderr
, "couldn't find extension '%s' in shared library '%s'\n",
29 name
, libname
.c_str());
34 return extensions()[name
];