Unverified Commit ed2b1fe0 authored by Ryan Lahfa's avatar Ryan Lahfa Committed by GitHub
Browse files

Merge pull request #261113 from lilyinstarlight/fix/mupdf-hell

parents 6cc772a6 1227757a
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -16,11 +16,10 @@ stdenv.mkDerivation rec {

  patches = [
    (fetchpatch {
      name = "system-makedeps.patch";
      url = "https://aur.archlinux.org/cgit/aur.git/plain/system-makedeps.patch?h=llpp&id=0d2913056aaf3dbf7431e57b7b08b55568ba076c";
      hash = "sha256-t9PLXsM8+exCeYqJBe0LSDK0D2rpktmozS8qNcEAcHo=";
      name = "system-makedeps-and-ocaml5.patch";
      url = "https://aur.archlinux.org/cgit/aur.git/plain/system-makedeps-and-ocaml5.patch?h=llpp&id=32955e115f914bb96348d288f9af9c6e3e80a02b";
      hash = "sha256-3rcPsR+M8Jx7M8GHUIsw0WNBvp6aE7BcPr4yk2vT9Ik=";
    })
    ./fix-mupdf.patch
  ];

  postPatch = ''
+0 −13
Original line number Diff line number Diff line
--- a/link.c
+++ b/link.c
@@ -1522,8 +1522,9 @@ static void *mainloop (void UNUSED_ATTR *unused)
             if (pdf && nameddest && *nameddest) {
                 fz_point xy;
                 struct pagedim *pdim;
-                int pageno = pdf_lookup_anchor (state.ctx, pdf, nameddest,
+                fz_location location = fz_resolve_link (state.ctx, state.doc, nameddest,
                                                 &xy.x, &xy.y);
+                int pageno = location.page;
                 pdim = pdimofpageno (pageno);
                 xy = fz_transform_point (xy, pdim->ctm);
                 printd ("a %d %d %d", pageno, (int) xy.x, (int) xy.y);
+13 −0
Original line number Diff line number Diff line
diff --git a/scripts/wrap/cpp.py b/scripts/wrap/cpp.py
index 51ac5f1..b5c0b5a 100644
--- a/scripts/wrap/cpp.py
+++ b/scripts/wrap/cpp.py
@@ -4595,7 +4595,7 @@ def cpp_source(
                     */
                     typedef unsigned long size_t;
                     '''))
-            if state.state_.macos:
+            if state.state_.linux or state.state_.macos:
                 f.write( textwrap.dedent('''
                     /*
                     Workaround on MacOS: we need to define fixed-size int types
+55 −21
Original line number Diff line number Diff line
{ stdenv
, lib
, fetchurl
, fetchpatch
, fetchFromGitHub
, copyDesktopItems
, makeDesktopItem
@@ -26,19 +25,26 @@
, enableGL ? true
, freeglut
, libGLU
, enableOcr ? false
, leptonica
, tesseract
, enableCxx ? false
, python3
, enablePython ? false
, which
, swig
, xcbuild
, gitUpdater

# for passthru.tests
, cups-filters
, python3
, zathura
, mupdf
}:
let

  # OpenJPEG version is hardcoded in package source
  openJpegVersion = with stdenv;
    lib.versions.majorMinor (lib.getVersion openjpeg);
assert enablePython -> enableCxx;

let

  freeglut-mupdf = freeglut.overrideAttrs (old: rec {
    pname = "freeglut-mupdf";
@@ -53,35 +59,46 @@ let

in
stdenv.mkDerivation rec {
  version = "1.23.0";
  version = "1.23.5";
  pname = "mupdf";

  src = fetchurl {
    url = "https://mupdf.com/downloads/archive/${pname}-${version}-source.tar.gz";
    sha256 = "sha256-3kFAaS5pMULDEeAwrBVuOO4XXXq2wb4QxcmuljhGFk4=";
    sha256 = "sha256-blZ5zfqu+cfoniljlSIM4sEz7T3K1RpHhmczbG6uxwY=";
  };

  patches = [ ./0001-Use-command-v-in-favor-of-which.patch
              ./0002-Add-Darwin-deps.patch
              ./0003-Fix-cpp-build.patch
            ];

  postPatch = ''
    sed -i "s/__OPENJPEG__VERSION__/${openJpegVersion}/" source/fitz/load-jpx.c
    substituteInPlace Makerules --replace "(shell pkg-config" "(shell $PKG_CONFIG"
  '';

  # Use shared libraries to decrease size
  buildFlags = [ "shared" ];
    patchShebangs scripts/mupdfwrap.py

    # slip in makeFlags when building bindings
    sed -i -e 's/^\( *make_args *=\)/\1 """ $(echo ''${makeFlagsArray[@]@Q})"""/' scripts/wrap/__main__.py

    # fix libclang unnamed struct format
    for wrapper in ./scripts/wrap/{cpp,state}.py; do
      substituteInPlace "$wrapper" --replace 'struct (unnamed' '(unnamed struct'
    done
  '';

  makeFlags = [
    "prefix=$(out)"
    "shared=yes"
    "USE_SYSTEM_LIBS=yes"
    "PKG_CONFIG=${buildPackages.pkg-config}/bin/${buildPackages.pkg-config.targetPrefix}pkg-config"
  ] ++ lib.optionals (!enableX11) [ "HAVE_X11=no" ]
    ++ lib.optionals (!enableGL) [ "HAVE_GLUT=no" ];
    ++ lib.optionals (!enableGL) [ "HAVE_GLUT=no" ]
    ++ lib.optionals (enableOcr) [ "USE_TESSERACT=yes" ];

  nativeBuildInputs = [ pkg-config ]
    ++ lib.optional (enableGL || enableX11) copyDesktopItems
    ++ lib.optionals (enableCxx || enablePython) [ python3 python3.pkgs.setuptools python3.pkgs.libclang ]
    ++ lib.optionals (enablePython) [ which swig ]
    ++ lib.optional stdenv.isDarwin desktopToDarwinBundle;

  buildInputs = [ freetype harfbuzz openjpeg jbig2dec libjpeg gumbo ]
@@ -94,6 +111,7 @@ stdenv.mkDerivation rec {
      else
        [ freeglut-mupdf libGLU ]
    )
    ++ lib.optionals enableOcr [ leptonica tesseract ]
  ;
  outputs = [ "bin" "dev" "out" "man" "doc" ];

@@ -102,6 +120,12 @@ stdenv.mkDerivation rec {
    rm -rf thirdparty/{curl,freetype,glfw,harfbuzz,jbig2dec,libjpeg,openjpeg,zlib}
  '';

  postBuild = lib.optionalString (enableCxx || enablePython) ''
    for dir in build/*; do
      ./scripts/mupdfwrap.py -d "$dir" -b ${lib.optionalString (enableCxx) "01"}${lib.optionalString (enablePython) "23"}
    done
  '';

  desktopItems = [
    (makeDesktopItem {
      name = pname;
@@ -136,7 +160,7 @@ stdenv.mkDerivation rec {
    Name: mupdf
    Description: Library for rendering PDF documents
    Version: ${version}
    Libs: -L$out/lib -lmupdf -lmupdf-third
    Libs: -L$out/lib -lmupdf
    Cflags: -I$dev/include
    EOF

@@ -148,7 +172,16 @@ stdenv.mkDerivation rec {
    ln -s "$bin/bin/mupdf-gl" "$bin/bin/mupdf"
  '' else lib.optionalString (enableX11) ''
    ln -s "$bin/bin/mupdf-x11" "$bin/bin/mupdf"
  '');
  '') + (lib.optionalString (enableCxx) ''
    cp platform/c++/include/mupdf/*.h $out/include/mupdf
    cp build/*/libmupdfcpp.so $out/lib
  '') + (lib.optionalString (enablePython) (''
    mkdir -p $out/${python3.sitePackages}/mupdf
    cp build/*/_mupdf.so $out/${python3.sitePackages}
    cp build/*/mupdf.py $out/${python3.sitePackages}/mupdf/__init__.py
  '' + lib.optionalString (stdenv.isDarwin) ''
    install_name_tool -add_rpath $out/lib $out/${python3.sitePackages}/_mupdf.so
  ''));

  enableParallelBuilding = true;

@@ -156,6 +189,7 @@ stdenv.mkDerivation rec {
    tests = {
      inherit cups-filters zathura;
      inherit (python3.pkgs) pikepdf pymupdf;
      mupdf-all = mupdf.override { enableCurl = true; enableGL = true; enableOcr = true; enableCxx = true; enablePython = true; };
    };

    updateScript = gitUpdater {
@@ -169,7 +203,7 @@ stdenv.mkDerivation rec {
    description = "Lightweight PDF, XPS, and E-book viewer and toolkit written in portable C";
    changelog = "https://git.ghostscript.com/?p=mupdf.git;a=blob_plain;f=CHANGES;hb=${version}";
    license = licenses.agpl3Plus;
    maintainers = with maintainers; [ vrthra fpletz ];
    maintainers = with maintainers; [ vrthra fpletz lilyinstarlight ];
    platforms = platforms.unix;
    mainProgram = "mupdf";
  };
+2 −1
Original line number Diff line number Diff line
@@ -58,7 +58,8 @@ stdenv.mkDerivation (finalAttrs: {

  postPatch = ''
    substituteInPlace pdf_viewer_build_config.pro \
      --replace "-lmupdf-threads" "-lgumbo -lharfbuzz -lfreetype -ljbig2dec -ljpeg -lopenjp2"
      --replace "-lmupdf-threads" "-lgumbo -lharfbuzz -lfreetype -ljbig2dec -ljpeg -lopenjp2" \
      --replace "-lmupdf-third" ""
    substituteInPlace pdf_viewer/main.cpp \
      --replace "/usr/share/sioyek" "$out/share" \
      --replace "/etc/sioyek" "$out/etc"
Loading