1{
2 stdenv,
3 lib,
4 ShellCheck,
5 haskell,
6 pandoc,
7}:
8
9# this wraps around the haskell package
10# and puts the documentation into place
11
12let
13 # TODO: move to lib/ in separate PR
14 overrideMeta =
15 drv: overrideFn:
16 let
17 drv' = if drv ? meta then drv else drv // { meta = { }; };
18 pos = (builtins.unsafeGetAttrPos "pname" drv');
19 meta' = drv'.meta // {
20 # copied from the mkDerivation code
21 position = pos.file + ":" + toString pos.line;
22 };
23 in
24 drv' // { meta = meta' // overrideFn meta'; };
25
26 bin = haskell.lib.compose.justStaticExecutables ShellCheck;
27
28 shellcheck = stdenv.mkDerivation {
29 pname = "shellcheck";
30 version = bin.version;
31
32 inherit (ShellCheck) meta src;
33
34 nativeBuildInputs = [ pandoc ];
35
36 outputs = [
37 "bin"
38 "man"
39 "doc"
40 "out"
41 ];
42
43 buildPhase = ''
44 pandoc -s -f markdown-smart -t man shellcheck.1.md -o shellcheck.1
45 '';
46
47 installPhase = ''
48 install -Dm755 ${bin}/bin/shellcheck $bin/bin/shellcheck
49 install -Dm644 README.md $doc/share/shellcheck/README.md
50 install -Dm644 shellcheck.1 $man/share/man/man1/shellcheck.1
51 mkdir $out
52 '';
53
54 passthru = ShellCheck.passthru or { } // {
55 # pandoc takes long to build and documentation isn't needed for in nixpkgs usage
56 unwrapped = ShellCheck;
57 };
58 };
59
60in
61overrideMeta shellcheck (old: {
62 maintainers = with lib.maintainers; [ zowoq ];
63 mainProgram = "shellcheck";
64 outputsToInstall = [
65 "bin"
66 "man"
67 "doc"
68 ];
69})