diff options
Diffstat (limited to 'src/task_fn.cc')
| -rw-r--r-- | src/task_fn.cc | 40 |
1 files changed, 24 insertions, 16 deletions
diff --git a/src/task_fn.cc b/src/task_fn.cc index ab00fae..ebfdac6 100644 --- a/src/task_fn.cc +++ b/src/task_fn.cc @@ -7,23 +7,24 @@ #include <fstream> #include <cassert> -#include "libctor.h" +#include "ctor.h" #include "execute.h" #include "util.h" -TaskFn::TaskFn(const BuildConfiguration& config, const Settings& settings, - const std::string& sourceDir, const Source& source) - : Task(config, settings, sourceDir) - , config(config) - , settings(settings) +TaskFn::TaskFn(const ctor::build_configuration& config_, const ctor::settings& settings_, + const std::string& sourceDir_, const ctor::source& source) + : Task(config_, settings_, sourceDir_) + , sourceFile(sourceDir_) + , config(config_) + , settings(settings_) { - sourceFile = sourceDir; sourceFile /= source.file; std::filesystem::create_directories(std::filesystem::path(settings.builddir) / sourceFile.parent_path()); target_type = config.type; source_language = source.language; + std::filesystem::path base = sourceFile.parent_path(); if(source.output.empty()) { @@ -31,7 +32,7 @@ TaskFn::TaskFn(const BuildConfiguration& config, const Settings& settings, exit(1); } - _targetFile = source.output; + _targetFile = base / source.output; } bool TaskFn::dirtyInner() @@ -68,15 +69,22 @@ int TaskFn::runInner() if(settings.verbose >= 0) { - std::cout << "Fn" << " " << - sourceFile.lexically_normal().string() << " => " << - targetFile().lexically_normal().string() << "\n"; + std::string output = "Fn " + + sourceFile.lexically_normal().string() + " => " + + targetFile().lexically_normal().string() + '\n'; + std::cout << output << std::flush; } - return config.function(sourceFile.string(), - targetFile().string(), - config, - settings); + auto res = config.function(sourceFile.string(), + targetFile().string(), + config, + settings); + if(res != 0) + { + std::filesystem::remove(targetFile()); + } + + return res; } int TaskFn::clean() @@ -97,7 +105,7 @@ std::vector<std::string> TaskFn::depends() const std::string TaskFn::target() const { - return _targetFile; + return _targetFile.string(); } std::filesystem::path TaskFn::targetFile() const |
