pdfsam-basic: build from source

Fixes #435448 .
This commit is contained in:
Doron Behar
2025-12-10 14:11:15 +02:00
parent a61904dfa1
commit d46a735b97
+81 -62
View File
@@ -1,86 +1,105 @@
{
lib,
stdenv,
maven,
makeDesktopItem,
fetchurl,
fetchFromGitHub,
temurin-jre-bin-21,
javaPackages,
wrapGAppsHook3,
dpkg,
xorg,
temurin-bin-21,
glib,
libxxf86vm,
libxtst,
gtk3,
libGL,
alsa-lib,
nix-update-script,
desktop-file-utils,
# native
copyDesktopItems,
wrapGAppsHook3,
gettext,
}:
stdenv.mkDerivation (finalAttrs: {
let
mavenOurJdk = maven.override {
jdk_headless = temurin-jre-bin-21;
};
in
mavenOurJdk.buildMavenPackage rec {
pname = "pdfsam-basic";
version = "5.4.1";
src = fetchurl {
url = "https://github.com/torakiki/pdfsam/releases/download/v${finalAttrs.version}/pdfsam-basic_${finalAttrs.version}-1_amd64.deb";
hash = "sha256-iM0avC0YwxaB2prWbiKJZ9Fzd/HcdDWJg5IWRmNlVkM=";
src = fetchFromGitHub {
owner = "torakiki";
repo = "pdfsam";
rev = "v${version}";
hash = "sha256-9IzYnWYE0OD1b4xybl3NdaBvVSw6C4+1ORUnrotqSuc=";
};
mvnParameters = "-Drelease -Dmaven.test.skip";
mvnHash = "sha256-Y/wz/XuzDpT7qnk/pRBkv6PeI0GmqKXh54gqb7cWHHw=";
buildInputs = [
glib
libxxf86vm
];
nativeBuildInputs = [
dpkg
# Used as the main java implementation. Also the build relies upon jlink
# which is included in this package.
temurin-bin-21
gettext
wrapGAppsHook3
desktop-file-utils
copyDesktopItems
];
installPhase = ''
runHook preInstall
desktop-file-edit usr/share/applications/pdfsam-basic.desktop \
--set-key="Exec" --set-value="pdfsam-basic %F" \
--set-key="Path" --set-value="$out/share/pdfsam-basic" \
--set-icon="pdfsam-basic"
mkdir $out
cp -r usr/share $out/share
mkdir $out/share/pdfsam-basic
cp -r opt/pdfsam-basic/lib $out/share/pdfsam-basic/lib
install -Dm0644 opt/pdfsam-basic/splash.png $out/share/pdfsam-basic/splash.png
install -Dm0644 opt/pdfsam-basic/icon.svg $out/share/icons/hicolor/scalable/apps/pdfsam-basic.svg
mkdir $out/bin
makeWrapper ${temurin-jre-bin-21}/bin/java $out/bin/pdfsam-basic \
"''${gappsWrapperArgs[@]}" \
--set JAVA_HOME ${temurin-jre-bin-21} \
--set PDFSAM_JAVA_PATH ${temurin-jre-bin-21} \
--prefix LD_LIBRARY_PATH : ${
lib.makeLibraryPath [
javaPackages.openjfx25 # PDFSam Basic requires JDK 21 and JavaFX 23 https://github.com/torakiki/pdfsam/issues/785#issuecomment-3446564717
xorg.libXxf86vm
xorg.libXtst
gtk3
libGL
alsa-lib
]
} \
--add-flags ${
lib.escapeShellArg (
lib.escapeShellArgs [
"--enable-preview"
"--module-path"
"${placeholder "out"}/share/pdfsam-basic/lib"
"--module"
"org.pdfsam.basic/org.pdfsam.basic.App"
"-Xmx512M"
"-splash:${placeholder "out"}/share/pdfsam-basic/splash.png"
"-Dapp.name=\"pdfsam-basic\""
"-Dapp.pid=\"$$\""
"-Dapp.home=\"${placeholder "out"}/share/pdfsam-basic\""
"-Dbasedir=\"${placeholder "out"}/share/pdfsam-basic\""
"-Dprism.lcdtext=false"
]
)
}
install -Dm0644 pdfsam-basic/src/deb/icon.svg $out/share/icons/pdfsam-basic.svg
mkdir $out/lib
tar -xf pdfsam-basic/target/pdfsam-basic-${version}-linux-x64.tar.gz -C $out/lib
mv $out/lib/pdfsam-basic-${version}-linux-x64 $out/lib/pdfsam-basic
# Based upon upstream's default $out/lib/pdfsam-basic/bin/pdfsam.sh file,
# but with Nix specific dynamically loaded libraries
makeWrapper ${temurin-jre-bin-21}/bin/java $out/bin/pdfsam-basic \
"''${gappsWrapperArgs[@]}" \
--prefix LD_LIBRARY_PATH : "${
lib.makeLibraryPath [
libxxf86vm
libxtst
gtk3
libGL
]
}" \
--argv0 pdfsam-basic \
--add-flags --enable-preview \
--add-flags "--module-path $out/lib/pdfsam-basic/lib" \
--add-flags "--module org.pdfsam.basic/org.pdfsam.basic.App" \
--add-flags "-Xmx512M" \
--add-flags "-Dprism.lcdtext=false" \
--add-flags "-splash:$out/lib/pdfsam-basic/splash.png" \
--add-flags "-Dapp.name=pdfsam-basic" \
--add-flags "-Dapp.home=$out/lib/pdfsam-basic" \
--add-flags "-Dbasedir=$out/lib/pdfsam-basic"
# Remove bundled executables, shared objects etc, that are not needed on
# Nix (we just need the jar files).
rm -r $out/lib/pdfsam-basic/{doc,bin,runtime}
runHook postInstall
'';
dontWrapGApps = true;
passthru.updateScript = nix-update-script { };
# Based on upstream's desktop file:
# https://github.com/torakiki/pdfsam/blob/master/pdfsam-basic/src/deb/pdfsam-basic.desktop
desktopItems = [
(makeDesktopItem {
name = "PDFsam Basic";
exec = "pdfsam-basic";
icon = "pdfsam-basic";
comment = meta.description;
desktopName = "PDFsam Basic";
genericName = "PDF Split and Merge";
mimeTypes = [ "application/pdf" ];
categories = [ "Office" ];
})
];
meta = {
homepage = "https://github.com/torakiki/pdfsam";
@@ -97,4 +116,4 @@ stdenv.mkDerivation (finalAttrs: {
_1000101
];
};
})
}