diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/build.cc | 2 | ||||
| -rw-r--r-- | src/ctor.h | 1 | ||||
| -rw-r--r-- | src/execute.cc | 5 | ||||
| -rw-r--r-- | src/libctor.cc | 7 | ||||
| -rw-r--r-- | src/tasks.cc | 5 | ||||
| -rw-r--r-- | src/tasks.h | 3 | 
6 files changed, 18 insertions, 5 deletions
| diff --git a/src/build.cc b/src/build.cc index a31f6a5..5995fb7 100644 --- a/src/build.cc +++ b/src/build.cc @@ -65,7 +65,7 @@ int build(const ctor::settings& settings,  				break;  			} -			auto task = getNextTask(all_tasks, dirtyTasks); +			auto task = getNextTask(settings, all_tasks, dirtyTasks);  			if(task == nullptr)  			{  				if(processes.empty() && !dirtyTasks.empty()) @@ -209,6 +209,7 @@ struct settings  	std::string builddir{"build"};  	std::size_t parallel_processes{1};  	int verbose{0}; // -1: completely silent, 0: normal, 1: verbose, ... +	bool dry_run{false};  };  struct build_configuration; diff --git a/src/execute.cc b/src/execute.cc index ad6c2a2..c050732 100644 --- a/src/execute.cc +++ b/src/execute.cc @@ -107,7 +107,10 @@ int execute(const ctor::settings& settings,  		{  			envmap.insert(key + "=" + value);  		} - +		if(settings.dry_run) +		{ +			_exit(0); +		}  		auto [_, envv] = envmap.get();  		execve(command.data(), const_cast<char* const *>(argv.data()),  		       const_cast<char* const *>(envv)); diff --git a/src/libctor.cc b/src/libctor.cc index aaf17c9..3bfa041 100644 --- a/src/libctor.cc +++ b/src/libctor.cc @@ -132,6 +132,13 @@ int main(int argc, char* argv[])  		        return 0;  	        }); +	opt.add("dry-run", no_argument, 'n', +	        "Print the commands that would be executed, but do not execute them.", +	        [&]() { +		        settings.dry_run = true; +		        return 0; +	        }); +  	opt.add("configure-cmd", no_argument, key++,  	        "Print commandline for last configure.",  	        [&]() { diff --git a/src/tasks.cc b/src/tasks.cc index 2f9e47a..e853470 100644 --- a/src/tasks.cc +++ b/src/tasks.cc @@ -170,7 +170,8 @@ std::vector<std::shared_ptr<Task>> taskFactory(const ctor::build_configuration&  	return tasks;  } -std::shared_ptr<Task> getNextTask([[maybe_unused]]const std::vector<std::shared_ptr<Task>>& allTasks, +std::shared_ptr<Task> getNextTask([[maybe_unused]]const ctor::settings& settings, +                                  [[maybe_unused]]const std::vector<std::shared_ptr<Task>>& allTasks,                                    std::vector<std::shared_ptr<Task>>& dirtyTasks)  {  	for(auto dirtyTask = dirtyTasks.begin(); @@ -179,7 +180,7 @@ std::shared_ptr<Task> getNextTask([[maybe_unused]]const std::vector<std::shared_  	{  		auto task = *dirtyTask;  		//std::cout << "Examining target " << (*dirtyTask)->target() << "\n"; -		if(task->ready()) +		if(task->ready() || settings.dry_run)  		{  			dirtyTasks.erase(dirtyTask);  			return task; diff --git a/src/tasks.h b/src/tasks.h index 6573784..97fc84d 100644 --- a/src/tasks.h +++ b/src/tasks.h @@ -23,7 +23,8 @@ const std::deque<Target>& getTargets(const ctor::settings& settings,  //! fulfilled.  //! The returned task is removed from the dirty list.  //! Return nullptr if no dirty task is ready. -std::shared_ptr<Task> getNextTask(const std::vector<std::shared_ptr<Task>>& allTasks, +std::shared_ptr<Task> getNextTask(const ctor::settings& settings, +                                  const std::vector<std::shared_ptr<Task>>& allTasks,                                    std::vector<std::shared_ptr<Task>>& dirtyTasks);  //! Get list of tasks filtered by name including each of their direct | 
