diff options
-rw-r--r-- | src/configure.cc | 2 | ||||
-rw-r--r-- | src/execute.cc | 9 | ||||
-rw-r--r-- | src/execute.h | 9 | ||||
-rw-r--r-- | src/rebuild.cc | 4 | ||||
-rw-r--r-- | src/task_ar.cc | 2 | ||||
-rw-r--r-- | src/task_cc.cc | 3 | ||||
-rw-r--r-- | src/task_ld.cc | 7 | ||||
-rw-r--r-- | src/task_ld.h | 4 | ||||
-rw-r--r-- | src/task_so.cc | 3 | ||||
-rw-r--r-- | src/tasks.cc | 7 | ||||
-rw-r--r-- | src/tasks.h | 3 | ||||
-rw-r--r-- | src/unittest.cc | 2 | ||||
-rw-r--r-- | test/execute_test.cc | 14 |
13 files changed, 46 insertions, 23 deletions
diff --git a/src/configure.cc b/src/configure.cc index c08ed88..4b2fbf0 100644 --- a/src/configure.cc +++ b/src/configure.cc @@ -915,5 +915,5 @@ int reconfigure(const ctor::settings& global_settings, int argc, char* argv[]) return 0; // this was originally invoked by configure, don't loop } - return execute(argv[0], args); + return execute(settings, argv[0], args); } diff --git a/src/execute.cc b/src/execute.cc index b4013d0..94a3d73 100644 --- a/src/execute.cc +++ b/src/execute.cc @@ -3,6 +3,8 @@ // See accompanying file LICENSE for details. #include "execute.h" +#include "ctor.h" + #include <unistd.h> #include <cstring> #include <sys/types.h> @@ -57,10 +59,11 @@ int parent_waitpid(pid_t pid) extern char **environ; // see 'man environ' -int execute(const std::string& command, +int execute(const ctor::settings& settings, + const std::string& command, const std::vector<std::string>& args, const std::map<std::string, std::string>& env, - bool verbose) + [[maybe_unused]] bool terminate) { std::vector<const char*> argv; argv.push_back(command.data()); @@ -84,7 +87,7 @@ int execute(const std::string& command, cmd += arg; } - if(verbose) + if(settings.verbose) { std::cout << cmd << std::endl; } diff --git a/src/execute.h b/src/execute.h index 336c3ef..4288bb7 100644 --- a/src/execute.h +++ b/src/execute.h @@ -7,7 +7,12 @@ #include <vector> #include <map> -int execute(const std::string& command, +namespace ctor { +struct settings; +}//ctor:: + +int execute(const ctor::settings& settings, + const std::string& command, const std::vector<std::string>& args = {}, const std::map<std::string, std::string>& env = {}, - bool verbose = true); + bool terminate = false); diff --git a/src/rebuild.cc b/src/rebuild.cc index 76fcbef..460bbfb 100644 --- a/src/rebuild.cc +++ b/src/rebuild.cc @@ -225,7 +225,7 @@ bool recompileCheck(const ctor::settings& global_settings, int argc, char* argv[ } } - auto tasks = taskFactory({config}, settings, {}); + auto tasks = taskFactory({config}, settings, {}, true); for(auto task : tasks) { @@ -270,7 +270,7 @@ bool recompileCheck(const ctor::settings& global_settings, int argc, char* argv[ { args.push_back(argv[i]); } - auto ret = execute(argv[0], args); + auto ret = execute(settings, argv[0], args); //if(ret != 0) { exit(ret); diff --git a/src/task_ar.cc b/src/task_ar.cc index 19a65ae..b15ad4e 100644 --- a/src/task_ar.cc +++ b/src/task_ar.cc @@ -120,7 +120,7 @@ int TaskAR::runInner() break; } - return execute(tool, args, {}, settings.verbose > 0); + return execute(settings, tool, args, c.env); } int TaskAR::clean() diff --git a/src/task_cc.cc b/src/task_cc.cc index 4eb07ae..dabeefa 100644 --- a/src/task_cc.cc +++ b/src/task_cc.cc @@ -193,7 +193,8 @@ int TaskCC::runInner() targetFile().lexically_normal().string() << std::endl; } - return execute(compiler(), args, {}, settings.verbose > 0); + const auto& cfg = ctor::get_configuration(); + return execute(settings, compiler(), args, cfg.env); } int TaskCC::clean() diff --git a/src/task_ld.cc b/src/task_ld.cc index b0aa4ae..dc1006a 100644 --- a/src/task_ld.cc +++ b/src/task_ld.cc @@ -15,11 +15,13 @@ TaskLD::TaskLD(const ctor::build_configuration& config, const ctor::settings& settings, const std::string& target, const std::vector<std::string>& objects, - const std::string& sourceDir) + const std::string& sourceDir, + bool is_self) : Task(config, settings, sourceDir) , config(config) , settings(settings) , sourceDir(sourceDir) + , is_self(is_self) { target_type = config.type; output_system = config.system; @@ -125,7 +127,8 @@ int TaskLD::runInner() } auto tool = compiler(); - return execute(tool, args, {}, settings.verbose > 0); + const auto& c = ctor::get_configuration(); + return execute(settings, tool, args, c.env, is_self); } int TaskLD::clean() diff --git a/src/task_ld.h b/src/task_ld.h index dbe7db1..c0e3ebb 100644 --- a/src/task_ld.h +++ b/src/task_ld.h @@ -18,7 +18,8 @@ public: const ctor::settings& settings, const std::string& target, const std::vector<std::string>& objects, - const std::string& _sourceDir); + const std::string& _sourceDir, + bool is_self); virtual ~TaskLD() = default; bool dirtyInner() override; @@ -44,4 +45,5 @@ private: const ctor::build_configuration& config; const ctor::settings& settings; std::string sourceDir; + bool is_self; }; diff --git a/src/task_so.cc b/src/task_so.cc index ba96388..25839c5 100644 --- a/src/task_so.cc +++ b/src/task_so.cc @@ -114,7 +114,8 @@ int TaskSO::runInner() } auto tool = compiler(); - return execute(tool, args, {}, settings.verbose > 0); + const auto& cfg = ctor::get_configuration(); + return execute(settings, tool, args, cfg.env); } int TaskSO::clean() diff --git a/src/tasks.cc b/src/tasks.cc index 61c130b..a4c455b 100644 --- a/src/tasks.cc +++ b/src/tasks.cc @@ -72,7 +72,8 @@ const std::deque<Target>& getTargets(const ctor::settings& settings, std::vector<std::shared_ptr<Task>> taskFactory(const ctor::build_configuration& config, const ctor::settings& settings, - const std::string& sourceDir) + const std::string& sourceDir, + bool is_self) { std::vector<std::shared_ptr<Task>> tasks; @@ -145,7 +146,7 @@ std::vector<std::shared_ptr<Task>> taskFactory(const ctor::build_configuration& case ctor::target_type::executable: case ctor::target_type::unit_test: tasks.push_back(std::make_shared<TaskLD>(config, settings, config.target, - objects, sourceDir)); + objects, sourceDir, is_self)); break; case ctor::target_type::object: @@ -192,7 +193,7 @@ std::vector<std::shared_ptr<Task>> getTasks(const ctor::settings& settings, std::find(std::begin(names), std::end(names), target.config.target) != std::end(names)) { std::vector<std::string> objects; - auto t = taskFactory(target.config, settings, target.path); + auto t = taskFactory(target.config, settings, target.path, false); tasks.insert(tasks.end(), t.begin(), t.end()); } } diff --git a/src/tasks.h b/src/tasks.h index cc34f56..6573784 100644 --- a/src/tasks.h +++ b/src/tasks.h @@ -36,4 +36,5 @@ std::vector<std::shared_ptr<Task>> getTasks(const ctor::settings& settings, //! link target and all its objects files (if any). std::vector<std::shared_ptr<Task>> taskFactory(const ctor::build_configuration& config, const ctor::settings& settings, - const std::string& sourceDir); + const std::string& sourceDir, + bool is_self); diff --git a/src/unittest.cc b/src/unittest.cc index 9e85187..b95a931 100644 --- a/src/unittest.cc +++ b/src/unittest.cc @@ -24,7 +24,7 @@ int runUnitTests(std::vector<std::shared_ptr<Task>>& tasks, name = task->target(); } std::cout << name << ": " << std::flush; - auto ret = execute(task->targetFile(), {}, {}, settings.verbose > 0); + auto ret = execute(settings, task->targetFile().string(), {}, {}); ok &= ret == 0; if(ret == 0) { diff --git a/test/execute_test.cc b/test/execute_test.cc index d5d40c9..4c686bf 100644 --- a/test/execute_test.cc +++ b/test/execute_test.cc @@ -23,20 +23,25 @@ public: void return_value() { + ctor::settings s; auto cur_path = std::filesystem::path(paths::argv_0).parent_path(); std::vector<std::string> paths{{cur_path.string()}}; auto cmd = locate("testprog", paths); uASSERT(!cmd.empty()); - uASSERT_EQUAL(0, execute(cmd, {"retval", "0"}, {}, false)); - uASSERT_EQUAL(1, execute(cmd, {"retval", "1"}, {}, false)); - uASSERT_EQUAL(1, execute("no-such-binary", {}, {}, false)); + auto value = execute(s, cmd, {"retval", "0"}, {}, false); + uASSERT_EQUAL(0, value); + value = execute(s, cmd, {"retval", "1"}, {}, false); + uASSERT_EQUAL(1, value); + value = execute(s, "no-such-binary", {}, {}, false); + uASSERT_EQUAL(1, value); } void env() { using namespace std::string_literals; + ctor::settings s; auto cur_path = std::filesystem::path(paths::argv_0).parent_path(); std::vector<std::string> paths{{cur_path.string()}}; auto cmd = locate("testprog", paths); @@ -53,7 +58,8 @@ public: // Overwrite the exiting LANG var env["LANG"] = "foo"; - uASSERT_EQUAL(0, execute(cmd, {"envdump", tmp.get()}, env, false)); + auto value = execute(s, cmd, {"envdump", tmp.get()}, env, false); + uASSERT_EQUAL(0, value); std::vector<std::string> vars; { |