From 3d78a7541b6bdeca09496c92387fc74f77b70962 Mon Sep 17 00:00:00 2001 From: Ralph Amissah Date: Thu, 15 Dec 2022 19:55:49 -0500 Subject: nix and build housekeeping --- flake.nix | 161 ++++++++++++++++++++++++++++++++------------------------------ 1 file changed, 84 insertions(+), 77 deletions(-) (limited to 'flake.nix') diff --git a/flake.nix b/flake.nix index c188d21..e615ae9 100644 --- a/flake.nix +++ b/flake.nix @@ -1,81 +1,88 @@ { - description = "a sisu like parser and document generator"; - inputs.flake-utils.url = "github:numtide/flake-utils"; - inputs.nixpkgs.url = "github:nixos/nixpkgs"; - #inputs.nixpkgs.url = "/nixpkgs-ra/nixpkgs"; - outputs = { self, nixpkgs, flake-utils }: { - packages.x86_64-linux.spine = - let - pkgs = import nixpkgs { - system = "x86_64-linux"; + 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"; }; - #targetOf = package: "${package.targetPath or "."}/${package.targetName or package.name}"; - in pkgs.stdenv.mkDerivation { - pname = "spine"; - version = "0.12.0"; - description = "a sisu like parser and document generator"; - inherit self; - src = self; - shell = ./shell.nix; - buildPhase = '' - runHook preBuild - HOME="$PWD" - DFLAGS="-O2 -inline" - for DC_ in dmd ldmd2 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=release --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 - #cp -r bin/spine $out/bin/. - runHook postInstall - ''; - postInstall = '' - echo `ls -la $out/bin/spine` - echo "" - echo "nix build or nix develop? (suggestions):" - echo '- nix build' - echo ' nix build .#spine --print-build-logs' - echo ' nix build --print-build-logs' - echo '- nix run' - echo ' nix run .#spine --print-build-logs' - echo ' nix run default.nix --print-build-logs' - echo '- nix shell' - echo ' nix shell --print-build-logs --command spine -v' - echo '- nix develop' - echo ' nix develop --build -f derivation.nix -I .envrc --print-build-logs' - echo ' nix develop ; eval "$buildPhase"' - echo 'spine -v' - echo 'nix-instantiate | nix show-derivation | jq' - echo `ls -la $out/bin/spine` - echo "built:" - $out/bin/spine -v - ''; - nativeBuildInputs = with pkgs; [ ldc dub ]; - buildInputs = with pkgs; [ sqlite ]; - }; - packages.x86_64-linux.default = self.packages.x86_64-linux.spine; + }); + devShells = forAllSystems (system: + let pkgs = nixpkgsFor.${system}; + in with pkgs; { + devShell = mkShell { buildInputs = [ git dub dmd ldc gdc sqlite ]; }; + }); }; } - -#nix flake update -#nix flake check -#nix flake show -#nix develop -#nix build .#default --print-build-logs -- cgit v1.2.3