46 #ifndef OME_COMMON_MODULE_H 47 #define OME_COMMON_MODULE_H 49 #include <boost/filesystem/operations.hpp> 50 #include <boost/filesystem/path.hpp> 52 #include <ome/common/config.h> 76 const boost::filesystem::path&
150 Module(
const std::string& name,
151 const std::string& envvar,
152 const std::string& module_envvar,
153 const std::string& root_envvar,
154 const boost::filesystem::path& abspath,
155 const boost::filesystem::path& relpath,
156 const boost::filesystem::path& install_prefix,
157 const boost::filesystem::path& shlibpath,
193 const std::string& envvar,
194 const std::string& module_envvar,
195 const std::string& root_envvar,
196 const boost::filesystem::path& abspath,
197 const boost::filesystem::path& relpath,
198 const boost::filesystem::path& install_prefix,
199 const boost::filesystem::path& shlibpath,
214 #ifdef OME_COMMON_MODULE_INTROSPECTION 216 #ifdef OME_HAVE_DLADDR 218 # define _GNU_SOURCE 1 221 #endif // OME_HAVE_DLADDR 224 # include <windows.h> 230 #ifdef OME_HAVE_DLADDR 233 __attribute__((constructor))
237 if(!dladdr(reinterpret_cast<void *>(find_module), &this_module))
239 this_module.dli_fname = 0;
243 boost::filesystem::path
246 if (this_module.dli_fname)
247 return canonical(boost::filesystem::path(this_module.dli_fname));
248 return boost::filesystem::path();
254 static bool found_module =
false;
255 static HMODULE this_module;
259 if (!GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS |
260 GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
261 reinterpret_cast<LPCWSTR>(&find_module),
271 boost::filesystem::path
274 HMODULE this_module = find_module();
277 WCHAR win_wide_path[MAX_PATH];
278 GetModuleFileNameW(this_module, win_wide_path,
sizeof(win_wide_path));
279 return boost::filesystem::path(win_wide_path);
281 return boost::filesystem::path();
283 #else // No introspection available 284 boost::filesystem::path
287 return boost::filesystem::path();
291 #endif // OME_COMMON_MODULE_INTROSPECTION 293 #endif // OME_COMMON_MODULE_H boost::filesystem::path canonical(const boost::filesystem::path &p, const boost::filesystem::path &base=boost::filesystem::current_path(), boost::system::error_code *ec=0)
Get a canonical path.
Definition: filesystem.h:107
boost::filesystem::path realpath
The detected path (used to cache search result).
Definition: module.h:127
std::string root_envvar
Name of the environment variable used to specify the installation root.
Definition: module.h:116
std::string name
Name of the path, e.g. "bin" or "ome-xml-schema".
Definition: module.h:170
boost::filesystem::path abspath
Absolute path (used when configured to use an absolute install path).
Definition: module.h:119
const fs::path & module_runtime_path(const std::string &dtype)
Get the runtime installation prefix path for a module.
Definition: module.cpp:373
boost::filesystem::path shlibpath
Shared library path (used for relocatable installs).
Definition: module.h:125
std::string name
Name of the path, e.g. "bin" or "ome-xml-schema".
Definition: module.h:107
boost::filesystem::path relpath
Relative path (used for relocatable installs).
Definition: module.h:121
Module(const std::string &name, const std::string &envvar, const std::string &module_envvar, const std::string &root_envvar, const boost::filesystem::path &abspath, const boost::filesystem::path &relpath, const boost::filesystem::path &install_prefix, const boost::filesystem::path &shlibpath, boost::filesystem::path(*module_path)())
Constructor.
Definition: module.cpp:274
bool registered
Is the path registered in the path map?
Definition: module.h:172
Boost.Filesystem compatibility.
Open Microscopy Environment C++.
Definition: base64.h:48
A run-time path for a given module.
Definition: module.h:104
boost::filesystem::path(* module_path)()
Function to obtain the absolute path of the module providing the path (from the shared library or DLL...
Definition: module.h:132
std::string module_envvar
Name of the environment variable used to specify the module installation root.
Definition: module.h:113
std::string envvar
Name of the environment variable used to override the autodetected path.
Definition: module.h:110
Register a module to make it available to module_runtime_path().
Definition: module.h:167
boost::filesystem::path install_prefix
Absolute installation path (used for non-relocatable installs).
Definition: module.h:123
void register_module_paths()
Register OME-Common module paths.
Definition: module.cpp:490