Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
1{ 2 lib, 3 stdenv, 4 fetchurl, 5 fetchpatch, 6}: 7 8stdenv.mkDerivation (finalAttrs: { 9 pname = "jbigkit"; 10 version = "2.1"; 11 12 src = fetchurl { 13 url = "https://www.cl.cam.ac.uk/~mgk25/jbigkit/download/jbigkit-${finalAttrs.version}.tar.gz"; 14 hash = "sha256-3nEGtr+vSV1oZcfdesbKE4G9EuDYFAXqgefyFnJj2TI="; 15 }; 16 17 patches = [ 18 # Archlinux patch: this helps users to reduce denial-of-service risks, as in CVE-2017-9937 19 (fetchpatch { 20 url = "https://gitlab.archlinux.org/archlinux/packaging/packages/jbigkit/-/raw/main/0013-new-jbig.c-limit-s-maxmem-maximum-decoded-image-size.patch"; 21 hash = "sha256-Yq5qCTF7KZTrm4oeWbpctb+QLt3shJUGEReZvd0ey9k="; 22 }) 23 # Archlinux patch: fix heap overflow 24 (fetchpatch { 25 url = "https://gitlab.archlinux.org/archlinux/packaging/packages/jbigkit/-/raw/main/0015-jbg_newlen-check-for-end-of-file-within-MARKER_NEWLE.patch"; 26 hash = "sha256-F3qA/btR9D9NfzrNY76X4Z6vG6NrisI36SjCDjS+F5s="; 27 }) 28 ] 29 ++ lib.optionals stdenv.hostPlatform.isLinux [ 30 # Archlinux patch: build shared object 31 (fetchpatch { 32 url = "https://gitlab.archlinux.org/archlinux/packaging/packages/jbigkit/-/raw/main/jbigkit-2.1-shared_lib.patch"; 33 hash = "sha256-+efeeKg3FJ/TjSOj58kD+DwnaCm3zhGzKLfUes/d5rg="; 34 }) 35 (fetchpatch { 36 url = "https://gitlab.archlinux.org/archlinux/packaging/packages/jbigkit/-/raw/main/jbigkit-2.1-ldflags.patch"; 37 hash = "sha256-ik3NifyuhDHnIMTrNLAKInPgu2F5u6Gvk9daqrn8ZhY="; 38 }) 39 # Archlinux patch: update coverity 40 (fetchpatch { 41 url = "https://gitlab.archlinux.org/archlinux/packaging/packages/jbigkit/-/raw/main/jbigkit-2.1-coverity.patch"; 42 hash = "sha256-APm9A2f4sMufuY3cnL9HOcSCa9ov3pyzgQTTKLd49/E="; 43 }) 44 # Archlinux patch: fix build warnings 45 (fetchpatch { 46 url = "https://gitlab.archlinux.org/archlinux/packaging/packages/jbigkit/-/raw/main/jbigkit-2.1-build_warnings.patch"; 47 hash = "sha256-lDEJ1bvZ+zR7K4CiTq+aXJ8PGjILE3W13kznLLlGOOg="; 48 }) 49 ]; 50 51 makeFlags = [ 52 "AR=${lib.getBin stdenv.cc.bintools.bintools}/bin/${stdenv.cc.targetPrefix}ar" 53 "CC=${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc" 54 "DESTDIR=${placeholder "out"}" 55 "RANLIB=${lib.getBin stdenv.cc.bintools.bintools}/bin/${stdenv.cc.targetPrefix}ranlib" 56 ]; 57 58 postPatch = '' 59 sed -i 's/^\(CFLAGS.*\)$/\1 -fPIC/' Makefile 60 61 for f in Makefile libjbig/Makefile pbmtools/Makefile; do 62 sed -i -E 's/\bar /$(AR) /g;s/\branlib /$(RANLIB) /g' "$f" 63 done 64 ''; 65 66 installPhase = '' 67 runHook preInstall 68 69 install -vDm 644 libjbig/*.h -t "$out/include/" 70 install -vDm 755 pbmtools/{jbgtopbm{,85},pbmtojbg{,85}} -t "$out/bin/" 71 install -vDm 644 pbmtools/*.1* -t "$out/share/man/man1/" 72 '' 73 + lib.optionalString stdenv.hostPlatform.isDarwin '' 74 install -vDm 644 libjbig/libjbig*.a -t "$out/lib/" 75 '' 76 + lib.optionalString stdenv.hostPlatform.isLinux '' 77 install -vDm 755 libjbig/*.so.* -t "$out/lib/" 78 79 for lib in libjbig.so libjbig85.so; do 80 ln -sv "$lib.${finalAttrs.version}" "$out/lib/$lib" 81 ln -sv "$out/lib/$lib.${finalAttrs.version}" "$out/lib/$lib.0" 82 done 83 '' 84 + '' 85 runHook postInstall 86 ''; 87 88 doCheck = true; 89 90 # Testing deletes all files on each test, causes test failures. 91 enableParallelChecking = false; 92 93 meta = { 94 description = "Software implementation of the JBIG1 data compression standard"; 95 homepage = "http://www.cl.cam.ac.uk/~mgk25/jbigkit/"; 96 license = lib.licenses.gpl2Plus; 97 platforms = lib.platforms.all; 98 }; 99})