summaryrefslogtreecommitdiffhomepage
path: root/flake.nix
blob: 36050e16b262548ddf5806e12f6e1119d04362ae (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
{
  description                  = "a sisu like document parser search form";
  inputs.nixpkgs.url           = "github:NixOS/nixpkgs/nixpkgs-unstable"; # "github:nixos/nixpkgs"; "github:NixOS/nixpkgs/nixpkgs-unstable"; "nixpkgs/nixos-unstable"; "nixpkgs/nixos-21.11";
  inputs.flake-utils.url       = "github:numtide/flake-utils";
  outputs = { self, nixpkgs, flake-utils }:
    let
      version                  = "0.12.0";
      supportedSystems         = [ "x86_64-linux" ]; # [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin"  ];
      forAllSystems            = nixpkgs.lib.genAttrs supportedSystems;
      nixpkgsFor               = forAllSystems (system: import nixpkgs { inherit system;  }); # nixpkgs instantiated for supported system types.
    in {
      packages = forAllSystems (system:
        let pkgs               = nixpkgsFor.${system};
        in with pkgs; {
          default = stdenv.mkDerivation {
            pname              = "spine_search";
            inherit version;
            executable         = true;
            src                = self;
            shell              = ./default.nix;
            devEnv             = ./devenv.nix;
            buildInputs        = [ sqlite ];
            nativeBuildInputs  = [ dub ldc ]; # [ dub dmd ]; [ dub ldc ]; [ dub gdc ];
            buildPhase = ''
              runHook preBuild
              HOME="$PWD"
              for DC_ in dmd ldmd2 ldc2 gdc 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=$DC_ --combined --skip-registry=all
              runHook postBuild
            '';
            checkPhase = ''
              runHook preCheck
              HOME="$PWD"
              dub test --combined --skip-registry=all
              runHook postCheck
            '';
            installPhase = ''
              runHook preInstall
              mkdir -p $out/share/cgi-bin
              install -m755 -D ./cgi-bin/spine_search $out/share/cgi-bin/spine_search
              runHook postInstall
            '';
            postInstall = ''
              echo `ls -la $out/share/cgi-bin/spine_search`
              echo "
              nix build or nix develop? (suggestions):
              - nix build
                nix build .#default --print-build-logs
                nix flake update; nix build .#default --print-build-logs
                  nix build --print-build-logs
              - nix run
                nix run .#default --print-build-logs
                nix run default.nix --print-build-logs
              - nix shell
                nix shell .#default --print-build-logs --command spine -v
              - nix develop
                nix develop --profile .#default --print-build-logs --command spine -v
                nix develop ; eval \"$buildPhase\"
                nix develop --build -f derivation.nix -I .envrc --print-build-logs
              - nix profile install . --print-build-logs
              nix-instantiate | nix show-derivation | jq
              "
            '';
          };
          #vendorSha256 = "sha256-0Q00000000000000000000000000000000000000000=";
        });
      devShells = forAllSystems (system:
        let pkgs               = nixpkgsFor.${system};
        in with pkgs; {
          devShell             = mkShell { buildInputs = [ git dub dmd ldc gdc sqlite ]; };
        });
  };
}