aboutsummaryrefslogtreecommitdiffhomepage
path: root/flake.nix
blob: e615ae94d267c689eb39eee955d6c7b25f90f523 (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
{
  description                  = "a sisu like parser & document generator";
  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";
            inherit version;
            meta.mainProgram   = "spine";
            executable         = true;
            src                = self;
            shell              = ./default.nix;
            devEnv             = ./devenv.nix;
            buildInputs        = [ sqlite ];
            nativeBuildInputs  = [ dub dmd ]; # [ 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/bin
              install -m755 ./bin/spine $out/bin/spine
              runHook postInstall
            '';
            postInstall = ''
              echo `ls -la $out/bin/spine`
              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
              spine -v
              nix-instantiate | nix show-derivation | jq
              "
              $out/bin/spine -v
            '';
          };
          #vendorSha256 = "sha256-0Q00000000000000000000000000000000000000000=";
        });
      apps = forAllSystems (system: {
        default = {
          type                 = "app";
          program              = "${self.packages.${system}.default}/bin/spine";
        };
      });
      devShells = forAllSystems (system:
        let pkgs               = nixpkgsFor.${system};
        in with pkgs; {
          devShell             = mkShell { buildInputs = [ git dub dmd ldc gdc sqlite ]; };
        });
  };
}