Merge pull request #261113 from lilyinstarlight/fix/mupdf-hell
This commit is contained in:
@@ -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 = ''
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
--- 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);
|
||||
@@ -0,0 +1,13 @@
|
||||
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
|
||||
@@ -1,7 +1,6 @@
|
||||
{ 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 ]
|
||||
@@ -89,11 +106,12 @@ stdenv.mkDerivation rec {
|
||||
++ lib.optionals enableX11 [ libX11 libXext libXi libXrandr ]
|
||||
++ lib.optionals enableCurl [ curl openssl ]
|
||||
++ lib.optionals enableGL (
|
||||
if stdenv.isDarwin then
|
||||
with darwin.apple_sdk.frameworks; [ GLUT OpenGL ]
|
||||
else
|
||||
[ freeglut-mupdf libGLU ]
|
||||
)
|
||||
if stdenv.isDarwin then
|
||||
with darwin.apple_sdk.frameworks; [ GLUT OpenGL ]
|
||||
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";
|
||||
};
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -41,6 +41,10 @@ stdenv.mkDerivation rec {
|
||||
|
||||
PKG_CONFIG_ZATHURA_PLUGINDIR= "lib/zathura";
|
||||
|
||||
postPatch = ''
|
||||
sed -i -e '/^mupdfthird =/d' -e 's/, mupdfthird//g' meson.build
|
||||
'';
|
||||
|
||||
passthru.updateScript = gitUpdater {
|
||||
url = "https://git.pwmt.org/pwmt/zathura-pdf-mupdf.git";
|
||||
};
|
||||
|
||||
@@ -72,7 +72,7 @@ stdenv.mkDerivation rec {
|
||||
"-DUSE_POPPLER=${if usePoppler then "ON" else "OFF"}"
|
||||
"-DUSE_MUPDF=${if useMupdf then "ON" else "OFF"}"
|
||||
"-DUSE_QTPDF=OFF"
|
||||
"-DLINK_MUPDF_THIRD=ON"
|
||||
"-DLINK_MUPDF_THIRD=OFF"
|
||||
"-DUSE_EXTERNAL_RENDERER=${if useExternalRenderer then "ON" else "OFF"}"
|
||||
"-DLINK_MUJS=OFF"
|
||||
"-DLINK_GUMBO=ON"
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{ lib
|
||||
, stdenv
|
||||
, fetchFromGitHub
|
||||
, fetchgit
|
||||
, SDL2
|
||||
, cmake
|
||||
, espeak
|
||||
@@ -21,18 +20,16 @@
|
||||
, libXfixes
|
||||
, libdrm
|
||||
, libffi
|
||||
, libjpeg
|
||||
, libusb1
|
||||
, libuvc
|
||||
, libvlc
|
||||
, libvncserver
|
||||
, libxcb
|
||||
, libxkbcommon
|
||||
, lua5_1
|
||||
, luajit
|
||||
, makeWrapper
|
||||
, mesa
|
||||
, mupdf
|
||||
, ninja
|
||||
, openal
|
||||
, openjpeg
|
||||
, pcre2
|
||||
@@ -121,6 +118,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
libXfixes
|
||||
libdrm
|
||||
libffi
|
||||
libjpeg
|
||||
libusb1
|
||||
libuvc
|
||||
libvlc
|
||||
@@ -128,9 +126,9 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
libxcb
|
||||
libxkbcommon
|
||||
mesa
|
||||
mupdf.dev
|
||||
mupdf
|
||||
openal
|
||||
openjpeg.dev
|
||||
openjpeg
|
||||
pcre2
|
||||
sqlite
|
||||
tesseract
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
{ lib
|
||||
, buildPythonPackage
|
||||
, llvmPackages
|
||||
, setuptools
|
||||
, writeText
|
||||
}:
|
||||
|
||||
let
|
||||
libclang = llvmPackages.libclang;
|
||||
|
||||
pyproject_toml = writeText "pyproject.toml" ''
|
||||
[build-system]
|
||||
requires = ["setuptools>=42", "wheel"]
|
||||
build-backend = "setuptools.build_meta"
|
||||
'';
|
||||
|
||||
setup_cfg = writeText "setup.cfg" ''
|
||||
[metadata]
|
||||
name = clang
|
||||
version = ${libclang.version}
|
||||
|
||||
[options]
|
||||
packages = clang
|
||||
'';
|
||||
in buildPythonPackage {
|
||||
pname = "libclang";
|
||||
format = "pyproject";
|
||||
|
||||
inherit (libclang) version src;
|
||||
|
||||
buildInputs = [ setuptools ];
|
||||
|
||||
postUnpack = ''
|
||||
# set source root to python bindings
|
||||
if [ -e "$sourceRoot/clang/bindings/python" ]; then
|
||||
# LLVM 13+ puts clang sources in subdirectory instead of plain tarball
|
||||
sourceRoot="$sourceRoot/clang/bindings/python"
|
||||
else
|
||||
sourceRoot="$sourceRoot/bindings/python"
|
||||
fi
|
||||
'';
|
||||
|
||||
postPatch = ''
|
||||
# link in our own build info to build as a python package
|
||||
ln -s ${pyproject_toml} ./pyproject.toml
|
||||
ln -s ${setup_cfg} ./setup.cfg
|
||||
|
||||
# set passed libclang for runtime
|
||||
echo 'Config.set_library_path("${lib.getLib libclang}/lib")' >>./clang/cindex.py
|
||||
'';
|
||||
|
||||
meta = libclang.meta // {
|
||||
description = "Python bindings for the C language family frontend for LLVM";
|
||||
maintainers = with lib.maintainers; [ lilyinstarlight ];
|
||||
};
|
||||
}
|
||||
@@ -2,9 +2,10 @@
|
||||
, stdenv
|
||||
, buildPythonPackage
|
||||
, pythonOlder
|
||||
, fetchPypi
|
||||
, fetchFromGitHub
|
||||
, pytestCheckHook
|
||||
, python
|
||||
, swig
|
||||
, xcbuild
|
||||
, mupdf
|
||||
, freetype
|
||||
, harfbuzz
|
||||
@@ -13,33 +14,32 @@
|
||||
, libjpeg_turbo
|
||||
, gumbo
|
||||
, memstreamHook
|
||||
, fonttools
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
let
|
||||
# PyMuPDF needs the C++ bindings generated
|
||||
mupdf-cxx = mupdf.override { enableOcr = true; enableCxx = true; enablePython = true; };
|
||||
in buildPythonPackage rec {
|
||||
pname = "pymupdf";
|
||||
version = "1.23.3";
|
||||
version = "1.23.6";
|
||||
format = "setuptools";
|
||||
|
||||
disabled = pythonOlder "3.7";
|
||||
|
||||
src = fetchPypi {
|
||||
pname = "PyMuPDF";
|
||||
inherit version;
|
||||
hash = "sha256-AhR4rmx26IWSQdu5cGEskIColX2L1pe7oLRTHcHPT4c=";
|
||||
src = fetchFromGitHub {
|
||||
owner = "pymupdf";
|
||||
repo = "PyMuPDF";
|
||||
rev = version;
|
||||
hash = "sha256-60KT5+EGP+s7HD4UIeaf9x2QVNU9IUbC5WKEJbrIBCI=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace setup.py \
|
||||
--replace '/usr/include/mupdf' ${mupdf.dev}/include/mupdf
|
||||
'';
|
||||
nativeBuildInputs = [
|
||||
pytestCheckHook
|
||||
swig
|
||||
] ++ lib.optionals stdenv.isDarwin [
|
||||
xcbuild
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
mupdf
|
||||
freetype
|
||||
harfbuzz
|
||||
openjpeg
|
||||
@@ -50,10 +50,40 @@ buildPythonPackage rec {
|
||||
memstreamHook
|
||||
];
|
||||
|
||||
doCheck = false;
|
||||
propagatedBuildInputs = [
|
||||
mupdf-cxx
|
||||
];
|
||||
|
||||
env = {
|
||||
# force using system MuPDF (must be defined in environment and empty)
|
||||
PYMUPDF_SETUP_MUPDF_BUILD = "";
|
||||
# provide MuPDF paths
|
||||
PYMUPDF_MUPDF_LIB = "${lib.getLib mupdf-cxx}/lib";
|
||||
PYMUPDF_MUPDF_INCLUDE = "${lib.getDev mupdf-cxx}/include";
|
||||
};
|
||||
|
||||
# TODO: manually add mupdf rpath until upstream fixes it
|
||||
postInstall = lib.optionalString stdenv.isDarwin ''
|
||||
for lib in */*.so $out/${python.sitePackages}/*/*.so; do
|
||||
install_name_tool -add_rpath ${lib.getLib mupdf-cxx}/lib "$lib"
|
||||
done
|
||||
'';
|
||||
|
||||
checkInputs = [
|
||||
fonttools
|
||||
];
|
||||
|
||||
disabledTests = [
|
||||
# fails for indeterminate reasons
|
||||
"test_color_count"
|
||||
] ++ lib.optionals stdenv.isDarwin [
|
||||
# darwin does not support OCR right now
|
||||
"test_tesseract"
|
||||
];
|
||||
|
||||
pythonImportsCheck = [
|
||||
"fitz"
|
||||
"fitz_new"
|
||||
];
|
||||
|
||||
meta = with lib; {
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
, setuptools
|
||||
, toposort
|
||||
, wheezy-template
|
||||
, libclang
|
||||
, llvmPackages
|
||||
, gst_all_1
|
||||
}:
|
||||
|
||||
@@ -100,9 +100,9 @@ buildPythonApplication rec {
|
||||
postPatch = ''
|
||||
substituteInPlace hotdoc/extensions/c/c_extension.py \
|
||||
--replace "shutil.which('llvm-config')" 'True' \
|
||||
--replace "subprocess.check_output(['llvm-config', '--version']).strip().decode()" '"${libclang.version}"' \
|
||||
--replace "subprocess.check_output(['llvm-config', '--prefix']).strip().decode()" '"${libclang.lib}"' \
|
||||
--replace "subprocess.check_output(['llvm-config', '--libdir']).strip().decode()" '"${libclang.lib}/lib"'
|
||||
--replace "subprocess.check_output(['llvm-config', '--version']).strip().decode()" '"${llvmPackages.libclang.version}"' \
|
||||
--replace "subprocess.check_output(['llvm-config', '--prefix']).strip().decode()" '"${llvmPackages.libclang.lib}"' \
|
||||
--replace "subprocess.check_output(['llvm-config', '--libdir']).strip().decode()" '"${llvmPackages.libclang.lib}/lib"'
|
||||
'';
|
||||
|
||||
# Make pytest run from a temp dir to have it pick up installed package for cmark
|
||||
|
||||
@@ -6145,6 +6145,8 @@ self: super: with self; {
|
||||
inherit (pkgs) libasyncns;
|
||||
};
|
||||
|
||||
libclang = callPackage ../development/python-modules/libclang { };
|
||||
|
||||
libcloud = callPackage ../development/python-modules/libcloud { };
|
||||
|
||||
libcst = callPackage ../development/python-modules/libcst { };
|
||||
|
||||
Reference in New Issue
Block a user