From b74bd9e24e1205b7449404fd05172664b211d82c Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Sun, 29 May 2022 14:55:51 +0200 Subject: Make all task lists std::set instead of std::list to make sure to not contain duplicates. --- src/tasks.cc | 41 +++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) (limited to 'src/tasks.cc') diff --git a/src/tasks.cc b/src/tasks.cc index 8ab296f..8bb8de6 100644 --- a/src/tasks.cc +++ b/src/tasks.cc @@ -5,6 +5,7 @@ #include #include +#include #include #include @@ -76,9 +77,9 @@ const std::deque& getTargets(const Settings& settings, return targets; } -std::list> taskFactory(const BuildConfiguration& config, - const Settings& settings, - const std::string& sourceDir) +std::set> taskFactory(const BuildConfiguration& config, + const Settings& settings, + const std::string& sourceDir) { std::filesystem::path targetFile(config.target); @@ -106,12 +107,12 @@ std::list> taskFactory(const BuildConfiguration& config, } std::vector objects; - std::list> tasks; + std::set> tasks; for(const auto& file : config.sources) { - tasks.emplace_back(std::make_shared(config, settings, - sourceDir, file)); - objects.push_back(tasks.back()->target()); + auto task = std::make_shared(config, settings, sourceDir, file); + tasks.insert(task); + objects.push_back(task->target()); } switch(target_type) @@ -121,8 +122,8 @@ std::list> taskFactory(const BuildConfiguration& config, break; case TargetType::StaticLibrary: - tasks.emplace_back(std::make_shared(config, settings, config.target, - objects, sourceDir)); + tasks.insert(std::make_shared(config, settings, config.target, + objects, sourceDir)); break; #ifndef BOOTSTRAP case TargetType::DynamicLibrary: @@ -132,14 +133,14 @@ std::list> taskFactory(const BuildConfiguration& config, std::cerr << "Dynamic library target must have 'lib' prefix\n"; exit(1); } - tasks.emplace_back(std::make_shared(config, settings, config.target, - objects, sourceDir)); + tasks.insert(std::make_shared(config, settings, config.target, + objects, sourceDir)); break; case TargetType::Executable: case TargetType::UnitTest: - tasks.emplace_back(std::make_shared(config, settings, config.target, - objects, sourceDir)); + tasks.insert(std::make_shared(config, settings, config.target, + objects, sourceDir)); break; case TargetType::Object: @@ -153,8 +154,8 @@ std::list> taskFactory(const BuildConfiguration& config, return tasks; } -std::shared_ptr getNextTask(const std::list>& allTasks, - std::list>& dirtyTasks) +std::shared_ptr getNextTask(const std::set>& allTasks, + std::set>& dirtyTasks) { for(auto dirtyTask = dirtyTasks.begin(); dirtyTask != dirtyTasks.end(); @@ -172,12 +173,12 @@ std::shared_ptr getNextTask(const std::list>& allTas return nullptr; } -std::list> getTasks(const Settings& settings, - const std::vector names, - bool resolve_externals) +std::set> getTasks(const Settings& settings, + const std::vector names, + bool resolve_externals) { auto& targets = getTargets(settings, resolve_externals); - std::list> tasks; + std::set> tasks; for(const auto& target : targets) { if(names.empty() || @@ -185,7 +186,7 @@ std::list> getTasks(const Settings& settings, { std::vector objects; auto t = taskFactory(target.config, settings, target.path); - tasks.insert(tasks.end(), t.begin(), t.end()); + tasks.insert(t.begin(), t.end()); } } -- cgit v1.2.3