#!/usr/bin/make -f

export DH_VERBOSE=1

BUILDDIR=debian/build
BUILDDIR_FLANG=debian/build-flang

# The magic debhelper  rule
%:
	dh $@ --builddirectory=$(BUILDDIR)

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

# To enable all, uncomment following line
DEB_BUILD_MAINT_OPTIONS:= hardening=+all
DEB_CFLAGS_MAINT_APPEND:= -Wall -pedantic -fPIC 
export DEB_BUILD_MAINT_OPTIONS
export DEB_CFLAGS_MAINT_APPEND DEB_CFLAGS_MAINT_APPEND 

# FC set to f77 by default in make
# Read default compiler name unless FC is actually set
ifeq ($(F77),f77)
  F77:=$(shell basename $(shell readlink /etc/alternatives/f77))
endif

DO_FLANG:=$(if $(wildcard /usr/bin/flang),true, false)

# Flang has problems with -g on some code
FFLAGS_FLANG:=$(shell dpkg-buildflags --get FFLAGS |  sed -e 's/-g //')
FFLAGS_GFORTRAN:=$(shell dpkg-buildflags --get FFLAGS )

LIBDIR_GFORTRAN=$(LIBDIR)/fortran/$(shell basename $(shell readlink -f /usr/bin/gfortran))
LIBDIR_FLANG=$(LIBDIR)/fortran/$(shell basename $(shell readlink -f /usr/bin/flang))

ifneq ($(filter gfortran,$(F77)),)
CPPFLAGS += -DgFortran
endif
ifneq ($(filter flang,$(F77)),)
CPPFLAGS += -DflangFortran
endif

CPPFLAGS += -I/usr/include/cdTime

ARCH:=$(shell dpkg --print-architecture)
AS_NEEDED= -Wl,--as-needed

# On powerpc, amd64, arm*, don't do fPIE, only relro
ifeq ($(ARCH), amd64)
  export LDFLAGS= -Wl,-z,relro -Wl,-z,now
endif
ifeq ($(ARCH), armel)
  export LDFLAGS= -Wl,-z,relro -Wl,-z,now
  export AS_NEEDED=
  export CFLAGS= -g -O2 -Wall
endif
ifeq ($(ARCH), armhf)
  export LDFLAGS= -Wl,-z,relro -Wl,-z,now
endif
ifeq ($(ARCH),powerpc)
  export LDFLAGS= -Wl,-z,relro -Wl,-z,now
  export AS_NEEDED=
  export CFLAGS= -g -O2 -Wall
endif

ifneq ($(wildcard /usr/lib/$(DEB_HOST_MULTIARCH)/hdf5/serial/libhdf5.so),)
  WITH_HDF5:=--with-hdf5=/usr/lib/$(DEB_HOST_MULTIARCH)/hdf5/serial
else
  WITH_HDF5:=--with-hdf5=/usr
endif

ifeq ($(ARCH),hppa)
  WITH_OPENMP:=--disable-openmp
else
  WITH_OPENMP:=--enable-openmp
endif

BUILD_FLAGS = \
	--prefix=/usr --libdir=$(LIBDIR) \
	--enable-cdi-lib --with-zlib=/usr --with-netcdf=/usr  --with-proj=/usr \
	$(WITH_OPENMP) $(WITH_HDF5) \
	--enable-iso-c-interface  --with-fftw3 --with-curl=/usr --with-udunits2=/usr \
	--with-szlib \
	--enable-hirlam-extensions \
	--with-libxml2=usr/ \
	--with-eccodes=/usr --disable-cgribex --with-magics=/usr

override_dh_auto_clean:
	dh_auto_clean	|| echo "distclean ok"
	rm -rf debian/build debian/build-flang

override_dh_auto_configure:
	ln -sf /usr/include/cfortran.h libcdi/src/cfortran.h
	dh_auto_configure --builddirectory=$(BUILDDIR) -- \
		FC=gfortran $(BUILD_FLAGS)  \
		LIBS="-lm -ljpeg -lz -lcurl" LDFLAGS="$(LDFLAGS) $(AS_NEEDED)"
	$(DO_FLANG) && dh_auto_configure --builddirectory=$(BUILDDIR_FLANG)  -- \
		LIBS="-lm -ljpeg -lz -lcurl" LDFLAGS="$(LDFLAGS) $(AS_NEEDED)" \
		FC=flang  FFLAGS="$(FFLAGS_FLANG)" \
		|| true

override_dh_auto_build:
	dh_auto_build --builddirectory=$(BUILDDIR) 
	$(DO_FLANG) && $(MAKE) -C $(BUILDDIR_FLANG)/libcdi/src  || true
	(cd contrib  && ruby makecompl.rb )

override_dh_auto_install:
	dh_auto_install
	for d in debian/tmp/$(LIBDIR)/pkgconfig/cdi.pc $(BUILDDIR)/libcdi/src/pkgconfig/cdi_f2003.pc ; do \
		sed -e 's%${CURDIR}%/build/cdo%g' < $$d > debian/tmp/x ; \
		mv debian/tmp/x $$d ; \
	done
	$(DO_FLANG) && ( \
		sed -e 's%${CURDIR}%/build/cdo%g' < $(BUILDDIR_FLANG)/libcdi/src/pkgconfig/cdi_f2003.pc > debian/tmp/x ; \
		mv debian/tmp/x $(BUILDDIR_FLANG)/libcdi/src/pkgconfig/cdi_f2003.pc ) || true
	mkdir -p $(DESTDIR)/usr/share/bash-completions/completions $(DESTDIR)//usr/share/zsh/functions/Completion/Linux
	cp contrib/cdoCompletion.bash $(DESTDIR)/usr/share/bash-completions/completions/cdo
	cp contrib/cdoCompletion.zsh $(DESTDIR)//usr/share/zsh/functions/Completion/Linux/_cdo
	find $(DESTDIR) -name '*.la' -delete -o -name '*.so' -delete -o -name '*.so.0' -delete 
	mkdir -p $(DESTDIR)/$(LIBDIR)/fortran/gfortran
	mv $(DESTDIR)/$(LIBDIR)/libcdi_f2003.so.0.0.0  $(DESTDIR)/$(LIBDIR)//libcdi_f2003-gfortran.so.0.0.0
	mv $(DESTDIR)/$(LIBDIR)/libcdi_f2003.a         $(DESTDIR)/$(LIBDIR)/fortran/gfortran
	patchelf  --set-soname libcdi_f2003-gfortran.so.0 $(DESTDIR)/$(LIBDIR)//libcdi_f2003-gfortran.so.0.0.0
	$(DO_FLANG) && ( \
		mkdir -p $(DESTDIR)/$(LIBDIR)/fortran/flang ; \
		cp  ./debian/build-flang/libcdi/src/.libs/libcdi_f2003.a $(DESTDIR)/$(LIBDIR)/fortran/flang ; \
		) || true

override_dh_dwz:
	@echo "DWZ currently breaks because of patchelf"

override_dh_auto_test:
	# Need to define path to 'cdo' for python tests
ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
	export PATH=$(PATH):$(CURDIR)/src make check
endif
