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 ];
};
};
}
|