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