#!/usr/bin/make -f

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

# These are used for cross-compiling and for saving the configure script
# from having to guess our platform (since we know it already)
DEB_HOST_GNU_TYPE  := $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
DEB_BUILD_GNU_TYPE := $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
ifeq ($(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE))
BUILD_SYSTEM = --build $(DEB_BUILD_GNU_TYPE)
else
BUILD_SYSTEM = --build $(DEB_BUILD_GNU_TYPE) --host $(DEB_HOST_GNU_TYPE)
endif

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

CFLAGS += -Wall
LDFLAGS += -Wl,-z,syms

ifneq (,$(filter ratpoison:gendeps,$(DEB_BUILD_OPTIONS)))
	CONFIG_OPTIONS =
else
	CONFIG_OPTIONS = --disable-dependency-tracking
endif
ifneq (,$(filter ratpoison:noxft,$(DEB_BUILD_OPTIONS)))
	CONFIG_OPTIONS += --without-xft
else
	CONFIG_OPTIONS += --with-xft
endif
ifneq (,$(filter ratpoison:readline,$(DEB_BUILD_OPTIONS)))
	CONFIG_OPTIONS += --enable-history
else
	CONFIG_OPTIONS += --disable-history
endif

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

autoreconf-stamp: configure.in Makefile.am src/Makefile.am contrib/Makefile.am doc/Makefile.am
	dh_testdir
	autoreconf -i
	touch autoreconf-stamp

config.status: autoreconf-stamp
	dh_testdir
	./configure $(BUILD_SYSTEM) \
	    --prefix=/usr \
	    --mandir=\$${prefix}/share/man --infodir=\$${prefix}/share/info \
	    --with-xterm=x-terminal-emulator \
	    --with-menu="/etc/X11/ratpoison/ratpoisonmenu debian.menu" \
	    $(CONFIG_OPTIONS) \
	    --x-includes="" --x-libraries="" \
	    CFLAGS='$(CFLAGS)' CPPFLAGS='$(CPPFLAGS)' LDFLAGS='$(LDFLAGS)'
	# libXext is not needed for dynamic linking:
	sed -i -e '/^X_LIBS =/s/-lXext //' src/Makefile
# do not delete config.status if above rule failed,
# as that might hide other left over files that need cleaning
.PRECIOUS: config.status

build-arch: build-arch-stamp
build-arch-stamp: config.status
	dh_testdir

	$(MAKE)
	# bindings for the different languages
	unset RATPOISON ; cd contrib && ./genrpbindings
	# manpage for rpws
	pod2man contrib/rpws rpws.1
	touch build-arch-stamp

build-indep: build-indep-stamp
build-indep-stamp:
	touch build-indep-stamp
build: build-arch build-indep

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

	if [ -e config.status ] ; then $(MAKE) maintainer-clean ; fi
	! test -f config.log
	-rm -f contrib/Ratpoison.pm contrib/ratpoison-cmd.el contrib/ratpoison.lisp contrib/ratpoison.py contrib/ratpoison.rb
	-rm -f rpws.1
	-rm -f config.sub config.guess
	dh_clean

# Build architecture-independent files
binary-indep: build-indep-stamp
# We have nothing to do

# Build architecture-dependent files
binary-arch: build-arch-stamp
	dh_testdir
	dh_testroot
	dh_prep
	dh_installdirs

	$(MAKE) install pkgdatadir=/usr/share/doc/ratpoison/examples DESTDIR=$(CURDIR)/debian/ratpoison
	# since Debian uses gnu install-info, this seems to need manual removing...
	find debian/ratpoison -name "dir" -print -delete
	# Those are installed to different places already by dh_*
	rm debian/ratpoison/usr/share/doc/ratpoison/COPYING
	rm debian/ratpoison/usr/share/doc/ratpoison/ChangeLog
	# not needed two times:
	rm debian/ratpoison/usr/share/doc/ratpoison/examples/rpws
	# The menu command:
	install -D -m 0755 debian/callmenu.sh debian/ratpoison/etc/X11/ratpoison/ratpoisonmenu
	dh_install
	dh_installchangelogs ChangeLog
	dh_installdocs
	dh_installexamples
	dh_installemacsen
	dh_installmenu
	dh_installinfo doc/ratpoison.info
	dh_installman rpws.1
	dh_link
	dh_strip
	dh_compress
	find debian/ratpoison -name "dir.gz" -print -delete
	dh_fixperms
	dh_installdeb
	dh_shlibdeps
	dh_gencontrol
	dh_md5sums
	dh_builddeb

binary: binary-indep binary-arch
.PHONY: build-arch build-indep build clean binary-indep binary-arch binary maintainer-clean maintainer-unclean
