Skip to content

Commit 64d2a9d

Browse files
authored
pdfsam-basic: build from source (NixOS#469571)
2 parents 51572cb + d46a735 commit 64d2a9d

File tree

1 file changed

+85
-63
lines changed

1 file changed

+85
-63
lines changed
Lines changed: 85 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,86 +1,105 @@
11
{
22
lib,
3-
stdenv,
3+
maven,
44
makeDesktopItem,
5-
fetchurl,
5+
fetchFromGitHub,
66
temurin-jre-bin-21,
7-
javaPackages,
8-
wrapGAppsHook3,
9-
dpkg,
10-
xorg,
7+
temurin-bin-21,
8+
glib,
9+
libxxf86vm,
10+
libxtst,
1111
gtk3,
1212
libGL,
13-
alsa-lib,
14-
nix-update-script,
15-
desktop-file-utils,
13+
14+
# native
15+
copyDesktopItems,
16+
wrapGAppsHook3,
17+
gettext,
1618
}:
1719

18-
stdenv.mkDerivation (finalAttrs: {
20+
let
21+
mavenOurJdk = maven.override {
22+
jdk_headless = temurin-jre-bin-21;
23+
};
24+
in
25+
mavenOurJdk.buildMavenPackage rec {
1926
pname = "pdfsam-basic";
2027
version = "5.4.1";
2128

22-
src = fetchurl {
23-
url = "https://github.com/torakiki/pdfsam/releases/download/v${finalAttrs.version}/pdfsam-basic_${finalAttrs.version}-1_amd64.deb";
24-
hash = "sha256-iM0avC0YwxaB2prWbiKJZ9Fzd/HcdDWJg5IWRmNlVkM=";
29+
src = fetchFromGitHub {
30+
owner = "torakiki";
31+
repo = "pdfsam";
32+
rev = "v${version}";
33+
hash = "sha256-9IzYnWYE0OD1b4xybl3NdaBvVSw6C4+1ORUnrotqSuc=";
2534
};
2635

36+
mvnParameters = "-Drelease -Dmaven.test.skip";
37+
mvnHash = "sha256-Y/wz/XuzDpT7qnk/pRBkv6PeI0GmqKXh54gqb7cWHHw=";
38+
39+
buildInputs = [
40+
glib
41+
libxxf86vm
42+
];
43+
2744
nativeBuildInputs = [
28-
dpkg
45+
# Used as the main java implementation. Also the build relies upon jlink
46+
# which is included in this package.
47+
temurin-bin-21
48+
gettext
2949
wrapGAppsHook3
30-
desktop-file-utils
50+
copyDesktopItems
3151
];
3252

3353
installPhase = ''
3454
runHook preInstall
35-
desktop-file-edit usr/share/applications/pdfsam-basic.desktop \
36-
--set-key="Exec" --set-value="pdfsam-basic %F" \
37-
--set-key="Path" --set-value="$out/share/pdfsam-basic" \
38-
--set-icon="pdfsam-basic"
39-
mkdir $out
40-
cp -r usr/share $out/share
41-
mkdir $out/share/pdfsam-basic
42-
cp -r opt/pdfsam-basic/lib $out/share/pdfsam-basic/lib
43-
install -Dm0644 opt/pdfsam-basic/splash.png $out/share/pdfsam-basic/splash.png
44-
install -Dm0644 opt/pdfsam-basic/icon.svg $out/share/icons/hicolor/scalable/apps/pdfsam-basic.svg
45-
mkdir $out/bin
46-
makeWrapper ${temurin-jre-bin-21}/bin/java $out/bin/pdfsam-basic \
47-
"''${gappsWrapperArgs[@]}" \
48-
--set JAVA_HOME ${temurin-jre-bin-21} \
49-
--set PDFSAM_JAVA_PATH ${temurin-jre-bin-21} \
50-
--prefix LD_LIBRARY_PATH : ${
51-
lib.makeLibraryPath [
52-
javaPackages.openjfx25 # PDFSam Basic requires JDK 21 and JavaFX 23 https://github.com/torakiki/pdfsam/issues/785#issuecomment-3446564717
53-
xorg.libXxf86vm
54-
xorg.libXtst
55-
gtk3
56-
libGL
57-
alsa-lib
58-
]
59-
} \
60-
--add-flags ${
61-
lib.escapeShellArg (
62-
lib.escapeShellArgs [
63-
"--enable-preview"
64-
"--module-path"
65-
"${placeholder "out"}/share/pdfsam-basic/lib"
66-
"--module"
67-
"org.pdfsam.basic/org.pdfsam.basic.App"
68-
"-Xmx512M"
69-
"-splash:${placeholder "out"}/share/pdfsam-basic/splash.png"
70-
"-Dapp.name=\"pdfsam-basic\""
71-
"-Dapp.pid=\"$$\""
72-
"-Dapp.home=\"${placeholder "out"}/share/pdfsam-basic\""
73-
"-Dbasedir=\"${placeholder "out"}/share/pdfsam-basic\""
74-
"-Dprism.lcdtext=false"
75-
]
76-
)
77-
}
55+
56+
install -Dm0644 pdfsam-basic/src/deb/icon.svg $out/share/icons/pdfsam-basic.svg
57+
mkdir $out/lib
58+
tar -xf pdfsam-basic/target/pdfsam-basic-${version}-linux-x64.tar.gz -C $out/lib
59+
mv $out/lib/pdfsam-basic-${version}-linux-x64 $out/lib/pdfsam-basic
60+
# Based upon upstream's default $out/lib/pdfsam-basic/bin/pdfsam.sh file,
61+
# but with Nix specific dynamically loaded libraries
62+
makeWrapper ${temurin-jre-bin-21}/bin/java $out/bin/pdfsam-basic \
63+
"''${gappsWrapperArgs[@]}" \
64+
--prefix LD_LIBRARY_PATH : "${
65+
lib.makeLibraryPath [
66+
libxxf86vm
67+
libxtst
68+
gtk3
69+
libGL
70+
]
71+
}" \
72+
--argv0 pdfsam-basic \
73+
--add-flags --enable-preview \
74+
--add-flags "--module-path $out/lib/pdfsam-basic/lib" \
75+
--add-flags "--module org.pdfsam.basic/org.pdfsam.basic.App" \
76+
--add-flags "-Xmx512M" \
77+
--add-flags "-Dprism.lcdtext=false" \
78+
--add-flags "-splash:$out/lib/pdfsam-basic/splash.png" \
79+
--add-flags "-Dapp.name=pdfsam-basic" \
80+
--add-flags "-Dapp.home=$out/lib/pdfsam-basic" \
81+
--add-flags "-Dbasedir=$out/lib/pdfsam-basic"
82+
# Remove bundled executables, shared objects etc, that are not needed on
83+
# Nix (we just need the jar files).
84+
rm -r $out/lib/pdfsam-basic/{doc,bin,runtime}
85+
7886
runHook postInstall
7987
'';
8088

81-
dontWrapGApps = true;
82-
83-
passthru.updateScript = nix-update-script { };
89+
# Based on upstream's desktop file:
90+
# https://github.com/torakiki/pdfsam/blob/master/pdfsam-basic/src/deb/pdfsam-basic.desktop
91+
desktopItems = [
92+
(makeDesktopItem {
93+
name = "PDFsam Basic";
94+
exec = "pdfsam-basic";
95+
icon = "pdfsam-basic";
96+
comment = meta.description;
97+
desktopName = "PDFsam Basic";
98+
genericName = "PDF Split and Merge";
99+
mimeTypes = [ "application/pdf" ];
100+
categories = [ "Office" ];
101+
})
102+
];
84103

85104
meta = {
86105
homepage = "https://github.com/torakiki/pdfsam";
@@ -92,6 +111,9 @@ stdenv.mkDerivation (finalAttrs: {
92111
];
93112
license = lib.licenses.agpl3Plus;
94113
platforms = [ "x86_64-linux" ];
95-
maintainers = with lib.maintainers; [ _1000101 ];
114+
maintainers = with lib.maintainers; [
115+
doronbehar
116+
_1000101
117+
];
96118
};
97-
})
119+
}

0 commit comments

Comments
 (0)