aboutsummaryrefslogtreecommitdiffhomepage
path: root/sundry/spine_search_cgi/derivation.nix
blob: f3c99598121de410e14e51802117cbd0734b872b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
{ pkgs ? import <nixpkgs> {},
  stdenv ? pkgs.stdenv,
  lib ? pkgs.lib,
  ldc ? null,
  dcompiler ? pkgs.ldc,
  dub ? pkgs.dub
}:
assert dcompiler != null;
with (
  assert dcompiler != null;
  with lib;
  let
    # Filter function to remove the .dub package folder from src
    filterDub = name: type: let baseName = baseNameOf (toString name); in ! (
      type == "directory" && baseName == ".dub"
    );
    targetOf = package: "${package.targetPath or "."}/${package.targetName or package.name}";
    # Remove reference to build tools and library sources
    disallowedReferences = deps: [ dcompiler dub ];
    removeExpr = refs: ''remove-references-to ${lib.concatMapStrings (ref: " -t ${ref}") refs}'';
  in {
    mkDubDerivation = lib.makeOverridable ({
      src,
      nativeBuildInputs ? [],
      dubJSON ? src + "/dub.json",
      passthru ? {},
      package ? lib.importJSON dubJSON,
      ...
    } @ attrs: stdenv.mkDerivation (attrs // {
      pname = package.name;
      nativeBuildInputs = [ dcompiler dub pkgs.removeReferencesTo ] ++ nativeBuildInputs;
      disallowedReferences = disallowedReferences deps;
      passthru = passthru // {
        inherit dub dcompiler pkgs;
      };
      src = lib.cleanSourceWith {
        filter = filterDub;
        src = lib.cleanSource src;
      };
      preFixup = ''
        find $out/share/cgi-bin -type f -exec ${removeExpr (disallowedReferences deps)} '{}' + || true
      '';
      buildPhase = ''
        runHook preBuild
        export HOME=$PWD
        for dc_ in dmd ldmd2 gdmd; do
          echo "- check for D compiler $dc_"
          dc=$(type -P $dc_ || echo "")
          if [ ! "$dc" == "" ]; then
            break
          fi
        done
        if [ "$dc" == "" ]; then
          exit "Error: could not find D compiler"
        fi
        echo "$dc_ used as D compiler to build $pname"
        dub build --compiler=$dc --build=release --combined --skip-registry=all
        runHook postBuild
      '';
      checkPhase = ''
        runHook preCheck
        export HOME=$PWD
        dub test --combined --skip-registry=all
        runHook postCheck
      '';
      installPhase = ''
        runHook preInstall
        mkdir -p $out/share/cgi-bin
        cp -r "${targetOf package}" $out/share/cgi-bin
        install -m755 -D $out/share/cgi-bin/spine_search spine_search
        runHook postInstall
      '';
      postInstall = ''
        echo "HERE ${targetOf package} $out/share/cgi-bin"
        echo `ls -la $out/share/cgi-bin/spine_search`
      '';
      meta = lib.optionalAttrs (package ? description) {
        description = package.description;
      } // attrs.meta or {};
    } // lib.optionalAttrs (!(attrs ? version)) {
      # Use name from dub.json, unless pname and version are specified
      name = package.name;
    }));
  }
);
mkDubDerivation rec {
  name = "spine-search-${version}";
  version = "0.11.3";
  src = ./.;
  buildInputs = [
    pkgs.sqlite (
      with pkgs; [
        nixFlakes
        ## package manager
        dub
        ## compiler
        ldc
        rund
        ## linker
        #lld
        #mold
        ## builder
        #ninja
        sqlite
      ]
    )
  ];
  meta = with pkgs.lib; {
    pname       = "spine-search";
    version     = "0.11.3";
    homepage    = "https://sisudoc.org";
    description = "cgi sqlite search form for document object search";
    longDescription = ''
      A sisu like parser and document generator
      ...
    '';
    license     = licenses.agpl3Plus;
    platforms   = platforms.linux;
    maintainers = [ "RalphAmissah" ];
  };
}