summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBent Bisballe Nyeng <deva@aasimon.org>2021-06-19 15:41:56 +0200
committerBent Bisballe Nyeng <deva@aasimon.org>2021-06-19 15:41:56 +0200
commit9ae92b4f1d5c24fa9d8d73e6f916b5d6aa01da67 (patch)
tree5f0610eae0a3d65be8d371aaaa1424466c73f63b
parent0931b80defeffb6b36257ec5f279d661c17fe969 (diff)
Fail on missing dependecies and trigger re-build if depends list changes in build configurations.
-rw-r--r--libcppbuild.cc5
-rw-r--r--task.cc12
-rw-r--r--task.h2
-rw-r--r--task_ar.cc13
-rw-r--r--task_ld.cc13
-rw-r--r--task_so.cc13
6 files changed, 52 insertions, 6 deletions
diff --git a/libcppbuild.cc b/libcppbuild.cc
index f575a52..9fcc4d4 100644
--- a/libcppbuild.cc
+++ b/libcppbuild.cc
@@ -248,7 +248,10 @@ int main(int argc, char* argv[])
for(auto task : tasks)
{
- task->registerDepTasks(tasks);
+ if(task->registerDepTasks(tasks))
+ {
+ return 1;
+ }
}
std::list<std::shared_ptr<Task>> dirtyTasks;
diff --git a/task.cc b/task.cc
index 10e9368..e5f11aa 100644
--- a/task.cc
+++ b/task.cc
@@ -8,18 +8,28 @@ Task::Task(const std::vector<std::string>& depends)
{
}
-void Task::registerDepTasks(const std::list<std::shared_ptr<Task>>& tasks)
+int Task::registerDepTasks(const std::list<std::shared_ptr<Task>>& tasks)
{
for(auto const& depStr : dependsStr)
{
+ bool found{false};
for(const auto& task : tasks)
{
if(task->target() == depStr)
{
dependsTasks.push_back(task);
+ found = true;
}
}
+ if(!found)
+ {
+ std::cerr << "Could not find dependency " << depStr << " needed by " <<
+ target() << " target\n";
+ return 1;
+ }
}
+
+ return 0;
}
bool Task::dirty()
diff --git a/task.h b/task.h
index 00b01d2..f7a4758 100644
--- a/task.h
+++ b/task.h
@@ -21,7 +21,7 @@ class Task
public:
Task(const std::vector<std::string>& depends);
- void registerDepTasks(const std::list<std::shared_ptr<Task>>& tasks);
+ int registerDepTasks(const std::list<std::shared_ptr<Task>>& tasks);
bool dirty();
bool ready();
diff --git a/task_ar.cc b/task_ar.cc
index c133875..58223ad 100644
--- a/task_ar.cc
+++ b/task_ar.cc
@@ -178,11 +178,22 @@ std::string TaskAR::flagsString() const
std::string flagsStr;
for(const auto& flag : config.ldflags)
{
- if(!flagsStr.empty())
+ if(flag != config.ldflags[0])
{
flagsStr += " ";
}
flagsStr += flag;
}
+ flagsStr += "\n";
+
+ for(const auto& dep : config.depends)
+ {
+ if(dep != config.depends[0])
+ {
+ flagsStr += " ";
+ }
+ flagsStr += dep;
+ }
+
return flagsStr;
}
diff --git a/task_ld.cc b/task_ld.cc
index db0f955..874ec6d 100644
--- a/task_ld.cc
+++ b/task_ld.cc
@@ -192,11 +192,22 @@ std::string TaskLD::flagsString() const
std::string flagsStr;
for(const auto& flag : config.ldflags)
{
- if(!flagsStr.empty())
+ if(flag != config.ldflags[0])
{
flagsStr += " ";
}
flagsStr += flag;
}
+ flagsStr += "\n";
+
+ for(const auto& dep : config.depends)
+ {
+ if(dep != config.depends[0])
+ {
+ flagsStr += " ";
+ }
+ flagsStr += dep;
+ }
+
return flagsStr;
}
diff --git a/task_so.cc b/task_so.cc
index afe5c32..c484a40 100644
--- a/task_so.cc
+++ b/task_so.cc
@@ -188,11 +188,22 @@ std::string TaskSO::flagsString() const
std::string flagsStr;
for(const auto& flag : config.ldflags)
{
- if(!flagsStr.empty())
+ if(flag != config.ldflags[0])
{
flagsStr += " ";
}
flagsStr += flag;
}
+ flagsStr += "\n";
+
+ for(const auto& dep : config.depends)
+ {
+ if(dep != config.depends[0])
+ {
+ flagsStr += " ";
+ }
+ flagsStr += dep;
+ }
+
return flagsStr;
}