{ lib, stdenv, fetchFromGitHub, callPackage, writeScript, fetchpatch, cmake , wrapQtAppsHook, qt5, boost, llvmPackages, gcc, jdk, maven, pythonPackages , coreutils, which, desktop-file-utils, shared-mime-info, imagemagick, libicns }: let # TODO: remove when version incompatibility issue with python3Packages.jedi is # resolved parso = pythonPackages.callPackage ./parso.nix { }; jedi = pythonPackages.callPackage ./jedi.nix { inherit parso; }; pythonIndexer = pythonPackages.callPackage ./python.nix { inherit jedi parso; }; javaIndexer = callPackage ./java.nix { }; appPrefixDir = if stdenv.isDarwin then "$out/Applications/Sourcetrail.app/Contents" else "$out/opt/sourcetrail"; appBinDir = if stdenv.isDarwin then "${appPrefixDir}/MacOS" else "${appPrefixDir}/bin"; appResourceDir = if stdenv.isDarwin then "${appPrefixDir}/Resources" else "${appPrefixDir}/share"; # Upstream script: # https://github.com/CoatiSoftware/Sourcetrail/blob/master/script/update_java_indexer.sh installJavaIndexer = writeScript "update_java_indexer.sh" '' #!${stdenv.shell} cd "$(dirname "$0")/.." dst="${appResourceDir}/data/java/lib" mkdir -p "$dst" cp "${javaIndexer}/target/java-indexer-1.0.jar" "$dst/java-indexer.jar" cp -r java_indexer/lib/*.jar "$dst" ''; # Upstream script: # https://github.com/CoatiSoftware/Sourcetrail/blob/master/script/download_python_indexer.sh installPythonIndexer = writeScript "download_python_indexer.sh" '' #!${stdenv.shell} mkdir -p ${appResourceDir}/data ln -s "${pythonIndexer}/bin" "${appResourceDir}/data/python" ''; in stdenv.mkDerivation rec { pname = "sourcetrail"; # NOTE: skip 2020.4.35 https://github.com/CoatiSoftware/Sourcetrail/pull/1136 version = "2020.2.43"; src = fetchFromGitHub { owner = "CoatiSoftware"; repo = "Sourcetrail"; rev = version; sha256 = "0jp9y86xzkcxikc1cn4f6gqgg6zdssck08677ldagw25p1zadvzw"; }; patches = let url = commit: "https://github.com/CoatiSoftware/Sourcetrail/commit/${commit}.patch"; in [ ./disable-updates.patch ./disable-failing-tests.patch # FIXME: 5 test cases failing due to sandbox # TODO: remove on next release (fetchpatch { name = "fix-filecopy.patch"; url = url "d079d1787c9e5cadcf41a003666dc0746cc1cda0"; sha256 = "0mixy2a4s16kv2q89k7y4dv21wnv2zd86i4gdwn3xz977y8hf92b"; }) (fetchpatch { name = "fix-broken-test.patch"; url = url "85329174bac8a301733100dc4540258f977e2c5a"; sha256 = "17l4417sbmkrgr6v3fbazlmkzl9774zrpjv2n9zwfrz52y30f7b9"; }) ]; nativeBuildInputs = [ cmake jdk wrapQtAppsHook desktop-file-utils imagemagick javaIndexer # the resulting jar file is copied by our install script ] ++ lib.optional (stdenv.isDarwin) libicns ++ lib.optionals doCheck testBinPath; buildInputs = [ boost pythonIndexer shared-mime-info ] ++ (with qt5; [ qtbase qtsvg ]) ++ (with llvmPackages; [ libclang llvm ]); binPath = [ gcc jdk.jre maven which ]; testBinPath = binPath ++ [ coreutils ]; cmakeFlags = [ "-DBoost_USE_STATIC_LIBS=OFF" "-DBUILD_CXX_LANGUAGE_PACKAGE=ON" "-DBUILD_JAVA_LANGUAGE_PACKAGE=ON" "-DBUILD_PYTHON_LANGUAGE_PACKAGE=ON" ] ++ lib.optional stdenv.isLinux "-DCMAKE_PREFIX_PATH=${llvmPackages.clang-unwrapped}" ++ lib.optional stdenv.isDarwin "-DClang_DIR=${llvmPackages.clang-unwrapped}"; postPatch = let major = lib.versions.major version; minor = lib.versions.minor version; patch = lib.versions.patch version; in '' # Upstream script obtains it's version from git: # https://github.com/CoatiSoftware/Sourcetrail/blob/master/cmake/version.cmake cat > cmake/version.cmake <