aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--host/include/uhd/utils/paths.hpp3
-rw-r--r--host/lib/utils/paths.cpp29
2 files changed, 30 insertions, 2 deletions
diff --git a/host/include/uhd/utils/paths.hpp b/host/include/uhd/utils/paths.hpp
index 035a4943d..e5b451542 100644
--- a/host/include/uhd/utils/paths.hpp
+++ b/host/include/uhd/utils/paths.hpp
@@ -23,6 +23,9 @@ UHD_API std::string get_tmp_path(void);
//! Get a string representing the system's appdata directory
UHD_API std::string get_app_path(void);
+//! Get a string representing the system's library directory
+UHD_API std::string get_lib_path(void);
+
//! Get a string representing the system's pkg directory
UHD_API std::string get_pkg_path(void);
diff --git a/host/lib/utils/paths.cpp b/host/lib/utils/paths.cpp
index 8fb7a773d..aecdbae80 100644
--- a/host/lib/utils/paths.cpp
+++ b/host/lib/utils/paths.cpp
@@ -11,6 +11,11 @@
#include <uhdlib/utils/paths.hpp>
#include <boost/algorithm/string.hpp>
#include <boost/bind.hpp>
+#include <boost/version.hpp>
+#include <functional>
+#if BOOST_VERSION >= 106100
+# include <boost/dll/runtime_symbol_info.hpp>
+#endif
#include <boost/filesystem.hpp>
#include <boost/format.hpp>
#include <boost/regex.hpp>
@@ -185,11 +190,32 @@ std::string uhd::get_app_path(void)
return uhd::get_tmp_path();
}
+#if BOOST_VERSION >= 106100
+std::string uhd::get_pkg_path(void)
+{
+ fs::path pkg_path = fs::path(uhd::get_lib_path()).parent_path().lexically_normal();
+ return get_env_var("UHD_PKG_PATH", pkg_path.string());
+}
+
+std::string uhd::get_lib_path(void)
+{
+ fs::path runtime_libfile_path = boost::dll::this_line_location();
+ return runtime_libfile_path.remove_filename().string();
+}
+#else
std::string uhd::get_pkg_path(void)
{
return get_env_var("UHD_PKG_PATH", UHD_PKG_PATH);
}
+std::string uhd::get_lib_path(void)
+{
+ fs::path lib_path = fs::path(uhd::get_pkg_path()) / UHD_LIB_DIR;
+ return lib_path.string();
+}
+#endif
+
+
std::vector<fs::path> uhd::get_module_paths(void)
{
std::vector<fs::path> paths;
@@ -390,8 +416,7 @@ std::string uhd::find_image_path(
std::string uhd::find_utility(const std::string& name)
{
- return fs::path(fs::path(uhd::get_pkg_path()) / UHD_LIB_DIR / "uhd" / "utils" / name)
- .string();
+ return fs::path(fs::path(uhd::get_lib_path()) / "uhd" / "utils" / name).string();
}
std::string uhd::print_utility_error(const std::string& name, const std::string& args)