Computer Assited Medical Intervention Tool Kit  version 3.3
 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.
70 
71  #########################################################################
72  # #
73  # ARGUMENTS PARSING #
74  # #
75  # * Use a macro to create the CMAKE variables according to the #
76  # provided options as input. #
77  # #
78  #########################################################################
79 
80  get_directory_name(${CMAKE_CURRENT_SOURCE_DIR} EXTENSION_NAME)
81 
82  parse_arguments(${EXTENSION_NAME_CMAKE} #prefix
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
85  ${ARGN}
86  )
87 
88 
89 
90  #########################################################################
91  # #
92  # CREATE CMAKE VARIABLES #
93  # #
94  # * Create required and useful CMake variables for the macro #
95  # #
96  #########################################################################
97 
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)
105  endif()
106 
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)
115  else()
116  set(${TYPE_EXTENSION_CMAKE}_${EXTENSION_NAME_CMAKE}_ENABLED TRUE)
117  endif()
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?")
120  endif()
121 
122  # if this extension is enabled, do everything needed
123  # otherwise... do nothing
124  if (${TYPE_EXTENSION_CMAKE}_${EXTENSION_NAME_CMAKE})
125 
126  # TARGET NAME
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})
132  else()
133  set(${TYPE_EXTENSION_CMAKE}_OUTPUT_NAME ${EXTENSION_NAME})
134  endif()
135  # replace "-" by "_" if the extension is being packaged with NSIS, the program to create a Windows installer.
136  if (PACKAGING_NSIS)
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})
139  else()
140  set(${TYPE_EXTENSION_CMAKE}_TARGET_NAME ${TYPE_EXTENSION}-${${TYPE_EXTENSION_CMAKE}_OUTPUT_NAME})
141  endif()
142 
143  message(STATUS "Building extension ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}")
144 
145 
146 
147  #########################################################################
148  # #
149  # INCLUDE DIRECTORIES #
150  # #
151  # * Include basic directories where to look header files #
152  # * Include also additional user provided directories #
153  # * These directories are used for compilation step #
154  # #
155  #########################################################################
156  # BASIC DIRECTORIES
157 
158  include_directories(${CAMITK_INCLUDE_DIRECTORIES})
159  include_directories(${CMAKE_CURRENT_BINARY_DIR})
160  include_directories(${CMAKE_CURRENT_SOURCE_DIR})
161 
162  # USER INPUT DIRECTORIES
163  include_directories(${${EXTENSION_NAME_CMAKE}_INCLUDE_DIRECTORIES})
164 
165 
166 
167  #########################################################################
168  # #
169  # GATHER RESSOURCES #
170  # #
171  # * Get all the headers (.h) and source files (.cpp) of the project #
172  # * Create the needed Qt files (using moc and uic) #
173  # #
174  #########################################################################
175 
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})
180 
181 
182 
183  #########################################################################
184  # #
185  # ADDITIONAL KNOWN LIBRARY DEPENDENCIES #
186  # #
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 #
191  # #
192  #########################################################################
193 
194  # Looking for ITK
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)
200  if(ITK_FOUND)
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})
203  set(ITK_LIBRARIES
204  debug ITKAlgorithms${CAMITK_DEBUG_POSTFIX}
205  optimized ITKAlgorithms
206  debug ITKBasicFilters${CAMITK_DEBUG_POSTFIX}
207  optimized ITKBasicFilters
208  debug ITKCommon${CAMITK_DEBUG_POSTFIX}
209  optimized ITKCommon
210  debug ITKIO${CAMITK_DEBUG_POSTFIX}
211  optimized ITKIO
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
234  debug snmpapi.lib
235  debug rpcrt4.lib
236  debug ws2_32.lib
237  debug comctl32.lib
238  debug wsock32.lib
239  debug opengl32.lib
240  )
241  else()
242  message(FATAL_ERROR "ITK ( >= 3.20.1) is required by ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}")
243  endif()
244  elseif(MSVC11 OR MSVC12) # Visual Studion 2012/2013 => use ITK 4.3.2 at least
245  find_package(ITK 4.3.2 REQUIRED)
246  if(ITK_FOUND)
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}/../..)
250  set(ITK_LIBRARIES
251  # Debug libraries
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
272  debug snmpapi.lib
273  debug rpcrt4.lib
274  debug ws2_32.lib
275  debug comctl32.lib
276  debug wsock32.lib
277  debug opengl32.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
364  optimized rpcrt4.lib
365  optimized ws2_32.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
433  )
434  else()
435  message(FATAL_ERROR "ITK ( >= 4.3.2) is required by ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}")
436  endif()
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.")
439  endif()
440  elseif(MINGW) # MinGW compiler
441  find_package(ITK 4.3.2 REQUIRED)
442  if(ITK_FOUND)
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}/../..)
446  set(ITK_LIBRARIES
447  ITKCommon-4.3
448  ITKNrrdIO-4.3
449  itkgdcmCommon-4.3
450  itkjpeg-4.3
451  itkopenjpeg-4.3
452  itkpng-4.3
453  itktiff-4.3
454  ITKSpatialObjects-4.3
455  itkvnl_algo-4.3
456  itkv3p_netlib-4.3
457  itkvnl-4.3
458  itkvcl-4.3
459  itkv3p_lsqr-4.3
460  ITKMetaIO-4.3
461  itksys-4.3
462  ITKDICOMParser-4.3
463  ITKEXPAT-4.3
464  ITKniftiio-4.3
465  ITKznz-4.3
466  itkzlib-4.3
467  snmpapi
468  rpcrt4
469  ws2_32
470  comctl32
471  wsock32
472  opengl32
473  ITKIOGIPL-4.3
474  ITKIONIFTI-4.3
475  ITKIONRRD-4.3
476  ITKIOPNG-4.3
477  itkgdcmDICT-4.3
478  itkgdcmDSED-4.3
479  itkgdcmIOD-4.3
480  itkgdcmjpeg8-4.3
481  itkgdcmjpeg12-4.3
482  itkgdcmjpeg16-4.3
483  itkgdcmMSFF-4.3
484  ITKgiftiio-4.3
485  itkhdf5_cpp-4.3
486  itkhdf5-4.3
487  ITKMetaIO-4.3
488  ITKIOBioRad-4.3
489  ITKIOStimulate-4.3
490  ITKIOTIFF-4.3
491  ITKIOVTK-4.3
492  ITKIOPNG-4.3
493  ITKBiasCorrection-4.3
494  ITKBioCell-4.3
495  ITKFEM-4.3
496  ITKIOBMP-4.3
497  ITKIOCSV-4.3
498  ITKIOGDCM-4.3
499  ITKIOGE-4.3
500  ITKIOGIPL-4.3
501  ITKIOHDF5-4.3
502  ITKIOImageBase-4.3
503  ITKIOIPL-4.3
504  ITKIOJPEG-4.3
505  ITKIOLSM-4.3
506  ITKIOMesh-4.3
507  ITKIOMeta-4.3
508  ITKIOSiemens-4.3
509  ITKIOSpatialObjects-4.3
510  ITKIOTransformBase-4.3
511  ITKIOTransformHDF5-4.3
512  ITKIOTransformInsightLegacy-4.3
513  ITKIOTransformMatlab-4.3
514  ITKIOXML-4.3
515  ITKKLMRegionGrowing-4.3
516  ITKLabelMap-4.3
517  ITKMesh-4.3
518  ITKMetaIO-4.3
519  itkNetlibSlatec-4.3
520  itkopenjpeg-4.3
521  ITKOptimizers-4.3
522  ITKOptimizersv4-4.3
523  ITKPath-4.3
524  itkpng-4.3
525  ITKPolynomials-4.3
526  ITKQuadEdgeMesh-4.3
527  ITKReview-4.3
528  ITKStatistics-4.3
529  itkv3p_lsqr-4.3
530  itkv3p_netlib-4.3
531  itkvcl-4.3
532  ITKVideoCore-4.3
533  ITKVideoIO-4.3
534  ITKVTK-4.3
535  ITKVNLInstantiation-4.3
536  ITKWatersheds-4.3
537  )
538  else()
539  message(FATAL_ERROR "ITK ( >= 4.3.2) is required by ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}")
540  endif()
541  elseif(UNIX) # Linux compilers
542  find_package(ITK REQUIRED)
543  if(ITK_FOUND)
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)")
551  endif()
552  else() # if(Apple) MacOs computers
553  find_package(ITK REQUIRED)
554  if(ITK_FOUND)
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)")
563  set(ITK_LIBRARIES
564  ITKCommon-4.3
565  ITKNrrdIO-4.3
566  itkgdcmCommon-4.3
567  itkjpeg-4.3
568  itkopenjpeg-4.3
569  itkpng-4.3
570  itktiff-4.3
571  ITKSpatialObjects-4.3
572  itkvnl_algo-4.3
573  itkv3p_netlib-4.3
574  itkvnl-4.3
575  itkvcl-4.3
576  itkv3p_lsqr-4.3
577  ITKMetaIO-4.3
578  itksys-4.3
579  ITKDICOMParser-4.3
580  ITKEXPAT-4.3
581  ITKniftiio-4.3
582  ITKznz-4.3
583  itkzlib-4.3
584  snmpapi
585  rpcrt4
586  ws2_32
587  comctl32
588  wsock32
589  opengl32
590  ITKIOGIPL-4.3
591  ITKIONIFTI-4.3
592  ITKIONRRD-4.3
593  ITKIOPNG-4.3
594  itkgdcmDICT-4.3
595  itkgdcmDSED-4.3
596  itkgdcmIOD-4.3
597  itkgdcmjpeg8-4.3
598  itkgdcmjpeg12-4.3
599  itkgdcmjpeg16-4.3
600  itkgdcmMSFF-4.3
601  ITKgiftiio-4.3
602  itkhdf5_cpp-4.3
603  itkhdf5-4.3
604  ITKMetaIO-4.3
605  ITKIOBioRad-4.3
606  ITKIOStimulate-4.3
607  ITKIOTIFF-4.3
608  ITKIOVTK-4.3
609  ITKIOPNG-4.3
610  ITKBiasCorrection-4.3
611  ITKBioCell-4.3
612  ITKFEM-4.3
613  ITKIOBMP-4.3
614  ITKIOCSV-4.3
615  ITKIOGDCM-4.3
616  ITKIOGE-4.3
617  ITKIOGIPL-4.3
618  ITKIOHDF5-4.3
619  ITKIOImageBase-4.3
620  ITKIOIPL-4.3
621  ITKIOJPEG-4.3
622  ITKIOLSM-4.3
623  ITKIOMesh-4.3
624  ITKIOMeta-4.3
625  ITKIOSiemens-4.3
626  ITKIOSpatialObjects-4.3
627  ITKIOTransformBase-4.3
628  ITKIOTransformHDF5-4.3
629  ITKIOTransformInsightLegacy-4.3
630  ITKIOTransformMatlab-4.3
631  ITKIOXML-4.3
632  ITKKLMRegionGrowing-4.3
633  ITKLabelMap-4.3
634  ITKMesh-4.3
635  ITKMetaIO-4.3
636  itkNetlibSlatec-4.3
637  itkopenjpeg-4.3
638  ITKOptimizers-4.3
639  ITKOptimizersv4-4.3
640  ITKPath-4.3
641  itkpng-4.3
642  ITKPolynomials-4.3
643  ITKQuadEdgeMesh-4.3
644  ITKReview-4.3
645  ITKStatistics-4.3
646  itkv3p_lsqr-4.3
647  itkv3p_netlib-4.3
648  itkvcl-4.3
649  ITKVideoCore-4.3
650  ITKVideoIO-4.3
651  ITKVTK-4.3
652  ITKVNLInstantiation-4.3
653  ITKWatersheds-4.3
654  )
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)")
657  set(ITK_LIBRARIES
658  ITKBiasCorrection
659  ITKBioCell
660  ITKCommon
661  ITKDICOMParser
662  ITKEXPAT
663  ITKFEM
664  ITKGPUAnisotropicSmoothing
665  ITKGPUCommon
666  ITKGPUFiniteDifference
667  ITKGPUImageFilterBase
668  ITKGPUPDEDeformable
669  ITKGPUSmoothing
670  ITKGPUThresholding
671  ITKIOBMP
672  ITKIOBioRad
673  ITKIOCSV
674  ITKIOGDCM
675  ITKIOGE
676  ITKIOGIPL
677  ITKIOHDF5
678  ITKIOIPL
679  ITKIOImageBase
680  ITKIOJPEG
681  ITKIOLSM
682  ITKIOMesh
683  ITKIOMeta
684  ITKIONIFTI
685  ITKIONRRD
686  ITKIOPNG
687  ITKIOSiemens
688  ITKIOSpatialObjects
689  ITKIOStimulate
690  ITKIOTIFF
691  ITKIOTransformBase
692  ITKIOTransformHDF5
693  ITKIOTransformInsightLegacy
694  ITKIOTransformMatlab
695  ITKIOVTK
696  ITKIOXML
697  ITKKLMRegionGrowing
698  ITKLabelMap
699  ITKMesh
700  ITKMetaIO
701  ITKNrrdIO
702  ITKOptimizers
703  ITKOptimizersv4
704  ITKPath
705  ITKPolynomials
706  ITKQuadEdgeMesh
707  ITKReview
708  ITKSpatialObjects
709  ITKStatistics
710  ITKVNLInstantiation
711  ITKVTK
712  ITKVideoCore
713  ITKVideoIO
714  ITKWatersheds
715  ITKgiftiio
716  ITKniftiio
717  ITKznz
718  itkNetlibSlatec
719  itkdouble-conversion
720  itkhdf5
721  itkhdf5_cpp
722  itkjpeg
723  itkopenjpeg
724  itkpng
725  itksys
726  itktiff
727  itkv3p_lsqr
728  itkv3p_netlib
729  itkvcl
730  itkvnl
731  itkvnl_algo
732  itkzlib
733  )
734  endif()
735  else() #ITK Found
736  message(FATAL_ERROR "ITK ( >= 3.20.1) is required by ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}")
737  endif()
738  endif() # platform / Compiler switch
739  endif() #NEEDS_ITK
740 
741  # LIBXML2
742  set(LIBXML2_LIBRARY "")
743  if(${EXTENSION_NAME_CMAKE}_NEEDS_LIBXML2)
744  # LibXml2 is required
745  find_package(Xml2)
746  if (LIBXML2_FOUND)
747  add_definitions(${LIBXML2_DEFINITIONS})
748  include_directories(${LIBXML2_INCLUDE_DIR})
749  set(LIBXML2_LIBRARY ${LIBXML2_LIBRARIES})
750  else()
751  # most probably win32 or crosscompiling
752  message(STATUS "${EXTENSION_NAME}: libxml2 required")
753  endif()
754  endif()
755 
756  # OPENCV
757  set(OpenCV_LIBRARIES "")
758  if(${EXTENSION_NAME_CMAKE}_NEEDS_OPENCV)
759  # OpenCV is required
760  find_package( OpenCV REQUIRED )
761  else ( )
762  set(OpenCV_LIBRARIES "")
763  endif()
764 
765  # IGSTK
766  set(IGSTK_LIBRARIES "")
767  if(${EXTENSION_NAME_CMAKE}_NEEDS_IGSTK)
768  find_package(IGSTK REQUIRED)
769  include(${IGSTK_USE_FILE})
770  else()
771  set(IGSTK_LIBRARIES "")
772  endif()
773 
774  # XERCES-C
775  set(XERCESC_LIBRARIES)
776  if(${EXTENSION_NAME_CMAKE}_NEEDS_XERCESC)
777  # XercesC is required
778  find_package(XercesC REQUIRED)
779  if (XERCESC_FOUND)
780  include_directories(${XERCESC_INCLUDE_DIR})
781  set(XERCESC_LIBRARIES ${XERCESC_LIBRARY})
782  else()
783  # most probably win32 or crosscompiling
784  message(FATAL_ERROR "${EXTENSION_NAME}: xerces-c required. Please provide Xerces-C path.")
785  endif()
786  endif()
787 
788  # XSD
789  if(${EXTENSION_NAME_CMAKE}_NEEDS_XSD)
790  # XercesC is required
791  find_package(XercesC REQUIRED)
792  if (XERCESC_FOUND)
793  include_directories(${XERCESC_INCLUDE_DIR})
794  set(XERCESC_LIBRARIES ${XERCESC_LIBRARY})
795  find_package(XSD REQUIRED)
796  include_directories(${XSD_INCLUDE_DIR})
797  else()
798  # most probably win32 or crosscompiling
799  message(FATAL_ERROR "${EXTENSION_NAME}: xerces-c required because of XSD cxx, please set XERCESC_INCLUDE_DIR")
800  endif()
801  endif()
802 
803  # GDCM 2.2.x
804  set(GDCM_LIBRARIES)
805  if(${EXTENSION_NAME_CMAKE}_NEEDS_GDCM)
806  if(NOT GDCM_FOUND)
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)
810  endif()
811  if(GDCM_FOUND)
812  include(${GDCM_USE_FILE})
813  if (MSVC)
814  set(GDCM_LIBRARIES
815  debug ${GDCM_DIR}/../vtkgdcm${CAMITK_DEBUG_POSTFIX}
816  debug ${GDCM_DIR}/../gdcmDSED${CAMITK_DEBUG_POSTFIX}
817  optimized vtkgdcm gdcmDSED
818  )
819  else()
820  set(GDCM_LIBRARIES vtkgdcm gdcmDSED)
821  endif()
822  else()
823  message(ERROR "${EXTENSION_NAME}: GDCM 2.x library required. Please install GDCM.")
824  endif()
825  endif()
826 
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)
831  if(NOT QT4_FOUND)
832  message(SEND_ERROR "${EXTENSION_NAME} : Failed to find Qt 4.7 or greater. This is needed by CamiTK.")
833  endif()
834 
835  # CMake will add the Qt modules specific include directories
836  include(${QT_USE_FILE})
837 
838  # Qt additional modules are required for linking
839  set(QT_MODULES_LIBRARIES ${QT_LIBRARIES})
840  endif()
841 
842  # CEP LIBRARIES
843  set(CEP_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 )
848  if (MSVC)
849  set(CEP_LIBRARIES ${CEP_LIBRARIES} debug ${CEP_LIBRARY_NEEDED}${CAMITK_DEBUG_POSTFIX}
850  optimized ${CEP_LIBRARY_NEEDED}
851  )
852  else()
853  if(PACKAGING_NSIS)
854  set(CEP_LIBRARIES ${CEP_LIBRARIES} ${CEP_LIBRARY_NEEDED})
855  else()
856  set(CEP_LIBRARIES ${CEP_LIBRARIES} ${CEP_LIBRARY_NEEDED})
857  endif()
858  endif()
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})
863 
864  endforeach()
865  endif()
866 
867  # EXTERNAL LIBRARIES
868  set(EXTERNAL_LIBRARIES)
869  if(${EXTENSION_NAME_CMAKE}_EXTERNAL_LIBRARIES)
870  foreach(EXTERNAL_LIBRARY ${${EXTENSION_NAME_CMAKE}_EXTERNAL_LIBRARIES})
871  if (MSVC)
872  set(EXTERNAL_LIBRARIES ${EXTERNAL_LIBRARIES}
873  debug ${EXTERNAL_LIBRARY}${CAMITK_DEBUG_POSTFIX}
874  optimized ${EXTERNAL_LIBRARY}
875  )
876  else()
877  set(EXTERNAL_LIBRARIES ${EXTERNAL_LIBRARIES} ${EXTERNAL_LIBRARY})
878  endif()
879  endforeach()
880  endif()
881 
882  # BACKWARD COMPATIBILITY
883  # NEEDS_TOOLS option
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})
888  endif()
889 
890 
891 
892  #########################################################################
893  # #
894  # CAMITK ACTION / COMPONENT DEPENDENCIES #
895  # #
896  # * Look for action / component dependencies #
897  # * Specific actions / components are specified as option with the #
898  # NEEDS_ACTION/COMPONENT_EXTENSION syntax #
899  # #
900  #########################################################################
901 
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 )
908  if (MSVC)
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}
912  )
913  else()
914  set(COMPONENT_EXTENSION_LIBRARIES ${COMPONENT_EXTENSION_LIBRARIES} ${COMPONENT_NEEDED})
915  endif()
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})
919  endforeach()
920  endif()
921 
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 )
928  if (MSVC)
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}
932  )
933  else()
934  set(ACTION_EXTENSION_LIBRARIES ${ACTION_EXTENSION_LIBRARIES} ${ACTION_NEEDED})
935  endif()
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})
939  endforeach()
940  endif()
941 
942 
943 
944  #########################################################################
945  # #
946  # LINK DIRECTORIES #
947  # #
948  # * Link directories are used to indicate the compiler where #
949  # to look for folder containing libraries to link with. #
950  # #
951  #########################################################################
952 
953  # CAMITK BASIC LIB DIRECTORIES
954  link_directories(${CAMITK_LINK_DIRECTORIES})
955 
956 
957 
958  #########################################################################
959  # #
960  # TARGET COMPILATION DEFINITION #
961  # #
962  # * Additional sources files to consider at compilation (.cpp) #
963  # * CMake project target definition #
964  # #
965  #########################################################################
966  # EXTERNAL SOURCES
967  set(${EXTENSION_NAME_CMAKE}_SOURCES ${${EXTENSION_NAME_CMAKE}_SOURCES} ${${EXTENSION_NAME_CMAKE}_EXTERNAL_SOURCES})
968 
969  # CMAKE TARGET DEFINITION
970  add_library(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} SHARED ${${EXTENSION_NAME_CMAKE}_SOURCES})
971 
972 
973 
974  #########################################################################
975  # #
976  # COMPILATION FLAG #
977  # #
978  # * Flags are options to give to the compiler #
979  # * Add user input flags #
980  # * Add platform specific flags #
981  # #
982  #########################################################################
983 
984  # USER INPUT DEFINES COMPILER FLAG
985  if(${EXTENSION_NAME_CMAKE}_DEFINES)
986  foreach (FLAG ${${EXTENSION_NAME_CMAKE}_DEFINES})
987  add_definitions(-D${FLAG})
988  endforeach()
989  endif()
990 
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}")
995  endforeach()
996  endif()
997 
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)
1006  endif()
1007 
1008 
1009 
1010  #########################################################################
1011  # #
1012  # LINKING #
1013  # #
1014  # * Linking is the last stage of compilation #
1015  # * Indicate what libraries to use for linking the target #
1016  # #
1017  #########################################################################
1018  # LINKING LIBRARIES
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})
1021 
1022 
1023 
1024  #########################################################################
1025  # #
1026  # OUTPUT #
1027  # #
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 #
1032  # #
1033  #########################################################################
1034 
1035  # OUTPUT LIBRARY NAME
1036  set_target_properties(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}
1037  PROPERTIES OUTPUT_NAME ${${TYPE_EXTENSION_CMAKE}_OUTPUT_NAME}
1038  )
1039 
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
1045  )
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
1050  )
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
1055  )
1056 
1057  # OUTPUT LIBRARY NAME MSVC in DEBUG mode
1058  if (MSVC)
1059  set_target_properties(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} PROPERTIES DEBUG_POSTFIX ${CAMITK_DEBUG_POSTFIX})
1060  endif()
1061 
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}"
1066  )
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 "")
1069 
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)
1076  endif()
1077 
1078 
1079 
1080  #########################################################################
1081  # #
1082  # INSTALLATION #
1083  # #
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) #
1088  # #
1089  #########################################################################
1090 
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}
1099  )
1100 
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)
1105  endif()
1106 
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)
1110  endif()
1111 
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}
1117  POST_BUILD
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}"
1120  VERBATIM
1121  )
1122  endif()
1123 
1124  # At build time, copy the files to test data directory
1125  add_custom_command(TARGET ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}
1126  POST_BUILD
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}
1130  VERBATIM
1131  )
1132 
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
1142  )
1143  endif()
1144 
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}
1150  POST_BUILD
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}"
1153  VERBATIM
1154  )
1155  endif()
1156 
1157  # At build time, copy the files to test data directory
1158  add_custom_command(TARGET ${${TYPE_EXTENSION_CMAKE}_TARGET_NAME}
1159  POST_BUILD
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}
1163  VERBATIM
1164  )
1165 
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
1172  )
1173  endif()
1174 
1175  #########################################################################
1176  # #
1177  # PROJECT DEPENDENCIES #
1178  # #
1179  # * Add in this section library dependencies to other camitk projects #
1180  # to keep a correct build order. #
1181  # #
1182  #########################################################################
1183 
1184  # CAMITKCORE LIBRARY DEPENDENCY
1185  add_dependencies(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} ${CAMITK_CORE_TARGET_LIB_NAME})
1186 
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)
1190 
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)
1197  # TODO add IMPORTED
1198  add_dependencies(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} component-${COMPONENT_NEEDED})
1199  endif()
1200  endforeach()
1201  endif()
1202 
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)
1209  # TODO add IMPORTED
1210  add_dependencies(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} action-${ACTION_NEEDED})
1211  endif()
1212  endforeach()
1213  endif()
1214 
1215  # CEP LIBRARIES DEPENDENCIES
1216  if(${EXTENSION_NAME_CMAKE}_NEEDS_CEP_LIBRARIES)
1217  foreach(CEP_LIBRARY_NEEDED ${${EXTENSION_NAME_CMAKE}_NEEDS_CEP_LIBRARIES})
1218  # TODO add IMPORTED
1219  if (PACKAGING_NSIS)
1220  add_dependencies(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} library_${CEP_LIBRARY_NEEDED})
1221  else()
1222  add_dependencies(${${TYPE_EXTENSION_CMAKE}_TARGET_NAME} library-${CEP_LIBRARY_NEEDED})
1223  endif()
1224  endforeach()
1225  endif()
1226 
1227 
1228 
1229  #########################################################################
1230  # #
1231  # CDASH SUBPROJECT DESCRIPTION #
1232  # #
1233  # * Update the XML description of the subprojects dependencies #
1234  # for CDash. #
1235  # #
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})
1239 
1240 
1241 
1242  #########################################################################
1243  # #
1244  # PACKAGING CATEGORIZATION #
1245  # #
1246  # * On Windows, when building a package (win32 installer), the #
1247  # install shield wizard proposes you to select which component #
1248  # to install. #
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. #
1253  # #
1254  #########################################################################
1255 
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}
1263  REQUIRED
1264  GROUP SDK
1265  )
1266 
1267  else()
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}
1273  )
1274  endif()
1275  else()
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}
1280  )
1281  endif()
1282 
1283  #########################################################################
1284  # #
1285  # CTEST - COMPONENT TESTS DESCRIPTION #
1286  # #
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} )
1291 
1292  # Retrieve the current directory name to properly name the test
1293  get_directory_name( ${CMAKE_CURRENT_SOURCE_DIR} COMP_DIR_NAME )
1294 
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 )
1299 
1300  foreach( COMPONENT_TESTDATA_FILE ${TESTFILES} )
1301  # Give the file name (full path cut)
1302  get_directory_name( ${COMPONENT_TESTDATA_FILE} DATA_FILE )
1303 
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} )
1306  endforeach()
1307 
1308  #########################################################################
1309  # #
1310  # CTEST - ACTION TESTS DESCRIPTION #
1311  # #
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} )
1316 
1317  # Retrieve the current directory name to properly name the test
1318  get_directory_name( ${CMAKE_CURRENT_SOURCE_DIR} COMP_DIR_NAME )
1319 
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} )
1322 
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 )
1325 
1326  #get the names of actions .dlls in lib directory
1327  get_subdirectoryfiles( ${CAMITK_BUILD_PRIVATE_LIB_DIR}/actions/ ACTIONSDLLS )
1328 
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
1334  if(MSVC)
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} )
1336  else()
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} )
1338  endif()
1339  endif()
1340  endforeach()
1341  endif()
1342  endif() # endif(${TYPE_EXTENSION_CMAKE}_${EXTENSION_NAME_CMAKE})
1343 
1344 end(){)
1345 
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.")
1351  camitk_extension(ACTION_EXTENSION ${ARGN})
1352 end(){)
1353 
1354 # Old macro to configure a new component to the framework
1355 # Use camitk_extension macro instead
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.")
1359  camitk_extension(COMPONENT_EXTENSION ${ARGN})
1360 end(){)
1361 
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