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

DEB_HOST_GNU_TYPE  ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)

CFLAGS = -Wall -g

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

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

include /usr/share/quilt/quilt.make

INSTALLDIR = $(CURDIR)/debian/tmp

_prefix = /usr
_bindir = $(_prefix)/bin
_sbindir = $(_prefix)/sbin
_libdir = $(_prefix)/lib
_includedir = $(_prefix)/include
_sysconfdir = /etc
_localstatedir = /var
_initrddir = $(_sysconfdir)/init.d
_datadir = $(_prefix)/share
_mandir = $(_datadir)/man
_docdir = $(_datadir)/doc

VERSION=1.8.0.1

DEB_BUILD_ARCH_CPU ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH_CPU)

configure: configure-stamp
	:

configure-stamp: $(QUILT_STAMPFN)
	dh_testdir

	for f in config/site.def config/linux.cf ; do \
	    [ ! -e $$f.save ] && cp -p $$f $$f.save || : ; \
	done

	sed 's!@@LIBDIR@@!$(_libdir)!' -i security/Csec_api_loader.c

	# The code violates the strict aliasing rules all over the place...
	# Need to use -fnostrict-aliasing so that the -O2 optimization in
	# CFLAGS doesn't try to use them.
	sed 's/^CC +=/& $(CFLAGS) -fno-strict-aliasing -Wl,-z,defs/' \
	    -i config/linux.cf

	gsoapversion=`soapcpp2 -v 2>&1 | grep C++ | sed 's/.* //'` && \
	./configure lfc --with-mysql \
		--libdir=lib \
		--with-gsoap-location=$(_prefix) \
		--with-gsoap-version=$$gsoapversion \
		--with-voms-location=$(_prefix) \
		--with-id-map-file=$(_sysconfdir)/lcgdm-mapfile \
		--with-ns-config-file=$(_sysconfdir)/NSCONFIG \
		--with-sysconf-dir='$$(prefix)/../etc'

	make -f Makefile.ini Makefiles

	touch $@

build: build-stamp
	:

build-stamp: configure-stamp
	dh_testdir

	$(MAKE) prefix=$(_prefix)

	touch $@

unpatch: cleanup

clean: unpatch
	:

cleanup:
	dh_testdir
	dh_testroot

	if [ -r Makefile ] ; then $(MAKE) clobber ; fi

	for f in config/site.def config/linux.cf ; do \
	    [ -e $$f.save ] && mv $$f.save $$f || : ; \
	done

	sed 's!$(_libdir)!@@LIBDIR@@!' -i security/Csec_api_loader.c

	rm -f imake/imake imake/imake.o imake/ccimake

	find . '(' -name Makefile -a '!' -path */scripts/* ')' -exec rm {} ';'

	rm -f config.status

	rm -f h/patchlevel.h
	rm -f ns/lfc.pm ns/lfc_perlwrap.c
	rm -f ns/lfc.py ns/lfc_wrap.c
	rm -f ns/lfcthr.py ns/lfcthr_wrap.c
	rm -f ns/lfc2.py ns/lfc2_wrap.c
	rm -f ns/lfc2thr.py ns/lfc2thr_wrap.c
	rm -f NSCONFIG

	rm -f build-stamp configure-stamp

	dh_clean

install: build-stamp
	dh_testdir
	dh_testroot
	mkdir -p debian/liblfc-dev$(_docdir)
	ln -s liblfc1 debian/liblfc-dev$(_docdir)/liblfc-dev
	mkdir -p debian/liblcgdm-dev$(_docdir)
	ln -s liblcgdm1 debian/liblcgdm-dev$(_docdir)/liblgcdm-dev
	dh_clean -k

	$(MAKE) prefix=$(INSTALLDIR)$(_prefix) install
	$(MAKE) prefix=$(INSTALLDIR)$(_prefix) install.man

	mv $(INSTALLDIR)$(_datadir)/LFC $(INSTALLDIR)$(_datadir)/lfc

	mkdir -p $(INSTALLDIR)$(_sysconfdir)/init.d
	mkdir -p $(INSTALLDIR)$(_sysconfdir)/default
	mkdir -p $(INSTALLDIR)$(_sysconfdir)/logrotate.d
	mkdir -p $(INSTALLDIR)$(_sbindir)
	mkdir -p $(INSTALLDIR)$(_mandir)/man8

	mkdir -p $(INSTALLDIR)$(_libdir)/lfc-mysql
	mkdir -p $(INSTALLDIR)$(_sysconfdir)/lfc-mysql

	# lfcdaemon startup script
	sed -e 's/LD_LIBRARY_PATH=$$LD_LIBRARY_PATH //' \
	    -e '/LD_LIBRARY_PATH/d' \
	    -e 's!/opt/lcg/bin!/usr/sbin!g' -e 's!/opt/lcg!!g' \
	    $(INSTALLDIR)$(_datadir)/lfc/rc.lfcdaemon > \
	    $(INSTALLDIR)$(_sysconfdir)/lfc-mysql/lfcdaemon.init
	chmod 755 $(INSTALLDIR)$(_sysconfdir)/lfc-mysql/lfcdaemon.init
	rm $(INSTALLDIR)$(_datadir)/lfc/rc.lfcdaemon

	# lfcdaemon configuration file
	sed -e 's!/opt/lcg!!g' \
	    -e 's/\(RUN_LFCDAEMON=\).*/\1"no"/' \
	    $(INSTALLDIR)$(_sysconfdir)/lfcdaemon.conf.templ > \
	    $(INSTALLDIR)$(_sysconfdir)/lfc-mysql/lfcdaemon.conf
	rm $(INSTALLDIR)$(_sysconfdir)/lfcdaemon.conf.templ

	# lfcdaemon log directory and log rotation configuration
	mkdir -p $(INSTALLDIR)$(_localstatedir)/log/lfc
	install -m 644 ns/lfcdaemon.logrotate \
	    $(INSTALLDIR)$(_sysconfdir)/lfc-mysql/lfcdaemon.logrotate

	# lfcdaemon binary and man page
	mv $(INSTALLDIR)$(_bindir)/lfcdaemon \
	   $(INSTALLDIR)$(_libdir)/lfc-mysql/lfcdaemon
	sed -e 's/\(\.TH [^ ]* \)1/\18/' \
	    -e 's!/opt/lcg!!g' \
	    -e 's/lfc-shutdown(1)/lfc-shutdown(8)/g' \
	    $(INSTALLDIR)$(_mandir)/man1/lfcdaemon.1 | gzip -9 -n -c > \
	    $(INSTALLDIR)$(_libdir)/lfc-mysql/lfcdaemon.8.gz
	rm $(INSTALLDIR)$(_mandir)/man1/lfcdaemon.1

	mv $(INSTALLDIR)$(_sysconfdir)/NSCONFIG.templ \
	   $(INSTALLDIR)$(_libdir)/lfc-mysql/NSCONFIG.templ

	# lfc-shutdown binary and man page
	mv $(INSTALLDIR)$(_bindir)/lfc-shutdown \
	   $(INSTALLDIR)$(_libdir)/lfc-mysql/lfc-shutdown
	sed -e 's/\(\.TH [^ ]* \)1/\18/' \
	    $(INSTALLDIR)$(_mandir)/man1/lfc-shutdown.1 | gzip -9 -n -c > \
	    $(INSTALLDIR)$(_libdir)/lfc-mysql/lfc-shutdown.8.gz
	rm $(INSTALLDIR)$(_mandir)/man1/lfc-shutdown.1

	# lfc-dli startup script
	sed -e 's/LD_LIBRARY_PATH=$$LD_LIBRARY_PATH //' \
	    -e '/LD_LIBRARY_PATH/d' \
	    -e 's!/opt/lcg/bin!/usr/sbin!g' -e 's!/opt/lcg!!g' \
	    -e 's!/var/log/dli!/var/log/lfc-dli!g' \
	    $(INSTALLDIR)$(_datadir)/lfc/rc.lfc-dli > \
	    $(INSTALLDIR)$(_sysconfdir)/init.d/lfc-dli
	chmod 755 $(INSTALLDIR)$(_sysconfdir)/init.d/lfc-dli
	rm $(INSTALLDIR)$(_datadir)/lfc/rc.lfc-dli

	# lfc-dli configuration file
	sed -e 's!/var/log/dli!/var/log/lfc-dli!g' \
	    -e 's/\(LFC_HOST=\).*/\1`hostname -f`/' \
	    -e 's/\(RUN_DLIDAEMON=\).*/\1"no"/' \
	    $(INSTALLDIR)$(_sysconfdir)/lfc-dli.conf.templ > \
	    $(INSTALLDIR)$(_sysconfdir)/default/lfc-dli
	rm $(INSTALLDIR)$(_sysconfdir)/lfc-dli.conf.templ

	# lfc-dli log directory and log rotation configuration
	mkdir -p $(INSTALLDIR)$(_localstatedir)/log/lfc-dli
	sed -e 's!/var/log/dli!/var/log/lfc-dli!g' dli/lfc-dli.logrotate > \
	    $(INSTALLDIR)$(_sysconfdir)/logrotate.d/lfc-dli

	# lfc-dli binary and man page
	mv $(INSTALLDIR)$(_bindir)/lfc-dli $(INSTALLDIR)$(_sbindir)/lfc-dli
	sed -e 's/\(\.TH [^ ]* \)1/\18/' \
	    -e 's!/var/log/dli!/var/log/lfc-dli!g' \
	    -e 's/lfcdaemon(1)/lfc-server(8)/g' \
	    $(INSTALLDIR)$(_mandir)/man1/lfc-dli.1 > \
	    $(INSTALLDIR)$(_mandir)/man8/lfc-dli.8
	rm $(INSTALLDIR)$(_mandir)/man1/lfc-dli.1

	sed 's/\(^LFC_VERSION=\).*/\1$(VERSION)/' \
	    scripts/lcg-info-provider-lfc > \
	    $(INSTALLDIR)$(_datadir)/lfc/lcg-info-provider-lfc 
	chmod 755 $(INSTALLDIR)$(_datadir)/lfc/lcg-info-provider-lfc 

	# Move plugins out of the default library search path
	mkdir $(INSTALLDIR)$(_libdir)/lcgdm
	mv $(INSTALLDIR)$(_libdir)/libCsec_plugin_* \
	   $(INSTALLDIR)$(_libdir)/lcgdm

	# Create lfc user home and certificate directories
	mkdir -p $(INSTALLDIR)$(_localstatedir)/lib/lfc
	mkdir -p $(INSTALLDIR)$(_sysconfdir)/grid-security/lfcmgr

	# Remove due to name conflict
	rm $(INSTALLDIR)$(_mandir)/man3/log.3

	# Lintian overrides
	mkdir -p $(INSTALLDIR)/usr/share/lintian/overrides
	install -m 644 debian/lfc-mysql.lintian-overrides \
	        $(INSTALLDIR)/usr/share/lintian/overrides/lfc-mysql

binary-indep:
	:

binary-arch: install
	dh_testdir
	dh_testroot
	dh_installchangelogs
	dh_installdocs
	dh_install --fail-missing
	dh_installman
	dh_link
	dh_strip
	dh_compress
	dh_fixperms
	dh_perl
	dh_pysupport
	dh_makeshlibs
	dh_installdeb
	dh_shlibdeps -l debian/liblcgdm1/usr/lib -l debian/liblfc1/usr/lib
	dh_gencontrol
	dh_md5sums
	dh_builddeb

binary: binary-indep binary-arch
	:

get-orig-source:
	dest="../lfc_$(VERSION).orig.tar.gz" ; \
	if [ -r "$$dest" ] ; then \
	  echo "'$$dest' already exists." ; \
	else \
	  uversion=LCG-DM_R_`echo $(VERSION)|tr "." "_"` ; \
	  echo "Fetching upstream svn version '$$uversion'" ; \
	  rm -rf lfc-$(VERSION) ; \
	  LANG=C svn co http://svnweb.cern.ch/guest/lcgdm/lcg-dm/tags/$$uversion lfc-$(VERSION) ; \
	  echo "Packing it up." ; \
	  GZIP=-9 tar --exclude .svn --exclude debian -z -c -f "$$dest" lfc-$(VERSION) ; \
	  echo "Cleaning up." ; \
	  rm -rf lfc-$(VERSION) ; \
	fi

.PHONY: build clean binary-indep binary-arch binary install configure get-orig-source
