diff --git a/pkgs/by-name/k2/k2pdfopt/0001-Fix-CMakeLists.patch b/pkgs/by-name/k2/k2pdfopt/0001-Fix-CMakeLists.patch new file mode 100644 index 000000000000..e1ccea1458a3 --- /dev/null +++ b/pkgs/by-name/k2/k2pdfopt/0001-Fix-CMakeLists.patch @@ -0,0 +1,37 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 365b835..4341de9 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -57,6 +57,7 @@ endif(JPEG_FOUND) + include(FindJasper) + if(JASPER_FOUND) + set(HAVE_JASPER_LIB 1) ++ set(K2PDFOPT_LIB ${K2PDFOPT_LIB} ${JASPER_LIBRARY}) + endif(JASPER_FOUND) + + # paths from willuslib/wgs.c +@@ -71,9 +72,12 @@ else() + message(STATUS "Could NOT find ghostscript executable") + endif(GHOSTSCRIPT_EXECUTABLE) + +-# willus.h +-# HAVE_GSL_LIB +- ++pkg_check_modules(GSL gsl) ++if(GSL_FOUND) ++ set(HAVE_GSL_LIB 1) ++ include_directories(SYSTEM ${GSL_INCLUDEDIR}) ++ set(K2PDFOPT_LIB ${K2PDFOPT_LIB} ${GSL_LDFLAGS}) ++endif(GSL_FOUND) + + # libfreetype6 (>= 2.3.9), libjbig2dec0, libjpeg8 (>= 8c), libx11-6, libxext6, zlib1g (>= 1:1.2.0) + # MUPDF_STATIC_LDFLAGS misses mupdf-js-none, and doubles libs ... +@@ -85,7 +89,7 @@ if(MUPDF_FOUND) + include_directories(SYSTEM ${MUPDF_INCLUDEDIR}) + message(STATUS "mupdf libraries: ${MUPDF_LDFLAGS}") + set(K2PDFOPT_LIB ${K2PDFOPT_LIB} ${MUPDF_LDFLAGS} +- -lmupdf-js-none -lopenjpeg -ljbig2dec -ljpeg -lfreetype -llcms -lgumbo ++ + ) + endif(MUPDF_FOUND) + diff --git a/pkgs/by-name/k2/k2pdfopt/package.nix b/pkgs/by-name/k2/k2pdfopt/package.nix new file mode 100644 index 000000000000..3e3aa842b21c --- /dev/null +++ b/pkgs/by-name/k2/k2pdfopt/package.nix @@ -0,0 +1,121 @@ +{ + lib, + stdenv, + runCommand, + fetchzip, + fetchurl, + fetchpatch, + fetchFromGitHub, + cmake, + jbig2dec, + libjpeg_turbo, + libpng, + makeWrapper, + pkg-config, + zlib, + enableGSL ? true, + gsl, + enableGhostScript ? true, + ghostscript, + enableMuPDF ? true, + mupdf, + enableDJVU ? true, + djvulibre, + enableLeptonica ? true, + leptonica, + # Tesseract support is broken + # See: https://github.com/NixOS/nixpkgs/issues/368349 + # Making GOCR work without Tesseract support is non-trivial + fetchDebianPatch, +}: + +# k2pdfopt requires modified versions of mupdf, leptonica, and tesseract. +# However, Debian just uses system versions with minimal fixes to k2pdfopt's +# willuslib; some fixes to mupdf and leptoanica have since been upstreamed, +# some are not relevant on Linux +# Applying the upstream changes to fresh tesseract with our glibc leads to +# k2pdfopt that crashes on launch, so we can drop tesseract or use the old +# version that k2pdfopt wants + +stdenv.mkDerivation (finalAttrs: { + pname = "k2pdfopt"; + version = "2.55"; + src = fetchzip { + url = "http://www.willus.com/k2pdfopt/src/k2pdfopt_v${finalAttrs.version}_src.zip"; + hash = "sha256-orQNDXQkkcCtlA8wndss6SiJk4+ImiFCG8XRLEg963k="; + }; + + patches = [ + ./0001-Fix-CMakeLists.patch + (fetchDebianPatch { + inherit (finalAttrs) pname; + version = "${finalAttrs.version}+ds"; + debianRevision = "3.1"; + patch = "0007-k2pdfoptlib-k2ocr.c-conditionally-enable-tesseract-r.patch"; + hash = "sha256-uJ9Gpyq64n/HKqo0hkQ2dnkSLCKNN4DedItPGzHfqR8="; + }) + (fetchDebianPatch { + inherit (finalAttrs) pname; + version = "${finalAttrs.version}+ds"; + debianRevision = "3.1"; + patch = "0009-willuslib-CMakeLists.txt-conditionally-add-source-fi.patch"; + hash = "sha256-cBSlcuhsw4YgAJtBJkKLW6u8tK5gFwWw7pZEJzVMJDE="; + }) + ]; + + postPatch = '' + substituteInPlace willuslib/bmpdjvu.c \ + --replace-fail "" "" + + # Parts of Debian patches + substituteInPlace CMakeLists.txt */CMakeLists.txt \ + --replace-fail 'cmake_minimum_required(VERSION 2.6)' \ + 'cmake_minimum_required(VERSION 3.31)' + substituteInPlace willuslib/bmpmupdf.c \ + --replace-fail 'void pdf_install_load_system_font_funcs(fz_context *ctx);' \ + 'void pdf_install_load_system_font_funcs(fz_context *ctx) {};' + substituteInPlace willuslib/wleptonica.c \ + --replace-fail 'dewarpBuildPageModel_ex(dew1,debug,fit_order);' \ + 'dewarpBuildPageModel(dew1,debug);' + + # Potential memory corruption under benign use, and cheap to fix + substituteInPlace willuslib/wfile.c \ + --replace-fail 'char cmd[MAXFILENAMELEN];' \ + 'char cmd[4*MAXFILENAMELEN];' + ''; + + nativeBuildInputs = [ + cmake + pkg-config + makeWrapper + ]; + + buildInputs = [ + jbig2dec + libjpeg_turbo + libpng + zlib + ] + ++ lib.optional enableGSL gsl + ++ lib.optional enableGhostScript ghostscript + ++ lib.optional enableMuPDF mupdf + ++ lib.optional enableDJVU djvulibre + ++ lib.optional enableLeptonica leptonica; + + cmakeFlags = [ (lib.cmakeFeature "CMAKE_C_FLAGS" "-I${finalAttrs.src}/include_mod") ]; + + installPhase = '' + install -D -m 755 k2pdfopt $out/bin/k2pdfopt + ''; + + meta = { + description = "Optimizes PDF/DJVU files for mobile e-readers (e.g. the Kindle) and smartphones"; + homepage = "http://www.willus.com/k2pdfopt"; + changelog = "https://www.willus.com/k2pdfopt/k2pdfopt_version.txt"; + license = lib.licenses.gpl3; + platforms = lib.platforms.linux; + maintainers = with lib.maintainers; [ + raskin + ]; + }; +}) diff --git a/pkgs/top-level/aliases.nix b/pkgs/top-level/aliases.nix index 287bbf8e3094..9cb6d8ea4488 100644 --- a/pkgs/top-level/aliases.nix +++ b/pkgs/top-level/aliases.nix @@ -887,7 +887,6 @@ mapAliases { jsduck = throw "jsduck has been removed, as it was broken and and unmaintained upstream."; # Added 2025-12-02 julia_19 = throw "Julia 1.9 has reached its end of life and 'julia_19' has been removed. Please use a supported version."; # Added 2025-10-29 julia_19-bin = throw "Julia 1.9 has reached its end of life and 'julia_19-bin' has been removed. Please use a supported version."; # Added 2025-10-29 - k2pdfopt = throw "'k2pdfopt' has been removed from nixpkgs as it was broken"; # Added 2025-09-27 k3s_1_30 = throw "'k3s_1_30' has been removed from nixpkgs as it has reached end of life"; # Added 2025-09-01 k3s_1_31 = throw "'k3s_1_31' has been removed from nixpkgs as it has reached end of life"; # Added 2025-12-08 kak-lsp = throw "'kak-lsp' has been renamed to/replaced by 'kakoune-lsp'"; # Converted to throw 2025-10-27