1 // See LICENSE for license details.
8 static std::map
<std::string
, std::function
<extension_t
*()>>& extensions()
10 static std::map
<std::string
, std::function
<extension_t
*()>> v
;
14 void register_extension(const char* name
, std::function
<extension_t
*()> f
)
16 extensions()[name
] = f
;
19 std::function
<extension_t
*()> find_extension(const char* name
)
21 if (!extensions().count(name
)) {
22 // try to find extension xyz by loading libxyz.so
23 std::string libname
= std::string("lib") + name
+ ".so";
24 if (!dlopen(libname
.c_str(), RTLD_LAZY
)) {
25 fprintf(stderr
, "couldn't find extension '%s' (or library '%s')\n",
26 name
, libname
.c_str());
29 if (!extensions().count(name
)) {
30 fprintf(stderr
, "couldn't find extension '%s' in shared library '%s'\n",
31 name
, libname
.c_str());
36 return extensions()[name
];