diff options
| author | Bent Bisballe Nyeng <deva@aasimon.org> | 2026-01-14 10:49:18 +0100 |
|---|---|---|
| committer | Bent Bisballe Nyeng <deva@aasimon.org> | 2026-01-14 11:07:54 +0100 |
| commit | 13b8ea3b4dc6b63f4b77fc0e6f254a2ce9ca7389 (patch) | |
| tree | c881c4b6bcf0215c6027bc0c0559c00e721d8454 | |
| parent | fa99825fa800f0faf4a6e6b1d639b261c7aa43c9 (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.cc | 29 |
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; |
