#!/usr/bin/make -f
include debian/make.mk

$(call lazy,DEB_HOST_MULTIARCH,$$(shell dpkg-architecture -qDEB_HOST_MULTIARCH))
$(call lazy,CFLAGS,$$(shell dpkg-buildflags --get CFLAGS))
$(call lazy,CPPFLAGS,$$(shell dpkg-buildflags --get CPPFLAGS))
$(call lazy,LDFLAGS,$$(shell dpkg-buildflags --get LDFLAGS))

DEB_HOST_ARCH_BITS := 64
DEB_HOST_MULTIARCH := x86_64-w64-mingw32
DEB_HOST_GNU_TYPE := x86_64-w64-mingw32

# Enable MinGW-w64
CFLAGS := $(filter-out -fstack-protector,$(CFLAGS))
CPPFLAGS := $(filter-out -D_FORTIFY_SOURCE=2,$(CPPFLAGS))
UNSUPPORTED_LDFLAGS := -Wl,-z,relro
LDFLAGS := $(filter-out $(UNSUPPORTED_LDFLAGS),$(LDFLAGS))

ifneq (,$(filter -O3,$(CFLAGS)))
  CFLAGS := $(CFLAGS) -Wno-error=maybe-uninitialized
endif

PREPROCESS_FILES := $(wildcard debian/*.in)

$(PREPROCESS_FILES:.in=): %: %.in
	sed 's,/@DEB_HOST_MULTIARCH@,$(DEB_HOST_MULTIARCH:%=/%),g;$(EXTRA_REPLACES)' $< > $@

UPSTREAM_VERSION := $(shell dpkg-parsechangelog | sed -n 's/^Version: *\([0-9]*:\)\?\([^~]*\)\(~.*\)\?-.*$$/\2/ p')
MOD_MAJOR_VERSION := $(word 1, $(subst ., ,$(UPSTREAM_VERSION)))
MOD_MINOR_VERSION := $(word 2, $(subst ., ,$(UPSTREAM_VERSION)))
MOD_PATCH_VERSION := $(or $(word 3, $(subst ., ,$(UPSTREAM_VERSION))),0)

debian/nss.pc: EXTRA_REPLACES := s/@VERSION@/$(UPSTREAM_VERSION)/
debian/nss-config: EXTRA_REPLACES := s/@MOD_MAJOR_VERSION@/$(MOD_MAJOR_VERSION)/;s/@MOD_MINOR_VERSION@/$(MOD_MINOR_VERSION)/;s/@MOD_PATCH_VERSION@/$(MOD_PATCH_VERSION)/
debian/libnss3.lintian-overrides: EXTRA_REPLACES := s,/@DEB_HOST_MULTIARCH_WC@,$(DEB_HOST_MULTIARCH:%=/*),g

ifeq (64,$(DEB_HOST_ARCH_BITS))
USE_64 := USE_64=1
else ifeq ($(shell dpkg-architecture -qDEB_HOST_ARCH),x32)
USE_64 := USE_X32=1
else
USE_64 :=
endif

# $(foreach foo,$(list),$(call cmd,some command $(foo))) expands to
#    some command first-elem
#    some command second-elem
#    etc.
# This avoid using a long one liner with semi colons.
define cmd
$(1)

endef

CFLAGS += -Wall -pipe

DISTDIR := $(CURDIR)/dist

override_dh_auto_build:
	PATH="$$PATH:$(CURDIR)/debian/bin" \
	$(MAKE) -C nss \
		all \
		NSPR_INCLUDE_DIR=/usr/$(DEB_HOST_MULTIARCH)/include/nspr \
		NSPR_LIB_DIR=/usr/$(DEB_HOST_MULTIARCH)/lib \
		SOURCE_PREFIX=$(DISTDIR) \
		SOURCE_MD_DIR=$(DISTDIR) \
		DIST=$(DISTDIR) \
		BUILD_OPT=1 \
		NS_USE_GCC=1 \
		OPTIMIZER="$(CFLAGS) $(CPPFLAGS)" \
		LDFLAGS='$(LDFLAGS) $$(ARCHFLAG) $$(ZDEFS_FLAG)' \
		DSO_LDOPTS='-shared $$(LDFLAGS)' \
		NSS_USE_SYSTEM_SQLITE=1 \
		NSS_ENABLE_ECC=1 \
		NSS_DISABLE_GTESTS=1 \
		CHECKLOC= \
		OS_TARGET=WIN95 \
		$(USE_64)

override_dh_auto_clean:
	-$(MAKE) -C nss \
		clobber \
		SOURCE_PREFIX=$(DISTDIR) \
		SOURCE_MD_DIR=$(DISTDIR) \
		DIST=$(DISTDIR) \
		BUILD_OPT=1 \
		NSS_DISABLE_GTESTS=1 \
		OS_TARGET=WIN95 \
		$(USE_64)
	find -name '*.OBJ' -prune -execdir rm -r '{}' \;

	rm -rf $(DISTDIR) $(PREPROCESS_FILES:.in=)

PREFIXDIR := debian/nss-mingw-w64-x86-64/usr/$(DEB_HOST_MULTIARCH)

override_dh_auto_install: $(PREPROCESS_FILES:.in=)
	install -m 755 -d $(PREFIXDIR)/bin \
		$(PREFIXDIR)/include/nss \
		$(PREFIXDIR)/lib/nss \
		$(PREFIXDIR)/lib/pkgconfig
	install -m 644 -t $(PREFIXDIR)/lib \
		$(DISTDIR)/lib/nss3.dll \
		$(DISTDIR)/lib/nssutil3.dll \
		$(DISTDIR)/lib/smime3.dll \
		$(DISTDIR)/lib/ssl3.dll
	install -m 644 -t $(PREFIXDIR)/lib/nss \
		$(DISTDIR)/lib/freebl3.dll \
		$(DISTDIR)/lib/freeblpriv3.dll \
		$(DISTDIR)/lib/softokn3.dll \
		$(DISTDIR)/lib/nssdbm3.dll \
		$(DISTDIR)/lib/nsssysinit.dll \
		$(DISTDIR)/lib/nssckbi.dll

	install -m 644 -t $(PREFIXDIR)/include/nss \
		$(DISTDIR)/public/nss/*
	install -m 644 -t $(PREFIXDIR)/lib \
		$(DISTDIR)/lib/libcrmf.a
	install -m 644 -t $(PREFIXDIR)/lib/pkgconfig debian/nss.pc
	install -m 755 -t $(PREFIXDIR)/bin debian/nss-config

	dh_strip
	$(DEB_HOST_GNU_TYPE)-strip $(PREFIXDIR)/lib/*.dll \
		$(PREFIXDIR)/lib/nss/*.dll
	$(foreach lib,softokn3.dll freebl3.dll freeblpriv3.dll nssdbm3.dll, \
		shlibsign -v -i $(PREFIXDIR)/lib/nss/$(lib);)

override_dh_strip:

override_dh_makeshlibs: /usr/share/debhelper/autoscripts/postinst-makeshlibs /usr/share/debhelper/autoscripts/postrm-makeshlibs
	dh_makeshlibs -a -- -c4
	cat /usr/share/debhelper/autoscripts/postinst-makeshlibs > debian/libnss3.postinst.debhelper
	cat /usr/share/debhelper/autoscripts/postrm-makeshlibs > debian/libnss3.postrm.debhelper

ifneq (,$(DEB_HOST_MULTIARCH))
override_dh_gencontrol:
	dh_gencontrol -- -Vmisc:Multi-Arch=same
endif

override_dh_builddeb:
	dh_builddeb -- -Zxz

%:
	dh $@
