You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by nn...@apache.org on 2014/10/21 02:22:17 UTC
git commit: Added functions to manipulate LD_LIBRARY_PATH to
os::libraries.
Repository: mesos
Updated Branches:
refs/heads/master acb94b203 -> c818fe6e5
Added functions to manipulate LD_LIBRARY_PATH to os::libraries.
Also added a utility function to expand a library name to a filename
by prefixing "lib" and adding the default extension.
Review: https://reviews.apache.org/r/26903
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/c818fe6e
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/c818fe6e
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/c818fe6e
Branch: refs/heads/master
Commit: c818fe6e59b330ea5cc1c4b3064d65bec642712d
Parents: acb94b2
Author: Kapil Arya <ka...@mesosphere.io>
Authored: Mon Oct 20 16:58:07 2014 -0700
Committer: Niklas Q. Nielsen <ni...@mesosphere.io>
Committed: Mon Oct 20 17:21:44 2014 -0700
----------------------------------------------------------------------
.../3rdparty/stout/include/stout/os.hpp | 57 ++++++++++++++++++++
.../3rdparty/stout/tests/os_tests.cpp | 40 ++++++++++++++
2 files changed, 97 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/c818fe6e/3rdparty/libprocess/3rdparty/stout/include/stout/os.hpp
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/3rdparty/stout/include/stout/os.hpp b/3rdparty/libprocess/3rdparty/stout/include/stout/os.hpp
index 63bda7a..5d3cbba 100644
--- a/3rdparty/libprocess/3rdparty/stout/include/stout/os.hpp
+++ b/3rdparty/libprocess/3rdparty/stout/include/stout/os.hpp
@@ -1263,6 +1263,63 @@ inline Try<std::set<pid_t> > pids(Option<pid_t> group, Option<pid_t> session)
return result;
}
+
+namespace libraries {
+
+// Returns the full library name by adding prefix and extension to
+// library name.
+inline std::string expandName(const std::string& libraryName)
+{
+ const char* prefix = "lib";
+ const char* extension =
+#ifdef __linux__
+ ".so";
+#else
+ ".dylib";
+#endif
+
+ return prefix + libraryName + extension;
+}
+
+
+// Returns the current value of LD_LIBRARY_PATH environment variable.
+inline std::string paths()
+{
+ const char* environmentVariable =
+#ifdef __linux__
+ "LD_LIBRARY_PATH";
+#else
+ "DYLD_LIBRARY_PATH";
+#endif
+ return getenv(environmentVariable, false);
+}
+
+
+// Updates the value of LD_LIBRARY_PATH environment variable.
+inline void setPaths(const std::string& newPaths)
+{
+ const char* environmentVariable =
+#ifdef __linux__
+ "LD_LIBRARY_PATH";
+#else
+ "DYLD_LIBRARY_PATH";
+#endif
+ setenv(environmentVariable, newPaths);
+}
+
+
+// Append newPath to the current value of LD_LIBRARY_PATH environment
+// variable.
+inline void appendPaths(const std::string& newPaths)
+{
+ if (paths().empty()) {
+ setPaths(newPaths);
+ } else {
+ setPaths(paths() + ":" + newPaths);
+ }
+}
+
+} // namespace libraries {
} // namespace os {
#endif // __STOUT_OS_HPP__
http://git-wip-us.apache.org/repos/asf/mesos/blob/c818fe6e/3rdparty/libprocess/3rdparty/stout/tests/os_tests.cpp
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/3rdparty/stout/tests/os_tests.cpp b/3rdparty/libprocess/3rdparty/stout/tests/os_tests.cpp
index 02293f2..e9f37df 100644
--- a/3rdparty/libprocess/3rdparty/stout/tests/os_tests.cpp
+++ b/3rdparty/libprocess/3rdparty/stout/tests/os_tests.cpp
@@ -749,3 +749,43 @@ TEST_F(OsTest, user)
EXPECT_SOME(os::su(user.get()));
EXPECT_ERROR(os::su(UUID::random().toString()));
}
+
+
+// Test setting/resetting/appending to LD_LIBRARY_PATH environment
+// variable (DYLD_LIBRARY_PATH on OS X).
+TEST_F(OsTest, Libraries)
+{
+ const std::string path1 = "/tmp/path1";
+ const std::string path2 = "/tmp/path1";
+ std::string ldLibraryPath;
+ const std::string originalLibraryPath = os::libraries::paths();
+
+ // Test setPaths.
+ os::libraries::setPaths(path1);
+ EXPECT_EQ(os::libraries::paths(), path1);
+
+ // Test appendPaths.
+ // 1. With empty LD_LIBRARY_PATH.
+ // 1a. Set LD_LIBRARY_PATH to an empty string.
+ os::libraries::setPaths("");
+ ldLibraryPath = os::libraries::paths();
+ EXPECT_EQ(ldLibraryPath, "");
+
+ // 1b. Now test appendPaths.
+ os::libraries::appendPaths(path1);
+ EXPECT_EQ(os::libraries::paths(), path1);
+
+ // 2. With non-empty LD_LIBRARY_PATH.
+ // 2a. Set LD_LIBRARY_PATH to some non-empty value.
+ os::libraries::setPaths(path2);
+ ldLibraryPath = os::libraries::paths();
+ EXPECT_EQ(ldLibraryPath, path2);
+
+ // 2b. Now test appendPaths.
+ os::libraries::appendPaths(path1);
+ EXPECT_EQ(os::libraries::paths(), path2 + ":" + path1);
+
+ // Reset LD_LIBRARY_PATH.
+ os::libraries::setPaths(originalLibraryPath);
+ EXPECT_EQ(os::libraries::paths(), originalLibraryPath);
+}