summary refs log tree commit diff
diff options
context:
space:
mode:
authorVladimír Čunát <vcunat@gmail.com>2017-02-05 14:03:41 +0100
committerVladimír Čunát <vcunat@gmail.com>2017-02-05 14:09:22 +0100
commit3b583d943ee31f36d422167aed391689f5ab93f0 (patch)
tree93f43986418c89142f3adb271deb4369b08da2b6
parent372cb3760e7e3f7dc544e83b252628f5fe1cef03 (diff)
parent5ae18574fcea525861e721fb6cb510630a3ad1ec (diff)
downloadnixpkgs-3b583d943ee31f36d422167aed391689f5ab93f0.tar
nixpkgs-3b583d943ee31f36d422167aed391689f5ab93f0.tar.gz
nixpkgs-3b583d943ee31f36d422167aed391689f5ab93f0.tar.bz2
nixpkgs-3b583d943ee31f36d422167aed391689f5ab93f0.tar.lz
nixpkgs-3b583d943ee31f36d422167aed391689f5ab93f0.tar.xz
nixpkgs-3b583d943ee31f36d422167aed391689f5ab93f0.tar.zst
nixpkgs-3b583d943ee31f36d422167aed391689f5ab93f0.zip
Merge #19328: mkWrapper fix and docs
-rw-r--r--doc/stdenv.xml44
-rw-r--r--pkgs/build-support/setup-hooks/make-wrapper.sh22
2 files changed, 65 insertions, 1 deletions
diff --git a/doc/stdenv.xml b/doc/stdenv.xml
index 6ec5c9f2814..a2530e102ca 100644
--- a/doc/stdenv.xml
+++ b/doc/stdenv.xml
@@ -1111,6 +1111,34 @@ functions.</para>
 <variablelist>
 
 
+  <varlistentry xml:id='fun-makeWrapper'>
+    <term><function>makeWrapper</function>
+    <replaceable>executable</replaceable>
+    <replaceable>wrapperfile</replaceable>
+    <replaceable>args</replaceable></term>
+    <listitem><para>Constructs a wrapper for a program with various
+    possible arguments. For example:
+
+<programlisting>
+# adds `FOOBAR=baz` to `$out/bin/foo`’s environment
+makeWrapper $out/bin/foo $wrapperfile --set FOOBAR baz
+
+# prefixes the binary paths of `hello` and `git`
+# Be advised that paths often should be patched in directly
+# (via string replacements or in `configurePhase`).
+makeWrapper $out/bin/foo $wrapperfile --prefix PATH : ${lib.makeBinPath [ hello git ]}
+</programlisting>
+
+    There’s many more kinds of arguments, they are documented in
+    <literal>nixpkgs/pkgs/build-support/setup-hooks/make-wrapper.sh</literal>.</para>
+
+    <para><literal>wrapProgram</literal> is a convenience function you probably
+    want to use most of the time.</para>
+
+    </listitem>
+  </varlistentry>
+  
+
   <varlistentry xml:id='fun-substitute'>
     <term><function>substitute</function>
     <replaceable>infile</replaceable>
@@ -1268,6 +1296,22 @@ someVar=$(stripHash $name)
 
     </para></listitem>
   </varlistentry>
+  
+
+  <varlistentry xml:id='fun-wrapProgram'>
+    <term><function>wrapProgram</function>
+    <replaceable>executable</replaceable>
+    <replaceable>makeWrapperArgs</replaceable></term>
+    <listitem><para>Convenience function for <literal>makeWrapper</literal>
+    that automatically creates a sane wrapper file
+
+    It takes all the same arguments as <literal>makeWrapper</literal>,
+    except for <literal>--argv0</literal>.</para>
+
+    <para>It cannot be applied multiple times, since it will overwrite the wrapper
+    file.</para>
+    </listitem>
+  </varlistentry>
 
 
 </variablelist>
diff --git a/pkgs/build-support/setup-hooks/make-wrapper.sh b/pkgs/build-support/setup-hooks/make-wrapper.sh
index d922db5ccf5..4f55493ae48 100644
--- a/pkgs/build-support/setup-hooks/make-wrapper.sh
+++ b/pkgs/build-support/setup-hooks/make-wrapper.sh
@@ -1,8 +1,28 @@
+# construct an executable file that wraps the actual executable
+# makeWrapper EXECUTABLE ARGS
+
+# ARGS:
+# --argv0 NAME      : set name of executed process to NAME
+#                     (otherwise it’s called …-wrapped)
+# --set   VAR VAL   : add VAR with value VAL to the executable’s environment
+# --unset VAR       : remove VAR from the environment
+# --run   COMMAND   : run command before the executable
+#                     The command can push extra flags to a magic list variable
+#                     extraFlagsArray, which are then added to the invocation
+#                     of the executable
+# --add-flags FLAGS : add FLAGS to invocation of executable
+
+# --prefix          ENV SEP VAL   : suffix/prefix ENV with VAL, separated by SEP
+# --suffix
+# --suffix-each     ENV SEP VALS  : like --suffix, but VALS is a list
+# --prefix-contents ENV SEP FILES : like --suffix-each, but contents of FILES
+#                                   are read first and used as VALS
+# --suffix-contents
 makeWrapper() {
     local original=$1
     local wrapper=$2
     local params varName value command separator n fileNames
-    local argv0 flagsBefore flags
+    local argv0 flagsBefore flags extraFlagsArray
 
     mkdir -p "$(dirname $wrapper)"