nixpkgs/pkgs/tools/misc/execline/default.nix

91 lines
2.7 KiB
Nix
Raw Normal View History

{ lib, skawarePackages
# for execlineb-with-builtins
, coreutils, gnugrep, writeScriptBin, runCommand
# 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.1.0";
sha256 = "0xr6yb50wm6amj1wc7jmxyv7hvlx2ypbnww1vc288j275625d9xi";
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"
];
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
'';
};
# a wrapper around execlineb, which provides all execline
# tools on `execlineb`s PATH.
execlineb-with-builtins-drv =
let eldir = "${execline}/bin";
in writeScriptBin "execlineb" ''
#!${eldir}/execlineb -s0
# appends the execlineb bin dir to PATH if not yet in PATH
${eldir}/define eldir ${eldir}
''${eldir}/ifelse
{
# since this is nix, we can grep for the execline drv hash in PATH
# to see whether its already in there
''${eldir}/pipeline
{ ${coreutils}/bin/printenv PATH }
${gnugrep}/bin/grep --quiet "${eldir}"
}
# its there already
{ ''${eldir}/execlineb $@ }
# not there yet, add it
''${eldir}/importas oldpath PATH
''${eldir}/export PATH "''${eldir}:''${oldpath}"
''${eldir}/execlineb $@
'';
# 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