{ stdenv, fetchurl, buildPackages, automake, autoconf, libtool, which,
  fetchpatch }:

stdenv.mkDerivation rec {
  pname = "ilmbase";
  version = "2.3.0";

  src = fetchurl {
    url = "https://github.com/openexr/openexr/releases/download/v${version}/${pname}-${version}.tar.gz";
    sha256 = "0qiq5bqq9rxhqjiym2k36sx4vq8adgrz6xf6qwizi9bqm78phsa5";
  };

  outputs = [ "out" "dev" ];

  preConfigure = ''
    patchShebangs ./bootstrap
    ./bootstrap
  '';

  depsBuildBuild = [ buildPackages.stdenv.cc ];
  nativeBuildInputs = [ automake autoconf libtool which ];

  NIX_CFLAGS_LINK = "-pthread";

  patches = [
    ./bootstrap.patch
    ./cross.patch
    (fetchpatch {
      name = "CVE-2018-18443.patch";
      url = "https://github.com/kdt3rd/openexr/commit/5fa930b82cff2db386c64ca512af19e60c14d32a.patch";
      sha256 = "1j6xd0qkx99acc1szycxaj0wwp01yac67jz48hwc4fwwpz8blx4s";
      stripLen = 1;
      excludes = [ "CHANGES.md" ];
    })
  ];

  # fails 1 out of 1 tests with
  # "lt-ImathTest: testBoxAlgo.cpp:892: void {anonymous}::boxMatrixTransform(): Assertion `b21 == b2' failed"
  # at least on i686. spooky!
  doCheck = stdenv.isx86_64;

  meta = with stdenv.lib; {
    description = " A library for 2D/3D vectors and matrices and other mathematical objects, functions and data types for computer graphics";
    homepage = "https://www.openexr.com/";
    license = licenses.bsd3;
    platforms = platforms.all;
  };
}
