#!/usr/bin/make -f

# Enable hardening build flags, except:
#  pie: causes build failure
export DEB_BUILD_MAINT_OPTIONS=hardening=+all,-pie

DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
LIBDIR:=/usr/lib/$(DEB_HOST_MULTIARCH)
INCDIR:=/usr/include

UPSTREAM_VERSION = $(shell echo $(DEB_VERSION_UPSTREAM) | sed -e 's/\+.*//')
SO_VERSION:=19

PNETCDF_ARCHS:= amd64 arm64 mips64el ppc64el s390x alpha ia64 sparc64 kfreebsd-amd64 ppc64 riscv64 loong64

include /usr/share/mpi-default-dev/debian_defaults
MPI:=$(ARCH_DEFAULT_MPI_IMPL)

include /usr/share/dpkg/pkg-info.mk


# Verbose test output
export VERBOSE=1
export DH_VERBOSE=1

CFLAGS:= $(shell dpkg-buildflags --get CFLAGS)

%:
	dh $@ --buildsystem=cmake

CMAKE_FLAGS:=   -DCMAKE_BUILD_TYPE=Release \
		-DCMAKE_SKIP_RPATH:BOOL=ON \
		-DENABLE_TESTS:BOOL=ON \
		-DENABLE_DOXYGEN:BOOL=ON \
		-DENABLE_MMAP=ON \
		-DUSE_SZIP=ON 

override_dh_auto_configure:
ifneq ($(filter $(PNETCDF_ARCHS),$(DEB_HOST_ARCH)),)
	dh_auto_configure --builddirectory=build-pnetcdf -- \
		$(CMAKE_FLAGS) \
		-DHDF5_INCLUDE_PATH=$(INCDIR)/hdf5/$(MPI) \
		-DHDF5_LIBRARY_PATH=$(LIBDIR)//hdf5/$(MPI) \
		-DENABLE_PNETCDF=ON \
		-DPNETCDF_INCLUDE_DIR=/usr/include \
		-DLIBLIB_VERSION_SCRIPT=-Wl,--version-script,$(CURDIR)/debian/netcdf-pnetcdf.ver \
		-DCMAKE_C_COMPILER=mpicc  \
		-DNETCDF_LIB_NAME=netcdf_pnetcdf 
endif
	dh_auto_configure --builddirectory=build-mpi --  \
		$(CMAKE_FLAGS) \
		-DENABLE_PARALLEL_TESTS:BOOL=OFF \
		-DUSE_HDF5=ON \
		-DENABLE_PARALLEL4=ON \
	        -DHDF5_INCLUDE_PATH=$(INCDIR)/hdf5/$(MPI) \
		-DHDF5_LIBRARY_PATH=$(LIBDIR)/hdf5/$(MPI) \
		-DHDF5_C_LIBRARIES=$(LIBDIR)/hdf5/$(MPI)/libhdf5.so \
		-DHDF5_HL_LIBRARIES=$(LIBDIR)/hdf5/$(MPI)/libhdf5_hl.so \
		-DCMAKE_C_FLAGS="${CFLAGS} -DHDF5_PARALLEL" \
		-DLIBLIB_VERSION_SCRIPT=-Wl,--version-script,$(CURDIR)/debian/netcdf-mpi.ver \
		-DCMAKE_C_COMPILER=mpicc  \
		-DNETCDF_LIB_NAME=netcdf_mpi

override_dh_auto_build:
ifneq ($(filter $(PNETCDF_ARCHS),$(DEB_HOST_ARCH)),)
	$(MAKE) -C build-pnetcdf
endif
	$(MAKE) -C build-mpi

override_dh_auto_clean:
	rm -rf build-* debian/tmp* debian/*.postinst

override_dh_auto_install:
	$(MAKE) -C build-mpi install DESTDIR=$(CURDIR)/debian/tmp-mpi
	mkdir -p debian/tmp/$(LIBDIR)/netcdf/mpi/cmake debian/tmp/$(LIBDIR)/cmake debian/tmp/$(LIBDIR)/pkgconfig
	cp debian/tmp-mpi/$(LIBDIR)/libnetcdf.settings debian/tmp/$(LIBDIR)/netcdf/mpi/libnetcdf.settings
	mkdir -p debian/tmp/$(LIBDIR)/netcdf/mpi/include
	cp debian/tmp-mpi/usr/include/*	debian/tmp/$(LIBDIR)/netcdf/mpi/include
	cp -a debian/tmp-mpi/$(LIBDIR)/cmake/netCDF	debian/tmp/$(LIBDIR)/cmake/netCDF_mpi
	cp -a debian/tmp-mpi/$(LIBDIR)/libnetcdf_*.so* debian/tmp/$(LIBDIR)
	dh_link -p libnetcdf-mpi-dev  $(LIBDIR)/cmake/netCDF_mpi $(LIBDIR)/netcdf/mpi/cmake/netCDF
	cp debian/tmp-mpi/$(LIBDIR)/libnetcdf_mpi.so.$(SO_VERSION) debian/tmp/$(LIBDIR)/libnetcdf_mpi.so.$(SO_VERSION)
	# sed -e 's%@MULTIARCH@%$(DEB_HOST_MULTIARCH)%g' < debian/libnetcdf-mpi-dev.postinst.in \
	# > debian/libnetcdf-mpi-dev.postinst
	echo "prefix=$(LIBDIR)/netcdf/mpi" > debian/tmp/$(LIBDIR)/pkgconfig/netcdf-mpi.pc
	sed -e 's/-lnetcdf/-lnetcdf_mpi/' < debian/tmp-mpi/$(LIBDIR)/pkgconfig/netcdf.pc \
		| grep -v "prefix=" \
		>> debian/tmp/$(LIBDIR)/pkgconfig/netcdf-mpi.pc
	dh_link -p libnetcdf-mpi-dev $(LIBDIR)/libnetcdf_mpi.so.$(SO_VERSION) $(LIBDIR)/netcdf/mpi/libnetcdf.so
	dh_link -p libnetcdf-mpi-dev $(LIBDIR)/libnetcdf_mpi.so.$(SO_VERSION) $(LIBDIR)/libnetcdf_mpi.so
	dh_link -p libnetcdf-mpi-dev $(LIBDIR)/netcdf/mpi  $(LIBDIR)/netcdf/mpi/lib
	dh_link -p libnetcdf-mpi-dev  $(LIBDIR)/pkgconfig/netcdf-mpi.pc $(LIBDIR)/netcdf/mpi/pkgconfig/netcdf.pc

ifneq ($(filter $(PNETCDF_ARCHS),$(DEB_HOST_ARCH)),)
	$(MAKE) -C build-pnetcdf install DESTDIR=$(CURDIR)/debian/tmp-pnetcdf 
	mkdir -p debian/tmp/$(LIBDIR)/netcdf/pnetcdf/cmake debian/tmp/$(LIBDIR)/cmake debian/tmp/$(LIBDIR)/pkgconfig 
	cp debian/tmp-pnetcdf/$(LIBDIR)/libnetcdf.settings debian/tmp/$(LIBDIR)/netcdf/pnetcdf/libnetcdf.settings 
	mkdir -p debian/tmp/$(LIBDIR)/netcdf/pnetcdf/include 
	cp debian/tmp-pnetcdf/usr/include/*	debian/tmp/$(LIBDIR)/netcdf/pnetcdf/include 
	cp -a debian/tmp-pnetcdf/$(LIBDIR)/cmake/netCDF	debian/tmp/$(LIBDIR)/cmake/netCDF_pnetcdf 
	cp -a debian/tmp-pnetcdf/$(LIBDIR)/libnetcdf_*.so* debian/tmp/$(LIBDIR) 
	dh_link -p libnetcdf-pnetcdf-dev  $(LIBDIR)/cmake/netCDF_pnetcdf $(LIBDIR)/netcdf/pnetcdf/cmake/netCDF 
	cp debian/tmp-pnetcdf/$(LIBDIR)/libnetcdf_pnetcdf.so.$(SO_VERSION) debian/tmp/$(LIBDIR)/libnetcdf_pnetcdf.so.$(SO_VERSION) 
	# sed -e 's%@MULTIARCH@%$(DEB_HOST_MULTIARCH)%g' < debian/libnetcdf-pnetcdf-dev.postinst.in \
 	#		> debian/libnetcdf-pnetcdf-dev.postinst 
	echo "prefix=$(LIBDIR)/netcdf/pnetcdf" > debian/tmp/$(LIBDIR)/pkgconfig/netcdf-pnetcdf.pc 
	sed -e 's/-lnetcdf/-lnetcdf_pnetcdf/' < debian/tmp-pnetcdf/$(LIBDIR)/pkgconfig/netcdf.pc \
		| grep -v "prefix=" \
		>> debian/tmp/$(LIBDIR)/pkgconfig/netcdf-pnetcdf.pc 
	dh_link -p libnetcdf-pnetcdf-dev $(LIBDIR)/libnetcdf_pnetcdf.so.$(SO_VERSION) $(LIBDIR)/netcdf/pnetcdf/libnetcdf.so 
	dh_link -p libnetcdf-pnetcdf-dev $(LIBDIR)/libnetcdf_pnetcdf.so.$(SO_VERSION) $(LIBDIR)/libnetcdf_pnetcdf.so
	dh_link -p libnetcdf-pnetcdf-dev $(LIBDIR)/netcdf/pnetcdf  $(LIBDIR)/netcdf/pnetcdf/lib
	dh_link -p libnetcdf-pnetcdf-dev  $(LIBDIR)/pkgconfig/netcdf-pnetcdf.pc $(LIBDIR)/netcdf/pnetcdf/pkgconfig/netcdf.pc
endif
	# Strip RPATH
	-find $(CURDIR)/debian/tmp/usr/bin -type f -not -name nc-config -exec chrpath --delete {} \;
	-find $(CURDIR)/debian/tmp/usr/lib -type f -name "*.so*" -exec chrpath --delete {} \;
	cp include/netcdf_par.h debian/tmp/$(LIBDIR)/netcdf/mpi/include 
	find $(CURDIR)/debian/tmp/usr/lib -type f \( -name "*.settings" -or -name "*.cmake" \) -print0 | \
		xargs -0r sed -i -e 's@ [^ ]*-f\(file\|debug\)-prefix-map=[^ ]*@@g'

override_dh_auto_test:
	ARGS="--output-on-failure" dh_auto_test --max-parallel=1 || echo "Ignoring test failures"
	# Disable tests for pnetcdf. Multiple failures in nc_test where char conversions give:
	# test_put.c: NetCDF: Numeric conversion not representablea
	# This for 1.7.0pre1
	# LD_LIBRARY_PATH=$(CURDIR)/build-pnetcdf/liblib    $(MAKE) -C build-pnetcdf test

override_dh_installchangelogs:
	dh_installchangelogs RELEASE_NOTES.md

override_dh_strip:
	dh_strip --dbgsym-migration='netcdf-dbg (<< 1:4.5.0-2~)'

override_dh_makeshlibs:
	dh_makeshlibs -- -v$(UPSTREAM_VERSION)
