Computer Assited Medical Intervention Tool Kit  version 3.4
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
CamiTKExtension.h
Go to the documentation of this file.
1 # possible values : ACTION_EXTENSION or COMPONENT_EXTENSION.
40 
78 
79  #########################################################################
80  # #
81  # ARGUMENTS PARSING #
82  # #
83  # * Use a macro to create the CMAKE variables according to the #
84  # provided options as input. #
85  # #
86  #########################################################################
87 
88  get_directory_name(${CMAKE_CURRENT_SOURCE_DIR} EXTENSION_NAME)
89 
90  parse_arguments(${EXTENSION_NAME_CMAKE} #prefix
91  "NEEDS_TOOLNEEDS_CEP_LIBRARIESNEEDS_COMPONENT_EXTENSIONNEEDS_ACTION_EXTENSIONINCLUDE_DIRECTORIESEXTERNAL_LIBRARIESHEADERS_TO_INSTALLDEFINESCXX_FLAGSEXTERNAL_SOURCESTARGET_NAMECEP_NAMEDESCRIPTIONTEST_APPLICATIONEXTRA_TRANSLATE_LANGUAGETEST_FILES" # possible lists
92  "NEEDS_QT_MODULESACTION_EXTENSIONCOMPONENT_EXTENSIONDISABLEDNEEDS_XERCESCNEEDS_ITKNEEDS_LIBXML2NEEDS_XSDNEEDS_QTXMLNEEDS_OPENCVNEEDS_IGSTKINSTALL_ALL_HEADERSNEEDS_GDCMDISABLE_TESTLEVEL1DISABLE_TESTLEVEL2DISABLE_TESTLEVEL3" # possible options
93  ${ARGN}
94  )
95 
96 
97 
98  #########################################################################
99  # #
100  # CREATE CMAKE VARIABLES #
101  # #
102  # * Create required and useful CMake variables for the macro #
103  # #
104  #########################################################################
105 
106  # TYPE EXTENSION : ACTION or COMPONENT
107  if (${EXTENSION_NAME_CMAKE}_ACTION_EXTENSION)
108  set(TYPE_EXTENSION "action")
109  string(TOUPPER ${TYPE_EXTENSION} TYPE_EXTENSION_CMAKE)
110  elseif(${EXTENSION_NAME_CMAKE}_COMPONENT_EXTENSION)
111  set(TYPE_EXTENSION "component")
112  string(TOUPPER ${TYPE_EXTENSION} TYPE_EXTENSION_CMAKE)
113  endif()
114 
115  # CMAKE CACHE VARIABLE
116  # if it is the first cmake run, create the extension variable with a correct initial value
117  if(NOT ${TYPE_EXTENSION_CMAKE}_${EXTENSION_NAME_CMAKE}_INTERNAL)
118  # add option to enable/disable this extension and set it to true by default
119  # Building the extension can be disabled by giving the argument DISABLED to the macro
120  # or by passing the flag -D${TYPE_EXTENSION_CMAKE}_${EXTENSION_NAME_CMAKE}_DISABLED:BOOL=TRUE
121  if(${EXTENSION_NAME_CMAKE}_DISABLED)
122  set(${TYPE_EXTENSION_CMAKE}_${EXTENSION_NAME_CMAKE}_ENABLED FALSE)
123  else()
124  set(${TYPE_EXTENSION_CMAKE}_${EXTENSION_NAME_CMAKE}_ENABLED TRUE)
125  endif()
126  set(${TYPE_EXTENSION_CMAKE}_${EXTENSION_NAME_CMAKE} ${${TYPE_EXTENSION_CMAKE}_${EXTENSION_NAME_CMAKE}_ENABLED} CACHE BOOL "Build extension ${EXTENSION_NAME}")
127  set(${TYPE_EXTENSION_CMAKE}_${EXTENSION_NAME_CMAKE}_INTERNAL TRUE CACHE INTERNAL "Is variable ${TYPE_EXTENSION_CMAKE}_${EXTENSION_NAME} already created?")
128  endif()
129 
130  # if this extension is enabled, do everything needed
131  # otherwise... do nothing
132  if (${TYPE_EXTENSION_CMAKE}_${EXTENSION_NAME_CMAKE})
133 
134  # TARGET NAME
135  # The target name is composed of the following: [action / component]-name
136  # * action / component is the type of extension as prefix
137  # * name is deduced from the input folder containing the calling CMakeLists.txt file of the extension.
138  if (${EXTENSION_NAME_CMAKE}_TARGET_NAME)
139  set(${TYPE_EXTENSION_CMAKE}_OUTPUT_NAME ${${EXTENSION_NAME_CMAKE}_TARGET_NAME})
140  else()
141  set(${TYPE_EXTENSION_CMAKE}_OUTPUT_NAME ${EXTENSION_NAME})
142  endif()
143  # replace "-" by "_" if the extension is being packaged with NSIS, the program to create a Windows installer.
144  if (PACKAGING_NSIS)
145  # NSIS requires that cpack component names do not feature space or "-" characters
146  set(${TYPE_EXTENSION_CMAKE}_TARGET_NAME ${TYPE_EXTENSION}_${${TYPE_EXTENSION_CMAKE}_OUTPUT_NAME})
147  else()
148  set(${TYPE_EXTENSION_CMAKE}_TARGET_NAME ${TYPE_EXTENSION}-${${TYPE_EXTENSION_CMAKE}_OUTPUT_NAME})
149  endif()
150 
151  message(STATUS "Building extension ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}")
152 
153 
154 
155  #########################################################################
156  # #
157  # INCLUDE DIRECTORIES #
158  # #
159  # * Include basic directories where to look header files #
160  # * Include also additional user provided directories #
161  # * These directories are used for compilation step #
162  # #
163  #########################################################################
164  # BASIC DIRECTORIES
165 
166  include_directories(${CAMITK_INCLUDE_DIRECTORIES})
167  include_directories(${CMAKE_CURRENT_BINARY_DIR})
168  include_directories(${CMAKE_CURRENT_SOURCE_DIR})
169 
170  # USER INPUT DIRECTORIES
171  include_directories(${${EXTENSION_NAME_CMAKE}_INCLUDE_DIRECTORIES})
172 
173 
174 
175  #########################################################################
176  # #
177  # GATHER RESSOURCES #
178  # #
179  # * Get all the headers (.h) and source files (.cpp) of the project #
180  # * Create the needed Qt files (using moc and uic) #
181  # #
182  #########################################################################
183 
184  # get all headers, sources and do what is needed for Qt
185  # one need to do this just before the add_library so that all defines, include directories and link directories
186  # are set properly (gather_headers_and_sources include the call to Qt moc and uic)
187  gather_headers_and_sources(${EXTENSION_NAME_CMAKE})
188 
189 
190 
191  #########################################################################
192  # #
193  # ADDITIONAL KNOWN EXTERNAL LIBRARY DEPENDENCIES #
194  # #
195  # * Look for specific library needed #
196  # * Specific libraries are specified as option with the #
197  # NEEDS_LIBRARY syntax (see macro syntax for more options) #
198  # * Backward compatibility : Warn user if using old NEEDS_TOOL syntax #
199  # #
200  #########################################################################
201 
202  # Looking for ITK
203  set(ITK_LIBRARIES "")
204  if(${EXTENSION_NAME_CMAKE}_NEEDS_ITK)
205  find_package(ITK REQUIRED)
206  if(ITK_FOUND)
207  include(${ITK_USE_FILE})
208  set(ITK_VERSION ${ITK_VERSION_MAJOR}.${ITK_VERSION_MINOR}.${ITK_VERSION_PATCH}) #ITK_VERSION is not always set
209  message(STATUS "${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}: Found ITK version ${ITK_VERSION}")
210 
211  # Now select the ITK libraries according to the ITK version found.
212  # ITK 3.x.x (mostly 3.20.1)
213  if ((${ITK_VERSION} VERSION_GREATER "3") AND (${ITK_VERSION} VERSION_LESS "4"))
214  if (MSVC) # Visual Studio compilers
215  if(MSVC90 OR MSVC10) #ITK 3.x only works with VS 2008 / 2010
216  set(ITK_LIBRARIES
217  debug ITKAlgorithms${CAMITK_DEBUG_POSTFIX}
218  optimized ITKAlgorithms
219  debug ITKBasicFilters${CAMITK_DEBUG_POSTFIX}
220  optimized ITKBasicFilters
221  debug ITKCommon${CAMITK_DEBUG_POSTFIX}
222  optimized ITKCommon
223  debug ITKIO${CAMITK_DEBUG_POSTFIX}
224  optimized ITKIO
225  debug ITKNrrdIO${CAMITK_DEBUG_POSTFIX}.lib
226  debug itkgdcm${CAMITK_DEBUG_POSTFIX}.lib
227  debug itkjpeg12${CAMITK_DEBUG_POSTFIX}.lib
228  debug itkjpeg16${CAMITK_DEBUG_POSTFIX}.lib
229  debug itkopenjpeg${CAMITK_DEBUG_POSTFIX}.lib
230  debug itkpng${CAMITK_DEBUG_POSTFIX}.lib
231  debug itktiff${CAMITK_DEBUG_POSTFIX}.lib
232  debug itkjpeg8${CAMITK_DEBUG_POSTFIX}.lib
233  debug ITKSpatialObject${CAMITK_DEBUG_POSTFIX}.lib
234  debug itkvnl_inst${CAMITK_DEBUG_POSTFIX}.lib
235  debug itkvnl_algo${CAMITK_DEBUG_POSTFIX}.lib
236  debug itkv3p_netlib${CAMITK_DEBUG_POSTFIX}.lib
237  debug itkvnl${CAMITK_DEBUG_POSTFIX}.lib
238  debug itkvcl${CAMITK_DEBUG_POSTFIX}.lib
239  debug itkv3p_lsqr${CAMITK_DEBUG_POSTFIX}.lib
240  debug ITKMetaIO${CAMITK_DEBUG_POSTFIX}.lib
241  debug itksys${CAMITK_DEBUG_POSTFIX}.lib
242  debug ITKDICOMParser${CAMITK_DEBUG_POSTFIX}.lib
243  debug ITKEXPAT${CAMITK_DEBUG_POSTFIX}.lib
244  debug ITKniftiio${CAMITK_DEBUG_POSTFIX}.lib
245  debug ITKznz${CAMITK_DEBUG_POSTFIX}.lib
246  debug itkzlib${CAMITK_DEBUG_POSTFIX}.lib
247  debug snmpapi.lib
248  debug rpcrt4.lib
249  debug ws2_32.lib
250  debug comctl32.lib
251  debug wsock32.lib
252  debug opengl32.lib
253  )
254  elseif(MSVC11 OR MSVC12) # Visual Studion 2012/2013
255  message(FATAL_ERROR "It seems you have ITK version 3.x installed. This one is not compatible with Visual Studio 2012 or 2013. Please install ITK 4.3.x or 4.5.x instead")
256  endif()
257  elseif(MINGW)
258  message(FATAL_ERROR "CamiTK does not support ITK 3.x libraries for MinGW. You may file a feature request: https://bugzilla-timc.imag.fr/")
259  else() #APPLE OR UNIX
260  set(ITK_LIBRARIES ITKBasicFilters ITKCommon ITKIO ITKAlgorithms)
261  endif()
262 
263  # ITK 4.3.x (mostly 4.3.2)
264  elseif((${ITK_VERSION} VERSION_GREATER "4") AND (${ITK_VERSION} VERSION_LESS "4.4"))
265  if (MSVC) # Visual Studio compilers
266  if(MSVC90 OR MSVC10) #ITK 3.x only works with VS 2008 / 2010
267  message(FATAL_ERROR "ITK version ${ITK_VERSION} is not compatible with Visual Studio 2008 or 2010. Please install ITK version 4.3.x or 4.5.x")
268  elseif(MSVC11 OR MSVC12) # Visual Studion 2012/2013
269  link_directories(${ITK_DIR}/../..)
270  set(ITK_LIBRARIES
271  # Debug libraries
272  debug ITKCommon-4.3${CAMITK_DEBUG_POSTFIX}.lib
273  debug ITKNrrdIO-4.3${CAMITK_DEBUG_POSTFIX}.lib
274  debug itkgdcmCommon-4.3${CAMITK_DEBUG_POSTFIX}.lib
275  debug itkjpeg-4.3${CAMITK_DEBUG_POSTFIX}.lib
276  debug itkopenjpeg-4.3${CAMITK_DEBUG_POSTFIX}.lib
277  debug itkpng-4.3${CAMITK_DEBUG_POSTFIX}.lib
278  debug itktiff-4.3${CAMITK_DEBUG_POSTFIX}.lib
279  debug ITKSpatialObjects-4.3${CAMITK_DEBUG_POSTFIX}.lib
280  debug itkvnl_algo-4.3${CAMITK_DEBUG_POSTFIX}.lib
281  debug itkv3p_netlib-4.3${CAMITK_DEBUG_POSTFIX}.lib
282  debug itkvnl-4.3${CAMITK_DEBUG_POSTFIX}.lib
283  debug itkvcl-4.3${CAMITK_DEBUG_POSTFIX}.lib
284  debug itkv3p_lsqr-4.3${CAMITK_DEBUG_POSTFIX}.lib
285  debug ITKMetaIO-4.3${CAMITK_DEBUG_POSTFIX}.lib
286  debug itksys-4.3${CAMITK_DEBUG_POSTFIX}.lib
287  debug ITKDICOMParser-4.3${CAMITK_DEBUG_POSTFIX}.lib
288  debug ITKEXPAT-4.3${CAMITK_DEBUG_POSTFIX}.lib
289  debug ITKniftiio-4.3${CAMITK_DEBUG_POSTFIX}.lib
290  debug ITKznz-4.3${CAMITK_DEBUG_POSTFIX}.lib
291  debug itkzlib-4.3${CAMITK_DEBUG_POSTFIX}.lib
292  debug snmpapi.lib
293  debug rpcrt4.lib
294  debug ws2_32.lib
295  debug comctl32.lib
296  debug wsock32.lib
297  debug opengl32.lib
298  debug ITKIOGIPL-4.3${CAMITK_DEBUG_POSTFIX}.lib
299  debug ITKIONIFTI-4.3${CAMITK_DEBUG_POSTFIX}.lib
300  debug ITKIONRRD-4.3${CAMITK_DEBUG_POSTFIX}.lib
301  debug ITKIOPNG-4.3${CAMITK_DEBUG_POSTFIX}.lib
302  debug itkgdcmDICT-4.3${CAMITK_DEBUG_POSTFIX}.lib
303  debug itkgdcmDSED-4.3${CAMITK_DEBUG_POSTFIX}.lib
304  debug itkgdcmIOD-4.3${CAMITK_DEBUG_POSTFIX}.lib
305  debug itkgdcmjpeg8-4.3${CAMITK_DEBUG_POSTFIX}.lib
306  debug itkgdcmjpeg12-4.3${CAMITK_DEBUG_POSTFIX}.lib
307  debug itkgdcmjpeg16-4.3${CAMITK_DEBUG_POSTFIX}.lib
308  debug itkgdcmMSFF-4.3${CAMITK_DEBUG_POSTFIX}.lib
309  debug ITKgiftiio-4.3${CAMITK_DEBUG_POSTFIX}.lib
310  debug itkhdf5_cpp-4.3${CAMITK_DEBUG_POSTFIX}.lib
311  debug itkhdf5-4.3${CAMITK_DEBUG_POSTFIX}.lib
312  debug ITKMetaIO-4.3${CAMITK_DEBUG_POSTFIX}.lib
313  debug ITKIOBioRad-4.3${CAMITK_DEBUG_POSTFIX}.lib
314  debug ITKIOStimulate-4.3${CAMITK_DEBUG_POSTFIX}.lib
315  debug ITKIOTIFF-4.3${CAMITK_DEBUG_POSTFIX}.lib
316  debug ITKIOVTK-4.3${CAMITK_DEBUG_POSTFIX}.lib
317  debug ITKIOPNG-4.3${CAMITK_DEBUG_POSTFIX}.lib
318  debug ITKBiasCorrection-4.3${CAMITK_DEBUG_POSTFIX}.lib
319  debug ITKBioCell-4.3${CAMITK_DEBUG_POSTFIX}.lib
320  debug ITKFEM-4.3${CAMITK_DEBUG_POSTFIX}.lib
321  debug ITKIOBMP-4.3${CAMITK_DEBUG_POSTFIX}.lib
322  debug ITKIOCSV-4.3${CAMITK_DEBUG_POSTFIX}.lib
323  debug ITKIOGDCM-4.3${CAMITK_DEBUG_POSTFIX}.lib
324  debug ITKIOGE-4.3${CAMITK_DEBUG_POSTFIX}.lib
325  debug ITKIOGIPL-4.3${CAMITK_DEBUG_POSTFIX}.lib
326  debug ITKIOHDF5-4.3${CAMITK_DEBUG_POSTFIX}.lib
327  debug ITKIOImageBase-4.3${CAMITK_DEBUG_POSTFIX}.lib
328  debug ITKIOIPL-4.3${CAMITK_DEBUG_POSTFIX}.lib
329  debug ITKIOJPEG-4.3${CAMITK_DEBUG_POSTFIX}.lib
330  debug ITKIOLSM-4.3${CAMITK_DEBUG_POSTFIX}.lib
331  debug ITKIOMesh-4.3${CAMITK_DEBUG_POSTFIX}.lib
332  debug ITKIOMeta-4.3${CAMITK_DEBUG_POSTFIX}.lib
333  debug ITKIOSiemens-4.3${CAMITK_DEBUG_POSTFIX}.lib
334  debug ITKIOSpatialObjects-4.3${CAMITK_DEBUG_POSTFIX}.lib
335  debug ITKIOTransformBase-4.3${CAMITK_DEBUG_POSTFIX}.lib
336  debug ITKIOTransformHDF5-4.3${CAMITK_DEBUG_POSTFIX}.lib
337  debug ITKIOTransformInsightLegacy-4.3${CAMITK_DEBUG_POSTFIX}.lib
338  debug ITKIOTransformMatlab-4.3${CAMITK_DEBUG_POSTFIX}.lib
339  debug ITKIOXML-4.3${CAMITK_DEBUG_POSTFIX}.lib
340  debug ITKKLMRegionGrowing-4.3${CAMITK_DEBUG_POSTFIX}.lib
341  debug ITKLabelMap-4.3${CAMITK_DEBUG_POSTFIX}.lib
342  debug ITKMesh-4.3${CAMITK_DEBUG_POSTFIX}.lib
343  debug ITKMetaIO-4.3${CAMITK_DEBUG_POSTFIX}.lib
344  debug itkNetlibSlatec-4.3${CAMITK_DEBUG_POSTFIX}.lib
345  debug itkopenjpeg-4.3${CAMITK_DEBUG_POSTFIX}.lib
346  debug ITKOptimizers-4.3${CAMITK_DEBUG_POSTFIX}.lib
347  debug ITKOptimizersv4-4.3${CAMITK_DEBUG_POSTFIX}.lib
348  debug ITKPath-4.3${CAMITK_DEBUG_POSTFIX}.lib
349  debug itkpng-4.3${CAMITK_DEBUG_POSTFIX}.lib
350  debug ITKPolynomials-4.3${CAMITK_DEBUG_POSTFIX}.lib
351  debug ITKQuadEdgeMesh-4.3${CAMITK_DEBUG_POSTFIX}.lib
352  debug ITKReview-4.3${CAMITK_DEBUG_POSTFIX}.lib
353  debug ITKStatistics-4.3${CAMITK_DEBUG_POSTFIX}.lib
354  debug itkv3p_lsqr-4.3${CAMITK_DEBUG_POSTFIX}.lib
355  debug itkv3p_netlib-4.3${CAMITK_DEBUG_POSTFIX}.lib
356  debug itkvcl-4.3${CAMITK_DEBUG_POSTFIX}.lib
357  debug ITKVideoCore-4.3${CAMITK_DEBUG_POSTFIX}.lib
358  debug ITKVideoIO-4.3${CAMITK_DEBUG_POSTFIX}.lib
359  debug ITKVTK-4.3${CAMITK_DEBUG_POSTFIX}.lib
360  debug ITKVNLInstantiation-4.3${CAMITK_DEBUG_POSTFIX}.lib
361  debug ITKWatersheds-4.3${CAMITK_DEBUG_POSTFIX}.lib
362  # Release librariesdebug
363  optimized ITKCommon-4.3.lib
364  optimized ITKNrrdIO-4.3.lib
365  optimized itkgdcmCommon-4.3.lib
366  optimized itkjpeg-4.3.lib
367  optimized itkopenjpeg-4.3.lib
368  optimized itkpng-4.3.lib
369  optimized itktiff-4.3.lib
370  optimized ITKSpatialObjects-4.3.lib
371  optimized itkvnl_algo-4.3.lib
372  optimized itkv3p_netlib-4.3.lib
373  optimized itkvnl-4.3.lib
374  optimized itkvcl-4.3.lib
375  optimized itkv3p_lsqr-4.3.lib
376  optimized ITKMetaIO-4.3.lib
377  optimized itksys-4.3.lib
378  optimized ITKDICOMParser-4.3.lib
379  optimized ITKEXPAT-4.3.lib
380  optimized ITKniftiio-4.3.lib
381  optimized ITKznz-4.3.lib
382  optimized itkzlib-4.3.lib
383  optimized snmpapi.lib
384  optimized rpcrt4.lib
385  optimized ws2_32.lib
386  optimized comctl32.lib
387  optimized wsock32.lib
388  optimized opengl32.lib
389  optimized ITKIOGIPL-4.3.lib
390  optimized ITKIONIFTI-4.3.lib
391  optimized ITKIONRRD-4.3.lib
392  optimized ITKIOPNG-4.3.lib
393  optimized itkgdcmDICT-4.3.lib
394  optimized itkgdcmDSED-4.3.lib
395  optimized itkgdcmIOD-4.3.lib
396  optimized itkgdcmjpeg8-4.3.lib
397  optimized itkgdcmjpeg12-4.3.lib
398  optimized itkgdcmjpeg16-4.3.lib
399  optimized itkgdcmMSFF-4.3.lib
400  optimized ITKgiftiio-4.3.lib
401  optimized itkhdf5_cpp-4.3.lib
402  optimized itkhdf5-4.3.lib
403  optimized ITKMetaIO-4.3.lib
404  optimized ITKIOBioRad-4.3.lib
405  optimized ITKIOStimulate-4.3.lib
406  optimized ITKIOTIFF-4.3.lib
407  optimized ITKIOVTK-4.3.lib
408  optimized ITKIOPNG-4.3.lib
409  optimized ITKBiasCorrection-4.3.lib
410  optimized ITKBioCell-4.3.lib
411  optimized ITKFEM-4.3.lib
412  optimized ITKIOBMP-4.3.lib
413  optimized ITKIOCSV-4.3.lib
414  optimized ITKIOGDCM-4.3.lib
415  optimized ITKIOGE-4.3.lib
416  optimized ITKIOGIPL-4.3.lib
417  optimized ITKIOHDF5-4.3.lib
418  optimized ITKIOImageBase-4.3.lib
419  optimized ITKIOIPL-4.3.lib
420  optimized ITKIOJPEG-4.3.lib
421  optimized ITKIOLSM-4.3.lib
422  optimized ITKIOMesh-4.3.lib
423  optimized ITKIOMeta-4.3.lib
424  optimized ITKIOSiemens-4.3.lib
425  optimized ITKIOSpatialObjects-4.3.lib
426  optimized ITKIOTransformBase-4.3.lib
427  optimized ITKIOTransformHDF5-4.3.lib
428  optimized ITKIOTransformInsightLegacy-4.3.lib
429  optimized ITKIOTransformMatlab-4.3.lib
430  optimized ITKIOXML-4.3.lib
431  optimized ITKKLMRegionGrowing-4.3.lib
432  optimized ITKLabelMap-4.3.lib
433  optimized ITKMesh-4.3.lib
434  optimized ITKMetaIO-4.3.lib
435  optimized itkNetlibSlatec-4.3.lib
436  optimized itkopenjpeg-4.3.lib
437  optimized ITKOptimizers-4.3.lib
438  optimized ITKOptimizersv4-4.3.lib
439  optimized ITKPath-4.3.lib
440  optimized itkpng-4.3.lib
441  optimized ITKPolynomials-4.3.lib
442  optimized ITKQuadEdgeMesh-4.3.lib
443  optimized ITKReview-4.3.lib
444  optimized ITKStatistics-4.3.lib
445  optimized itkv3p_lsqr-4.3.lib
446  optimized itkv3p_netlib-4.3.lib
447  optimized itkvcl-4.3.lib
448  optimized ITKVideoCore-4.3.lib
449  optimized ITKVideoIO-4.3.lib
450  optimized ITKVTK-4.3.lib
451  optimized ITKVNLInstantiation-4.3.lib
452  optimized ITKWatersheds-4.3.lib
453  )
454  endif()
455  elseif(MINGW OR APPLE)
456  link_directories(${ITK_DIR}/../..)
457  set(ITK_LIBRARIES
458  ITKCommon-4.3
459  ITKNrrdIO-4.3
460  itkgdcmCommon-4.3
461  itkjpeg-4.3
462  itkopenjpeg-4.3
463  itkpng-4.3
464  itktiff-4.3
465  ITKSpatialObjects-4.3
466  itkvnl_algo-4.3
467  itkv3p_netlib-4.3
468  itkvnl-4.3
469  itkvcl-4.3
470  itkv3p_lsqr-4.3
471  ITKMetaIO-4.3
472  itksys-4.3
473  ITKDICOMParser-4.3
474  ITKEXPAT-4.3
475  ITKniftiio-4.3
476  ITKznz-4.3
477  itkzlib-4.3
478  snmpapi
479  rpcrt4
480  ws2_32
481  comctl32
482  wsock32
483  opengl32
484  ITKIOGIPL-4.3
485  ITKIONIFTI-4.3
486  ITKIONRRD-4.3
487  ITKIOPNG-4.3
488  itkgdcmDICT-4.3
489  itkgdcmDSED-4.3
490  itkgdcmIOD-4.3
491  itkgdcmjpeg8-4.3
492  itkgdcmjpeg12-4.3
493  itkgdcmjpeg16-4.3
494  itkgdcmMSFF-4.3
495  ITKgiftiio-4.3
496  itkhdf5_cpp-4.3
497  itkhdf5-4.3
498  ITKMetaIO-4.3
499  ITKIOBioRad-4.3
500  ITKIOStimulate-4.3
501  ITKIOTIFF-4.3
502  ITKIOVTK-4.3
503  ITKIOPNG-4.3
504  ITKBiasCorrection-4.3
505  ITKBioCell-4.3
506  ITKFEM-4.3
507  ITKIOBMP-4.3
508  ITKIOCSV-4.3
509  ITKIOGDCM-4.3
510  ITKIOGE-4.3
511  ITKIOGIPL-4.3
512  ITKIOHDF5-4.3
513  ITKIOImageBase-4.3
514  ITKIOIPL-4.3
515  ITKIOJPEG-4.3
516  ITKIOLSM-4.3
517  ITKIOMesh-4.3
518  ITKIOMeta-4.3
519  ITKIOSiemens-4.3
520  ITKIOSpatialObjects-4.3
521  ITKIOTransformBase-4.3
522  ITKIOTransformHDF5-4.3
523  ITKIOTransformInsightLegacy-4.3
524  ITKIOTransformMatlab-4.3
525  ITKIOXML-4.3
526  ITKKLMRegionGrowing-4.3
527  ITKLabelMap-4.3
528  ITKMesh-4.3
529  ITKMetaIO-4.3
530  itkNetlibSlatec-4.3
531  itkopenjpeg-4.3
532  ITKOptimizers-4.3
533  ITKOptimizersv4-4.3
534  ITKPath-4.3
535  itkpng-4.3
536  ITKPolynomials-4.3
537  ITKQuadEdgeMesh-4.3
538  ITKReview-4.3
539  ITKStatistics-4.3
540  itkv3p_lsqr-4.3
541  itkv3p_netlib-4.3
542  itkvcl-4.3
543  ITKVideoCore-4.3
544  ITKVideoIO-4.3
545  ITKVTK-4.3
546  ITKVNLInstantiation-4.3
547  ITKWatersheds-4.3
548  )
549  else() #Linux
550  set(ITK_LIBRARIES ITKCommon-4.3)
551  endif()
552 
553  # ITK 4.5.x (mostly 4.5.1)
554  elseif((${ITK_VERSION} VERSION_GREATER "4.4") AND (${ITK_VERSION} VERSION_LESS "4.7"))
555  if(MSVC)
556  if(MSVC90 OR MSVC10) #ITK 3.x only works with VS 2008 / 2010
557  message(FATAL_ERROR "ITK version ${ITK_VERSION} is not compatible with Visual Studio 2008 or 2010. Please install ITK version 3.20.1")
558  elseif(MSVC11 OR MSVC12) # Visual Studion 2012/2013
559  link_directories(${ITK_DIR}/../..)
560  set(ITK_LIBRARIES
561  optimized TKIOBioRad-4.5.lib
562  optimized ITKIOStimulate-4.5.lib
563  optimized itkpng-4.5.lib
564  debug ITKBiasCorrection-4.5${CAMITK_DEBUG_POSTFIX}.lib
565  debug ITKIOBMP-4.5${CAMITK_DEBUG_POSTFIX}.lib
566  debug ITKIOTIFF-4.5${CAMITK_DEBUG_POSTFIX}.lib
567  debug ITKPolynomials-4.5${CAMITK_DEBUG_POSTFIX}.lib
568  optimized ITKBiasCorrection-4.5.lib
569  optimized ITKIOBMP-4.5.lib
570  optimized ITKIOTIFF-4.5.lib
571  optimized ITKPolynomials-4.5.lib
572  debug ITKBioCell-4.5${CAMITK_DEBUG_POSTFIX}.lib
573  debug ITKIOCSV-4.5${CAMITK_DEBUG_POSTFIX}.lib
574  debug ITKIOTransformBase-4.5${CAMITK_DEBUG_POSTFIX}.lib
575  debug ITKQuadEdgeMesh-4.5${CAMITK_DEBUG_POSTFIX}.lib
576  optimized ITKBioCell-4.5.lib
577  optimized ITKIOCSV-4.5.lib
578  optimized ITKIOTransformBase-4.5.lib
579  optimized ITKQuadEdgeMesh-4.5.lib
580  debug ITKCommon-4.5${CAMITK_DEBUG_POSTFIX}.lib
581  debug ITKIOGDCM-4.5${CAMITK_DEBUG_POSTFIX}.lib
582  debug ITKIOTransformHDF5-4.5${CAMITK_DEBUG_POSTFIX}.lib
583  debug ITKSpatialObjects-4.5${CAMITK_DEBUG_POSTFIX}.lib
584  optimized ITKCommon-4.5.lib
585  optimized ITKIOGDCM-4.5.lib
586  optimized ITKIOTransformHDF5-4.5.lib
587  optimized ITKSpatialObjects-4.5.lib
588  debug ITKDICOMParser-4.5${CAMITK_DEBUG_POSTFIX}.lib
589  debug debug ITKIOGE-4.5${CAMITK_DEBUG_POSTFIX}.lib
590  debug ITKIOTransformInsightLegacy-4.5${CAMITK_DEBUG_POSTFIX}.lib
591  debug ITKStatistics-4.5${CAMITK_DEBUG_POSTFIX}.lib
592  optimized ITKDICOMParser-4.5.lib
593  optimized ITKIOGE-4.5.lib
594  optimized ITKIOTransformInsightLegacy-4.5.lib
595  optimized ITKStatistics-4.5.lib
596  debug itkdouble-conversion-4.5${CAMITK_DEBUG_POSTFIX}.lib
597  debug ITKIOGIPL-4.5${CAMITK_DEBUG_POSTFIX}.lib
598  debug ITKIOTransformMatlab-4.5${CAMITK_DEBUG_POSTFIX}.lib
599  debug itksys-4.5${CAMITK_DEBUG_POSTFIX}.lib
600  optimized itkdouble-conversion-4.5.lib
601  optimized ITKIOGIPL-4.5.lib
602  optimized ITKIOTransformMatlab-4.5.lib
603  optimized itksys-4.5.lib
604  debug ITKEXPAT-4.5${CAMITK_DEBUG_POSTFIX}.lib
605  debug ITKIOHDF5-4.5${CAMITK_DEBUG_POSTFIX}.lib
606  debug ITKIOVTK-4.5${CAMITK_DEBUG_POSTFIX}.lib
607  debug itktiff-4.5${CAMITK_DEBUG_POSTFIX}.lib
608  optimized ITKEXPAT-4.5.lib
609  optimized ITKIOHDF5-4.5.lib
610  optimized ITKIOVTK-4.5.lib
611  optimized itktiff-4.5.lib
612  debug ITKFEM-4.5${CAMITK_DEBUG_POSTFIX}.lib
613  debug ITKIOImageBase-4.5${CAMITK_DEBUG_POSTFIX}.lib
614  debug ITKIOXML-4.5${CAMITK_DEBUG_POSTFIX}.lib
615  debug itkv3p_lsqr-4.5${CAMITK_DEBUG_POSTFIX}.lib
616  optimized ITKFEM-4.5.lib
617  optimized ITKIOImageBase-4.5.lib
618  optimized ITKIOXML-4.5.lib
619  optimized itkv3p_lsqr-4.5.lib
620  debug itkgdcmCommon-4.5${CAMITK_DEBUG_POSTFIX}.lib
621  debug ITKIOIPL-4.5${CAMITK_DEBUG_POSTFIX}.lib
622  debug itkjpeg-4.5${CAMITK_DEBUG_POSTFIX}.lib
623  debug itkv3p_netlib-4.5${CAMITK_DEBUG_POSTFIX}.lib
624  optimized itkgdcmCommon-4.5.lib
625  optimized ITKIOIPL-4.5.lib
626  optimized itkjpeg-4.5.lib
627  optimized itkv3p_netlib-4.5.lib
628  debug itkgdcmDICT-4.5${CAMITK_DEBUG_POSTFIX}.lib
629  debug ITKIOJPEG-4.5${CAMITK_DEBUG_POSTFIX}.lib
630  debug ITKKLMRegionGrowing-4.5${CAMITK_DEBUG_POSTFIX}.lib
631  debug itkvcl-4.5${CAMITK_DEBUG_POSTFIX}.lib
632  optimized itkgdcmDICT-4.5.lib
633  optimized ITKIOJPEG-4.5.lib
634  optimized ITKKLMRegionGrowing-4.5.lib
635  optimized itkvcl-4.5.lib
636  debug itkgdcmDSED-4.5${CAMITK_DEBUG_POSTFIX}.lib
637  debug ITKIOLSM-4.5${CAMITK_DEBUG_POSTFIX}.lib
638  debug ITKLabelMap-4.5${CAMITK_DEBUG_POSTFIX}.lib
639  debug ITKVideoCore-4.5${CAMITK_DEBUG_POSTFIX}.lib
640  optimized itkgdcmDSED-4.5.lib
641  optimized ITKIOLSM-4.5.lib
642  optimized ITKLabelMap-4.5.lib
643  optimized ITKVideoCore-4.5.lib
644  optimized itkgdcmIOD-4.5${CAMITK_DEBUG_POSTFIX}.lib
645  optimized ITKIOMesh-4.5${CAMITK_DEBUG_POSTFIX}.lib
646  optimized ITKMesh-4.5${CAMITK_DEBUG_POSTFIX}.lib
647  optimized ITKVideoIO-4.5${CAMITK_DEBUG_POSTFIX}.lib
648  optimized itkgdcmIOD-4.5.lib
649  optimized ITKIOMesh-4.5.lib
650  optimized ITKMesh-4.5.lib
651  optimized ITKVideoIO-4.5.lib
652  debug itkgdcmjpeg12-4.5${CAMITK_DEBUG_POSTFIX}.lib
653  debug ITKIOMeta-4.5${CAMITK_DEBUG_POSTFIX}.lib
654  debug ITKMetaIO-4.5${CAMITK_DEBUG_POSTFIX}.lib
655  debug itkvnl-4.5${CAMITK_DEBUG_POSTFIX}.lib
656  debug itkgdcmjpeg12-4.5.lib
657  optimized ITKIOMeta-4.5.lib
658  optimized ITKMetaIO-4.5.lib
659  optimized itkvnl-4.5.lib
660  debug itkgdcmjpeg16-4.5${CAMITK_DEBUG_POSTFIX}.lib
661  debug ITKIOMRC-4.5${CAMITK_DEBUG_POSTFIX}.lib
662  debug itkNetlibSlatec-4.5${CAMITK_DEBUG_POSTFIX}.lib
663  debug itkvnl_algo-4.5${CAMITK_DEBUG_POSTFIX}.lib
664  optimized itkgdcmjpeg16-4.5.lib
665  optimized ITKIOMRC-4.5.lib
666  optimized itkNetlibSlatec-4.5.lib
667  optimized itkvnl_algo-4.5.lib
668  debug itkgdcmjpeg8-4.5${CAMITK_DEBUG_POSTFIX}.lib
669  debug ITKIONIFTI-4.5${CAMITK_DEBUG_POSTFIX}.lib
670  debug ITKniftiio-4.5${CAMITK_DEBUG_POSTFIX}.lib
671  debug ITKVNLInstantiation-4.5${CAMITK_DEBUG_POSTFIX}.lib
672  optimized itkgdcmjpeg8-4.5.lib
673  optimized ITKIONIFTI-4.5.lib
674  optimized ITKniftiio-4.5.lib
675  optimized ITKVNLInstantiation-4.5.lib
676  debug itkgdcmMSFF-4.5${CAMITK_DEBUG_POSTFIX}.lib
677  debug ITKIONRRD-4.5${CAMITK_DEBUG_POSTFIX}.lib
678  debug ITKNrrdIO-4.5${CAMITK_DEBUG_POSTFIX}.lib
679  debug ITKVTK-4.5${CAMITK_DEBUG_POSTFIX}.lib
680  optimized itkgdcmMSFF-4.5.lib
681  optimized ITKIONRRD-4.5.lib
682  optimized ITKNrrdIO-4.5.lib
683  optimized ITKVTK-4.5.lib
684  debug ITKgiftiio-4.5${CAMITK_DEBUG_POSTFIX}.lib
685  debug ITKIOPNG-4.5${CAMITK_DEBUG_POSTFIX}.lib
686  debug itkopenjpeg-4.5${CAMITK_DEBUG_POSTFIX}.lib
687  debug ITKWatersheds-4.5${CAMITK_DEBUG_POSTFIX}.lib
688  optimized ITKgiftiio-4.5.lib
689  optimized ITKIOPNG-4.5.lib
690  optimized itkopenjpeg-4.5.lib
691  optimized ITKWatersheds-4.5.lib
692  debug itkhdf5-4.5${CAMITK_DEBUG_POSTFIX}.lib
693  debug ITKIOSiemens-4.5${CAMITK_DEBUG_POSTFIX}.lib
694  debug ITKOptimizers-4.5${CAMITK_DEBUG_POSTFIX}.lib
695  debug itkzlib-4.5${CAMITK_DEBUG_POSTFIX}.lib
696  optimized itkhdf5-4.5.lib
697  optimized ITKIOSiemens-4.5.lib
698  optimized ITKOptimizers-4.5.lib
699  optimized itkzlib-4.5.lib
700  debug itkhdf5_cpp-4.5${CAMITK_DEBUG_POSTFIX}.lib
701  debug ITKIOSpatialObjects-4.5${CAMITK_DEBUG_POSTFIX}.lib
702  debug ITKPath-4.5${CAMITK_DEBUG_POSTFIX}.lib
703  debug ITKznz-4.5${CAMITK_DEBUG_POSTFIX}.lib
704  optimized itkhdf5_cpp-4.5.lib
705  optimized ITKIOSpatialObjects-4.5.lib
706  optimized ITKPath-4.5.lib
707  optimized ITKznz-4.5.lib
708  debug ITKIOBioRad-4.5${CAMITK_DEBUG_POSTFIX}.lib
709  debug ITKIOStimulate-4.5${CAMITK_DEBUG_POSTFIX}.lib
710  debug itkpng-4.5${CAMITK_DEBUG_POSTFIX}.lib
711  )
712  endif() # MSVC
713  elseif(MINGW)
714  message(FATAL_ERROR "ITK version 4.5.x is not supported yet for MinGW compiler. You may file a feature request: https://bugzilla-timc.imag.fr/")
715  elseif(APPLE)
716  set(ITK_LIBRARIES
717  ITKBiasCorrection
718  ITKBioCell
719  ITKCommon
720  ITKDICOMParser
721  ITKEXPAT
722  ITKFEM
723  ITKGPUAnisotropicSmoothing
724  ITKGPUCommon
725  ITKGPUFiniteDifference
726  ITKGPUImageFilterBase
727  ITKGPUPDEDeformable
728  ITKGPUSmoothing
729  ITKGPUThresholding
730  ITKIOBMP
731  ITKIOBioRad
732  ITKIOCSV
733  ITKIOGDCM
734  ITKIOGE
735  ITKIOGIPL
736  ITKIOHDF5
737  ITKIOIPL
738  ITKIOImageBase
739  ITKIOJPEG
740  ITKIOLSM
741  ITKIOMesh
742  ITKIOMeta
743  ITKIONIFTI
744  ITKIONRRD
745  ITKIOPNG
746  ITKIOSiemens
747  ITKIOSpatialObjects
748  ITKIOStimulate
749  ITKIOTIFF
750  ITKIOTransformBase
751  ITKIOTransformHDF5
752  ITKIOTransformInsightLegacy
753  ITKIOTransformMatlab
754  ITKIOVTK
755  ITKIOXML
756  ITKKLMRegionGrowing
757  ITKLabelMap
758  ITKMesh
759  ITKMetaIO
760  ITKNrrdIO
761  ITKOptimizers
762  ITKOptimizersv4
763  ITKPath
764  ITKPolynomials
765  ITKQuadEdgeMesh
766  ITKReview
767  ITKSpatialObjects
768  ITKStatistics
769  ITKVNLInstantiation
770  ITKVTK
771  ITKVideoCore
772  ITKVideoIO
773  ITKWatersheds
774  ITKgiftiio
775  ITKniftiio
776  ITKznz
777  itkNetlibSlatec
778  itkdouble-conversion
779  itkhdf5
780  itkhdf5_cpp
781  itkjpeg
782  itkopenjpeg
783  itkpng
784  itksys
785  itktiff
786  itkv3p_lsqr
787  itkv3p_netlib
788  itkvcl
789  itkvnl
790  itkvnl_algo
791  itkzlib
792  )
793  else() #Linux
794  # ITK_LIBRARIES is already set
795  endif()
796 
797  # ITK version > 4.6 (mostly ITK 5.x)
798  else()
799  message(FATAL_ERROR "CamiTK does not support yet ITK version 5.x. You may file a feature request: https://bugzilla-timc.imag.fr/")
800  endif()
801  endif()
802  endif() #NEEDS ITK
803 
804  # LIBXML2
805  set(LIBXML2_LIBRARY "")
806  if(${EXTENSION_NAME_CMAKE}_NEEDS_LIBXML2)
807  # LibXml2 is required
808  find_package(Xml2)
809  if (LIBXML2_FOUND)
810  add_definitions(${LIBXML2_DEFINITIONS})
811  include_directories(${LIBXML2_INCLUDE_DIR})
812  set(LIBXML2_LIBRARY ${LIBXML2_LIBRARIES})
813  else()
814  # most probably win32 or crosscompiling
815  message(STATUS "${EXTENSION_NAME}: libxml2 required")
816  endif()
817  endif()
818 
819  # OPENCV
820  set(OpenCV_LIBRARIES "")
821  if(${EXTENSION_NAME_CMAKE}_NEEDS_OPENCV)
822  # OpenCV is required
823  find_package( OpenCV REQUIRED )
824  else ( )
825  set(OpenCV_LIBRARIES "")
826  endif()
827 
828  # IGSTK
829  set(IGSTK_LIBRARIES "")
830  if(${EXTENSION_NAME_CMAKE}_NEEDS_IGSTK)
831  find_package(IGSTK REQUIRED)
832  include(${IGSTK_USE_FILE})
833  else()
834  set(IGSTK_LIBRARIES "")
835  endif()
836 
837  # XERCES-C
838  set(XERCESC_LIBRARIES)
839  if(${EXTENSION_NAME_CMAKE}_NEEDS_XERCESC)
840  # XercesC is required
841  find_package(XercesC REQUIRED)
842  if (XERCESC_FOUND)
843  include_directories(${XERCESC_INCLUDE_DIR})
844  set(XERCESC_LIBRARIES ${XERCESC_LIBRARY})
845  else()
846  # most probably win32 or crosscompiling
847  message(FATAL_ERROR "${EXTENSION_NAME}: xerces-c required. Please provide Xerces-C path.")
848  endif()
849  endif()
850 
851  # XSD
852  if(${EXTENSION_NAME_CMAKE}_NEEDS_XSD)
853  # XercesC is required
854  find_package(XercesC REQUIRED)
855  if (XERCESC_FOUND)
856  include_directories(${XERCESC_INCLUDE_DIR})
857  set(XERCESC_LIBRARIES ${XERCESC_LIBRARY})
858  find_package(XSD REQUIRED)
859  include_directories(${XSD_INCLUDE_DIR})
860  else()
861  # most probably win32 or crosscompiling
862  message(FATAL_ERROR "${EXTENSION_NAME}: xerces-c required because of XSD cxx, please set XERCESC_INCLUDE_DIR")
863  endif()
864  endif()
865 
866  # GDCM 2.2.x
867  set(GDCM_LIBRARIES)
868  if(${EXTENSION_NAME_CMAKE}_NEEDS_GDCM)
869  if(NOT GDCM_FOUND)
870  # Look for GDCM library only if not found (for instance, ITK has already search for it)
871  # Calling find_package(GDCM ..) more than once creates CMake errors.
872  find_package(GDCM 2.0 REQUIRED)
873  endif()
874  if(GDCM_FOUND)
875  include(${GDCM_USE_FILE})
876  if (MSVC)
877  set(GDCM_LIBRARIES
878  debug ${GDCM_DIR}/../gdcmcharls${CAMITK_DEBUG_POSTFIX}
879  debug ${GDCM_DIR}/../gdcmCommon${CAMITK_DEBUG_POSTFIX}
880  debug ${GDCM_DIR}/../gdcmDICT${CAMITK_DEBUG_POSTFIX}
881  debug ${GDCM_DIR}/../gdcmDSED${CAMITK_DEBUG_POSTFIX}
882  debug ${GDCM_DIR}/../gdcmexpat${CAMITK_DEBUG_POSTFIX}
883  debug ${GDCM_DIR}/../gdcmgetopt${CAMITK_DEBUG_POSTFIX}
884  debug ${GDCM_DIR}/../gdcmIOD${CAMITK_DEBUG_POSTFIX}
885  debug ${GDCM_DIR}/../gdcmjpeg8${CAMITK_DEBUG_POSTFIX}
886  debug ${GDCM_DIR}/../gdcmjpeg12${CAMITK_DEBUG_POSTFIX}
887  debug ${GDCM_DIR}/../gdcmjpeg16${CAMITK_DEBUG_POSTFIX}
888  debug ${GDCM_DIR}/../gdcmMEXD${CAMITK_DEBUG_POSTFIX}
889  debug ${GDCM_DIR}/../gdcmMSFF${CAMITK_DEBUG_POSTFIX}
890  debug ${GDCM_DIR}/../gdcmopenjpeg${CAMITK_DEBUG_POSTFIX}
891  debug ${GDCM_DIR}/../gdcmzlib${CAMITK_DEBUG_POSTFIX}
892  debug ${GDCM_DIR}/../socketxx${CAMITK_DEBUG_POSTFIX}
893  debug ${GDCM_DIR}/../vtkgdcm${CAMITK_DEBUG_POSTFIX}
894  debug ${GDCM_DIR}/../gdcmDSED${CAMITK_DEBUG_POSTFIX}
895  optimized gdcmcharls gdcmCommon gdcmDICT gdcmDSED gdcmexpat
896  optimized gdcmgetopt gdcmIOD gdcmjpeg8 gdcmjpeg12 gdcmjpeg16
897  optimized gdcmMEXD gdcmMSFF gdcmopenjpeg gdcmzlib socketxx vtkgdcm
898  optimized gdcmDSED
899  )
900  else()
901  set(GDCM_LIBRARIES gdcmCommon gdcmDICT gdcmDSED gdcmMEXD gdcmMSFF vtkgdcm)
902  endif()
903  else()
904  message(ERROR "${EXTENSION_NAME}: GDCM 2.x library required. Please install GDCM.")
905  endif()
906  endif()
907 
908  # ADDTIONAL QT MODULES
909  set(QT_MODULES_LIBRARIES)
910  if(${EXTENSION_NAME_CMAKE}_NEEDS_QT_MODULES)
911  find_package(Qt4 "4.7" COMPONENTS QtCore QtGui QtXml QtXmlPatterns QtWebkit QtOpenGL QtScript QtSQL QtNetwork REQUIRED)
912  if(NOT QT4_FOUND)
913  message(SEND_ERROR "${EXTENSION_NAME} : Failed to find Qt 4.7 or greater. This is needed by CamiTK.")
914  endif()
915 
916  # CMake will add the Qt modules specific include directories
917  include(${QT_USE_FILE})
918 
919  # Qt additional modules are required for linking
920  set(QT_MODULES_LIBRARIES ${QT_LIBRARIES})
921  endif()
922 
923  # EXTERNAL LIBRARIES
924  set(EXTERNAL_LIBRARIES)
925  if(${EXTENSION_NAME_CMAKE}_EXTERNAL_LIBRARIES)
926  foreach(EXTERNAL_LIBRARY ${${EXTENSION_NAME_CMAKE}_EXTERNAL_LIBRARIES})
927  if (MSVC)
928  set(EXTERNAL_LIBRARIES ${EXTERNAL_LIBRARIES}
929  debug ${EXTERNAL_LIBRARY}${CAMITK_DEBUG_POSTFIX}
930  optimized ${EXTERNAL_LIBRARY}
931  )
932  else()
933  set(EXTERNAL_LIBRARIES ${EXTERNAL_LIBRARIES} ${EXTERNAL_LIBRARY})
934  endif()
935  endforeach()
936  endif()
937 
938  # BACKWARD COMPATIBILITY
939  # NEEDS_TOOLS option
940  # TODO CAMITK_DEPRECATED. This option is marked as deprecated. It is to be removed in CamiTK 4.0
941  if(${EXTENSION_NAME_CMAKE}_NEEDS_TOOL)
942  message(WARNING "Warning: ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt: camitk_extension macro option NEEDS_TOOL is deprecated, please use NEEDS_CEP_LIBRARIES instead..")
943  set(${EXTENSION_NAME_CMAKE}_NEEDS_CEP_LIBRARIES ${${EXTENSION_NAME_CMAKE}_NEEDS_CEP_LIBRARIES} ${${EXTENSION_NAME_CMAKE}_NEEDS_TOOL})
944  endif()
945 
946 
947 
948  #########################################################################
949  # #
950  # LINK DIRECTORIES #
951  # #
952  # * Link directories are used to indicate the compiler where #
953  # to look for folder containing libraries to link with. #
954  # #
955  #########################################################################
956 
957  # CAMITK BASIC LIB DIRECTORIES
958  link_directories(${CAMITK_LINK_DIRECTORIES})
959 
960 
961 
962  #########################################################################
963  # #
964  # TARGET COMPILATION DEFINITION #
965  # #
966  # * Additional sources files to consider at compilation (.cpp) #
967  # * CMake project target definition #
968  # #
969  #########################################################################
970  # EXTERNAL SOURCES
971  set(${EXTENSION_NAME_CMAKE}_SOURCES ${${EXTENSION_NAME_CMAKE}_SOURCES} ${${EXTENSION_NAME_CMAKE}_EXTERNAL_SOURCES})
972 
973  # CMAKE TARGET DEFINITION
974  add_library(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} SHARED ${${EXTENSION_NAME_CMAKE}_SOURCES})
975 
976 
977 
978  #########################################################################
979  # #
980  # CAMITK ACTION / COMPONENT / LIBRARIES DEPENDENCIES #
981  # #
982  # * Look for action / component / libraries dependencies #
983  # * Specific actions / components / libraries are specified as option #
984  # with the NEEDS_ACTION/COMPONENT_EXTENSION/CEP_LIBRARIES syntax #
985  # * Add dependencies to library-camitkcore and the testing #
986  # action/component if test are runned on it #
987  # #
988  #########################################################################
989 
990  # 1st CAMITKCORE LIBRARY DEPENDENCY
991  add_dependencies(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} ${CAMITK_CORE_TARGET_LIB_NAME})
992 
993  # 2nd COMPONENTS DEPENDENCIES
994  if(${EXTENSION_NAME_CMAKE}_NEEDS_COMPONENT_EXTENSION)
995  set(COMPONENTS_DEPENDENCY_LIST "") #use for generating the project.xml file
996  foreach(COMPONENT_NEEDED ${${EXTENSION_NAME_CMAKE}_NEEDS_COMPONENT_EXTENSION})
997  # include directories from build, camitk (local or global install).
998  include_directories(${CAMITK_BUILD_INCLUDE_DIR}/components/${COMPONENT_NEEDED})
999  include_directories(${CAMITK_INCLUDE_DIR}/components/${COMPONENT_NEEDED})
1000  # file dependency
1001  if (MSVC)
1002  set(COMPONENT_EXTENSION_LIBRARIES ${COMPONENT_EXTENSION_LIBRARIES}
1003  debug ${CAMITK_BUILD_PRIVATE_LIB_DIR}/components/${COMPONENT_NEEDED}${CAMITK_DEBUG_POSTFIX}
1004  optimized ${COMPONENT_NEEDED}
1005  )
1006  else()
1007  set(COMPONENT_EXTENSION_LIBRARIES ${COMPONENT_EXTENSION_LIBRARIES} ${COMPONENT_NEEDED})
1008  endif()
1009  # CMake / CDash dependencies
1010  if(PACKAGING_NSIS)
1011  add_dependencies(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} component_${COMPONENT_NEEDED})
1012  else()
1013  add_dependencies(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} component-${COMPONENT_NEEDED})
1014  set(COMPONENTS_DEPENDENCY_LIST ${COMPONENTS_DEPENDENCY_LIST} component-${COMPONENT_NEEDED})
1015  endif()
1016  endforeach()
1017  endif()
1018 
1019  # 3rd ACTIONS DEPENDENCIES
1020  if(${EXTENSION_NAME_CMAKE}_NEEDS_ACTION_EXTENSION)
1021  set(ACTIONS_DEPENDENCY_LIST "") #use for generating the project.xml file
1022  foreach(ACTION_NEEDED ${${EXTENSION_NAME_CMAKE}_NEEDS_ACTION_EXTENSION})
1023  # include directories from build, camitk (local or global install).
1024  include_directories(${CAMITK_BUILD_INCLUDE_DIR}/actions/${ACTION_NEEDED})
1025  include_directories(${CAMITK_INCLUDE_DIR}/actions/${ACTION_NEEDED})
1026  # file dependency
1027  if (MSVC)
1028  set(ACTION_EXTENSION_LIBRARIES ${ACTION_EXTENSION_LIBRARIES}
1029  debug ${CAMITK_BUILD_PRIVATE_LIB_DIR}/actions/${ACTION_NEEDED}${CAMITK_DEBUG_POSTFIX}
1030  optimized ${ACTION_NEEDED}
1031  )
1032  else()
1033  set(ACTION_EXTENSION_LIBRARIES ${ACTION_EXTENSION_LIBRARIES} ${ACTION_NEEDED})
1034  endif()
1035  # CMake / CDash dependencies
1036  if (PACKAGING_NSIS)
1037  add_dependencies(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} action_${ACTION_NEEDED})
1038  else()
1039  add_dependencies(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} action-${ACTION_NEEDED})
1040  set(ACTIONS_DEPENDENCY_LIST ${ACTIONS_DEPENDENCY_LIST} action-${ACTION_NEEDED})
1041  endif()
1042  endforeach()
1043  endif()
1044 
1045  # 4th CEP LIBRARIES DEPENDENCIES
1046  if(${EXTENSION_NAME_CMAKE}_NEEDS_CEP_LIBRARIES)
1047  set(CEP_LIBRARIES_DEPENDENCY_LIST "") #use for generating the project.xml file
1048  foreach(CEP_LIBRARY_NEEDED ${${EXTENSION_NAME_CMAKE}_NEEDS_CEP_LIBRARIES})
1049  # include directories from build, camitk (local or global install).
1050  include_directories(${CAMITK_BUILD_INCLUDE_DIR}/libraries/${CEP_LIBRARY_NEEDED})
1051  include_directories(${CAMITK_INCLUDE_DIR}/libraries/${CEP_LIBRARY_NEEDED})
1052  # file dependency
1053  if (MSVC)
1054  set(CEP_LIBRARIES ${CEP_LIBRARIES} debug ${CEP_LIBRARY_NEEDED}${CAMITK_DEBUG_POSTFIX}
1055  optimized ${CEP_LIBRARY_NEEDED}
1056  )
1057  else()
1058  if(PACKAGING_NSIS)
1059  set(CEP_LIBRARIES ${CEP_LIBRARIES} ${CEP_LIBRARY_NEEDED})
1060  else()
1061  set(CEP_LIBRARIES ${CEP_LIBRARIES} ${CEP_LIBRARY_NEEDED})
1062  endif()
1063  endif()
1064  # CMake / CDash dependencies
1065  if (PACKAGING_NSIS)
1066  add_dependencies(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} library_${CEP_LIBRARY_NEEDED})
1067  else()
1068  add_dependencies(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} library-${CEP_LIBRARY_NEEDED})
1069  set(CEP_LIBRARIES_DEPENDENCY_LIST ${CEP_LIBRARIES_DEPENDENCY_LIST} library-${CEP_LIBRARY_NEEDED})
1070  endif()
1071  endforeach()
1072  endif()
1073 
1074  # 5th DEPENDENCY ON TESTING APPLICATION
1075  # Those projects are used to run unitarian test on ACTION / COMPONENT extensions.
1076  set(APPLICATIONS_DEPENDENCY_LIST "")
1077  if(${EXTENSION_NAME_CMAKE}_TEST_APPLICATION AND NOT PACKAGING_NSIS)
1078  add_dependencies(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} application-test${TYPE_EXTENSION}s)
1079  set(APPLICATIONS_DEPENDENCY_LIST "application-test${TYPE_EXTENSION}s")
1080  # Add this dependencies for automatically constructing application-testactions components dependencies
1081  endif()
1082 
1083  if((CEP_NAME STREQUAL "SDK") OR (CEP_NAME STREQUAL "modeling") OR (CEP_NAME STREQUAL "imaging"))
1084  # 6th TEST-COMPONENT APPLICATION DEPENDENCY ON THIS COMPONENT
1085  if(${EXTENSION_NAME_CMAKE}_COMPONENT_EXTENSION AND ${EXTENSION_NAME_CMAKE}_TEST_APPLICATION AND NOT PACKAGING_NSIS)
1086  add_dependencies(application-testactions ${COMPONENT_TARGET_NAME})
1087  endif()
1088 
1089  # 7th TEST-ACTION APPLICATION DEPENDENCY ON ACTION-APPLICATION
1090  if(${TYPE_EXTENSION_CMAKE}_TARGET_NAME STREQUAL "action-application")
1091  add_dependencies(application-testcomponents action-application)
1092  endif()
1093  endif()
1094 
1095 
1096  #########################################################################
1097  # #
1098  # COMPILATION FLAG #
1099  # #
1100  # * Flags are options to give to the compiler #
1101  # * Add user input flags #
1102  # * Add platform specific flags #
1103  # #
1104  #########################################################################
1105 
1106  # USER INPUT DEFINES COMPILER FLAG
1107  if(${EXTENSION_NAME_CMAKE}_DEFINES)
1108  foreach (FLAG ${${EXTENSION_NAME_CMAKE}_DEFINES})
1109  add_definitions(-D${FLAG})
1110  endforeach()
1111  endif()
1112 
1113  # USER INPUT CUSTOM COMPILER FLAG
1114  if(${EXTENSION_NAME_CMAKE}_CXX_FLAGS)
1115  foreach (FLAG ${${EXTENSION_NAME_CMAKE}_CXX_FLAGS})
1116  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAG}")
1117  endforeach()
1118  endif()
1119 
1120  # PLATFORM SPECIFIC COMPILER FLAG
1121  # 64bits and other platform with relocation needs -fPIC
1122  include(TestCXXAcceptsFlag)
1123  check_cxx_accepts_flag(-fPIC FPIC_FLAG_ACCEPTED)
1124  # no need to add -fPIC on mingw, otherwise it generates a warning: -fPIC ignored for target (all code is position independent) [enabled by default]
1125  # msvc is also accepting the flag, but then produce warning D9002 : ignoring unknown option '-fPIC' cl
1126  if(FPIC_FLAG_ACCEPTED AND NOT WIN32)
1127  set_property(TARGET ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} APPEND PROPERTY COMPILE_FLAGS -fPIC)
1128  endif()
1129 
1130 
1131 
1132  #########################################################################
1133  # #
1134  # LINKING #
1135  # #
1136  # * Linking is the last stage of compilation #
1137  # * Indicate what libraries to use for linking the target #
1138  # #
1139  #########################################################################
1140  # LINKING LIBRARIES
1141  # Any component or action has to be linked with ${CAMITK_CORE_LIBRARIES} and with all its dependencies
1142  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})
1143 
1144 
1145 
1146  #########################################################################
1147  # #
1148  # OUTPUT #
1149  # #
1150  # * Define the output directory (location and name) #
1151  # * Define the output name of the library #
1152  # * Add ${CAMITK_DEBUG_POSTFIX} suffix to Debug MSVC built libraries #
1153  # * Additional Linux .so files information #
1154  # #
1155  #########################################################################
1156 
1157  # OUTPUT LIBRARY NAME
1158  set_target_properties(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}
1159  PROPERTIES OUTPUT_NAME ${${TYPE_EXTENSION_CMAKE}_OUTPUT_NAME}
1160  )
1161 
1162  # OUTPUT DIRECTORY LOCATION AND NAME
1163  # Output directory (all extensions are private)
1164  set_target_properties(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CAMITK_BUILD_PRIVATE_LIB_DIR}/${TYPE_EXTENSION}s
1165  LIBRARY_OUTPUT_DIRECTORY_DEBUG ${CAMITK_BUILD_PRIVATE_LIB_DIR}/${TYPE_EXTENSION}s
1166  LIBRARY_OUTPUT_DIRECTORY_RELEASE ${CAMITK_BUILD_PRIVATE_LIB_DIR}/${TYPE_EXTENSION}s
1167  )
1168  # Output directory (for dll plateform, this is still the same, extensions are private)
1169  set_target_properties(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CAMITK_BUILD_PRIVATE_LIB_DIR}/${TYPE_EXTENSION}s
1170  RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CAMITK_BUILD_PRIVATE_LIB_DIR}/${TYPE_EXTENSION}s
1171  RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CAMITK_BUILD_PRIVATE_LIB_DIR}/${TYPE_EXTENSION}s
1172  )
1173  # Output directory (for dll plateform, this is still the same, extensions are private)
1174  set_target_properties(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${CAMITK_BUILD_PRIVATE_LIB_DIR}/${TYPE_EXTENSION}s
1175  ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${CAMITK_BUILD_PRIVATE_LIB_DIR}/${TYPE_EXTENSION}s
1176  ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${CAMITK_BUILD_PRIVATE_LIB_DIR}/${TYPE_EXTENSION}s
1177  )
1178 
1179  # OUTPUT LIBRARY NAME MSVC in DEBUG mode
1180  if (MSVC)
1181  set_target_properties(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} PROPERTIES DEBUG_POSTFIX ${CAMITK_DEBUG_POSTFIX})
1182  endif()
1183 
1184  # ADDITIONAL LINUX .so FILE INFORMATION
1185  set(${TYPE_EXTENSION_CMAKE}_LIBRARY_PROPERTIES ${${TYPE_EXTENSION_CMAKE}_LIBRARY_PROPERTIES}
1186  VERSION "${CAMITK_VERSION_MAJOR}.${CAMITK_VERSION_MINOR}.${CAMITK_VERSION_PATCH}"
1187  SOVERSION "${CAMITK_VERSION_MAJOR}"
1188  )
1189  # set the library specific info (SONAME...)
1190  set_target_properties(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} PROPERTIES ${${TYPE_EXTENSION_CMAKE}_LIBRARY_PROPERTIES} LINK_INTERFACE_LIBRARIES "")
1191 
1192  # see http://www.cmake.org/pipermail/cmake/2012-April/049889.html
1193  # target properties (outputname and remove soname)
1194  # set_property(TARGET ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} PROPERTY NO_SONAME 1)
1195  # in CEP the version patch might not have been set
1196  if (NOT CAMITK_VERSION_PATCH)
1197  set(CAMITK_VERSION_PATCH 0)
1198  endif()
1199 
1200 
1201 
1202  #########################################################################
1203  # #
1204  # INSTALLATION #
1205  # #
1206  # * When installing the project, header files (.h) and test data are #
1207  # copied into a installation folder to determine. #
1208  # * Indicate in this section, where to install your project and which #
1209  # files to copy into that folder (during local/global installation) #
1210  # #
1211  #########################################################################
1212 
1213  # FOLDER INSTALLATION
1214  # Indicate where to install the action/component
1215  install(TARGETS ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}
1216  # TODO always use private lib, even for runtime
1217  RUNTIME DESTINATION lib/${CAMITK_SHORT_VERSION_STRING}/${TYPE_EXTENSION}s
1218  LIBRARY DESTINATION lib/${CAMITK_SHORT_VERSION_STRING}/${TYPE_EXTENSION}s
1219  ARCHIVE DESTINATION lib/${CAMITK_SHORT_VERSION_STRING}/${TYPE_EXTENSION}s
1220  COMPONENT ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}
1221  )
1222 
1223  # HEADERS INSTALLATION
1224  # Build target to install provided headers to install (with HEADERS_TO_INSTALL option)
1225  if(${EXTENSION_NAME_CMAKE}_HEADERS_TO_INSTALL)
1226  export_headers(${${EXTENSION_NAME_CMAKE}_HEADERS_TO_INSTALL} COMPONENT ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} GROUP ${TYPE_EXTENSION}s)
1227  endif()
1228 
1229  # Build target to install all header files(with INSTALL_ALL_HEADERS option)
1230  if(${EXTENSION_NAME_CMAKE}_INSTALL_ALL_HEADERS)
1231  export_headers(${${EXTENSION_NAME_CMAKE}_HEADERS} COMPONENT ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} GROUP ${TYPE_EXTENSION}s)
1232  endif()
1233 
1234  # TESTDATA INSTALLATION
1235  if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/testdata)
1236  # Check test data dir directory
1237  if (NOT EXISTS ${CAMITK_BUILD_TESTDATA_DIR})
1238  make_directory( ${CAMITK_BUILD_TESTDATA_DIR} )
1239  endif()
1240 
1241  # copy the files to test data directory
1242  execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory testdata ${CAMITK_BUILD_TESTDATA_DIR}
1243  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
1244  )
1245 
1246  # during installation, copy the files to install directory
1247  set (TESTDATA_DEST_DIR share/${CAMITK_SHORT_VERSION_STRING}/testdata)
1248  install(DIRECTORY testdata/
1249  #DESTINATION share/testdata
1250  #DESTINATION share/${CAMITK_SHORT_VERSION_STRING}/testdata
1251  DESTINATION ${TESTDATA_DEST_DIR}
1252  # COMPONENT ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}
1253  PATTERN ".svn" EXCLUDE
1254  PATTERN "*~" EXCLUDE
1255  )
1256  endif()
1257 
1258  # CTESTDATA INSTALLATION
1259  if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/testdata/ctestdata)
1260  # Check test data dir directory
1261  if (NOT EXISTS ${CAMITK_BUILD_CTESTDATA_DIR})
1262  add_custom_command(TARGET ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}
1263  POST_BUILD
1264  COMMAND ${CMAKE_COMMAND} -E make_directory ${CAMITK_BUILD_CTESTDATA_DIR}
1265  COMMENT "Creating build-time share directory for test data ${CAMITK_BUILD_CTESTDATA_DIR}"
1266  VERBATIM
1267  )
1268  endif()
1269 
1270  # At build time, copy the files to test data directory
1271  add_custom_command(TARGET ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}
1272  POST_BUILD
1273  COMMAND ${CMAKE_COMMAND} -E copy_directory testdata/ctestdata ${CAMITK_BUILD_CTESTDATA_DIR}
1274  COMMENT "Installing build-time test data for ${EXTENSION_NAME}"
1275  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
1276  VERBATIM
1277  )
1278 
1279  # during installation, copy the files to install directory
1280  set (CTESTDATA_DEST_DIR share/${CAMITK_SHORT_VERSION_STRING}/testdata/ctestdata)
1281  install(DIRECTORY testdata/ctestdata
1282  DESTINATION ${CTESTDATA_DEST_DIR}
1283  PATTERN ".svn" EXCLUDE
1284  PATTERN "*~" EXCLUDE
1285  )
1286  endif()
1287 
1288 
1289 
1290  #########################################################################
1291  # #
1292  # CDASH SUBPROJECT DESCRIPTION #
1293  # #
1294  # * Update the XML description of the subprojects dependencies #
1295  # for CDash. #
1296  # #
1297  #########################################################################
1298  # CDASH XML SUBPROJECTS DESCRIPTION UPDATE
1299  camitk_sub_project_add(${TYPE_EXTENSION_CMAKE} ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} DEPENDENCIES library-camitkcore ${COMPONENTS_DEPENDENCY_LIST} ${ACTIONS_DEPENDENCY_LIST} ${CEP_LIBRARIES_DEPENDENCY_LIST} ${APPLICATIONS_DEPENDENCY_LIST})
1300 
1301 
1302 
1303  #########################################################################
1304  # #
1305  # PACKAGING CATEGORIZATION #
1306  # #
1307  # * On Windows, when building a package (win32 installer), the #
1308  # install shield wizard proposes you to select which component #
1309  # to install. #
1310  # * Each component to install has a short description following its #
1311  # name to understand its role. #
1312  # * This section deals with the categorization and the description #
1313  # of the component in this installer. #
1314  # #
1315  #########################################################################
1316 
1317  # WINDOWS INSTALLER CATEGORIZATION
1318  if(${EXTENSION_NAME_CMAKE}_CEP_NAME)
1319  if (${EXTENSION_NAME_CMAKE}_CEP_NAME MATCHES "SDK")
1320  # The default SDK extensions are categorized as "required" and are not "unselectable" by the user at installation time
1321  cpack_add_component(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}
1322  DISPLAY_NAME ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}
1323  DESCRIPTION ${${EXTENSION_NAME_CMAKE}_DESCRIPTION}
1324  REQUIRED
1325  GROUP SDK
1326  )
1327 
1328  else()
1329  # Extension is selectable for installation in the wizard of the installer
1330  cpack_add_component(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}
1331  DISPLAY_NAME ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}
1332  DESCRIPTION ${${EXTENSION_NAME_CMAKE}_DESCRIPTION}
1333  GROUP ${${EXTENSION_NAME_CMAKE}_CEP_NAME}
1334  )
1335  endif()
1336  else()
1337  # Extension if not categorized for packaging presentation
1338  cpack_add_component(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}
1339  DISPLAY_NAME ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}
1340  DESCRIPTION ${${EXTENSION_NAME_CMAKE}_DESCRIPTION}
1341  )
1342  endif()
1343 
1344 
1345 
1346  #########################################################################
1347  # #
1348  # TRANSLATION #
1349  # #
1350  # * CAMITK_TRANSLATIONS contains the list of language to translate #
1351  # the QString to. #
1352  # #
1353  # * Create the translate.pro file which contains 4 sections: #
1354  # - HEADERS: list of .h/.hpp files to look for tr("") QString#
1355  # - SOURCES: list of .cpp files to look for tr("") QString #
1356  # - FORMS: list of .ui files to look for tr("") QString #
1357  # - TRANSLATIONS: list of .ts files which use CAMITK_TRANSLATIONS #
1358  # to define each .ts file #
1359  # #
1360  # * Execute lupdate program to update the .ts files with new QString #
1361  # found. #
1362  # #
1363  # * Execute lrelease program to create .qm files (binary equivalent of#
1364  # .ts files #
1365  # #
1366  # * Create translate.qrc which contains the list of .qm files. #
1367  # * Create the flags.qrc file which contains the list of .png flags #
1368  # images #
1369  # #
1370  #########################################################################
1371  if(${EXTENSION_NAME_CMAKE}_EXTRA_TRANSLATE_LANGUAGE)
1372  if(${EXTENSION_NAME} STREQUAL "application")
1373  camitk_translate(USE_FLAGS
1374  EXTRA_LANGUAGE ${${EXTENSION_NAME_CMAKE}_EXTRA_TRANSLATE_LANGUAGE}
1375  )
1376  else()
1377  camitk_translate(EXTRA_LANGUAGE ${${EXTENSION_NAME_CMAKE}_EXTRA_TRANSLATE_LANGUAGE})
1378  endif()
1379  else()
1380  if(${EXTENSION_NAME} STREQUAL "application")
1381  camitk_translate(USE_FLAGS)
1382  else()
1384  endif()
1385  endif()
1386 
1387 
1388 
1389  #########################################################################
1390  # #
1391  # CTEST - COMPONENT TESTS DESCRIPTION #
1392  # #
1393  #########################################################################
1394  if( ${EXTENSION_NAME_CMAKE}_COMPONENT_EXTENSION AND ${EXTENSION_NAME_CMAKE}_TEST_APPLICATION AND NOT PACKAGING_NSIS)
1395  camitk_init_test( ${${EXTENSION_NAME_CMAKE}_TEST_APPLICATION} )
1396  set( CAMITK_EXTENSIONS_TESTS_LEVEL ${CAMITK_EXTENSIONS_TESTS_LEVEL} "|- style=\"background-color: #CCCCCC\" \\n || '''${TYPE_EXTENSION} ${EXTENSION_NAME}''' \\n" CACHE INTERNAL "")
1397 
1398  # Retrieve the current directory name to properly name the test
1399  get_directory_name( ${CMAKE_CURRENT_SOURCE_DIR} COMP_DIR_NAME )
1400 
1401  # Test should pass because application test runs with no arguments - shows usage and exit success
1402  camitk_add_test( TEST_SUFFIX ${COMP_DIR_NAME} PROJECT_NAME ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} )
1403  # Retrieve the files in testdata directory - a test will be applied for each of these files
1404  get_subdirectoryfiles( ${CMAKE_CURRENT_SOURCE_DIR}/testdata/ctestdata TESTFILES )
1405 
1406  # Different the test level to proceed
1407  set( LEVEL1 1 )
1408  set( LEVEL2 2 )
1409  set( LEVEL3 3 )
1410  set( TESTLEVEL ${LEVEL3} )
1411 
1412  # According options defined in Cmakelist enable or disable some tests
1413  set(TEST_DESCRIPTION "Test opening the component, saving it as a file and compare the saved file with the original one.")
1414  if( ${EXTENSION_NAME_CMAKE}_DISABLE_TESTLEVEL1 )
1415  set( TESTLEVEL 0 )
1416  set(TEST_DESCRIPTION "Run camitk-config.")
1417  elseif( ${EXTENSION_NAME_CMAKE}_DISABLE_TESTLEVEL2 )
1418  set( TESTLEVEL ${LEVEL1} )
1419  set(TEST_DESCRIPTION "Test opening the component.")
1420  elseif( ${EXTENSION_NAME_CMAKE}_DISABLE_TESTLEVEL3 )
1421  set( TESTLEVEL ${LEVEL2} )
1422  set(TEST_DESCRIPTION "Test opening the component and saving it as a file.")
1423  endif()
1424 
1425  set( LEVELORIGIN ${TESTLEVEL} )#store the test level value in a const variable
1426 
1427  foreach( COMPONENT_TESTDATA_FILE ${TESTFILES} )
1428  # Give the file name (full path cut)
1429  get_directory_name( ${COMPONENT_TESTDATA_FILE} DATA_FILE )
1430 
1431  # Test procedure: Open an extension and a component(level1) - save it(level2) - Compare saved file to original file(level3)
1432  if( ${TESTLEVEL} EQUAL ${LEVEL3} )
1433  if(MSVC)
1434  camitk_add_test( EXECUTABLE_ARGS "-i ${CAMITK_BUILD_TESTDATA_DIR}/ctestdata/${DATA_FILE} -c ${CAMITK_BUILD_PRIVATE_LIB_DIR}/${TYPE_EXTENSION}s/${${TYPE_EXTENSION_CMAKE}_OUTPUT_NAME}${CAMITK_DEBUG_POSTFIX}.dll -l ${TESTLEVEL}" PASS_FILE_OUTPUT ${CAMITK_BUILD_TESTDATA_DIR}/ctestdata/${DATA_FILE} TEST_SUFFIX ${COMP_DIR_NAME}_LEVEL${TESTLEVEL}_ PROJECT_NAME ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} )
1435  elseif(APPLE)
1436  camitk_add_test( EXECUTABLE_ARGS "-i ${CAMITK_BUILD_TESTDATA_DIR}/ctestdata/${DATA_FILE} -c ${CAMITK_BUILD_PRIVATE_LIB_DIR}/${TYPE_EXTENSION}s/lib${${TYPE_EXTENSION_CMAKE}_OUTPUT_NAME}.dylib -l ${TESTLEVEL}" PASS_FILE_OUTPUT ${CAMITK_BUILD_TESTDATA_DIR}/ctestdata/${DATA_FILE} TEST_SUFFIX ${COMP_DIR_NAME}_LEVEL${TESTLEVEL}_ PROJECT_NAME ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} )
1437  elseif(UNIX)
1438  camitk_add_test( EXECUTABLE_ARGS "-i ${CAMITK_BUILD_TESTDATA_DIR}/ctestdata/${DATA_FILE} -c ${CAMITK_BUILD_PRIVATE_LIB_DIR}/${TYPE_EXTENSION}s/lib${${TYPE_EXTENSION_CMAKE}_OUTPUT_NAME}.so -l ${TESTLEVEL}" PASS_FILE_OUTPUT ${CAMITK_BUILD_TESTDATA_DIR}/ctestdata/${DATA_FILE} TEST_SUFFIX ${COMP_DIR_NAME}_LEVEL${TESTLEVEL}_ PROJECT_NAME ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} )
1439  endif()
1440  camitk_parse_test_add(NAME ${CAMITK_TEST_NAME} LEVEL ${TESTLEVEL} DESCRIPTION ${TEST_DESCRIPTION})
1441  MATH(EXPR TESTLEVEL "${TESTLEVEL}-1")#Decrease the test level to proceed less arduous tests
1442  endif()
1443  # Test procedure: Open an extension and a component(level1) - save it(level2)
1444  while( ${TESTLEVEL} GREATER 0)
1445  if(MSVC)
1446  camitk_add_test( EXECUTABLE_ARGS "-i ${CAMITK_BUILD_TESTDATA_DIR}/ctestdata/${DATA_FILE} -c ${CAMITK_BUILD_PRIVATE_LIB_DIR}/${TYPE_EXTENSION}s/${${TYPE_EXTENSION_CMAKE}_OUTPUT_NAME}${CAMITK_DEBUG_POSTFIX}.dll -l ${TESTLEVEL}" TEST_SUFFIX ${COMP_DIR_NAME}_LEVEL${TESTLEVEL}_ PROJECT_NAME ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} )
1447  elseif(APPLE)
1448  camitk_add_test( EXECUTABLE_ARGS "-i ${CAMITK_BUILD_TESTDATA_DIR}/ctestdata/${DATA_FILE} -c ${CAMITK_BUILD_PRIVATE_LIB_DIR}/${TYPE_EXTENSION}s/lib${${TYPE_EXTENSION_CMAKE}_OUTPUT_NAME}.dylib -l ${TESTLEVEL}" TEST_SUFFIX ${COMP_DIR_NAME}_LEVEL${TESTLEVEL}_ PROJECT_NAME ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} )
1449  elseif(UNIX)
1450  camitk_add_test( EXECUTABLE_ARGS "-i ${CAMITK_BUILD_TESTDATA_DIR}/ctestdata/${DATA_FILE} -c ${CAMITK_BUILD_PRIVATE_LIB_DIR}/${TYPE_EXTENSION}s/lib${${TYPE_EXTENSION_CMAKE}_OUTPUT_NAME}.so -l ${TESTLEVEL}" TEST_SUFFIX ${COMP_DIR_NAME}_LEVEL${TESTLEVEL}_ PROJECT_NAME ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} )
1451  endif()
1452  camitk_parse_test_add(NAME ${CAMITK_TEST_NAME} LEVEL ${TESTLEVEL} DESCRIPTION ${TEST_DESCRIPTION})
1453  MATH(EXPR TESTLEVEL "${TESTLEVEL}-1")#Decrease the test level to proceed less arduous tests
1454  endwhile()
1455  set( TESTLEVEL ${LEVELORIGIN} )
1456  endforeach()
1457 
1458  #########################################################################
1459  # #
1460  # CTEST - ACTION TESTS DESCRIPTION #
1461  # #
1462  #########################################################################
1463  elseif( ${EXTENSION_NAME_CMAKE}_ACTION_EXTENSION AND ${EXTENSION_NAME_CMAKE}_TEST_APPLICATION AND NOT PACKAGING_NSIS)
1464  camitk_init_test( ${${EXTENSION_NAME_CMAKE}_TEST_APPLICATION} )
1465  set( CAMITK_EXTENSIONS_TESTS_LEVEL ${CAMITK_EXTENSIONS_TESTS_LEVEL} "|- style=\"background-color: #CCCCCC\" \\n || '''${TYPE_EXTENSION} ${EXTENSION_NAME}''' \\n" CACHE INTERNAL "")
1466 
1467  # Retrieve the current directory name to properly name the test
1468  get_directory_name( ${CMAKE_CURRENT_SOURCE_DIR} COMP_DIR_NAME )
1469 
1470  # Test should pass because application test runs with no arguments - shows usage and exit success
1471  camitk_add_test( TEST_SUFFIX ${COMP_DIR_NAME} PROJECT_NAME ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} )
1472 
1473  #get the names of actions .dlls in lib directory
1474  get_subdirectoryfiles( ${CAMITK_BUILD_PRIVATE_LIB_DIR}/actions/ ACTIONSDLLS )
1475 
1476  foreach( ACTION_TESTDATA_FILE ${${EXTENSION_NAME_CMAKE}_TEST_FILES} )
1477  message( STATUS "Action extension: " ${${TYPE_EXTENSION_CMAKE}_OUTPUT_NAME} " Test file: " ${ACTION_TESTDATA_FILE} )
1478 
1479  if( NOT ( ${${TYPE_EXTENSION_CMAKE}_OUTPUT_NAME} MATCHES "application" ) )#We do not apply tests on actions like (close, save, save as)
1480  # Test procedure: Open a file - load an action extension - Apply an action on the component wrapping the file
1481  if(MSVC)
1482  camitk_add_test( EXECUTABLE_ARGS "-i ${CAMITK_BUILD_TESTDATA_DIR}/ctestdata/${ACTION_TESTDATA_FILE} -a lib${${TYPE_EXTENSION_CMAKE}_OUTPUT_NAME}${CAMITK_DEBUG_POSTFIX}.dll" TEST_SUFFIX ${COMP_DIR_NAME} PROJECT_NAME ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} )
1483  elseif(APPLE)
1484  camitk_add_test( EXECUTABLE_ARGS "-i ${CAMITK_BUILD_TESTDATA_DIR}/ctestdata/${ACTION_TESTDATA_FILE} -a lib${${TYPE_EXTENSION_CMAKE}_OUTPUT_NAME}.dylib" TEST_SUFFIX ${COMP_DIR_NAME} PROJECT_NAME ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} )
1485  elseif(UNIX)
1486  camitk_add_test( EXECUTABLE_ARGS "-i ${CAMITK_BUILD_TESTDATA_DIR}/ctestdata/${ACTION_TESTDATA_FILE} -a lib${${TYPE_EXTENSION_CMAKE}_OUTPUT_NAME}.so" TEST_SUFFIX ${COMP_DIR_NAME} PROJECT_NAME ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} )
1487  endif()
1488  camitk_parse_test_add(NAME ${CAMITK_TEST_NAME} LEVEL 3 DESCRIPTION "Open a file, load the action and apply it on the component.")
1489  endif()
1490  endforeach()
1491  endif()
1492  endif() # endif(${TYPE_EXTENSION_CMAKE}_${EXTENSION_NAME_CMAKE})
1493 
1494 end(){)
1495 
1496 # Old macro to configure a new action to the framework
1497 # Use camitk_extension macro instead
1498 # TODO CAMITK_DEPRECATED. This macro is marked as deprecated. It is to be removed in CamiTK 4.0
1499 action_extension(){)
1500  message(WARNING "Deprecated macro action_extension detected : please use camitk_extension(ACTION_EXTENSION ...) instead.")
1501  camitk_extension(ACTION_EXTENSION ${ARGN})
1502 end(){)
1503 
1504 # Old macro to configure a new component to the framework
1505 # Use camitk_extension macro instead
1506 # TODO CAMITK_DEPRECATED. This macro is marked as deprecated. It is to be removed in CamiTK 4.0
1507 component_extension(){)
1508  message(WARNING "Deprecated macro component_extension detected : please use camitk_extension(COMPONENT_EXTENSION ...) instead.")
1509  camitk_extension(COMPONENT_EXTENSION ${ARGN})
1510 end(){)
1511 
1512 # TODO write a viewer_extension macro in CamiTK
A pseudo-namespace used to group CMake macros and functions.
camitk_parse_test_add()
macro camitk_parse_test_add adds an extension (action or component) automatic test level information ...
Definition: CamiTKParseTestAdd.h:18
OUTFILE execute_process(COMMAND ${CMAKE_COMMAND}-E remove-f ${CAMITK_TEST_COMMAND_OUTPUT_FILE}) set(CAMITK_TEST_COMMAND_ARG"$
Definition: CamiTKTestCompareFile.h:15
string name
Definition: select.cpp:111
camitk_translate()
macro camitk_translate allows to perform the translation of any project (action, component, application and libraries) in several languages.
Definition: CamiTKTranslate.h:22
camitk_extension()
Macro camitk_extension simplifies writing a camitk extension (component, action)
Definition: CamiTKExtension.h:77
get_directory_name()
macro get_directory_name set the variable VariableName to the name of the last directory of FullPathD...
Definition: GetDirectoryName.h:14
Definition: Action.cpp:40
string output
Definition: pml2csv.cpp:111
export_headers()
export_headers is a macro that install header files at build and install time
Definition: ExportHeaders.h:40
camitk_init_test()
camitk_init_test is a macro to initialize a group of test (for the same command) It is used to initia...
Definition: CamiTKInitTest.h:37
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
gather_headers_and_sources()
macro gather_headers_and_sources find all headers, sources, including the qt ui, moc and resources an...
Definition: GatherHeadersAndSources.h:15
camitk_sub_project_add()
macro camitk_sub_project_add adds a subproject definition from targets and its dependencies (if any) ...
Definition: CamiTKSubProjectAdd.h:17
map< unsigned int, unsigned int >::iterator it
Definition: pml2wrl.cpp:50
StructureProperties::GeometricType type
Definition: ansys2pml.cpp:40
static void include(QRect &r, const QRect &rect)
Definition: canvas_typed/qtcanvas.cpp:98
camitk_add_test()
camitk_add_test is a macro to add a new test to the CTest infrastructure It encapsulates CMake add_te...
Definition: CamiTKAddTest.h:47
get_subdirectoryfiles()
macro get_subdirectoryfiles get the names of all the files (and not directories) contained in a defin...
Definition: GetSubdirectoryFiles.h:20
const char * usage
Definition: programarg.h:80