From eeadc14ee2c945eb53ae4cc3c6262499e896afb5 Mon Sep 17 00:00:00 2001 From: Damjan Marion Date: Thu, 13 Sep 2018 20:02:12 +0200 Subject: 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 --- src/cmake/pack.cmake | 94 +++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 78 insertions(+), 16 deletions(-) (limited to 'src/cmake/pack.cmake') 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() -- cgit 1.2.3-korg