#!/usr/bin/make -f
export DEB_BUILD_MAINT_OPTIONS = hardening=+all
export PYTHON=/usr/bin/python3  # for the upstream build system

# Select target architecture
CONFIG_amd64      = x86_64
CONFIG_armhf      = generic
CONFIG_arm64      = cortexa57
CONFIG_ppc64el    = generic
CONFIG            = $(word 1, $(CONFIG_$(DEB_HOST_ARCH)) generic)

# SOVERSION
SOVER := 2

ifneq (,$(filter $(DEB_HOST_ARCH), amd64 kfreebsd-amd64 arm64 mips64el ppc64el s390x ppc64 riscv64 sparc64))
FLAVORS := $(SOVER)-openmp $(SOVER)-pthread $(SOVER)-serial 64-$(SOVER)-openmp 64-$(SOVER)-pthread 64-$(SOVER)-serial
else
FLAVORS := $(SOVER)-openmp $(SOVER)-pthread $(SOVER)-serial
endif

FLAGS := \
	--enable-verbose-make \
	--prefix=/usr \
	--enable-cblas \
	--enable-static \
	--enable-shared \
	--libdir=/usr/lib/$(DEB_HOST_MULTIARCH)

SRCS := $(filter-out debian $(FLAVORS), $(wildcard ./*))


%:
	dh $@ -Smakefile

create_symlinks:
	# BLIS: generic kernels
	set -e; cd debian; \
		for j in openmp pthread serial; do \
		ln -sr libblis$(SOVER)-symbols.generic libblis$(SOVER)-$$j.symbols ;\
		done
	# i386 x32
	set -e; cd debian; for i in i386 x32; do for j in openmp pthread serial; do \
		ln -sr libblis$(SOVER)-symbols.i386 libblis$(SOVER)-$$j.symbols.$$i ;\
		done; done
	# arm64
	set -e; cd debian; for i in arm64; do for j in openmp pthread serial; do \
		ln -sr libblis$(SOVER)-symbols.arm64 libblis$(SOVER)-$$j.symbols.$$i ;\
		done; done
	# armhf: upstream's armv7a kernel assumes NEON
	#set -e; cd debian; for i in armhf; do for j in openmp pthread serial; do \
	#	ln -sr libblis$(SOVER)-symbols.armhf libblis$(SOVER)-$$j.symbols.$$i ;\
	#	done; done
	# amd64
	set -e; cd debian; for i in amd64; do for j in openmp pthread serial; do \
		ln -sr libblis$(SOVER)-symbols.amd64 libblis$(SOVER)-$$j.symbols.$$i ;\
		done; done
	# BLAS64: generic kernels
	set -e; cd debian; \
		for j in openmp pthread serial; do \
		ln -sr libblis64-$(SOVER)-symbols.generic libblis64-$(SOVER)-$$j.symbols ;\
		done
	# BLAS64: arm64
	set -e; cd debian; for i in arm64; do for j in openmp pthread serial; do \
		ln -sr libblis64-$(SOVER)-symbols.arm64 libblis64-$(SOVER)-$$j.symbols.$$i ;\
		done; done
	# BLAS64: amd64
	set -e; cd debian; for i in amd64; do for j in openmp pthread serial; do \
		ln -sr libblis64-$(SOVER)-symbols.amd64 libblis64-$(SOVER)-$$j.symbols.$$i ;\
		done; done
	# maintainer scripts for dev packages
	set -e; cd debian; for i in pthread serial; do \
		ln -sr libblis-openmp-dev.postinst libblis-$$i-dev.postinst; \
		ln -sr libblis-openmp-dev.prerm    libblis-$$i-dev.prerm; \
		ln -sr libblis64-openmp-dev.postinst libblis64-$$i-dev.postinst; \
		ln -sr libblis64-openmp-dev.prerm    libblis64-$$i-dev.prerm;    \
		done
	# maintainer scripts for shlib packages
	set -e; cd debian; for j in pthread serial; do \
		ln -srf libblis$(SOVER)-openmp.postinst libblis$(SOVER)-$$j.postinst; \
		ln -srf libblis$(SOVER)-openmp.prerm    libblis$(SOVER)-$$j.prerm; \
		ln -srf libblis64-$(SOVER)-openmp.postinst libblis64-$(SOVER)-$$j.postinst; \
		ln -srf libblis64-$(SOVER)-openmp.prerm    libblis64-$(SOVER)-$$j.prerm; \
		done



config_%:
	mkdir $*
	cp -r $(SRCS) $*/
	set -e; cd $*; if test -z "$$(echo $* | grep 64)"; then \
		if test -z "$$(echo $* | grep serial)"; then \
			./configure $(FLAGS) -t $(subst $(SOVER)-,,$*) $(CONFIG); \
		else \
			./configure $(FLAGS) --disable-threading $(CONFIG); \
		fi; \
		echo "$*/usr/lib/*/libblis.so.* usr/lib/$(DEB_HOST_MULTIARCH)/" > \
			debian/libblis$*.install; \
	else \
		if test -z "$$(echo $* | grep serial)"; then \
			./configure $(FLAGS) -b 64 -i 64 -t $(subst 64-$(SOVER)-,,$*) $(CONFIG); \
		else \
			./configure $(FLAGS) -b 64 -i 64 --disable-threading $(CONFIG); \
		fi; \
		echo "$*/usr/lib/*/libblis64.so.* usr/lib/$(DEB_HOST_MULTIARCH)/" > \
			debian/libblis$*.install; \
	fi;

override_dh_auto_configure: $(addprefix config_, $(FLAVORS)) create_symlinks
	for f in $(wildcard debian/*.prerm debian/*.postinst); do \
		sed -i -e "s/@DEB_HOST_MULTIARCH@/$(DEB_HOST_MULTIARCH)/g" $$f; \
		done

build_%:
	set -e; if test -n "$$(echo $* | grep 64)"; then \
		dh_auto_build -B$* -- LIBBLIS=libblis64; \
	else \
		dh_auto_build -B$*; \
	fi;

override_dh_auto_build: $(addprefix build_, $(FLAVORS))
	:

test_%:
	set -e; if test -n "$$(echo $* | grep 64)"; then \
		$(MAKE) -C$* check LIBBLIS=libblis64; \
	else \
		$(MAKE) -C$* check; \
	fi;

override_dh_auto_test: $(addprefix test_, $(FLAVORS))
	:

install_%:
	# Don't use the debian/tmp directory
	-$(RM) -rf debian/tmp/*
	# In case we forgot to compile something
	-set -e; if test -n "$$(echo $* | grep 64)"; then \
		dh_auto_install -B$* -- LIBBLIS=libblis64; \
	else \
		dh_auto_install -B$*; \
	fi;
	# Don't use the debian/tmp directory
	-$(RM) -rf debian/tmp/*

	# Install things manually
	set -e; if test -z "$$(echo $* | grep 64)"; then \
		install -Dm0644 $*/lib/*/libblis.so    debian/libblis$*/usr/lib/$(DEB_HOST_MULTIARCH)/libblis.so.$(SOVER) ;\
		install -Dm0644 $*/lib/*/libblis.a     debian/libblis$(subst $(SOVER),,$*)-dev/usr/lib/$(DEB_HOST_MULTIARCH)/libblis.a ;\
		ln -s libblis.so.$(SOVER)              debian/libblis$(subst $(SOVER),,$*)-dev/usr/lib/$(DEB_HOST_MULTIARCH)/libblis.so ;\
		install -Dm0644 $*/include/*/blis.h    debian/libblis$(subst $(SOVER),,$*)-dev/usr/include/$(DEB_HOST_MULTIARCH)/blis.h ;\
		install -Dm0644 $*/include/*/cblas.h   debian/libblis$(subst $(SOVER),,$*)-dev/usr/include/$(DEB_HOST_MULTIARCH)/cblas-blis.h ;\
	else \
		install -Dm0644 $*/lib/*/libblis64.so  debian/libblis$*/usr/lib/$(DEB_HOST_MULTIARCH)/libblis64.so.$(SOVER) ;\
		install -Dm0644 $*/lib/*/libblis64.a   debian/libblis$(subst $(SOVER)-,,$*)-dev/usr/lib/$(DEB_HOST_MULTIARCH)/libblis64.a ;\
		ln -s libblis64.so.$(SOVER)            debian/libblis$(subst $(SOVER)-,,$*)-dev/usr/lib/$(DEB_HOST_MULTIARCH)/libblis64.so ;\
		install -Dm0644 $*/include/*/blis.h    debian/libblis$(subst $(SOVER)-,,$*)-dev/usr/include/$(DEB_HOST_MULTIARCH)/blis64.h ;\
		install -Dm0644 $*/include/*/cblas.h   debian/libblis$(subst $(SOVER)-,,$*)-dev/usr/include/$(DEB_HOST_MULTIARCH)/cblas64-blis.h ;\
	fi;

override_dh_auto_install: $(addprefix install_, $(FLAVORS))
	# Don't use the debian/tmp directory
	-$(RM) -rf debian/tmp/*
