#!/usr/bin/make -f

ifneq (,$(DEB_MAINTAINER_MODE))
  # Enable stuff not policy compliant (eg. unsuitable for build daemons)
  DEB_COPYRIGHT_CHECK_STRICT = yes
endif

include debian/cdbs/1/rules/copyright-check.mk
include debian/cdbs/1/class/scons.mk
include /usr/share/cdbs/1/rules/debhelper.mk

# Enable parallel building
ifneq (,$(findstring parallel,$(DEB_BUILD_OPTIONS)))
    PARALLEL_JOBS := $(shell echo $(DEB_BUILD_OPTIONS) | \
        sed -e 's/.*parallel=\([0-9]\+\).*/\1/')
NJOBS := -j$(PARALLEL_JOBS)
endif

DEB_COMPRESS_EXCLUDE := .py .cpp .h .pdf
DEB_INSTALL_DOCS_ALL += AUTHORS README TODO

DEB_DH_INSTALL_SOURCEDIR = debian/tmp

DEB_SCONS_INVOKE = `which scons` --directory="$(DEB_BUILDDIR)"

DEB_SCONS_CONFIGURE_TARGET = configure
DEB_SCONS_CONFIGURE_OPTIONS = \
	prefix=/usr \
	enableMpi=1 \
	enableUmfpack=1 \
	enableTrilinos=1 \
	enablePetsc=1 \
	withPetscDir=/usr/lib/petsc \
	withPetscArch=`petscarch` \
	enableSlepc=1 \
	withSlepcDir=/usr/lib/slepcdir/3.0.0 \
	enableScotch=1 \
	enableDocs=0 \
	enableDemos=0 \
	enableTests=0 \
	enablePython=1 \
	enableParmetis=0 \
	enableMtl4=0 \
	enableCgal=0

DEB_SCONS_BUILD_OPTIONS = $(NJOBS)

DEB_SCONS_INSTALL_OPTIONS = DESTDIR=$(DEB_DESTDIR)

doc_dir = $(CURDIR)/debian/dolfin-doc/usr/share/doc/dolfin-doc

USCAN_DESTDIR := $(CURDIR)

PYVERSIONS = $(shell pyversions --requested debian/control)

clean::
	find dolfin -name "*.os" | xargs rm -f
	find dolfin -name "*.so*" | xargs rm -f
	find scons -name "*.pyc" | xargs rm -f
	rm -f .sconf_temp
	rm -f scons/.sconsign.dblite
	rm -f scons/configure.log
	rm -f scons/options.cache
	rm -rf scons/pkgconfig
	rm -f simula_scons.log
	rm -f dolfin.conf
	rm -f doc/manual/dolfin-user-manual.aux
	rm -f doc/manual/dolfin-user-manual.bbl
	rm -f doc/manual/dolfin-user-manual.blg
	rm -f doc/manual/dolfin-user-manual.dvi
	rm -f doc/manual/dolfin-user-manual.idx
	rm -f doc/manual/dolfin-user-manual.ilg
	rm -f doc/manual/dolfin-user-manual.ind
	rm -f doc/manual/dolfin-user-manual.log
	rm -f doc/manual/dolfin-user-manual.out
	rm -f doc/manual/dolfin-user-manual.pdf
	rm -f doc/manual/dolfin-user-manual.ps
	rm -f doc/manual/dolfin-user-manual.toc
	rm -rf $(addprefix install-stamp-, $(PYVERSIONS))

# Re-configure, build, and install for all versions of Python
install/python-dolfin:: $(addprefix install-stamp-, $(PYVERSIONS))
install-stamp-%:
	rm -f scons/pkgconfig/python*.pc
	rm -f scons/pkgconfig/numpy*.pc
	`which $*` $(DEB_SCONS_INVOKE) $(DEB_SCONS_CONFIGURE_TARGET) \
	  $(DEB_SCONS_CONFIGURE_OPTIONS)
	`which $*` $(DEB_SCONS_INVOKE) $(DEB_SCONS_BUILD_OPTIONS)
	`which $*` $(DEB_SCONS_INVOKE) $(DEB_SCONS_INSTALL_TARGET) \
	  $(DEB_SCONS_INSTALL_OPTIONS)

# Generate pkg-config file for DOLFIN based on pkg-config files 
# in scons/pkgconfig:
	cd $(DEB_DESTDIR)/usr/lib/pkgconfig && \
	for req in `grep "^Requires:" dolfin.pc | cut -d':' -f2 | tac -s ' '`; \
	do \
	  if [ -e $$req.pc ]; \
	  then \
	    sed -i "/^Libs/s|$$|`PKG_CONFIG_PATH=$$PWD pkg-config $$req --libs` |" dolfin.pc; \
	    sed -i "/^Cflags/s|$$|`PKG_CONFIG_PATH=$$PWD pkg-config $$req --cflags` |" dolfin.pc; \
	    sed -i "/^Requires:/s/$$req/ /g" dolfin.pc; \
	  fi; \
	done

	touch $@

install/dolfin-doc::
	mkdir -p $(doc_dir)/demo
	mkdir -p $(doc_dir)/data
	cp -a demo/adaptivity $(doc_dir)/demo
	cp -a demo/fem $(doc_dir)/demo
	cp -a demo/function $(doc_dir)/demo
	cp -a demo/la $(doc_dir)/demo
	cp -a demo/mesh $(doc_dir)/demo
	cp -a demo/ode $(doc_dir)/demo
	cp -a demo/parameters $(doc_dir)/demo
	cp -a demo/pde $(doc_dir)/demo
	cp -a demo/plot $(doc_dir)/demo
	cp -a demo/quadrature $(doc_dir)/demo
	cp -a data/graphs $(doc_dir)/data
	cp -a data/meshes $(doc_dir)/data
# Generate and install the documentation pdf:
	cd doc/manual && make final
	cp doc/manual/dolfin-user-manual.pdf $(doc_dir)

binary-install/python-dolfin::
	dh_pycentral -p$(cdbs_curpkg)

binary-install/dolfin-bin::
	dh_pycentral -p$(cdbs_curpkg)

get-orig-source:
	uscan --force-download --verbose --destdir $(USCAN_DESTDIR) \
	 --download-version $(DEB_UPSTREAM_VERSION) \
	 --upstream-version $(DEB_UPSTREAM_VERSION)
