[med-svn] [Git][med-team/sight][wip-24.1.0] New version 24.1.0 and fix for #1075792

Flavien Bridault (@fbridault-guest) gitlab at salsa.debian.org
Tue Jul 16 05:29:47 BST 2024



Flavien Bridault pushed to branch wip-24.1.0 at Debian Med / sight


Commits:
69121d4e by Flavien Bridault at 2024-07-16T06:28:57+02:00
New version 24.1.0 and fix for #1075792


- - - - -


16 changed files:

- debian/changelog
- debian/control
- debian/libsight.install
- debian/not-installed
- + debian/patches/dcmktk3.6.8.patch
- debian/patches/fix-itk-build.patch
- debian/patches/fix-multi-arch-folder-detection.patch
- debian/patches/gcc13.patch
- debian/patches/lintian_warnings.patch
- debian/patches/move-sightlog-in-libexec.patch
- + debian/patches/opencv46.patch
- debian/patches/series
- debian/patches/vtk9.3.patch
- debian/rules
- debian/sightcalibrator.install
- debian/sightviewer.install


Changes:

=====================================
debian/changelog
=====================================
@@ -1,3 +1,10 @@
+sight (24.1.0-0) UNRELEASED; urgency=medium
+
+  * New upstream version
+  * d/p/: Added patch for dcmtk 3.6.8. (Closes: #1075792)
+
+ -- Flavien BRIDAULT <flavien.bridault at ircad.fr>  Mon, 24 Jun 2024 15:47:24 +0200
+
 sight (23.1.0-3) unstable; urgency=medium
 
   * Team upload.


=====================================
debian/control
=====================================
@@ -22,6 +22,7 @@ Build-Depends: cmake (>=3.19.0),
                libopenigtlink-dev,
                libqt5opengl5-dev,
                libqt5x11extras5-dev,
+               libqt5svg5-dev,
                libvtk9-dev,
                libvtkgdcm-dev,
                libvtk9-qt-dev,
@@ -80,6 +81,7 @@ Depends: libsight (= ${binary:Version}),
          libhdf5-dev,
          libqt5opengl5-dev,
          libqt5x11extras5-dev,
+         libqt5svg5-dev,
          qttools5-dev,
          libvtk9-dev,
          libgdcm-dev,


=====================================
debian/libsight.install
=====================================
@@ -2,7 +2,8 @@
 usr/bin/sightrun.bin => /usr/bin/sightrun
 usr/bin/sightlog.bin => /usr/libexec/sightlog
 usr/lib/*/libsight*.so.*
-usr/share/sight/[a-u]*
+usr/share/sight/[a-n]*
+usr/share/sight/[t-u]*
 usr/share/sight/viz_qt3d
 usr/share/sight/viz_scene3d/*.cfg
 usr/share/sight/viz_scene3d/Media/compositors


=====================================
debian/not-installed
=====================================
@@ -1,21 +1,12 @@
-usr/bin/archiveextractor
+usr/bin/archive_extractor
 usr/bin/ex*
 usr/bin/tuto*
-usr/bin/DicomAnonymizer*
-usr/bin/NetworkProxy*
-usr/bin/networkproxy
-usr/bin/VersionGenerator*
-usr/bin/arucoMarker*
-usr/bin/arucomarker
-usr/bin/calDataGenerator*
-usr/bin/caldatagenerator
-usr/bin/charucoBoard*
-usr/bin/charucoboard
-usr/bin/dicomanonymizer*
+usr/bin/dicom_anonymizer*
+usr/bin/network_proxy*
+usr/bin/aruco_marker*
 usr/bin/dicomxplorer*
 usr/bin/sightlog
 usr/bin/sightrun
-usr/bin/versiongenerator*
 usr/share/sight/viz_scene3d/Media/fonts/DejaVuSans.ttf
-usr/share/sight/NetworkProxy*
-usr/share/sight/ArchiveExtractor*
+usr/share/sight/network_proxy*
+usr/share/sight/archive_extractor*


=====================================
debian/patches/dcmktk3.6.8.patch
=====================================
@@ -0,0 +1,16 @@
+Author: Flavien Bridault <fbridault at ircad.fr>
+Description: Remove deprecated transfer syntaxes, not used anyway.
+Forwarded: https://git.ircad.fr/sight/sight/-/issues/1295
+Bug-Debian: https://bugs.debian.org/1075792
+
+--- sight.orig/libs/io/dimse/series_enquirer.cpp
++++ sight/libs/io/dimse/series_enquirer.cpp
+@@ -137,8 +137,6 @@
+     transfer_syntaxes.DCMTK_EMPLACE_BACK(UID_JPEG2000Part2MulticomponentImageCompressionTransferSyntax);
+     transfer_syntaxes.DCMTK_EMPLACE_BACK(UID_JPIPReferencedTransferSyntax);
+     transfer_syntaxes.DCMTK_EMPLACE_BACK(UID_JPIPReferencedDeflateTransferSyntax);
+-    transfer_syntaxes.DCMTK_EMPLACE_BACK(UID_RFC2557MIMEEncapsulationTransferSyntax);
+-    transfer_syntaxes.DCMTK_EMPLACE_BACK(UID_XMLEncodingTransferSyntax);
+ 
+     // Add Verification SOP Class presentation context.
+     this->addPresentationContext(UID_VerificationSOPClass, transfer_syntaxes);


=====================================
debian/patches/fix-itk-build.patch
=====================================
@@ -12,9 +12,24 @@ Description: Remove service that requires ITKFFT which is not available on i386
  
  if(ITK_VERSION_MAJOR GREATER 4)
      find_package(ITK QUIET COMPONENTS ITKSmoothing ITKRegistrationMethodsv4 REQUIRED)
---- sight.orig/libs/filter/image/MIPMatchingRegistration.hpp
-+++ sight/libs/filter/image/MIPMatchingRegistration.hpp
-@@ -34,7 +34,6 @@
+--- sight.orig/modules/filter/image/rc/plugin.xml
++++ sight/modules/filter/image/rc/plugin.xml
+@@ -56,12 +56,6 @@
+     </extension>
+ 
+     <extension implements="sight::service::extension::factory">
+-        <type>sight::service::registerer</type>
+-        <service>sight::module::filter::image::mip_matching_registration</service>
+-        <desc>This service uses a fast registration algorithm to quickly register two images together if the transform</desc>
+-    </extension>
+-
+-    <extension implements="sight::service::extension::factory">
+         <type>sight::service::filter</type>
+         <service>sight::module::filter::image::matrix_regressor</service>
+         <object>sight::data::vector</object>
+--- sight.orig/libs/filter/image/mip_matching_registration.hpp
++++ sight/libs/filter/image/mip_matching_registration.hpp
+@@ -35,7 +35,6 @@
  
  #include <io/itk/itk.hpp>
  
@@ -22,12 +37,12 @@ Description: Remove service that requires ITKFFT which is not available on i386
  #include <itkIdentityTransform.h>
  #include <itkLinearInterpolateImageFunction.h>
  #include <itkMaximumProjectionImageFilter.h>
---- sight.orig/modules/filter/image/SMIPMatchingRegistration.cpp
+--- sight.orig/libs/filter/image/test/ut/mip_matching_registration_test.cpp
 +++ /dev/null
-@@ -1,97 +0,0 @@
+@@ -1,189 +0,0 @@
 -/************************************************************************
 - *
-- * Copyright (C) 2017-2022 IRCAD France
+- * Copyright (C) 2017-2023 IRCAD France
 - * Copyright (C) 2017-2020 IHU Strasbourg
 - *
 - * This file is part of Sight.
@@ -47,88 +62,180 @@ Description: Remove service that requires ITKFFT which is not available on i386
 - *
 - ***********************************************************************/
 -
--#include "SMIPMatchingRegistration.hpp"
+-#include "mip_matching_registration_test.hpp"
 -
--#include <core/tools/Dispatcher.hpp>
+-#include "helper.hpp"
 -
--#include <filter/image/MIPMatchingRegistration.hpp>
--#include <filter/image/Resampler.hpp>
+-#include <core/tools/dispatcher.hpp>
 -
--#include <geometry/data/Matrix4.hpp>
+-#include <data/helper/medical_image.hpp>
+-#include <data/matrix4.hpp>
 -
--#include <service/macros.hpp>
+-#include <filter/image/metric.hpp>
+-#include <filter/image/mip_matching_registration.hpp>
+-#include <filter/image/resampler.hpp>
 -
--#include <functional>
--#include <numeric>
+-#include <io/itk/itk.hpp>
 -
--namespace sight::module::filter::image
--{
+-#include <utest_data/generator/image.hpp>
 -
--SMIPMatchingRegistration::SMIPMatchingRegistration() noexcept =
--    default;
+-#include <glm/gtc/matrix_access.hpp>
+-#include <glm/gtc/matrix_transform.hpp>
+-#include <glm/gtc/quaternion.hpp>
+-#include <glm/mat4x4.hpp>
 -
--//------------------------------------------------------------------------------
+-#include <itkImage.h>
+-#include <itkRegionOfInterestImageFilter.h>
+-#include <itkResampleImageFilter.h>
 -
--SMIPMatchingRegistration::~SMIPMatchingRegistration() noexcept =
--    default;
+-CPPUNIT_TEST_SUITE_REGISTRATION(sight::filter::image::ut::mip_matching_registration_test);
+-
+-namespace sight::filter::image::ut
+-{
 -
 -//------------------------------------------------------------------------------
 -
--void SMIPMatchingRegistration::starting()
+-void mip_matching_registration_test::setUp()
 -{
 -}
 -
 -//------------------------------------------------------------------------------
 -
--void SMIPMatchingRegistration::stopping()
+-void mip_matching_registration_test::tearDown()
 -{
 -}
 -
 -//------------------------------------------------------------------------------
 -
--void SMIPMatchingRegistration::configuring()
+-void mip_matching_registration_test::identity_test()
 -{
+-    data::image::csptr moving = create_sphere_image<std::uint16_t, 3>();
+-    data::image::csptr fixed  = data::object::copy(moving);
+-    data::matrix4::sptr mat   = std::make_shared<data::matrix4>();
+-
+-    filter::image::registration_dispatch::parameters params;
+-    params.fixed     = fixed;
+-    params.moving    = moving;
+-    params.transform = std::make_shared<data::matrix4>();
+-    core::type type = moving->type();
+-    core::tools::dispatcher<core::tools::supported_dispatcher_types, registration_dispatch>::invoke(type, params);
+-
+-    for(std::size_t i = 0 ; i != 3 ; ++i)
+-    {
+-        CPPUNIT_ASSERT_EQUAL_MESSAGE(
+-            "Translation value is not equal to '0' ",
+-            0.,
+-            (*params.transform)(i, 3)
+-        );
+-    }
 -}
 -
 -//------------------------------------------------------------------------------
 -
--void SMIPMatchingRegistration::updating()
+-void mip_matching_registration_test::translate_transform_test()
 -{
--    const auto fixed  = m_target.lock();
--    const auto moving = m_source.lock();
--    auto transform    = m_transform.lock();
--
--    SIGHT_ASSERT("Missing required input 'fixed'", fixed);
--    SIGHT_ASSERT("Missing required input 'moving'", moving);
--    SIGHT_ASSERT("Missing required inout 'transform'", transform);
--
--    sight::filter::image::RegistrationDispatch::Parameters params;
--    params.fixed     = fixed.get_shared();
--    params.moving    = moving.get_shared();
--    params.transform = transform.get_shared();
+-    data::image::csptr moving = create_sphere_image<std::uint16_t, 3>();
+-    data::image::sptr fixed   = std::make_shared<data::image>();
 -
--    core::Type type = moving->getType();
--    core::tools::Dispatcher<core::tools::SupportedDispatcherTypes, sight::filter::image::RegistrationDispatch>
--    ::invoke(type, params);
+-    data::matrix4::sptr transform = std::make_shared<data::matrix4>();
+-    (*transform)(0, 3) = 4.;
+-    (*transform)(1, 3) = 12.;
+-    (*transform)(2, 3) = 7.;
+-    sight::filter::image::resampler::resample(moving, fixed, transform);
 -
--    transform->signal<data::Matrix4::ModifiedSignalType>(data::Matrix4::s_MODIFIED_SIG)->asyncEmit();
+-    std::array<double, 3> expected {{4., 12., 7.}};
+-    filter::image::registration_dispatch::parameters params;
+-    params.fixed     = fixed;
+-    params.moving    = moving;
+-    params.transform = std::make_shared<data::matrix4>();
+-    core::type type = moving->type();
+-    core::tools::dispatcher<core::tools::supported_dispatcher_types, registration_dispatch>::invoke(type, params);
+-    for(std::size_t i = 0 ; i < 3 ; ++i)
+-    {
+-        CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
+-            "Actual transform does not match expected results",
+-            expected[i],
+-            (*params.transform)(i, 3),
+-            1e-2
+-        );
+-    }
 -}
 -
 -//------------------------------------------------------------------------------
 -
--void SMIPMatchingRegistration::computeRegistration(core::HiResClock::HiResClockType /*timestamp*/)
+-void mip_matching_registration_test::translate_transform_with_scales_test()
 -{
--    this->updating();
+-    using image_t = itk::Image<std::uint16_t, 3>;
+-
+-    // Create the moving image
+-    auto moving_spacing = image_t::SpacingType(1.);
+-    moving_spacing[1] = 1.3;
+-    data::image::sptr moving = create_sphere_image<std::uint16_t, 3>(moving_spacing);
+-    data::image::sptr fixed  = std::make_shared<data::image>();
+-    moving->set_origin({107., 50., -30.});
+-
+-    // Translate the image a bit
+-    std::array<double, 3> v_trans {{4., 19., 7.}};
+-    data::matrix4::sptr transform = std::make_shared<data::matrix4>();
+-    (*transform)(0, 3) = v_trans[0];
+-    (*transform)(1, 3) = v_trans[1];
+-    (*transform)(2, 3) = v_trans[2];
+-    sight::filter::image::resampler::resample(moving, fixed, transform);
+-    auto fixed_origin  = std::array<double, 3> {{20., 10., 35.}};
+-    auto moving_origin = moving->origin();
+-    fixed->set_origin(fixed_origin);
+-    std::array<float, 3> expected {
+-        {
+-            float(moving_origin[0] + v_trans[0] - fixed_origin[0]),
+-            float(moving_origin[1] + v_trans[1] - fixed_origin[1]),
+-            float(moving_origin[2] + v_trans[2] - fixed_origin[2])
+-        }
+-    };
+-
+-    auto itk_fixed = io::itk::move_to_itk<image_t>(fixed);
+-
+-    // Resample the image to get a different spacing
+-    image_t::SizeType new_size {};
+-    image_t::SpacingType new_spacing(2.);
+-    for(uint8_t i = 0 ; i != 3 ; ++i)
+-    {
+-        new_size[i] = static_cast<unsigned int>(moving_spacing[i] / new_spacing[i] * double(moving->size()[i]));
+-    }
+-
+-    auto resample = itk::ResampleImageFilter<image_t, image_t>::New();
+-    resample->SetInput(itk_fixed);
+-    resample->SetSize(new_size);
+-    resample->SetOutputSpacing(new_spacing);
+-    resample->SetOutputOrigin(itk_fixed->GetOrigin());
+-    resample->Update();
+-    auto* resampled          = resample->GetOutput();
+-    auto resampled_f4s_fixed = io::itk::move_from_itk<image_t>(resampled, true);
+-
+-    filter::image::registration_dispatch::parameters params;
+-    params.fixed     = resampled_f4s_fixed;
+-    params.moving    = moving;
+-    params.transform = std::make_shared<data::matrix4>();
+-    core::type type = moving->type();
+-    core::tools::dispatcher<core::tools::supported_dispatcher_types, registration_dispatch>::invoke(type, params);
+-    for(std::size_t i = 0 ; i < 3 ; ++i)
+-    {
+-        CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
+-            "Actual transform does not match expected results",
+-            double(expected[i]),
+-            (*params.transform)(i, 3),
+-            double(moving_spacing[i])
+-        );
+-    }
 -}
 -
--} // namespace sight::module::filter::image
---- sight.orig/modules/filter/image/SMIPMatchingRegistration.hpp
+-} // namespace sight::filter::image::ut
+--- sight.orig/libs/filter/image/test/ut/mip_matching_registration_test.hpp
 +++ /dev/null
-@@ -1,119 +0,0 @@
+@@ -1,48 +0,0 @@
 -/************************************************************************
 - *
-- * Copyright (C) 2018-2022 IRCAD France
-- * Copyright (C) 2018-2019 IHU Strasbourg
+- * Copyright (C) 2021-2023 IRCAD France
+- * Copyright (C) 2018 IHU Strasbourg
 - *
 - * This file is part of Sight.
 - *
@@ -149,107 +256,36 @@ Description: Remove service that requires ITKFFT which is not available on i386
 -
 -#pragma once
 -
--#include "modules/filter/image/config.hpp"
--
--#include <data/Image.hpp>
--#include <data/Matrix4.hpp>
--
--#include <service/IRegisterer.hpp>
+-#include <cppunit/extensions/HelperMacros.h>
 -
--namespace sight::module::filter::image
+-namespace sight::filter::image::ut
 -{
 -
--/**
-- * @brief This service uses a fast registration algorithm to quickly register two images together if the transform
-- * between both is pure translation.
-- *
-- * @section Signals Signals
-- *
-- * @section Slots Slots
-- *   - \b update: compute the registration
-- *
-- * @section XML XML Configuration
-- *
-- * @code{.xml}
--   <service uid="..." type="sight::module::filter::image::SFastRegistration">
--       <in key="source" uid="..." />
--       <in key="target" uid="..." />
--       <in key="transform" uid="..." />
--   </service>
-- * @endcode
-- *
-- * @subsection Input Input
-- * - \b source [sight::data::Image]: Input image that will be aligned to the target.
-- * - \b target [sight::data::Image]: Input image to which the source will be aligned.
-- *
-- * @subsection In-Out In-Out
-- * - \b transform [sight::data::Matrix4]: initial registration. The computed registration will be
-- *   concatenated to the initial registration matrix.
-- */
--class MODULE_FILTER_IMAGE_CLASS_API SMIPMatchingRegistration : public service::IRegisterer
+-class mip_matching_registration_test : public CPPUNIT_NS::TestFixture
 -{
--public:
--
--    SIGHT_DECLARE_SERVICE(SMIPMatchingRegistration, service::IRegisterer);
--
--    /**
--     * @brief Constructor
--     */
--    MODULE_FILTER_IMAGE_API SMIPMatchingRegistration() noexcept;
--    /**
--     * @brief Destructor
--     */
--    MODULE_FILTER_IMAGE_API ~SMIPMatchingRegistration() noexcept override;
--
--protected:
--
--    /**
--     * @brief Starts the service.
--     *
--     * @throw core::tools::Failed
--     */
--    MODULE_FILTER_IMAGE_API void starting() override;
--
--    /**
--     * @brief Stops the service.
--     *
--     * @throw core::tools::Failed
--     */
--    MODULE_FILTER_IMAGE_API void stopping() override;
--
--    /**
--     * @brief Configures the service.
--     *
--     * @throw core::tools::Failed
--     */
--    MODULE_FILTER_IMAGE_API void configuring() override;
--
--    /**
--     * @brief Compute the registration.
--     *
--     * @throw core::tools::Failed
--     */
--    MODULE_FILTER_IMAGE_API void updating() override;
+-CPPUNIT_TEST_SUITE(mip_matching_registration_test);
+-CPPUNIT_TEST(identity_test);
+-CPPUNIT_TEST(translate_transform_test);
+-CPPUNIT_TEST(translate_transform_with_scales_test);
+-CPPUNIT_TEST_SUITE_END();
 -
--    /**
--     * @brief Compute the registration by calling the `update` slot. The timestamp parameter is discarded.
--     */
--    MODULE_FILTER_IMAGE_API void computeRegistration(core::HiResClock::HiResClockType timestamp) override;
+-public:
 -
--private:
+-    void setUp() override;
+-    void tearDown() override;
 -
--    sight::data::ptr<sight::data::Image, sight::data::Access::in> m_source {this, "fixed"};
--    sight::data::ptr<sight::data::Image, sight::data::Access::in> m_target {this, "moving"};
--    sight::data::ptr<sight::data::Matrix4, sight::data::Access::inout> m_transform {this, "transform"};
+-    static void identity_test();
+-    static void translate_transform_test();
+-    static void translate_transform_with_scales_test();
 -};
 -
--} // namespace sight::module::filter::image
---- sight.orig/libs/filter/image/test/tu/MIPMatchingRegistrationTest.cpp
+-} // namespace sight::filter::image::ut
+--- sight.orig/modules/filter/image/mip_matching_registration.cpp
 +++ /dev/null
-@@ -1,189 +0,0 @@
+@@ -1,97 +0,0 @@
 -/************************************************************************
 - *
-- * Copyright (C) 2017-2022 IRCAD France
+- * Copyright (C) 2017-2023 IRCAD France
 - * Copyright (C) 2017-2020 IHU Strasbourg
 - *
 - * This file is part of Sight.
@@ -269,180 +305,88 @@ Description: Remove service that requires ITKFFT which is not available on i386
 - *
 - ***********************************************************************/
 -
--#include "MIPMatchingRegistrationTest.hpp"
--
--#include "helper.hpp"
--
--#include <core/tools/Dispatcher.hpp>
+-#include "mip_matching_registration.hpp"
 -
--#include <data/helper/MedicalImage.hpp>
--#include <data/Matrix4.hpp>
+-#include <core/tools/dispatcher.hpp>
 -
--#include <filter/image/Metric.hpp>
--#include <filter/image/MIPMatchingRegistration.hpp>
--#include <filter/image/Resampler.hpp>
+-#include <filter/image/mip_matching_registration.hpp>
+-#include <filter/image/resampler.hpp>
 -
--#include <io/itk/itk.hpp>
--
--#include <utestData/generator/Image.hpp>
+-#include <geometry/data/matrix4.hpp>
 -
--#include <glm/gtc/matrix_access.hpp>
--#include <glm/gtc/matrix_transform.hpp>
--#include <glm/gtc/quaternion.hpp>
--#include <glm/mat4x4.hpp>
--
--#include <itkImage.h>
--#include <itkRegionOfInterestImageFilter.h>
--#include <itkResampleImageFilter.h>
+-#include <service/macros.hpp>
 -
--CPPUNIT_TEST_SUITE_REGISTRATION(sight::filter::image::ut::MIPMatchingRegistrationTest);
+-#include <functional>
+-#include <numeric>
 -
--namespace sight::filter::image::ut
+-namespace sight::module::filter::image
 -{
 -
+-mip_matching_registration::mip_matching_registration() noexcept =
+-    default;
+-
 -//------------------------------------------------------------------------------
 -
--void MIPMatchingRegistrationTest::setUp()
--{
--}
+-mip_matching_registration::~mip_matching_registration() noexcept =
+-    default;
 -
 -//------------------------------------------------------------------------------
 -
--void MIPMatchingRegistrationTest::tearDown()
+-void mip_matching_registration::starting()
 -{
 -}
 -
 -//------------------------------------------------------------------------------
 -
--void MIPMatchingRegistrationTest::identityTest()
+-void mip_matching_registration::stopping()
 -{
--    data::Image::csptr moving = createSphereImage<std::uint16_t, 3>();
--    data::Image::csptr fixed  = data::Object::copy(moving);
--    data::Matrix4::sptr mat   = data::Matrix4::New();
--
--    filter::image::RegistrationDispatch::Parameters params;
--    params.fixed     = fixed;
--    params.moving    = moving;
--    params.transform = data::Matrix4::New();
--    core::Type type = moving->getType();
--    core::tools::Dispatcher<core::tools::SupportedDispatcherTypes, RegistrationDispatch>::invoke(type, params);
--
--    for(std::size_t i = 0 ; i != 3 ; ++i)
--    {
--        CPPUNIT_ASSERT_EQUAL_MESSAGE(
--            "Translation value is not equal to '0' ",
--            0.,
--            (*params.transform)(i, 3)
--        );
--    }
 -}
 -
 -//------------------------------------------------------------------------------
 -
--void MIPMatchingRegistrationTest::translateTransformTest()
+-void mip_matching_registration::configuring()
 -{
--    data::Image::csptr moving = createSphereImage<std::uint16_t, 3>();
--    data::Image::sptr fixed   = data::Image::New();
--
--    data::Matrix4::sptr transform = data::Matrix4::New();
--    (*transform)(0, 3) = 4.;
--    (*transform)(1, 3) = 12.;
--    (*transform)(2, 3) = 7.;
--    sight::filter::image::Resampler::resample(moving, fixed, transform);
--
--    std::array<double, 3> expected {{4., 12., 7.}};
--    filter::image::RegistrationDispatch::Parameters params;
--    params.fixed     = fixed;
--    params.moving    = moving;
--    params.transform = data::Matrix4::New();
--    core::Type type = moving->getType();
--    core::tools::Dispatcher<core::tools::SupportedDispatcherTypes, RegistrationDispatch>::invoke(type, params);
--    for(std::size_t i = 0 ; i < 3 ; ++i)
--    {
--        CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
--            "Actual transform does not match expected results",
--            expected[i],
--            (*params.transform)(i, 3),
--            1e-2
--        );
--    }
 -}
 -
 -//------------------------------------------------------------------------------
 -
--void MIPMatchingRegistrationTest::translateTransformWithScalesTest()
+-void mip_matching_registration::updating()
 -{
--    using ImageType = itk::Image<std::uint16_t, 3>;
+-    const auto fixed  = m_target.lock();
+-    const auto moving = m_source.lock();
+-    auto transform    = m_transform.lock();
 -
--    // Create the moving image
--    auto movingSpacing = ImageType::SpacingType(1.);
--    movingSpacing[1] = 1.3;
--    data::Image::sptr moving = createSphereImage<std::uint16_t, 3>(movingSpacing);
--    data::Image::sptr fixed  = data::Image::New();
--    moving->setOrigin({107., 50., -30.});
+-    SIGHT_ASSERT("Missing required input 'fixed'", fixed);
+-    SIGHT_ASSERT("Missing required input 'moving'", moving);
+-    SIGHT_ASSERT("Missing required inout 'transform'", transform);
 -
--    // Translate the image a bit
--    std::array<double, 3> vTrans {{4., 19., 7.}};
--    data::Matrix4::sptr transform = data::Matrix4::New();
--    (*transform)(0, 3) = vTrans[0];
--    (*transform)(1, 3) = vTrans[1];
--    (*transform)(2, 3) = vTrans[2];
--    sight::filter::image::Resampler::resample(moving, fixed, transform);
--    auto fixedOrigin  = std::array<double, 3> {{20., 10., 35.}};
--    auto movingOrigin = moving->getOrigin();
--    fixed->setOrigin(fixedOrigin);
--    std::array<float, 3> expected {
--        {
--            float(movingOrigin[0] + vTrans[0] - fixedOrigin[0]),
--            float(movingOrigin[1] + vTrans[1] - fixedOrigin[1]),
--            float(movingOrigin[2] + vTrans[2] - fixedOrigin[2])
--        }
--    };
+-    sight::filter::image::registration_dispatch::parameters params;
+-    params.fixed     = fixed.get_shared();
+-    params.moving    = moving.get_shared();
+-    params.transform = transform.get_shared();
 -
--    auto itkFixed = io::itk::moveToItk<ImageType>(fixed);
+-    core::type type = moving->type();
+-    core::tools::dispatcher<core::tools::supported_dispatcher_types, sight::filter::image::registration_dispatch>
+-    ::invoke(type, params);
 -
--    // Resample the image to get a different spacing
--    ImageType::SizeType newSize {};
--    ImageType::SpacingType newSpacing(2.);
--    for(uint8_t i = 0 ; i != 3 ; ++i)
--    {
--        newSize[i] = static_cast<unsigned int>(movingSpacing[i] / newSpacing[i] * double(moving->getSize()[i]));
--    }
+-    transform->signal<data::matrix4::modified_signal_t>(data::matrix4::MODIFIED_SIG)->async_emit();
+-}
 -
--    auto resample = itk::ResampleImageFilter<ImageType, ImageType>::New();
--    resample->SetInput(itkFixed);
--    resample->SetSize(newSize);
--    resample->SetOutputSpacing(newSpacing);
--    resample->SetOutputOrigin(itkFixed->GetOrigin());
--    resample->Update();
--    auto* resampled        = resample->GetOutput();
--    auto resampledF4sFixed = io::itk::moveFromItk<ImageType>(resampled, true);
+-//------------------------------------------------------------------------------
 -
--    filter::image::RegistrationDispatch::Parameters params;
--    params.fixed     = resampledF4sFixed;
--    params.moving    = moving;
--    params.transform = data::Matrix4::New();
--    core::Type type = moving->getType();
--    core::tools::Dispatcher<core::tools::SupportedDispatcherTypes, RegistrationDispatch>::invoke(type, params);
--    for(std::size_t i = 0 ; i < 3 ; ++i)
--    {
--        CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
--            "Actual transform does not match expected results",
--            double(expected[i]),
--            (*params.transform)(i, 3),
--            double(movingSpacing[i])
--        );
--    }
+-void mip_matching_registration::compute_registration(core::clock::type /*timestamp*/)
+-{
+-    this->updating();
 -}
 -
--} // namespace sight::filter::image::ut
---- sight.orig/libs/filter/image/test/tu/MIPMatchingRegistrationTest.hpp
+-} // namespace sight::module::filter::image
+--- sight.orig/modules/filter/image/mip_matching_registration.hpp
 +++ /dev/null
-@@ -1,48 +0,0 @@
+@@ -1,117 +0,0 @@
 -/************************************************************************
 - *
-- * Copyright (C) 2021-2022 IRCAD France
-- * Copyright (C) 2018 IHU Strasbourg
+- * Copyright (C) 2018-2024 IRCAD France
+- * Copyright (C) 2018-2019 IHU Strasbourg
 - *
 - * This file is part of Sight.
 - *
@@ -463,49 +407,160 @@ Description: Remove service that requires ITKFFT which is not available on i386
 -
 -#pragma once
 -
--#include <cppunit/extensions/HelperMacros.h>
+-#include <data/image.hpp>
+-#include <data/matrix4.hpp>
 -
--namespace sight::filter::image::ut
--{
+-#include <service/registerer.hpp>
 -
--class MIPMatchingRegistrationTest : public CPPUNIT_NS::TestFixture
+-namespace sight::module::filter::image
 -{
--CPPUNIT_TEST_SUITE(MIPMatchingRegistrationTest);
--CPPUNIT_TEST(identityTest);
--CPPUNIT_TEST(translateTransformTest);
--CPPUNIT_TEST(translateTransformWithScalesTest);
--CPPUNIT_TEST_SUITE_END();
 -
+-/**
+- * @brief This service uses a fast registration algorithm to quickly register two images together if the transform
+- * between both is pure translation.
+- *
+- * @section Signals Signals
+- *
+- * @section Slots Slots
+- *   - \b update: compute the registration
+- *
+- * @section XML XML Configuration
+- *
+- * @code{.xml}
+-   <service uid="..." type="sight::module::filter::image::SFastRegistration">
+-       <in key="source" uid="..." />
+-       <in key="target" uid="..." />
+-       <in key="transform" uid="..." />
+-   </service>
+- * @endcode
+- *
+- * @subsection Input Input
+- * - \b source [sight::data::image]: Input image that will be aligned to the target.
+- * - \b target [sight::data::image]: Input image to which the source will be aligned.
+- *
+- * @subsection In-Out In-Out
+- * - \b transform [sight::data::matrix4]: initial registration. The computed registration will be
+- *   concatenated to the initial registration matrix.
+- */
+-class mip_matching_registration : public service::registerer
+-{
 -public:
 -
--    void setUp() override;
--    void tearDown() override;
+-    SIGHT_DECLARE_SERVICE(mip_matching_registration, service::registerer);
+-
+-    /**
+-     * @brief Constructor
+-     */
+-    mip_matching_registration() noexcept;
+-    /**
+-     * @brief Destructor
+-     */
+-    ~mip_matching_registration() noexcept override;
+-
+-protected:
 -
--    static void identityTest();
--    static void translateTransformTest();
--    static void translateTransformWithScalesTest();
+-    /**
+-     * @brief Starts the service.
+-     *
+-     * @throw core::tools::failed
+-     */
+-    void starting() override;
+-
+-    /**
+-     * @brief Stops the service.
+-     *
+-     * @throw core::tools::failed
+-     */
+-    void stopping() override;
+-
+-    /**
+-     * @brief Configures the service.
+-     *
+-     * @throw core::tools::failed
+-     */
+-    void configuring() override;
+-
+-    /**
+-     * @brief Compute the registration.
+-     *
+-     * @throw core::tools::failed
+-     */
+-    void updating() override;
+-
+-    /**
+-     * @brief Compute the registration by calling the `update` slot. The timestamp parameter is discarded.
+-     */
+-    void compute_registration(core::clock::type _timestamp) override;
+-
+-private:
+-
+-    sight::data::ptr<sight::data::image, sight::data::access::in> m_source {this, "fixed"};
+-    sight::data::ptr<sight::data::image, sight::data::access::in> m_target {this, "moving"};
+-    sight::data::ptr<sight::data::matrix4, sight::data::access::inout> m_transform {this, "transform"};
 -};
 -
--} // namespace sight::filter::image::ut
---- sight.orig/modules/filter/image/rc/plugin.xml
-+++ sight/modules/filter/image/rc/plugin.xml
-@@ -57,12 +57,6 @@
-      </extension>
+-} // namespace sight::module::filter::image
+--- sight.orig/libs/filter/image/spheroid_extraction.cpp
++++ sight/libs/filter/image/spheroid_extraction.cpp
+@@ -57,10 +57,9 @@
+         using image_t        = typename itk::Image<PIXELTYPE, 3>;
+         using binary_image_t = typename itk::Image<std::uint16_t, 3>;
+ 
+-        typename image_t::Pointer inputImage = io::itk::move_to_itk<image_t>(params.inputImage);
++        auto inputImage = io::itk::move_to_itk<image_t>(params.inputImage);
+ 
+-        typename itk::BinaryThresholdImageFilter<image_t, binary_image_t>::Pointer thresholdFilter =
+-            itk::BinaryThresholdImageFilter<image_t, binary_image_t>::New();
++        auto thresholdFilter = itk::BinaryThresholdImageFilter<image_t, binary_image_t>::New();
+ 
+         auto threshold = PIXELTYPE(params.threshold);
+         thresholdFilter->SetLowerThreshold(threshold);
+@@ -76,25 +75,24 @@
+         itk::ConnectedComponentImageFilter<binary_image_t, binary_image_t>::Pointer cc =
+             itk::ConnectedComponentImageFilter<binary_image_t, binary_image_t>::New();
+ 
+-        cc->set_input(thresholdFilter->GetOutput());
++        cc->SetInput(thresholdFilter->GetOutput());
+         cc->FullyConnectedOn();
+         cc->Update();
+ 
+         using label_stats_filter_t = itk::LabelGeometryImageFilter<binary_image_t, image_t>;
+-        typename label_stats_filter_t::Pointer labelGeometryFilter = label_stats_filter_t::New();
++        auto labelGeometryFilter = label_stats_filter_t::New();
+ 
+         labelGeometryFilter->SetInput(cc->GetOutput());
+         labelGeometryFilter->SetIntensityInput(inputImage);
+         labelGeometryFilter->Update();
+ 
+-        typename label_stats_filter_t::labels_t labels = labelGeometryFilter->GetLabels();
++        auto labels = labelGeometryFilter->GetLabels();
+ 
+         SIGHT_DEBUG("Number of labels : " << labelGeometryFilter->GetNumberOfLabels());
+ 
+-        typename label_stats_filter_t::labels_t::iterator labelsIt;
+-        for(labelsIt = labels.begin() ; labelsIt != labels.end() ; ++labelsIt)
++        for(auto labelsIt = labels.begin() ; labelsIt != labels.end() ; ++labelsIt)
+         {
+-            typename label_stats_filter_t::label_pixel_t labelValue = *labelsIt;
++            auto labelValue = *labelsIt;
+ 
+             const double radiusMean     = (params.radiusMax + params.radiusMin) / 2.;
+             const double meanElongation = (params.elongationMax + params.elongationMin) / 2.;
+@@ -133,7 +131,7 @@
+                 }
+ 
+                 data::point::sptr point = std::make_shared<data::point>(realPointCoords);
+-                params.outputPointList->getPoints().push_back(point);
++                params.outputPointList->get_points().push_back(point);
+             }
+         }
+     }
+@@ -162,7 +160,7 @@
+     params.elongationMax   = _elongationMax;
+ 
+     core::tools::dispatcher<core::tools::supported_dispatcher_types, SpheroidExtractor>::invoke(
+-        _image->getType(),
++        _image->type(),
+         params
+     );
  
-      <extension implements="sight::service::extension::Factory">
--          <type>sight::service::IRegisterer</type>
--          <service>sight::module::filter::image::SMIPMatchingRegistration</service>
--          <desc>This service uses a fast registration algorithm to quickly register two images together if the transform</desc>
--     </extension>
--
--     <extension implements="sight::service::extension::Factory">
-           <type>sight::service::IFilter</type>
-           <service>sight::module::filter::image::SMatrixRegressor</service>
-           <object>sight::data::Vector</object>
-@@ -96,4 +90,4 @@
-           <object key="target">sight::data::Object</object>
-           <desc>Apply a threshold on an image.</desc>
-      </extension>
--</plugin>
-\ No newline at end of file
-+</plugin>


=====================================
debian/patches/fix-multi-arch-folder-detection.patch
=====================================
@@ -1,35 +1,38 @@
---- sight.orig/libs/core/core/runtime/detail/Runtime.cpp
-+++ sight/libs/core/core/runtime/detail/Runtime.cpp
-@@ -60,23 +60,22 @@
+--- sight.orig/libs/__/core/runtime/detail/runtime.cpp
++++ sight/libs/__/core/runtime/detail/runtime.cpp
+@@ -60,26 +60,25 @@
  
      // In most cases, we can rely on finding sight_core library and then go upward in the filesystem tree
      // The lib location looks like 'SIGHT_DIR/lib/<arch>/libsight_core.*', where arch is optional
--    const std::string corePath = boost::dll::this_line_location().generic_string();
--    const std::string libPrefix("/" MODULE_LIB_PREFIX "/");
--    auto it = std::search(corePath.rbegin(), corePath.rend(), libPrefix.rbegin(), libPrefix.rend());
-+    const std::string corePath = boost::dll::this_line_location().string();
-+    const std::string libPrefix(MODULE_LIB_PREFIX);
-+    auto it = std::search(corePath.begin(), corePath.end(), libPrefix.begin(), libPrefix.end());
+-    const std::string core_path = boost::dll::this_line_location().generic_string();
+-    const std::string lib_prefix("/" MODULE_LIB_PREFIX "/");
+-    auto it = std::search(core_path.rbegin(), core_path.rend(), lib_prefix.rbegin(), lib_prefix.rend());
++    const std::string core_path = boost::dll::this_line_location().string();
++    const std::string lib_prefix(MODULE_LIB_PREFIX);
++    auto it = std::search(core_path.begin(), core_path.end(), lib_prefix.begin(), lib_prefix.end());
  
--    if(it == corePath.rend())
-+    if(it == corePath.end())
+-    if(it == core_path.rend())
++    if(it == core_path.end())
      {
          // But if we link statically, for instance linking with sight_core as an object library, then
          // boost::dll::this_line_location() will return the location of the current executable
          // In this case, we know that have to locate the bin directory instead of the library directory
--        const std::string binPrefix("/" MODULE_BIN_PREFIX "/");
--        it = std::search(corePath.rbegin(), corePath.rend(), binPrefix.rbegin(), binPrefix.rend());
--        SIGHT_FATAL_IF("Failed to locate Sight runtime. We tried to guess it from: " + corePath, it == corePath.rend());
-+        const std::string binPrefix(MODULE_BIN_PREFIX);
-+        it = std::search(corePath.begin(), corePath.end(), binPrefix.begin(), binPrefix.end());
-+        SIGHT_FATAL_IF("Failed to locate Sight runtime. We tried to guess it from: " + corePath, it == corePath.end());
+-        const std::string bin_prefix("/" MODULE_BIN_PREFIX "/");
+-        it = std::search(core_path.rbegin(), core_path.rend(), bin_prefix.rbegin(), bin_prefix.rend());
++        const std::string bin_prefix(MODULE_BIN_PREFIX);
++        it = std::search(core_path.begin(), core_path.end(), bin_prefix.begin(), bin_prefix.end());
+         SIGHT_FATAL_IF(
+             "Failed to locate Sight runtime. We tried to guess it from: " + core_path,
+-            it == core_path.rend()
++            it == core_path.end()
+         );
      }
  
--    const auto dist = std::distance(it, corePath.rend());
--    const std::filesystem::path libPath(corePath.begin(), corePath.begin() + dist - 1);
--    m_workingPath = libPath.parent_path().make_preferred();
-+    const std::filesystem::path libPath(corePath.begin(), it);
-+    m_workingPath = libPath.parent_path();
-     SIGHT_INFO("Located Sight runtime in folder: " + m_workingPath.string());
+-    const auto dist = std::distance(it, core_path.rend());
+-    const std::filesystem::path lib_path(core_path.begin(), core_path.begin() + dist - 1);
+-    m_working_path = std::filesystem::weakly_canonical(lib_path.parent_path().make_preferred());
++    const std::filesystem::path lib_path(core_path.begin(), it);
++    m_working_path = lib_path.parent_path();
+     SIGHT_INFO("Located Sight runtime in folder: " + m_working_path.string());
  }
  


=====================================
debian/patches/gcc13.patch
=====================================
@@ -1,5 +1,37 @@
---- sight.orig/libs/core/core/crypto/secure_string.hpp
-+++ sight/libs/core/core/crypto/secure_string.hpp
+Author: Flavien Bridault <fbridault at ircad.fr>
+Description: Fix for GCC13.
+Applied-Upstream: https://git.ircad.fr/sight/sight/-/commit/4570ebc3f1666ddf4af5e4d6a207a116b24a5d23
+--- sight.orig/libs/__/core/com/slot_base.hpp
++++ sight/libs/__/core/com/slot_base.hpp
+@@ -33,6 +33,7 @@
+ #include <core/mt/types.hpp>
+ #include <core/spy_log.hpp>
+ 
++#include <format>
+ #include <future>
+ #include <queue>
+ #include <set>
+@@ -225,7 +226,7 @@
+         template<typename F>
+         std::string get_type_name() const
+         {
+-            return std::string("function_type(") + std::string(typeid(F).name()) + std::string(")");
++            return std::format("function_type({})", typeid(F).name());
+         }
+ 
+         slot_base(unsigned int _arity) :
+--- sight.orig/libs/__/core/crypto/obfuscated_string.hpp
++++ sight/libs/__/core/crypto/obfuscated_string.hpp
+@@ -29,6 +29,7 @@
+ 
+ #include <array>
+ #include <iostream>
++#include <cstdint>
+ 
+ namespace sight::core::crypto
+ {
+--- sight.orig/libs/__/core/crypto/secure_string.hpp
++++ sight/libs/__/core/crypto/secure_string.hpp
 @@ -97,10 +97,4 @@
  {
      clear();
@@ -11,19 +43,9 @@
 -    // NOLINTNEXTLINE(bugprone-sizeof-container)
 -    std::fill_n(p, sizeof(*this), static_cast<char>(0));
  }
---- sight.orig/libs/core/core/crypto/obfuscated_string.hpp
-+++ sight/libs/core/core/crypto/obfuscated_string.hpp
-@@ -28,6 +28,7 @@
- 
- #include <array>
- #include <iostream>
-+#include <cstdint>
- 
- namespace sight::core::crypto
- {
---- sight.orig/libs/core/data/Series.cpp
-+++ sight/libs/core/data/Series.cpp
-@@ -1050,7 +1050,7 @@
+--- sight.orig/libs/__/data/series.cpp
++++ sight/libs/__/data/series.cpp
+@@ -1312,7 +1312,7 @@
      {
          try
          {
@@ -32,7 +54,16 @@
              return sop_class.m_keyword;
          }
          catch(...)
-@@ -2187,7 +2187,7 @@
+@@ -1335,7 +1335,7 @@
+ 
+ void series::set_sop_keyword(dicom::sop::Keyword _keyword)
+ {
+-    const auto& sop = dicom::sop::get(_keyword);
++    const auto sop = dicom::sop::get(_keyword);
+ 
+     m_pimpl->set_value<gdcm::Keywords::SOPClassUID>(std::string(sop.m_uid));
+ }
+@@ -2477,7 +2477,7 @@
  
          if(!trimmed.empty())
          {
@@ -41,8 +72,19 @@
              {
                  sop_keywords.insert(sop_keyword);
              }
---- sight.orig/libs/io/dicom/Reader.cpp
-+++ sight/libs/io/dicom/Reader.cpp
+--- sight.orig/libs/filter/image/flipper.cpp
++++ sight/libs/filter/image/flipper.cpp
+@@ -59,7 +59,7 @@
+         typename itk::FlipImageFilter<image_t>::FlipAxesArrayType axes;
+         for(std::size_t i = 0 ; i < axes.Size() && i < _params.i_flip_axes.size() ; i++)
+         {
+-            axes[i] = _params.i_flip_axes[i];
++            axes[static_cast<unsigned int>(i)] = _params.i_flip_axes[i];
+         }
+ 
+         flip_filter->SetFlipAxes(axes);
+--- sight.orig/libs/io/dicom/reader/file.cpp
++++ sight/libs/io/dicom/reader/file.cpp
 @@ -169,7 +169,7 @@
                  }
  
@@ -52,69 +94,19 @@
  
                  if(sop_keyword == data::dicom::sop::Keyword::INVALID)
                  {
---- sight.orig/libs/io/itk/NiftiImageReader.cpp
-+++ sight/libs/io/itk/NiftiImageReader.cpp
-@@ -118,7 +118,7 @@
+--- sight.orig/libs/io/itk/nifti_image_reader.cpp
++++ sight/libs/io/itk/nifti_image_reader.cpp
+@@ -107,7 +107,7 @@
      assert(!m_object.expired());
      assert(m_object.lock());
  
--    const core::Type& type = NiftiLoaderFunctor::getImageType(file.string());
-+    const core::Type type = NiftiLoaderFunctor::getImageType(file.string());
+-    const core::type& type = nifti_loader_functor::get_image_type(file.string());
++    const core::type type = nifti_loader_functor::get_image_type(file.string());
  
-     NiftiLoaderFunctor::Parameter param;
-     param.filename  = file.string();
---- sight.orig/libs/filter/image/Flipper.cpp
-+++ sight/libs/filter/image/Flipper.cpp
-@@ -59,7 +59,7 @@
-         typename itk::FlipImageFilter<ImageType>::FlipAxesArrayType axes;
-         for(std::size_t i = 0 ; i < axes.Size() && i < params.i_flipAxes.size() ; i++)
-         {
--            axes[i] = params.i_flipAxes[i];
-+            axes[static_cast<unsigned int>(i)] = params.i_flipAxes[i];
-         }
- 
-         flipFilter->SetFlipAxes(axes);
---- sight.orig/libs/filter/image/MinMaxPropagation.cpp
-+++ sight/libs/filter/image/MinMaxPropagation.cpp
-@@ -33,7 +33,7 @@
- 
- #include <itkFloodFilledImageFunctionConditionalIterator.h>
- #include <itkImage.h>
--#include <itkImageFunction.hxx>
-+#include <itkImageFunction.h>
- 
- #include <algorithm>
- #include <numeric>
-@@ -115,7 +115,7 @@
-         double distance2 = 0;
-         for(typename TImage::IndexValueType i = 0 ; i < IndexType::Dimension ; ++i)
-         {
--            const double realDim = double(imgSize[std::uint32_t(i)]) * imgSpacing[i];
-+            const double realDim = static_cast<double>((imgSize[static_cast<std::uint32_t>(i)])) * imgSpacing[static_cast<std::uint32_t>(i)];
-             distance2 += realDim * realDim;
-         }
- 
---- sight.orig/libs/core/core/com/SlotBase.hpp
-+++ sight/libs/core/core/com/SlotBase.hpp
-@@ -32,6 +32,7 @@
- #include <core/mt/types.hpp>
- #include <core/spyLog.hpp>
- 
-+#include <format>
- #include <future>
- #include <queue>
- #include <set>
-@@ -224,7 +225,7 @@
-         template<typename F>
-         std::string getTypeName() const
-         {
--            return std::string("function_type(") + std::string(typeid(F).name()) + std::string(")");
-+            return std::format("function_type({})", typeid(F).name());
-         }
- 
-         SlotBase(unsigned int arity) :
---- sight.orig/libs/io/session/detail/core/SessionSerializer.cpp
-+++ sight/libs/io/session/detail/core/SessionSerializer.cpp
+     nifti_loader_functor::parameter param;
+     param.filename   = file.string();
+--- sight.orig/libs/io/session/detail/core/session_serializer.cpp
++++ sight/libs/io/session/detail/core/session_serializer.cpp
 @@ -28,6 +28,7 @@
  #include <boost/property_tree/json_parser.hpp>
  
@@ -125,17 +117,55 @@
  namespace sight::io::session::detail
 @@ -249,13 +250,8 @@
          // Throw an exception in debug, but just report an error in release when encryption is not supported, but asked
-         if(!password.empty())
+         if(!_password.empty())
          {
 -            const std::string& message =
 -                "Archive format '"
--                + std::string(Archive::archiveFormatToString(archiveFormat))
+-                + std::string(archive::archive_format_to_string(_archive_format))
 -                + "' doesn't support encryption.";
 -
 -            SIGHT_ASSERT(message, false);
 -            SIGHT_ERROR(message);
 +            SIGHT_ERROR(std::format("Archive format '{}' doesn't support encryption.",
-+                        Archive::archiveFormatToString(archiveFormat)));
++                        archive::archive_format_to_string(_archive_format)));
          }
  
          // Create the archive that will hold all binary files
+--- sight.orig/libs/filter/image/min_max_propagation.cpp
++++ sight/libs/filter/image/min_max_propagation.cpp
+@@ -38,7 +38,7 @@
+ 
+ #include <itkFloodFilledImageFunctionConditionalIterator.h>
+ #include <itkImage.h>
+-#include <itkImageFunction.hxx>
++#include <itkImageFunction.h>
+ 
+ #include <algorithm>
+ #include <numeric>
+@@ -134,7 +134,7 @@
+         double distance2 = 0;
+         for(typename TImage::IndexValueType i = 0 ; i < index_t::Dimension ; ++i)
+         {
+-            const double real_dim = double(img_size[std::uint32_t(i)]) * img_spacing[i];
++            const double real_dim = static_cast<double>((img_size[static_cast<std::uint32_t>(i)])) * img_spacing[static_cast<std::uint32_t>(i)];
+             distance2 += real_dim * real_dim;
+         }
+ 
+--- sight.orig/cmake/build/macros.cmake
++++ sight/cmake/build/macros.cmake
+@@ -1121,6 +1121,15 @@
+                 "$<$<CONFIG:Release,RelWithDebInfo,MinSizeRel>:-Wno-restrict;-Wno-stringop-overflow;-Wno-array-bounds>"
+         )
+     endif()
++
++    if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 13.3)
++        # disable specific buggy warnings with GCC13.3
++        target_compile_options(
++            ${PROJECT}
++            PRIVATE
++                "$<$<CONFIG:Release,RelWithDebInfo,MinSizeRel>:-Wno-array-bounds>"
++        )
++    endif()
+ endmacro()
+ 
+ # Find link and manual dependencies for a target


=====================================
debian/patches/lintian_warnings.patch
=====================================
@@ -9,16 +9,16 @@ Forwarded: not-needed
  
  from jinja2 import Environment, PackageLoader, Template
  from pprint import pprint
---- sight.orig/libs/viz/scene3d/cmake/resources.cfg.in
-+++ sight/libs/viz/scene3d/cmake/resources.cfg.in
+--- sight.orig/libs/viz/scene3d/rc/resources.cfg
++++ sight/libs/viz/scene3d/rc/resources.cfg
 @@ -1,5 +1,5 @@
  [Sight]
 -FileSystem=Media/fonts/
 +FileSystem=/usr/share/fonts/truetype/dejavu/
  FileSystem=Media/
  
- FileSystem=Media/glsl/common
-@@ -29,4 +29,4 @@
+ FileSystem=Media/textures/
+@@ -30,4 +30,4 @@
  FileSystem=Media/compositors/frag
  FileSystem=Media/compositors/postFX
  
@@ -27,7 +27,7 @@ Forwarded: not-needed
 +FileSystem=Media/meshes
 --- sight.orig/cmake/build/macros.cmake
 +++ sight/cmake/build/macros.cmake
-@@ -794,7 +794,7 @@
+@@ -788,7 +788,7 @@
              # Install shortcut
              string(TOLOWER ${SIGHT_TARGET} APP_NAME)
  


=====================================
debian/patches/move-sightlog-in-libexec.patch
=====================================
@@ -1,8 +1,8 @@
 Author: Flavien Bridault <fbridault at ircad.fr>
 Description: sightlog is installed in /usr/libexec, this updates its path in the loading code.
 Forwarded: not-needed
---- sight.orig/libs/core/core/log/SpyLogger.cpp
-+++ sight/libs/core/core/log/SpyLogger.cpp
+--- sight.orig/libs/__/core/log/spy_logger.cpp
++++ sight/libs/__/core/log/spy_logger.cpp
 @@ -418,6 +418,7 @@
          {
              decltype(boost::this_process::path()) bin_paths;
@@ -10,4 +10,4 @@ Forwarded: not-needed
 +            bin_paths.push_back("/usr/libexec");
  
              // Also append all known location from runtime
-             const auto& paths = core::runtime::getBinariesPaths();
+             const auto& paths = core::runtime::get_binaries_paths();


=====================================
debian/patches/opencv46.patch
=====================================
@@ -0,0 +1,11 @@
+--- sight.orig/utils/aruco_marker/src/main.cpp
++++ sight/utils/aruco_marker/src/main.cpp
+@@ -68,7 +68,7 @@
+ 
+         cv::Mat marker;
+ 
+-#if CV_MAJOR_VERSION > 4 || (CV_MAJOR_VERSION == 4 && CV_VERSION_MINOR > 5)
++#if CV_MAJOR_VERSION > 4 || (CV_MAJOR_VERSION == 4 && CV_VERSION_MINOR > 6)
+         //Use the aruco original dictionary
+         const auto& dictionary = cv::aruco::getPredefinedDictionary(cv::aruco::DICT_ARUCO_ORIGINAL);
+ 


=====================================
debian/patches/series
=====================================
@@ -1,3 +1,5 @@
+dcmktk3.6.8.patch
+opencv46.patch
 fix-multi-arch-folder-detection.patch
 move-sightlog-in-libexec.patch
 lintian_warnings.patch


=====================================
debian/patches/vtk9.3.patch
=====================================
@@ -3,55 +3,52 @@ Author: Anton Gladky <gladk at debian.org>
 Bug-Debian: https://bugs.debian.org/1073822
 
 
-Index: sight-23.1.0/libs/core/core/runtime/detail/io/Validator.cpp
-===================================================================
---- sight-23.1.0.orig/libs/core/core/runtime/detail/io/Validator.cpp
-+++ sight-23.1.0/libs/core/core/runtime/detail/io/Validator.cpp
-@@ -110,7 +110,7 @@ void Validator::initializeContext()
+--- sight.orig/libs/__/core/runtime/detail/io/validator.cpp
++++ sight/libs/__/core/runtime/detail/io/validator.cpp
+@@ -110,7 +110,7 @@
          }
  
          // Set the structured error callback
--        xmlSchemaSetParserStructuredErrors(m_schemaParserContext.get(), Validator::ErrorHandler, this);
-+        xmlSchemaSetParserStructuredErrors(m_schemaParserContext.get(), reinterpret_cast<xmlStructuredErrorFunc>(Validator::ErrorHandler), this);
+-        xmlSchemaSetParserStructuredErrors(m_schema_parser_context.get(), validator::error_handler, this);
++        xmlSchemaSetParserStructuredErrors(m_schema_parser_context.get(), reinterpret_cast<xmlStructuredErrorFunc>(validator::error_handler), this);
      }
  
      // Load XML schema content
-@@ -127,7 +127,7 @@ void Validator::initializeContext()
-     if((m_schemaValidContext = SchemaValidCtxtSptr(xmlSchemaNewValidCtxt(m_schema.get()), xmlSchemaFreeValidCtxt)))
+@@ -127,7 +127,7 @@
+     if((m_schema_valid_context = schema_valid_ctxt_sptr(xmlSchemaNewValidCtxt(m_schema.get()), xmlSchemaFreeValidCtxt)))
      {
          // Set the structured error callback
--        xmlSchemaSetValidStructuredErrors(m_schemaValidContext.get(), Validator::ErrorHandler, this);
-+        xmlSchemaSetValidStructuredErrors(m_schemaValidContext.get(), reinterpret_cast<xmlStructuredErrorFunc>(Validator::ErrorHandler), this);
+-        xmlSchemaSetValidStructuredErrors(m_schema_valid_context.get(), validator::error_handler, this);
++        xmlSchemaSetValidStructuredErrors(m_schema_valid_context.get(), reinterpret_cast<xmlStructuredErrorFunc>(validator::error_handler), this);
      }
  }
  
-@@ -201,7 +201,7 @@ bool Validator::validate(xmlNodePtr node
+@@ -201,7 +201,7 @@
  
  //------------------------------------------------------------------------------
  
--void Validator::ErrorHandler(void* userData, xmlErrorPtr error)
-+void Validator::ErrorHandler(void* userData, const xmlErrorPtr error)
+-void validator::error_handler(void* _user_data, xmlErrorPtr _error)
++void validator::error_handler(void* _user_data, const xmlErrorPtr _error)
  {
-     auto* validator = reinterpret_cast<Validator*>(userData);
+     auto* validator = reinterpret_cast<class validator*>(_user_data);
  
-Index: sight-23.1.0/libs/core/core/runtime/detail/io/Validator.hpp
-===================================================================
---- sight-23.1.0.orig/libs/core/core/runtime/detail/io/Validator.hpp
-+++ sight-23.1.0/libs/core/core/runtime/detail/io/Validator.hpp
-@@ -26,6 +26,7 @@
+--- sight.orig/libs/__/core/runtime/detail/io/validator.hpp
++++ sight/libs/__/core/runtime/detail/io/validator.hpp
+@@ -25,7 +25,7 @@
+ #include <sight/core/config.hpp>
  
  #include <libxml/tree.h>
- #include <libxml/xmlschemastypes.h>
+-#include <libxml/xmlschemastypes.h>
 +#include <libxml/xmlschemas.h>
  
  #include <filesystem>
  #include <sstream>
-@@ -131,7 +132,7 @@ private:
-     SchemaSptr m_schema;
-     SchemaValidCtxtSptr m_schemaValidContext;
+@@ -131,7 +131,7 @@
+     schema_sptr m_schema;
+     schema_valid_ctxt_sptr m_schema_valid_context;
  
--    static void ErrorHandler(void* userData, xmlErrorPtr error);
-+    static void ErrorHandler(void* userData, const xmlErrorPtr error);
+-    static void error_handler(void* _user_data, xmlErrorPtr _error);
++    static void error_handler(void* _user_data, const xmlErrorPtr _error);
  };
  
  } // namespace sight::core::runtime::detail::io


=====================================
debian/rules
=====================================
@@ -40,4 +40,4 @@ override_dh_install:
 	dh_install
 	sed -i -e 's@^me=.*$$@me=/usr/bin@' \
 		-e 's@^rootdir=.*$$@rootdir=/usr@' \
-		debian/sightviewer/usr/bin/sightviewer
+		debian/sightviewer/usr/bin/sight_viewer


=====================================
debian/sightcalibrator.install
=====================================
@@ -1,3 +1,3 @@
-usr/bin/sightcalibrator
-usr/share/sight/SightCalibrator*
-usr/share/man/man1/sightcalibrator.1
+usr/bin/sight_calibrator
+usr/share/sight/sight_calibrator*
+usr/share/man/man1/sight_calibrator.1


=====================================
debian/sightviewer.install
=====================================
@@ -1,3 +1,3 @@
-usr/bin/sightviewer
-usr/share/sight/SightViewer*
-usr/share/man/man1/sightviewer.1
+usr/bin/sight_viewer
+usr/share/sight/sight_viewer*
+usr/share/man/man1/sight_viewer.1



View it on GitLab: https://salsa.debian.org/med-team/sight/-/commit/69121d4e6e407c7d6503b66b891e5a971c579051

-- 
This project does not include diff previews in email notifications.
View it on GitLab: https://salsa.debian.org/med-team/sight/-/commit/69121d4e6e407c7d6503b66b891e5a971c579051
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/debian-med-commit/attachments/20240716/0dfd08cd/attachment-0001.htm>


More information about the debian-med-commit mailing list