forked from InsightSoftwareConsortium/ITK
/
ITKGroups.cmake
146 lines (126 loc) · 5.55 KB
/
ITKGroups.cmake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# Set a list of group names
set(group_list
Core
IO
Filtering
Registration
Segmentation
Numerics
Video
ThirdParty
Bridge
Nonunit
Compatibility
Remote
)
set(Core_documentation "This group of modules contain the toolkit framework used
by other modules. There are common base classes for data objects and process
objects, basic data structures such as Image, Mesh, QuadEdgeMesh, and
SpatialObjects, and common functionality for operations such as finite
differences, image adaptors, or image transforms.")
set(Compatibility_documentation "This group contains modules that ease the transition to ITKv4 and Deprecated classes.")
set(IO_documentation "This group of modules contains classes for reading and
writing images and other data objects.")
set(Filtering_documentation "This group of modules are filters that modify data
in the ITK pipeline framework. These filters take an input object, such as an
Image, and modify it to create an output. Filters can be chained together to
create a processing pipeline.")
set(Registration_documentation "This group of modules address the registration
problem: find the spatial transformation between two images. This is a high
level group that makes use of many lower level modules such as ITKTransform,
ITKOptimizers, ITKFiniteDifference, and ITKFEM.")
set(Segmentation_documentation "This group of modules address the segmentation
problem: partition the image into classified regions (labels). This is a high
level group that makes use of many lower level modules such as ITKQuadEdgeMesh
and ITKNarrowBand.")
set(Numerics_documentation "This group of modules are basic numerical tools and
algorithms that have general applications outside of imaging.")
set(Video_documentation "This group of modules handles input, output and processing
of static and real-time data with temporal components. It also handles communications
to OpenCV and VXL external libraires.")
set(Bridge_documentation "This group of modules are intended to bridge ITK to
other toolkits as libraries such as visualization toolkits.")
set(ThirdParty_documentation "This group of modules are third party libraries
used by other ITK modules.")
set(Nonunit_documentation "This group of modules are intended to make use of an
extensive set of the toolkit modules.")
set(Remote_documentation "This group of modules is for ITK based code that have
additional third-party dependencies not bundled with the toolkit,
new algorithms or implementations seeking greater exposure and adoption,
algorithms that hope to eventually be integrated into the toolkit,
niche algorithms with limited application, and Modules in progress that do not
yet have the test coverage and cross-platform standards required by the main toolkit.
The modules are OFF by default in ITK's CMake configuration.
Note that these modules do get the same level of support and backwards
compatibility as other modules in the toolkit.")
#------------------------------------------------
# Find the modules in each group and the module name line in itk-module.cmake
foreach( group ${group_list} )
set( _${group}_module_list )
file( GLOB_RECURSE _${group}_module_files ${ITK_SOURCE_DIR}/Modules/${group}/itk-module.cmake )
foreach( _module_file ${_${group}_module_files} )
file( STRINGS ${_module_file} _module_line REGEX "itk_module[ \n]*\\([ \n]*[A-Za-z0-9]*" )
string( REGEX MATCH "(\\([ \n]*)([A-Za-z0-9]*)" _module_name ${_module_line} )
set( _module_name ${CMAKE_MATCH_2} )
set( _${_module_name}_module_line ${_module_line} )
list( APPEND _${group}_module_list ${_module_name} )
endforeach()
endforeach()
#------------------------------------------------
# Set up Doxygen Group descriptions
set( group_list_dox )
foreach(group ${group_list} )
set( group_list_dox
"${group_list_dox}
// -----------------------------------------------
// Group ${group}
/** \\defgroup Group-${group} Group ${group}
${${group}_documentation} */\n"
)
foreach(mod ${_${group}_module_list} )
set( group_list_dox
"${group_list_dox}
/** \\defgroup ${mod} Module ${mod}
\\ingroup Group-${group} */\n"
)
endforeach()
endforeach()
set( _content ${group_list_dox} )
configure_file(
"${ITK_SOURCE_DIR}/Utilities/Doxygen/Module.dox.in"
"${ITK_BINARY_DIR}/Utilities/Doxygen/Modules/ITK-AllGroups.dox"
)
#------------------------------------------------
# Turn on the ITK_BUILD option for each group
# Set a module name list for each group and exclude
# Modules that should be OFF
foreach( group ${group_list} )
set( _${group}_on_module_list )
list( LENGTH _${group}_module_list _num_modules )
set( _current_module 0 )
while( ${_current_module} LESS ${_num_modules} )
list( GET _${group}_module_list ${_current_module} _module_name )
if( NOT ITK_MODULE_${_module_name}_EXCLUDE_FROM_DEFAULT )
list( APPEND _${group}_on_module_list ${_module_name} )
endif()
math( EXPR _current_module "${_current_module} + 1" )
endwhile()
endforeach()
if("$ENV{DASHBOARD_TEST_FROM_CTEST}" STREQUAL "")
# developer build
option(ITKGroup_Core "Request building core modules" ON)
endif()
foreach( group ${group_list})
option(ITKGroup_${group} "Request building ${group} modules" OFF)
if (ITKGroup_${group})
foreach (itk-module ${_${group}_on_module_list} )
list(APPEND ITK_MODULE_${itk-module}_REQUEST_BY ITKGroup_${group})
endforeach()
endif()
# Hide group options if building all modules anyway.
if(ITK_BUILD_DEFAULT_MODULES)
set_property(CACHE ITKGroup_${group} PROPERTY TYPE INTERNAL)
else()
set_property(CACHE ITKGroup_${group} PROPERTY TYPE BOOL)
endif()
endforeach()