diff options
author | Damjan Marion <damarion@cisco.com> | 2018-09-13 20:02:12 +0200 |
---|---|---|
committer | Marco Varlese <marco.varlese@suse.de> | 2018-09-14 14:00:51 +0000 |
commit | eeadc14ee2c945eb53ae4cc3c6262499e896afb5 (patch) | |
tree | 544d348cf19b7635dee5eb266b83827ecd8801ce /src/cmake/pack.cmake | |
parent | 77bc1a5fb1d5b08e9fc24fc1190a5d640aabd2a1 (diff) |
cpack: add deb/rpm packaging to VPP module
This allows easy packaging of external projects, including
VOM and sample plugin.
i.e.
$ make -C build-root PLATFORM=vpp TAG=vpp sample-plugin-install
$ ninja -C build-root/build-vpp-native/sample-plugin package
ninja: Entering directory `build-root/build-vpp-native/sample-plugin'
[0/1] Run CPack packaging tool...
CPack: Create package using DEB
CPack: Install projects
CPack: - Install project: sample-plugin
CPack: - Install component: vpp-plugin-sample
CPack: - Install component: vpp-plugin-sample-dev
CPack: Create package
CPack: - package: build-root/build-vpp-native/sample-plugin/vpp-plugin-sample_18.10~rc0~413~g1433e9d1-1_amd64.deb generated.
CPack: - package: build-root/build-vpp-native/sample-plugin/vpp-plugin-sample-dev_18.10~rc0~413~g1433e9d1-1_amd64.deb generated.
Change-Id: I6b3ec2433961e53edd976b19659ce214d272c40a
Signed-off-by: Damjan Marion <damarion@cisco.com>
Diffstat (limited to 'src/cmake/pack.cmake')
-rw-r--r-- | src/cmake/pack.cmake | 94 |
1 files changed, 78 insertions, 16 deletions
diff --git a/src/cmake/pack.cmake b/src/cmake/pack.cmake index 328896610d0..1df19811f5b 100644 --- a/src/cmake/pack.cmake +++ b/src/cmake/pack.cmake @@ -14,19 +14,81 @@ ############################################################################## # DEB Packaging ############################################################################## -set(CPACK_GENERATOR "DEB") -set(CPACK_DEBIAN_PACKAGE_MAINTAINER "VPP Team") -set(CPACK_PACKAGE_NAME "vpp") -set(CPACK_PACKAGE_VENDOR "fd.io") -set(CPACK_PACKAGE_VERSION "18.10") -set(CPACK_DEB_COMPONENT_INSTALL ON) -set(CPACK_COMPONENTS_IGNORE_GROUPS 1) - -get_cmake_property(components COMPONENTS) -foreach(lc ${components}) - string(TOUPPER ${lc} uc) - set(CPACK_DEBIAN_${uc}_PACKAGE_NAME "${lc}") - set(CPACK_DEBIAN_${uc}_FILE_NAME "${lc}.deb") -endforeach() - -include(CPack) + +macro(add_vpp_packaging name) + cmake_parse_arguments(ARG + "" + "NAME;DESCRIPION;VENDOR" + "" + ${ARGN} + ) + + # parse /etc/os-release + file(READ "/etc/os-release" os_version) + string(REPLACE "\n" ";" os_version ${os_version}) + foreach(_ver ${os_version}) + string(REPLACE "=" ";" _ver ${_ver}) + list(GET _ver 0 _name) + list(GET _ver 1 _value) + set(OS_${_name} ${_value}) + endforeach() + + # extract version from git + execute_process( + COMMAND git describe --long --match v* + OUTPUT_VARIABLE VER + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + string(REGEX REPLACE "v(.*)-([0-9]+)-(g[0-9a-f]+)" "\\1;\\2;\\3" VER ${VER}) + list(GET VER 0 tag) + string(REPLACE "-" "~" tag ${tag}) + list(GET VER 1 commit_num) + list(GET VER 2 commit_name) + + #define DEB and RPM version numbers + if(${commit_num} EQUAL 0) + set(deb_ver "${tag}") + set(rpm_ver "${tag}") + else() + set(deb_ver "${tag}~${commit_num}~${commit_name}") + set(rpm_ver "${tag}~${commit_num}_${commit_name}") + endif() + + get_cmake_property(components COMPONENTS) + + if(OS_ID_LIKE MATCHES "debian") + set(CPACK_GENERATOR "DEB") + set(type "DEBIAN") + set(CPACK_PACKAGE_VERSION "${deb_ver}") + set(CPACK_DEBIAN_PACKAGE_MAINTAINER "VPP Team") + set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT) + foreach(lc ${components}) + string(TOUPPER ${lc} uc) + set(CPACK_DEBIAN_${uc}_PACKAGE_NAME "${lc}") + endforeach() + elseif(OS_ID_LIKE MATCHES "rhel") + set(CPACK_GENERATOR "RPM") + set(type "RPM") + set(CPACK_PACKAGE_VERSION "${rpm_ver}") + set(CPACK_RPM_FILE_NAME RPM-DEFAULT) + foreach(lc ${components}) + string(TOUPPER ${lc} uc) + if(${lc} MATCHES ".*-dev") + set(CPACK_RPM_${uc}_DEBUGINFO_PACKAGE ON) + set(lc ${lc}el) + endif() + set(CPACK_RPM_${uc}_PACKAGE_NAME "${lc}") + endforeach() + endif() + + if(CPACK_GENERATOR) + set(CPACK_PACKAGE_NAME ${ARG_NAME}) + set(CPACK_STRIP_FILES OFF) + set(CPACK_PACKAGE_VENDOR "${ARG_VENDOR}") + set(CPACK_COMPONENTS_IGNORE_GROUPS 1) + set(CPACK_${CPACK_GENERATOR}_COMPONENT_INSTALL ON) + set(CPACK_${type}_PACKAGE_DESCRIPTION "${ARG_DESCRIPTION}") + set(CPACK_${type}_PACKAGE_RELEASE 1) + include(CPack) + endif() +endmacro() |