#!/usr/bin/make -f
# See debhelper(7) (uncomment to enable)
# output every command that modifies files on the build system.
DH_VERBOSE = 1

# see EXAMPLES in dpkg-buildflags(1) and read /usr/share/dpkg/*
DPKG_EXPORT_BUILDFLAGS = 1
include /usr/share/dpkg/default.mk

export PYBUILD_NAME = vpp-api
export PYBUILD_DIR = @CMAKE_SOURCE_DIR@/vpp-api/python
export PYBUILD_DESTDIR_python2=debian/vpp-api-python/
export PYBUILD_DISABLE_python2=test
export PYBUILD_DESTDIR_python3=debian/python3-vpp-api/
export PYBUILD_DISABLE_python3=test
export PYBUILD_SYSTEM=distutils

buildvers := $(shell pyversions -sv)
build3vers := $(shell py3versions -sv)

# main packaging script based on dh7 syntax
%:
	dh $@ --with systemd,python2,python3 --buildsystem=pybuild

override_dh_strip:
	dh_strip --dbg-package=vpp-dbg

DEB_HOST_MULTIARCH = $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)

override_dh_install:
	@for c in @VPP_COMPONENTS@; do \
	  @CMAKE_COMMAND@ \
	    -D CMAKE_INSTALL_CONFIG_NAME=@CMAKE_BUILD_TYPE@ \
	    -D CMAKE_INSTALL_COMPONENT=$$c \
	    -D CMAKE_INSTALL_PREFIX=@CMAKE_BINARY_DIR@/debian/$$c \
	    -P @CMAKE_BINARY_DIR@/cmake_install.cmake 2>&1 \
	    | grep -v 'Set runtime path of' ; \
	  if [ -d debian/$$c/lib ] ; then \
	    mv debian/$$c/lib debian/$$c/$(DEB_HOST_MULTIARCH) ; \
	    mkdir -p debian/$$c/usr/lib ; \
	    mv debian/$$c/$(DEB_HOST_MULTIARCH) debian/$$c/usr/lib ; \
	  fi ; \
	  for d in bin include share ; do \
	    if [ -d debian/$$c/$$d ] ; then \
	      mkdir -p debian/$$c/usr ; \
	      mv debian/$$c/$$d debian/$$c/usr/$$d ; \
	    fi ; \
	  done ; \
	  if [ -d debian/$$c ] ; then \
	    @CMAKE_SOURCE_DIR@/scripts/remove-rpath debian/$$c ; \
	  fi ; \
	done
