aboutsummaryrefslogtreecommitdiff
path: root/infra/libkookie/nixpkgs/pkgs/development/tools/sourcetrail
diff options
context:
space:
mode:
Diffstat (limited to 'infra/libkookie/nixpkgs/pkgs/development/tools/sourcetrail')
-rw-r--r--infra/libkookie/nixpkgs/pkgs/development/tools/sourcetrail/default.nix252
-rw-r--r--infra/libkookie/nixpkgs/pkgs/development/tools/sourcetrail/disable-failing-tests.patch48
-rw-r--r--infra/libkookie/nixpkgs/pkgs/development/tools/sourcetrail/disable-updates.patch13
-rw-r--r--infra/libkookie/nixpkgs/pkgs/development/tools/sourcetrail/java.nix27
-rw-r--r--infra/libkookie/nixpkgs/pkgs/development/tools/sourcetrail/jedi.nix36
-rw-r--r--infra/libkookie/nixpkgs/pkgs/development/tools/sourcetrail/parso.nix29
-rw-r--r--infra/libkookie/nixpkgs/pkgs/development/tools/sourcetrail/python.nix68
7 files changed, 415 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 ];
};
}
diff --git a/infra/libkookie/nixpkgs/pkgs/development/tools/sourcetrail/disable-failing-tests.patch b/infra/libkookie/nixpkgs/pkgs/development/tools/sourcetrail/disable-failing-tests.patch
new file mode 100644
index 000000000000..7903642ef585
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/development/tools/sourcetrail/disable-failing-tests.patch
@@ -0,0 +1,48 @@
+diff --git a/src/test/SourceGroupTestSuite.cpp b/src/test/SourceGroupTestSuite.cpp
+index b5c5562a..d56b83bb 100644
+--- a/src/test/SourceGroupTestSuite.cpp
++++ b/src/test/SourceGroupTestSuite.cpp
+@@ -522,6 +522,7 @@ TEST_CASE("sourcegroup java gradle generates expected output")
+
+ TEST_CASE("sourcegroup java maven generates expected output")
+ {
++ return;
+ std::vector<FilePath> mavenPaths = utility::getMavenExecutablePathDetector()->getPaths();
+
+ REQUIRE(!mavenPaths.empty());
+diff --git a/src/test/UtilityMavenTestSuite.cpp b/src/test/UtilityMavenTestSuite.cpp
+index f48fe2b6..363ef64a 100644
+--- a/src/test/UtilityMavenTestSuite.cpp
++++ b/src/test/UtilityMavenTestSuite.cpp
+@@ -17,6 +17,7 @@ TEST_CASE("maven path detector is working")
+
+ TEST_CASE("maven wrapper detects source directories of simple projects")
+ {
++ return;
+ std::shared_ptr<PathDetector> mavenPathDetector = utility::getMavenExecutablePathDetector();
+ REQUIRE(!mavenPathDetector->getPaths().empty());
+
+@@ -41,6 +42,7 @@ TEST_CASE("maven wrapper detects source directories of simple projects")
+
+ TEST_CASE("maven wrapper detects source and test directories of simple projects")
+ {
++ return;
+ std::shared_ptr<PathDetector> mavenPathDetector = utility::getMavenExecutablePathDetector();
+ REQUIRE(!mavenPathDetector->getPaths().empty());
+
+@@ -65,6 +67,7 @@ TEST_CASE("maven wrapper detects source and test directories of simple projects"
+
+ TEST_CASE("maven wrapper detects source directories of nested modules")
+ {
++ return;
+ std::shared_ptr<PathDetector> mavenPathDetector = utility::getMavenExecutablePathDetector();
+ REQUIRE(!mavenPathDetector->getPaths().empty());
+
+@@ -101,6 +104,7 @@ TEST_CASE("maven wrapper detects source directories of nested modules")
+
+ TEST_CASE("maven wrapper detects source and test directories of nested modules")
+ {
++ return;
+ std::shared_ptr<PathDetector> mavenPathDetector = utility::getMavenExecutablePathDetector();
+ REQUIRE(!mavenPathDetector->getPaths().empty());
+
diff --git a/infra/libkookie/nixpkgs/pkgs/development/tools/sourcetrail/disable-updates.patch b/infra/libkookie/nixpkgs/pkgs/development/tools/sourcetrail/disable-updates.patch
new file mode 100644
index 000000000000..112af857c59e
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/development/tools/sourcetrail/disable-updates.patch
@@ -0,0 +1,13 @@
+diff --git a/src/lib/settings/ApplicationSettings.cpp b/src/lib/settings/ApplicationSettings.cpp
+index 1be13ccd..db6098e1 100644
+--- a/src/lib/settings/ApplicationSettings.cpp
++++ b/src/lib/settings/ApplicationSettings.cpp
+@@ -593,7 +593,7 @@ void ApplicationSettings::setUserToken(std::string token)
+
+ bool ApplicationSettings::getAutomaticUpdateCheck() const
+ {
+- return getValue<bool>("user/update_check/automatic", true);
++ return false;
+ }
+
+ void ApplicationSettings::setAutomaticUpdateCheck(bool automaticUpdates)
diff --git a/infra/libkookie/nixpkgs/pkgs/development/tools/sourcetrail/java.nix b/infra/libkookie/nixpkgs/pkgs/development/tools/sourcetrail/java.nix
new file mode 100644
index 000000000000..7056dca447f7
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/development/tools/sourcetrail/java.nix
@@ -0,0 +1,27 @@
+{ pkgs, javaPackages }:
+
+let
+ javaIndexer = javaPackages.mavenbuild {
+ name = "sourcetrail-java-indexer-${pkgs.sourcetrail.version}";
+ src = pkgs.sourcetrail.src;
+ m2Path = "com/sourcetrail/java-indexer";
+
+ # This doesn't include all required dependencies. We still rely on binary
+ # copies of maven packages included in the source repo for building.
+ mavenDeps = with javaPackages; [
+ mavenCompiler_3_2
+ plexusCompilerApi_2_4
+ plexusCompilerJavac_2_4
+ plexusCompilerManager_2_4
+ ];
+
+ meta = {
+ description = "Java indexer for Sourcetrail";
+ };
+ };
+in
+javaIndexer.overrideAttrs (drv: {
+ postUnpack = ''
+ export sourceRoot=''${sourceRoot}/java_indexer
+ '';
+})
diff --git a/infra/libkookie/nixpkgs/pkgs/development/tools/sourcetrail/jedi.nix b/infra/libkookie/nixpkgs/pkgs/development/tools/sourcetrail/jedi.nix
new file mode 100644
index 000000000000..14a40a6e6db4
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/development/tools/sourcetrail/jedi.nix
@@ -0,0 +1,36 @@
+# Taken from a past commit of nixpkgs
+
+{ stdenv, buildPythonPackage, fetchPypi, pytest, glibcLocales, tox, pytestcov, parso }:
+
+buildPythonPackage rec {
+ pname = "jedi";
+
+ # TODO: Remove this package when version incompatibility issue with
+ # python3Packages.jedi is resolved.
+ #
+ # Upstream requirements:
+ # https://github.com/CoatiSoftware/SourcetrailPythonIndexer#requirements
+ version = "0.17.2";
+
+ src = fetchPypi {
+ inherit pname version;
+ sha256 = "86ed7d9b750603e4ba582ea8edc678657fb4007894a12bcf6f4bb97892f31d20";
+ };
+
+ checkInputs = [ pytest glibcLocales tox pytestcov ];
+
+ propagatedBuildInputs = [ parso ];
+
+ checkPhase = ''
+ LC_ALL="en_US.UTF-8" py.test test
+ '';
+
+ # tox required for tests: https://github.com/davidhalter/jedi/issues/808
+ doCheck = false;
+
+ meta = with stdenv.lib; {
+ homepage = "https://github.com/davidhalter/jedi";
+ description = "An autocompletion tool for Python that can be used for text editors";
+ license = licenses.lgpl3Plus;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/development/tools/sourcetrail/parso.nix b/infra/libkookie/nixpkgs/pkgs/development/tools/sourcetrail/parso.nix
new file mode 100644
index 000000000000..bd5d5b86ac51
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/development/tools/sourcetrail/parso.nix
@@ -0,0 +1,29 @@
+# Taken from a past commit of nixpkgs
+
+{ lib
+, buildPythonPackage
+, fetchPypi
+, pytest
+}:
+
+buildPythonPackage rec {
+ pname = "parso";
+
+ # TODO: Remove along with ./jedi.nix when version compatiblity issue is
+ # resolved.
+ version = "0.7.0";
+
+ src = fetchPypi {
+ inherit pname version;
+ sha256 = "908e9fae2144a076d72ae4e25539143d40b8e3eafbaeae03c1bfe226f4cdf12c";
+ };
+
+ checkInputs = [ pytest ];
+
+ meta = {
+ description = "A Python Parser";
+ homepage = "https://github.com/davidhalter/parso";
+ license = lib.licenses.mit;
+ };
+
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/development/tools/sourcetrail/python.nix b/infra/libkookie/nixpkgs/pkgs/development/tools/sourcetrail/python.nix
new file mode 100644
index 000000000000..113abb77d61b
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/development/tools/sourcetrail/python.nix
@@ -0,0 +1,68 @@
+{ stdenv, lib, fetchFromGitHub, wrapPython, python, jedi, parso, cmake, swig }:
+
+stdenv.mkDerivation rec {
+ pname = "SourcetrailPythonIndexer";
+ version = "v1_db25_p5";
+
+ src = fetchFromGitHub {
+ owner = "CoatiSoftware";
+ repo = pname;
+ rev = version;
+ sha256 = "05hlpd3am029pv1wi6mys3q0ggp64axmg8bdf1fabl9cl9jffscq";
+ fetchSubmodules = true;
+ };
+
+ nativeBuildInputs = [ wrapPython cmake swig ];
+ buildInputs = [ python ];
+ pythonPath = [ jedi parso ];
+
+ dontUseCmakeConfigure = true;
+ cmakeFlags = [
+ "-DBUILD_BINDINGS_PYTHON=1"
+ "-DPYTHON_VERSION=${lib.versions.majorMinor python.version}"
+ ];
+
+ buildPhase = ''
+ pushd SourcetrailDB
+ cmake -Bbuild $cmakeFlags .
+ pushd build
+ make -j $NIX_BUILD_CORES
+ popd
+ popd
+ '';
+
+ checkPhase = ''
+ buildPythonPath "$pythonPath"
+
+ # FIXME: some tests are failing
+ # PYTHONPATH="$program_PYTHONPATH:SourcetrailDB/build/bindings_python" \
+ # ${python}/bin/python test.py
+ PYTHONPATH="$program_PYTHONPATH:SourcetrailDB/build/bindings_python" \
+ ${python}/bin/python test_shallow.py
+ '';
+
+ installPhase = ''
+ shopt -s extglob
+ mkdir -p $out/{bin,libexec}
+
+ cp !(run).py $out/libexec # copy *.py excluding run.py (needs extglob)
+ cat <(echo '#!/usr/bin/env python') run.py > $out/libexec/run.py
+ chmod +x $out/libexec/run.py
+ ln -s $out/libexec/run.py $out/bin/SourcetrailPythonIndexer
+
+ pushd SourcetrailDB/build/bindings_python
+ cp sourcetraildb.py $out/libexec
+ cp _sourcetraildb* $out/libexec/_sourcetraildb.so
+ popd
+
+ wrapPythonProgramsIn "$out/libexec" "$pythonPath"
+ '';
+
+ doCheck = true;
+
+ meta = with lib; {
+ description = "Python indexer for Sourcetrail";
+ homepage = "https://github.com/CoatiSoftware/SourcetrailPythonIndexer";
+ license = licenses.gpl3;
+ };
+}