Computer Assisted Medical Intervention Tool Kit  version 5.2
CamiTKApplication.h
Go to the documentation of this file.
64 
65  # Instruct CMake to run moc automatically when needed.
66  set(CMAKE_AUTOMOC ON)
67 
68  #########################################################################
69  # #
70  # ARGUMENTS PARSING #
71  # #
72  # * Use a macro to create the CMAKE variables according to the #
73  # provided options as input. #
74  # #
75  #########################################################################
76 
77  get_directory_name(${CMAKE_CURRENT_SOURCE_DIR} APPLICATION_NAME)
78 
79  set(options DISABLED NO_GUI NEEDS_ITK NEEDS_XSD NEEDS_XERCESC NEEDS_PYTHON)
80  set(oneValueArgs "")
81  set(multiValueArgs NEEDS_CEP_LIBRARIES NEEDS_TOOL NEEDS_COMPONENT_EXTENSION NEEDS_ACTION_EXTENSION NEEDS_VIEWER_EXTENSION DEFINES CXX_FLAGS ADDITIONAL_SOURCES CEP_NAME DESCRIPTION EXTERNAL_LIBRARIES INCLUDE_DIRECTORIES EXTRA_TRANSLATE_LANGUAGE)
82  cmake_parse_arguments(${APPLICATION_NAME_CMAKE} "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
83 
84 
85 
86  #########################################################################
87  # #
88  # CREATE CMAKE VARIABLES #
89  # #
90  # * Create required and useful CMake variables for the macro #
91  # #
92  #########################################################################
93 
94  # CMAKE CACHE VARIABLE
95  # if it is the first cmake run, create the application variable with a correct initial value
96  if(NOT APPLICATION_${APPLICATION_NAME_CMAKE}_INTERNAL)
97  # add option to enable/disable this extension and set it to true by default
98  # Building the extension can be disabled by giving the argument DISABLED to the macro
99  # or by passing the flag -D${TYPE_EXTENSION_CMAKE}_${APPLICATION_NAME_CMAKE}_DISABLED:BOOL=TRUE
100  if(${APPLICATION_NAME_CMAKE}_DISABLED)
101  set(APPLICATION_${APPLICATION_NAME_CMAKE}_ENABLED FALSE)
102  else()
103  set(APPLICATION_${APPLICATION_NAME_CMAKE}_ENABLED TRUE)
104  endif()
105  set(APPLICATION_${APPLICATION_NAME_CMAKE} ${APPLICATION_${APPLICATION_NAME_CMAKE}_ENABLED} CACHE BOOL "Build application ${APPLICATION_NAME}")
106  set(APPLICATION_${APPLICATION_NAME_CMAKE}_INTERNAL TRUE CACHE INTERNAL "Is variable APPLICATION_${APPLICATION_NAME} already created?")
107  endif()
108 
109  # APPLICATION TARGET NAME
110  if (PACKAGING_NSIS)
111  # NSIS requires that cpack component names do not feature space or "-" characters
112  set(APPLICATION_TARGET_NAME application_${APPLICATION_NAME})
113  else()
114  set(APPLICATION_TARGET_NAME application-${APPLICATION_NAME})
115  endif()
116 
117 
118 
119  # if this extension is enabled, do everything needed
120  # otherwise... do nothing
121  if (APPLICATION_${APPLICATION_NAME_CMAKE})
122 
123  message(STATUS "Building application ${APPLICATION_NAME}")
124 
125 
126 
127  #########################################################################
128  # #
129  # INCLUDE DIRECTORIES #
130  # #
131  # * Include basic directories where to look header files #
132  # * Include also additional user provided directories #
133  # * These directories are used for compilation step #
134  # #
135  #########################################################################
136  # BASIC DIRECTORIES
137  include_directories(${CMAKE_CURRENT_SOURCE_DIR})
138  include_directories(${CMAKE_CURRENT_BINARY_DIR})
139  include_directories(${CAMITK_INCLUDE_DIRECTORIES})
140 
141  # USER INPUT DIRECTORIES
142  include_directories(${${APPLICATION_NAME_CMAKE}_INCLUDE_DIRECTORIES})
143 
144 
145 
146  #########################################################################
147  # #
148  # GATHER RESOURCES #
149  # #
150  # * get all the headers (.h) and source files (.cpp) of the project #
151  # * create the needed Qt files (using moc and uic) #
152  # * On Windows, Visual Studio, group .moc and .ui files #
153  # in subdirectories #
154  # #
155  #########################################################################
156 
157  # get all headers, sources and do what is needed for Qt
158  # one need to do this just before the add_library so that all defines, include directories and link directories
159  # are set properly (gather_headers_and_sources include the call to Qt moc and uic)
160  gather_headers_and_sources(${APPLICATION_NAME})
161 
162 
163 
164  #########################################################################
165  # #
166  # TARGET COMPILATION DEFINITION #
167  # #
168  # * Additional sources files to consider at compilation (.cpp) #
169  # * CMake project target definition #
170  # #
171  #########################################################################
172  # EXTERNAL SOURCES
173  set(${APPLICATION_NAME}_SOURCES ${${APPLICATION_NAME}_SOURCES} ${${APPLICATION_NAME_CMAKE}_ADDITIONAL_SOURCES})
174 
175  # APPLE BUNDLE DEFINITIONS
176  if(APPLE)
177  set(MACOSX_BUNDLE_INFO_STRING "${APPLICATION_TARGET_NAME} ${CAMITK_SHORT_VERSION_STRING}")
178  set(MACOSX_BUNDLE_BUNDLE_VERSION "${APPLICATION_TARGET_NAME} ${CAMITK_SHORT_VERSION_STRING}")
179  set(MACOSX_BUNDLE_LONG_VERSION_STRING "${APPLICATION_TARGET_NAME} ${CAMITK_SHORT_VERSION_STRING}")
180  set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${CAMITK_SHORT_VERSION_STRING}")
181  set(MACOSX_BUNDLE_COPYRIGHT "Univ. Grenoble Alpes")
182  set(MACOSX_BUNDLE_ICON_FILE "${CMAKE_CURRENT_SOURCE_DIR}/resources/camitk-${APPLICATION_NAME}.icns")
183  set(MACOSX_BUNDLE_BUNDLE_NAME "${APPLICATION_TARGET_NAME}")
184 
185  set(MACOSX_BUNDLE_RESOURCES "${CMAKE_CURRENT_BINARY_DIR}/${APPLICATION_TARGET_NAME}.app/Contents/Resources")
186  set(MACOSX_BUNDLE_ICON "${MACOSX_BUNDLE_ICON_FILE}")
187  execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${MACOSX_BUNDLE_RESOURCES})
188  execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${MACOSX_BUNDLE_ICON} ${MACOSX_BUNDLE_RESOURCES})
189  endif()
190 
191 
192 
193  #########################################################################
194  # #
195  # ADDITIONAL KNOWN LIBRARY DEPENDENCIES #
196  # #
197  # * Look for specific library needed #
198  # * Specific libraries are specified as option with the #
199  # NEEDS_LIBRARY syntax (see macro syntax for more options) #
200  # * Backward compatibility : Warn user if using old NEEDS_TOOL syntax #
201  # #
202  #########################################################################
203 
204  # Looking for ITK
205  set(ITK_LIBRARIES "")
206  if(${APPLICATION_NAME_CMAKE}_NEEDS_ITK)
207  find_package(ITK REQUIRED)
208  if(ITK_FOUND)
209  include(${ITK_USE_FILE})
210  set(ITK_VERSION ${ITK_VERSION_MAJOR}.${ITK_VERSION_MINOR}.${ITK_VERSION_PATCH}) #ITK_VERSION is not always set
211  set(CAMITK_ITK_VERSION ${ITK_VERSION_MAJOR}.${ITK_VERSION_MINOR})
212  message(STATUS "${APPLICATION_TARGET_NAME}: Found ITK version ${ITK_VERSION}")
213 
214  if ((${ITK_VERSION} VERSION_GREATER "4")) # ITK 4.9 on Windows, maybe a lesser version for Linux.
215  if(MSVC)
216  set(ITK_DIR ${ITK_DIR}/../..)
217  # Construct list of ITK libraries for linking = CAMITK_ITK_LIBRARIES
218  foreach(ITK_LIBRARY ${ITK_LIBRARIES})
219  string(SUBSTRING ${ITK_LIBRARY} 0 3 ${ITK_LIBRARY}_PREFIX)
220  # Some libraries have not the expected 'itk' prefix. Add it then
221  if((NOT ${${ITK_LIBRARY}_PREFIX} STREQUAL "itk") AND (NOT ${${ITK_LIBRARY}_PREFIX} STREQUAL "ITK"))
222  set(ITK_LIBRARY itk${ITK_LIBRARY})
223  endif()
224  set(CAMITK_ITK_LIBRARIES ${CAMITK_ITK_LIBRARIES} debug ${ITK_DIR}/${ITK_LIBRARY}-${CAMITK_ITK_VERSION}${CAMITK_DEBUG_POSTFIX}.lib optimized ${ITK_DIR}/${ITK_LIBRARY}-${CAMITK_ITK_VERSION}.lib)
225  endforeach()
226  elseif(UNIX)
227  set(CAMITK_ITK_LIBRARIES ${ITK_LIBRARIES})
228  elseif(APPLE)
229  message(WARNING "CamiTKExtension.cmake: ITK LIBRARY NOT SET FOR APPLE")
230  endif()
231  else()
232  message(FATAL_ERROR "Wrong version of ITK : ${ITK_VERSION}. Required is at least 4.x")
233  endif()
234  else()
235  message(FATAL_ERROR "ITK not found but required for ${APPLICATION_TARGET_NAME}")
236  endif()
237  endif()
238 
239  # XERCES-C
240  set(XERCESC_LIBRARIES)
241  if(${APPLICATION_NAME_CMAKE}_NEEDS_XERCESC)
242  # XercesC is required
243  find_package(XercesC REQUIRED)
244  if (XERCESC_FOUND)
245  include_directories(${XERCESC_INCLUDE_DIR})
246  set(XERCESC_LIBRARIES ${XERCESC_LIBRARY})
247  else()
248  # most probably win32 or crosscompiling
249  message(FATAL_ERROR "${APPLICATION_NAME}: xerces-c required. Please provide Xerces-C path.")
250  endif()
251  endif()
252 
253  # XSD
254  if(${APPLICATION_NAME_CMAKE}_NEEDS_XSD)
255  # XercesC is required
256  find_package(XercesC REQUIRED)
257  if (XERCESC_FOUND)
258  include_directories(${XERCESC_INCLUDE_DIR})
259  set(XERCESC_LIBRARIES ${XERCESC_LIBRARY})
260  find_package(XSD REQUIRED)
261  include_directories(${XSD_INCLUDE_DIR})
262  else()
263  # most probably win32 or crosscompiling
264  message(FATAL_ERROR "${APPLICATION_NAME}: xerces-c required because of XSD cxx, please set XERCESC_INCLUDE_DIR")
265  endif()
266  endif()
267 
268  # PYTHON
269  set(PYTHON_LIBRARIES "")
270  if(${APPLICATION_NAME_CMAKE}_NEEDS_PYTHON)
271  message(STATUS "Python needed by ${APPLICATION_NAME}")
272  find_package(PythonLibs 2.7 REQUIRED)
273  if(PYTHONLIBS_FOUND)
274  message(STATUS "Python found (needed by ${APPLICATION_NAME})")
275  include_directories(${PYTHON_INCLUDE_DIRS})
276  # PYTHON_LIBRARIES is automatically and correctly set by find_package
277  else()
278  message(FATAL_ERROR "Python (2.7 or above) is required by ${APPLICATION_NAME} : please add your python installation dir to your PATH environment variable")
279  endif()
280  endif()
281 
282  # EXTERNAL LIBRARIES
283  set(EXTERNAL_LIBRARIES)
284  if(${APPLICATION_NAME_CMAKE}_EXTERNAL_LIBRARIES)
285  foreach(EXTERNAL_LIBRARY ${${APPLICATION_NAME_CMAKE}_EXTERNAL_LIBRARIES})
286  if (MSVC) # TODO We have to decide how to handle debug version of external libraries
287  set(EXTERNAL_LIBRARIES ${EXTERNAL_LIBRARIES}
288  debug ${EXTERNAL_LIBRARY}${CAMITK_DEBUG_POSTFIX}.lib
289  optimized ${EXTERNAL_LIBRARY}.lib
290  )
291  else()
292  set(EXTERNAL_LIBRARIES ${EXTERNAL_LIBRARIES} ${EXTERNAL_LIBRARY})
293  endif()
294  endforeach()
295  endif()
296 
297 
298 
299  #########################################################################
300  # #
301  # LINK DIRECTORIES #
302  # #
303  # * Link directories are used to indicate the compiler where #
304  # to look for folder containing libraries to link with. #
305  # #
306  #########################################################################
307  # CAMITK BASIC LIB DIRECTORIES
308  link_directories(${CAMITK_LINK_DIRECTORIES})
309 
310 
311 
312  #########################################################################
313  # #
314  # TARGET COMPILATION DEFINITION #
315  # #
316  # * Additional sources files to consider at compilation (.cpp) #
317  # * CMake project target definition #
318  # #
319  #########################################################################
320  # CMAKE TARGET DEFINITION
321  # add_executable(${APPLICATION_TARGET_NAME} ${${APPLICATION_NAME}_SOURCES})
322  if(WIN32 AND (NOT ${APPLICATION_NAME_CMAKE}_NO_GUI))
323  add_executable(${APPLICATION_TARGET_NAME} WIN32 ${${APPLICATION_NAME}_SOURCES})
324  else()
325  add_executable(${APPLICATION_TARGET_NAME} ${${APPLICATION_NAME}_SOURCES})
326  endif()
327 
328  #########################################################################
329  # #
330  # QT LINKING LIBRARIES #
331  # #
332  # * Set at linking the Qt5 libraries #
333  # #
334  #########################################################################
335  target_link_libraries(${APPLICATION_TARGET_NAME} ${CAMITK_QT_LIBRARIES})
336 
337 
338 
339  #########################################################################
340  # #
341  # CAMITK ACTION / COMPONENT / LIBRARIES DEPENDENCIES #
342  # #
343  # * Look for action / component / libraries dependencies #
344  # * Specific actions / components / libraries are specified as option #
345  # with the NEEDS_ACTION/COMPONENT_EXTENSION/CEP_LIBRARIES syntax #
346  # * Add dependencies to library-camitkcore and the testing #
347  # action/component if test are runned on it #
348  # #
349  #########################################################################
350 
351  # 1) CAMITKCORE LIBRARY DEPENDENCY
352  # add the target dependency (i.e., enable proper parallelization of the build process
353  # only if inside the sdk build
354  if(CAMITK_COMMUNITY_EDITION_BUILD)
355  add_dependencies(${APPLICATION_TARGET_NAME} ${CAMITK_CORE_TARGET_LIB_NAME})
356  # add the dependency to the core automoc target
357  set_property(TARGET ${APPLICATION_TARGET_NAME} APPEND PROPERTY AUTOGEN_TARGET_DEPENDS ${CAMITK_CORE_TARGET_LIB_NAME})
358  endif()
359 
360  # 2) COMPONENTS DEPENDENCIES
361  if(${APPLICATION_NAME_CMAKE}_NEEDS_COMPONENT_EXTENSION)
362  set(COMPONENTS_DEPENDENCY_LIST "") #use for generating the project.xml file
363  foreach(COMPONENT_NEEDED ${${APPLICATION_NAME_CMAKE}_NEEDS_COMPONENT_EXTENSION})
364  # include directories from build, camitk (local or global install).
365  include_directories(${CAMITK_BUILD_INCLUDE_DIR}/components/${COMPONENT_NEEDED})
366  include_directories(${CAMITK_INCLUDE_DIR}/components/${COMPONENT_NEEDED})
367  # file dependency
368  if (MSVC)
369  list(APPEND COMPONENT_EXTENSION_LIBRARIES
370  debug ${CAMITK_BUILD_PRIVATE_LIB_DIR}/components/${COMPONENT_NEEDED}${CAMITK_DEBUG_POSTFIX}.lib
371  optimized ${COMPONENT_NEEDED}
372  )
373  else()
374  list(APPEND COMPONENT_EXTENSION_LIBRARIES ${COMPONENT_NEEDED})
375  endif()
376  # CMake / CDash dependencies
377  if(PACKAGING_NSIS)
378  add_dependencies(${APPLICATION_TARGET_NAME} component_${COMPONENT_NEEDED})
379  # add the dependency to the component automoc target
380  set_property(TARGET ${APPLICATION_TARGET_NAME} APPEND PROPERTY AUTOGEN_TARGET_DEPENDS component_${COMPONENT_NEEDED})
381  else()
382  add_dependencies(${APPLICATION_TARGET_NAME} component-${COMPONENT_NEEDED})
383  list(APPEND COMPONENTS_DEPENDENCY_LIST component-${COMPONENT_NEEDED})
384  # add the dependency to the component automoc target
385  set_property(TARGET ${APPLICATION_TARGET_NAME} APPEND PROPERTY AUTOGEN_TARGET_DEPENDS component-${COMPONENT_NEEDED})
386  endif()
387  endforeach()
388  endif()
389 
390  # 3) ACTIONS DEPENDENCIES
391  if(${APPLICATION_NAME_CMAKE}_NEEDS_ACTION_EXTENSION)
392  set(ACTIONS_DEPENDENCY_LIST "") #use for generating the project.xml file
393  foreach(ACTION_NEEDED ${${APPLICATION_NAME_CMAKE}_NEEDS_ACTION_EXTENSION})
394  # include directories from build, camitk (local or global install).
395  include_directories(${CAMITK_BUILD_INCLUDE_DIR}/actions/${ACTION_NEEDED})
396  include_directories(${CAMITK_INCLUDE_DIR}/actions/${ACTION_NEEDED})
397  # file dependency
398  if (MSVC)
399  list(APPEND ACTION_EXTENSION_LIBRARIES
400  debug ${CAMITK_BUILD_PRIVATE_LIB_DIR}/actions/${ACTION_NEEDED}${CAMITK_DEBUG_POSTFIX}.lib
401  optimized ${ACTION_NEEDED}
402  )
403  else()
404  list(APPEND ACTION_EXTENSION_LIBRARIES ${ACTION_NEEDED})
405  endif()
406  # CMake / CDash dependencies
407  if (PACKAGING_NSIS)
408  add_dependencies(${APPLICATION_TARGET_NAME} action_${ACTION_NEEDED})
409  # add the dependency to the action automoc target
410  set_property(TARGET ${APPLICATION_TARGET_NAME} APPEND PROPERTY AUTOGEN_TARGET_DEPENDS action_${ACTION_NEEDED})
411  else()
412  add_dependencies(${APPLICATION_TARGET_NAME} action-${ACTION_NEEDED})
413  list(APPEND ACTIONS_DEPENDENCY_LIST action-${ACTION_NEEDED})
414  # add the dependency to the action automoc target
415  set_property(TARGET ${APPLICATION_TARGET_NAME} APPEND PROPERTY AUTOGEN_TARGET_DEPENDS action-${ACTION_NEEDED})
416  endif()
417  endforeach()
418  endif()
419 
420  # 4) VIEWERS DEPENDENCIES
421  # differentiate SDK from other applications
422  if(${APPLICATION_NAME_CMAKE}_NEEDS_VIEWER_EXTENSION)
423  set(VIEWERS_DEPENDENCY_LIST "") #use for generating the project.xml file
424  foreach(VIEWER_NEEDED ${${APPLICATION_NAME_CMAKE}_NEEDS_VIEWER_EXTENSION})
425  # include directories from build, camitk (local or global install).
426  include_directories(${CAMITK_BUILD_INCLUDE_DIR}/viewers/${VIEWER_NEEDED})
427  include_directories(${CAMITK_INCLUDE_DIR}/viewers/${VIEWER_NEEDED})
428  # library dependency
429  if (MSVC)
430  list(APPEND VIEWER_EXTENSION_LIBRARIES
431  debug ${CAMITK_BUILD_PRIVATE_LIB_DIR}/viewers/${VIEWER_NEEDED}${CAMITK_DEBUG_POSTFIX}.lib
432  optimized ${VIEWER_NEEDED}
433  )
434  else()
435  list(APPEND VIEWER_EXTENSION_LIBRARIES ${VIEWER_NEEDED})
436  endif()
437  # CMake / CDash dependencies
438  if (PACKAGING_NSIS)
439  add_dependencies(${APPLICATION_TARGET_NAME} viewer_${VIEWER_NEEDED})
440  # add the dependency to the viewer automoc target
441  set_property(TARGET ${APPLICATION_TARGET_NAME} APPEND PROPERTY AUTOGEN_TARGET_DEPENDS viewer_${VIEWER_NEEDED})
442  else()
443  add_dependencies(${APPLICATION_TARGET_NAME} viewer-${VIEWER_NEEDED})
444  list(APPEND VIEWERS_DEPENDENCY_LIST viewer-${VIEWER_NEEDED})
445  # add the dependency to the viewer automoc target
446  set_property(TARGET ${APPLICATION_TARGET_NAME} APPEND PROPERTY AUTOGEN_TARGET_DEPENDS viewer-${VIEWER_NEEDED})
447  endif()
448  endforeach()
449  endif()
450 
451  # 5) CEP LIBRARIES DEPENDENCIES
452  if(${APPLICATION_NAME_CMAKE}_NEEDS_CEP_LIBRARIES)
453  set(CEP_LIBRARIES_DEPENDENCY_LIST "") #use for generating the project.xml file
454  foreach(CEP_LIBRARY_NEEDED ${${APPLICATION_NAME_CMAKE}_NEEDS_CEP_LIBRARIES})
455  # include directories from build, camitk (local or global install).
456  include_directories(${CAMITK_BUILD_INCLUDE_DIR}/libraries/${CEP_LIBRARY_NEEDED})
457  include_directories(${CAMITK_INCLUDE_DIR}/libraries/${CEP_LIBRARY_NEEDED})
458  # file dependency
459  if (MSVC)
460  list(APPEND CEP_LIBRARIES debug ${CEP_LIBRARY_NEEDED}${CAMITK_DEBUG_POSTFIX}.lib
461  optimized ${CEP_LIBRARY_NEEDED}
462  )
463  else()
464  list(APPEND CEP_LIBRARIES ${CEP_LIBRARY_NEEDED})
465  endif()
466  # CMake / CDash dependencies
467  if (PACKAGING_NSIS)
468  add_dependencies(${APPLICATION_TARGET_NAME} library_${CEP_LIBRARY_NEEDED})
469  # add the dependency to the library automoc target
470  set_property(TARGET ${APPLICATION_TARGET_NAME} APPEND PROPERTY AUTOGEN_TARGET_DEPENDS library_${CEP_LIBRARY_NEEDED})
471  else()
472  add_dependencies(${APPLICATION_TARGET_NAME} library-${CEP_LIBRARY_NEEDED})
473  list(APPEND CEP_LIBRARIES_DEPENDENCY_LIST library-${CEP_LIBRARY_NEEDED})
474  # add the dependency to the library automoc target
475  set_property(TARGET ${APPLICATION_TARGET_NAME} APPEND PROPERTY AUTOGEN_TARGET_DEPENDS library-${CEP_LIBRARY_NEEDED})
476  endif()
477  endforeach()
478  endif()
479 
480 
481 
482  #########################################################################
483  # #
484  # COMPILATION FLAG #
485  # #
486  # * Flags are options to give to the compiler #
487  # * Add user input flags #
488  # * Add platform specific flags #
489  # #
490  #########################################################################
491 
492  # USER INPUT COMPILER FLAG
493  if(${APPLICATION_NAME_CMAKE}_DEFINES)
494  foreach (FLAG ${${APPLICATION_NAME_CMAKE}_DEFINES})
495  add_definitions(-D${FLAG})
496  endforeach()
497  endif()
498 
499  # USER INPUT CUSTOM COMPILER FLAG
500  if(${APPLICATION_NAME_CMAKE}_CXX_FLAGS)
501  foreach (FLAG ${${APPLICATION_NAME_CMAKE}_CXX_FLAGS})
502  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAG}")
503  endforeach()
504  endif()
505 
506 
507 
508  #########################################################################
509  # #
510  # LINKING #
511  # #
512  # * Linking is the last stage of compilation #
513  # * Indicate what libraries to use for linking the target #
514  # #
515  #########################################################################
516  # LINKING LIBRARIES
517  target_link_libraries(${APPLICATION_TARGET_NAME} ${CAMITK_CORE_LIBRARIES} ${CAMITK_LIBRARIES} ${COMPONENT_EXTENSION_LIBRARIES} ${ACTION_EXTENSION_LIBRARIES} ${VIEWER_EXTENSION_LIBRARIES} ${CEP_LIBRARIES} ${XERCESC_LIBRARY} ${CAMITK_ITK_LIBRARIES} ${PYTHON_LIBRARIES} ${EXTERNAL_LIBRARIES})
518 
519 
520 
521  #########################################################################
522  # #
523  # OUTPUT #
524  # #
525  # * Define the output directory (location and name) #
526  # * Define the output name of the library #
527  # * Add ${CAMITK_DEBUG_POSTFIX} suffix to Debug MSVC built libraries #
528  # #
529  #########################################################################
530 
531  # OUTPUT NAME
532  if (MSVC)
533  set_target_properties(${APPLICATION_TARGET_NAME}
534  PROPERTIES OUTPUT_NAME camitk-${APPLICATION_NAME}
535  DEBUG_POSTFIX ${CAMITK_DEBUG_POSTFIX}
536  )
537  else()
538  set_target_properties(${APPLICATION_TARGET_NAME}
539  PROPERTIES OUTPUT_NAME camitk-${APPLICATION_NAME}
540  )
541  endif()
542 
543  # OUTPUT DIRECTORY LOCATION
544  # always in bin folder
545  set_target_properties(${APPLICATION_TARGET_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CAMITK_BUILD_BIN_DIR}
546  RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CAMITK_BUILD_BIN_DIR}
547  RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CAMITK_BUILD_BIN_DIR}
548  )
549 
550  #########################################################################
551  # #
552  # INSTALLATION #
553  # #
554  # * When installing the project, header files (.h) and test data are #
555  # copied into a installation folder to determine. #
556  # * Indicate in this section, where to install your project and which #
557  # files to copy into that folder (during local/global installation) #
558  # #
559  #########################################################################
560 
561  # FOLDER INSTALLATION
562  message(STATUS "Installing application ${APPLICATION_TARGET_NAME} in ${CMAKE_INSTALL_BINDIR}")
563  install(TARGETS ${APPLICATION_TARGET_NAME}
564  RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
565  COMPONENT ${APPLICATION_TARGET_NAME}
566  )
567 
568 
569 
570  #########################################################################
571  # #
572  # CDASH SUBPROJECT DESCRIPTION #
573  # #
574  # * Update the XML descriton of the subprojects dependenicies #
575  # for CDash. #
576  # #
577  #########################################################################
578  # CDASH XML SUBPROJECTS DESCRIPTION UPDATE
579 # if(NOT ((APPLICATION_TARGET_NAME STREQUAL "application-testactions") OR (APPLICATION_TARGET_NAME STREQUAL "application-testcomponents")))
580  # We will add manually the CDash dependencies of the testing applications
581  # See CamiTKCDashPublishSubProject.cmake
582  camitk_register_subproject(APPLICATION ${APPLICATION_TARGET_NAME} DEPENDENCIES library-camitkcore ${COMPONENTS_DEPENDENCY_LIST} ${ACTIONS_DEPENDENCY_LIST} ${VIEWERS_DEPENDENCY_LIST} ${CEP_LIBRARIES_DEPENDENCY_LIST})
583 # endif()
584 
585  #####################################################################################
586  # #
587  # TRANSLATION #
588  # #
589  # * CAMITK_TRANSLATIONS contains the list of language to translate #
590  # the QString to. #
591  # #
592  # * Create the translate.pro file which contains 4 sections: #
593  # - HEADERS: list of .h/.hpp files to look for tr("") QString #
594  # - SOURCES: list of .cpp files to look for tr("") QString #
595  # - FORMS: list of .ui files to look for tr("") QString #
596  # - TRANSLATIONS: list of .ts files which use CAMITK_TRANSLATIONS #
597  # to define each .ts file #
598  # #
599  # * Execute lupdate program to update the .ts files with new QString #
600  # found. #
601  # #
602  # * Execute lrelease program to create .qm files (binary equivalent of #
603  # .ts files #
604  # #
605  # * Create translate.qrc which contains the list of .qm files. #
606  # * Create the flags.qrc file which contains the list of .png flags #
607  # images #
608  # #
609  #####################################################################################
610  if(CAMITK_TRANSLATE)
611  if(${APPLICATION_NAME_CMAKE}_EXTRA_TRANSLATE_LANGUAGE)
612  camitk_translate(EXTRA_LANGUAGE ${${APPLICATION_NAME_CMAKE}_EXTRA_TRANSLATE_LANGUAGE})
613  else()
614  camitk_translate()
615  endif()
616  endif()
617 
618 
619  #########################################################################
620  # #
621  # PACKAGING CATEGORIZATION #
622  # #
623  # * On Windows, when building a package (win32 installer), the #
624  # install shield wizard proposes you to select which component #
625  # to install. #
626  # * Each component to install has a short description following its #
627  # name to understand its role. #
628  # * This section deals with the categorization and the description #
629  # of the component in this installer. #
630  # #
631  #########################################################################
632 
633  # WINDOWS INSTALLER CATEGORIZATION
634  if(${APPLICATION_NAME_CMAKE}_CEP_NAME)
635  if (${APPLICATION_NAME_CMAKE}_CEP_NAME MATCHES "SDK")
636  # The default SDK extensions are categorized as "required" and are not "unselectable" by the user at installation time
637  cpack_add_component(${APPLICATION_TARGET_NAME}
638  DISPLAY_NAME ${APPLICATION_TARGET_NAME}
639  DESCRIPTION ${${APPLICATION_NAME_CMAKE}_DESCRIPTION}
640  REQUIRED
641  GROUP SDK
642  )
643 
644  else()
645  # Extension is selectable for installation in the wizard of the installer
646  cpack_add_component(${APPLICATION_TARGET_NAME}
647  DISPLAY_NAME ${APPLICATION_TARGET_NAME}
648  DESCRIPTION ${${APPLICATION_NAME_CMAKE}_DESCRIPTION}
649  GROUP ${${APPLICATION_NAME_CMAKE}_CEP_NAME}
650  )
651  endif()
652  else()
653  # Extension if not categorized for packaging presentation
654  cpack_add_component(${APPLICATION_TARGET_NAME}
655  DISPLAY_NAME ${APPLICATION_TARGET_NAME}
656  DESCRIPTION ${${APPLICATION_NAME_CMAKE}_DESCRIPTION}
657  )
658 
659  endif()
660 
661  # additional unix system files/resources
662  if(UNIX)
663  # Man page installation
664  set(${APPLICATION_NAME_CMAKE}_MAN_PAGE ${CMAKE_CURRENT_SOURCE_DIR}/resources/camitk-${APPLICATION_NAME}.1)
665  if (EXISTS ${${APPLICATION_NAME_CMAKE}_MAN_PAGE})
666  message(STATUS "Found man page for ${APPLICATION_TARGET_NAME}")
667  install(FILES ${${APPLICATION_NAME_CMAKE}_MAN_PAGE}
668  DESTINATION ${CAMITK_APPLICATION_MAN_INSTALL_DIR}
669  )
670  else()
671  # check if .in exists
672  if (EXISTS "${${APPLICATION_NAME_CMAKE}_MAN_PAGE}.in")
673  message(STATUS "Found man page configuration file for ${APPLICATION_TARGET_NAME}")
674  install(CODE "message(STATUS \"Updating ${APPLICATION_NAME} man page (version ${CAMITK_VERSION_MAJOR}.${CAMITK_VERSION_MINOR} as of ${CURRENT_DATE})\")")
675  # set variable in sub-cmake shell
676  install(CODE "set(APPLICATION_NAME ${APPLICATION_NAME})")
677  install(CODE "set(CURRENT_DATE ${CURRENT_DATE})")
678  install(CODE "set(CAMITK_VERSION_MAJOR ${CAMITK_VERSION_MAJOR})")
679  install(CODE "set(CAMITK_VERSION_MINOR ${CAMITK_VERSION_MINOR})")
680  # remove previous version
681  install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E remove -f ${CMAKE_CURRENT_BINARY_DIR}/camitk-${APPLICATION_NAME}.1)")
682  # configure current version
683  install(CODE "configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resources/camitk-${APPLICATION_NAME}.1.in ${CMAKE_CURRENT_BINARY_DIR}/camitk-${APPLICATION_NAME}.1 @ONLY)")
684  # install file
685  install(FILES ${CMAKE_CURRENT_BINARY_DIR}/camitk-${APPLICATION_NAME}.1 DESTINATION ${CAMITK_APPLICATION_MAN_INSTALL_DIR})
686  endif()
687  endif()
688 
689  # Desktop file
690  set(${APPLICATION_NAME_CMAKE}_DESKTOP ${CMAKE_CURRENT_SOURCE_DIR}/resources/camitk-${APPLICATION_NAME}.desktop)
691  if (EXISTS ${${APPLICATION_NAME_CMAKE}_DESKTOP})
692  message(STATUS "Found desktop file for ${APPLICATION_TARGET_NAME}")
693  install(FILES ${${APPLICATION_NAME_CMAKE}_DESKTOP} DESTINATION ${CAMITK_APPLICATION_DESKTOP_INSTALL_DIR})
694  endif()
695 
696  # application pixmap
697  set(${APPLICATION_NAME_CMAKE}_PIXMAP ${CMAKE_CURRENT_SOURCE_DIR}/resources/camitk-${APPLICATION_NAME}.xpm)
698  if (EXISTS ${${APPLICATION_NAME_CMAKE}_PIXMAP})
699  message(STATUS "Found pixmap for ${APPLICATION_TARGET_NAME}")
700  install(FILES ${${APPLICATION_NAME_CMAKE}_PIXMAP} DESTINATION ${CAMITK_APPLICATION_PIXMAP_INSTALL_DIR})
701  endif()
702 
703  endif()
704 
705  endif() #APPLICATION_${APPLICATION_NAME_CMAKE}
706 
707 end(){)
cmake modules macros camitk test endif() add_custom_target(camitk-ce-iwyu COMMAND $
Definition: CamiTKIncludeWhatYouUse.h:37
#define a
iwyu out CACHE PATH Output filename for include what you use set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE ${IWYU_EXECUTABLE}) if(NOT EXISTS $
Definition: CamiTKIncludeWhatYouUse.h:22
test result execute_process(COMMAND ${CMAKE_COMMAND} -E remove -f ${CAMITK_TEST_COMMAND_FILE} ${CAMITK_TEST_COMMAND_RESULT_FILE} ${CAMITK_TEST_COMMAND_OUTPUT_FILE} ${CAMITK_TEST_PASS_FILE_COMMAND_FILE} ${CAMITK_TEST_PASS_FILE_OUTPUT_FILE} ${CAMITK_TEST_PASS_FILE_RESULT_FILE}) file(WRITE $
Definition: CamiTKTestPassFile.h:21
static void include(QRect &r, const QRect &rect)
Definition: canvas_typed/qtcanvas.cpp:98
camitk_application()
macro camitk_application simplify writing a CMakeLists.txt for CamiTK application extension
Definition: CamiTKApplication.h:63
get_directory_name()
macro get_directory_name set the variable VariableName to the name of the last directory of FullPathD...
Definition: GetDirectoryName.h:14
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
Definition: Action.cpp:36
Definition: itkImageToVTKImageFilter.h:39