Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

itk: simplify patching, restore DCMTK support #21651

Open
wants to merge 9 commits into
base: master
Choose a base branch
from

Conversation

valgur
Copy link
Contributor

@valgur valgur commented Dec 6, 2023

Moves most of the patching logic to the included .cmake file and _patch_sources().
Mostly as a preparation for a version bump to v5.3 or v5.4-rc1, which require further work.

@conan-center-bot

This comment has been minimized.

Copy link
Member

@AbrilRBS AbrilRBS left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm picking this one up now @valgur thanks a lot for the links in the custom cmake, they are quite useful!

Do you have any extra insight that might be useful when trying to add the new 5.4 version in a follow-up PR? Thanks!

@valgur
Copy link
Contributor Author

valgur commented Aug 21, 2024

@AbrilRBS It has been a while and I don't remember a single thing about this PR or recipe anymore, sorry. I'll see if I can get this PR to pass at least, though.

@conan-center-bot

This comment has been minimized.

@conan-center-bot

This comment has been minimized.

@conan-center-bot

This comment has been minimized.

@conan-center-bot

This comment has been minimized.

@conan-center-bot
Copy link
Collaborator

Conan v1 pipeline ❌

Failure in build 5 (46cccd52922575e67ef83bd554f7f772cd0474a8):

  • itk/5.1.2:
    CI failed to create some packages (All logs)

    Logs for packageID c5f60f3f2715152e03b7233f6699bb49c7eb7aeb:
    [settings]
    arch=x86_64
    build_type=Release
    compiler=gcc
    compiler.libcxx=libstdc++11
    compiler.version=7
    os=Linux
    [options]
    itk:shared=False
    
    [...]
      CMakeLists.txt:478 (include)
    
    
    CMake Warning at /home/conan/workspace/prod-v1/bsr/88608/baaec/.conan/data/itk/5.1.2/_/_/build/c5f60f3f2715152e03b7233f6699bb49c7eb7aeb/build/Release/generators/DCMTKTargets.cmake:187 (message):
      Target name 'dcmxml' already exists.
    Call Stack (most recent call first):
      /home/conan/workspace/prod-v1/bsr/88608/baaec/.conan/data/itk/5.1.2/_/_/build/c5f60f3f2715152e03b7233f6699bb49c7eb7aeb/build/Release/generators/DCMTKConfig.cmake:16 (include)
      Modules/ThirdParty/DCMTK/itk-module-init.cmake:27 (find_package)
      CMake/ITKModuleEnablement.cmake:321 (include)
      CMakeLists.txt:478 (include)
    
    
    CMake Warning at /home/conan/workspace/prod-v1/bsr/88608/baaec/.conan/data/itk/5.1.2/_/_/build/c5f60f3f2715152e03b7233f6699bb49c7eb7aeb/build/Release/generators/DCMTKTargets.cmake:193 (message):
      Target name 'oficonv' already exists.
    Call Stack (most recent call first):
      /home/conan/workspace/prod-v1/bsr/88608/baaec/.conan/data/itk/5.1.2/_/_/build/c5f60f3f2715152e03b7233f6699bb49c7eb7aeb/build/Release/generators/DCMTKConfig.cmake:16 (include)
      Modules/ThirdParty/DCMTK/itk-module-init.cmake:27 (find_package)
      CMake/ITKModuleEnablement.cmake:321 (include)
      CMakeLists.txt:478 (include)
    
    
    In file included from /home/conan/workspace/prod-v1/bsr/88608/baaec/.conan/data/itk/5.1.2/_/_/build/c5f60f3f2715152e03b7233f6699bb49c7eb7aeb/src/Modules/ThirdParty/MetaIO/src/MetaIO/src/metaTypes.h:12:0,
                     from /home/conan/workspace/prod-v1/bsr/88608/baaec/.conan/data/itk/5.1.2/_/_/build/c5f60f3f2715152e03b7233f6699bb49c7eb7aeb/src/Modules/ThirdParty/MetaIO/src/MetaIO/src/metaUtils.h:34,
                     from /home/conan/workspace/prod-v1/bsr/88608/baaec/.conan/data/itk/5.1.2/_/_/build/c5f60f3f2715152e03b7233f6699bb49c7eb7aeb/src/Modules/ThirdParty/MetaIO/src/MetaIO/src/metaUtils.cxx:29:
    /home/conan/workspace/prod-v1/bsr/88608/baaec/.conan/data/itk/5.1.2/_/_/build/c5f60f3f2715152e03b7233f6699bb49c7eb7aeb/src/Modules/ThirdParty/MetaIO/src/MetaIO/src/localMetaConfiguration.h:30:12: fatal error: zlib.h: No such file or directory
       #include "zlib.h"
                ^~~~~~~~
    compilation terminated.
    make[2]: *** [Modules/ThirdParty/MetaIO/src/MetaIO/src/CMakeFiles/ITKMetaIO.dir/metaUtils.cxx.o] Error 1
    make[1]: *** [Modules/ThirdParty/MetaIO/src/MetaIO/src/CMakeFiles/ITKMetaIO.dir/all] Error 2
    make[1]: *** Waiting for unfinished jobs....
    make: *** [all] Error 2
    WARN: *** Conan 1 is legacy and on a deprecation path ***
    WARN: *** Please upgrade to Conan 2 ***
    WARN: dcmtk/3.6.8: requirement zlib/[>=1.2.11 <2] overridden by itk/5.1.2 to zlib/1.3.1 
    WARN: dcmtk/3.6.8: requirement libpng/1.6.40 overridden by itk/5.1.2 to libpng/1.6.43 
    WARN: libxml2/2.11.4: requirement zlib/[>=1.2.11 <2] overridden by dcmtk/3.6.8 to zlib/1.3.1 
    WARN: openssl/3.3.1: requirement zlib/[>=1.2.11 <2] overridden by dcmtk/3.6.8 to zlib/1.3.1 
    WARN: libpng/1.6.43: requirement zlib/[>=1.2.11 <2] overridden by dcmtk/3.6.8 to zlib/1.3.1 
    WARN: libtiff/4.6.0: requirement zlib/[>=1.2.11 <2] overridden by dcmtk/3.6.8 to zlib/1.3.1 
    WARN: gdcm/3.0.21: requirement expat/[>=2.6.2 <3] overridden by itk/5.1.2 to expat/2.6.2 
    WARN: gdcm/3.0.21: requirement zlib/[>=1.2.11 <2] overridden by itk/5.1.2 to zlib/1.3.1 
    WARN: hdf5/1.14.1: requirement zlib/[>=1.2.11 <2] overridden by itk/5.1.2 to zlib/1.3.1 
    itk/5.1.2: WARN: Using the new toolchains and generators without specifying a build profile (e.g: -pr:b=default) is discouraged and might cause failures and unexpected behavior
    itk/5.1.2: WARN: Using the new toolchains and generators without specifying a build profile (e.g: -pr:b=default) is discouraged and might cause failures and unexpected behavior
    itk/5.1.2: ERROR: Package 'c5f60f3f2715152e03b7233f6699bb49c7eb7aeb' build failed
    itk/5.1.2: WARN: Build folder /home/conan/workspace/prod-v1/bsr/88608/baaec/.conan/data/itk/5.1.2/_/_/build/c5f60f3f2715152e03b7233f6699bb49c7eb7aeb/build/Release
    ERROR: itk/5.1.2: Error in build() method, line 264
    	cmake.build()
    	ConanException: Error 2 while executing cmake --build "/home/conan/workspace/prod-v1/bsr/88608/baaec/.conan/data/itk/5.1.2/_/_/build/c5f60f3f2715152e03b7233f6699bb49c7eb7aeb/build/Release" '--' '-j3'
    
  • itk/5.1.0:
    Didn't run or was cancelled before finishing


Note: To save resources, CI tries to finish as soon as an error is found. For this reason you might find that not all the references have been launched or not all the configurations for a given reference. Also, take into account that we cannot guarantee the order of execution as it depends on CI workload and workers availability.


Conan v2 pipeline ❌

Note: Conan v2 builds are now mandatory. Please read our discussion about it.

The v2 pipeline failed. Please, review the errors and note this is required for pull requests to be merged. In case this recipe is still not ported to Conan 2.x, please, ping @conan-io/barbarians on the PR and we will help you.

Failure in build 5 (46cccd52922575e67ef83bd554f7f772cd0474a8):

  • itk/5.1.2:
    CI failed to create some packages (All logs)

    Logs for packageID 0aece0dabb362c3edce1110f0720debbc703cfb7:
    [settings]
    arch=x86_64
    build_type=Release
    compiler=gcc
    compiler.cppstd=17
    compiler.libcxx=libstdc++11
    compiler.version=11
    os=Linux
    [options]
    */*:shared=False
    
    [...]
    [ 26%] Building C object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/lapack/single/slas2.c.o
    [ 26%] Building C object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/lapack/single/slaset.c.o
    [ 26%] Building C object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/lapack/single/slassq.c.o
    [ 26%] Building C object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/lapack/single/slasv2.c.o
    [ 26%] Building C object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/lapack/single/sorg2r.c.o
    [ 27%] Building C object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/lapack/single/sorm2r.c.o
    [ 27%] Building C object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/lapack/single/sormr2.c.o
    [ 27%] Building C object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/lapack/single/stgsja.c.o
    [ 27%] Building C object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/lapack/util/ieeeck.c.o
    [ 27%] Building C object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/lapack/util/ilaenv.c.o
    [ 27%] Building C object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/lapack/util/izmax1.c.o
    [ 27%] Building C object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/lapack/util/lsame.c.o
    [ 27%] Building C object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/napack/cg.c.o
    [ 27%] Building C object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/minpack/dpmpar.c.o
    [ 27%] Building C object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/minpack/enorm.c.o
    [ 27%] Building C object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/minpack/fdjac2.c.o
    [ 28%] Building C object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/minpack/lmder.c.o
    [ 28%] Building C object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/minpack/lmder1.c.o
    [ 28%] Building C object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/minpack/lmdif.c.o
    [ 28%] Building C object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/minpack/lmpar.c.o
    [ 28%] Building C object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/minpack/qrfac.c.o
    [ 28%] Building C object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/minpack/qrsolv.c.o
    [ 28%] Building C object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/opt/lbfgs.c.o
    [ 28%] Building C object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/opt/lbfgsb.c.o
    [ 28%] Building CXX object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/linalg/lsqrBase.cxx.o
    [ 28%] Building CXX object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/linalg/lsqrDense.cxx.o
    [ 28%] Building CXX object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/linalg/lsmrBase.cxx.o
    [ 28%] Building CXX object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/linalg/lsmrDense.cxx.o
    [ 29%] Building C object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/toms/rpoly.c.o
    [ 29%] Building C object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/datapac/camsun.c.o
    [ 29%] Building C object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/mathews/simpson.c.o
    [ 29%] Building C object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/mathews/trapezod.c.o
    [ 29%] Building C object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/mathews/adaquad.c.o
    [ 29%] Building C object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/sparse/spAllocate.c.o
    [ 29%] Building C object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/sparse/spBuild.c.o
    [ 29%] Building C object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/sparse/spFactor.c.o
    [ 29%] Building C object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/sparse/spSolve.c.o
    [ 29%] Building C object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/sparse/spUtils.c.o
    [ 29%] Building C object Modules/ThirdParty/VNL/src/vxl/v3p/netlib/CMakeFiles/itkv3p_netlib.dir/sparse/spOutput.c.o
    [ 30%] Linking CXX static library ../../../../../../../lib/libitkv3p_netlib-5.1.a
    [ 30%] Built target itkv3p_netlib
    Makefile:151: recipe for target 'all' failed
    make: *** [all] Error 2
    
    itk/5.1.2: ERROR: 
    Package '0aece0dabb362c3edce1110f0720debbc703cfb7' build failed
    itk/5.1.2: WARN: Build folder /home/conan/workspace/prod-v2/bsr/79360/faaeb/p/b/itk8c44d2d6d0aed/b/build/Release
    ERROR: itk/5.1.2: Error in build() method, line 264
    	cmake.build()
    	ConanException: Error 2 while executing
    
  • itk/5.1.0:
    Didn't run or was cancelled before finishing


Note: To save resources, CI tries to finish as soon as an error is found. For this reason you might find that not all the references have been launched or not all the configurations for a given reference. Also, take into account that we cannot guarantee the order of execution as it depends on CI workload and workers availability.

Copy link
Member

@uilianries uilianries left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not really sure about this "simplification". Skipping ITK CMake files requires not double check, but triple check due its complexity and what are are missing. Even vcpkg is not doing, but keeping the original files.

Comment on lines +238 to +253
# Unvendor ZLIB
for path in [
os.path.join(self.source_folder, "Modules", "IO", "GIPL", "src", "itkGiplImageIO.cxx"),
os.path.join(self.source_folder, "Modules", "IO", "PhilipsREC", "src", "itkPhilipsRECImageIO.cxx"),
os.path.join(self.source_folder, "Modules", "Nonunit", "Review", "src", "itkVoxBoCUBImageIO.cxx"),
os.path.join(self.source_folder, "Modules", "ThirdParty", "GDCM", "src", "gdcm", "Utilities", "gdcm_zlib.h"),
os.path.join(self.source_folder, "Modules", "ThirdParty", "GIFTI", "src", "gifticlib", "gifti_io.h"),
os.path.join(self.source_folder, "Modules", "ThirdParty", "NIFTI", "src", "nifti", "znzlib", "znzlib.h"),
os.path.join(self.source_folder, "Modules", "ThirdParty", "MetaIO", "src", "MetaIO", "src", "localMetaConfiguration.h"),
os.path.join(self.source_folder, "Modules", "ThirdParty", "MINC", "src", "libminc", "nifti", "znzlib.h"),
os.path.join(self.source_folder, "Modules", "ThirdParty", "NrrdIO", "src", "NrrdIO", "unteem.pl"),
os.path.join(self.source_folder, "Modules", "ThirdParty", "NrrdIO", "src", "NrrdIO", "privateNrrd.h"),
]:
replace_in_file(self, path, "itk_zlib.h", "zlib.h")
# Truncate some third-party modules that are provided by conan_cmake_project_include.cmake
for pkg in ["DCMTK", "DoubleConversion", "GDCM", "Expat", "HDF5", "JPEG", "PNG", "TIFF", "ZLIB"]:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# Unvendor ZLIB
for path in [
os.path.join(self.source_folder, "Modules", "IO", "GIPL", "src", "itkGiplImageIO.cxx"),
os.path.join(self.source_folder, "Modules", "IO", "PhilipsREC", "src", "itkPhilipsRECImageIO.cxx"),
os.path.join(self.source_folder, "Modules", "Nonunit", "Review", "src", "itkVoxBoCUBImageIO.cxx"),
os.path.join(self.source_folder, "Modules", "ThirdParty", "GDCM", "src", "gdcm", "Utilities", "gdcm_zlib.h"),
os.path.join(self.source_folder, "Modules", "ThirdParty", "GIFTI", "src", "gifticlib", "gifti_io.h"),
os.path.join(self.source_folder, "Modules", "ThirdParty", "NIFTI", "src", "nifti", "znzlib", "znzlib.h"),
os.path.join(self.source_folder, "Modules", "ThirdParty", "MetaIO", "src", "MetaIO", "src", "localMetaConfiguration.h"),
os.path.join(self.source_folder, "Modules", "ThirdParty", "MINC", "src", "libminc", "nifti", "znzlib.h"),
os.path.join(self.source_folder, "Modules", "ThirdParty", "NrrdIO", "src", "NrrdIO", "unteem.pl"),
os.path.join(self.source_folder, "Modules", "ThirdParty", "NrrdIO", "src", "NrrdIO", "privateNrrd.h"),
]:
replace_in_file(self, path, "itk_zlib.h", "zlib.h")
# Truncate some third-party modules that are provided by conan_cmake_project_include.cmake
for pkg in ["DCMTK", "DoubleConversion", "GDCM", "Expat", "HDF5", "JPEG", "PNG", "TIFF", "ZLIB"]:
# Truncate some third-party modules that are provided by conan_cmake_project_include.cmake
for pkg in ["DCMTK", "DoubleConversion", "GDCM", "Expat", "HDF5", "JPEG", "PNG", "TIFF"]:

Not needed to manipulate zlib, all files have a ifdef to detect what should be included. Those that are using itk_zlib.h will point to zlib as well due cmake configuration.

tc.variables["ITK_USE_SYSTEM_DCMTK"] = True
tc.variables["ITK_USE_SYSTEM_DOUBLECONVERSION"] = True
tc.variables["ITK_USE_SYSTEM_EIGEN"] = True
tc.variables["ITK_USE_SYSTEM_FFTW"] = True
tc.variables["ITK_USE_SYSTEM_GDCM"] = True
tc.variables["ITK_USE_SYSTEM_HDF5"] = True
tc.variables["ITK_USE_SYSTEM_ICU"] = True
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@valgur
Copy link
Contributor Author

valgur commented Sep 13, 2024

I'm not really sure about this "simplification". Skipping ITK CMake files requires not double check, but triple check due its complexity and what are are missing. Even vcpkg is not doing, but keeping the original files.

It started out reasonable-ish, but after all of the additional required fixes and the added unvendorings, the change became a lot less useful, I agree. I'll probably get rid of it when I'm working on the recipe again.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants