From 63046f5681df3babb11e51e01e78e12e2a443ede Mon Sep 17 00:00:00 2001 From: Jan Date: Sun, 17 Nov 2024 22:11:18 +0100 Subject: [PATCH] chore: do not add duplicate paths in LinkerPaths --- src/Linker/LinkerPaths.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/Linker/LinkerPaths.cpp b/src/Linker/LinkerPaths.cpp index 6badddf2..2be5b015 100644 --- a/src/Linker/LinkerPaths.cpp +++ b/src/Linker/LinkerPaths.cpp @@ -12,6 +12,7 @@ #include #include #include +#include namespace fs = std::filesystem; @@ -163,6 +164,7 @@ namespace [[nodiscard]] std::unique_ptr BuildIndependentSearchPaths() const override { SearchPaths searchPaths; + std::unordered_set addedSearchPaths; auto hasSearchPath = false; for (const auto& curTemplate : m_templates) @@ -170,7 +172,7 @@ namespace if (curTemplate.CanRender(INDEPENDENT_MASK)) { auto renderedTemplate = curTemplate.Render(m_bin_dir, m_base_dir, std::string(), std::string()); - if (AddSearchPath(searchPaths, renderedTemplate)) + if (AddSearchPath(addedSearchPaths, searchPaths, renderedTemplate)) hasSearchPath = true; } } @@ -184,6 +186,7 @@ namespace [[nodiscard]] std::unique_ptr BuildSearchPathsSpecificToProject(const std::string& projectName) const override { SearchPaths searchPaths; + std::unordered_set addedSearchPaths; auto hasSearchPath = false; for (const auto& curTemplate : m_templates) @@ -191,7 +194,7 @@ namespace if (!curTemplate.CanRender(INDEPENDENT_MASK) && curTemplate.CanRender(PROJECT_MASK)) { auto renderedTemplate = curTemplate.Render(m_bin_dir, m_base_dir, projectName, std::string()); - if (AddSearchPath(searchPaths, renderedTemplate)) + if (AddSearchPath(addedSearchPaths, searchPaths, renderedTemplate)) hasSearchPath = true; } } @@ -205,6 +208,7 @@ namespace [[nodiscard]] std::unique_ptr BuildSearchPathsSpecificToProjectAndGame(const std::string& projectName, GameId game) const override { SearchPaths searchPaths; + std::unordered_set addedSearchPaths; auto hasSearchPath = false; for (const auto& curTemplate : m_templates) @@ -212,7 +216,7 @@ namespace if (!curTemplate.CanRender(PROJECT_MASK) && curTemplate.CanRender(GAME_MASK)) { auto renderedTemplate = curTemplate.Render(m_bin_dir, m_base_dir, projectName, GameId_Names[static_cast(game)]); - if (AddSearchPath(searchPaths, renderedTemplate)) + if (AddSearchPath(addedSearchPaths, searchPaths, renderedTemplate)) hasSearchPath = true; } } @@ -224,8 +228,13 @@ namespace } private: - bool AddSearchPath(SearchPaths& searchPaths, const std::string& path) const + bool AddSearchPath(std::unordered_set& existingSearchPaths, SearchPaths& searchPaths, const std::string& path) const { + const auto existingSearchPath = existingSearchPaths.find(path); + if (existingSearchPath != existingSearchPaths.end()) + return false; + existingSearchPaths.emplace(path); + if (!fs::is_directory(path)) { std::cout << std::format("Adding {} search path (Not found): {}\n", m_type_name, path);