Computer Assited Medical Intervention Tool Kit  version 4.0
CamiTKCEPPackaging.h
Go to the documentation of this file.
1 # \param DESCRIPTION Some comments on what is this CEP package about
29 
30 # CEP Packaging only works for stand-alone CEP
31 if (NOT CAMITK_EXTENSION_PROJECT_SET)
32 
33 parse_arguments(CAMITK_CEP_PACKAGING
34  "NAMEVENDORCONTACTAPPLICATIONSDESCRIPTIONLICENSE" # possible lists
35  "" # possible option
36  ${ARGN}
37 )
38 
39 # Clean list of targets by removing duplicates
40 # Those may appear if configuring more than once (i.e. by manually clicking more than once on the CMake configure
41 # button before generating
42 list(REMOVE_DUPLICATES CAMITK_ACTION_TARGETS)
43 list(REMOVE_DUPLICATES CAMITK_COMPONENT_TARGETS)
44 list(REMOVE_DUPLICATES CAMITK_CEP_LIBRARY_TARGETS)
45 list(REMOVE_DUPLICATES CAMITK_APPLICATION_TARGETS)
46 
47 # package named
48 if (CAMITK_CEP_PACKAGING_NAME)
49  set(PACKAGING_NAME ${CAMITK_CEP_PACKAGING_NAME})
50 else()
51  # package name is project name
52  set(PACKAGING_NAME ${CMAKE_PROJECT_NAME})
53 endif()
54 string(TOLOWER ${PACKAGING_NAME} CPACK_PACKAGE_NAME)
55 set(CPACK_PACKAGE_VERSION_MAJOR ${CAMITK_VERSION_MAJOR})
56 set(CPACK_PACKAGE_VERSION_MINOR ${CAMITK_VERSION_MINOR})
57 set(CPACK_PACKAGE_VERSION_PATCH "0")
58 string(TOLOWER "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}-${LSB_DISTRIB}_${CPACK_PACKAGE_ARCHITECTURE}" CPACK_PACKAGE_FILE_NAME)
59 
60 # contact information
61 if (CAMITK_CEP_PACKAGING_VENDOR)
62  set(CPACK_PACKAGE_VENDOR ${CAMITK_CEP_PACKAGING_VENDOR})
63 else()
64  set(CPACK_PACKAGE_VENDOR "Univ. Grenoble Alpes, CNRS, TIMC-IMAG UMR 5525")
65 endif()
66 if (CAMITK_CEP_PACKAGING_CONTACT)
67  set(CPACK_PACKAGE_CONTACT ${CAMITK_CEP_PACKAGING_CONTACT})
68 else()
69  set(CPACK_PACKAGE_CONTACT "http://camitk.imag.fr")
70 endif()
71 
72 # resource files
73 if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/README")
74  set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README")
75 endif()
76 if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/COPYRIGHT")
77  set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/COPYRIGHT")
78 endif()
79 
80 # applications / executable
81 set(EXECUTABLES_TO_PACKAGE)
82 foreach(APPLICATION_TARGET_NAME ${CAMITK_APPLICATION_TARGETS})
83  # name and label are the same
84  set(EXECUTABLES_TO_PACKAGE ${EXECUTABLES_TO_PACKAGE} ${APPLICATION_TARGET_NAME} ${APPLICATION_TARGET_NAME})
85 endforeach()
86 set(CPACK_PACKAGE_EXECUTABLES ${EXECUTABLES_TO_PACKAGE})
87 
88 # package description
89 set(CPACK_PACKAGE_DESCRIPTION_SUMMARY ${CAMITK_CEP_PACKAGING_DESCRIPTION})
90 
91 # Files to ignore during generation of the package
92 set(CPACK_SOURCE_IGNORE_FILES
93 "~$"
94 "/CVS/"
95 "tags"
96 "/\\\\.svn/"
97 "/\\\\.git/"
98 "/kdev4$/"
99 "/build/"
100 "\\\\.kdevses$"
101 "\\\\.kdev4$"
102 "\\\\.kdevelop\\\\.pcs$"
103 ".DS_Store"
104 ${CPACK_SOURCE_IGNORE_FILES}
105 )
106 
107 set(CPACK_SOURCE_GENERATOR "TGZ" "ZIP" )
108 
109 # ----------------------------------
110 # Unix packages (Ubuntu and Debian)
111 # ----------------------------------
112 if (UNIX AND NOT WIN32)
113 
114  message(STATUS "Packaging ${CPACK_PACKAGE_NAME} for UNIX systems")
115  # Try to find architecture
116  execute_process(COMMAND uname -m OUTPUT_VARIABLE CPACK_PACKAGE_ARCHITECTURE)
117  string(STRIP "${CPACK_PACKAGE_ARCHITECTURE}" CPACK_PACKAGE_ARCHITECTURE)
118  # Try to find distro name and distro-specific arch
119  execute_process(COMMAND lsb_release -is OUTPUT_VARIABLE LSB_ID)
120  execute_process(COMMAND lsb_release -rs OUTPUT_VARIABLE LSB_RELEASE)
121  string(STRIP "${LSB_ID}" LSB_ID)
122  string(STRIP "${LSB_RELEASE}" LSB_RELEASE)
123  set(LSB_DISTRIB "${LSB_ID}${LSB_RELEASE}")
124  if(NOT LSB_DISTRIB)
125  set(LSB_DISTRIB "unix")
126  endif(NOT LSB_DISTRIB)
127  message(STATUS "Packager architecture : ${LSB_DISTRIB}")
128 
129  #Find DPKG
130  find_program(DPKG
131  NAMES dpkg-deb
132  PATHS "/usr/bin" #Add paths here
133  )
134  if ( DPKG )
135  get_filename_component(DPKG_PATH ${DPKG} ABSOLUTE)
136  message(STATUS "Packaging deb using ${DPKG_PATH}: OK")
137  set(DPKG_FOUND "YES")
138  else()
139  set(DPKG_FOUND "NO")
140  endif()
141 
142  # For Debian-based distribs we want to create DEB packages.
143  if("${LSB_DISTRIB}" MATCHES "Ubuntu|Debian")
144 
145  # We need to alter the architecture names as per distro rules
146  if("${CPACK_PACKAGE_ARCHITECTURE}" MATCHES "i[3-6]86")
147  set(CPACK_PACKAGE_ARCHITECTURE i386)
148  endif()
149  if("${CPACK_PACKAGE_ARCHITECTURE}" MATCHES "x86_64")
150  set(CPACK_PACKAGE_ARCHITECTURE amd64)
151  endif()
152  # Set the dependencies based on the distrib version
153 
154  # Installation path
155  # Set the install location to "/usr"
156  # set(CAMITK_INSTALL_ROOT "/usr") # Set the CamiTK install root path in your CMake command line / GUI.
157  set(CPACK_PACKAGING_INSTALL_PREFIX "/usr")
158  set(CPACK_PACKAGE_DEFAULT_LOCATION "/usr")
159  set(CPACK_SET_DESTDIR TRUE)
160 
161  # Dependencies depending on the Operating System.
162  # Ubuntu11.10
163  if("${LSB_DISTRIB}" MATCHES "Ubuntu11.10")
164  set(CPACK_DEBIAN_PACKAGE_DEPENDS "libqt4-dev, libinsighttoolkit3.20, libxml2, libvtk5.6-qt4, libxerces-c3.1 ")
165  endif()
166  # For Ubuntu12.04
167  if("${LSB_DISTRIB}" MATCHES "Ubuntu12.04")
168  set(LSB_DISTRIB "Ubuntu12.xx")
169  set(CPACK_DEBIAN_PACKAGE_DEPENDS "libqt4-dev, libinsighttoolkit3.20, libxml2, libvtk5.8-qt4, libxerces-c3.1 ")
170  endif()
171  if("${LSB_DISTRIB}" MATCHES "Ubuntu12.04.1")
172  set(LSB_DISTRIB "Ubuntu12.xx")
173  set(CPACK_DEBIAN_PACKAGE_DEPENDS "libqt4-dev, libinsighttoolkit3.20, libxml2, libvtk5.8-qt4, libxerces-c3.1 ")
174  endif()
175  # For Ubuntu12.10
176  if("${LSB_DISTRIB}" MATCHES "Ubuntu12.10")
177  set(LSB_DISTRIB "Ubuntu12.xx")
178  set(CPACK_DEBIAN_PACKAGE_DEPENDS "libqt4-dev, libinsighttoolkit3.20, libxml2, libvtk5.8-qt4, libxerces-c3.1 ")
179  endif()
180 
181  # TODO Debian dependencies (see CamiTKPackaging.cmake)
182 
183  if(NOT CPACK_DEBIAN_PACKAGE_DEPENDS)
184  message(STATUS "Packaging for ${LSB_DISTRIB} not supported yet.\nPlease set deps in cmake/darktable-packaging.cmake before packaging.")
185  endif()
186 
187  endif()
188 
189  # package name
190  string(TOLOWER "${CPACK_PACKAGE_NAME}_${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}-${LSB_DISTRIB}_${CPACK_PACKAGE_ARCHITECTURE}" CPACK_PACKAGE_FILE_NAME)
191 
192 endif()
193 
194 
195 
196 if(WIN32 AND NOT UNIX)
197  # -----------------------
198  # NSIS Windows installer
199  # -----------------------
200 
201  # Update package name for windows release
202  set(LSB_DISTRIB "win32")
203  set(CPACK_PACKAGE_ARCHITECTURE i386)
204  string(TOLOWER "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}-${CAMITK_VER_NICKNAME}-${LSB_DISTRIB}" CPACK_PACKAGE_FILE_NAME)
205 
206  # Try to find Makensis on Linux distribution
207  find_program(MAKENSIS
208  NAMES makensis
209  PATHS "/usr/bin"
210  )
211 
212  if(MAKENSIS)
213  set(ITK_ROOT_DIR "C:/dev/ITK/3.20.1")
214 
215  # MinGW compiler
216  if ("${CMAKE_GENERATOR}" MATCHES "MinGW Makefiles")
217  # NSIS Windows installer
218  message(STATUS "Packaging nsis using ${MAKENSIS} with MinGW compiler")
219  # Qt dependencies
220  set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS
221  ##TODO use GetPrerequisites.cmake (i.e. find a better way to list dependencies)
222  ##get_prerequisites() is not well enough documented to justify the time investement - EP May 2011
223  ${QT_BINARY_DIR}/QtCore4.dll
224  ${QT_BINARY_DIR}/QtGui4.dll
225  ${QT_BINARY_DIR}/QtSvg4.dll
226  ${QT_BINARY_DIR}/QtXml4.dll
227  ${QT_BINARY_DIR}/QtNetwork4.dll
228  ${QT_BINARY_DIR}/QtSql4.dll
229  ${QT_BINARY_DIR}/QtWebKit4.dll
230  # VTK dependencies
231  ${VTK_LIBRARY_DIRS}/libQVTK.dll
232  ${VTK_LIBRARY_DIRS}/libvtkCommon.dll
233  ${VTK_LIBRARY_DIRS}/libvtksys.dll
234  ${VTK_LIBRARY_DIRS}/libvtkFiltering.dll
235  ${VTK_LIBRARY_DIRS}/libvtkGraphics.dll
236  ${VTK_LIBRARY_DIRS}/libvtkHybrid.dll
237  ${VTK_LIBRARY_DIRS}/libvtkIO.dll
238  ${VTK_LIBRARY_DIRS}/libvtkImaging.dll
239  ${VTK_LIBRARY_DIRS}/libvtkRendering.dll
240  ${VTK_LIBRARY_DIRS}/libvtkVolumeRendering.dll
241  ${VTK_LIBRARY_DIRS}/libvtkverdict.dll
242  ${VTK_LIBRARY_DIRS}/libvtkDICOMParser.dll
243  ${VTK_LIBRARY_DIRS}/libvtkNetCDF.dll
244  ${VTK_LIBRARY_DIRS}/libvtkNetCDF_cxx.dll
245  ${VTK_LIBRARY_DIRS}/libvtkexpat.dll
246  ${VTK_LIBRARY_DIRS}/libvtkjpeg.dll
247  ${VTK_LIBRARY_DIRS}/libvtkmetaio.dll
248  ${VTK_LIBRARY_DIRS}/libvtkpng.dll
249  ${VTK_LIBRARY_DIRS}/libvtktiff.dll
250  ${VTK_LIBRARY_DIRS}/libvtkzlib.dll
251  ${VTK_LIBRARY_DIRS}/libvtkInfovis.dll
252  ${VTK_LIBRARY_DIRS}/libvtkfreetype.dll
253  ${VTK_LIBRARY_DIRS}/libvtkftgl.dll
254  ${VTK_LIBRARY_DIRS}/libvtkalglib.dll
255  ${VTK_LIBRARY_DIRS}/libvtklibxml2.dll
256  ${VTK_LIBRARY_DIRS}/libvtkViews.dll
257  ${VTK_LIBRARY_DIRS}/libvtkexoIIc.dll
258  ${VTK_LIBRARY_DIRS}/libvtkWidgets.dll
259  ${VTK_LIBRARY_DIRS}/vtkhdf5.dll
260  ${VTK_LIBRARY_DIRS}/vtkhdf5_hl.dll
261  ${VTK_LIBRARY_DIRS}/libLSDyna.dll
262  # Xerces-c dependency
263  # ${XERCESC_ROOT_DIR}/bin/xerces-c_3_1.dll
264  # Libxml2 dependencies
265  # ${LIBXML2_INCLUDE_DIR}/../bin/iconv.dll
266  C:/dev/libxml2/2.8/bin/libxml2-2.dll
267  # ${LIBXML2_INCLUDE_DIR}/../bin/zlib1.dll
268  # ITK dependency
269  ${ITK_ROOT_DIR}/bin/libITKAlgorithms.dll
270  ${ITK_ROOT_DIR}/bin/libITKCommon.dll
271  ${ITK_ROOT_DIR}/bin/libITKBasicFilters.dll
272  ${ITK_ROOT_DIR}/lib/InsightToolkit/libitksys.dll
273  ${ITK_ROOT_DIR}/bin/libitkvnl.dll
274  ${ITK_ROOT_DIR}/bin/libitkvnl_algo.dll
275  ${ITK_ROOT_DIR}/bin/libITKIO.dll
276  ${ITK_ROOT_DIR}/bin/libitkv3p_lsqr.dll
277  ${ITK_ROOT_DIR}/bin/libitkv3p_netlib.dll
278  ${ITK_ROOT_DIR}/bin/libITKDICOMParser.dll
279  ${ITK_ROOT_DIR}/bin/libITKEXPAT.dll
280  ${ITK_ROOT_DIR}/bin/libitkgdcm.dll
281  ${ITK_ROOT_DIR}/bin/libitkjpeg8.dll
282  ${ITK_ROOT_DIR}/bin/libITKMetaIO.dll
283  ${ITK_ROOT_DIR}/bin/libITKniftiio.dll
284  ${ITK_ROOT_DIR}/bin/libITKNrrdIO.dll
285  ${ITK_ROOT_DIR}/bin/libitkpng.dll
286  ${ITK_ROOT_DIR}/bin/libitktiff.dll
287  ${ITK_ROOT_DIR}/bin/libitkzlib.dll
288  ${ITK_ROOT_DIR}/bin/libitkjpeg12.dll
289  ${ITK_ROOT_DIR}/bin/libitkjpeg16.dll
290  ${ITK_ROOT_DIR}/bin/libitkopenjpeg.dll
291  ${ITK_ROOT_DIR}/bin/libITKznz.dll
292  # MinGW Dependencies
293  C:/dev/MinGW/bin/libgcc_s_dw2-1.dll
294  C:/dev/MinGW/bin/libstdc++-6.dll
295  C:/dev/MinGW/bin/mingwm10.dll
296  )
297 
298  endif()
299 
300  # MSVC compiler
301  if (MSVC)
302 
303  message(STATUS "Packaging nsis using ${MAKENSIS} with MSVC compiler")
304 
305  set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS
306  ##TODO use GetPrerequisites.cmake (i.e. find a better way to list dependencies)
307  ##get_prerequisites() is not well enough documented to justify the time investement - EP May 2011
308  # Qt dependencies
309  ${QT_BINARY_DIR}/QtCore4.dll
310  ${QT_BINARY_DIR}/QtGui4.dll
311  ${QT_BINARY_DIR}/QtSvg4.dll
312  ${QT_BINARY_DIR}/QtXml4.dll
313  ${QT_BINARY_DIR}/QtNetwork4.dll
314  ${QT_BINARY_DIR}/QtSql4.dll
315  ${QT_BINARY_DIR}/QtWebKit4.dll
316  # VTK dependencies
317  ${VTK_DIR}/../../bin/QVTK.dll
318  ${VTK_DIR}/../../bin/vtkCommon.dll
319  ${VTK_DIR}/../../bin/vtksys.dll
320  ${VTK_DIR}/../../bin/vtkFiltering.dll
321  ${VTK_DIR}/../../bin/vtkGraphics.dll
322  ${VTK_DIR}/../../bin/vtkHybrid.dll
323  ${VTK_DIR}/../../bin/vtkIO.dll
324  ${VTK_DIR}/../../bin/vtkImaging.dll
325  ${VTK_DIR}/../../bin/vtkRendering.dll
326  ${VTK_DIR}/../../bin/vtkVolumeRendering.dll
327  ${VTK_DIR}/../../bin/vtkverdict.dll
328  ${VTK_DIR}/../../bin/vtkDICOMParser.dll
329  ${VTK_DIR}/../../bin/vtkNetCDF.dll
330  ${VTK_DIR}/../../bin/vtkNetCDF_cxx.dll
331  ${VTK_DIR}/../../bin/vtkexpat.dll
332  ${VTK_DIR}/../../bin/vtkjpeg.dll
333  ${VTK_DIR}/../../bin/vtkmetaio.dll
334  ${VTK_DIR}/../../bin/vtkpng.dll
335  ${VTK_DIR}/../../bin/vtktiff.dll
336  ${VTK_DIR}/../../bin/vtkzlib.dll
337  ${VTK_DIR}/../../bin/vtkInfovis.dll
338  ${VTK_DIR}/../../bin/vtkfreetype.dll
339  ${VTK_DIR}/../../bin/vtkftgl.dll
340  ${VTK_DIR}/../../bin/vtkalglib.dll
341  ${VTK_DIR}/../../bin/vtklibxml2.dll
342  ${VTK_DIR}/../../bin/vtkViews.dll
343  ${VTK_DIR}/../../bin/vtkexoIIc.dll
344  ${VTK_DIR}/../../bin/vtkWidgets.dll
345  ${VTK_DIR}/../../bin/vtkhdf5.dll
346  ${VTK_DIR}/../../bin/vtkhdf5_hl.dll
347  ${VTK_DIR}/../../bin/LSDyna.dll
348  # Xerces-c dependency
349  ${XERCESC_ROOT_DIR}/bin/xerces-c_3_1.dll
350  # Libxml2 dependencies
351  ${LIBXML2_INCLUDE_DIR}/../bin/iconv.dll
352  ${LIBXML2_INCLUDE_DIR}/../bin/libxml2.dll
353  ${LIBXML2_INCLUDE_DIR}/../bin/zlib1.dll
354  # ITK dependency
355  ${ITK_DIR}/../../bin/ITKCommon.dll
356  )
357  endif()
358 
359  # Copy those dependencies DLLs if packaging on Windows.
360  if (PACKAGING_NSIS)
361  include(InstallRequiredSystemLibraries)
362  endif()
363 
364  # Application icon
365  set(CAMITK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}\\\\core\\\\resources\\\\appIcon.ico") #set here the current icon for CamiTK apps
366  set(CPACK_PACKAGE_ICON ${CAMITK_PACKAGE_ICON}) #icon for the top bar NSIS installer
367  set(CPACK_NSIS_MUI_ICON ${CAMITK_PACKAGE_ICON}) #icon for the generated install program (the .exe to run to install CamiTK).
368  set(CPACK_NSIS_MUI_UNIICON ${CAMITK_PACKAGE_ICON}) #icon for the generated uninstall program (the .exe to run to uninstall CamiTK).
369 
370 
371  # Installer name
372  set(CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_NAME} ${CAMITK_VERSION_MAJOR}.${CAMITK_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
373  set(CPACK_NSIS_INSTALLED_ICON_NAME ${CPACK_PACKAGE_NAME})
374 
375  set(CPACK_PACKAGE_INSTALL_DIRECTORY ${CPACK_PACKAGE_NAME})
376  set(CPACK_NSIS_HELP_LINK "http:\\\\\\\\camitk.imag.fr")
377  set(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\camitk.imag.fr")
378  set(CPACK_NSIS_CONTACT ${CPACK_PACKAGE_CONTACT})
379  include(InstallRequiredSystemLibraries)
380  else()
381  message(STATUS "Can not find makensis: nsis packaging is not possible")
382  endif()
383 
384 endif()
385 
386 # ---------------
387 # Mac App Bundle
388 # ---------------
389 if(APPLE)
390  # TODO test this!
391  set(CPACK_GENERATOR "PackageMaker")
392  # Libraries are bundled directly
393  set(CPACK_COMPONENT_LIBRARIES_HIDDEN TRUE)
394  # Bundle Properties
395  set(MACOSX_BUNDLE_BUNDLE_NAME ${CPACK_PACKAGE_NAME})
396  set(MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION})
397  set(MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION})
398  set(MACOSX_BUNDLE_LONG_VERSION_STRING "Version ${PROJECT_VERSION}")
399 endif()
400 
401 # and here we go...
402 include(CPack)
403 
404 # ----------------------------
405 # CamiTK's own package (.cep)
406 # ----------------------------
407 # TODO install a CEP in CamiTK
408 # TODO CamiTK Market Place
409 set(CEP_PACKAGING_DIR "${CMAKE_BINARY_DIR}/CamiTKExtensionPackage")
410 set(CEP_PACKAGE_NAME "${CPACK_PACKAGE_NAME}_${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.cep")
411 
412 # simply target name so that the custom target name does not contains any space
413 string(REGEX REPLACE " " "" SIMPLIFIED_PROJECT_NAME ${PROJECT_NAME})
414 
415 add_custom_target(camitk_extension_${SIMPLIFIED_PROJECT_NAME}_package
416  # configure for packaging
417  COMMAND ${CMAKE_COMMAND} -DPACKAGING_NSIS:BOOL=ON ${CMAKE_BINARY_DIR}
418  # build first
419  COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR}
420  # clean CEP package structure
421  COMMAND ${CMAKE_COMMAND} -E remove_directory "${CEP_PACKAGING_DIR}"
422  COMMAND ${CMAKE_COMMAND} -E remove -f ${CMAKE_BINARY_DIR}/${CEP_PACKAGE_NAME}
423  COMMAND ${CMAKE_COMMAND} -E make_directory "${CEP_PACKAGING_DIR}"
424  COMMAND ${CMAKE_COMMAND} -E make_directory "${CEP_PACKAGING_DIR}/share/${CAMITK_SHORT_VERSION_STRING}/cep"
425  # copy all cep files
426  COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_BINARY_DIR}/lib" "${CEP_PACKAGING_DIR}/lib"
427  COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_BINARY_DIR}/bin" "${CEP_PACKAGING_DIR}/bin"
428  COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_BINARY_DIR}/include" "${CEP_PACKAGING_DIR}/include"
429  COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_BINARY_DIR}/share" "${CEP_PACKAGING_DIR}/share"
430  # copy cep manifest
431  COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/CEPPackageManifest.xml ${CEP_PACKAGING_DIR}/share/${CAMITK_SHORT_VERSION_STRING}/cep/${CPACK_PACKAGE_NAME}.xml
432  # compress
433  COMMAND ${CMAKE_COMMAND} -E tar cvz "${CMAKE_BINARY_DIR}/${CEP_PACKAGE_NAME}" "${CEP_PACKAGING_DIR}/"
434  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
435  # configure back for normal build
436  COMMAND ${CMAKE_COMMAND} -DPACKAGING_NSIS:BOOL=OFF ${CMAKE_BINARY_DIR}
437  COMMENT "Building ${CEP_PACKAGE_NAME}"
438 )
439 
440 #-- Build Manifest
441 # get the time stamp
442 execute_process(COMMAND "${CAMITK_DIR}/bin/camitk-config" "--timeStamp"
443  RESULT_VARIABLE CAMITK_CONFIG_TIMESTAMP_RETURN_CODE
444  OUTPUT_VARIABLE CAMITK_CONFIG_TIMESTAMP_OUTPUT
445  ERROR_VARIABLE CAMITK_CONFIG_TIMESTAMP_OUTPUT_ERROR
446  OUTPUT_STRIP_TRAILING_WHITESPACE
447  ERROR_STRIP_TRAILING_WHITESPACE
448 )
449 
450 # Generate XML
451 set(CEP_PACKAGE_MANIFEST_XML "<?xml version=\"1.0\"?>\n<cep>")
452 set(CEP_PACKAGE_MANIFEST_XML ${CEP_PACKAGE_MANIFEST_XML} " <!-- CamiTK Extension Project Manifest File -->")
453 set(CEP_PACKAGE_MANIFEST_XML ${CEP_PACKAGE_MANIFEST_XML} " <name>${CPACK_PACKAGE_NAME}</name>")
454 set(CEP_PACKAGE_MANIFEST_XML ${CEP_PACKAGE_MANIFEST_XML} " <contact>${CAMITK_CEP_PACKAGING_CONTACT}</contact>")
455 set(CEP_PACKAGE_MANIFEST_XML ${CEP_PACKAGE_MANIFEST_XML} " <description>${CAMITK_CEP_PACKAGING_DESCRIPTION}</description>")
456 set(CEP_PACKAGE_MANIFEST_XML ${CEP_PACKAGE_MANIFEST_XML} " <license>${CAMITK_CEP_PACKAGING_LICENSE}</license>")
457 if (NOT CAMITK_CONFIG_TIMESTAMP_RETURN_CODE)
458  set(CEP_PACKAGE_MANIFEST_XML ${CEP_PACKAGE_MANIFEST_XML} " <timeStamp>${CAMITK_CONFIG_TIMESTAMP_OUTPUT}</timeStamp>")
459 endif()
460 set(CEP_PACKAGE_MANIFEST_XML ${CEP_PACKAGE_MANIFEST_XML} " <actions>")
461 foreach(TARGET_NAME_ITERATOR ${CAMITK_ACTION_TARGETS})
462  string(REPLACE "action-" "" TARGET_NAME ${TARGET_NAME_ITERATOR})
463  set(CEP_PACKAGE_MANIFEST_XML ${CEP_PACKAGE_MANIFEST_XML} " <action>${TARGET_NAME}</action>")
464 endforeach()
465 set(CEP_PACKAGE_MANIFEST_XML ${CEP_PACKAGE_MANIFEST_XML} " </actions>")
466 set(CEP_PACKAGE_MANIFEST_XML ${CEP_PACKAGE_MANIFEST_XML} " <components>")
467 foreach(TARGET_NAME_ITERATOR ${CAMITK_COMPONENT_TARGETS})
468  string(REPLACE "component-" "" TARGET_NAME ${TARGET_NAME_ITERATOR})
469  set(CEP_PACKAGE_MANIFEST_XML ${CEP_PACKAGE_MANIFEST_XML} " <component>${TARGET_NAME}</component>")
470 endforeach()
471 set(CEP_PACKAGE_MANIFEST_XML ${CEP_PACKAGE_MANIFEST_XML} " </components>")
472 set(CEP_PACKAGE_MANIFEST_XML ${CEP_PACKAGE_MANIFEST_XML} " <libraries>")
473 foreach(TARGET_NAME_ITERATOR ${CAMITK_CEP_LIBRARY_TARGETS})
474  set(CEP_PACKAGE_MANIFEST_XML ${CEP_PACKAGE_MANIFEST_XML} " <library>${TARGET_NAME_ITERATOR}</library>")
475 endforeach()
476 set(CEP_PACKAGE_MANIFEST_XML ${CEP_PACKAGE_MANIFEST_XML} " </libraries>")
477 set(CEP_PACKAGE_MANIFEST_XML ${CEP_PACKAGE_MANIFEST_XML} " <applications>")
478 foreach(TARGET_NAME_ITERATOR ${CAMITK_APPLICATION_TARGETS})
479  string(REPLACE "application-" "" TARGET_NAME ${TARGET_NAME_ITERATOR})
480  set(CEP_PACKAGE_MANIFEST_XML ${CEP_PACKAGE_MANIFEST_XML} " <application>${TARGET_NAME}</application>")
481 endforeach()
482 set(CEP_PACKAGE_MANIFEST_XML ${CEP_PACKAGE_MANIFEST_XML} " </applications>")
483 set(CEP_PACKAGE_MANIFEST_XML ${CEP_PACKAGE_MANIFEST_XML} "</cep>")
484 # replace all "" by \n
485 string (REGEX REPLACE "([^\\]|^)" "\\1\n" CEP_PACKAGE_MANIFEST_XML_TMP "${CEP_PACKAGE_MANIFEST_XML}")
486 string (REGEX REPLACE "[\\](.)" "\\1" CEP_PACKAGE_MANIFEST_XML_TEXT "${CEP_PACKAGE_MANIFEST_XML_TMP}") #fixes escaping
487 # write manifest
488 file(WRITE ${CMAKE_BINARY_DIR}/CEPPackageManifest.xml ${CEP_PACKAGE_MANIFEST_XML_TEXT})
489 message(STATUS "Generated CEP manifest in CEPPackageManifest.xml")
490 
491 
492 endif() # Standalone CEP
493 end(){)
A pseudo-namespace used to group CMake macros and functions.
const char * description
Definition: applications/cepgenerator/main.cpp:37
get_filename_component(OUTFILE ${CAMITK_TEST_PASS_FILE} NAME) set(CAMITK_TEST_COMMAND_OUTPUT_FILE $
This CMake file run a command and put the output in a given file.
Definition: CamiTKTestCompareFile.h:11
parse_arguments()
macro parse_arguments is a fork from CMakeMacroParseArguments see http://www.cmake.org/Wiki/CMakeMacroParseArguments for more information
Definition: ParseArguments.h:13
camitk_cep_packaging()
CamiTK cep packaging allows you to build a package from a CEP If README and COPYRIGHT files exists at...
Definition: CamiTKCEPPackaging.h:28
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
static void include(QRect &r, const QRect &rect)
Definition: canvas_typed/qtcanvas.cpp:98