diff options
Diffstat (limited to 'src/task.cc')
-rw-r--r-- | src/task.cc | 59 |
1 files changed, 34 insertions, 25 deletions
diff --git a/src/task.cc b/src/task.cc index 8a9eefa..817ee3a 100644 --- a/src/task.cc +++ b/src/task.cc @@ -6,22 +6,25 @@ #include <unistd.h> #include <iostream> -Task::Task(const BuildConfiguration& config) +Task::Task(const ctor::build_configuration& config, const ctor::settings& settings, + const std::string& sourceDir) : config(config) , output_system(config.system) + , settings(settings) + , sourceDir(sourceDir) { } -int Task::registerDepTasks(const std::list<std::shared_ptr<Task>>& tasks) +int Task::registerDepTasks(const std::set<std::shared_ptr<Task>>& tasks) { for(const auto& depStr : depends()) { bool found{false}; for(const auto& task : tasks) { - if(task->target() == depStr) + if(*task == depStr) { - dependsTasks.push_back(task); + dependsTasks.insert(task); found = true; } } @@ -33,16 +36,21 @@ int Task::registerDepTasks(const std::list<std::shared_ptr<Task>>& tasks) } } - return 0; + return registerDepTasksInner(tasks); +} + +bool Task::operator==(const std::string& depStr) +{ + return + name() == depStr || + target() == depStr || + sourceDir + "/" + target() == depStr || + targetFile().string() == depStr + ; } std::string Task::name() const { - // If config name is not set, use target instead. - if(config.name.empty()) - { - return config.target; - } return config.name; } @@ -99,45 +107,46 @@ State Task::state() const return task_state.load(); } -const BuildConfiguration& Task::buildConfig() const +const ctor::build_configuration& Task::buildConfig() const { return config; } -TargetType Task::targetType() const +ctor::target_type Task::targetType() const { return target_type; } -Language Task::sourceLanguage() const +ctor::language Task::sourceLanguage() const { return source_language; } -OutputSystem Task::outputSystem() const +ctor::output_system Task::outputSystem() const { return output_system; } std::string Task::compiler() const { + const auto& c = ctor::get_configuration(); switch(sourceLanguage()) { - case Language::C: + case ctor::language::c: switch(outputSystem()) { - case OutputSystem::Host: - return getConfiguration(cfg::host_cc, "/usr/bin/gcc"); - case OutputSystem::Build: - return getConfiguration(cfg::build_cc, "/usr/bin/gcc"); + case ctor::output_system::host: + return c.get(ctor::cfg::host_cc, "/usr/bin/gcc"); + case ctor::output_system::build: + return c.get(ctor::cfg::build_cc, "/usr/bin/gcc"); } - case Language::Cpp: + case ctor::language::cpp: switch(outputSystem()) { - case OutputSystem::Host: - return getConfiguration(cfg::host_cxx, "/usr/bin/g++"); - case OutputSystem::Build: - return getConfiguration(cfg::build_cxx, "/usr/bin/g++"); + case ctor::output_system::host: + return c.get(ctor::cfg::host_cxx, "/usr/bin/g++"); + case ctor::output_system::build: + return c.get(ctor::cfg::build_cxx, "/usr/bin/g++"); } default: std::cerr << "Unknown CC target type\n"; @@ -146,7 +155,7 @@ std::string Task::compiler() const } } -std::list<std::shared_ptr<Task>> Task::getDependsTasks() +std::set<std::shared_ptr<Task>> Task::getDependsTasks() { return dependsTasks; } |