summaryrefslogtreecommitdiffhomepage
path: root/dlang/flake.nix
blob: 3aa9a609045f842b186eba712b9f6ebdcde78495 (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
{
  description = "ocda-lib: the object-centric document abstraction as a D library";

  inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";

  outputs = { self, nixpkgs }:
    let
      system = "x86_64-linux"; # adjust for aarch64-linux / darwin
      pkgs = import nixpkgs { inherit system; };

      /* A library, so there is nothing to install as a binary. What is
         built here are the two programs that put the library to the
         question: the agreement check, which loads a document's .ssp and
         its .ocda.db and compares the two models, and the dump, which
         writes a loaded model out canonically so that an implementation in
         another language can be diffed against this one.
      */
      mkTool = { tool, binary, what, compiler, compilerBin }:
        pkgs.stdenv.mkDerivation {
          pname = "ocda-lib-${tool}";
          version = "2.0.0";
          src = self;
          nativeBuildInputs = [ compiler ];
          buildInputs = [ pkgs.sqlite pkgs.zstd ];
          buildPhase = ''
            runHook preBuild
            export HOME=$TMPDIR
            ${compilerBin} -I=src -of=${tool} src/ocda/*.d test/${tool}.d -L-lsqlite3 -L-lzstd
            runHook postBuild
          '';
          installPhase = ''
            runHook preInstall
            mkdir -p $out/bin
            install -m755 ${tool} $out/bin/${binary}
            runHook postInstall
          '';
          meta = {
            description = what;
            mainProgram = binary;
          };
        };

      ldc = { compiler = pkgs.ldc; compilerBin = "ldmd2"; };
    in {
      packages.${system} = {
        default = self.packages.${system}.ocda-agree;

        ocda-agree = mkTool (ldc // {
          tool = "agree"; binary = "ocda-agree";
          what = "checks that the .ssp and .ocda.db loaders give one model";
        });

        ocda-dump = mkTool (ldc // {
          tool = "dump"; binary = "ocda-dump";
          what = "writes a loaded abstraction out canonically, as an oracle";
        });
      };

      devShells.${system}.default = pkgs.mkShell {
        packages = [ pkgs.ldc pkgs.dub pkgs.dtools pkgs.sqlite pkgs.zstd ];
      };
    };
}