fixed stale dep
Some checks failed
CI / build-test-release (push) Failing after 18m7s

This commit is contained in:
Jorijn van der Graaf 2026-05-19 16:53:24 +02:00
commit e77d17ba46

View file

@ -255,7 +255,7 @@ BuildResult Crafter::Build(Configuration& config, std::unordered_map<fs::path, s
fs::create_directories(outputDir); fs::create_directories(outputDir);
} }
BuildResult buildResult; BuildResult buildResult{};
// glslang #include search paths for every shader compiled in this // glslang #include search paths for every shader compiled in this
// configuration: each transitive (incl. self) buildFiles entry's parent // configuration: each transitive (incl. self) buildFiles entry's parent
@ -931,6 +931,41 @@ BuildResult Crafter::Build(Configuration& config, std::unordered_map<fs::path, s
break; break;
} }
} }
// Also relink if any .o this archive bundles is newer than the
// archive itself. Covers a build that compiled the .o but never
// reached the link step (interrupt, crash, or a source touched
// after compile but before link): on the next run the .cpp is
// already ≤ .o so Implementation/Module Check returns false and
// nothing else would notice the archive is stale.
if (!buildResult.repack) {
auto objNewer = [&](const fs::path& obj) {
std::error_code ec;
auto t = fs::last_write_time(obj, ec);
return !ec && t > consumerMtime;
};
for (const std::unique_ptr<Module>& iface : config.interfaces) {
if (objNewer(buildDir / (iface->path.filename().string() + ".o"))) {
buildResult.repack = true;
break;
}
bool partHit = false;
for (const std::unique_ptr<ModulePartition>& part : iface->partitions) {
if (objNewer(buildDir / (part->path.filename().string() + ".o"))) {
partHit = true;
break;
}
}
if (partHit) { buildResult.repack = true; break; }
}
if (!buildResult.repack) {
for (const Implementation& impl : config.implementations) {
if (objNewer(buildDir / (impl.path.filename().string() + "_impl.o"))) {
buildResult.repack = true;
break;
}
}
}
}
} }
} }