#!/usr/bin/make -f
# Made with the aid of debmake, by Christoph Lameter,
# based on the sample debian/rules file for GNU hello by Ian Jackson.

export HYPRE_SOVERSION=2.11.1

export DEB_CFLAGS_MAINT_APPEND  = -Wall -pedantic -O3
export DEB_CXXFLAGS_MAINT_APPEND  = -Wall -pedantic -O3
export DEB_LDFLAGS_MAINT_APPEND = -Wl,--no-as-needed
export DEB_HOST_MULTIARCH := $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
export DEB_HOST_ARCH := $(shell dpkg-architecture -qDEB_HOST_ARCH)

%:
	dh $@ --sourcedirectory=src --with autoreconf

# to avoid lintian warnings
CPPFLAGS:=$(shell dpkg-buildflags --get CPPFLAGS)
CFLAGS:=$(shell dpkg-buildflags --get CFLAGS)
CXXFLAGS:=$(shell dpkg-buildflags --get CXXFLAGS)
LDFLAGS:=$(shell dpkg-buildflags --get LDFLAGS)

# extra flags set to be similar to what petsc requires
extra_flags += \
  --with-fei --with-mli \
  --with-superlu \
  --with-blas \
  --with-lapack-libs="lapack" --with-lapack-lib-dirs="/usr/lib/lapack" --with-fmangle-lapack="one-underscore" \
  --prefix=$(CURDIR)/debian/tmp/usr

# To get petsc support when indexTypes.integerSize == 64
#ifeq ($(DEB_HOST_ARCH),amd64)
#   extra_flags +=  --enable-bigint
#endif

# from pets:
# # explicitly tell hypre BLAS/LAPACK mangling since it may not match Fortran mangling
#    if self.blasLapack.mangling == 'underscore':
#      mang = 'one-underscore'
#    elif self.blasLapack.mangling == 'caps':
#      mang = 'caps-no-underscores'
#    else:
#      mang = 'no-underscores'
#    args.append('--with-fmangle-blas='+mang)
#    args.append('--with-fmangle-lapack='+mang)


# Other options from src/configure
  # --enable-debug          Set compiler flags for debugging.
  # --enable-shared         Build shared libraries (default is NO).
  # --enable-bigint         Use long long int for HYPRE_Int (default is NO).
  # --enable-complex        Use complex values (default is NO).
  # --enable-maxdim=MAXDIM  Change max dimension size to MAXDIM (default is 3).
  #                         Currently must be at least 3.
  # --enable-persistent     Uses persistent communication (default is NO).
  # --enable-hopscotch      Uses hopscotch hashing if configured with OpenMP and
  #                         atomic capability available(default is NO).
  # --enable-global-partition
  #                         Use global partitioning (default is NO).
  # --enable-fortran        Require a working Fortran compiler (default is YES).

export LD_LIBRARY_PATH :=  $(CURDIR)/debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH):$(LD_LIBRARY_PATH);
export OMPI_MCA_orte_rsh_agent=/bin/false

override_dh_auto_clean:
	echo "Running clean"
	rm -rf $(CURDIR)/debian/tmp
	rm -f src/configure.in
	rm -f src/config.log
	rm -f src/config/config.guess
	rm -f src/config/config.sub
	-dh_auto_clean

override_dh_autoreconf:
	cp /usr/share/misc/config.* src/config/
	cd src && ./config/bootstrap

override_dh_auto_configure:
	dh_auto_configure -- $(extra_flags) --enable-shared
	#dh_auto_configure -p libhypre-complex -- $(extra_flags) --enable-shared --enable-complex

override_dh_auto_build:
# install shared libs
	echo "Building shared libs"
	dh_auto_build

# force to install shared libraries to perform tests
	echo "Installing shared libs"
	$(MAKE) -C src install


override_dh_auto_install:
	echo "Installing shared libs (dh_auto_install)"
	dh_auto_install

override_dh_auto_test:
	echo "Building test"
	$(MAKE) -C src test	

# upstream places the soname in front of .so
# which makes it trickier than desirable to exclude
# the versioned so files in a libhypre-dev.install file
# Easier to just override instead
override_dh_install:
	dh_install -p libhypre-$(HYPRE_SOVERSION) usr/lib/*/*${HYPRE_SOVERSION}.so
	dh_install -p libhypre-dev --exclude=${HYPRE_SOVERSION} usr/lib/*/*
	dh_install -p libhypre-dev usr/include/hypre


# run examples (add -W, -no-as-needed on Unbuntu for ex5f)
#	echo "Building examples"
#	$(MAKE) -C src/examples \
#          HYPRE_LIB_INSTALL=$(CURDIR)/debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH) \
#          HYPRE_INC_INSTALL=$(CURDIR)/debian/tmp/usr/include/hypre
#	ALLPROGS="ex1 ex2 ex3 ex4 ex5 ex5f \
#          ex6 ex7 ex8 ex9 ex11 ex12 ex12f" ; \
#	for ex in $$ALLPROGS; do \
#	   echo "Running $$ex"; \
#	   ls -l src/examples/$$ex; \
#	   mpirun -np 2 src/examples/$$ex ; \
#	done
#	ALLPROGS="ex13 ex14" ; \
#	for ex in $$ALLPROGS; do \
#	   echo "Running $$ex"; \
#	   mpirun -np 3 src/examples//$$ex ; \
#	done
#	ALLPROGS="ex15" ; \
#	for ex in $$ALLPROGS; do \
#	   echo "Running $$ex"; \
#	   mpirun -np 8 src/examples//$$ex ; \
#	done
#	ALLPROGS="ex16" ; \
#	for ex in $$ALLPROGS; do \
#	   echo "Running $$ex"; \
#	   mpirun -np 4 src/examples//$$ex ; \
#	done
#

# run testsuite

#	cd src/test; \
#	for file in `find . -name \*.sh | egrep "^./TEST" | egrep -v "fei|babel|timing"`; do \
#	   echo "./runtest.sh $$file" \
#	   ./runtest.sh $$file; \
#	done; \
#	cd ../..
