{ lib, stdenv, fetchurl, mfcj470dwlpr, makeWrapper, bash }:

stdenv.mkDerivation rec {
  pname = "mfcj470dw-cupswrapper";
  version = "3.0.0-1";

  src = fetchurl {
    url = "https://download.brother.com/welcome/dlf006866/mfcj470dw_cupswrapper_GPL_source_${version}.tar.gz";
    sha256 = "b88f9b592723a00c024129560367f40a560ca3cba06fd99512ab368dd6855853";
  };

  nativeBuildInputs = [ makeWrapper ];
  buildInputs = [
    bash # shebang
  ];

  makeFlags = [ "-C" "brcupsconfpt1" "all" ];

  postPatch = ''
    WRAPPER=cupswrapper/cupswrappermfcj470dw

    substituteInPlace $WRAPPER \
      --replace-fail /opt "${mfcj470dwlpr}/opt" \
      --replace-fail /usr "${mfcj470dwlpr}/usr" \
      --replace-fail /etc "$out/etc"

    substituteInPlace $WRAPPER \
      --replace-fail "cp " "cp -p "
  '';

  installPhase = ''
    runHook preInstall

    TARGETFOLDER=$out/opt/brother/Printers/mfcj470dw/cupswrapper/
    PPDFOLDER=$out/share/cups/model/
    FILTERFOLDER=$out/lib/cups/filter/

    mkdir -p $TARGETFOLDER
    mkdir -p $PPDFOLDER
    mkdir -p $FILTERFOLDER

    cp brcupsconfpt1/brcupsconfpt1 $TARGETFOLDER
    cp cupswrapper/cupswrappermfcj470dw $TARGETFOLDER
    cp PPD/brother_mfcj470dw_printer_en.ppd $PPDFOLDER

    ln -s ${mfcj470dwlpr}/lib/cups/filter/brother_lpdwrapper_mfcj470dw $FILTERFOLDER/

    runHook postInstall
  '';

  meta = {
    homepage = "http://www.brother.com/";
    description = "Brother MFC-J470DW CUPS wrapper driver";
    license = lib.licenses.gpl2Plus;
    platforms = lib.platforms.linux;
    downloadPage = "http://support.brother.com/g/b/downloadlist.aspx?c=us&lang=en&prod=mfcj470dw_us_eu_as&os=128";
    maintainers = [ lib.maintainers.yochai ];
  };
}
