From c849d9bff18152e83d6e62aa11de2f14fe974488 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Sat, 7 Feb 2026 22:27:05 +0100 Subject: Use REG function for configuration, like with build_configurations, to get rid of the hacky weak symbol method. --- src/configure.cc | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) (limited to 'src/configure.cc') diff --git a/src/configure.cc b/src/configure.cc index 1b8caa6..5ba87c3 100644 --- a/src/configure.cc +++ b/src/configure.cc @@ -10,6 +10,7 @@ #include #include #include +#include #include "execute.h" #include "ctor.h" @@ -26,8 +27,30 @@ const std::filesystem::path configHeaderFile("config.h"); std::map external_includedir; std::map external_libdir; -const ctor::configuration& __attribute__((weak)) ctor::get_configuration() +std::function& getConfigurationCallback() { + static std::function configuration_callback; + return configuration_callback; +} + +namespace ctor { +int reg(std::function cb, + [[maybe_unused]]const std::source_location location) +{ + auto& configuration_callback = getConfigurationCallback(); + configuration_callback = cb; + return {}; +} +} // ctor:: + +const ctor::configuration& ctor::get_configuration() +{ + auto& configuration_callback = getConfigurationCallback(); + if(configuration_callback) + { + return configuration_callback(); + } + static ctor::configuration cfg; static bool initialised{false}; if(!initialised) @@ -752,7 +775,7 @@ int regenerateCache(ctor::settings& settings, std::cout << "Generating configuration: " << configurationFile.string() << "\n"; { std::stringstream istr; istr << "#include \n\n"; - istr << "const ctor::configuration& ctor::get_configuration()\n"; + istr << "const ctor::configuration& stored_configuration()\n"; istr << "{\n"; istr << " static ctor::configuration cfg =\n"; istr << " {\n"; @@ -902,6 +925,7 @@ int regenerateCache(ctor::settings& settings, istr << " };\n"; istr << " return cfg;\n"; istr << "}\n"; + istr << "\nREG(stored_configuration);\n"; auto new_configuration = istr.str(); auto current_configuration = readFile(configurationFile.string()); -- cgit v1.2.3