#! /usr/bin/make -f
# -*- makefile -*-

#export DH_VERBOSE=1
export DH_COMPAT=4

ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
    NUMJOBS = $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
    MAKEFLAGS += -j$(NUMJOBS)
endif
ifndef CFLAGS
    CFLAGS = -O2
endif
ifneq (,$(findstring thumb,$(DEB_BUILD_OPTIONS)))
    CFLAGS += -mthumb
endif

PKG	= bash2
YACC	= bison-1.35 -y

# Black makefile magic
reverse=$(strip $(eval __=)$(foreach _,$1,$(eval __=$_ $(__)))$(__))

configure_args = \
	--with-curses \
	--disable-net-redirections \
	--enable-largefile \
	--prefix=/usr \
	--infodir=/usr/share/info \
	--mandir=/usr/share/man \
	--with-installed-readline \
	--without-bash-malloc

patchdir = debian/patches
bash_patches = \
	deb-bash-config \
	privmode \
	various \
	report-155436 \
	bash205b-001 \
	bash205b-002 \
	bash205b-004 \
	bash205b-005 \
	bash205b-006 \
	bash205b-007 \
	rbash-login-shell \
	execute-cmd \
	builtins-shift \
	suspend-segfault \
	mailcheck \
	gcc-3.4

build: stamp-build
stamp-build: stamp-configure
	dh_testdir
	$(MAKE)
	touch stamp-build

configure: stamp-configure
stamp-configure: stamp-patch
	dh_testdir
	YACC="$(YACC)" CFLAGS="$(CFLAGS)" ./configure $(configure_args)
	touch stamp-configure

clean: $(if $(wildcard stamp-patch),stamp-unpatch)
	dh_testdir
	dh_testroot
	if [ -f Makefile ]; then make mostlyclean; fi
	# bash makefiles are such a mess...
	rm -f stamp-* config.status config.log config.h \
		Makefile buildversion.o bashversion \
		builtins/Makefile builtins/builtext.h builtins/builtins.c \
		builtins/mkbuiltins builtins/mkbuiltins.o \
		builtins/pipesize.h builtins/psize.aux \
		examples/loadables/Makefile examples/loadables/perl/Makefile \
		lib/glob/Makefile lib/malloc/Makefile lib/readline/Makefile \
		lib/sh/Makefile lib/termcap/Makefile lib/tilde/Makefile \
		lsignames.h mksignames mksyntax signames.h support/Makefile \
		syntax.c
	dh_clean

install: build stamp-install
stamp-install: stamp-build
	dh_testdir
	dh_testroot
	dh_clean -k
	dh_installdirs
	install -m 0755 -s bash debian/$(PKG)/bin/bash
	install -m 0755 debian/bash-setup.sh debian/$(PKG)/usr/bin/bash-setup.sh
	install -m 0644 debian/etc.bash.bashrc debian/$(PKG)/etc/bash.bashrc
	install -m 0644 debian/etc.profile.d.prompt.sh debian/$(PKG)/etc/profile.d/prompt.sh
	install -m 0644 debian/etc.profile.d.chk-bash-setup.sh debian/$(PKG)/etc/profile.d/chk-bash-setup.sh
	touch $@

binary:	binary-indep binary-arch
binary-indep:
binary-arch: stamp-install
	dh_testdir
	dh_testroot
	dh_strip
	dh_compress
	dh_fixperms
	dh_shlibdeps
	dh_makeshlibs
	dh_installdeb
	dh_shlibdeps
	dh_gencontrol
	dh_md5sums
	dh_builddeb

patch: stamp-patch
stamp-patch: $(foreach p,$(bash_patches),stamp-patch-$(p))
	echo -e "\nPatches applied in this version:" > pxxx
	for i in $(bash_patches); do \
	  echo -e "\n$$i:" >> pxxx; \
	  sed -n 's/^# *DP: */  /p' $(patchdir)/$$i.dpatch >> pxxx; \
	done
	mv -f pxxx $@

stamp-patch-%: $(patchdir)/%.dpatch
	@if [ -f $@ ]; then \
	  echo "$* patches already applied."; exit 1; \
	fi
	/bin/sh $< -patch
	rm -f stamp-unpatch-$*
	echo "$* patches applied." > $@

unpatch: stamp-unpatch
stamp-unpatch: $(foreach p,$(call reverse,$(bash_patches)),stamp-unpatch-$(p))
	rm -f $@

stamp-unpatch-%: $(patchdir)/%.dpatch
	@if [ -f $@ ]; then \
	  echo "$* patches already removed."; exit 1; \
	fi
	/bin/sh $< -unpatch
	rm -f stamp-patch-$*
	echo "$* patches removed." > $@

.PHONY: patch unpatch binary binary-arch binary-indep clean \
    build install
