/
Packaging Libraries for Linux Distributions with CMake

Packaging Libraries for Linux Distributions with CMake

Libraries for message parsing, message routing, logging, and others will need to be packaged for easier inclusion into build/run environments for xAPPs. This page contains notes on various methods for generating packages in Debian (.deb) and RedHat Package Manager (.rpm) formats.

Using CMake

CMake is a build tool generally used for describing and building complex C applications, but is also makes the generation of packages (e.g. .deb or .rpm) very simple. The CPACK extension to CMake is used to generate the necessary rules in a project's Makefile such that the command make package will create all packages.    At a high level, package creation via CMake is accomplished by defining a set of CPACK related variables, and then including the Cpack module.  The following code sample illustrates this:


CMake Sample
IF( EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake" )
  include( InstallRequiredSystemLibraries )

  set( CPACK_SET_DESTDIR "on" )
  set( CPACK_PACKAGING_INSTALL_PREFIX "${install_root}" )
  set( CPACK_GENERATOR "DEB;RPM" )

  set( CPACK_PACKAGE_DESCRIPTION "<description text>" )
  set( CPACK_PACKAGE_DESCRIPTION_SUMMARY "<very short description>" )
  set( CPACK_PACKAGE_VENDOR "None" )
  set( CPACK_PACKAGE_CONTACT "None" )
  set( CPACK_PACKAGE_VERSION_MAJOR "${major_version}" )
  set( CPACK_PACKAGE_VERSION_MINOR "${minor_version}" )
  set( CPACK_PACKAGE_VERSION_PATCH "${patch_level}" )
  set( CPACK_PACKAGE_FILE_NAME
    "${CMAKE_PROJECT_NAME}_${major_version}.${minor_version}.${CPACK_PACKAGE_VERSION_PATCH}${spoiled_str}" )
  set( CPACK_SOURCE_PACKAGE_FILE_NAME 
    "vric${CMAKE_PROJECT_NAME}_${major_version}.${minor_version}.${CPACK_PACKAGE_VERSION_PATCH}" )

  # omit if not required
  set( CPACK_DEBIAN_PACKAGE_DEPENDS "barpkg ( >= 1.1.4 ), foopkg ( >= 1.1.1 )" )
  set( CPACK_RPM_PACKAGE_REQUIRES "barpkg >= 2.5.0, foopkg >= 2.8" )

  set( CPACK_DEBIAN_PACKAGE_PRIORITY "optional" )
  set( CPACK_DEBIAN_PACKAGE_SECTION "ric" )
  set( CPACK_DEBIAN_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR} )
  set( CPACK_RPM_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR} )

  INCLUDE( CPack )
ENDIF()



When generating .rpm packages on a Ubuntu based system (assumed in the example above) the alien package must be installed on the system (in the container) such that the rpmbuild command is available. CMake has a deep set of documentation:  CMake Documentation


Related content

RMR Building From Source
RMR Building From Source
More like this
xApp Framework for CXX (xapp-frame-cpp)
xApp Framework for CXX (xapp-frame-cpp)
More like this
Binary Repositories at PackageCloud.io
Binary Repositories at PackageCloud.io
More like this
Repo Indexes
Repo Indexes
More like this
RMR Manual Pages
RMR Manual Pages
More like this
App Builder Containers
App Builder Containers
More like this