From f645603783c352c1c6916a6df455f4da660cb1a7 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Thu, 17 Dec 2015 01:38:59 +0000 Subject: Improve logic for determining bjam build variant (assumes gcc toolset, which is fine) --- libadhocutil/definedDirs.h | 16 ++++++++++++++-- libadhocutil/unittests/Jamfile.jam | 13 +++++++++++++ libadhocutil/unittests/testDirs.cpp | 18 ++++++++++++++++++ libadhocutil/unittests/testPluginsRuntime.cpp | 4 +--- 4 files changed, 46 insertions(+), 5 deletions(-) create mode 100644 libadhocutil/unittests/testDirs.cpp diff --git a/libadhocutil/definedDirs.h b/libadhocutil/definedDirs.h index b24a1c9..9c1cc84 100644 --- a/libadhocutil/definedDirs.h +++ b/libadhocutil/definedDirs.h @@ -10,9 +10,21 @@ #define XSTR(s) STR(s) #define STR(s) #s -const auto selfExe = boost::filesystem::canonical("/proc/self/exe"); -const auto binDir = selfExe.parent_path(); +namespace AdHoc { + static boost::filesystem::path getBuildVariant(boost::filesystem::path binDir) + { + boost::filesystem::path p; + while (strncmp(p.c_str(), "gcc-", 4)) { + p = binDir.leaf() / p; + binDir = binDir.parent_path(); + } + return p; + } +} +const boost::filesystem::path selfExe = boost::filesystem::canonical("/proc/self/exe"); +const boost::filesystem::path binDir = selfExe.parent_path(); const boost::filesystem::path rootDir(XSTR(ROOT)); +const boost::filesystem::path buildVariant = AdHoc::getBuildVariant(binDir); #endif diff --git a/libadhocutil/unittests/Jamfile.jam b/libadhocutil/unittests/Jamfile.jam index 9f45265..5ea24a8 100644 --- a/libadhocutil/unittests/Jamfile.jam +++ b/libadhocutil/unittests/Jamfile.jam @@ -128,6 +128,19 @@ lib utilTestClasses : boost_utf ; +run + testDirs.cpp + : : : + BOOST_TEST_DYN_LINK + ..//adhocutil + boost_utf + ROOT=\"$(me)\" + boost_filesystem + boost_system + : + testDirs + ; + run testPlugins.cpp : : : diff --git a/libadhocutil/unittests/testDirs.cpp b/libadhocutil/unittests/testDirs.cpp new file mode 100644 index 0000000..f215d49 --- /dev/null +++ b/libadhocutil/unittests/testDirs.cpp @@ -0,0 +1,18 @@ +#define BOOST_TEST_MODULE Dirs +#include + +#include +#include + +BOOST_AUTO_TEST_CASE( iexist ) +{ + BOOST_REQUIRE(boost::filesystem::exists(selfExe)); + BOOST_REQUIRE(selfExe.is_absolute()); + BOOST_REQUIRE_EQUAL("testDirs", selfExe.leaf().string()); + BOOST_REQUIRE_EQUAL("unittests", rootDir.leaf().string()); + BOOST_REQUIRE(boost::filesystem::is_directory(binDir)); + BOOST_REQUIRE_EQUAL("libadhocutil", rootDir.parent_path().leaf().string()); + BOOST_REQUIRE(buildVariant.is_relative()); + BOOST_REQUIRE_EQUAL(selfExe, rootDir / "bin" / "testDirs.test" / buildVariant / "testDirs"); +} + diff --git a/libadhocutil/unittests/testPluginsRuntime.cpp b/libadhocutil/unittests/testPluginsRuntime.cpp index aa1dcf1..9185cdc 100644 --- a/libadhocutil/unittests/testPluginsRuntime.cpp +++ b/libadhocutil/unittests/testPluginsRuntime.cpp @@ -9,9 +9,7 @@ using namespace AdHoc; -auto variant = selfExe.parent_path().leaf(); -auto toolset = selfExe.parent_path().parent_path().leaf(); -auto lib = rootDir / "bin" / toolset / variant / "libutilTestClasses.so"; +auto lib = rootDir / "bin" / buildVariant / "libutilTestClasses.so"; static boost::optional nullResolver(const std::type_info &, const std::string &); static boost::optional badResolver(const std::type_info &, const std::string &); -- cgit v1.2.3