From 99c201964ab7514e55d66ad2ca5bbe68440bd75b Mon Sep 17 00:00:00 2001 From: Damjan Marion Date: Tue, 3 Jan 2017 19:56:43 +0100 Subject: fix version.h generation for out-of-tree builds Change-Id: Ic882f5aec74858a36533ed8cd61a7726947dceef Signed-off-by: Damjan Marion --- src/scripts/version | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100755 src/scripts/version (limited to 'src/scripts/version') diff --git a/src/scripts/version b/src/scripts/version new file mode 100755 index 00000000..af447286 --- /dev/null +++ b/src/scripts/version @@ -0,0 +1,54 @@ +#!/bin/bash + +path=$( cd "$(dirname "${BASH_SOURCE}")" ; pwd -P ) + +cd "$path" + +git rev-parse 2> /dev/null +if [ $? == 0 ]; then + vstring=$(git describe) +elif [ -f .version ]; then + vstring=$(cat .version) +else + if [ -f ../rpm/*.gz ]; then + vstring=$(ls ../rpm/*.gz) + else + exit 1 + fi +fi + +TAG=$(echo ${vstring} | cut -d- -f1 | sed -e 's/^v//') +ADD=$(echo ${vstring} | cut -s -d- -f2) + +git rev-parse 2> /dev/null +if [ $? == 0 ]; then + CMT=$(git describe --dirty --match 'v*'| cut -s -d- -f3,4) +else + CMT=$(echo ${vstring} | cut -s -d- -f3,4) +fi +CMTR=$(echo $CMT | sed 's/-/_/') + +if [ -n "${BUILD_NUMBER}" ]; then + BLD="~b${BUILD_NUMBER}" +fi + +if [ "$1" = "rpm-version" ]; then + echo ${TAG} + exit +fi + +if [ "$1" = "rpm-release" ]; then + [ -z "${ADD}" ] && echo release && exit + echo ${ADD}${CMTR:+~${CMTR}}${BLD} + exit +fi + + if [ -n "${ADD}" ]; then + if [ "$1" = "rpm-string" ]; then + echo ${TAG}-${ADD}${CMTR:+~${CMTR}}${BLD} + else + echo ${TAG}-${ADD}${CMT:+~${CMT}}${BLD} + fi + else + echo ${TAG} +fi -- cgit 1.2.3-korg From 926c706df90b4bc13990d6ed9128abf5ce874b14 Mon Sep 17 00:00:00 2001 From: Damjan Marion Date: Sat, 21 Jan 2017 00:04:30 +0100 Subject: Fix issue in rpm versioning for release builds Change-Id: I562f93017ee90b0828d36624dca694c04e332a74 Signed-off-by: Damjan Marion --- src/scripts/version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/scripts/version') diff --git a/src/scripts/version b/src/scripts/version index af447286..d92eb8b7 100755 --- a/src/scripts/version +++ b/src/scripts/version @@ -50,5 +50,5 @@ fi echo ${TAG}-${ADD}${CMT:+~${CMT}}${BLD} fi else - echo ${TAG} + echo ${TAG}-release fi -- cgit 1.2.3-korg From c06eeb0e3c9c1a9fa8f913e2d785b03220bfdabd Mon Sep 17 00:00:00 2001 From: Damjan Marion Date: Tue, 18 Apr 2017 15:26:39 +0200 Subject: Fix "make dist" to include version number, docouple it from rpm packaging Change-Id: If2f9976d668089026c97b897cf449bff09050631 Signed-off-by: Damjan Marion --- Makefile | 28 +++-- build-data/platforms.mk | 17 --- build-root/rpm/vpp.service | 14 --- build-root/rpm/vpp.spec | 298 -------------------------------------------- build-root/scripts/verdist | 31 ----- extras/rpm/Makefile | 30 +++++ extras/rpm/vpp.service | 14 +++ extras/rpm/vpp.spec | 299 +++++++++++++++++++++++++++++++++++++++++++++ src/scripts/version | 12 +- 9 files changed, 367 insertions(+), 376 deletions(-) delete mode 100644 build-root/rpm/vpp.service delete mode 100644 build-root/rpm/vpp.spec delete mode 100755 build-root/scripts/verdist create mode 100644 extras/rpm/Makefile create mode 100644 extras/rpm/vpp.service create mode 100644 extras/rpm/vpp.spec (limited to 'src/scripts/version') diff --git a/Makefile b/Makefile index 133c3d45..791127a7 100644 --- a/Makefile +++ b/Makefile @@ -214,18 +214,30 @@ else $(shell $(BR)/scripts/version > $(BR)/scripts/.version) endif -dist: $(BR)/scripts/.version - $(MAKE) verstring=$(PLATFORM)-$(shell cat $(BR)/scripts/.version) prefix=$(PLATFORM) distversion - -distversion: $(BR)/scripts/.version - $(BR)/scripts/verdist ${BR} ${prefix}-$(shell $(BR)/scripts/version rpm-version) ${verstring} - mv $(verstring).tar.gz $(BR)/rpm +DIST_FILE = $(BR)/vpp-$(shell src/scripts/version).tar +DIST_SUBDIR = vpp-$(shell src/scripts/version|cut -f1 -d-) + +dist: + @git archive \ + --prefix=$(DIST_SUBDIR)/ \ + --format=tar \ + -o $(DIST_FILE) \ + HEAD + @git describe > $(BR)/.version + @tar --append \ + --file $(DIST_FILE) \ + --transform='s,.*/.version,$(DIST_SUBDIR)/src/scripts/.version,' \ + $(BR)/.version + @$(RM) $(BR)/.version $(DIST_FILE).xz + @xz -v --threads=0 $(DIST_FILE) + @$(RM) $(BR)/vpp-latest.tar.xz + @ln -rs $(DIST_FILE).xz $(BR)/vpp-latest.tar.xz build: $(BR)/.bootstrap.ok $(call make,$(PLATFORM)_debug,vpp-install) wipedist: - $(RM) $(BR)/scripts/.version $(BR)/rpm/*.tar.gz + @$(RM) $(BR)/*.tar.xz wipe: wipedist $(BR)/.bootstrap.ok $(call make,$(PLATFORM)_debug,vpp-wipe) @@ -351,7 +363,7 @@ pkg-deb: $(call make,$(PLATFORM),install-deb) pkg-rpm: dist - $(call make,$(PLATFORM),install-rpm) + make -C extras/rpm dpdk-install-dev: make -C dpdk install-$(PKG) diff --git a/build-data/platforms.mk b/build-data/platforms.mk index f491ee59..7904cc40 100644 --- a/build-data/platforms.mk +++ b/build-data/platforms.mk @@ -94,20 +94,3 @@ install-deb: $(patsubst %,%-find-source,$(ROOT_PACKAGES)) dpkg-buildpackage -us -uc -b \ ) -.PHONY: install-rpm -install-rpm: $(patsubst %,%-find-source,$(ROOT_PACKAGES)) - @$(BUILD_ENV) ; \ - set -eu$(BUILD_DEBUG) ; \ - $(MAKE) -C $(MU_BUILD_ROOT_DIR) \ - $(patsubst %,%-install, \ - $(ROOT_PACKAGES)) || exit 1; \ - \ - cd rpm ; \ - mkdir -p SOURCES ; \ - if test -f *.tar.gz ; then mv *.tar.gz SOURCES ; fi ; \ - rpmbuild -bb --define "_topdir $$PWD" --define \ - "_install_dir $(INSTALL_PREFIX)$(ARCH)" \ - --define "_mu_build_root_dir $(MU_BUILD_ROOT_DIR)" \ - vpp.spec ; \ - mv $$(find RPMS -name \*.rpm -type f) .. - diff --git a/build-root/rpm/vpp.service b/build-root/rpm/vpp.service deleted file mode 100644 index 40bf9d48..00000000 --- a/build-root/rpm/vpp.service +++ /dev/null @@ -1,14 +0,0 @@ -[Unit] -Description=Vector Packet Processing Process -After=syslog.target network.target auditd.service - -[Service] -ExecStartPre=-/bin/rm -f /dev/shm/db /dev/shm/global_vm /dev/shm/vpe-api -ExecStartPre=-/sbin/modprobe uio_pci_generic -ExecStart=/usr/bin/vpp -c /etc/vpp/startup.conf -Type=simple -Restart=on-failure -RestartSec=5s - -[Install] -WantedBy=multi-user.target diff --git a/build-root/rpm/vpp.spec b/build-root/rpm/vpp.spec deleted file mode 100644 index 2cfe67c5..00000000 --- a/build-root/rpm/vpp.spec +++ /dev/null @@ -1,298 +0,0 @@ -%define _mu_build_dir %{_mu_build_root_dir} -%define _vpp_install_dir %{_install_dir} -%define _vpp_build_dir build-tool-native -%define _unitdir /lib/systemd/system -%define _topdir %(pwd) -%define _builddir %{_topdir} -%define _version %(../scripts/version rpm-version) -%define _release %(../scripts/version rpm-release) - -# Failsafe backport of Python2-macros for RHEL <= 6 -%{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")} -%{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")} -%{!?python_version: %global python_version %(%{__python} -c "import sys; sys.stdout.write(sys.version[:3])")} -%{!?__python2: %global __python2 %{__python}} -%{!?python2_sitelib: %global python2_sitelib %{python_sitelib}} -%{!?python2_sitearch: %global python2_sitearch %{python_sitearch}} -%{!?python2_version: %global python2_version %{python_version}} - -%{!?python2_minor_version: %define python2_minor_version %(%{__python} -c "import sys ; print sys.version[2:3]")} - -%{?systemd_requires} - -Name: vpp -Summary: Vector Packet Processing -License: MIT -Version: %{_version} -Release: %{_release} -Requires: vpp-lib = %{_version}-%{_release}, net-tools, pciutils, python -BuildRequires: systemd, chrpath - -Source: %{name}-%{_version}-%{_release}.tar.gz - -%description -This package provides VPP executables: vpp, vpp_api_test, vpp_json_test -vpp - the vector packet engine -vpp_api_test - vector packet engine API test tool -vpp_json_test - vector packet engine JSON test tool - -%package lib -Summary: VPP libraries -Group: System Environment/Libraries - -%description lib -This package contains the VPP shared libraries, including: -vppinfra - foundation library supporting vectors, hashes, bitmaps, pools, and string formatting. -svm - vm library -vlib - vector processing library -vlib-api - binary API library -vnet - network stack library - -%package devel -Summary: VPP header files, static libraries -Group: Development/Libraries -Requires: vpp-lib - -%description devel -This package contains the header files for VPP. -Install this package if you want to write a -program for compilation and linking with vpp lib. -vlib -vlibmemory -vnet - devices, classify, dhcp, ethernet flow, gre, ip, etc. -vpp-api -vppinfra - -%package plugins -Summary: Vector Packet Processing--runtime plugins -Group: System Environment/Libraries -Requires: vpp = %{_version}-%{_release} -%description plugins -This package contains VPP plugins - -%package api-lua -Summary: VPP api lua bindings -Group: Development/Libraries -Requires: vpp = %{_version}-%{_release}, vpp-lib = %{_version}-%{_release} - -%description api-lua -This package contains the lua bindings for the vpp api - -%package api-java -Summary: VPP api java bindings -Group: Development/Libraries -Requires: vpp = %{_version}-%{_release}, vpp-lib = %{_version}-%{_release} - -%description api-java -This package contains the java bindings for the vpp api - -%package api-python -Summary: VPP api python bindings -Group: Development/Libraries -Requires: vpp = %{_version}-%{_release}, vpp-lib = %{_version}-%{_release}, python-setuptools libffi-devel - -%description api-python -This package contains the python bindings for the vpp api - -%prep -%setup -q -n %{name}-%{_version} - -%pre -# Add the vpp group -groupadd -f -r vpp - -%build -cd %{_mu_build_dir}/../src/vpp-api/python && %py2_build - -%install -# -# binaries -# -mkdir -p -m755 %{buildroot}%{_bindir} -mkdir -p -m755 %{buildroot}%{_unitdir} -install -p -m 755 %{_mu_build_dir}/%{_vpp_install_dir}/vpp/bin/* %{buildroot}%{_bindir} - -# api -mkdir -p -m755 %{buildroot}/usr/share/vpp/api - -# -# configs -# -mkdir -p -m755 %{buildroot}/etc/vpp -mkdir -p -m755 %{buildroot}/etc/sysctl.d -install -p -m 644 %{_mu_build_dir}/rpm/vpp.service %{buildroot}%{_unitdir} -install -p -m 644 %{_mu_build_dir}/../src/vpp/conf/startup.conf %{buildroot}/etc/vpp/startup.conf -install -p -m 644 %{_mu_build_dir}/../src/vpp/conf/80-vpp.conf %{buildroot}/etc/sysctl.d -# -# libraries -# -mkdir -p -m755 %{buildroot}%{_libdir} -mkdir -p -m755 %{buildroot}/etc/bash_completion.d -mkdir -p -m755 %{buildroot}/usr/share/vpp -for file in $(find %{_mu_build_dir}/%{_vpp_install_dir}/*/lib* -type f -name '*.so.*.*.*' -print ) -do - install -p -m 755 $file %{buildroot}%{_libdir} -done -for file in $(cd %{buildroot}%{_libdir} && find . -type f -print | sed -e 's/^\.\///') -do - # make lib symlinks - ( cd %{buildroot}%{_libdir} && - ln -fs $file $(echo $file | sed -e 's/\(\.so\.[0-9]\+\).*/\1/') ) - ( cd %{buildroot}%{_libdir} && - ln -fs $file $(echo $file | sed -e 's/\(\.so\)\.[0-9]\+.*/\1/') ) -done -for file in $(find %{_mu_build_dir}/%{_vpp_install_dir}/vpp/share/vpp/api -type f -name '*.api.json' -print ) -do - install -p -m 644 $file %{buildroot}/usr/share/vpp/api -done -install -p -m 644 %{_mu_build_dir}/../src/scripts/vppctl_completion %{buildroot}/etc/bash_completion.d -install -p -m 644 %{_mu_build_dir}/../src/scripts/vppctl-cmd-list %{buildroot}/usr/share/vpp - -# Lua bindings -mkdir -p -m755 %{buildroot}/usr/share/doc/vpp/examples/lua/examples/cli -mkdir -p -m755 %{buildroot}/usr/share/doc/vpp/examples/lua/examples/lute -for file in $(cd %{_mu_build_dir}/%{_vpp_install_dir}/../../src/vpp-api/lua && git ls-files .) -do - install -p -m 644 %{_mu_build_dir}/%{_vpp_install_dir}/../../src/vpp-api/lua/$file \ - %{buildroot}/usr/share/doc/vpp/examples/lua/$file -done - -# Java bindings -mkdir -p -m755 %{buildroot}/usr/share/java -for file in $(find %{_mu_build_dir}/%{_vpp_install_dir}/vpp/share/java -type f -name '*.jar' -print ) -do - install -p -m 644 $file %{buildroot}/usr/share/java -done - -# Python bindings -cd %{_mu_build_dir}/../src/vpp-api/python && %py2_install - -# -# devel -# -for dir in $(find %{_mu_build_dir}/%{_vpp_install_dir}/*/include/ -maxdepth 0 -type d -print | grep -v dpdk) -do - for subdir in $(cd ${dir} && find . -type d -print) - do - mkdir -p -m755 %{buildroot}/usr/include/${subdir} - done - for file in $(cd ${dir} && find . -type f -print) - do - install -p -m 644 $dir/$file %{buildroot}%{_includedir}/$file - done -done - -mkdir -p -m755 %{buildroot}%{python2_sitelib}/jvppgen -install -p -m755 %{_mu_build_dir}/../src/vpp-api/java/jvpp/gen/jvpp_gen.py %{buildroot}/usr/bin -for i in $(ls %{_mu_build_dir}/../src/vpp-api/java/jvpp/gen/jvppgen/*.py); do - install -p -m666 ${i} %{buildroot}%{python2_sitelib}/jvppgen -done; - -# sample plugin -mkdir -p -m755 %{buildroot}/usr/share/doc/vpp/examples/sample-plugin/sample -for file in $(cd %{_mu_build_dir}/%{_vpp_install_dir}/../../src/examples/sample-plugin && git ls-files .) -do - install -p -m 644 %{_mu_build_dir}/%{_vpp_install_dir}/../../src/examples/sample-plugin/$file \ - %{buildroot}/usr/share/doc/vpp/examples/sample-plugin/$file -done - - -# -# vpp-plugins -# -mkdir -p -m755 %{buildroot}/usr/lib/vpp_plugins -mkdir -p -m755 %{buildroot}/usr/lib/vpp_api_test_plugins -for file in $(cd %{_mu_build_dir}/%{_vpp_install_dir}/vpp/lib64/vpp_plugins && find -type f -print) -do - install -p -m 644 %{_mu_build_dir}/%{_vpp_install_dir}/vpp/lib64/vpp_plugins/$file \ - %{buildroot}/usr/lib/vpp_plugins/$file -done - -for file in $(cd %{_mu_build_dir}/%{_vpp_install_dir}/vpp/lib64/vpp_api_test_plugins && find -type f -print) -do - install -p -m 644 %{_mu_build_dir}/%{_vpp_install_dir}/vpp/lib64/vpp_api_test_plugins/$file \ - %{buildroot}/usr/lib/vpp_api_test_plugins/$file -done - -for file in $(find %{_mu_build_dir}/%{_vpp_install_dir}/plugins -type f -name '*.api.json' -print ) -do - install -p -m 644 $file %{buildroot}/usr/share/vpp/api -done - -# -# remove RPATH from ELF binaries -# -%{_mu_build_dir}/scripts/remove-rpath %{buildroot} - -%post -sysctl --system -%systemd_post vpp.service - -%preun -%systemd_preun vpp.service - -%postun -%systemd_postun - -# Unbind user-mode PCI drivers -removed= -pci_dirs=`find /sys/bus/pci/drivers -type d -name igb_uio -o -name uio_pci_generic -o -name vfio-pci` -for d in $pci_dirs; do - for f in ${d}/*; do - [ -e "${f}/config" ] || continue - echo ${f##*/} > ${d}/unbind - basename `dirname ${f}` | xargs echo -n "Removing driver"; echo " for PCI ID" `basename ${f}` - removed=y - done -done -if [ -n "${removed}" ]; then - echo "There are changes in PCI drivers, rescaning" - echo 1 > /sys/bus/pci/rescan -else - echo "There weren't PCI devices binded" -fi - -%files -%defattr(-,bin,bin) -%{_unitdir}/vpp.service -/usr/bin/vpp* -/usr/bin/svm* -/usr/bin/elftool -%config /etc/sysctl.d/80-vpp.conf -%config /etc/vpp/startup.conf -/usr/share/vpp/api/* - -%files lib -%defattr(-,bin,bin) -%exclude %{_libdir}/vpp_plugins -%exclude %{_libdir}/vpp_api_test_plugins -%{_libdir}/* -/usr/share/vpp/api/* -/etc/bash_completion.d/vppctl_completion -/usr/share/vpp/vppctl-cmd-list - -%files api-lua -%defattr(644,root,root,644) -/usr/share/doc/vpp/examples/lua - -%files api-java -%defattr(644,root,root) -/usr/share/java/* - -%files api-python -%defattr(644,root,root) -%{python2_sitelib}/vpp_papi* - -%files devel -%defattr(-,bin,bin) -/usr/bin/vppapigen -/usr/bin/jvpp_gen.py -%{_includedir}/* -%{python2_sitelib}/jvppgen/* -/usr/share/doc/vpp/examples/sample-plugin - -%files plugins -%defattr(-,bin,bin) -/usr/lib/vpp_plugins/* -/usr/lib/vpp_api_test_plugins/* -/usr/share/vpp/api/* diff --git a/build-root/scripts/verdist b/build-root/scripts/verdist deleted file mode 100755 index 9d1f1b5a..00000000 --- a/build-root/scripts/verdist +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash - -# -# Add version to dist tarball. -# -BR=$1 -prefix=$2 -verstring=$3 -BASE=`pwd` - -git rev-parse 2> /dev/null -if [ $? == 0 ]; then - git archive --prefix=${prefix}/ HEAD | gzip -9 > ${verstring}.tar.gz -else - cd .. - tar -c ${prefix} | gzip -9 > ${verstring}.tar.gz - cp ${verstring}.tar.gz $BASE - cd $BASE -fi - -mkdir ${BASE}/tmp -cd ${BASE}/tmp -tar -xzf ${BASE}/${verstring}.tar.gz -rm ${BASE}/${verstring}.tar.gz - -cp ${BR}/scripts/.version ${BASE}/tmp/${prefix}/build-root/scripts -tar -c ${prefix} | gzip -9 > ${verstring}.tar.gz -mv ${verstring}.tar.gz ${BASE} - -cd ${BASE} -rm -rf tmp diff --git a/extras/rpm/Makefile b/extras/rpm/Makefile new file mode 100644 index 00000000..1dcbb203 --- /dev/null +++ b/extras/rpm/Makefile @@ -0,0 +1,30 @@ +# Copyright (c) 2017 Cisco and/or its affiliates. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +TARBALL=$(shell realpath ../../build-root/vpp-latest.tar.xz) + +BASENAME=$(shell basename $(TARBALL) | sed -e s/.tar.\*//) +VERSION=$(shell echo $(BASENAME) | cut -f2 -d-) +RELEASE=$(shell echo $(BASENAME) | cut -f3- -d- | sed -e s/-/_/g) + +all: + @echo $(TARBALL) + mkdir -p SOURCES RPMS + cp $(TARBALL) SOURCES/vpp-latest.tar.xz + rpmbuild -bb \ + --define "_topdir $(PWD)" \ + --define "_version $(VERSION)" \ + --define "_release $(RELEASE)" \ + vpp.spec + mv $$(find RPMS -name \*.rpm -type f) . diff --git a/extras/rpm/vpp.service b/extras/rpm/vpp.service new file mode 100644 index 00000000..40bf9d48 --- /dev/null +++ b/extras/rpm/vpp.service @@ -0,0 +1,14 @@ +[Unit] +Description=Vector Packet Processing Process +After=syslog.target network.target auditd.service + +[Service] +ExecStartPre=-/bin/rm -f /dev/shm/db /dev/shm/global_vm /dev/shm/vpe-api +ExecStartPre=-/sbin/modprobe uio_pci_generic +ExecStart=/usr/bin/vpp -c /etc/vpp/startup.conf +Type=simple +Restart=on-failure +RestartSec=5s + +[Install] +WantedBy=multi-user.target diff --git a/extras/rpm/vpp.spec b/extras/rpm/vpp.spec new file mode 100644 index 00000000..55b20109 --- /dev/null +++ b/extras/rpm/vpp.spec @@ -0,0 +1,299 @@ +%define _vpp_build_dir build-tool-native +%define _unitdir /lib/systemd/system +%define _topdir %(pwd) +%define _builddir %{_topdir} +%define _mu_build_dir %{_topdir}/%{name}-%{_version}/build-root +%define _vpp_install_dir install-vpp-native + +# Failsafe backport of Python2-macros for RHEL <= 6 +%{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")} +%{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")} +%{!?python_version: %global python_version %(%{__python} -c "import sys; sys.stdout.write(sys.version[:3])")} +%{!?__python2: %global __python2 %{__python}} +%{!?python2_sitelib: %global python2_sitelib %{python_sitelib}} +%{!?python2_sitearch: %global python2_sitearch %{python_sitearch}} +%{!?python2_version: %global python2_version %{python_version}} + +%{!?python2_minor_version: %define python2_minor_version %(%{__python} -c "import sys ; print sys.version[2:3]")} + +%{?systemd_requires} + +Name: vpp +Summary: Vector Packet Processing +License: MIT +Version: %{_version} +Release: %{_release} +Requires: vpp-lib = %{_version}-%{_release}, net-tools, pciutils, python +BuildRequires: systemd, chrpath + +# Source: %{name}-%{_version}-%{_release}.tar.xz +Source: vpp-latest.tar.xz + +%description +This package provides VPP executables: vpp, vpp_api_test, vpp_json_test +vpp - the vector packet engine +vpp_api_test - vector packet engine API test tool +vpp_json_test - vector packet engine JSON test tool + +%package lib +Summary: VPP libraries +Group: System Environment/Libraries + +%description lib +This package contains the VPP shared libraries, including: +vppinfra - foundation library supporting vectors, hashes, bitmaps, pools, and string formatting. +svm - vm library +vlib - vector processing library +vlib-api - binary API library +vnet - network stack library + +%package devel +Summary: VPP header files, static libraries +Group: Development/Libraries +Requires: vpp-lib + +%description devel +This package contains the header files for VPP. +Install this package if you want to write a +program for compilation and linking with vpp lib. +vlib +vlibmemory +vnet - devices, classify, dhcp, ethernet flow, gre, ip, etc. +vpp-api +vppinfra + +%package plugins +Summary: Vector Packet Processing--runtime plugins +Group: System Environment/Libraries +Requires: vpp = %{_version}-%{_release} +%description plugins +This package contains VPP plugins + +%package api-lua +Summary: VPP api lua bindings +Group: Development/Libraries +Requires: vpp = %{_version}-%{_release}, vpp-lib = %{_version}-%{_release} + +%description api-lua +This package contains the lua bindings for the vpp api + +%package api-java +Summary: VPP api java bindings +Group: Development/Libraries +Requires: vpp = %{_version}-%{_release}, vpp-lib = %{_version}-%{_release} + +%description api-java +This package contains the java bindings for the vpp api + +%package api-python +Summary: VPP api python bindings +Group: Development/Libraries +Requires: vpp = %{_version}-%{_release}, vpp-lib = %{_version}-%{_release}, python-setuptools libffi-devel + +%description api-python +This package contains the python bindings for the vpp api + +%prep +%setup -q -n %{name}-%{_version} + +%pre +# Add the vpp group +groupadd -f -r vpp + +%build +make bootstrap +make -C build-root PLATFORM=vpp TAG=vpp install-packages +cd %{_mu_build_dir}/../src/vpp-api/python && %py2_build + +%install +# +# binaries +# +mkdir -p -m755 %{buildroot}%{_bindir} +mkdir -p -m755 %{buildroot}%{_unitdir} +install -p -m 755 %{_mu_build_dir}/%{_vpp_install_dir}/vpp/bin/* %{buildroot}%{_bindir} + +# api +mkdir -p -m755 %{buildroot}/usr/share/vpp/api + +# +# configs +# +mkdir -p -m755 %{buildroot}/etc/vpp +mkdir -p -m755 %{buildroot}/etc/sysctl.d +install -p -m 644 %{_topdir}/vpp.service %{buildroot}%{_unitdir} +install -p -m 644 %{_mu_build_dir}/../src/vpp/conf/startup.conf %{buildroot}/etc/vpp/startup.conf +install -p -m 644 %{_mu_build_dir}/../src/vpp/conf/80-vpp.conf %{buildroot}/etc/sysctl.d +# +# libraries +# +mkdir -p -m755 %{buildroot}%{_libdir} +mkdir -p -m755 %{buildroot}/etc/bash_completion.d +mkdir -p -m755 %{buildroot}/usr/share/vpp +for file in $(find %{_mu_build_dir}/%{_vpp_install_dir}/*/lib* -type f -name '*.so.*.*.*' -print ) +do + install -p -m 755 $file %{buildroot}%{_libdir} +done +for file in $(cd %{buildroot}%{_libdir} && find . -type f -print | sed -e 's/^\.\///') +do + # make lib symlinks + ( cd %{buildroot}%{_libdir} && + ln -fs $file $(echo $file | sed -e 's/\(\.so\.[0-9]\+\).*/\1/') ) + ( cd %{buildroot}%{_libdir} && + ln -fs $file $(echo $file | sed -e 's/\(\.so\)\.[0-9]\+.*/\1/') ) +done +for file in $(find %{_mu_build_dir}/%{_vpp_install_dir}/vpp/share/vpp/api -type f -name '*.api.json' -print ) +do + install -p -m 644 $file %{buildroot}/usr/share/vpp/api +done +install -p -m 644 %{_mu_build_dir}/../src/scripts/vppctl_completion %{buildroot}/etc/bash_completion.d +install -p -m 644 %{_mu_build_dir}/../src/scripts/vppctl-cmd-list %{buildroot}/usr/share/vpp + +# Lua bindings +mkdir -p -m755 %{buildroot}/usr/share/doc/vpp/examples/lua/examples/cli +mkdir -p -m755 %{buildroot}/usr/share/doc/vpp/examples/lua/examples/lute +for file in $(cd %{_mu_build_dir}/%{_vpp_install_dir}/../../src/vpp-api/lua && git ls-files .) +do + install -p -m 644 %{_mu_build_dir}/%{_vpp_install_dir}/../../src/vpp-api/lua/$file \ + %{buildroot}/usr/share/doc/vpp/examples/lua/$file +done + +# Java bindings +mkdir -p -m755 %{buildroot}/usr/share/java +for file in $(find %{_mu_build_dir}/%{_vpp_install_dir}/vpp/share/java -type f -name '*.jar' -print ) +do + install -p -m 644 $file %{buildroot}/usr/share/java +done + +# Python bindings +cd %{_mu_build_dir}/../src/vpp-api/python && %py2_install + +# +# devel +# +for dir in $(find %{_mu_build_dir}/%{_vpp_install_dir}/*/include/ -maxdepth 0 -type d -print | grep -v dpdk) +do + for subdir in $(cd ${dir} && find . -type d -print) + do + mkdir -p -m755 %{buildroot}/usr/include/${subdir} + done + for file in $(cd ${dir} && find . -type f -print) + do + install -p -m 644 $dir/$file %{buildroot}%{_includedir}/$file + done +done + +mkdir -p -m755 %{buildroot}%{python2_sitelib}/jvppgen +install -p -m755 %{_mu_build_dir}/../src/vpp-api/java/jvpp/gen/jvpp_gen.py %{buildroot}/usr/bin +for i in $(ls %{_mu_build_dir}/../src/vpp-api/java/jvpp/gen/jvppgen/*.py); do + install -p -m666 ${i} %{buildroot}%{python2_sitelib}/jvppgen +done; + +# sample plugin +mkdir -p -m755 %{buildroot}/usr/share/doc/vpp/examples/sample-plugin/sample +for file in $(cd %{_mu_build_dir}/%{_vpp_install_dir}/../../src/examples/sample-plugin && git ls-files .) +do + install -p -m 644 %{_mu_build_dir}/%{_vpp_install_dir}/../../src/examples/sample-plugin/$file \ + %{buildroot}/usr/share/doc/vpp/examples/sample-plugin/$file +done + + +# +# vpp-plugins +# +mkdir -p -m755 %{buildroot}/usr/lib/vpp_plugins +mkdir -p -m755 %{buildroot}/usr/lib/vpp_api_test_plugins +for file in $(cd %{_mu_build_dir}/%{_vpp_install_dir}/vpp/lib64/vpp_plugins && find -type f -print) +do + install -p -m 644 %{_mu_build_dir}/%{_vpp_install_dir}/vpp/lib64/vpp_plugins/$file \ + %{buildroot}/usr/lib/vpp_plugins/$file +done + +for file in $(cd %{_mu_build_dir}/%{_vpp_install_dir}/vpp/lib64/vpp_api_test_plugins && find -type f -print) +do + install -p -m 644 %{_mu_build_dir}/%{_vpp_install_dir}/vpp/lib64/vpp_api_test_plugins/$file \ + %{buildroot}/usr/lib/vpp_api_test_plugins/$file +done + +for file in $(find %{_mu_build_dir}/%{_vpp_install_dir}/plugins -type f -name '*.api.json' -print ) +do + install -p -m 644 $file %{buildroot}/usr/share/vpp/api +done + +# +# remove RPATH from ELF binaries +# +%{_mu_build_dir}/scripts/remove-rpath %{buildroot} + +%post +sysctl --system +%systemd_post vpp.service + +%preun +%systemd_preun vpp.service + +%postun +%systemd_postun + +# Unbind user-mode PCI drivers +removed= +pci_dirs=`find /sys/bus/pci/drivers -type d -name igb_uio -o -name uio_pci_generic -o -name vfio-pci` +for d in $pci_dirs; do + for f in ${d}/*; do + [ -e "${f}/config" ] || continue + echo ${f##*/} > ${d}/unbind + basename `dirname ${f}` | xargs echo -n "Removing driver"; echo " for PCI ID" `basename ${f}` + removed=y + done +done +if [ -n "${removed}" ]; then + echo "There are changes in PCI drivers, rescaning" + echo 1 > /sys/bus/pci/rescan +else + echo "There weren't PCI devices binded" +fi + +%files +%defattr(-,bin,bin) +%{_unitdir}/vpp.service +/usr/bin/vpp* +/usr/bin/svm* +/usr/bin/elftool +%config /etc/sysctl.d/80-vpp.conf +%config /etc/vpp/startup.conf +/usr/share/vpp/api/* + +%files lib +%defattr(-,bin,bin) +%exclude %{_libdir}/vpp_plugins +%exclude %{_libdir}/vpp_api_test_plugins +%{_libdir}/* +/usr/share/vpp/api/* +/etc/bash_completion.d/vppctl_completion +/usr/share/vpp/vppctl-cmd-list + +%files api-lua +%defattr(644,root,root,644) +/usr/share/doc/vpp/examples/lua + +%files api-java +%defattr(644,root,root) +/usr/share/java/* + +%files api-python +%defattr(644,root,root) +%{python2_sitelib}/vpp_papi* + +%files devel +%defattr(-,bin,bin) +/usr/bin/vppapigen +/usr/bin/jvpp_gen.py +%{_includedir}/* +%{python2_sitelib}/jvppgen/* +/usr/share/doc/vpp/examples/sample-plugin + +%files plugins +%defattr(-,bin,bin) +/usr/lib/vpp_plugins/* +/usr/lib/vpp_api_test_plugins/* +/usr/share/vpp/api/* diff --git a/src/scripts/version b/src/scripts/version index d92eb8b7..d8728a9f 100755 --- a/src/scripts/version +++ b/src/scripts/version @@ -4,16 +4,12 @@ path=$( cd "$(dirname "${BASH_SOURCE}")" ; pwd -P ) cd "$path" -git rev-parse 2> /dev/null -if [ $? == 0 ]; then - vstring=$(git describe) -elif [ -f .version ]; then +if [ -f .version ]; then vstring=$(cat .version) else - if [ -f ../rpm/*.gz ]; then - vstring=$(ls ../rpm/*.gz) - else - exit 1 + vstring=$(git describe) + if [ $? != 0 ]; then + exit 1 fi fi -- cgit 1.2.3-korg