Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

mupdf: 1.23.0 -> 1.23.5; only build and install shared libraries #261113

Merged
merged 9 commits into from
Nov 15, 2023
7 changes: 3 additions & 4 deletions pkgs/applications/misc/llpp/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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 = ''
Expand Down
13 changes: 0 additions & 13 deletions pkgs/applications/misc/llpp/fix-mupdf.patch

This file was deleted.

13 changes: 13 additions & 0 deletions pkgs/applications/misc/mupdf/0003-Fix-cpp-build.patch
Original file line number Diff line number Diff line change
@@ -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
76 changes: 55 additions & 21 deletions pkgs/applications/misc/mupdf/default.nix
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
{ stdenv
, lib
, fetchurl
, fetchpatch
, fetchFromGitHub
, copyDesktopItems
, makeDesktopItem
Expand All @@ -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";
Expand All @@ -53,47 +59,59 @@ 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 ]
++ lib.optional stdenv.isDarwin xcbuild
++ 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" ];

Expand All @@ -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;
Expand Down Expand Up @@ -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

Expand All @@ -148,14 +172,24 @@ 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;

passthru = {
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 {
Expand All @@ -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";
};
Expand Down
3 changes: 2 additions & 1 deletion pkgs/applications/misc/sioyek/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
4 changes: 4 additions & 0 deletions pkgs/applications/misc/zathura/pdf-mupdf/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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";
};
Expand Down
2 changes: 1 addition & 1 deletion pkgs/applications/office/beamerpresenter/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
10 changes: 4 additions & 6 deletions pkgs/desktops/arcan/arcan/default.nix
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
{ lib
, stdenv
, fetchFromGitHub
, fetchgit
, SDL2
, cmake
, espeak
Expand All @@ -21,18 +20,16 @@
, libXfixes
, libdrm
, libffi
, libjpeg
lilyinstarlight marked this conversation as resolved.
Show resolved Hide resolved
, libusb1
, libuvc
, libvlc
, libvncserver
, libxcb
, libxkbcommon
, lua5_1
, luajit
, makeWrapper
, mesa
, mupdf
, ninja
, openal
, openjpeg
, pcre2
Expand Down Expand Up @@ -121,16 +118,17 @@ stdenv.mkDerivation (finalAttrs: {
libXfixes
libdrm
libffi
libjpeg
libusb1
libuvc
libvlc
libvncserver
libxcb
libxkbcommon
mesa
mupdf.dev
mupdf
openal
openjpeg.dev
openjpeg
pcre2
sqlite
tesseract
Expand Down
56 changes: 56 additions & 0 deletions pkgs/development/python-modules/libclang/default.nix
Original file line number Diff line number Diff line change
@@ -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 ];
};
}
Loading