2025-07-24 13:55:40 +02:00

143 lines
3.0 KiB
Nix

{
lib,
stdenv,
fetchFromGitLab,
nix-update-script,
cmake,
pkg-config,
sphinx,
lerc,
libdeflate,
libjpeg,
libwebp,
xz,
zlib,
zstd,
# Because lerc is C++ and static libraries don't track dependencies,
# that every downstream dependent of libtiff has to link with a C++
# compiler, or the C++ standard library won't be linked, resulting
# in undefined symbol errors. Without systematic support for this
# in build systems, fixing this would require modifying the build
# system of every libtiff user. Hopefully at some point build
# systems will figure this out, and then we can enable this.
#
# See https://github.com/mesonbuild/meson/issues/14234
withLerc ? !stdenv.hostPlatform.isStatic,
# for passthru.tests
libgeotiff,
python3Packages,
imagemagick,
graphicsmagick,
gdal,
openimageio,
freeimage,
testers,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "libtiff";
version = "4.7.0";
src = fetchFromGitLab {
owner = "libtiff";
repo = "libtiff";
rev = "v${finalAttrs.version}";
hash = "sha256-SuK9/a6OUAumEe1kz1itFJGKxJzbmHkBVLMnyXhIwmQ=";
};
patches = [
# libc++abi 11 has an `#include <version>`, this picks up files name
# `version` in the project's include paths
./rename-version.patch
];
postPatch = ''
mv VERSION VERSION.txt
'';
outputs = [
"bin"
"dev"
"dev_private"
"out"
"man"
"doc"
];
postFixup = ''
mkdir -p $dev_private/include
mv -t $dev_private/include \
libtiff/tif_config.h \
../libtiff/tif_dir.h \
../libtiff/tif_hash_set.h \
../libtiff/tiffiop.h
'';
nativeBuildInputs = [
cmake
pkg-config
sphinx
];
buildInputs = [
zstd
]
++ lib.optionals withLerc [
lerc
];
# TODO: opengl support (bogus configure detection)
propagatedBuildInputs = [
libdeflate
libjpeg
# libwebp depends on us; this will cause infinite
# recursion otherwise
(libwebp.override { tiffSupport = false; })
xz
zlib
zstd
];
cmakeFlags = [
"-DCMAKE_FIND_PACKAGE_PREFER_CONFIG=ON"
];
enableParallelBuilding = true;
doCheck = true;
# Avoid flakiness like https://gitlab.com/libtiff/libtiff/-/commit/94f6f7315b1
enableParallelChecking = false;
passthru = {
tests = {
inherit
libgeotiff
imagemagick
graphicsmagick
gdal
openimageio
freeimage
;
inherit (python3Packages) pillow imread;
pkg-config = testers.hasPkgConfigModules {
package = finalAttrs.finalPackage;
};
};
updateScript = nix-update-script { };
};
meta = with lib; {
description = "Library and utilities for working with the TIFF image file format";
homepage = "https://libtiff.gitlab.io/libtiff";
changelog = "https://libtiff.gitlab.io/libtiff/releases/v${finalAttrs.version}.html";
license = licenses.libtiff;
platforms = platforms.unix ++ platforms.windows;
pkgConfigModules = [ "libtiff-4" ];
teams = [ teams.geospatial ];
};
})