{ fetchFromGitHub, libGLU, llvmPackages, qtbase, qtscript, qtxmlpatterns }:

let
  meshlabRev = "d596d7c086c51fbdfb56050f9c30b55dd0286d4c";
  vcglibRev = "6c3c940e34327322507c703889f9f1cfa73ab183";
  # ^ this should be the latest commit in the vcglib devel branch at the time of the meshlab revision

  stdenv = llvmPackages.stdenv; # only building with clang seems to be tested upstream
in stdenv.mkDerivation {
  name = "meshlab-20180627-beta";

  srcs =
    [
      (fetchFromGitHub {
        owner = "cnr-isti-vclab";
        repo = "meshlab";
        rev = meshlabRev;
        sha256 = "0xi7wiyy0yi545l5qvccbqahlcsf70mhx829gf7bq29640si4rax";
        name = "meshlab-${meshlabRev}";
      })
      (fetchFromGitHub {
        owner = "cnr-isti-vclab";
        repo = "vcglib";
        rev = vcglibRev;
        sha256 = "0jfgjvf21y9ncmyr7caipy3ardhig7hh9z8miy885c99b925hhwd";
        name = "vcglib-${vcglibRev}";
      })
    ];

  sourceRoot = "meshlab-${meshlabRev}";

  hardeningDisable = [ "format" ];
  enableParallelBuilding = true;

  patches = [ ./fix-20180627-beta.patch ];

  buildPhase = ''
    # MeshLab has ../vcglib hardcoded everywhere, so move the source dir
    mv ../vcglib-${vcglibRev} ../vcglib

    cd src
    export NIX_LDFLAGS="-rpath $out/opt/meshlab $NIX_LDFLAGS"
    export QMAKESPEC="linux-clang"

    pushd external
    qmake -recursive external.pro
    buildPhase
    popd
    qmake -recursive meshlab_full.pro
    buildPhase
  '';

  installPhase = ''
    mkdir -p $out/opt/meshlab $out/bin
    cp -Rv distrib/* $out/opt/meshlab
    ln -s $out/opt/meshlab/meshlab $out/bin/meshlab
    ln -s $out/opt/meshlab/meshlabserver $out/bin/meshlabserver
  '';

  buildInputs = [ libGLU llvmPackages.openmp qtbase qtscript qtxmlpatterns ];

  meta = {
    description = "A system for processing and editing 3D triangular meshes.";
    homepage = http://www.meshlab.net/;
    license = stdenv.lib.licenses.gpl3;
    maintainers = with stdenv.lib.maintainers; [viric];
    platforms = with stdenv.lib.platforms; linux;
  };
}