Libraries for 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.
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:
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