about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--third_party/nix/doc/manual/command-ref/conf-file.xml31
-rw-r--r--third_party/nix/src/build-remote/build-remote.cc2
-rw-r--r--third_party/nix/src/libexpr/primops.hh4
-rw-r--r--third_party/nix/src/libmain/shared.hh1
-rw-r--r--third_party/nix/src/libstore/globals.cc31
-rw-r--r--third_party/nix/src/libstore/globals.hh10
-rw-r--r--third_party/nix/src/nix-build/nix-build.cc2
-rw-r--r--third_party/nix/src/nix-channel/nix-channel.cc2
-rw-r--r--third_party/nix/src/nix-collect-garbage/nix-collect-garbage.cc2
-rw-r--r--third_party/nix/src/nix-copy-closure/nix-copy-closure.cc2
-rw-r--r--third_party/nix/src/nix-daemon/nix-daemon.cc2
-rw-r--r--third_party/nix/src/nix-env/nix-env.cc2
-rw-r--r--third_party/nix/src/nix-instantiate/nix-instantiate.cc2
-rw-r--r--third_party/nix/src/nix-prefetch-url/nix-prefetch-url.cc2
-rw-r--r--third_party/nix/src/nix-store/nix-store.cc2
-rw-r--r--third_party/nix/src/nix/main.cc2
-rw-r--r--third_party/nix/tests/plugins.sh7
-rw-r--r--third_party/nix/tests/plugins/plugintest.cc23
18 files changed, 1 insertions, 128 deletions
diff --git a/third_party/nix/doc/manual/command-ref/conf-file.xml b/third_party/nix/doc/manual/command-ref/conf-file.xml
index 48dce7c950..4a5400b193 100644
--- a/third_party/nix/doc/manual/command-ref/conf-file.xml
+++ b/third_party/nix/doc/manual/command-ref/conf-file.xml
@@ -598,37 +598,6 @@ password <replaceable>my-password</replaceable>
   </varlistentry>
 
 
-  <varlistentry xml:id="conf-plugin-files">
-    <term><literal>plugin-files</literal></term>
-    <listitem>
-      <para>
-        A list of plugin files to be loaded by Nix. Each of these
-        files will be dlopened by Nix, allowing them to affect
-        execution through static initialization. In particular, these
-        plugins may construct static instances of RegisterPrimOp to
-        add new primops or constants to the expression language,
-        RegisterStoreImplementation to add new store implementations,
-        RegisterCommand to add new subcommands to the
-        <literal>nix</literal> command, and RegisterSetting to add new
-        nix config settings. See the constructors for those types for
-        more details.
-      </para>
-      <para>
-        Since these files are loaded into the same address space as
-        Nix itself, they must be DSOs compatible with the instance of
-        Nix running at the time (i.e. compiled against the same
-        headers, not linked to any incompatible libraries). They
-        should not be linked to any Nix libs directly, as those will
-        be available already at load time.
-      </para>
-      <para>
-        If an entry in the list is a directory, all files in the
-        directory are loaded as plugins (non-recursively).
-      </para>
-    </listitem>
-
-  </varlistentry>
-
   <varlistentry xml:id="conf-pre-build-hook"><term><literal>pre-build-hook</literal></term>
 
     <listitem>
diff --git a/third_party/nix/src/build-remote/build-remote.cc b/third_party/nix/src/build-remote/build-remote.cc
index 2c7e6dbab8..82ac2014ef 100644
--- a/third_party/nix/src/build-remote/build-remote.cc
+++ b/third_party/nix/src/build-remote/build-remote.cc
@@ -68,8 +68,6 @@ static int _main(int argc, char* argv[]) {
 
     settings.maxBuildJobs.set("1");  // hack to make tests with local?root= work
 
-    initPlugins();
-
     auto store = openStore().cast<LocalStore>();
 
     /* It would be more appropriate to use $XDG_RUNTIME_DIR, since
diff --git a/third_party/nix/src/libexpr/primops.hh b/third_party/nix/src/libexpr/primops.hh
index 45f63a5419..388066f390 100644
--- a/third_party/nix/src/libexpr/primops.hh
+++ b/third_party/nix/src/libexpr/primops.hh
@@ -14,9 +14,7 @@ struct RegisterPrimOp {
   RegisterPrimOp(const std::string& name, size_t arity, PrimOpFun fun);
 };
 
-/* These primops are disabled without enableNativeCode, but plugins
-   may wish to use them in limited contexts without globally enabling
-   them. */
+/* These primops are disabled without enableNativeCode */
 /* Load a ValueInitializer from a DSO and return whatever it initializes */
 void prim_importNative(EvalState& state, const Pos& pos, Value** args,
                        Value& v);
diff --git a/third_party/nix/src/libmain/shared.hh b/third_party/nix/src/libmain/shared.hh
index b749b572c5..60a9e302ff 100644
--- a/third_party/nix/src/libmain/shared.hh
+++ b/third_party/nix/src/libmain/shared.hh
@@ -22,7 +22,6 @@ class Exit : public std::exception {
 int handleExceptions(const std::string& programName,
                      const std::function<void()>& fun);
 
-/* Don't forget to call initPlugins() after settings are initialized! */
 void initNix();
 
 void parseCmdLine(
diff --git a/third_party/nix/src/libstore/globals.cc b/third_party/nix/src/libstore/globals.cc
index dccf8d9815..06ef3dd040 100644
--- a/third_party/nix/src/libstore/globals.cc
+++ b/third_party/nix/src/libstore/globals.cc
@@ -167,35 +167,4 @@ void MaxBuildJobsSetting::set(const std::string& str) {
   }
 }
 
-void initPlugins() {
-  for (const auto& pluginFile : settings.pluginFiles.get()) {
-    Paths pluginFiles;
-    try {
-      auto ents = readDirectory(pluginFile);
-      for (const auto& ent : ents) {
-        pluginFiles.emplace_back(pluginFile + "/" + ent.name);
-      }
-    } catch (SysError& e) {
-      if (e.errNo != ENOTDIR) {
-        throw;
-      }
-      pluginFiles.emplace_back(pluginFile);
-    }
-    for (const auto& file : pluginFiles) {
-      /* handle is purposefully leaked as there may be state in the
-         DSO needed by the action of the plugin. */
-      void* handle = dlopen(file.c_str(), RTLD_LAZY | RTLD_LOCAL);
-      if (handle == nullptr) {
-        throw Error("could not dynamically open plugin file '%s': %s", file,
-                    dlerror());
-      }
-    }
-  }
-
-  /* Since plugins can add settings, try to re-apply previously
-     unknown settings. */
-  globalConfig.reapplyUnknownSettings();
-  globalConfig.warnUnknownSettings();
-}
-
 }  // namespace nix
diff --git a/third_party/nix/src/libstore/globals.hh b/third_party/nix/src/libstore/globals.hh
index 567ec6c42b..7799ff2850 100644
--- a/third_party/nix/src/libstore/globals.hh
+++ b/third_party/nix/src/libstore/globals.hh
@@ -452,21 +452,11 @@ class Settings : public Config {
   Setting<uint64_t> minFreeCheckInterval{
       this, 5, "min-free-check-interval",
       "Number of seconds between checking free disk space."};
-
-  Setting<Paths> pluginFiles{
-      this,
-      {},
-      "plugin-files",
-      "Plugins to dynamically load at nix initialization time."};
 };
 
 // FIXME: don't use a global variable.
 extern Settings settings;
 
-/* This should be called after settings are initialized, but before
-   anything else */
-void initPlugins();
-
 void loadConfFile();
 
 extern const std::string nixVersion;
diff --git a/third_party/nix/src/nix-build/nix-build.cc b/third_party/nix/src/nix-build/nix-build.cc
index 7e3ee11d68..7ebb14e1f3 100644
--- a/third_party/nix/src/nix-build/nix-build.cc
+++ b/third_party/nix/src/nix-build/nix-build.cc
@@ -255,8 +255,6 @@ static void _main(int argc, char** argv) {
 
   myArgs.parseCmdline(args);
 
-  initPlugins();
-
   if (packages && fromArgs) {
     throw UsageError("'-p' and '-E' are mutually exclusive");
   }
diff --git a/third_party/nix/src/nix-channel/nix-channel.cc b/third_party/nix/src/nix-channel/nix-channel.cc
index 87cc0a1fea..837fb861d3 100644
--- a/third_party/nix/src/nix-channel/nix-channel.cc
+++ b/third_party/nix/src/nix-channel/nix-channel.cc
@@ -214,8 +214,6 @@ static int _main(int argc, char** argv) {
                    return true;
                  });
 
-    initPlugins();
-
     switch (cmd) {
       case cNone:
         throw UsageError("no command specified");
diff --git a/third_party/nix/src/nix-collect-garbage/nix-collect-garbage.cc b/third_party/nix/src/nix-collect-garbage/nix-collect-garbage.cc
index f6897595cb..ac8c7d9399 100644
--- a/third_party/nix/src/nix-collect-garbage/nix-collect-garbage.cc
+++ b/third_party/nix/src/nix-collect-garbage/nix-collect-garbage.cc
@@ -82,8 +82,6 @@ static int _main(int argc, char** argv) {
                    return true;
                  });
 
-    initPlugins();
-
     auto profilesDir = settings.nixStateDir + "/profiles";
     if (removeOld) {
       removeOldGenerations(profilesDir);
diff --git a/third_party/nix/src/nix-copy-closure/nix-copy-closure.cc b/third_party/nix/src/nix-copy-closure/nix-copy-closure.cc
index d4ea6a85ec..3dbe29f224 100644
--- a/third_party/nix/src/nix-copy-closure/nix-copy-closure.cc
+++ b/third_party/nix/src/nix-copy-closure/nix-copy-closure.cc
@@ -48,8 +48,6 @@ static int _main(int argc, char** argv) {
           return true;
         });
 
-    initPlugins();
-
     if (sshHost.empty()) {
       throw UsageError("no host name specified");
     }
diff --git a/third_party/nix/src/nix-daemon/nix-daemon.cc b/third_party/nix/src/nix-daemon/nix-daemon.cc
index 5296199380..dc5295821f 100644
--- a/third_party/nix/src/nix-daemon/nix-daemon.cc
+++ b/third_party/nix/src/nix-daemon/nix-daemon.cc
@@ -1107,8 +1107,6 @@ static int _main(int argc, char** argv) {
                    return true;
                  });
 
-    initPlugins();
-
     if (stdio) {
       if (getStoreType() == tDaemon) {
         /* Forward on this connection to the real daemon */
diff --git a/third_party/nix/src/nix-env/nix-env.cc b/third_party/nix/src/nix-env/nix-env.cc
index 820b8cbcaf..585cfbe3f7 100644
--- a/third_party/nix/src/nix-env/nix-env.cc
+++ b/third_party/nix/src/nix-env/nix-env.cc
@@ -1496,8 +1496,6 @@ static int _main(int argc, char** argv) {
 
     myArgs.parseCmdline(argvToStrings(argc, argv));
 
-    initPlugins();
-
     if (op == nullptr) {
       throw UsageError("no operation specified");
     }
diff --git a/third_party/nix/src/nix-instantiate/nix-instantiate.cc b/third_party/nix/src/nix-instantiate/nix-instantiate.cc
index 6c77a96ebc..be96943b12 100644
--- a/third_party/nix/src/nix-instantiate/nix-instantiate.cc
+++ b/third_party/nix/src/nix-instantiate/nix-instantiate.cc
@@ -153,8 +153,6 @@ static int _main(int argc, char** argv) {
 
     myArgs.parseCmdline(argvToStrings(argc, argv));
 
-    initPlugins();
-
     if (evalOnly && !wantsReadWrite) {
       settings.readOnlyMode = true;
     }
diff --git a/third_party/nix/src/nix-prefetch-url/nix-prefetch-url.cc b/third_party/nix/src/nix-prefetch-url/nix-prefetch-url.cc
index b9de2e826b..dc0dce345b 100644
--- a/third_party/nix/src/nix-prefetch-url/nix-prefetch-url.cc
+++ b/third_party/nix/src/nix-prefetch-url/nix-prefetch-url.cc
@@ -100,8 +100,6 @@ static int _main(int argc, char** argv) {
 
     myArgs.parseCmdline(argvToStrings(argc, argv));
 
-    initPlugins();
-
     if (args.size() > 2) {
       throw UsageError("too many arguments");
     }
diff --git a/third_party/nix/src/nix-store/nix-store.cc b/third_party/nix/src/nix-store/nix-store.cc
index a642780b72..7729945b13 100644
--- a/third_party/nix/src/nix-store/nix-store.cc
+++ b/third_party/nix/src/nix-store/nix-store.cc
@@ -1276,8 +1276,6 @@ static int _main(int argc, char** argv) {
                    return true;
                  });
 
-    initPlugins();
-
     if (op == nullptr) {
       throw UsageError("no operation specified");
     }
diff --git a/third_party/nix/src/nix/main.cc b/third_party/nix/src/nix/main.cc
index a7b6e71bbe..5536aac532 100644
--- a/third_party/nix/src/nix/main.cc
+++ b/third_party/nix/src/nix/main.cc
@@ -144,8 +144,6 @@ void mainWrapped(int argc, char** argv) {
 
   args.parseCmdline(argvToStrings(argc, argv));
 
-  initPlugins();
-
   if (!args.command) {
     args.showHelpAndExit();
   }
diff --git a/third_party/nix/tests/plugins.sh b/third_party/nix/tests/plugins.sh
deleted file mode 100644
index 4b1baeddce..0000000000
--- a/third_party/nix/tests/plugins.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-source common.sh
-
-set -o pipefail
-
-res=$(nix eval '(builtins.anotherNull)' --option setting-set true --option plugin-files $PWD/plugins/libplugintest*)
-
-[ "$res"x = "nullx" ]
diff --git a/third_party/nix/tests/plugins/plugintest.cc b/third_party/nix/tests/plugins/plugintest.cc
deleted file mode 100644
index 353166cffe..0000000000
--- a/third_party/nix/tests/plugins/plugintest.cc
+++ /dev/null
@@ -1,23 +0,0 @@
-#include "libutil/config.hh"
-#include "primops.hh"
-
-using namespace nix;
-
-struct MySettings : Config {
-  Setting<bool> settingSet{this, false, "setting-set",
-                           "Whether the plugin-defined setting was set"};
-};
-
-MySettings mySettings;
-
-static GlobalConfig::Register rs(&mySettings);
-
-static void prim_anotherNull(EvalState& state, const Pos& pos, Value** args,
-                             Value& v) {
-  if (mySettings.settingSet)
-    mkNull(v);
-  else
-    mkBool(v, false);
-}
-
-static RegisterPrimOp rp("anotherNull", 0, prim_anotherNull);