#!/usr/bin/make -f
# -*- makefile -*-
# Sample debian/rules that uses debhelper.
#
# This file was originally written by Joey Hess and Craig Small.
# As a special exception, when this file is copied by dh-make into a
# dh-make output file, you may use that output file without restriction.
# This special exception was added by Craig Small in version 0.37 of dh-make.
#
# Modified to make a template file for a multi-binary package with separated
# build-arch and build-indep targets  by Bill Allombert 2001

# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1

# This has to be exported to make some magic below work.
export DH_OPTIONS

PYVERS := $(shell pyversions -r)

export CPPFLAGS:=$(shell dpkg-buildflags --get CPPFLAGS)
export CFLAGS:=$(shell dpkg-buildflags --get CFLAGS)
export CXXFLAGS:=$(shell dpkg-buildflags --get CXXFLAGS)
export LDFLAGS:=$(shell dpkg-buildflags --get LDFLAGS)

configure: configure-stamp
configure-stamp:
	dh_testdir

	# Add here commands to configure the package.
	if [ -f bootstrap.sh ]; then $(CURDIR)/bootstrap.sh; fi
	$(CURDIR)/configure --prefix=/usr

	touch configure-stamp


#Architecture
build: build-arch build-indep
	# Tests disabled
	# $(MAKE) -C test check

build-arch: build-arch-stamp
$(CURDIR)/compiler/cpp/thrift build-arch-stamp: configure-stamp

	# Compile C++ library
	$(MAKE) -C $(CURDIR)/lib/cpp

	# Compile compiler
	$(MAKE) -C $(CURDIR)/compiler/cpp

	# Compile C (glib) library
	$(MAKE) -C $(CURDIR)/lib/c_glib

	# Python library
	cd $(CURDIR)/lib/py && \
    for py in $(PYVERS); do  \
        $$py setup.py build; \
        $$py-dbg setup.py build; \
    done

	# PHP
	cd $(CURDIR)/lib/php/src/ext/thrift_protocol && \
		phpize && \
		./configure && $(MAKE)

	touch $@

build-indep: build-indep-stamp
build-indep-stamp: configure-stamp $(CURDIR)/compiler/cpp/thrift

	# Add here commands to compile the indep part of the package.
	#$(MAKE) doc

	# Java
	cd $(CURDIR)/lib/java && \
		ant

	# C#
	$(MAKE) -C $(CURDIR)/lib/csharp

	# Ruby
	$(MAKE) -C $(CURDIR)/lib/rb

	# Perl
	$(MAKE) -C $(CURDIR)/lib/perl INSTALLDIRS=vendor

	touch $@

clean:
	dh_testdir
	dh_testroot
	rm -f build-arch-stamp build-indep-stamp configure-stamp

	cd $(CURDIR)/lib/py && python setup.py clean --all

	# Add here commands to clean up after the build process.
	-$(MAKE) clean

	dh_clean

install: install-indep install-arch
install-indep:
	dh_testdir
	dh_testroot
	dh_clean -k -i
	dh_installdirs -i

	# Add here commands to install the indep part of the package into
	# debian/<package>-doc.
	#INSTALLDOC#

	# Java
	mkdir -p $(CURDIR)/debian/libthrift-java/usr/share/java/ && \
	cp $(CURDIR)/lib/java/build/libthrift*.jar \
		$(CURDIR)/debian/libthrift-java/usr/share/java/

	# Ruby
	mkdir -p $(CURDIR)/debian/ruby-thrift/usr/lib/ruby/1.9.1 && \
	cp $(CURDIR)/lib/rb/lib/thrift.rb \
		$(CURDIR)/debian/ruby-thrift/usr/lib/ruby/1.9.1
	cp -r $(CURDIR)/lib/rb/lib/thrift \
		$(CURDIR)/debian/ruby-thrift/usr/lib/ruby/1.9.1

	# C#
	mkdir -p $(CURDIR)/debian/libthrift-cil/usr/lib/cli/thrift/ && \
	cp $(CURDIR)/lib/csharp/Thrift.dll \
		$(CURDIR)/debian/libthrift-cil/usr/lib/cli/thrift/Thrift.dll

	# Perl
	$(MAKE) -C $(CURDIR)/lib/perl install DESTDIR=$(CURDIR)/debian/libthrift-perl
	mv $(CURDIR)/debian/libthrift-perl/usr/local/lib/perl5 $(CURDIR)/debian/libthrift-perl/usr/lib
	rmdir $(CURDIR)/debian/libthrift-perl/usr/local/lib
	rmdir $(CURDIR)/debian/libthrift-perl/usr/local

	dh_install -i

install-arch:
	dh_testdir
	dh_testroot
	dh_clean -k -s
	dh_installdirs -s

	# Add here commands to install the arch part of the package into
	# debian/tmp.
	#$(MAKE) DESTDIR=$(CURDIR)/debian/thrift install

	# Compiler
	mkdir -p $(CURDIR)/debian/thrift-compiler/usr/bin && \
	cp $(CURDIR)/compiler/cpp/thrift \
		$(CURDIR)/debian/thrift-compiler/usr/bin/thrift && \
	rmdir $(CURDIR)/debian/thrift-compiler/usr/sbin

	# Python
	cd $(CURDIR)/lib/py && \
	python2 setup.py install --install-layout=deb --no-compile --root=$(CURDIR)/debian/python-thrift && \
	python2-dbg setup.py install --install-layout=deb --no-compile --root=$(CURDIR)/debian/python-thrift-dbg && \
	python3 setup.py install --install-layout=deb --no-compile --root=$(CURDIR)/debian/python3-thrift && \
	python3-dbg setup.py install --install-layout=deb --no-compile --root=$(CURDIR)/debian/python3-thrift-dbg

	find $(CURDIR)/debian/python-thrift -name "*.py[co]" -print0 | xargs -0 rm -f
	find $(CURDIR)/debian/python-thrift -name "__pycache__" -print0 | xargs -0 rm -fr
	find $(CURDIR)/debian/python-thrift-dbg -name "__pycache__" -print0 | xargs -0 rm -fr
	find $(CURDIR)/debian/python-thrift-dbg -name "*.py[co]" -print0 | xargs -0 rm -f
	find $(CURDIR)/debian/python-thrift-dbg -name "*.py" -print0 | xargs -0 rm -f
	find $(CURDIR)/debian/python-thrift-dbg -name "*.egg-info" -print0 | xargs -0 rm -rf
	find $(CURDIR)/debian/python-thrift-dbg -depth -type d -empty -exec rmdir {} \;

	find $(CURDIR)/debian/python3-thrift -name "*.py[co]" -print0 | xargs -0 rm -f
	find $(CURDIR)/debian/python3-thrift -name "__pycache__" -print0 | xargs -0 rm -fr
	find $(CURDIR)/debian/python3-thrift-dbg -name "__pycache__" -print0 | xargs -0 rm -fr
	find $(CURDIR)/debian/python3-thrift-dbg -name "*.py[co]" -print0 | xargs -0 rm -f
	find $(CURDIR)/debian/python3-thrift-dbg -name "*.py" -print0 | xargs -0 rm -f
	find $(CURDIR)/debian/python3-thrift-dbg -name "*.egg-info" -print0 | xargs -0 rm -rf
	find $(CURDIR)/debian/python3-thrift-dbg -depth -type d -empty -exec rmdir {} \;

	# PHP
	mkdir -p $(CURDIR)/debian/php5-thrift
	cd $(CURDIR)/lib/php && \
		$(MAKE) DESTDIR=$(CURDIR)/debian/php5-thrift install

	# C++ and C (glib)
	mkdir -p $(CURDIR)/debian/tmp; \
	cd $(CURDIR)/lib/cpp && \
		$(MAKE) DESTDIR=$(CURDIR)/debian/tmp install
	cd $(CURDIR)/lib/c_glib && \
		$(MAKE) DESTDIR=$(CURDIR)/debian/tmp install

	dh_install --sourcedir=debian/tmp -s


# Must not depend on anything. This is to be called by
# binary-arch/binary-indep
# in another 'make' thread.
binary-common:
	dh_testdir
	dh_testroot
	dh_installchangelogs
	dh_installdocs
	dh_installexamples
	dh_installman
	dh_link
	dh_strip -ppython-thrift --dbg-package=python-thrift-dbg
	dh_strip -ppython3-thrift --dbg-package=python3-thrift-dbg
	dh_strip -pthrift-compiler -plibthrift0
	dh_compress
	dh_fixperms
	dh_makeshlibs
	dh_installdeb
	dh_perl
	dh_shlibdeps
	dh_gencontrol
	dh_md5sums
	dh_builddeb
# Build architecture independent packages using the common target.
binary-indep: build-indep install-indep
	$(MAKE) -f debian/rules DH_OPTIONS=-i binary-common

# Build architecture dependent packages using the common target.
binary-arch: build-arch install-arch
	echo "php:Depends=phpapi-$(shell php-config5 --phpapi)" > $(CURDIR)/debian/substvars
	$(MAKE) -f debian/rules DH_OPTIONS=-s binary-common

binary: binary-arch binary-indep
.PHONY: build clean binary-indep binary-arch binary install install-indep install-arch configure
