#!/usr/bin/make -f
# ICU debian/rules that uses debhelper.

# The Debian packages for ICU are created and maintained by
# Yves Arrouye <yves@debian.org>. They are part of Debian GNU/Linux
# since the Debian woody release.

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

# This is the debhelper compatability version to use.
export DH_COMPAT=2
#firstdir := $(shell sed -n 's/Package: \(.*\)/\1/p' debian/control | head -1)else

# Where the source for ICU is, where to build
srcdir = source
builddir = build
# How to get to $(srcdir) from $(builddir)
builddir_relative_topdir = ..
builddir_relative_srcdir = $(builddir_relative_topdir)/$(srcdir)

# Getting the ICU version numbers, stolen from configure.in (that's okay, I
# wrote the configure.in part anyway)

version := $(shell sed -n -e 's/^[ 	]*\#[ 	]*define[ 	]*U_ICU_VERSION[ 	]*"\([^"]*\)".*/\1/p' $(srcdir)/common/unicode/uversion.h)
libversion := $(shell echo $(version) | sed -e 's/\.//' -e 's/^\([^.]*\)$$/\1.0/')
major := $(shell echo $(libversion) | sed 's/\..*//')

# ICU installation directories, w/o the initial slash
pkgdatadir = usr/share/icu
icudatadir = $(pkgdatadir)/$(version)
pkglibdir = usr/lib/icu
iculibdir = $(pkglibdir)/$(version)
datasrcdir = usr/share/icu/$(version)/data

# Build flags

CFLAGS = -O2 # -Wall
CXXFLAGS = -O2 # -Wall
INSTALL_PROGRAM = /usr/bin/install

ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS)))
CFLAGS += -g
CXXFLAGS += -g
endif
ifneq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
INSTALL_PROGRAM += -s
endif

all: build

configure: $(builddir)/configure-stamp
$(builddir)/configure-stamp:
	# Add here commands to configure the package.
	test -d $(builddir) || mkdir $(builddir)
	cd $(builddir); CFLAGS='$(CFLAGS)' CXXFLAGS='$(CFLAGS)' INSTALL_PROGRAM='$(INSTALL_PROGRAM)' $(SHELL) $(builddir_relative_srcdir)/configure --srcdir=$(builddir_relative_srcdir) --prefix=/usr --mandir=/usr/share/man --sysconfdir=/etc --with-data-packaging=files --disable-rpath --enable-shared --enable-static --disable-samples
	touch $@

build: $(builddir)/configure-stamp debian-files $(builddir)/build-stamp

# Build some Debian files
DEBIAN_FILES=icu.conffiles postinst prerm icu.postinst icu.prerm libicu$(major).postinst

debian/%: debian/%.in
	cd $(builddir) \
	  && CONFIG_FILES=$(builddir_relative_topdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status

debian/libicu$(major).%: debian/libicu.%
	cp $< $@

debian-files: $(addprefix debian/,$(DEBIAN_FILES))

$(builddir)/build-stamp:
	dh_testdir

	# Add here commands to compile the package.
	$(MAKE) -C $(builddir)

	touch $@

clean:
	dh_testdir
	dh_testroot
	 $(RM) $(builddir)/build-stamp $(builddir)/configure-stamp

	# Add here commands to clean up after the build process.
	-$(MAKE) -C $(builddir) distclean
	#-$(RM) `find $(builddir)/samples $(builddir)/test -name Makefile -print`
	-$(RM) `find $(builddir) -name Makefile -print`
	dh_clean
	$(RM) $(addprefix debian/,$(DEBIAN_FILES)) debian/control.new

	#if test -d $(builddir) -a $(builddir) != $(srcdir); then rmdir `find $(builddir) -type d -print | sort -r`; fi
	if test -d $(builddir) -a $(builddir) != $(srcdir); then $(RM) -r $(builddir); fi

install: build
	dh_testdir
	dh_testroot
	dh_clean -k
	dh_installdirs

	# Add here commands to install the package into debian/tmp
	$(MAKE) -C $(builddir) install DESTDIR=`pwd`/debian/tmp

# Build architecture-independent files here.
binary-indep: build install
	#
	# build icu-doc package by moving files
	#
	mv debian/tmp/usr/share/doc/icu debian/tmp/usr/share/doc/icu-doc
	dh_movefiles -picu-doc \
	    usr/share/doc/icu-doc
	#
	# build icu-i18ndata from the source data
	#
	test -d debian/icu-i18ndata/$(datasrcdir) || \
	    mkdir -p debian/icu-i18ndata/$(datasrcdir)
	install -m 644 $(srcdir)/../data/*.txt \
	    $(srcdir)/../data/*.brk \
	    debian/icu-i18ndata/$(datasrcdir)
	cd debian/icu-i18ndata/$(datasrcdir) && \
	    $(RM) convrtrs.txt
	#
	# build icu-data from the source data
	#
	test -d debian/icu-data/$(datasrcdir) || \
	    mkdir -p debian/icu-data/$(datasrcdir)
	install -m 644 $(srcdir)/../data/*.ucm \
	    debian/icu-data/$(datasrcdir)
	test -d debian/icu-data/$(datasrcdir)/unidata || \
	    mkdir -p debian/icu-data/$(datasrcdir)/unidata
	install -m 644 $(srcdir)/../data/unidata/*.* \
	    debian/icu-data/$(datasrcdir)/unidata

# Build architecture-dependent files here.
binary-arch: build install
#	dh_testversion
	dh_testdir
	dh_testroot
	#
	# build libicu${major} package by moving files from icu-dev
	#
	rm -f debian/tmp/usr/lib/libicuctestfw.*
	dh_movefiles -plibicu$(major) \
	    usr/lib/*.so.* \
	    usr/lib/libicudt*
	mkdir debian/libicu$(major)/usr/lib/icu
	#
	# build icu package by moving files from icu-dev
	#
	dh_movefiles -picu \
	    etc \
	    usr/bin \
	    usr/sbin \
	    $(icudatadir)/README \
	    $(iculibdir)/*.cnv \
	    $(iculibdir)/u*.dat \
	    $(iculibdir)/tz.dat \
	    usr/share/man
	rm debian/tmp/$(pkglibdir)/current
	rm debian/tmp/$(iculibdir)/cnvalias.dat
	#
	# build icu-locales package by moving files from icu-dev
	#
	dh_movefiles -picu-locales \
	    $(iculibdir)/*.res \
	    $(iculibdir)/*.brk
	#
	# move the rest of the development files
	# in their package
	#
	dh_movefiles usr
	#
	# do a bit of cleanup
	#
	rm -rf debian/tmp/etc debian/tmp/usr/sbin \
	    debian/tmp/usr/share/man
	#
	# continue to prepare packages
	#
#	dh_installdebconf
	dh_installdocs
	dh_installexamples $(srcdir)/samples/*
	find debian/libicu-dev -name CVS -o -name .cvsignore | xargs rm -rf
	dh_installmenu
#	dh_installemacsen
#	dh_installpam
#	dh_installinit
	dh_installcron
	dh_installmanpages -picu
	dh_installinfo
	dh_undocumented -picu genccode.8 gennames.8 gennorm.8 \
	    genprops.8 gentz.8 genfchk.8 genqchk.8 pkgdata.8
	dh_installchangelogs 
	dh_link
	dh_strip
	dh_compress
	dh_fixperms
	# You may want to make some executables suid here.
	dh_makeshlibs
	dh_installdeb
#	dh_perl
	dh_shlibdeps -ldebian/libicu$(major)/usr/lib
	dh_gencontrol -- -Vversion=$(version) -Vmajor=$(major)
	dh_md5sums
	dh_builddeb

# Automatically update changelog and control
update-debian-files:
	cvers=`sed -n 's/^icu (\([^)]*\)).*/\1/p' debian/changelog | head -1`; if dpkg --compare-versions $$cvers lt $(version)-1; then \
	    dch -v $(version)-1 "Update to ICU version $(version)."; \
	    sed 's/libicu[0-9][0-9]*/libicu$(major)/g' debian/control >debian/control.new && mv debian/control.new debian/control; \
 	fi

binary: update-debian-files binary-indep binary-arch
.PHONY: build clean binary-indep binary-arch binary install debian-files update-changelog

