SDK: Let DDSEnvironment manage $LD_LIBRARY_PATH

* Remove configurable install prefix
* Add singleton
This commit is contained in:
Dennis Klein 2019-07-19 22:23:13 +02:00 committed by Dennis Klein
parent 5a7bf68c8c
commit 152c8431c6
2 changed files with 22 additions and 22 deletions

View File

@ -20,16 +20,24 @@ namespace mq {
namespace sdk {
// TODO https://github.com/FairRootGroup/DDS/issues/224
auto LoadDDSEnv(const boost::filesystem::path& config_home, const boost::filesystem::path& prefix)
auto LoadDDSEnv(const boost::filesystem::path& config_home)
-> void
{
setenv("DDS_LOCATION", prefix.c_str(), 1);
setenv("DDS_LOCATION", DDSInstallPrefix.c_str(), 1);
if (!config_home.empty()) {
setenv("HOME", config_home.c_str(), 1);
}
std::string path(std::getenv("PATH"));
path = DDSExecutableDir + std::string(":") + path;
setenv("PATH", path.c_str(), 1);
#ifndef __APPLE__
std::string ldVar("LD_LIBRARY_PATH");
std::string ld(std::getenv(ldVar.c_str()));
ld = DDSLibraryDir + std::string(":") + ld;
setenv(ldVar.c_str(), ld.c_str(), 1);
#endif
std::istringstream cmd;
cmd.str("DDS_CFG=`dds-user-defaults --ignore-default-sid -p`\n"
"if [ -z \"$DDS_CFG\" ]; then\n"
@ -41,31 +49,32 @@ auto LoadDDSEnv(const boost::filesystem::path& config_home, const boost::filesys
struct DDSEnvironment::Impl
{
Impl(Path config_home, Path prefix)
: fConfigHome(std::move(config_home))
, fInstallPrefix(std::move(prefix))
explicit Impl(Path config_home)
: fCount()
, fConfigHome(std::move(config_home))
{
LoadDDSEnv(fConfigHome, fInstallPrefix);
LoadDDSEnv(fConfigHome);
if (fConfigHome.empty()) {
fConfigHome = std::getenv("HOME");
}
}
struct Tag {};
friend auto operator<<(std::ostream& os, Tag) -> std::ostream& { return os << "DDSEnvironment"; }
tools::InstanceLimiter<Tag, 1> fCount;
Path fConfigHome;
Path fInstallPrefix;
};
DDSEnvironment::DDSEnvironment(Path config_home, Path prefix)
: fImpl(std::make_shared<Impl>(std::move(config_home), std::move(prefix)))
DDSEnvironment::DDSEnvironment(Path config_home)
: fImpl(std::make_shared<Impl>(std::move(config_home)))
{}
auto DDSEnvironment::GetConfigHome() const -> Path { return fImpl->fConfigHome; }
auto DDSEnvironment::GetInstallPrefix() const -> Path { return fImpl->fInstallPrefix; }
auto operator<<(std::ostream& os, DDSEnvironment env) -> std::ostream&
{
return os << "$DDS_LOCATION: " << env.GetInstallPrefix() << ", "
return os << "$DDS_LOCATION: " << DDSInstallPrefix << ", "
<< "$DDS_CONFIG_HOME: " << env.GetConfigHome() / DDSEnvironment::Path(".DDS");
}

View File

@ -18,14 +18,6 @@ namespace fair {
namespace mq {
namespace sdk {
/**
* @brief Sets up the DDS environment
* @param config_home Path under which DDS creates a ".DDS" runtime directory for configuration and logs
* @param prefix Path where DDS is installed
*/
auto LoadDDSEnv(const boost::filesystem::path& config_home = "", const boost::filesystem::path& prefix = DDSInstallPrefix)
-> void;
/**
* @class DDSEnvironment DDSSession.h <fairmq/sdk/DDSSession.h>
* @brief Sets up the DDS environment (object helper)
@ -36,10 +28,9 @@ class DDSEnvironment
using Path = boost::filesystem::path;
/// @brief See fair::mq::sdk::LoadDDSEnv
explicit DDSEnvironment(Path config_home = "", Path prefix = DDSInstallPrefix);
explicit DDSEnvironment(Path config_home = "");
auto GetConfigHome() const -> Path;
auto GetInstallPrefix() const -> Path;
friend auto operator<<(std::ostream& os, DDSEnvironment env) -> std::ostream&;
private: