yaz-rs 0.1.0

Rust crate for Z39.50 using YAZ toolkit
{ pkgs ? import <nixpkgs> { } }:

let
  yaz = pkgs.stdenv.mkDerivation rec {
    pname = "yaz";
    version = "5.37.0";

    src = pkgs.fetchurl {
      url = "https://download.indexdata.com/pub/yaz/yaz-${version}.tar.gz";
      sha256 = "sha256-klf+sG4v27/Ot9BAwTn6E5V8TR67pqopOm3RPKsiJc4=";
    };

    nativeBuildInputs = with pkgs; [
      automake
      autoconf
      libtool
      pkg-config
    ];

    buildInputs = with pkgs; [
      libxml2
      libxslt
      icu
      readline
    ];

    configureFlags = [
      "--enable-shared"
      "--with-xml2"
      "--with-xslt"
      "--with-icu"
    ];

    meta = with pkgs.lib; {
      description = "Z39.50/SRU/Solr client and server";
      homepage = "https://www.indexdata.com/resources/software/yaz/";
      license = licenses.bsd3;
    };
  };
in
pkgs.mkShell {
  packages = with pkgs; [
    # Rust
    rustc
    cargo
    rustfmt
    clippy
    rust-analyzer
    pkg-config
    clang
    llvmPackages.libclang

    # Build tools for yaz
    automake
    autoconf
    libtool

    # yaz toolkit as defined above
    yaz
  ];

  # Required by bindgen
  LIBCLANG_PATH = pkgs.lib.makeLibraryPath [ pkgs.llvmPackages_latest.libclang.lib ];

  # Add YAZ to library and include paths
  LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath [ yaz ];
  PKG_CONFIG_PATH = "${yaz}/lib/pkgconfig:${pkgs.libxslt.dev}/lib/pkgconfig:${pkgs.libxml2.dev}/lib/pkgconfig";

  # Point rust-analyzer to the rust-src
  RUST_SRC_PATH = "${pkgs.rustPlatform.rustLibSrc}";

  shellHook = ''
    export RUST_BACKTRACE=1
  '';
}