Unverified Commit 64d2a9d4 authored by Aleksana's avatar Aleksana Committed by GitHub
Browse files

pdfsam-basic: build from source (#469571)

parents 51572cb1 d46a735b
Loading
Loading
Loading
Loading
+85 −63
Original line number Diff line number Diff line
{
  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

    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[@]}" \
         --set JAVA_HOME ${temurin-jre-bin-21} \
         --set PDFSAM_JAVA_PATH ${temurin-jre-bin-21} \
         --prefix LD_LIBRARY_PATH : ${
      --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
          libxxf86vm
          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"
        ]
           )
         }
      }" \
      --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";
@@ -92,6 +111,9 @@ stdenv.mkDerivation (finalAttrs: {
    ];
    license = lib.licenses.agpl3Plus;
    platforms = [ "x86_64-linux" ];
    maintainers = with lib.maintainers; [ _1000101 ];
    maintainers = with lib.maintainers; [
      doronbehar
      _1000101
    ];
  };
})
}