2025-07-29 11:29:33 +08:00

128 lines
3.5 KiB
Nix

{
lib,
stdenv,
fetchFromGitHub,
fetchpatch2,
cmake,
enableVTK ? true,
vtk,
DarwinTools, # sw_vers
enablePython ? false,
python ? null,
swig,
expat,
libuuid,
openjpeg,
zlib,
pkg-config,
ctestCheckHook,
}:
stdenv.mkDerivation (finalAttrs: {
pname = if enablePython then "python-gdcm" else "gdcm";
version = "3.0.26";
src = fetchFromGitHub {
owner = "malaterre";
repo = "GDCM";
tag = "v${finalAttrs.version}";
hash = "sha256-GuTxFgK5nfP4l36uqSOMrOkiwTi/T2ywcLh4LDNkKsI=";
};
patches = [
./add-missing-losslylosslessarray-in-TestTransferSyntax.patch
# Fix vtk deprecated api, See https://docs.vtk.org/en/latest/release_details/9.3.html#id13.
# Upstream mailing list: https://sourceforge.net/p/gdcm/mailman/message/59197515.
./fix-vtk-deprecated-api.patch
];
cmakeFlags = [
"-DGDCM_BUILD_APPLICATIONS=ON"
"-DGDCM_BUILD_SHARED_LIBS=ON"
"-DGDCM_BUILD_TESTING=ON"
"-DGDCM_USE_SYSTEM_EXPAT=ON"
"-DGDCM_USE_SYSTEM_ZLIB=ON"
"-DGDCM_USE_SYSTEM_UUID=ON"
"-DGDCM_USE_SYSTEM_OPENJPEG=ON"
# hack around usual "`RUNTIME_DESTINATION` must not be an absolute path" issue:
"-DCMAKE_INSTALL_LIBDIR=lib"
"-DCMAKE_INSTALL_BINDIR=bin"
"-DCMAKE_INSTALL_INCLUDEDIR=include"
]
++ lib.optionals enableVTK [
"-DGDCM_USE_VTK=ON"
]
++ lib.optionals enablePython [
"-DGDCM_WRAP_PYTHON:BOOL=ON"
"-DGDCM_INSTALL_PYTHONMODULE_DIR=${placeholder "out"}/${python.sitePackages}/python_gdcm"
];
nativeBuildInputs = [
cmake
pkg-config
]
++ lib.optional stdenv.hostPlatform.isDarwin DarwinTools;
buildInputs = [
expat
libuuid
openjpeg
zlib
]
++ lib.optionals enableVTK [
vtk
]
++ lib.optionals enablePython [
swig
python
];
postInstall = lib.optionalString enablePython ''
substitute \
${./python_gdcm.egg-info} \
$out/${python.sitePackages}/python_gdcm-${finalAttrs.version}.egg-info \
--subst-var-by GDCM_VER "${finalAttrs.version}"
'';
disabledTests = [
# require networking:
"TestEcho"
"TestFind"
"gdcmscu-echo-dicomserver"
"gdcmscu-find-dicomserver"
# seemingly ought to be disabled when the test data submodule is not present:
"TestvtkGDCMImageReader2_3"
"TestSCUValidation"
# errors because 3 classes not wrapped:
"TestWrapPython"
# AttributeError: module 'gdcm' has no attribute 'UIDGenerator_SetRoot'; maybe a wrapping regression:
"TestUIDGeneratorPython"
]
++ lib.optionals (stdenv.hostPlatform.isAarch64 && stdenv.hostPlatform.isLinux) [
"TestRescaler2"
];
nativeCheckInputs = [
ctestCheckHook
];
doCheck = true;
# note that when the test data is available to the build via `fetchSubmodules = true`,
# a number of additional but much slower tests are enabled
meta = {
description = "Grassroots cross-platform DICOM implementation";
longDescription = ''
Grassroots DICOM (GDCM) is an implementation of the DICOM standard designed to be open source so that researchers may access clinical data directly.
GDCM includes a file format definition and a network communications protocol, both of which should be extended to provide a full set of tools for a researcher or small medical imaging vendor to interface with an existing medical database.
'';
homepage = "https://gdcm.sourceforge.net";
license = with lib.licenses; [
bsd3
asl20
];
maintainers = with lib.maintainers; [ tfmoraes ];
platforms = lib.platforms.all;
};
})