summaryrefslogtreecommitdiff
path: root/src/task_fn.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/task_fn.cc')
-rw-r--r--src/task_fn.cc40
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