about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--pkgs/profpatsch/default.nix6
-rw-r--r--pkgs/profpatsch/execline/write-execline.nix18
2 files changed, 24 insertions, 0 deletions
diff --git a/pkgs/profpatsch/default.nix b/pkgs/profpatsch/default.nix
index b697bd75..eb1bf8fa 100644
--- a/pkgs/profpatsch/default.nix
+++ b/pkgs/profpatsch/default.nix
@@ -105,6 +105,10 @@ let
         testing.drvSeqL tests (itLocal name args execline);
     };
 
+  writeExeclineFns = import ./write-execline.nix {
+    inherit pkgs execlineb-with-builtins;
+  };
+
 
 in rec {
   inherit (nixperiments)
@@ -153,6 +157,8 @@ in rec {
 
   inherit (runExeclineFns)
     runExecline runExeclineLocal;
+  inherit (writeExeclineFns)
+    writeExecline writeExeclineBin;
 
   inherit getBins;
 
diff --git a/pkgs/profpatsch/execline/write-execline.nix b/pkgs/profpatsch/execline/write-execline.nix
new file mode 100644
index 00000000..721261a2
--- /dev/null
+++ b/pkgs/profpatsch/execline/write-execline.nix
@@ -0,0 +1,18 @@
+{ pkgs, execlineb-with-builtins }:
+let
+  escape = ./escape.nix { inherit (pkgs) lib; };
+
+  # Write a list of execline argv parameters to an execline script.
+  # Everything is escaped correctly.
+  # TODO upstream into nixpkgs
+  writeExeclineCommon = writer: name: { readNArgs ? 0 }: argList: writer name ''
+    #!${execlineb-with-builtins}/bin/execlineb -s${toString readNArgs}
+    export EXECLINE_STRICT 2
+    ${escape.escapeExecline argList}
+  '';
+  writeExecline = writeExeclineCommon pkgs.writeScript;
+  writeExeclineBin = writeExeclineCommon pkgs.writeScriptBin;
+
+in {
+  inherit writeExecline writeExeclineBin;
+}