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