#!/usr/bin/make -f

include /usr/share/cdbs/1/rules/debhelper.mk
include /usr/share/cdbs/1/rules/simple-patchsys.mk
include /usr/share/cdbs/1/class/gnome.mk
include /usr/share/cdbs/1/rules/utils.mk

LDFLAGS += -Wl,-z,defs -Wl,-O1 -Wl,--as-needed

CFLAGS += -Wno-error

ifneq (,$(filter noopt,$(DEB_BUILD_OPTIONS)))
    CFLAGS += -O0
else
    CFLAGS += -O2
endif

ifeq (,$(findstring debug,$(DEB_BUILD_OPTIONS)))
    CFLAGS += -DG_DISABLE_CAST_CHECKS -DGST_DISABLE_GST_DEBUG=1
endif

ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
    NUMJOBS = $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
    MAKEFLAGS += -j$(NUMJOBS)
endif

## DEB_MAKE_CHECK_TARGET = check || true

# this is for compatibility with dpkg-dev < 1.13.5, see
# <http://lists.debian.org/debian-devel-announce/2005/06/msg00010.html>
DEB_HOST_ARCH_CPU := $(shell dpkg-architecture -qDEB_HOST_ARCH_CPU 2>/dev/null)
DEB_HOST_ARCH_OS := $(shell dpkg-architecture -qDEB_HOST_ARCH_OS 2>/dev/null)

# Take account of old dpkg-architecture output.
ifeq ($(DEB_HOST_ARCH_CPU),)
  DEB_HOST_ARCH_CPU := $(shell dpkg-architecture -qDEB_HOST_GNU_CPU)
  ifeq ($(DEB_HOST_ARCH_CPU),x86_64)
    DEB_HOST_ARCH_CPU := amd64
  endif
endif
ifeq ($(DEB_HOST_ARCH_OS),)
  DEB_HOST_ARCH_OS := $(subst -gnu,,$(shell dpkg-architecture -qDEB_HOST_GNU_SYSTEM))
  ifeq ($(DEB_HOST_ARCH_OS),gnu)
    DEB_HOST_ARCH_OS := hurd
  endif
endif
# end of compatibility block

# 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=0
gst_minor=10
gst_abi=$(gst_major).$(gst_minor)
# gstreamer library package names
gst_lib=libgstreamer$(gst_abi)-0
gst_lib_dev=libgstreamer$(gst_abi)-dev
# what gstreamer version is needed
gst_lib_dev_dep=$(gst_lib_dev) (>= 0.10.20-3)

gst_pkgname=gstreamer$(gst_abi)
gst_deb_abi=$(gst_abi)-0

gst_extra_build_depends =
gst_extra_build_depends += libasound2-dev (>= 0.9.1)

# The plugins are basically the same.
# Link special names to a template file.
# still need "*.install" to be done by hand
# 
# EXTRA_PLUGINS: See debian/README.Debian for docs
EXTRA_PLUGINS +=

PLUGINS += sdl plugins-bad-extra plugins-bad $(EXTRA_PLUGINS)
ifeq ($(DEB_HOST_ARCH_OS),linux)
PLUGINS +=
endif
VERSIONIZE= \
	plugins-bad-doc.install \
	plugins-bad-dev.install

#debug package
DEB_DH_STRIP_ARGS := --dbg-package=$(gst_pkgname)-plugins-bad-dbg

# enable the real and spc plugin on x86
ifeq ($(DEB_HOST_ARCH_CPU), i386)
real = debian/tmp/usr/lib/gstreamer-$(gst_abi)/libgstreal.so
ifeq ($(DEB_HOST_ARCH_OS),linux)
spc = debian/tmp/usr/lib/gstreamer-$(gst_abi)/libgstspc.so
endif
endif

ifeq ($(DEB_HOST_ARCH_OS),linux)
alsa_spdif = debian/tmp/usr/lib/gstreamer-$(gst_abi)/libgstalsaspdif.so
dvb = debian/tmp/usr/lib/gstreamer-$(gst_abi)/libgstdvb.so
fbdev = debian/tmp/usr/lib/gstreamer-$(gst_abi)/libgstfbdevsink.so
vcd = debian/tmp/usr/lib/gstreamer-$(gst_abi)/libgstvcdsrc.so
cdaudio = debian/tmp/usr/lib/gstreamer-$(gst_abi)/libgstcdaudio.so
dc1394 = debian/tmp/usr/lib/gstreamer-$(gst_abi)/libgstdc1394.so
endif

# Let's decide the package name and url depending on the distribution
DISTRO = "$(shell lsb_release -si)"

GST_PACKAGE_NAME := "GStreamer Bad Plugins (unknown Debian derivative)"
GST_PACKAGE_ORIGIN="http://packages.qa.debian.org/gst-plugins-bad$(gst_abi)"

ifeq ($(DISTRO),"Debian")
GST_PACKAGE_NAME := "GStreamer Bad Plugins (Debian)"
GST_PACKAGE_ORIGIN="http://packages.qa.debian.org/gst-plugins-bad$(gst_abi)"
endif

ifeq ($(DISTRO),"Ubuntu")
GST_PACKAGE_NAME := "GStreamer Bad Plugins (Ubuntu)"
GST_PACKAGE_ORIGIN="https://launchpad.net/distros/ubuntu/+source/gst-plugins-bad$(gst_abi)"
endif


# setup links for packages
pre-build::
	for p in $(PLUGINS); do \
		rm -f debian/$(gst_pkgname)-$$p.install; \
		cat debian/gstreamer-$$p.install | \
			sed 's,@real@,$(real),g' | \
			sed 's,@alsa_spdif@,$(alsa_spdif),g' | \
			sed 's,@dvb@,$(dvb),g' | \
			sed 's,@fbdev@,$(fbdev),g' | \
			sed 's,@vcd@,$(vcd),g' | \
			sed 's,@spc@,$(spc),g' | \
			sed 's,@dc1394@,$(dc1394),g' | \
			sed 's,@cdaudio@,$(cdaudio),g' | \
			sed 's/@GST_ABI@/$(gst_abi)/g' \
			> debian/$(gst_pkgname)-$$p.install; \
	done

	for f in $(VERSIONIZE); do \
		cat debian/gstreamer-$$f | \
			sed 's/@GST_ABI@/$(gst_abi)/g' \
			> debian/$(gst_pkgname)-$$f; \
	done

maint: debian/control

debian/build-deps: debian/build-deps.in debian/rules
	cat $< > $@
	for plugin in $(EXTRA_PLUGINS) ; do \
		debian/extra deps $$plugin >> $@; \
	done

debian/control:: debian/control.in debian/build-deps debian/mk.control debian/rules
	perl debian/mk.control | \
		sed 's/@GST_VERSION@/$(gst_version)/g' | \
		sed 's/@GST_ABI@/$(gst_abi)/g' | \
		sed 's/@GST_PKGNAME@/$(gst_pkgname)/g' | \
		sed 's/@GST_LIB@/$(gst_lib)/g' | \
		sed 's/@GST_LIB_DEV@/$(gst_lib_dev)/g' | \
		sed 's/@GST_LIB_DEV_DEP@/$(gst_lib_dev_dep)/g' | \
		sed "s/@GST_EXTRA_BUILD_DEPENDS@/$(gst_extra_build_depends)/g"> $@

	for plugin in $(EXTRA_PLUGINS) ; do \
		debian/extra control $$plugin | \
			sed 's/@GST_ABI@/$(gst_abi)/g' | \
			sed 's/@GST_PKGNAME@/$(gst_pkgname)/g' | \
			sed 's/@GST_LIB@/$(gst_lib)/g' | \
			sed 's/@GST_LIB_DEV@/$(gst_lib_dev)/g' | \
			sed 's/@GST_LIB_DEV_DEP@/$(gst_lib_dev_dep)/g' | \
			sed 's/@GST_PLUGINS_LIB@/$(gst_plugins_lib)/g' | \
			sed 's/@GST_PLUGINS_LIB_DEV@/$(gst_plugins_lib_dev)/g' | \
			sed 's/@GST_PLUGINS_LIB_DEV_DEP@/$(gst_plugins_lib_dev_dep)/g' | \
			sed 's/@GST_GCONF_LIB@/$(gst_gconf_lib)/g' | \
			sed 's/@GST_GCONF_LIB_DEV@/$(gst_gconf_lib_dev)/g' | \
			sed 's/@GST_GCONF_LIB_DEV_DEP@/$(gst_gconf_lib_dev_dep)/g' >> $@; \
	done

debian/stamp-autogen:
	./autogen.sh --noconfigure
	touch $@

post-patches:: debian/stamp-autogen

DEB_CONFIGURE_EXTRA_FLAGS += \
	--disable-shave \
	--disable-examples \
	--enable-DEBUG \
	--enable-debug \
	--enable-experimental \
	--disable-deinterlace2 \
	--disable-frei0r \
	--disable-mpegtsmux \
	--disable-oss4 \
	--disable-mxf \
	--disable-nls \
	--with-package-name=$(GST_PACKAGE_NAME) \
	--with-package-origin=$(GST_PACKAGE_ORIGIN) \

# only build the docs on arches which can
ifeq (,$(findstring $(DEB_HOST_ARCH),m68k arm))
DEB_CONFIGURE_EXTRA_FLAGS += --enable-gtk-doc
endif

common-binary-fixup-arch::
	# crash on qemu! dh_gstscancodecs

clean::
	# get rid of the sym links
	for i in $(PLUGINS); do \
		rm -f debian/$(gst_pkgname)-$$i.install; \
		rm -f debian/$(gst_pkgname)-$$i.preinst; \
	done
	for f in $(VERSIONIZE); do \
		rm -f debian/$(gst_pkgname)-$$f; \
	done

DEB_INSTALL_DOCS_ALL += debian/README.Debian NEWS

# Disable inclusion of large upstream ChangeLog
DEB_INSTALL_CHANGELOGS_ALL :=

UPSTREAM_REF=master
PATCHES_REF=maemo-patches

update-patch-series:
	mkdir -p $(CURDIR)/debian/patches
	rm -f $(CURDIR)/debian/patches/*.patch
	git format-patch -o $(CURDIR)/debian/patches $(PATCHES_REF) ^$(UPSTREAM_REF) | \
		xargs -n 1 basename > $(CURDIR)/debian/patches/series
	for patch in $$(ls $(CURDIR)/debian/patches/*.patch) ; \
	do \
		lines=$$(cat $$patch | wc -l) ; \
		head -n $$(($$lines - 3)) $$patch > $${patch}.chomped ; \
		mv $${patch}.chomped $$patch ; \
	done

update-common: COMMIT := $(shell git rev-parse $(shell git rev-parse MERGE_HEAD || git merge-base $(UPSTREAM_REF) HEAD):common)
update-common:
	@if ! git diff-files --ignore-submodules --quiet common || \
		! git diff-index --ignore-submodules --cached --quiet HEAD -- common; then \
			echo "your common/ directory state is dirty"; \
			exit 1; \
		fi
	if test -d $(CURDIR)/common ; then rm -rfv $(CURDIR)/common ; git rm -r --cached --ignore-unmatch $(CURDIR)/common ; fi
	git clone -n git://anongit.freedesktop.org/gstreamer/common $(CURDIR)/common
	cd $(CURDIR)/common && git checkout -f $(COMMIT)
	rm -rfv $(CURDIR)/common/.git
	git add $(CURDIR)/common
	@echo "common update to $(COMMIT) staged, git commit to proceed"

.PHONY: maint
