Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: NixOS/nixpkgs
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: d7f2bf70bd35
Choose a base ref
...
head repository: NixOS/nixpkgs
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 5e4c49463607
Choose a head ref
  • 1 commit
  • 2 files changed
  • 1 contributor

Commits on Jan 24, 2020

  1. execline: wrap unconditionally; strip

    I don't think there's any situation in which an unwrapped execlineb is
    useful -- if you want to use different versions of the execlineb tool
    it'll still prefer ones in PATH.  At the same time, implementing the
    wrapper in this way, as a series of two derivations, meant that we
    didn't get stdenv goodness for the wrapper.  This meant that, for
    example, the wrapper was not stripped, and so execline ended up with
    runtime dependencies on gcc and the Linux headers.  I don't want to
    have to reimplement this sort of stuff when it's already in stdenv,
    and so it makes much more sense to create the wrapper in the
    mkDerivation call, where all of stdenv's normal magic will find it.
    alyssais authored and Profpatsch committed Jan 24, 2020
    Copy the full SHA
    5e4c494 View commit details
Showing with 39 additions and 68 deletions.
  1. +32 −68 pkgs/tools/misc/execline/default.nix
  2. +7 −0 pkgs/tools/misc/execline/execlineb-wrapper.c
100 changes: 32 additions & 68 deletions pkgs/tools/misc/execline/default.nix
Original file line number Diff line number Diff line change
@@ -1,85 +1,49 @@
{ lib, skawarePackages
# for execlineb-with-builtins
, coreutils, gnugrep, writeScriptBin, runCommand, runCommandCC
# Whether to wrap bin/execlineb to have the execline tools on its PATH.
, execlineb-with-builtins ? true
}:

with skawarePackages;

let
outputs = [ "bin" "lib" "dev" "doc" "out" ];

execline =
buildPackage {
pname = "execline";
version = "2.5.3.0";
sha256 = "0czdrv9m8mnx94nf28dafij6z03k4mbhbs6hccfaardfd5l5q805";

description = "A small scripting language, to be used in place of a shell in non-interactive scripts";

inherit outputs;

# TODO: nsss support
configureFlags = [
"--libdir=\${lib}/lib"
"--dynlibdir=\${lib}/lib"
"--bindir=\${bin}/bin"
"--includedir=\${dev}/include"
"--with-sysdeps=${skalibs.lib}/lib/skalibs/sysdeps"
"--with-include=${skalibs.dev}/include"
"--with-lib=${skalibs.lib}/lib"
"--with-dynlib=${skalibs.lib}/lib"
];
buildPackage {
pname = "execline";
version = "2.5.3.0";
sha256 = "0czdrv9m8mnx94nf28dafij6z03k4mbhbs6hccfaardfd5l5q805";

postInstall = ''
# remove all execline executables from build directory
rm $(find -type f -mindepth 1 -maxdepth 1 -executable)
rm libexecline.*
description = "A small scripting language, to be used in place of a shell in non-interactive scripts";

mv doc $doc/share/doc/execline/html
mv examples $doc/share/doc/execline/examples
'';

};
outputs = [ "bin" "lib" "dev" "doc" "out" ];

# A wrapper around execlineb, which provides all execline
# tools on `execlineb`’s PATH.
# It is implemented as a C script, because on non-Linux,
# nested shebang lines are not supported.
execlineb-with-builtins-drv = runCommandCC "execlineb" {} ''
mkdir -p $out/bin
# TODO: nsss support
configureFlags = [
"--libdir=\${lib}/lib"
"--dynlibdir=\${lib}/lib"
"--bindir=\${bin}/bin"
"--includedir=\${dev}/include"
"--with-sysdeps=${skalibs.lib}/lib/skalibs/sysdeps"
"--with-include=${skalibs.dev}/include"
"--with-lib=${skalibs.lib}/lib"
"--with-dynlib=${skalibs.lib}/lib"
];

postInstall = ''
# remove all execline executables from build directory
rm $(find -type f -mindepth 1 -maxdepth 1 -executable)
rm libexecline.*
mv doc $doc/share/doc/execline/html
mv examples $doc/share/doc/execline/examples
mv $bin/bin/execlineb $bin/bin/.execlineb-wrapped
cc \
-O \
-Wall -Wpedantic \
-D 'EXECLINEB_PATH()="${execline}/bin/execlineb"' \
-D 'EXECLINE_BIN_PATH()="${execline}/bin"' \
-D "EXECLINEB_PATH()=\"$bin/bin/.execlineb-wrapped\"" \
-D "EXECLINE_BIN_PATH()=\"$bin/bin\"" \
-I "${skalibs.dev}/include" \
-L "${skalibs.lib}/lib" \
-l"skarnet" \
-o "$out/bin/execlineb" \
-lskarnet \
-o "$bin/bin/execlineb" \
${./execlineb-wrapper.c}
'';


# the original execline package, with bin/execlineb overwritten
execline-with-builtins = runCommand "my-execline"
(execline.drvAttrs // {
preferLocalBuild = true;
allowSubstitutes = false;
})
# copy every output and just overwrite the execlineb binary in $bin
''
${lib.concatMapStringsSep "\n"
(output: ''
cp -r ${execline.${output}} "''$${output}"
chmod --recursive +w "''$${output}"
'')
outputs}
install ${execlineb-with-builtins-drv}/bin/execlineb $bin/bin/execlineb
'';

in
if execlineb-with-builtins
then execline-with-builtins
else execline
}
7 changes: 7 additions & 0 deletions pkgs/tools/misc/execline/execlineb-wrapper.c
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
/*
* A wrapper around execlineb, which provides all execline
* tools on execlineb’s PATH.
* It is implemented as a C program, because on non-Linux,
* nested shebang lines are not supported.
*/

#include <stdlib.h>
#include <string.h>