1 # possible values : ACTION_EXTENSION or COMPONENT_EXTENSION.
71 #########################################################################
75 # * Use a macro to create the CMAKE variables according to the #
76 # provided options as input. #
78 #########################################################################
83 "NEEDS_TOOLNEEDS_CEP_LIBRARIESNEEDS_COMPONENT_EXTENSIONNEEDS_ACTION_EXTENSIONINCLUDE_DIRECTORIESEXTERNAL_LIBRARIESHEADERS_TO_INSTALLDEFINESCXX_FLAGSEXTERNAL_SOURCESTARGET_NAMECEP_NAMEDESCRIPTIONTEST_APPLICATION" # possible lists
84 "NEEDS_QT_MODULESACTION_EXTENSIONCOMPONENT_EXTENSIONDISABLEDNEEDS_XERCESCNEEDS_ITKNEEDS_LIBXML2NEEDS_XSDNEEDS_QTXMLNEEDS_OPENCVNEEDS_IGSTKINSTALL_ALL_HEADERSNEEDS_GDCM" # possible options
90 #########################################################################
92 # CREATE CMAKE VARIABLES #
94 # * Create required and useful
CMake variables
for the macro #
96 #########################################################################
98 # TYPE EXTENSION : ACTION or COMPONENT
99 if (${EXTENSION_NAME_CMAKE}_ACTION_EXTENSION)
100 set(TYPE_EXTENSION
"action")
101 string(TOUPPER ${TYPE_EXTENSION} TYPE_EXTENSION_CMAKE)
102 elseif(${EXTENSION_NAME_CMAKE}_COMPONENT_EXTENSION)
103 set(TYPE_EXTENSION
"component")
104 string(TOUPPER ${TYPE_EXTENSION} TYPE_EXTENSION_CMAKE)
107 # CMAKE CACHE VARIABLE
108 # if it is the first cmake run, create the extension variable with a correct initial value
109 if(NOT ${TYPE_EXTENSION_CMAKE}_${EXTENSION_NAME_CMAKE}_INTERNAL)
110 # add option to enable/disable
this extension and
set it to
true by
default
111 # Building the extension can be disabled by giving the argument DISABLED to the macro
112 # or by passing the flag -D${TYPE_EXTENSION_CMAKE}_${EXTENSION_NAME_CMAKE}_DISABLED:BOOL=TRUE
113 if(${EXTENSION_NAME_CMAKE}_DISABLED)
114 set(${TYPE_EXTENSION_CMAKE}_${EXTENSION_NAME_CMAKE}_ENABLED FALSE)
116 set(${TYPE_EXTENSION_CMAKE}_${EXTENSION_NAME_CMAKE}_ENABLED TRUE)
118 set(${TYPE_EXTENSION_CMAKE}_${EXTENSION_NAME_CMAKE} ${${TYPE_EXTENSION_CMAKE}_${EXTENSION_NAME_CMAKE}_ENABLED} CACHE BOOL
"Build extension ${EXTENSION_NAME}")
119 set(${TYPE_EXTENSION_CMAKE}_${EXTENSION_NAME_CMAKE}_INTERNAL TRUE CACHE INTERNAL
"Is variable ${TYPE_EXTENSION_CMAKE}_${EXTENSION_NAME} already created?")
122 # if this extension is enabled, do everything needed
123 # otherwise... do nothing
124 if (${TYPE_EXTENSION_CMAKE}_${EXTENSION_NAME_CMAKE})
127 # The target name is composed of the following: [action / component]-name
128 # * action / component is the type of extension as prefix
129 # * name is deduced from the input folder containing the calling CMakeLists.txt file of the extension.
130 if (${EXTENSION_NAME_CMAKE}_TARGET_NAME)
131 set(${TYPE_EXTENSION_CMAKE}_OUTPUT_NAME ${${EXTENSION_NAME_CMAKE}_TARGET_NAME})
133 set(${TYPE_EXTENSION_CMAKE}_OUTPUT_NAME ${EXTENSION_NAME})
135 # replace "-" by "_" if the extension is being packaged with NSIS, the program to create a Windows installer.
137 # NSIS requires that cpack component names do not feature space or "-" characters
138 set(${TYPE_EXTENSION_CMAKE}_TARGET_NAME ${TYPE_EXTENSION}_${${TYPE_EXTENSION_CMAKE}_OUTPUT_NAME})
140 set(${TYPE_EXTENSION_CMAKE}_TARGET_NAME ${TYPE_EXTENSION}-${${TYPE_EXTENSION_CMAKE}_OUTPUT_NAME})
143 message(STATUS "Building extension ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}
")
147 #########################################################################
149 # INCLUDE DIRECTORIES #
151 # * Include basic directories where to look header files #
152 # * Include also additional user provided directories #
153 # * These directories are used for compilation step #
155 #########################################################################
158 include_directories(${CAMITK_INCLUDE_DIRECTORIES})
159 include_directories(${CMAKE_CURRENT_BINARY_DIR})
160 include_directories(${CMAKE_CURRENT_SOURCE_DIR})
162 # USER INPUT DIRECTORIES
163 include_directories(${${EXTENSION_NAME_CMAKE}_INCLUDE_DIRECTORIES})
167 #########################################################################
169 # GATHER RESSOURCES #
171 # * Get all the headers (.h) and source files (.cpp) of the project #
172 # * Create the needed Qt files (using moc and uic) #
174 #########################################################################
176 # get all headers, sources and do what is needed for Qt
177 # one need to do this just before the add_library so that all defines, include directories and link directories
178 # are set properly (gather_headers_and_sources include the call to Qt moc and uic)
179 gather_headers_and_sources(${EXTENSION_NAME_CMAKE})
183 #########################################################################
185 # ADDITIONAL KNOWN LIBRARY DEPENDENCIES #
187 # * Look for specific library needed #
188 # * Specific libraries are specified as option with the #
189 # NEEDS_LIBRARY syntax (see macro syntax for more options) #
190 # * Backward compatibility : Warn user if using old NEEDS_TOOL syntax #
192 #########################################################################
195 set(ITK_LIBRARIES "")
196 if(${EXTENSION_NAME_CMAKE}_NEEDS_ITK) # ITK is required
197 if (MSVC) # Visual Studio compiler
198 if(MSVC90 OR MSVC10) # Visual Studion 2008/2010 => use ITK 3.20.1
199 find_package(ITK REQUIRED)
201 message(STATUS "${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} : Found suitable version of ITK : ${ITK_VERSION} (required is 3.20.1)
")
202 include(${ITK_USE_FILE})
204 debug ITKAlgorithms${CAMITK_DEBUG_POSTFIX}
205 optimized ITKAlgorithms
206 debug ITKBasicFilters${CAMITK_DEBUG_POSTFIX}
207 optimized ITKBasicFilters
208 debug ITKCommon${CAMITK_DEBUG_POSTFIX}
210 debug ITKIO${CAMITK_DEBUG_POSTFIX}
212 debug ITKNrrdIO${CAMITK_DEBUG_POSTFIX}.lib
213 debug itkgdcm${CAMITK_DEBUG_POSTFIX}.lib
214 debug itkjpeg12${CAMITK_DEBUG_POSTFIX}.lib
215 debug itkjpeg16${CAMITK_DEBUG_POSTFIX}.lib
216 debug itkopenjpeg${CAMITK_DEBUG_POSTFIX}.lib
217 debug itkpng${CAMITK_DEBUG_POSTFIX}.lib
218 debug itktiff${CAMITK_DEBUG_POSTFIX}.lib
219 debug itkjpeg8${CAMITK_DEBUG_POSTFIX}.lib
220 debug ITKSpatialObject${CAMITK_DEBUG_POSTFIX}.lib
221 debug itkvnl_inst${CAMITK_DEBUG_POSTFIX}.lib
222 debug itkvnl_algo${CAMITK_DEBUG_POSTFIX}.lib
223 debug itkv3p_netlib${CAMITK_DEBUG_POSTFIX}.lib
224 debug itkvnl${CAMITK_DEBUG_POSTFIX}.lib
225 debug itkvcl${CAMITK_DEBUG_POSTFIX}.lib
226 debug itkv3p_lsqr${CAMITK_DEBUG_POSTFIX}.lib
227 debug ITKMetaIO${CAMITK_DEBUG_POSTFIX}.lib
228 debug itksys${CAMITK_DEBUG_POSTFIX}.lib
229 debug ITKDICOMParser${CAMITK_DEBUG_POSTFIX}.lib
230 debug ITKEXPAT${CAMITK_DEBUG_POSTFIX}.lib
231 debug ITKniftiio${CAMITK_DEBUG_POSTFIX}.lib
232 debug ITKznz${CAMITK_DEBUG_POSTFIX}.lib
233 debug itkzlib${CAMITK_DEBUG_POSTFIX}.lib
242 message(FATAL_ERROR "ITK ( >= 3.20.1) is required by ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}
")
244 elseif(MSVC11 OR MSVC12) # Visual Studion 2012/2013 => use ITK 4.3.2 at least
245 find_package(ITK 4.3.2 REQUIRED)
247 message(STATUS "${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} : Found suitable version of ITK : ${ITK_VERSION} (required is 4.3.2)
")
248 include(${ITK_USE_FILE})
249 link_directories(${ITK_DIR}/../..)
252 debug ITKCommon-4.3${CAMITK_DEBUG_POSTFIX}.lib
253 debug ITKNrrdIO-4.3${CAMITK_DEBUG_POSTFIX}.lib
254 debug itkgdcmCommon-4.3${CAMITK_DEBUG_POSTFIX}.lib
255 debug itkjpeg-4.3${CAMITK_DEBUG_POSTFIX}.lib
256 debug itkopenjpeg-4.3${CAMITK_DEBUG_POSTFIX}.lib
257 debug itkpng-4.3${CAMITK_DEBUG_POSTFIX}.lib
258 debug itktiff-4.3${CAMITK_DEBUG_POSTFIX}.lib
259 debug ITKSpatialObjects-4.3${CAMITK_DEBUG_POSTFIX}.lib
260 debug itkvnl_algo-4.3${CAMITK_DEBUG_POSTFIX}.lib
261 debug itkv3p_netlib-4.3${CAMITK_DEBUG_POSTFIX}.lib
262 debug itkvnl-4.3${CAMITK_DEBUG_POSTFIX}.lib
263 debug itkvcl-4.3${CAMITK_DEBUG_POSTFIX}.lib
264 debug itkv3p_lsqr-4.3${CAMITK_DEBUG_POSTFIX}.lib
265 debug ITKMetaIO-4.3${CAMITK_DEBUG_POSTFIX}.lib
266 debug itksys-4.3${CAMITK_DEBUG_POSTFIX}.lib
267 debug ITKDICOMParser-4.3${CAMITK_DEBUG_POSTFIX}.lib
268 debug ITKEXPAT-4.3${CAMITK_DEBUG_POSTFIX}.lib
269 debug ITKniftiio-4.3${CAMITK_DEBUG_POSTFIX}.lib
270 debug ITKznz-4.3${CAMITK_DEBUG_POSTFIX}.lib
271 debug itkzlib-4.3${CAMITK_DEBUG_POSTFIX}.lib
278 debug ITKIOGIPL-4.3${CAMITK_DEBUG_POSTFIX}.lib
279 debug ITKIONIFTI-4.3${CAMITK_DEBUG_POSTFIX}.lib
280 debug ITKIONRRD-4.3${CAMITK_DEBUG_POSTFIX}.lib
281 debug ITKIOPNG-4.3${CAMITK_DEBUG_POSTFIX}.lib
282 debug itkgdcmDICT-4.3${CAMITK_DEBUG_POSTFIX}.lib
283 debug itkgdcmDSED-4.3${CAMITK_DEBUG_POSTFIX}.lib
284 debug itkgdcmIOD-4.3${CAMITK_DEBUG_POSTFIX}.lib
285 debug itkgdcmjpeg8-4.3${CAMITK_DEBUG_POSTFIX}.lib
286 debug itkgdcmjpeg12-4.3${CAMITK_DEBUG_POSTFIX}.lib
287 debug itkgdcmjpeg16-4.3${CAMITK_DEBUG_POSTFIX}.lib
288 debug itkgdcmMSFF-4.3${CAMITK_DEBUG_POSTFIX}.lib
289 debug ITKgiftiio-4.3${CAMITK_DEBUG_POSTFIX}.lib
290 debug itkhdf5_cpp-4.3${CAMITK_DEBUG_POSTFIX}.lib
291 debug itkhdf5-4.3${CAMITK_DEBUG_POSTFIX}.lib
292 debug ITKMetaIO-4.3${CAMITK_DEBUG_POSTFIX}.lib
293 debug ITKIOBioRad-4.3${CAMITK_DEBUG_POSTFIX}.lib
294 debug ITKIOStimulate-4.3${CAMITK_DEBUG_POSTFIX}.lib
295 debug ITKIOTIFF-4.3${CAMITK_DEBUG_POSTFIX}.lib
296 debug ITKIOVTK-4.3${CAMITK_DEBUG_POSTFIX}.lib
297 debug ITKIOPNG-4.3${CAMITK_DEBUG_POSTFIX}.lib
298 debug ITKBiasCorrection-4.3${CAMITK_DEBUG_POSTFIX}.lib
299 debug ITKBioCell-4.3${CAMITK_DEBUG_POSTFIX}.lib
300 debug ITKFEM-4.3${CAMITK_DEBUG_POSTFIX}.lib
301 debug ITKIOBMP-4.3${CAMITK_DEBUG_POSTFIX}.lib
302 debug ITKIOCSV-4.3${CAMITK_DEBUG_POSTFIX}.lib
303 debug ITKIOGDCM-4.3${CAMITK_DEBUG_POSTFIX}.lib
304 debug ITKIOGE-4.3${CAMITK_DEBUG_POSTFIX}.lib
305 debug ITKIOGIPL-4.3${CAMITK_DEBUG_POSTFIX}.lib
306 debug ITKIOHDF5-4.3${CAMITK_DEBUG_POSTFIX}.lib
307 debug ITKIOImageBase-4.3${CAMITK_DEBUG_POSTFIX}.lib
308 debug ITKIOIPL-4.3${CAMITK_DEBUG_POSTFIX}.lib
309 debug ITKIOJPEG-4.3${CAMITK_DEBUG_POSTFIX}.lib
310 debug ITKIOLSM-4.3${CAMITK_DEBUG_POSTFIX}.lib
311 debug ITKIOMesh-4.3${CAMITK_DEBUG_POSTFIX}.lib
312 debug ITKIOMeta-4.3${CAMITK_DEBUG_POSTFIX}.lib
313 debug ITKIOSiemens-4.3${CAMITK_DEBUG_POSTFIX}.lib
314 debug ITKIOSpatialObjects-4.3${CAMITK_DEBUG_POSTFIX}.lib
315 debug ITKIOTransformBase-4.3${CAMITK_DEBUG_POSTFIX}.lib
316 debug ITKIOTransformHDF5-4.3${CAMITK_DEBUG_POSTFIX}.lib
317 debug ITKIOTransformInsightLegacy-4.3${CAMITK_DEBUG_POSTFIX}.lib
318 debug ITKIOTransformMatlab-4.3${CAMITK_DEBUG_POSTFIX}.lib
319 debug ITKIOXML-4.3${CAMITK_DEBUG_POSTFIX}.lib
320 debug ITKKLMRegionGrowing-4.3${CAMITK_DEBUG_POSTFIX}.lib
321 debug ITKLabelMap-4.3${CAMITK_DEBUG_POSTFIX}.lib
322 debug ITKMesh-4.3${CAMITK_DEBUG_POSTFIX}.lib
323 debug ITKMetaIO-4.3${CAMITK_DEBUG_POSTFIX}.lib
324 debug itkNetlibSlatec-4.3${CAMITK_DEBUG_POSTFIX}.lib
325 debug itkopenjpeg-4.3${CAMITK_DEBUG_POSTFIX}.lib
326 debug ITKOptimizers-4.3${CAMITK_DEBUG_POSTFIX}.lib
327 debug ITKOptimizersv4-4.3${CAMITK_DEBUG_POSTFIX}.lib
328 debug ITKPath-4.3${CAMITK_DEBUG_POSTFIX}.lib
329 debug itkpng-4.3${CAMITK_DEBUG_POSTFIX}.lib
330 debug ITKPolynomials-4.3${CAMITK_DEBUG_POSTFIX}.lib
331 debug ITKQuadEdgeMesh-4.3${CAMITK_DEBUG_POSTFIX}.lib
332 debug ITKReview-4.3${CAMITK_DEBUG_POSTFIX}.lib
333 debug ITKStatistics-4.3${CAMITK_DEBUG_POSTFIX}.lib
334 debug itkv3p_lsqr-4.3${CAMITK_DEBUG_POSTFIX}.lib
335 debug itkv3p_netlib-4.3${CAMITK_DEBUG_POSTFIX}.lib
336 debug itkvcl-4.3${CAMITK_DEBUG_POSTFIX}.lib
337 debug ITKVideoCore-4.3${CAMITK_DEBUG_POSTFIX}.lib
338 debug ITKVideoIO-4.3${CAMITK_DEBUG_POSTFIX}.lib
339 debug ITKVTK-4.3${CAMITK_DEBUG_POSTFIX}.lib
340 debug ITKVNLInstantiation-4.3${CAMITK_DEBUG_POSTFIX}.lib
341 debug ITKWatersheds-4.3${CAMITK_DEBUG_POSTFIX}.lib
342 # Release librariesdebug
343 optimized ITKCommon-4.3.lib
344 optimized ITKNrrdIO-4.3.lib
345 optimized itkgdcmCommon-4.3.lib
346 optimized itkjpeg-4.3.lib
347 optimized itkopenjpeg-4.3.lib
348 optimized itkpng-4.3.lib
349 optimized itktiff-4.3.lib
350 optimized ITKSpatialObjects-4.3.lib
351 optimized itkvnl_algo-4.3.lib
352 optimized itkv3p_netlib-4.3.lib
353 optimized itkvnl-4.3.lib
354 optimized itkvcl-4.3.lib
355 optimized itkv3p_lsqr-4.3.lib
356 optimized ITKMetaIO-4.3.lib
357 optimized itksys-4.3.lib
358 optimized ITKDICOMParser-4.3.lib
359 optimized ITKEXPAT-4.3.lib
360 optimized ITKniftiio-4.3.lib
361 optimized ITKznz-4.3.lib
362 optimized itkzlib-4.3.lib
363 optimized snmpapi.lib
366 optimized comctl32.lib
367 optimized wsock32.lib
368 optimized opengl32.lib
369 optimized ITKIOGIPL-4.3.lib
370 optimized ITKIONIFTI-4.3.lib
371 optimized ITKIONRRD-4.3.lib
372 optimized ITKIOPNG-4.3.lib
373 optimized itkgdcmDICT-4.3.lib
374 optimized itkgdcmDSED-4.3.lib
375 optimized itkgdcmIOD-4.3.lib
376 optimized itkgdcmjpeg8-4.3.lib
377 optimized itkgdcmjpeg12-4.3.lib
378 optimized itkgdcmjpeg16-4.3.lib
379 optimized itkgdcmMSFF-4.3.lib
380 optimized ITKgiftiio-4.3.lib
381 optimized itkhdf5_cpp-4.3.lib
382 optimized itkhdf5-4.3.lib
383 optimized ITKMetaIO-4.3.lib
384 optimized ITKIOBioRad-4.3.lib
385 optimized ITKIOStimulate-4.3.lib
386 optimized ITKIOTIFF-4.3.lib
387 optimized ITKIOVTK-4.3.lib
388 optimized ITKIOPNG-4.3.lib
389 optimized ITKBiasCorrection-4.3.lib
390 optimized ITKBioCell-4.3.lib
391 optimized ITKFEM-4.3.lib
392 optimized ITKIOBMP-4.3.lib
393 optimized ITKIOCSV-4.3.lib
394 optimized ITKIOGDCM-4.3.lib
395 optimized ITKIOGE-4.3.lib
396 optimized ITKIOGIPL-4.3.lib
397 optimized ITKIOHDF5-4.3.lib
398 optimized ITKIOImageBase-4.3.lib
399 optimized ITKIOIPL-4.3.lib
400 optimized ITKIOJPEG-4.3.lib
401 optimized ITKIOLSM-4.3.lib
402 optimized ITKIOMesh-4.3.lib
403 optimized ITKIOMeta-4.3.lib
404 optimized ITKIOSiemens-4.3.lib
405 optimized ITKIOSpatialObjects-4.3.lib
406 optimized ITKIOTransformBase-4.3.lib
407 optimized ITKIOTransformHDF5-4.3.lib
408 optimized ITKIOTransformInsightLegacy-4.3.lib
409 optimized ITKIOTransformMatlab-4.3.lib
410 optimized ITKIOXML-4.3.lib
411 optimized ITKKLMRegionGrowing-4.3.lib
412 optimized ITKLabelMap-4.3.lib
413 optimized ITKMesh-4.3.lib
414 optimized ITKMetaIO-4.3.lib
415 optimized itkNetlibSlatec-4.3.lib
416 optimized itkopenjpeg-4.3.lib
417 optimized ITKOptimizers-4.3.lib
418 optimized ITKOptimizersv4-4.3.lib
419 optimized ITKPath-4.3.lib
420 optimized itkpng-4.3.lib
421 optimized ITKPolynomials-4.3.lib
422 optimized ITKQuadEdgeMesh-4.3.lib
423 optimized ITKReview-4.3.lib
424 optimized ITKStatistics-4.3.lib
425 optimized itkv3p_lsqr-4.3.lib
426 optimized itkv3p_netlib-4.3.lib
427 optimized itkvcl-4.3.lib
428 optimized ITKVideoCore-4.3.lib
429 optimized ITKVideoIO-4.3.lib
430 optimized ITKVTK-4.3.lib
431 optimized ITKVNLInstantiation-4.3.lib
432 optimized ITKWatersheds-4.3.lib
435 message(FATAL_ERROR "ITK ( >= 4.3.2) is required by ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}
")
437 else() # New version of VS compiler not supported yet
438 message(FATAL_ERROR "ITK : Unsupported version of Visual Studio compiler. Please update CamiTK, downgrade your VS version to 2008/2010/2012 or contact CamiTK team support.
")
440 elseif(MINGW) # MinGW compiler
441 find_package(ITK 4.3.2 REQUIRED)
443 message(STATUS "${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} : Found suitable version of ITK : ${ITK_VERSION} (required is 4.3.2)
")
444 include(${ITK_USE_FILE})
445 link_directories(${ITK_DIR}/../..)
454 ITKSpatialObjects-4.3
493 ITKBiasCorrection-4.3
509 ITKIOSpatialObjects-4.3
510 ITKIOTransformBase-4.3
511 ITKIOTransformHDF5-4.3
512 ITKIOTransformInsightLegacy-4.3
513 ITKIOTransformMatlab-4.3
515 ITKKLMRegionGrowing-4.3
535 ITKVNLInstantiation-4.3
539 message(FATAL_ERROR "ITK ( >= 4.3.2) is required by ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}
")
541 elseif(UNIX) # Linux compilers
542 find_package(ITK REQUIRED)
544 # At the moment we support ITK version 3.20.1
545 # TODO Give UNIX support for ITK version 4.3 and 4.4
546 # WARNING it seems the CMake variable ITK_VERSION is not always set
547 # TODO If similar (and tested) mix CMake ITK configuration for Unix and Apple
548 include(${ITK_USE_FILE})
549 set(ITK_LIBRARIES ITKBasicFilters ITKCommon ITKIO)
550 message(STATUS "${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} : Found suitable version of ITK : ${ITK_VERSION} (required is at least 3.20.1)
")
552 else() # if(Apple) MacOs computers
553 find_package(ITK REQUIRED)
555 include(${ITK_USE_FILE})
556 # We configure ITK depending on which version found
557 # WARNING it seems the CMake variable ITK_VERSION is not always set (depending on ITK version)
558 if ((${ITK_VERSION} VERSION_GREATER "3
") AND (${ITK_VERSION} VERSION_LESS "4
")) # ITK 3.20.1
559 message(STATUS "${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} : Found suitable version of ITK : ${ITK_VERSION} (required is at least 3.20.1)
")
560 set(ITK_LIBRARIES ITKBasicFilters ITKCommon ITKIO)
561 elseif((${ITK_VERSION} VERSION_GREATER "4
") AND (${ITK_VERSION} VERSION_LESS "4.4
"))
562 message(STATUS "${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} : Found suitable version of ITK : ${ITK_VERSION} (expected is 4.3)
")
571 ITKSpatialObjects-4.3
610 ITKBiasCorrection-4.3
626 ITKIOSpatialObjects-4.3
627 ITKIOTransformBase-4.3
628 ITKIOTransformHDF5-4.3
629 ITKIOTransformInsightLegacy-4.3
630 ITKIOTransformMatlab-4.3
632 ITKKLMRegionGrowing-4.3
652 ITKVNLInstantiation-4.3
655 else() # ITK version > 4.3, => ITK version 4.4 or greater
656 message(STATUS "${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} : Found suitable version of ITK : ${ITK_VERSION} (expected is > 4.3)
")
664 ITKGPUAnisotropicSmoothing
666 ITKGPUFiniteDifference
667 ITKGPUImageFilterBase
693 ITKIOTransformInsightLegacy
736 message(FATAL_ERROR "ITK ( >= 3.20.1) is required by ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}
")
738 endif() # platform / Compiler switch
742 set(LIBXML2_LIBRARY "")
743 if(${EXTENSION_NAME_CMAKE}_NEEDS_LIBXML2)
744 # LibXml2 is required
747 add_definitions(${LIBXML2_DEFINITIONS})
748 include_directories(${LIBXML2_INCLUDE_DIR})
749 set(LIBXML2_LIBRARY ${LIBXML2_LIBRARIES})
751 # most probably win32 or crosscompiling
752 message(STATUS "${EXTENSION_NAME}: libxml2 required
")
757 set(OpenCV_LIBRARIES "")
758 if(${EXTENSION_NAME_CMAKE}_NEEDS_OPENCV)
760 find_package( OpenCV REQUIRED )
762 set(OpenCV_LIBRARIES "")
766 set(IGSTK_LIBRARIES "")
767 if(${EXTENSION_NAME_CMAKE}_NEEDS_IGSTK)
768 find_package(IGSTK REQUIRED)
769 include(${IGSTK_USE_FILE})
771 set(IGSTK_LIBRARIES "")
775 set(XERCESC_LIBRARIES)
776 if(${EXTENSION_NAME_CMAKE}_NEEDS_XERCESC)
777 # XercesC is required
778 find_package(XercesC REQUIRED)
780 include_directories(${XERCESC_INCLUDE_DIR})
781 set(XERCESC_LIBRARIES ${XERCESC_LIBRARY})
783 # most probably win32 or crosscompiling
784 message(FATAL_ERROR "${EXTENSION_NAME}: xerces-c required. Please provide Xerces-C path.
")
789 if(${EXTENSION_NAME_CMAKE}_NEEDS_XSD)
790 # XercesC is required
791 find_package(XercesC REQUIRED)
793 include_directories(${XERCESC_INCLUDE_DIR})
794 set(XERCESC_LIBRARIES ${XERCESC_LIBRARY})
795 find_package(XSD REQUIRED)
796 include_directories(${XSD_INCLUDE_DIR})
798 # most probably win32 or crosscompiling
799 message(FATAL_ERROR "${EXTENSION_NAME}: xerces-c required because of XSD cxx, please
set XERCESC_INCLUDE_DIR
")
805 if(${EXTENSION_NAME_CMAKE}_NEEDS_GDCM)
807 # Look for GDCM library only if not found (for instance, ITK has already search for it)
808 # Calling find_package(GDCM ..) more than once creates CMake errors.
809 find_package(GDCM 2.0 REQUIRED)
812 include(${GDCM_USE_FILE})
815 debug ${GDCM_DIR}/../vtkgdcm${CAMITK_DEBUG_POSTFIX}
816 debug ${GDCM_DIR}/../gdcmDSED${CAMITK_DEBUG_POSTFIX}
817 optimized vtkgdcm gdcmDSED
820 set(GDCM_LIBRARIES vtkgdcm gdcmDSED)
823 message(ERROR "${EXTENSION_NAME}: GDCM 2.x library required. Please install GDCM.
")
827 # ADDTIONAL QT MODULES
828 set(QT_MODULES_LIBRARIES)
829 if(${EXTENSION_NAME_CMAKE}_NEEDS_QT_MODULES)
830 find_package(Qt4 "4.7
" COMPONENTS QtCore QtGui QtXml QtXmlPatterns QtWebkit QtOpenGL QtScript QtSQL QtNetwork REQUIRED)
832 message(SEND_ERROR "${EXTENSION_NAME} : Failed to find Qt 4.7 or greater. This is needed by CamiTK.
")
835 # CMake will add the Qt modules specific include directories
836 include(${QT_USE_FILE})
838 # Qt additional modules are required for linking
839 set(QT_MODULES_LIBRARIES ${QT_LIBRARIES})
844 if(${EXTENSION_NAME_CMAKE}_NEEDS_CEP_LIBRARIES)
845 foreach(CEP_LIBRARY_NEEDED ${${EXTENSION_NAME_CMAKE}_NEEDS_CEP_LIBRARIES})
846 string(TOUPPER ${CEP_LIBRARY_NEEDED} ${CEP_LIBRARY_NEEDED}_INTERNAL)
847 set(LIBRARY_${${CEP_LIBRARY_NEEDED}_INTERNAL} ON CACHE BOOL "Required by action extension ${EXTENSION_NAME}
" FORCE )
849 set(CEP_LIBRARIES ${CEP_LIBRARIES} debug ${CEP_LIBRARY_NEEDED}${CAMITK_DEBUG_POSTFIX}
850 optimized ${CEP_LIBRARY_NEEDED}
854 set(CEP_LIBRARIES ${CEP_LIBRARIES} ${CEP_LIBRARY_NEEDED})
856 set(CEP_LIBRARIES ${CEP_LIBRARIES} ${CEP_LIBRARY_NEEDED})
859 include_directories(${CAMITK_INCLUDE_DIR}/libraries/${CEP_LIBRARY_NEEDED})
860 include_directories(${CAMITK_USER_INCLUDE_DIR}/libraries/${CEP_LIBRARY_NEEDED})
861 include_directories(${CAMITK_BUILD_INCLUDE_DIR}/libraries/${CEP_LIBRARY_NEEDED})
862 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../libraries/${CEP_LIBRARY_NEEDED})
868 set(EXTERNAL_LIBRARIES)
869 if(${EXTENSION_NAME_CMAKE}_EXTERNAL_LIBRARIES)
870 foreach(EXTERNAL_LIBRARY ${${EXTENSION_NAME_CMAKE}_EXTERNAL_LIBRARIES})
872 set(EXTERNAL_LIBRARIES ${EXTERNAL_LIBRARIES}
873 debug ${EXTERNAL_LIBRARY}${CAMITK_DEBUG_POSTFIX}
874 optimized ${EXTERNAL_LIBRARY}
877 set(EXTERNAL_LIBRARIES ${EXTERNAL_LIBRARIES} ${EXTERNAL_LIBRARY})
882 # BACKWARD COMPATIBILITY
884 # TODO CAMITK_DEPRECATED. This option is marked as deprecated. It is to be removed in CamiTK 4.0
885 if(${EXTENSION_NAME_CMAKE}_NEEDS_TOOL)
886 message(WARNING "Warning: ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt:
camitk_extension macro option NEEDS_TOOL is deprecated, please use NEEDS_CEP_LIBRARIES instead..
")
887 set(${EXTENSION_NAME_CMAKE}_NEEDS_CEP_LIBRARIES ${${EXTENSION_NAME_CMAKE}_NEEDS_CEP_LIBRARIES} ${${EXTENSION_NAME_CMAKE}_NEEDS_TOOL})
892 #########################################################################
894 # CAMITK ACTION / COMPONENT DEPENDENCIES #
896 # * Look for action / component dependencies #
897 # * Specific actions / components are specified as option with the #
898 # NEEDS_ACTION/COMPONENT_EXTENSION syntax #
900 #########################################################################
902 # COMPONENT EXTENSION DEPENDENCIES
903 set(COMPONENT_EXTENSION_LIBRARIES)
904 if(${EXTENSION_NAME_CMAKE}_NEEDS_COMPONENT_EXTENSION)
905 foreach(COMPONENT_NEEDED ${${EXTENSION_NAME_CMAKE}_NEEDS_COMPONENT_EXTENSION})
906 string(TOUPPER ${COMPONENT_NEEDED} ${COMPONENT_NEEDED}_INTERNAL)
907 set(COMPONENT_${${COMPONENT_NEEDED}_INTERNAL} ON CACHE BOOL "Required by extension ${EXTENSION_NAME}
" FORCE )
909 set(COMPONENT_EXTENSION_LIBRARIES ${COMPONENT_EXTENSION_LIBRARIES}
910 debug ${CAMITK_BUILD_PRIVATE_LIB_DIR}/components/${COMPONENT_NEEDED}${CAMITK_DEBUG_POSTFIX}
911 optimized ${COMPONENT_NEEDED}
914 set(COMPONENT_EXTENSION_LIBRARIES ${COMPONENT_EXTENSION_LIBRARIES} ${COMPONENT_NEEDED})
916 include_directories(${CAMITK_INCLUDE_DIR}/components/${COMPONENT_NEEDED})
917 include_directories(${CAMITK_USER_INCLUDE_DIR}/components/${COMPONENT_NEEDED})
918 include_directories(${CAMITK_BUILD_INCLUDE_DIR}/components/${COMPONENT_NEEDED})
922 # ACTION EXTENSION DEPENDENCIES
923 set(ACTION_EXTENSION_LIBRARIES)
924 if(${EXTENSION_NAME_CMAKE}_NEEDS_ACTION_EXTENSION)
925 foreach(ACTION_NEEDED ${${EXTENSION_NAME_CMAKE}_NEEDS_ACTION_EXTENSION})
926 string(TOUPPER ${ACTION_NEEDED} ${ACTION_NEEDED}_INTERNAL)
927 set(ACTION_${${ACTION_NEEDED}_INTERNAL} ON CACHE BOOL "Required by extension ${EXTENSION_NAME}
" FORCE )
929 set(ACTION_EXTENSION_LIBRARIES ${ACTION_EXTENSION_LIBRARIES}
930 debug ${CAMITK_BUILD_PRIVATE_LIB_DIR}/actions/${ACTION_NEEDED}${CAMITK_DEBUG_POSTFIX}
931 optimized ${ACTION_NEEDED}
934 set(ACTION_EXTENSION_LIBRARIES ${ACTION_EXTENSION_LIBRARIES} ${ACTION_NEEDED})
936 include_directories(${CAMITK_INCLUDE_DIR}/actions/${ACTION_NEEDED})
937 include_directories(${CAMITK_USER_INCLUDE_DIR}/actions/${ACTION_NEEDED})
938 include_directories(${CAMITK_BUILD_INCLUDE_DIR}/actions/${ACTION_NEEDED})
944 #########################################################################
948 # * Link directories are used to indicate the compiler where #
949 # to look for folder containing libraries to link with. #
951 #########################################################################
953 # CAMITK BASIC LIB DIRECTORIES
954 link_directories(${CAMITK_LINK_DIRECTORIES})
958 #########################################################################
960 # TARGET COMPILATION DEFINITION #
962 # * Additional sources files to consider at compilation (.cpp) #
963 # * CMake project target definition #
965 #########################################################################
967 set(${EXTENSION_NAME_CMAKE}_SOURCES ${${EXTENSION_NAME_CMAKE}_SOURCES} ${${EXTENSION_NAME_CMAKE}_EXTERNAL_SOURCES})
969 # CMAKE TARGET DEFINITION
970 add_library(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} SHARED ${${EXTENSION_NAME_CMAKE}_SOURCES})
974 #########################################################################
978 # * Flags are options to give to the compiler #
979 # * Add user input flags #
980 # * Add platform specific flags #
982 #########################################################################
984 # USER INPUT DEFINES COMPILER FLAG
985 if(${EXTENSION_NAME_CMAKE}_DEFINES)
986 foreach (FLAG ${${EXTENSION_NAME_CMAKE}_DEFINES})
987 add_definitions(-D${FLAG})
991 # USER INPUT CUSTOM COMPILER FLAG
992 if(${EXTENSION_NAME_CMAKE}_CXX_FLAGS)
993 foreach (FLAG ${${EXTENSION_NAME_CMAKE}_CXX_FLAGS})
994 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAG}
")
998 # PLATFORM SPECIFIC COMPILER FLAG
999 # 64bits and other platform with relocation needs -fPIC
1000 include(TestCXXAcceptsFlag)
1001 check_cxx_accepts_flag(-fPIC FPIC_FLAG_ACCEPTED)
1002 # no need to add -fPIC on mingw, otherwise it generates a warning: -fPIC ignored for target (all code is position independent) [enabled by default]
1003 # msvc is also accepting the flag, but then produce warning D9002 : ignoring unknown option '-fPIC' cl
1004 if(FPIC_FLAG_ACCEPTED AND NOT WIN32)
1005 set_property(TARGET ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} APPEND PROPERTY COMPILE_FLAGS -fPIC)
1010 #########################################################################
1014 # * Linking is the last stage of compilation #
1015 # * Indicate what libraries to use for linking the target #
1017 #########################################################################
1019 # Any component or action has to be linked with ${CAMITK_CORE_LIBRARIES} and with all its dependencies
1020 target_link_libraries(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} ${CAMITK_CORE_LIBRARIES} ${CAMITK_LIBRARIES} ${COMPONENT_EXTENSION_LIBRARIES} ${ACTION_EXTENSION_LIBRARIES} ${CEP_LIBRARIES} ${QT_MODULES_LIBRARIES} ${ITK_LIBRARIES} ${LIBXML2_LIBRARY} ${OpenCV_LIBRARIES} ${IGSTK_LIBRARIES} ${XERCESC_LIBRARIES} ${GDCM_LIBRARIES} ${EXTERNAL_LIBRARIES})
1024 #########################################################################
1028 # * Define the output directory (location and name) #
1029 # * Define the output name of the library #
1030 # * Add ${CAMITK_DEBUG_POSTFIX} suffix to Debug MSVC built libraries #
1031 # * Additional Linux .so files information #
1033 #########################################################################
1035 # OUTPUT LIBRARY NAME
1036 set_target_properties(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}
1037 PROPERTIES OUTPUT_NAME ${${TYPE_EXTENSION_CMAKE}_OUTPUT_NAME}
1040 # OUTPUT DIRECTORY LOCATION AND NAME
1041 # Output directory (all extensions are private)
1042 set_target_properties(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CAMITK_BUILD_PRIVATE_LIB_DIR}/${TYPE_EXTENSION}s
1043 LIBRARY_OUTPUT_DIRECTORY_DEBUG ${CAMITK_BUILD_PRIVATE_LIB_DIR}/${TYPE_EXTENSION}s
1044 LIBRARY_OUTPUT_DIRECTORY_RELEASE ${CAMITK_BUILD_PRIVATE_LIB_DIR}/${TYPE_EXTENSION}s
1046 # Output directory (for dll plateform, this is still the same, extensions are private)
1047 set_target_properties(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CAMITK_BUILD_PRIVATE_LIB_DIR}/${TYPE_EXTENSION}s
1048 RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CAMITK_BUILD_PRIVATE_LIB_DIR}/${TYPE_EXTENSION}s
1049 RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CAMITK_BUILD_PRIVATE_LIB_DIR}/${TYPE_EXTENSION}s
1051 # Output directory (for dll plateform, this is still the same, extensions are private)
1052 set_target_properties(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${CAMITK_BUILD_PRIVATE_LIB_DIR}/${TYPE_EXTENSION}s
1053 ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${CAMITK_BUILD_PRIVATE_LIB_DIR}/${TYPE_EXTENSION}s
1054 ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${CAMITK_BUILD_PRIVATE_LIB_DIR}/${TYPE_EXTENSION}s
1057 # OUTPUT LIBRARY NAME MSVC in DEBUG mode
1059 set_target_properties(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} PROPERTIES DEBUG_POSTFIX ${CAMITK_DEBUG_POSTFIX})
1062 # ADDITIONAL LINUX .so FILE INFORMATION
1063 set(${TYPE_EXTENSION_CMAKE}_LIBRARY_PROPERTIES ${${TYPE_EXTENSION_CMAKE}_LIBRARY_PROPERTIES}
1064 VERSION "${CAMITK_VERSION_MAJOR}.${CAMITK_VERSION_MINOR}.${CAMITK_VERSION_PATCH}
"
1065 SOVERSION "${CAMITK_VERSION_MAJOR}
"
1067 # set the library specific info (SONAME...)
1068 set_target_properties(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} PROPERTIES ${${TYPE_EXTENSION_CMAKE}_LIBRARY_PROPERTIES} LINK_INTERFACE_LIBRARIES "")
1070 # see http://www.cmake.org/pipermail/cmake/2012-April/049889.html
1071 # target properties (outputname and remove soname)
1072 # set_property(TARGET ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} PROPERTY NO_SONAME 1)
1073 # in CEP the version patch might not have been set
1074 if (NOT CAMITK_VERSION_PATCH)
1075 set(CAMITK_VERSION_PATCH 0)
1080 #########################################################################
1084 # * When installing the project, header files (.h) and test data are #
1085 # copied into a installation folder to determine. #
1086 # * Indicate in this section, where to install your project and which #
1087 # files to copy into that folder (during local/global installation) #
1089 #########################################################################
1091 # FOLDER INSTALLATION
1092 # Indicate where to install the action/component
1093 install(TARGETS ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}
1094 # TODO always use private lib, even for runtime
1095 RUNTIME DESTINATION lib/${CAMITK_SHORT_VERSION_STRING}/${TYPE_EXTENSION}s
1096 LIBRARY DESTINATION lib/${CAMITK_SHORT_VERSION_STRING}/${TYPE_EXTENSION}s
1097 ARCHIVE DESTINATION lib/${CAMITK_SHORT_VERSION_STRING}/${TYPE_EXTENSION}s
1098 COMPONENT ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}
1101 # HEADERS INSTALLATION
1102 # Build target to install provided headers to install (with HEADERS_TO_INSTALL option)
1103 if(${EXTENSION_NAME_CMAKE}_HEADERS_TO_INSTALL)
1104 export_headers(${${EXTENSION_NAME_CMAKE}_HEADERS_TO_INSTALL} COMPONENT ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} GROUP ${TYPE_EXTENSION}s)
1107 # Build target to install all header files(with HEADERS_ALL_HEADERS option)
1108 if(${EXTENSION_NAME_CMAKE}_INSTALL_ALL_HEADERS)
1109 export_headers(${${EXTENSION_NAME_CMAKE}_HEADERS} COMPONENT ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} GROUP ${TYPE_EXTENSION}s)
1112 # TESTDATA INSTALLATION
1113 if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/testdata)
1114 # Check test data dir directory
1115 if (NOT EXISTS ${CAMITK_BUILD_TESTDATA_DIR})
1116 add_custom_command(TARGET ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}
1118 COMMAND ${CMAKE_COMMAND} -E make_directory ${CAMITK_BUILD_TESTDATA_DIR}
1119 COMMENT "Creating build-time share directory
for test data ${CAMITK_BUILD_TESTDATA_DIR}
"
1124 # At build time, copy the files to test data directory
1125 add_custom_command(TARGET ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}
1127 COMMAND ${CMAKE_COMMAND} -E copy_directory testdata ${CAMITK_BUILD_TESTDATA_DIR}
1128 COMMENT "Installing build-time test data
for ${EXTENSION_NAME}
"
1129 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
1133 # during installation, copy the files to install directory
1134 set (TESTDATA_DEST_DIR share/${CAMITK_SHORT_VERSION_STRING}/testdata)
1135 install(DIRECTORY testdata/
1136 #DESTINATION share/testdata
1137 #DESTINATION share/${CAMITK_SHORT_VERSION_STRING}/testdata
1138 DESTINATION ${TESTDATA_DEST_DIR}
1139 # COMPONENT ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}
1140 PATTERN ".svn
" EXCLUDE
1141 PATTERN "*~
" EXCLUDE
1145 # CTESTDATA INSTALLATION
1146 if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/testdata/ctestdata)
1147 # Check test data dir directory
1148 if (NOT EXISTS ${CAMITK_BUILD_CTESTDATA_DIR})
1149 add_custom_command(TARGET ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}
1151 COMMAND ${CMAKE_COMMAND} -E make_directory ${CAMITK_BUILD_CTESTDATA_DIR}
1152 COMMENT "Creating build-time share directory
for test data ${CAMITK_BUILD_CTESTDATA_DIR}
"
1157 # At build time, copy the files to test data directory
1158 add_custom_command(TARGET ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}
1160 COMMAND ${CMAKE_COMMAND} -E copy_directory testdata/ctestdata ${CAMITK_BUILD_CTESTDATA_DIR}
1161 COMMENT "Installing build-time test data
for ${EXTENSION_NAME}
"
1162 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
1166 # during installation, copy the files to install directory
1167 set (CTESTDATA_DEST_DIR share/${CAMITK_SHORT_VERSION_STRING}/testdata/ctestdata)
1168 install(DIRECTORY testdata/ctestdata
1169 DESTINATION ${CTESTDATA_DEST_DIR}
1170 PATTERN ".svn
" EXCLUDE
1171 PATTERN "*~
" EXCLUDE
1175 #########################################################################
1177 # PROJECT DEPENDENCIES #
1179 # * Add in this section library dependencies to other camitk projects #
1180 # to keep a correct build order. #
1182 #########################################################################
1184 # CAMITKCORE LIBRARY DEPENDENCY
1185 add_dependencies(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} ${CAMITK_CORE_TARGET_LIB_NAME})
1187 # TEST_ACTION/COMPONENT DEPENDENCY
1188 # Those projects are used to run unitarian test on ACTION / COMPONENT extensions.
1189 add_dependencies(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} application-test${TYPE_EXTENSION}s)
1191 # COMPONENTS DEPENDENCIES
1192 if(${EXTENSION_NAME_CMAKE}_NEEDS_COMPONENT_EXTENSION)
1193 foreach(COMPONENT_NEEDED ${${EXTENSION_NAME_CMAKE}_NEEDS_COMPONENT_EXTENSION})
1194 string(TOUPPER ${COMPONENT_NEEDED} COMPONENT_NEEDED_CMAKE)
1195 # if this is not true, then the dependencies is from an external build, do not use add_dependencies
1196 if (${TYPE_EXTENSION_CMAKE}_${EXTENSION_NAME_CMAKE}_INTERNAL)
1198 add_dependencies(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} component-${COMPONENT_NEEDED})
1203 # ACTIONS DEPENDENCIES
1204 if(${EXTENSION_NAME_CMAKE}_NEEDS_ACTION_EXTENSION)
1205 foreach(ACTION_NEEDED ${${EXTENSION_NAME_CMAKE}_NEEDS_ACTION_EXTENSION})
1206 string(TOUPPER ${ACTION_NEEDED} ACTION_NEEDED_CMAKE)
1207 # if this is not true, then the dependencies is from an external build, do not use add_dependencies
1208 if (${TYPE_EXTENSION_CMAKE}_${EXTENSION_NAME_CMAKE}_INTERNAL)
1210 add_dependencies(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} action-${ACTION_NEEDED})
1215 # CEP LIBRARIES DEPENDENCIES
1216 if(${EXTENSION_NAME_CMAKE}_NEEDS_CEP_LIBRARIES)
1217 foreach(CEP_LIBRARY_NEEDED ${${EXTENSION_NAME_CMAKE}_NEEDS_CEP_LIBRARIES})
1220 add_dependencies(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} library_${CEP_LIBRARY_NEEDED})
1222 add_dependencies(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} library-${CEP_LIBRARY_NEEDED})
1229 #########################################################################
1231 # CDASH SUBPROJECT DESCRIPTION #
1233 # * Update the XML description of the subprojects dependencies #
1236 #########################################################################
1237 # CDASH XML SUBPROJECTS DESCRIPTION UPDATE
1238 camitk_sub_project_add(${TYPE_EXTENSION_CMAKE} ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} DEPENDENCIES ${CAMITK_CORE_LIBRARIES} ${COMPONENT_EXTENSION_LIBRARIES} ${ACTION_EXTENSION_LIBRARIES} ${CEP_LIBRARIES})
1242 #########################################################################
1244 # PACKAGING CATEGORIZATION #
1246 # * On Windows, when building a package (win32 installer), the #
1247 # install shield wizard proposes you to select which component #
1249 # * Each component to install has a short description following its #
1250 # name to understand its role. #
1251 # * This section deals with the categorization and the description #
1252 # of the component in this installer. #
1254 #########################################################################
1256 # WINDOWS INSTALLER CATEGORIZATION
1257 if(${EXTENSION_NAME_CMAKE}_CEP_NAME)
1258 if (${EXTENSION_NAME_CMAKE}_CEP_NAME MATCHES "SDK
")
1259 # The default SDK extensions are categorized as "required
" and are not "unselectable
" by the user at installation time
1260 cpack_add_component(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}
1261 DISPLAY_NAME ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}
1262 DESCRIPTION ${${EXTENSION_NAME_CMAKE}_DESCRIPTION}
1268 # Extension is selectable for installation in the wizard of the installer
1269 cpack_add_component(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}
1270 DISPLAY_NAME ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}
1271 DESCRIPTION ${${EXTENSION_NAME_CMAKE}_DESCRIPTION}
1272 GROUP ${${EXTENSION_NAME_CMAKE}_CEP_NAME}
1276 # Extension if not categorized for packaging presentation
1277 cpack_add_component(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}
1278 DISPLAY_NAME ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}
1279 DESCRIPTION ${${EXTENSION_NAME_CMAKE}_DESCRIPTION}
1283 #########################################################################
1285 # CTEST - COMPONENT TESTS DESCRIPTION #
1287 #########################################################################
1288 if( ${EXTENSION_NAME_CMAKE}_COMPONENT_EXTENSION AND ${EXTENSION_NAME_CMAKE}_TEST_APPLICATION )
1289 # message( "GENERATE CTEST TESTS - TARGETNAME IS
" ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} " TEST APPLICATION IS
" ${${EXTENSION_NAME_CMAKE}_TEST_APPLICATION} )
1290 camitk_init_test( ${${EXTENSION_NAME_CMAKE}_TEST_APPLICATION} )
1292 # Retrieve the current directory name to properly name the test
1293 get_directory_name( ${CMAKE_CURRENT_SOURCE_DIR} COMP_DIR_NAME )
1295 # Test should pass because application test runs with no arguments - shows usage and exit success
1296 camitk_add_test( TEST_SUFFIX ${COMP_DIR_NAME} PROJECT_NAME ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} )
1297 # Retrieve the files in testdata directory - a test will be applied for each of these files
1298 get_subdirectoryfiles( ${CMAKE_CURRENT_SOURCE_DIR}/testdata/ctestdata TESTFILES )
1300 foreach( COMPONENT_TESTDATA_FILE ${TESTFILES} )
1301 # Give the file name (full path cut)
1302 get_directory_name( ${COMPONENT_TESTDATA_FILE} DATA_FILE )
1304 # Test procedure: Open a file - save it - Compare saved file to original file
1305 camitk_add_test( EXECUTABLE_ARGS "-i ${CAMITK_BUILD_TESTDATA_DIR}/ctestdata/${DATA_FILE}
" PASS_FILE_OUTPUT ${CAMITK_BUILD_TESTDATA_DIR}/ctestdata/${DATA_FILE} TEST_SUFFIX ${COMP_DIR_NAME} PROJECT_NAME ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} )
1308 #########################################################################
1310 # CTEST - ACTION TESTS DESCRIPTION #
1312 #########################################################################
1313 elseif( ${EXTENSION_NAME_CMAKE}_ACTION_EXTENSION AND ${EXTENSION_NAME_CMAKE}_TEST_APPLICATION )
1314 # message( "GENERATE CTEST TESTS - TARGETNAME IS
" ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} " TEST APPLICATION IS
" ${${EXTENSION_NAME_CMAKE}_TEST_APPLICATION} )
1315 camitk_init_test( ${${EXTENSION_NAME_CMAKE}_TEST_APPLICATION} )
1317 # Retrieve the current directory name to properly name the test
1318 get_directory_name( ${CMAKE_CURRENT_SOURCE_DIR} COMP_DIR_NAME )
1320 # Test should pass because application test runs with no arguments - shows usage and exit success
1321 camitk_add_test( PROJECT_NAME ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} )
1323 # Retrieve the files in ctestdata directory - tests will be applied for each of these files
1324 get_subdirectoryfiles( ${CAMITK_BUILD_TESTDATA_DIR}/ctestdata TESTFILES )
1326 #get the names of actions .dlls in lib directory
1327 get_subdirectoryfiles( ${CAMITK_BUILD_PRIVATE_LIB_DIR}/actions/ ACTIONSDLLS )
1329 foreach( ACTION_TESTDATA_FILE ${TESTFILES} )
1330 # Give the file name (full path cut)
1331 get_directory_name( ${ACTION_TESTDATA_FILE} DATA_FILE )
1332 if( NOT ( ${${TYPE_EXTENSION_CMAKE}_OUTPUT_NAME} MATCHES "application
" ) )#We do not apply tests on actions like (close, save, save as)
1333 # Test procedure: Open a file - load an action extension - Apply an action on the component wrapping the file
1335 camitk_add_test( EXECUTABLE_ARGS "-i ${CAMITK_BUILD_TESTDATA_DIR}/ctestdata/${DATA_FILE} -a ${${TYPE_EXTENSION_CMAKE}_OUTPUT_NAME}${CAMITK_DEBUG_POSTFIX}.dll
" PROJECT_NAME ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} )
1337 camitk_add_test( EXECUTABLE_ARGS "-i ${CAMITK_BUILD_TESTDATA_DIR}/ctestdata/${DATA_FILE} -a ${${TYPE_EXTENSION_CMAKE}_OUTPUT_NAME}.dll
" PROJECT_NAME ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} )
1342 endif() # endif(${TYPE_EXTENSION_CMAKE}_${EXTENSION_NAME_CMAKE})
1346 # Old macro to configure a new action to the framework
1347 # Use camitk_extension macro instead
1348 # TODO CAMITK_DEPRECATED. This macro is marked as deprecated. It is to be removed in CamiTK 4.0
1349 action_extension(){)
1350 message(WARNING "Deprecated macro action_extension detected : please use
camitk_extension(ACTION_EXTENSION ...) instead.")
1354 # Old macro to configure a
new component to the framework
1356 # TODO CAMITK_DEPRECATED. This macro is marked as deprecated. It is to be removed in CamiTK 4.0
1357 component_extension(){)
1358 message(WARNING
"Deprecated macro component_extension detected : please use camitk_extension(COMPONENT_EXTENSION ...) instead.")
1362 # TODO write a viewer_extension macro in CamiTK
A pseudo-namespace used to group CMake macros and functions.
camitk_extension()
Macro camitk_extension simplifies writing a camitk extension (component, action)
Definition: CamiTKExtension.h:69
get_directory_name()
macro get_directory_name set the variable VariableName to the name of the last directory of FullPathD...
Definition: GetDirectoryName.h:14
parse_arguments()
macro parse_arguments is a fork from CMakeMacroParseArguments see http://www.cmake.org/Wiki/CMakeMacroParseArguments for more information
Definition: ParseArguments.h:13
set(CAMITK_TEST_COMMAND_FILE ${CAMITK_TEST_OUTPUT_DIR}/command) set(CAMITK_TEST_COMMAND_RESULT_FILE $
This CMake file run a command and put the output in a given file.
Definition: CamiTKTestPassFile.h:11