updated build system

This commit is contained in:
Scott E. Graves 2024-10-10 09:57:47 -05:00
parent 9c01d51334
commit fff3dc4685
2 changed files with 22 additions and 23 deletions

View File

@ -30,10 +30,13 @@
namespace {
[[nodiscard]] auto resolve(std::string path) -> std::string {
#if defined(_WIN32)
if (repertory::utils::string::contains(path, "~\\") ||
repertory::utils::string::contains(path, "%")) {
if (repertory::utils::string::contains(path, "~\\")) {
repertory::utils::string::replace(path, "~\\", "%USERPROFILE%\\");
} else if (repertory::utils::string::contains(path, "~/")) {
repertory::utils::string::replace(path, "~/", "%USERPROFILE%\\");
}
if (repertory::utils::string::contains(path, "%")) {
auto size = ::ExpandEnvironmentStringsA(path.c_str(), nullptr, 0);
std::string dest;
@ -43,6 +46,10 @@ namespace {
path = dest.c_str();
}
#else // !defined (_WIN32)
if (repertory::utils::string::contains(path, "~\\")) {
repertory::utils::string::replace(path, "~\\", "~/");
}
if (repertory::utils::string::contains(path, "~/")) {
std::string home{};
auto res =
@ -57,11 +64,11 @@ namespace {
throw std::runtime_error("failed to getpwuid: " + res.reason);
}
return repertory::utils::string::replace(path, "~/", home + "/");
path = repertory::utils::string::replace(path, "~/", home + "/");
}
#endif // defined (_WIN32)
return path;
return finalize(path);
}
} // namespace
@ -72,7 +79,7 @@ auto absolute(std::string_view path) -> std::string {
return abs_path;
}
abs_path = resolve(finalize(abs_path));
abs_path = resolve(abs_path);
#if defined(_WIN32)
if (not utils::string::contains(abs_path, dot)) {
return abs_path;

View File

@ -387,16 +387,7 @@ TEST(utils_path, absolute) {
path = utils::path::absolute(R"(\\server\share)");
EXPECT_STREQ(R"(/server/share)", path.c_str());
auto home_env = utils::get_environment_variable("HOME");
#endif // defined(_WIN32)
auto home = utils::path::absolute(home_env);
path = utils::path::absolute("~/");
EXPECT_STREQ(home.c_str(), path.c_str());
path = utils::path::absolute("~\\");
EXPECT_STREQ(home.c_str(), path.c_str());
}
TEST(utils_path, absolute_can_resolve_path_variables) {
@ -411,19 +402,20 @@ TEST(utils_path, absolute_can_resolve_path_variables) {
static_cast<DWORD>(home.size()));
home = utils::path::absolute(home);
auto expanded_str = utils::path::absolute("%USERPROFILE%");
EXPECT_STREQ(home.c_str(), expanded_str.c_str());
expanded_str = utils::path::absolute("~\\");
EXPECT_STREQ(home.c_str(), expanded_str.c_str());
EXPECT_STREQ((home + home).c_str(), expanded_str.c_str());
EXPECT_STREQ(home.c_str(), utils::path::absolute("%USERPROFILE%").c_str());
#else // !defined(_WIN32)
home = std::getenv("HOME");
home = utils::path::absolute(home);
auto expanded_str = utils::path::absolute("~/");
EXPECT_STREQ(home.c_str(), expanded_str.c_str());
#endif // defined(_WIN32)
auto expanded_str = utils::path::absolute("~\\");
EXPECT_STREQ(home.c_str(), expanded_str.c_str());
expanded_str = utils::path::absolute("~/");
EXPECT_STREQ(home.c_str(), expanded_str.c_str());
expanded_str = utils::path::absolute("~");
EXPECT_STREQ("~", expanded_str.c_str());
}
TEST(utils_path, get_parent_path) {