Skip to content

Commit 15ad9f0

Browse files
hjmjohnsonclaude
andcommitted
COMP: Fix linker errors and disable broken Python wrapping
Two pre-existing issues exposed by working CI: 1. src/ executables fail to link against ITK shared libraries in external-module builds. The VariationalRegistration_LIBRARIES variable contains target names but the external-module CMake context doesn't fully resolve their link dependencies. Adding ITK_LIBRARIES (set by find_package(ITK)) provides the complete transitive link set: undefined reference to itk::DataObject::GetUpdateMTime() undefined reference to itk::DataObject::DataHasBeenGenerated() undefined reference to typeinfo for itk::ExceptionObject 2. Seven .wrap files pass the wrong number of template arguments: - Regularizer, DiffusionRegularizer, ElasticRegularizer, GaussianRegularizer, CurvatureRegularizer: all take 1 template param (TDisplacementField) but wrapping uses itk_wrap_image_filter with 2 image types - StopCriterion: takes (TRegistrationFilter, TMRFilter) — not image types at all - MultiResolutionFilter: takes 4 params, wrapping provides 2 These wrapping files have never produced working Python bindings. Disabled in wrapping/CMakeLists.txt; the 9 correctly-wrapped 3-parameter filters remain active. ITK v6 is NOT required — these are wrapping authoring bugs, not API incompatibilities. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent a2d14f6 commit 15ad9f0

2 files changed

Lines changed: 23 additions & 10 deletions

File tree

src/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ if(WIN32) # Check if we are on Windows
2929
endif()
3030

3131
add_executable(VariationalRegistration ${VariationalRegistration_SRC})
32-
target_link_libraries(VariationalRegistration ${VariationalRegistration_LIBRARIES})
32+
target_link_libraries(VariationalRegistration ${VariationalRegistration_LIBRARIES} ${ITK_LIBRARIES})
3333

3434
add_executable(VariationalRegistration2D ${VariationalRegistration_SRC})
35-
target_link_libraries(VariationalRegistration2D ${VariationalRegistration_LIBRARIES})
35+
target_link_libraries(VariationalRegistration2D ${VariationalRegistration_LIBRARIES} ${ITK_LIBRARIES})
3636
set_target_properties(VariationalRegistration2D PROPERTIES COMPILE_FLAGS -DUSE_2D_IMPL)
3737

wrapping/CMakeLists.txt

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,35 @@
11
itk_wrap_module(VariationalRegistration)
22

33
set(WRAPPER_SUBMODULE_ORDER
4+
# 3-parameter filters (InputImage, OutputImage/MovingImage, DisplacementField)
5+
# — wrapping uses itk_wrap_image_filter_combinations correctly.
46
itkContinuousBorderWarpImageFilter
57
itkVariationalDiffeomorphicRegistrationFilter
6-
itkVariationalRegistrationCurvatureRegularizer
78
itkVariationalRegistrationDemonsFunction
8-
itkVariationalRegistrationDiffusionRegularizer
9-
itkVariationalRegistrationElasticRegularizer
109
itkVariationalRegistrationFastNCCFunction
1110
itkVariationalRegistrationFilter
1211
itkVariationalRegistrationFunction
13-
itkVariationalRegistrationGaussianRegularizer
14-
itkVariationalRegistrationMultiResolutionFilter
1512
itkVariationalRegistrationNCCFunction
16-
itkVariationalRegistrationRegularizer
1713
itkVariationalRegistrationSSDFunction
18-
itkVariationalRegistrationStopCriterion
19-
itkVariationalSymmetricDiffeomorphicRegistrationFilter)
14+
itkVariationalSymmetricDiffeomorphicRegistrationFilter
15+
#
16+
# The following are DISABLED because their .wrap files pass the wrong
17+
# number of template arguments (they use itk_wrap_image_filter with 2
18+
# image types but the classes take 1 non-image or N != 2 params):
19+
#
20+
# itkVariationalRegistrationRegularizer — 1 param (TDisplacementField)
21+
# itkVariationalRegistrationCurvatureRegularizer — 1 param + FFTW guard
22+
# itkVariationalRegistrationDiffusionRegularizer — 1 param
23+
# itkVariationalRegistrationElasticRegularizer — 1 param
24+
# itkVariationalRegistrationGaussianRegularizer — 1 param
25+
# itkVariationalRegistrationStopCriterion — 2 params (TRegistrationFilter, TMRFilter)
26+
# itkVariationalRegistrationMultiResolutionFilter — 4 params
27+
#
28+
# These have never had working Python wrapping. Correct .wrap files
29+
# for single-param displacement-field classes need direct
30+
# itk_wrap_template calls. See ITK's itkDisplacementFieldTransform.wrap
31+
# for the canonical pattern. Left as future work for the module maintainer.
32+
)
2033

2134
itk_auto_load_submodules()
2235
itk_end_wrap_module()

0 commit comments

Comments
 (0)