about summary refs log tree commit diff
path: root/src/libstore/globals.cc
diff options
context:
space:
mode:
authorShea Levy <shea@shealevy.com>2018-02-13T19·43-0500
committerShea Levy <shea@shealevy.com>2018-02-13T19·43-0500
commitde4934ab3b26aa851b7044e9884102cc054dc092 (patch)
tree94e333d35b7d48d93bfb70f132023d6b8d3d5752 /src/libstore/globals.cc
parent3fe9767dd33499c2560d209dc13a01f5fcead1f0 (diff)
Allow plugins to define new settings.
Diffstat (limited to 'src/libstore/globals.cc')
-rw-r--r--src/libstore/globals.cc16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/libstore/globals.cc b/src/libstore/globals.cc
index c6b508cbe82f..c5a4536ef2f7 100644
--- a/src/libstore/globals.cc
+++ b/src/libstore/globals.cc
@@ -161,6 +161,22 @@ void initPlugins()
                 throw Error("could not dynamically open plugin file '%s%': %s%", file, dlerror());
         }
     }
+    /* We handle settings registrations here, since plugins can add settings */
+    if (RegisterSetting::settingRegistrations) {
+        for (auto & registration : *RegisterSetting::settingRegistrations)
+            settings.addSetting(registration);
+        delete RegisterSetting::settingRegistrations;
+    }
+    settings.handleUnknownSettings();
+}
+
+RegisterSetting::SettingRegistrations * RegisterSetting::settingRegistrations;
+
+RegisterSetting::RegisterSetting(AbstractSetting * s)
+{
+    if (!settingRegistrations)
+        settingRegistrations = new SettingRegistrations;
+    settingRegistrations->emplace_back(s);
 }