Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Backport release-22.05] JabRef: 5.5 -> 5.6 #182633

Merged
merged 2 commits into from
Jul 27, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
158 changes: 112 additions & 46 deletions pkgs/applications/office/jabref/default.nix
Original file line number Diff line number Diff line change
@@ -1,73 +1,139 @@
{ lib, stdenv, fetchurl, makeWrapper, makeDesktopItem, wrapGAppsHook, gtk3, gsettings-desktop-schemas
, zlib , libX11, libXext, libXi, libXrender, libXtst, libGL, alsa-lib, cairo, freetype, pango, gdk-pixbuf, glib }:
{ lib
, stdenv
, fetchFromGitHub
, makeWrapper
, makeDesktopItem
, copyDesktopItems
, unzip
, xdg-utils
, jdk
, gradle
, perl
}:

stdenv.mkDerivation rec {
version = "5.5";
version = "5.6";
pname = "jabref";

src = fetchurl {
url = "https://github.com/JabRef/jabref/releases/download/v${version}/JabRef-${version}-portable_linux.tar.gz";
sha256 = "sha256-9MHNehyAmu7CiBp1rgb4zTkSqmjXm2tcmiGKFBFapKI=";
src = fetchFromGitHub {
owner = "JabRef";
repo = "jabref";
rev = "v${version}";
hash = "sha256-w3F1td7KmdSor/2vKar3w17bChe1yH7JMobOaCjZqd4=";
};

preferLocalBuild = true;
desktopItems = [
(makeDesktopItem {
comment = meta.description;
name = "jabref";
desktopName = "JabRef";
genericName = "Bibliography manager";
categories = [ "Office" ];
icon = "jabref";
exec = "jabref";
})
];

desktopItem = makeDesktopItem {
comment = meta.description;
name = "jabref";
desktopName = "JabRef";
genericName = "Bibliography manager";
categories = [ "Office" ];
icon = "jabref";
exec = "jabref";
deps = stdenv.mkDerivation {
pname = "${pname}-deps";
inherit src version;

postPatch = ''
sed -i -e '/testImplementation/d' -e '/testRuntimeOnly/d' build.gradle
echo 'dependencyLocking { lockAllConfigurations() }' >> build.gradle
cp ${./gradle.lockfile} ./
'';

nativeBuildInputs = [ gradle perl ];
buildPhase = ''
export GRADLE_USER_HOME=$(mktemp -d)
gradle --no-daemon downloadDependencies
'';
# perl code mavenizes pathes (com.squareup.okio/okio/1.13.0/a9283170b7305c8d92d25aff02a6ab7e45d06cbe/okio-1.13.0.jar -> com/squareup/okio/okio/1.13.0/okio-1.13.0.jar)
installPhase = ''
find $GRADLE_USER_HOME/caches/modules-2 -type f -regex '.*\.\(jar\|pom\)' \
| perl -pe 's#(.*/([^/]+)/([^/]+)/([^/]+)/[0-9a-f]{30,40}/([^/\s]+))$# ($x = $2) =~ tr|\.|/|; "install -Dm444 $1 \$out/$x/$3/$4/''${\($5 =~ s/-jvm//r)}" #e' \
| sh
'';
# Don't move info to share/
forceShare = [ "dummy" ];
outputHashMode = "recursive";
outputHash = {
x86_64-linux = "sha256-ySGXZM9LCJUjGCrKMc+5I6duEbmSsp3tU3t/o5nM+5M=";
aarch64-linux = "sha256-mfWyGGBqjRQ8q9ddR57O2rwtby2T1H6Ra2m0JGVZ1Zs=";
}.${stdenv.hostPlatform.system} or (throw "Unsupported system ${stdenv.hostPlatform.system}");
};

nativeBuildInputs = [ makeWrapper wrapGAppsHook ];
buildInputs = [ gsettings-desktop-schemas ] ++ systemLibs;
preBuild = ''
# Include CSL styles and locales in our build
cp -r buildres/csl/* src/main/resources/

# Use the local packages from -deps
sed -i -e '/repositories {/a maven { url uri("${deps}") }' \
build.gradle \
buildSrc/build.gradle \
settings.gradle
'';

nativeBuildInputs = [
jdk
gradle
makeWrapper
copyDesktopItems
unzip
];

buildPhase = ''
runHook preBuild

systemLibs = [ gtk3 zlib libX11 libXext libXi libXrender libXtst libGL alsa-lib cairo freetype pango gdk-pixbuf glib ];
systemLibPaths = lib.makeLibraryPath systemLibs;
export GRADLE_USER_HOME=$(mktemp -d)
gradle \
--offline \
--no-daemon \
-PprojVersion="${version}" \
-PprojVersionInfo="${version} NixOS" \
assemble

runHook postBuild
'';

installPhase = ''
mkdir -p $out/share/java $out/share/icons
runHook preInstall

cp -r lib $out/lib
install -dm755 $out/share/java/jabref
install -Dm644 LICENSE.md $out/share/licenses/jabref/LICENSE.md
install -Dm644 src/main/resources/icons/jabref.svg $out/share/pixmaps/jabref.svg

for f in $out/lib/runtime/bin/j*; do
patchelf \
--set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
--set-rpath "${ lib.makeLibraryPath [ zlib ]}:$out/lib/runtime/lib:$out/lib/runtime/lib/server" $f
done
# script to support browser extensions
install -Dm755 buildres/linux/jabrefHost.py $out/lib/jabrefHost.py
# This can be removed in the next version
sed -i -e "/importBibtex/s/{}/'{}'/" $out/lib/jabrefHost.py
install -Dm644 buildres/linux/native-messaging-host/firefox/org.jabref.jabref.json $out/lib/mozilla/native-messaging-hosts/org.jabref.jabref.json
sed -i -e "s|/opt/jabref|$out|" $out/lib/mozilla/native-messaging-hosts/org.jabref.jabref.json

for f in $out/lib/runtime/lib/*.so; do
patchelf \
--set-rpath "${systemLibPaths}:$out/lib/runtime/lib:$out/lib/runtime/lib/server" $f
done
# Resources in the jar can't be found, workaround copied from AUR
cp -r build/resources $out/share/java/jabref

# patching the libs in the JImage runtime image is quite impossible as there is no documented way
# of rebuilding the image after it has been extracted
# the image format itself is "intendedly not documented" - maybe one of the reasons the
# devolpers constantly broke "jimage recreate" and dropped it in OpenJDK 9 Build 116 Early Access
# so, for now just copy the image and provide our lib paths through the wrapper
# workaround for https://github.com/NixOS/nixpkgs/issues/162064
tar xf build/distributions/JabRef-${version}.tar -C $out --strip-components=1
unzip $out/lib/javafx-web-18-linux${lib.optionalString stdenv.isAarch64 "-aarch64"}.jar libjfxwebkit.so -d $out/lib/

makeWrapper $out/lib/runtime/bin/java $out/bin/jabref \
--add-flags '-Djava.library.path=${systemLibPaths}' --add-flags "-p $out/lib/app -m org.jabref/org.jabref.JabRefLauncher" \
--prefix LD_LIBRARY_PATH : '${systemLibPaths}'
wrapProgram $out/bin/JabRef \
--prefix PATH : ${lib.makeBinPath [ xdg-utils ]} \
--set JAVA_HOME "${jdk}" \
--set JAVA_OPTS "-Djava.library.path=$out/lib/ --patch-module org.jabref=$out/share/java/jabref/resources/main"

cp -r ${desktopItem}/share/applications $out/share/
# lowercase alias (for convenience and required for browser extensions)
ln -sf $out/bin/JabRef $out/bin/jabref

# we still need to unpack the runtime image to get the icon
mkdir unpacked
$out/lib/runtime/bin/jimage extract --dir=./unpacked lib/runtime/lib/modules
cp unpacked/org.jabref/icons/jabref.svg $out/share/icons/jabref.svg
runHook postInstall
'';

meta = with lib; {
broken = (stdenv.isLinux && stdenv.isAarch64);
description = "Open source bibliography reference manager";
homepage = "https://www.jabref.org";
license = licenses.gpl2;
platforms = platforms.unix;
maintainers = [ maintainers.gebner ];
platforms = [ "x86_64-linux" "aarch64-linux" ];
maintainers = with maintainers; [ gebner linsui ];
};
}
Loading