tyler 0.4.1

Create tiles from 3D city objects encoded as CityJSONFeatures.
{
  description = "Nix build for tyler";

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

  outputs =
    { self, nixpkgs, ... }:
    let
      supportedSystems = [
        "aarch64-darwin"
        "aarch64-linux"
        "x86_64-darwin"
        "x86_64-linux"
      ];

      forAllSystems = nixpkgs.lib.genAttrs supportedSystems;
    in
    {
      packages = forAllSystems (
        system:
        let
          pkgs = import nixpkgs { inherit system; };
          projData = pkgs.runCommand "tyler-proj-data" { } ''
            mkdir -p "$out/share/proj"
            cp -a ${pkgs.proj}/share/proj/. "$out/share/proj/"
            chmod -R u+w "$out/share/proj"
            if [ ! -e "$out/share/proj/nl_nsgi_nlgeo2018.tif" ]; then
              cp ${pkgs.fetchurl {
                url = "https://cdn.proj.org/nl_nsgi_nlgeo2018.tif";
                hash = "sha256-+OMsVr+JQPw/77wOQT60VGYz7VmLZpxjhWzd+DKJksA=";
              }} "$out/share/proj/nl_nsgi_nlgeo2018.tif"
            fi
            if [ ! -e "$out/share/proj/nl_nsgi_rdtrans2018.tif" ]; then
              cp ${pkgs.fetchurl {
                url = "https://cdn.proj.org/nl_nsgi_rdtrans2018.tif";
                hash = "sha256-dlODEZG0JOcVqQZGiWL8YAcc+3GjGGsqWPCYuri/Qd4=";
              }} "$out/share/proj/nl_nsgi_rdtrans2018.tif"
            fi
          '';
          nativeBuildInputs = [
            pkgs.cmake
            pkgs.llvmPackages.clang
            pkgs.makeWrapper
            pkgs.pkg-config
          ];
          buildInputs = [
            pkgs.libtiff
            pkgs.proj
            pkgs.sqlite
          ];
        in
        rec {
          default = tyler;

          tyler = pkgs.rustPlatform.buildRustPackage {
            pname = "tyler";
            version = "0.4.1";

            src = self;
            cargoLock = {
              lockFile = ./Cargo.lock;
              outputHashes = {
                "cityjson-0.8.0" = "sha256-isq+Ud97hShMwum6vhHMaJE1/KTDOFWLu7vMsJee83E=";
              };
            };

            inherit nativeBuildInputs buildInputs;

            LIBCLANG_PATH = "${pkgs.llvmPackages.libclang.lib}/lib";
            PROJ_DATA = "${projData}/share/proj";

            doCheck = false;

            postInstall = ''
              wrapProgram "$out/bin/tyler" \
                --set-default PROJ_DATA "${projData}/share/proj"
            '';
          };
        }
      );

      devShells = forAllSystems (
        system:
        let
          pkgs = import nixpkgs { inherit system; };
          projData = pkgs.runCommand "tyler-proj-data" { } ''
            mkdir -p "$out/share/proj"
            cp -a ${pkgs.proj}/share/proj/. "$out/share/proj/"
            chmod -R u+w "$out/share/proj"
            if [ ! -e "$out/share/proj/nl_nsgi_nlgeo2018.tif" ]; then
              cp ${pkgs.fetchurl {
                url = "https://cdn.proj.org/nl_nsgi_nlgeo2018.tif";
                hash = "sha256-+OMsVr+JQPw/77wOQT60VGYz7VmLZpxjhWzd+DKJksA=";
              }} "$out/share/proj/nl_nsgi_nlgeo2018.tif"
            fi
            if [ ! -e "$out/share/proj/nl_nsgi_rdtrans2018.tif" ]; then
              cp ${pkgs.fetchurl {
                url = "https://cdn.proj.org/nl_nsgi_rdtrans2018.tif";
                hash = "sha256-dlODEZG0JOcVqQZGiWL8YAcc+3GjGGsqWPCYuri/Qd4=";
              }} "$out/share/proj/nl_nsgi_rdtrans2018.tif"
            fi
          '';
        in
        {
          default = pkgs.mkShell {
            packages = [
              pkgs.cargo
              pkgs.clippy
              pkgs.cmake
              pkgs.llvmPackages.clang
              pkgs.pkg-config
              pkgs.rustc
              pkgs.rustfmt
	      pkgs.perf
	      pkgs.valgrind
            ];

            buildInputs = [
              pkgs.libtiff
              pkgs.proj
              pkgs.sqlite
            ];

            LIBCLANG_PATH = "${pkgs.llvmPackages.libclang.lib}/lib";
            PROJ_DATA = "${projData}/share/proj";
          };
        }
      );
    };
}