diff options
Diffstat (limited to 'dlang/flake.nix')
| -rw-r--r-- | dlang/flake.nix | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/dlang/flake.nix b/dlang/flake.nix new file mode 100644 index 0000000..966425a --- /dev/null +++ b/dlang/flake.nix @@ -0,0 +1,62 @@ +{ + description = "ocda-write: sample writers over the object-centric document abstraction, in D"; + + inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + + /* The library this is built on, as a source tree rather than a flake: the + build compiles its modules alongside these, which is what a dub path + dependency does and avoids a second build product for a library of five + modules. + + flake.lock pins the commit of the library this writer was built and + checked against. To build against a working copy of it instead: + + nix build --override-input ocda-lib path:../../sisudoc-ocda-lib + */ + inputs.ocda-lib = { + url = "git+git://git.sisudoc.org/tools/sisudoc-ocda-lib"; + flake = false; + }; + + outputs = { self, nixpkgs, ocda-lib }: + let + system = "x86_64-linux"; # adjust for aarch64-linux / darwin + pkgs = import nixpkgs { inherit system; }; + + mkWrite = { compiler, compilerBin }: pkgs.stdenv.mkDerivation { + pname = "ocda-write"; + version = "2.0.0"; + src = self; + nativeBuildInputs = [ compiler ]; + buildInputs = [ pkgs.sqlite pkgs.zstd ]; + buildPhase = '' + runHook preBuild + export HOME=$TMPDIR + ${compilerBin} -I=src -I=${ocda-lib}/dlang/src -of=ocda-write \ + ${ocda-lib}/dlang/src/ocda/*.d src/write/*.d src/main.d \ + -L-lsqlite3 -L-lzstd + runHook postBuild + ''; + installPhase = '' + runHook preInstall + mkdir -p $out/bin + install -m755 ocda-write $out/bin/ocda-write + runHook postInstall + ''; + meta = { + description = "writes a document out from either serialisation of its abstraction"; + mainProgram = "ocda-write"; + }; + }; + in { + packages.${system} = { + default = self.packages.${system}.ocda-write; + ocda-write = mkWrite { compiler = pkgs.ldc; compilerBin = "ldmd2"; }; + ocda-write-dmd = mkWrite { compiler = pkgs.dmd; compilerBin = "dmd"; }; + }; + + devShells.${system}.default = pkgs.mkShell { + packages = [ pkgs.ldc pkgs.dub pkgs.dtools pkgs.sqlite pkgs.zstd ]; + }; + }; +} |
