#!/usr/bin/make -f

export DH_VERBOSE=1

include /usr/share/dpkg/pkg-info.mk
include /usr/share/debhelper/dh-fortran/fortran-support.mk

DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
LIBDIR:=/usr/lib/$(DEB_HOST_MULTIARCH)
INCDIR:=/usr/include/$(DEB_HOST_MULTIARCH)
DESTDIR:=$(CURDIR)/debian/tmp
CMAKE_DIR:=$(DESTDIR)/$(LIBDIR)/cmake

BUILDDIR=debian/build
BUILDDIR_DEFAULT=$(BUILDDIR)-$(FC_DEFAULT)

export FIAT_TEST_IGNORE_MPI_OUTPUT=1

DEB_CFLAGS_MAINT_APPEND= -I$(CURDIR)/src -I$(CURDIR)/obj-$(DEB_HOST_MULTIARCH)/src
DEB_CXXFLAGS_MAINT_APPEND= -I$(CURDIR)/src -I$(CURDIR)/obj-$(DEB_HOST_MULTIARCH)/src
include /usr/share/dpkg/buildflags.mk

# OMP Doesn't appear to work on these archs
ARCH_NO_OMP:= riscv64 sparc64
ENABLE_OMP:=  $(if $(filter $(DEB_TARGET_ARCH), $(ARCH_NO_OMP)),Off,On)

BUILD_FLAGS = \
	-DENABLE_DOCS=On \
	-DENABLE_OMP=$(ENABLE_OMP) \
	-DENABLE_FORTRAN=On \
	-DENABLE_FCKIT=On \
	-DENABLE_MPI=On 

# Test suite requires 4 processors. Fake it
export OMPI_MCA_rmaps_base_oversubscribe=1

%:
	# dh $@ --buildsystem=ecbuild --builddir=$(BUILDDIR_DEFAULT) --with fortran_mod
	dh $@ --buildsystem=ecbuild --builddir=$(BUILDDIR_DEFAULT) --with fortran_mod

override_dh_auto_clean:
	dh_auto_clean
	rm -rf $(BUILDDIR)-*

define dh_configure_fortran_TEMPLATE =
  FCFLAGS_$(1) = $(if $(filter $(1), gfortran),  $(FCFLAGS), $(FCFLAGS_FOR_BUILD) )
  dh_configure_fortran_$(1):
	dh_auto_configure --builddirectory=${BUILDDIR}-$(1)  -- \
			${BUILDFLAGS} \
			-DCMAKE_Fortran_COMPILER=$(call get_fc_exe,$(1)) \
			-DCMAKE_Fortran_FLAGS="$$(FCFLAGS_$(1))"
endef
$(eval $(call foreach_fc_execute_before,configure))


define dh_build_fortran_TEMPLATE =
  dh_build_fortran_$(1):
	dh_auto_build --builddirectory=$(BUILDDIR)-$(1)
endef
$(eval $(call foreach_fc_execute_before,build))


define dh_test_fortran_TEMPLATE = 
  dh_test_fortran_$(1):
ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
	(LD_LIBRARY_PATH=$(BUILDDIR)-$(1)/lib dh_auto_test --builddirectory=$(BUILDDIR)-$(1) || true)
endif
endef
$(eval $(call foreach_fc_execute_before,test))

override_dh_auto_test:

define dh_install_fortran_TEMPLATE =
  dh_install_fortran_$(1):
	mkdir -p $(DESTDIR)/$(LIBDIR)
	$(foreach f, fiat parkind_sp parkind_dp, cp  $(BUILDDIR)-$(1)/lib/lib${f}.so.0d $(DESTDIR)/$(LIBDIR)/lib$(f)-$(1).so.0d ; )
	$(foreach f, fiat parkind_sp parkind_dp, patchelf  --set-soname lib$(f)-$(1).so.0d $(DESTDIR)/$(LIBDIR)/lib$(f)-$(1).so.0d ; )
	$(foreach f, fiat parkind_sp parkind_dp, dh_install -p libfiat-0 $(LIBDIR)/lib$(f)-$(1).so.0d ; )
	$(foreach f, fiat parkind_sp parkind_dp, dh_link -p libfiat-dev $(LIBDIR)/lib$(f)-$(1).so.0d $(LIBDIR)/fortran/$(1)/lib$(f).so ; )
endef
$(eval $(call foreach_fc_execute_after,install))

override_dh_auto_install:
	dh_auto_install
	chrpath -d $(DESTDIR)/usr/bin/fiat-printbinding
	chrpath -d $(DESTDIR)/$(LIBDIR)/*.so*
	# Fix broken paths
	sed -i -e 's%$${_IMPORT_PREFIX}/include/fiat%/usr/include/${DEB_HOST_MULTIARCH}/fiat%g' \
		-e 's%$${_IMPORT_PREFIX}/include/mpi_serial%/usr/include/${DEB_HOST_MULTIARCH}/mpi_serial%g' \
		-e 's%$${_IMPORT_PREFIX}/module/fiat%${FMODDIR}/fiat%g' \
		-e 's%$${_IMPORT_PREFIX}/module/parkind_dp%${FMODDIR}/parkind_dp%g' \
		-e 's%$${_IMPORT_PREFIX}/module/parkind_sp%${FMODDIR}/parkind_sp%g' \
		$(CMAKE_DIR)/fiat/fiat-targets.cmake	

override_dh_dwz:
	@echo DWZ conflicts with patchelf - avoid

