diff --git a/pkgs/tools/misc/execline/default.nix b/pkgs/tools/misc/execline/default.nix index d06798e5d6dd..fb685e65a4f5 100644 --- a/pkgs/tools/misc/execline/default.nix +++ b/pkgs/tools/misc/execline/default.nix @@ -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 +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"; + outputs = [ "bin" "lib" "dev" "doc" "out" ]; - execline = - buildPackage { - pname = "execline"; - version = "2.5.3.0"; - sha256 = "0czdrv9m8mnx94nf28dafij6z03k4mbhbs6hccfaardfd5l5q805"; + # 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" + ]; - description = "A small scripting language, to be used in place of a shell in non-interactive scripts"; + postInstall = '' + # remove all execline executables from build directory + rm $(find -type f -mindepth 1 -maxdepth 1 -executable) + rm libexecline.* - inherit outputs; + mv doc $doc/share/doc/execline/html + mv examples $doc/share/doc/execline/examples - # 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. - # 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 + 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 +} diff --git a/pkgs/tools/misc/execline/execlineb-wrapper.c b/pkgs/tools/misc/execline/execlineb-wrapper.c index 09ccf990af7f..d31a76ca26eb 100644 --- a/pkgs/tools/misc/execline/execlineb-wrapper.c +++ b/pkgs/tools/misc/execline/execlineb-wrapper.c @@ -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 #include