summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBent Bisballe Nyeng <deva@aasimon.org>2026-01-14 10:49:18 +0100
committerBent Bisballe Nyeng <deva@aasimon.org>2026-01-14 11:07:54 +0100
commit13b8ea3b4dc6b63f4b77fc0e6f254a2ce9ca7389 (patch)
treec881c4b6bcf0215c6027bc0c0559c00e721d8454
parentfa99825fa800f0faf4a6e6b1d639b261c7aa43c9 (diff)
Only overwrite config.h if the contents changed - avoiding unnecessary rebuilds of project sorces that includes config.h.lazy_config_generation
-rw-r--r--src/configure.cc29
1 files changed, 22 insertions, 7 deletions
diff --git a/src/configure.cc b/src/configure.cc
index 910b878..0755d42 100644
--- a/src/configure.cc
+++ b/src/configure.cc
@@ -6,6 +6,7 @@
#include <iostream>
#include <filesystem>
#include <fstream>
+#include <sstream>
#include <optional>
#include <span>
#include <cstring>
@@ -746,9 +747,8 @@ int regenerateCache(ctor::settings& settings,
ctor::conf_values[ctor::cfg::host_cxx] = host_cxx;
ctor::conf_values[ctor::cfg::build_cxx] = build_cxx;
- std::cout << "Writing results to: " << configurationFile.string() << "\n";
- {
- std::ofstream istr(configurationFile);
+ std::cout << "Generating configuration: " << configurationFile.string() << "\n"; {
+ std::stringstream istr;
istr << "#include <ctor.h>\n\n";
istr << "const ctor::configuration& ctor::get_configuration()\n";
istr << "{\n";
@@ -900,13 +900,28 @@ int regenerateCache(ctor::settings& settings,
istr << " };\n";
istr << " return cfg;\n";
istr << "}\n";
+
+ auto new_configuration = istr.str();
+ auto current_configuration = readFile(configurationFile);
+ if(current_configuration != new_configuration)
+ {
+ std::ofstream configuration_stream(configurationFile);
+ configuration_stream << new_configuration;
+ }
}
{
- std::ofstream istr(configHeaderFile);
- istr << "#pragma once\n\n";
- istr << "#define HAS_FOO 1\n";
- istr << "//#define HAS_BAR 1\n";
+ std::stringstream new_config_stream;
+ new_config_stream << "#pragma once\n\n";
+ new_config_stream << "#define HAS_FOO 1\n";
+ new_config_stream << "//#define HAS_BAR 1\n";
+ auto new_config = new_config_stream.str();
+ auto current_config_content = readFile(configHeaderFile);
+ if(current_config_content != new_config)
+ {
+ std::ofstream config_file_stream(configHeaderFile);
+ config_file_stream << new_config;
+ }
}
return 0;