diff options
author | Mx Kookie <kookie@spacekookie.de> | 2020-12-09 18:55:19 +0000 |
---|---|---|
committer | Mx Kookie <kookie@spacekookie.de> | 2020-12-09 18:55:19 +0000 |
commit | 80d90d9b204f7c17912740f9f414fe5d59f293ba (patch) | |
tree | 5f2065a06e724270610760d59d01c6888b375a46 /infra/libkookie/nixpkgs/pkgs/development/tools/sourcetrail/default.nix | |
parent | 3a31a84c7d3e589035ad08499206aac44a81f424 (diff) | |
parent | 83cbad92d73216bb0d9187c56cce0b91f9121d5a (diff) |
Merge commit '83cbad92d73216bb0d9187c56cce0b91f9121d5a' into main
Diffstat (limited to 'infra/libkookie/nixpkgs/pkgs/development/tools/sourcetrail/default.nix')
-rw-r--r-- | infra/libkookie/nixpkgs/pkgs/development/tools/sourcetrail/default.nix | 252 |
1 files changed, 194 insertions, 58 deletions
diff --git a/infra/libkookie/nixpkgs/pkgs/development/tools/sourcetrail/default.nix b/infra/libkookie/nixpkgs/pkgs/development/tools/sourcetrail/default.nix index 9e41f209cfd6..91653d3773e1 100644 --- a/infra/libkookie/nixpkgs/pkgs/development/tools/sourcetrail/default.nix +++ b/infra/libkookie/nixpkgs/pkgs/development/tools/sourcetrail/default.nix @@ -1,77 +1,213 @@ -{ stdenv, fetchurl, autoPatchelfHook -, zlib, expat, dbus, openssl, python3 }: +{ stdenv, fetchFromGitHub, callPackage, writeScript, cmake, wrapQtAppsHook +, boost, qt5, llvmPackages, gcc, jdk, pythonPackages, desktop-file-utils +, shared-mime-info, imagemagick, which, coreutils, maven, fetchpatch }: + +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 {}; + + # 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="$out/opt/sourcetrail/share/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 $out/opt/sourcetrail/share/data + ln -s "${pythonIndexer}/bin" "$out/opt/sourcetrail/share/data/python" + ''; +in stdenv.mkDerivation rec { pname = "sourcetrail"; - version = "2019.3.46"; + version = "2020.2.43"; - src = fetchurl { - name = "sourtrail.tar.gz"; - url = "https://www.sourcetrail.com/downloads/${version}/linux/64bit"; - sha256 = "0dnkxr3fijcsbn6pd20lyxhr9ns6ji1c4dffly9s16yq4x9ad5r4"; + src = fetchFromGitHub { + owner = "CoatiSoftware"; + repo = "Sourcetrail"; + rev = version; + sha256 = "0jp9y86xzkcxikc1cn4f6gqgg6zdssck08677ldagw25p1zadvzw"; }; - nativeBuildInputs = [ autoPatchelfHook ]; - buildInputs = [ zlib expat dbus stdenv.cc.cc openssl python3 ]; - - installPhase = '' - runHook preInstall - - mkdir -p $out/bin $out/opt - - mv -v setup/share $out - mv -v data/gui/icon/logo_1024_1024.png $out/share/icons/sourcetrail.png - mv -v data/gui/icon/project_256_256.png $out/share/icons/project-sourcetrail.png - - mkdir -p $out/share/sourcetrail/doc - mv -v README EULA.txt $out/share/sourcetrail/doc - mv -v plugin $out/share/sourcetrail - - cp -rv . $out/opt - - rm $out/opt/lib/libssl.so - rm $out/opt/lib/platforms/{libqeglfs.so,libqwebgl.so} - ln -s ${openssl}/lib/libssl.so $out/opt/lib/libssl.so - - substituteInPlace \ - $out/share/applications/sourcetrail.desktop \ - --replace /usr/bin/ $out/bin/ - - cat <<EOF > $out/bin/sourcetrail - #! ${stdenv.shell} -e + 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 + ] ++ stdenv.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" + "-DCMAKE_PREFIX_PATH=${llvmPackages.clang-unwrapped}" + "-DBUILD_JAVA_LANGUAGE_PACKAGE=ON" + "-DBUILD_PYTHON_LANGUAGE_PACKAGE=ON" + ]; + + postPatch = let + major = stdenv.lib.versions.major version; + minor = stdenv.lib.versions.minor version; + patch = stdenv.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 <<EOF + set(GIT_BRANCH "") + set(GIT_COMMIT_HASH "") + set(GIT_VERSION_NUMBER "") + set(VERSION_YEAR "${major}") + set(VERSION_MINOR "${minor}") + set(VERSION_COMMIT "${patch}") + set(BUILD_TYPE "Release") + set(VERSION_STRING "${major}.${minor}.${patch}") + EOF - # XXX: Sourcetrail somehow copies the initial config files into the home - # directory without write permissions. We currently just copy them - # ourselves to work around this problem. - setup_config() { - local src dst + # Sourcetrail attempts to copy clang headers from the LLVM store path + substituteInPlace CMakeLists.txt \ + --replace "\''${LLVM_BINARY_DIR}" '${llvmPackages.clang-unwrapped}' - [ ! -d ~/.config/sourcetrail ] && mkdir -p ~/.config/sourcetrail - for src in $out/opt/data/fallback/*; do - dst=~/.config/sourcetrail/"\$(basename "\$src")" - if [ ! -e "\$dst" ]; then - cp -r "\$src" "\$dst" - fi - done + patchShebangs script + ln -sf ${installJavaIndexer} script/update_java_indexer.sh + ln -sf ${installPythonIndexer} script/download_python_indexer.sh + ''; - chmod -R u+w ~/.config/sourcetrail - } + # Sourcetrail doesn't use the usual cmake install() commands and instead uses + # its own bash script for packaging. Since we're not able to reuse the script, + # we'll have to roll our own in nixpkgs. + # + # Sourcetrail currently assumes one of the following two layouts for the + # placement of its files: + # + # AppImage Layout Traditional Layout + # ├── bin/ ├── sourcetrail* + # │ └── sourcetrail* └── data/ + # └── share/ + # └── data/ sourcetrail: application executable + # data: contains assets exlusive to Sourcetrail + # + # The AppImage layout is the one currently used by the upstream project for + # packaging its Linux port. We can't use this layout as-is for nixpkgs, + # because Sourcetrail treating $out/share/data as its own might lead to + # conflicts with other packages when linked into a Nix profile. + # + # On the other hand, the traditional layout isn't used by the upstream project + # anymore so there's a risk that it might become unusable at any time in the + # future. Since it's hard to detect these problems at build time, it's not a + # good idea to use this layout for packaging in nixpkgs. + # + # Considering the problems with the above layouts, we go with the third + # option, a slight variation of the AppImage layout: + # + # nixpkgs + # ├── bin/ + # │ └── sourcetrail* (wrapper for opt/sourcetrail/bin/sourcetrail) + # └── opt/sourcetrail/ + # ├── bin/ + # │ └── sourcetrail* + # └── share/ + # └── data/ + # + # Upstream install script: + # https://github.com/CoatiSoftware/Sourcetrail/blob/master/setup/Linux/createPackages.sh + installPhase = '' + mkdir -p $out/opt/sourcetrail/bin + cp app/Sourcetrail $out/opt/sourcetrail/bin/sourcetrail + cp app/sourcetrail_indexer $out/opt/sourcetrail/bin/sourcetrail_indexer + + desktop-file-install --dir=$out/share/applications \ + --set-key Exec --set-value $out/bin/sourcetrail \ + ../setup/Linux/data/sourcetrail.desktop + + mkdir -p $out/share/mime/packages + cp ../setup/Linux/data/sourcetrail-mime.xml $out/share/mime/packages/ + + mkdir -p $out/opt/sourcetrail/share + cp -R ../bin/app/data $out/opt/sourcetrail/share + cp -R ../bin/app/user/projects $out/opt/sourcetrail/share/data/fallback + rm $out/opt/sourcetrail/share/data/*_template.xml + rm -r $out/opt/sourcetrail/share/data/install + + for size in 48 64 128 256 512; do + mkdir -p $out/share/icons/hicolor/''${size}x''${size}/apps/ + convert app/data/gui/icon/logo_1024_1024.png -resize ''${size}x''${size} \ + $out/share/icons/hicolor/''${size}x''${size}/apps/sourcetrail.png + done + + mkdir -p $out/bin + makeQtWrapper $out/opt/sourcetrail/bin/sourcetrail $out/bin/sourcetrail \ + --prefix PATH : ${stdenv.lib.makeBinPath binPath} + ''; - [ -d "\$HOME" ] && setup_config - export PATH="\$PATH:${python3}/bin" - exec "$out/opt/Sourcetrail.sh" "\$@" - EOF + checkPhase = '' + rm -rf ../bin/app/data/{python,java/lib} + ln -s $out/opt/sourcetrail/share/data/python ../bin/app/data/python + ln -s $out/opt/sourcetrail/share/data/java/lib ../bin/app/data/java/lib + + pushd test + # shorten PATH to prevent build failures + wrapQtApp ./Sourcetrail_test \ + --set PATH "" \ + --prefix PATH : ${stdenv.lib.makeBinPath testBinPath} \ + --set MAVEN_OPTS "-Dmaven.repo.local=$TMPDIR/m2repo" + ./Sourcetrail_test + popd + + rm ../bin/app/data/{python,java/lib} + ''; - chmod +x $out/bin/sourcetrail + # This has to be done manually in the installPhase because the actual binary + # lives in $out/opt/sourcetrail/bin, which isn't covered by wrapQtAppsHook + dontWrapQtApps = true; - runHook postInstall - ''; + # FIXME: some test cases are disabled in the patch phase + doCheck = true; meta = with stdenv.lib; { homepage = "https://www.sourcetrail.com"; description = "A cross-platform source explorer for C/C++ and Java"; - platforms = [ "x86_64-linux" ]; - license = licenses.unfree; + platforms = platforms.all; + license = licenses.gpl3; maintainers = with maintainers; [ midchildan ]; }; } |