Blame view

packaging.cmake 3.9 KB
772ec5a4   Peter M. Groen   Added cmake envir...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
  set( PACKAGING_CURRENT_CMAKE_DIR ${CMAKE_CURRENT_LIST_DIR} )
  
  # @brief Creates component packages. Can be executed by calling "make package".
  function(package_component)
  
  # Determine build architecture
  execute_process(
      COMMAND uname -m
      COMMAND tr -d '\n'
      OUTPUT_VARIABLE ARCHITECTURE
  )
  
  # Set package name
  # Known issue: Due to the way cpack works (only evaluated once), the PROJECT_NAME will be the last package to
  # call this function. We worked around this by including packaging.cmake only from 1 location in the repository.
  # However, in a superbuild (i.e. from an mlogic parent directory building all repositories at once),
  # this will yield an erroneous package name (usually datacollector, as that is the last project to be evaluated).
  # In order to prevent dynamic package names caused by different build directories,
  # The package name is set to a fixed value. The actual name of the rpm and package will be determined by
  # other variable values such as the component name and version, leading to uniquely identifiable packages.
  set(CPACK_PACKAGE_NAME osdev)
  
  # Set package version numbers
  set(CPACK_PACKAGE_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}")
  set(CPACK_PACKAGE_VERSION_MINOR "${PROJECT_VERSION_MINOR}")
  set(CPACK_PACKAGE_VERSION_PATCH "${PROJECT_VERSION_PATCH}")
  # The release number is not part of CPACK_PACKAGE_VERSION and is dealt with seperately (see below)
  set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
  message( STATUS "Packaging ${CPACK_PACKAGE_NAME} ${CPACK_PACKAGE_VERSION} for ${ARCHITECTURE}.")
  
  set(CPACK_PACKAGE_RELEASE "1")
  if (CURRENT_PROJECT_VERSION_RELEASENR)
      set(CPACK_PACKAGE_RELEASE ${CURRENT_PROJECT_VERSION_RELEASENR})
  endif()
  
  # Build CPack driven installer packages
  include(InstallRequiredSystemLibraries)
  
  # This doesn't seem to work, only the specific archive variables (_RPM_, _DEB_) seem to work
  #set(CPACK_ARCHIVE_COMPONENT_INSTALL ON)
  set(CPACK_COMPONENTS_IGNORE_GROUPS 1)
  # Enable the line below if the repository being built has only 1 target that's installed
  # (No longer necessary, as we now have at least 2 components: runtime and development components.)
  #set(CPACK_COMPONENTS_ALL ${CPACK_PACKAGE_NAME} ${CPACK_PACKAGE_NAME}-devel)
  
  # Enable DESTDIR and copy CMAKE_INSTALL_PREFIX, which requires disabling rpm relocatability
  set(CPACK_SET_DESTDIR 1)
  set(CPACK_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})
  set(CPACK_PACKAGE_RELOCATABLE OFF)
  
  # Set package metadata
  if (EXISTS "${PACKAGING_CURRENT_CMAKE_DIR}/../../../COPYING.OSDEV")
      set(CPACK_RESOURCE_FILE_LICENSE "${PACKAGING_CURRENT_CMAKE_DIR}/../../../COPYING.OSDEV")
  endif()
  if (EXISTS "${PACKAGING_CURRENT_CMAKE_DIR}/../../../README.md")
      set(CPACK_RESOURCE_FILE_README "${PACKAGING_CURRENT_CMAKE_DIR}/../../../README.md")
  endif()
  set(CPACK_SYSTEM_NAME "${ARCHITECTURE}")
  set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}.${CURRENT_PROJECT_VERSION_LETTER}-${CPACK_PACKAGE_RELEASE}.${ARCHITECTURE}")
  
  # RPM specific fields
  set(CPACK_RPM_PACKAGE_ARCHITECTURE "${ARCHITECTURE}")
  set(CPACK_RPM_COMPONENT_INSTALL ON)
  set(CPACK_RPM_PACKAGE_GROUP "${CPACK_PACKAGE_NAME}-${REPOSITORY_PACKAGE_NAME}")
  # Unfortunately, CPACK_RPM_PACKAGE_RELEASE isn't inherited from CPACK_PACKAGE_RELEASE automatically.
  set(CPACK_RPM_PACKAGE_RELEASE ${CPACK_PACKAGE_RELEASE})
  set(CPACK_RPM_PACKAGE_VENDOR ${CURRENT_PROJECT_MANUFACTURER_CODE})
  set(CPACK_RPM_PACKAGE_SUMMARY "${CPACK_PACKAGE_NAME} package")
  set(CPACK_RPM_PACKAGE_DESCRIPTION "${CPACK_RPM_PACKAGE_SUMMARY}")
  set(CPACK_RPM_PACKAGE_LICENSE "${CURRENT_PROJECT_MANUFACTURER_CODE}")
  
  # Select CPack generators
  set(CPACK_GENERATOR "RPM")
  
  # Exclude certain system directories from the rpm
  set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION /usr;/etc;/etc/systemd;/var;${USR_LOCAL_DIR};${LD_SO_CONF_D_DIR};${SYSTEMD_CONFIG_DIR};${VAR_LOG_DIR};${VAR_RUN_DIR})
  
  # This line should come last
  include(CPack)
  
  endfunction(package_component)