It has come to my attention that the openjp2 crate is not Windows-ready, meaning that the openjp2 Cargo feature in dicom-transfer-syntax-registry should not have been selected by default, and that JPEG 2000 support on Windows currently requires linking with the reference OpenJPEG implementation.
The known mitigation for the time being is to disable default features and selectively add the other ones. To build all the project's binaries, for example:
(It is a bit more complicated when selecting a specific package via -p)
Moving forward:
There are no plans in sight for the openjp2 crate to support Windows, because the port is based on C2Rust, which only guarantees support for Linux and Mac OS.
It is not possible to change Cargo feature listings based on the target platform (https://github.com/rust-lang/cargo/issues/1197). It would be possible to change the dependencies' features depending on the target operating system, but with the Cargo features already laid out, I don't see a way to resolve both situations, especially without introducing some complexity in the pixeldata crate.
Removing openjp2 as a feature depended by the default feature native would be cleaner, but if this is done in a patch release, it would break expectations of existing Linux users depending on this. On the other hand, a bump to version 0.7.0 would feel over the top, as it has so far been reserved for a bigger bundle of breaking changes.
I wonder if it is possible to monkey-patch the openjp2 crate based on the target platform. Then one would be able to replace it with a stub on Windows and feature-gate the rest. Alternatively, one may have to maintain separate openjp2 and jpeg2k packages just for DICOM-rs.
It has come to my attention that the
openjp2
crate is not Windows-ready, meaning that theopenjp2
Cargo feature indicom-transfer-syntax-registry
should not have been selected by default, and that JPEG 2000 support on Windows currently requires linking with the reference OpenJPEG implementation.The known mitigation for the time being is to disable default features and selectively add the other ones. To build all the project's binaries, for example:
Or with OpenJPEG reference software:
(It is a bit more complicated when selecting a specific package via
-p
)Moving forward:
openjp2
crate to support Windows, because the port is based on C2Rust, which only guarantees support for Linux and Mac OS.pixeldata
crate.openjp2
as a feature depended by the default featurenative
would be cleaner, but if this is done in a patch release, it would break expectations of existing Linux users depending on this. On the other hand, a bump to version 0.7.0 would feel over the top, as it has so far been reserved for a bigger bundle of breaking changes.openjp2
crate based on the target platform. Then one would be able to replace it with a stub on Windows and feature-gate the rest. Alternatively, one may have to maintain separateopenjp2
andjpeg2k
packages just for DICOM-rs.