From a240824706372728d4e8b34a17645c4e2f51ea5d Mon Sep 17 00:00:00 2001 From: Jan Date: Sun, 17 Nov 2024 19:05:57 +0100 Subject: [PATCH] chore: normalize paths before making use of them in LinkerPaths --- src/Linker/LinkerPaths.cpp | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/src/Linker/LinkerPaths.cpp b/src/Linker/LinkerPaths.cpp index 660355a4..6badddf2 100644 --- a/src/Linker/LinkerPaths.cpp +++ b/src/Linker/LinkerPaths.cpp @@ -119,7 +119,7 @@ namespace ss << m_parts[parameterIndex + 1]; } - return ss.str(); + return fs::path(ss.str()).make_preferred().string(); } [[nodiscard]] bool CanRender(const std::underlying_type_t availableParameters) const @@ -142,10 +142,10 @@ namespace | static_cast(PathTemplateParameterType::PROJECT) | static_cast(PathTemplateParameterType::GAME); public: - LinkerSearchPathBuilder(const char* typeName, const std::string& binDir, const std::string& baseDir) + LinkerSearchPathBuilder(const char* typeName, std::string binDir, std::string baseDir) : m_type_name(typeName), - m_bin_dir(binDir), - m_base_dir(baseDir) + m_bin_dir(std::move(binDir)), + m_base_dir(std::move(baseDir)) { } @@ -239,8 +239,8 @@ namespace const char* m_type_name; std::vector m_templates; - const std::string& m_bin_dir; - const std::string& m_base_dir; + std::string m_bin_dir; + std::string m_base_dir; }; class LinkerPaths final : public ILinkerPaths @@ -301,23 +301,26 @@ namespace std::unique_ptr ILinkerPaths::FromArgs(const LinkerArgs& args) { - LinkerSearchPathBuilder assetSearchPaths("asset", args.m_bin_folder, args.m_base_folder); + std::string normalizedBinPath = fs::canonical(args.m_bin_folder).make_preferred().string(); + std::string normalizedBasePath = fs::canonical(args.m_base_folder).make_preferred().string(); + + LinkerSearchPathBuilder assetSearchPaths("asset", normalizedBinPath, normalizedBasePath); assetSearchPaths.BuildFromArgs(args.m_asset_search_paths); - LinkerSearchPathBuilder gdtSearchPaths("gdt", args.m_bin_folder, args.m_base_folder); + LinkerSearchPathBuilder gdtSearchPaths("gdt", normalizedBinPath, normalizedBasePath); gdtSearchPaths.BuildFromArgs(args.m_gdt_search_paths); - LinkerSearchPathBuilder sourceSearchPaths("source", args.m_bin_folder, args.m_base_folder); + LinkerSearchPathBuilder sourceSearchPaths("source", normalizedBinPath, normalizedBasePath); sourceSearchPaths.BuildFromArgs(args.m_source_search_paths); LinkerPathTemplate cacheTemplate; - cacheTemplate.CreateFromString(args.DEFAULT_CACHE_FOLDER); + cacheTemplate.CreateFromString(LinkerArgs::DEFAULT_CACHE_FOLDER); LinkerPathTemplate outTemplate; outTemplate.CreateFromString(args.m_out_folder); - return std::make_unique(args.m_bin_folder, - args.m_base_folder, + return std::make_unique(std::move(normalizedBinPath), + std::move(normalizedBasePath), std::move(assetSearchPaths), std::move(gdtSearchPaths), std::move(sourceSearchPaths),