pngquant: 2.17.0 -> 3.0.3
https://github.com/kornelski/pngquant/blob/3.0.3/CHANGELOG Since 3.0.0, pngquant uses libimagequant 4.x, which is a Rust rewrite, and and switches the build system from make to Cargo. The `pngquant` executable is now a Rust wrapper around `pngquant.c`, which in turn interfaces with libimagequant via the `imagequant_sys` crate, which exports a C API.[1] The CLI seems unchanged. Upstream lacks a Cargo.lock[2], so I generated one and patched it in. Set `doCheck = false;` as there are no Rust-based tests. `test/` was previously part of the make-based workflow (which is gone with pngquant 3.x) and looks like it isn't meant for pngquant 3.x anyway (as `test.sh` executes `$BIN --version 2>&1 | fgrep 2.`). `$ nix build .#pkgsCross.raspberryPi.pngquant` succeeds[3]; remove the workaround originally introduced in [4]. Notes on dependencies: - While nixpkgs package libimagequant on its own, pngquant depends on a specific vendored version - pngquant 3.x depends on the libpng-sys and lcms2-sys crates, which provide bindings to the respective C libraries. If those are not provided by the system at build time, vendored versions of them will be built and statically linked; libpng 1.6.37 and LCMS 2.15, respectively [1] See also: https://github.com/kornelski/pngquant/issues/368#issuecomment-1542507114 [2] See also: https://github.com/kornelski/pngquant/issues/347 [3] New SSE flag decision logic: https://github.com/kornelski/pngquant/blob/3.0.3/rust/build.rs#L31 [4] https://github.com/NixOS/nixpkgs/pull/145672
This commit is contained in:
parent
c7b67b6a88
commit
ef0b88ac3c
2 changed files with 444 additions and 8 deletions
428
pkgs/tools/graphics/pngquant/add-Cargo.lock.patch
Normal file
428
pkgs/tools/graphics/pngquant/add-Cargo.lock.patch
Normal file
|
@ -0,0 +1,428 @@
|
|||
diff --git a/Cargo.lock b/Cargo.lock
|
||||
new file mode 100644
|
||||
index 0000000..319b40b
|
||||
--- /dev/null
|
||||
+++ b/Cargo.lock
|
||||
@@ -0,0 +1,422 @@
|
||||
+# This file is automatically @generated by Cargo.
|
||||
+# It is not intended for manual editing.
|
||||
+version = 3
|
||||
+
|
||||
+[[package]]
|
||||
+name = "arrayvec"
|
||||
+version = "0.7.4"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
|
||||
+
|
||||
+[[package]]
|
||||
+name = "autocfg"
|
||||
+version = "1.1.0"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
|
||||
+
|
||||
+[[package]]
|
||||
+name = "bitflags"
|
||||
+version = "1.3.2"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
||||
+
|
||||
+[[package]]
|
||||
+name = "bitflags"
|
||||
+version = "2.4.1"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
|
||||
+
|
||||
+[[package]]
|
||||
+name = "bytemuck"
|
||||
+version = "1.14.0"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6"
|
||||
+
|
||||
+[[package]]
|
||||
+name = "cc"
|
||||
+version = "1.0.83"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
|
||||
+dependencies = [
|
||||
+ "jobserver",
|
||||
+ "libc",
|
||||
+]
|
||||
+
|
||||
+[[package]]
|
||||
+name = "cfg-if"
|
||||
+version = "1.0.0"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||
+
|
||||
+[[package]]
|
||||
+name = "cocoa_image"
|
||||
+version = "1.0.6"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "ea3dcd9c6980e6b9152a61476163a7039bdd73b4508f699b4b3b102d53490839"
|
||||
+dependencies = [
|
||||
+ "core-foundation",
|
||||
+ "core-graphics",
|
||||
+ "imgref",
|
||||
+ "objc",
|
||||
+ "rgb",
|
||||
+]
|
||||
+
|
||||
+[[package]]
|
||||
+name = "core-foundation"
|
||||
+version = "0.9.3"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
|
||||
+dependencies = [
|
||||
+ "core-foundation-sys",
|
||||
+ "libc",
|
||||
+]
|
||||
+
|
||||
+[[package]]
|
||||
+name = "core-foundation-sys"
|
||||
+version = "0.8.4"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
|
||||
+
|
||||
+[[package]]
|
||||
+name = "core-graphics"
|
||||
+version = "0.23.1"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "970a29baf4110c26fedbc7f82107d42c23f7e88e404c4577ed73fe99ff85a212"
|
||||
+dependencies = [
|
||||
+ "bitflags 1.3.2",
|
||||
+ "core-foundation",
|
||||
+ "core-graphics-types",
|
||||
+ "foreign-types",
|
||||
+ "libc",
|
||||
+]
|
||||
+
|
||||
+[[package]]
|
||||
+name = "core-graphics-types"
|
||||
+version = "0.1.2"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "2bb142d41022986c1d8ff29103a1411c8a3dfad3552f87a4f8dc50d61d4f4e33"
|
||||
+dependencies = [
|
||||
+ "bitflags 1.3.2",
|
||||
+ "core-foundation",
|
||||
+ "libc",
|
||||
+]
|
||||
+
|
||||
+[[package]]
|
||||
+name = "crossbeam-deque"
|
||||
+version = "0.8.3"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
|
||||
+dependencies = [
|
||||
+ "cfg-if",
|
||||
+ "crossbeam-epoch",
|
||||
+ "crossbeam-utils",
|
||||
+]
|
||||
+
|
||||
+[[package]]
|
||||
+name = "crossbeam-epoch"
|
||||
+version = "0.9.15"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
|
||||
+dependencies = [
|
||||
+ "autocfg",
|
||||
+ "cfg-if",
|
||||
+ "crossbeam-utils",
|
||||
+ "memoffset",
|
||||
+ "scopeguard",
|
||||
+]
|
||||
+
|
||||
+[[package]]
|
||||
+name = "crossbeam-utils"
|
||||
+version = "0.8.16"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
|
||||
+dependencies = [
|
||||
+ "cfg-if",
|
||||
+]
|
||||
+
|
||||
+[[package]]
|
||||
+name = "dunce"
|
||||
+version = "1.0.4"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b"
|
||||
+
|
||||
+[[package]]
|
||||
+name = "either"
|
||||
+version = "1.9.0"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
|
||||
+
|
||||
+[[package]]
|
||||
+name = "foreign-types"
|
||||
+version = "0.5.0"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965"
|
||||
+dependencies = [
|
||||
+ "foreign-types-macros",
|
||||
+ "foreign-types-shared",
|
||||
+]
|
||||
+
|
||||
+[[package]]
|
||||
+name = "foreign-types-macros"
|
||||
+version = "0.2.3"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742"
|
||||
+dependencies = [
|
||||
+ "proc-macro2",
|
||||
+ "quote",
|
||||
+ "syn",
|
||||
+]
|
||||
+
|
||||
+[[package]]
|
||||
+name = "foreign-types-shared"
|
||||
+version = "0.3.1"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b"
|
||||
+
|
||||
+[[package]]
|
||||
+name = "getopts"
|
||||
+version = "0.2.21"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5"
|
||||
+dependencies = [
|
||||
+ "unicode-width",
|
||||
+]
|
||||
+
|
||||
+[[package]]
|
||||
+name = "glob"
|
||||
+version = "0.3.1"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
|
||||
+
|
||||
+[[package]]
|
||||
+name = "imagequant"
|
||||
+version = "4.2.2"
|
||||
+dependencies = [
|
||||
+ "arrayvec",
|
||||
+ "once_cell",
|
||||
+ "rayon",
|
||||
+ "rgb",
|
||||
+ "thread_local",
|
||||
+]
|
||||
+
|
||||
+[[package]]
|
||||
+name = "imagequant-sys"
|
||||
+version = "4.0.3"
|
||||
+dependencies = [
|
||||
+ "bitflags 2.4.1",
|
||||
+ "imagequant",
|
||||
+ "libc",
|
||||
+]
|
||||
+
|
||||
+[[package]]
|
||||
+name = "imgref"
|
||||
+version = "1.10.0"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "90d944e334f00f4449c9640b440a171f816be0152305c12ef90424fc35fd035c"
|
||||
+
|
||||
+[[package]]
|
||||
+name = "jobserver"
|
||||
+version = "0.1.27"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d"
|
||||
+dependencies = [
|
||||
+ "libc",
|
||||
+]
|
||||
+
|
||||
+[[package]]
|
||||
+name = "lcms2-sys"
|
||||
+version = "4.0.3"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "137dae56197ab9e66729ff73e2942e26f16f9ddcd14a53295c35f53dcd067b58"
|
||||
+dependencies = [
|
||||
+ "cc",
|
||||
+ "dunce",
|
||||
+ "libc",
|
||||
+ "pkg-config",
|
||||
+]
|
||||
+
|
||||
+[[package]]
|
||||
+name = "libc"
|
||||
+version = "0.2.150"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c"
|
||||
+
|
||||
+[[package]]
|
||||
+name = "libpng-sys"
|
||||
+version = "1.1.9"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "b531eb8c558e697d1fc6a642b260426aa85ba4d054a8f0db66f5866918332674"
|
||||
+dependencies = [
|
||||
+ "cc",
|
||||
+ "dunce",
|
||||
+ "libc",
|
||||
+ "libz-sys",
|
||||
+ "pkg-config",
|
||||
+]
|
||||
+
|
||||
+[[package]]
|
||||
+name = "libz-sys"
|
||||
+version = "1.1.12"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b"
|
||||
+dependencies = [
|
||||
+ "cc",
|
||||
+ "libc",
|
||||
+ "pkg-config",
|
||||
+ "vcpkg",
|
||||
+]
|
||||
+
|
||||
+[[package]]
|
||||
+name = "malloc_buf"
|
||||
+version = "0.0.6"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
|
||||
+dependencies = [
|
||||
+ "libc",
|
||||
+]
|
||||
+
|
||||
+[[package]]
|
||||
+name = "memoffset"
|
||||
+version = "0.9.0"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
|
||||
+dependencies = [
|
||||
+ "autocfg",
|
||||
+]
|
||||
+
|
||||
+[[package]]
|
||||
+name = "objc"
|
||||
+version = "0.2.7"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
|
||||
+dependencies = [
|
||||
+ "malloc_buf",
|
||||
+]
|
||||
+
|
||||
+[[package]]
|
||||
+name = "once_cell"
|
||||
+version = "1.18.0"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
|
||||
+
|
||||
+[[package]]
|
||||
+name = "pkg-config"
|
||||
+version = "0.3.27"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
|
||||
+
|
||||
+[[package]]
|
||||
+name = "pngquant"
|
||||
+version = "3.0.3"
|
||||
+dependencies = [
|
||||
+ "cc",
|
||||
+ "cocoa_image",
|
||||
+ "dunce",
|
||||
+ "getopts",
|
||||
+ "imagequant-sys",
|
||||
+ "lcms2-sys",
|
||||
+ "libc",
|
||||
+ "libpng-sys",
|
||||
+ "wild",
|
||||
+]
|
||||
+
|
||||
+[[package]]
|
||||
+name = "proc-macro2"
|
||||
+version = "1.0.69"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
|
||||
+dependencies = [
|
||||
+ "unicode-ident",
|
||||
+]
|
||||
+
|
||||
+[[package]]
|
||||
+name = "quote"
|
||||
+version = "1.0.33"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
|
||||
+dependencies = [
|
||||
+ "proc-macro2",
|
||||
+]
|
||||
+
|
||||
+[[package]]
|
||||
+name = "rayon"
|
||||
+version = "1.8.0"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1"
|
||||
+dependencies = [
|
||||
+ "either",
|
||||
+ "rayon-core",
|
||||
+]
|
||||
+
|
||||
+[[package]]
|
||||
+name = "rayon-core"
|
||||
+version = "1.12.0"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed"
|
||||
+dependencies = [
|
||||
+ "crossbeam-deque",
|
||||
+ "crossbeam-utils",
|
||||
+]
|
||||
+
|
||||
+[[package]]
|
||||
+name = "rgb"
|
||||
+version = "0.8.37"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "05aaa8004b64fd573fc9d002f4e632d51ad4f026c2b5ba95fcb6c2f32c2c47d8"
|
||||
+dependencies = [
|
||||
+ "bytemuck",
|
||||
+]
|
||||
+
|
||||
+[[package]]
|
||||
+name = "scopeguard"
|
||||
+version = "1.2.0"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
|
||||
+
|
||||
+[[package]]
|
||||
+name = "syn"
|
||||
+version = "2.0.39"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a"
|
||||
+dependencies = [
|
||||
+ "proc-macro2",
|
||||
+ "quote",
|
||||
+ "unicode-ident",
|
||||
+]
|
||||
+
|
||||
+[[package]]
|
||||
+name = "thread_local"
|
||||
+version = "1.1.7"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
|
||||
+dependencies = [
|
||||
+ "cfg-if",
|
||||
+ "once_cell",
|
||||
+]
|
||||
+
|
||||
+[[package]]
|
||||
+name = "unicode-ident"
|
||||
+version = "1.0.12"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
|
||||
+
|
||||
+[[package]]
|
||||
+name = "unicode-width"
|
||||
+version = "0.1.11"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
|
||||
+
|
||||
+[[package]]
|
||||
+name = "vcpkg"
|
||||
+version = "0.2.15"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
|
||||
+
|
||||
+[[package]]
|
||||
+name = "wild"
|
||||
+version = "2.2.0"
|
||||
+source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
+checksum = "10d01931a94d5a115a53f95292f51d316856b68a035618eb831bbba593a30b67"
|
||||
+dependencies = [
|
||||
+ "glob",
|
||||
+]
|
|
@ -1,25 +1,33 @@
|
|||
{ lib, stdenv, fetchFromGitHub, pkg-config, libpng, zlib, lcms2 }:
|
||||
{ lib, rustPlatform, fetchFromGitHub, pkg-config, libpng, zlib, lcms2 }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "pngquant";
|
||||
version = "2.17.0";
|
||||
version = "3.0.3";
|
||||
|
||||
outputs = [ "out" "man" ];
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "kornelski";
|
||||
repo = "pngquant";
|
||||
rev = version;
|
||||
sha256 = "sha256-D2KNn6AJ4eIHeb/2Oo1Wf0djMCXTtVGrua0D6z7+9V4=";
|
||||
hash = "sha256-u2zEp9Llo+c/+1QGW4V4r40KQn/ATHCTEsrpy7bRf/I=";
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
|
||||
preConfigure = "patchShebangs .";
|
||||
|
||||
configureFlags = lib.optionals (!stdenv.hostPlatform.isx86) [ "--disable-sse" ];
|
||||
cargoHash = "sha256-mZpg6BRpsvEiMsS6ZJzVYg6wXHLb3Cf72sK1yzTF8y4=";
|
||||
cargoPatches = [
|
||||
# https://github.com/kornelski/pngquant/issues/347
|
||||
./add-Cargo.lock.patch
|
||||
];
|
||||
|
||||
nativeBuildInputs = [ pkg-config ];
|
||||
buildInputs = [ libpng zlib lcms2 ];
|
||||
|
||||
doCheck = true;
|
||||
doCheck = false; # Has no Rust-based tests
|
||||
|
||||
postInstall = ''
|
||||
install -Dpm0444 pngquant.1 $man/share/man/man1/pngquant.1
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://pngquant.org/";
|
||||
|
|
Loading…
Reference in a new issue