#!/usr/bin/make -f

DEB_TAR_SRCDIR = spml-0.6.1
DEB_TARBALL = $(CURDIR)/upstream/$(DEB_TAR_SRCDIR).tar.gz
SRC_TREE = $(CURDIR)/build-tree/$(DEB_TAR_SRCDIR)

include /usr/share/cdbs/1/rules/tarball.mk
include /usr/share/cdbs/1/rules/debhelper.mk
include /usr/share/cdbs/1/class/langcore.mk
include /usr/share/cdbs/1/rules/patchsys-quilt.mk

EXT             := -g95
PACKAGE         := spml$(EXT)
FC              := /usr/bin/g95
MPIFC           := /usr/bin/mpif90.openmpi-g95
SYSFFLAGS       := -O3 -fPIC
FFLAGS          := -O3 -fPIC

CONFIGURE_ENV :=				\
	FC="$(FC)"					\
	SYSFFLAGS="$(SYSFFLAGS)"	\
	FFLAGS="$(FFLAGS)"
CONFIGURE_ENV_MPI:=				\
	FC="$(MPIFC)"				\
	SYSFFLAGS="$(SYSFFLAGS)"	\
	FFLAGS="$(FFLAGS)"

# NetCDF
NETCDF    :=/usr/lib/libnetcdf.a
NETCDFF   :=/usr/lib/libnetcdff$(EXT).a
NETCDFINC :=/usr/include/netcdf$(EXT)/netcdf.inc
CONF_NETCDF:=					\
	--with-netcdf=$(NETCDF)		\
	--with-netcdff=$(NETCDFF)	\
	--with-netcdf-include=$(NETCDFINC)

# Gtool
GTOOL5          :=/usr/lib/gtool5$(EXT)/lib/libgtool5.a
GTOOL5_MPI      :=/usr/lib/gtool5$(EXT)-mpi/lib/libgtool5-mpi.a
CONF_GTOOL5     :=--with-gtool5=$(GTOOL5)
CONF_GTOOL5_MPI :=--with-gtool5=$(GTOOL5_MPI)

# ISPACK
ISPACK      := /usr/lib/libispack$(EXT).a
CONF_ISPACK :=--with-ispack=$(ISPACK)

# Lapack
CONF_LUMATRIX:=--with-lapack=/usr/lib/liblapack-g95.a

CONF_FLAGS :=			  \
	$(CONF_NETCDF)		\
	$(CONF_GTOOL5)		\
	$(CONF_ISPACK)		\
	$(CONF_LUMATRIX)  \
	--with-lumatrix=OMP

CONF_FLAGS_MPI :=		\
	$(CONF_NETCDF)		\
	$(CONF_GTOOL5_MPI)	\
	$(CONF_ISPACK)		\
	$(CONF_LUMATRIX)	\
	--with-lumatrix=OMP \
	--with-mpifc=$(MPIFC)

MANPAGES :=debian/*.1
DEB_INSTALL_MANPAGES_$(PACKAGE):=$(MANPAGES)

clean::
	-quilt pop -a && rm -rf .pc
	-[ -f Config.mk ] && $(MAKE) distclean
	rm -f debian/*.postinst; \
	rm -f debian/*.prerm  ; \
	rm -f debian/*.docs ;\
	rm -f debian/*.links ;\
	rm -f $(MANPAGES)
	rm -f $(CURDIR)/upstream/*.cdbs-config_list

pre-build::
	(cd ./debian && \
	PACKAGE=$(PACKAGE) EXT=$(EXT) PRIORITY=90 sh ./pre-build.sh)

configure/$(PACKAGE):: pre-configure configure-serial configure-parallel
pre-configure: pre-configure-stamp
pre-configure-stamp:
	cp -r $(SRC_TREE) $(SRC_TREE)-parallel
	touch $@
configure-serial:: configure-serial-stamp
configure-serial-stamp:
	(cd $(SRC_TREE) && \
	  $(CONFIGURE_ENV) ./configure $(CONF_FLAGS) \
	  --prefix=/usr/lib/$(PACKAGE) )
	touch $@
configure-parallel: configure-parallel-stamp
configure-parallel-stamp:
	(cd $(SRC_TREE)-parallel && \
	  $(CONFIGURE_ENV_MPI) ./configure $(CONF_FLAGS_MPI) \
	  --prefix=/usr/lib/$(PACKAGE)-mpi )
	touch $@

build/$(PACKAGE):: build-serial build-parallel
build-serial: build-serial-stamp
build-serial-stamp:
	( cd $(SRC_TREE) && make LIBNAME=$(PACKAGE) )
	touch $@
build-parallel: build-parallel-stamp
build-parallel-stamp:
	( cd $(SRC_TREE)-parallel && make LIBNAME=$(PACKAGE) )
	touch $@

install/$(PACKAGE):: install-serial install-parallel post-install
install-serial: install-serial-stamp
install-serial-stamp:
	( cd $(SRC_TREE) && \
	  make install DESTDIR=$(CURDIR)/debian/$(PACKAGE) LIBNAME=$(PACKAGE) )
	touch $@
install-parallel: install-parallel-stamp
install-parallel-stamp:
	( cd $(SRC_TREE)-parallel && \
	  make install DESTDIR=$(CURDIR)/debian/$(PACKAGE) LIBNAME=$(PACKAGE) )
	touch $@
post-install: post-install-stamp
post-install-stamp:
	cd $(CURDIR)/debian/$(PACKAGE)/usr/lib/$(PACKAGE)-mpi/bin ; rm spmfrt
	mkdir -p $(CURDIR)/debian/$(PACKAGE)/usr/share/man/man1
	@for f in spmfrt spmconfig ; do \
	  cat debian/$(PACKAGE)/usr/lib/$(PACKAGE)/bin/$$f | \
	      sed -e s/^#//g | rd2 -r rd/rd2man-lib > debian/$$f$(EXT).1 ;\
	done
	cat debian/$(PACKAGE)/usr/lib/$(PACKAGE)-mpi/bin/mpispmfrt | \
	    sed -e s/^#//g | rd2 -r rd/rd2man-lib > debian/mpispmfrt$(EXT).1
	cat debian/$(PACKAGE)/usr/lib/$(PACKAGE)-mpi/bin/spmconfig | \
	    sed -e s/^#//g | rd2 -r rd/rd2man-lib > debian/mpispmconfig$(EXT).1
