#!/usr/bin/make -f

include /usr/share/cdbs/1/rules/debhelper.mk
include /usr/share/cdbs/1/class/autotools.mk
include /usr/share/cdbs/1/rules/utils.mk
include /usr/share/cdbs/1/rules/autoreconf.mk
include /usr/share/gnome-pkg-tools/1/rules/clean-la.mk

# Work-around for gtk-doc bug:
# https://bugzilla.gnome.org/show_bug.cgi?id=783926
export PYTHONIOENCODING="utf-8"

export HOME=$(CURDIR)/fake-home

DEB_BUILD_PARALLEL = 1
DEB_DH_AUTORECONF_ARGS += --as-needed

CFLAGS += -Wno-error
CXXFLAGS += -Wno-error
LDFLAGS += -Wl,-z,defs -Wl,-O1 -Wl,--as-needed
DEB_MAKE_CHECK_TARGET = check || true

# debian package version
version=$(shell dpkg-parsechangelog | grep ^Version: | cut -d ' ' -f 2)
# upstream version
gst_version=$(shell echo $(version) | cut -d '-' -f 1)
gst_major=1
gst_minor=0
gst_abi=$(gst_major).$(gst_minor)
gst_pkgname=gstreamer$(gst_abi)
gst_lib_prefix=libgstreamer$(gst_abi)
# gstreamer library package names
gst_lib=$(gst_lib_prefix)-0
gst_lib_dev=$(gst_lib_prefix)-dev
# gstreamer shlibs
gst_shlibs_dep="$(gst_lib) (>= $(gst_version))"

# debug package
DEB_DH_STRIP_ARGS := --dbg-package=$(gst_lib)-dbg

DEB_COMPRESS_EXCLUDE = .sgml .devhelp .ps .pdf

DEB_INSTALL_DOCS_$(gst_lib)-dbg += common/gst.supp

# disable all CPU specific optimizations in commands launched by this Makefile
# using liboil; this is to work around liboil related build failures which
# are not specially interesting to catch on buildds as these might run very
# specific hardware
OIL_CPU_FLAGS=0
export OIL_CPU_FLAGS

PKGFILES=\
	debian/$(gst_lib).install \
	debian/$(gst_lib).symbols \
	debian/$(gst_lib).postinst \
	debian/$(gst_lib_dev).install \
	debian/$(gst_lib_dev).preinst \
	debian/$(gst_lib_dev).postrm \
	debian/$(gst_pkgname)-doc.install \
	debian/$(gst_pkgname)-doc.links \
	debian/$(gst_pkgname)-doc.lintian \
	debian/$(gst_pkgname)-tools.install \
	debian/$(gst_pkgname)-tools.links \
	debian/$(gst_pkgname)-tools.manpages \


GST_PACKAGE_NAME := "GStreamer"

debian/$(gst_lib).dirs: debian/libgstreamer.dirs debian/rules
	rm -f $@
	cat $< | \
		sed 's/@GST_ABI@/$(gst_abi)/g' | \
		sed 's/@GST_PKGNAME@/$(gst_pkgname)/g' | \
		sed 's/@GST_LIB_PREFIX@/$(gst_lib_prefix)/g' \
		> $@

debian/$(gst_lib).install: debian/libgstreamer.install debian/rules
	rm -f $@
	cat $< | \
		sed 's/@GST_ABI@/$(gst_abi)/g' | \
		sed 's/@GST_PKGNAME@/$(gst_pkgname)/g' | \
		sed 's/@GST_LIB_PREFIX@/$(gst_lib_prefix)/g' \
		> $@

debian/$(gst_lib).symbols: debian/libgstreamer.symbols debian/rules
	rm -f $@
	cp -v $< $@

debian/$(gst_lib).postinst: debian/libgstreamer.postinst debian/rules
	rm -f $@
	cat $< | \
		sed 's/@MULTIARCH@/$(DEB_HOST_MULTIARCH)/g' | \
		sed 's/@GST_ABI@/$(gst_abi)/g' \
		> $@

debian/$(gst_lib_dev).install: debian/libgstreamer-dev.install debian/rules
	rm -f $@
	cat $< | \
		sed 's/@GST_ABI@/$(gst_abi)/g' | \
		sed 's/@GST_PKGNAME@/$(gst_pkgname)/g' | \
		sed 's/@GST_LIB_PREFIX@/$(gst_lib_prefix)/g' \
		> $@

debian/$(gst_lib_dev).preinst: debian/libgstreamer-dev.preinst debian/rules
	rm -f $@
	cat $< | \
		sed 's/@GST_LIB_DEV@/$(gst_lib_dev)/g' \
		> $@

debian/$(gst_lib_dev).postrm: debian/libgstreamer-dev.postrm debian/rules
	rm -f $@
	cat $< | \
		sed 's/@GST_LIB_DEV@/$(gst_lib_dev)/g' \
		> $@

debian/$(gst_pkgname)-doc.install: debian/gstreamer-doc.install debian/rules
	rm -f $@
	cat $< | \
		sed 's/@GST_ABI@/$(gst_abi)/g' | \
		sed 's/@GST_PKGNAME@/$(gst_pkgname)/g' | \
		sed 's/@GST_LIB_PREFIX@/$(gst_lib_prefix)/g' \
		> $@

debian/$(gst_pkgname)-doc.links: debian/gstreamer-doc.links debian/rules
	rm -f $@
	cat $< | \
		sed 's/@GST_ABI@/$(gst_abi)/g' | \
		sed 's/@GST_PKGNAME@/$(gst_pkgname)/g' | \
		sed 's/@GST_LIB_PREFIX@/$(gst_lib_prefix)/g' \
		> $@

debian/$(gst_pkgname)-doc.lintian: debian/gstreamer-doc.lintian debian/rules
	rm -f $@
	cat $< | \
		sed 's/@GST_ABI@/$(gst_abi)/g' | \
		sed 's/@GST_PKGNAME@/$(gst_pkgname)/g' | \
		sed 's/@GST_LIB_PREFIX@/$(gst_lib_prefix)/g' \
		> $@

debian/$(gst_pkgname)-tools.install: debian/gstreamer-tools-abi.install debian/rules
	rm -f $@
	cat $< | \
		sed 's/@GST_ABI@/$(gst_abi)/g' | \
		sed 's/@GST_PKGNAME@/$(gst_pkgname)/g' | \
		sed 's/@GST_LIB_PREFIX@/$(gst_lib_prefix)/g' \
		> $@

debian/$(gst_pkgname)-tools.links: debian/gstreamer-tools-abi.links debian/rules
	rm -f $@
	cat $< | \
		sed 's/@GST_ABI@/$(gst_abi)/g' | \
		sed 's/@GST_PKGNAME@/$(gst_pkgname)/g' | \
		sed 's/@GST_LIB_PREFIX@/$(gst_lib_prefix)/g' \
		> $@

debian/$(gst_pkgname)-tools.manpages: debian/gstreamer-tools-abi.manpages debian/rules
	rm -f $@
	cat $< | \
		sed 's/@GST_ABI@/$(gst_abi)/g' | \
		sed 's/@GST_PKGNAME@/$(gst_pkgname)/g' | \
		sed 's/@GST_LIB_PREFIX@/$(gst_lib_prefix)/g' \
		> $@

maint: debian/control

pre-build:: $(PKGFILES)

clean::
	for f in $(PKGFILES); do \
		rm -f $$f; \
	done
	-rm -f debian/shlibs.local
	-rm -rf $(CURDIR)/fake-home

common_conf_flags = \
	--disable-failing-tests \
	--disable-examples \
	--enable-DEBUG \
	--enable-debug \
	--libdir=\$${prefix}/lib/$(DEB_HOST_MULTIARCH) \
	--libexecdir=\$${prefix}/lib/$(DEB_HOST_MULTIARCH)/gstreamer$(gst_abi) \
	--with-package-name=$(GST_PACKAGE_NAME) \


ifeq ($(DEB_HOST_ARCH_OS),linux)
common_conf_flags += --with-ptp-helper-permissions=capabilities
else
common_conf_flags += --with-ptp-helper-permissions=setuid-root \
	--with-ptp-helper-setuid-user=nobody --with-ptp-helper-setuid-group=nobody
endif

indep_conf_flags = \
	--with-html-dir=\$${prefix}/share/doc/$(gst_pkgname)-doc

# only build the docs if gtk-doc-tools is installed, i.e. binary-indep is
# called
ifeq ($(shell test "`dpkg -l gtk-doc-tools | grep ^ii`" && echo binary-indep),binary-indep)
indep_conf_flags += --enable-gtk-doc --enable-docbook
endif

DEB_CONFIGURE_EXTRA_FLAGS := $(common_conf_flags) $(indep_conf_flags)

common-install-indep::
	# move around the doc dirs
	mkdir -p debian/tmp/usr/share/doc/$(gst_pkgname)-doc
	-cp -r debian/tmp/usr/share/doc/gstreamer-$(gst_abi)/pwg \
	   debian/tmp/usr/share/doc/gstreamer-$(gst_abi)/manual \
	   debian/tmp/usr/share/doc/gstreamer-$(gst_abi)/faq \
	   debian/tmp/usr/share/doc/$(gst_pkgname)-doc

	# -doc lintian overrides
	mkdir -p debian/$(gst_pkgname)-doc/usr/share/lintian/overrides/
	cp -a debian/$(gst_pkgname)-doc.lintian debian/$(gst_pkgname)-doc/usr/share/lintian/overrides/$(gst_pkgname)-doc

DEB_DH_MAKESHLIBS_ARGS_$(gst_lib) += -X "/usr/lib/$(DEB_HOST_MULTIARCH)/gstreamer-$(gst_abi)" -V $(gst_shlibs_dep) -- -c4
DEB_INSTALL_DOCS_ALL += debian/README.Debian NEWS
DEB_SHLIBDEPS_INCLUDE += debian/$(gst_lib)/usr/lib/$(DEB_HOST_MULTIARCH)

install/$(gst_lib_dev)::
	$(DEB_HOST_GNU_TYPE)-gcc -o debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/gstreamer1.0/gstreamer-1.0/gst-codec-info-1.0 debian/gst-codec-info.c $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) `$(DEB_HOST_GNU_TYPE)-pkg-config --libs --cflags glib-2.0 gthread-2.0 gmodule-no-export-2.0 gobject-2.0` debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/libgstreamer-1.0.so -Idebian/tmp/usr/include/gstreamer-1.0 -Idebian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/gstreamer-1.0/include
	perldoc -o man debian/dh_gstscancodecs > debian/tmp/usr/share/man/man1/dh_gstscancodecs.1

.PHONY: maint
