#!/usr/bin/make -f

include /usr/share/cdbs/1/rules/debhelper.mk
include /usr/share/cdbs/1/rules/upstream-tarball.mk

pkg = $(DEB_SOURCE_PACKAGE)
pkg-mono = $(pkg)-mono
pkg-core = $(pkg)-core
pkg-extra = $(pkg)-extra
pkg-ui-core = $(pkg)-ui-core
pkg-ui-extra = $(pkg)-ui-extra
pkg-udeb-di = $(pkg)-hinted-udeb
pkg-nothinted = $(pkg)-unhinted
pkg-udeb-extra = $(pkg)-unhinted-udeb
pkg-croscore = fonts-croscore

DEB_UPSTREAM_URL = https://github.com/googlei18n/noto-fonts/archive
DEB_UPSTREAM_PACKAGE = NotoFonts-hinted
DEB_UPSTREAM_TARBALL_SRCDIR = noto-fonts-$(DEB_UPSTREAM_TARBALL_BASENAME)

DEB_UPSTREAM_TARBALL_SRCDIR += $(if \
 $(filter $(DEB_UPSTREAM_PACKAGE)-%,$(DEB_UPSTREAM_TARBALL_BASENAME)),\
  $(error set DEB_UPSTREAM_TARBALL_BASENAME to commit hash))

DEB_INSTALL_DOCS_ALL += README.md FAQ.md FAQ-KR.md NEWS.md

# resolve font facts and encode for control file (see deb-substvars(5) )
substvars-list-encode = perl -0 -F/\\n/ -ane 'print " * ", join("\$${Newline} * ",@F)'

# Generate fonts list
weights = Black ExtraBold Bold SemiBold Neutral Medium Light ExtraLight Thin
weights := $(weights) $(patsubst %,%Italic,$(weights))
weights := $(weights) $(foreach distortion,ExtraCondensed Condensed SemiCondensed,\
 $(patsubst %,$(distortion)%,$(weights)))
weights := $(patsubst Neutral,Regular,$(weights))
weights := $(subst Neutral,,$(weights))
weights-core = Bold BoldItalic Regular Italic
weights-extra = $(filter-out $(weights-core),$(weights))
filter-core = %-Bold.ttf %-BoldItalic.ttf %-Italic.ttf %-Regular.ttf
filter-extra = $(foreach weight,$(weights-extra),%-$(weight).ttf)
filter-core-ui = $(subst %,%UI,$(filter-core))
filter-extra-ui = $(subst %,%UI,$(filter-extra))
_filters = $(filter $(filter-$(1)),\
 $(if $(2),\
  $(filter-out $(filter-$(2)),$(3)),\
  $(3)))
fonts-hinted-all = $(wildcard hinted/Noto*.ttf)
fonts-unhinted-all = $(wildcard unhinted/Noto*.ttf)
fonts-ui-core = $(call _filters,core-ui,,$(fonts-hinted-all))
fonts-ui-extra = $(call _filters,extra-ui,,$(fonts-hinted-all))
fonts-core = $(call _filters,core,core-ui,$(fonts-hinted-all))
fonts-extra = $(call _filters,extra,extra-ui,$(fonts-hinted-all))
fonts-unhinted = $(filter $(filter-core),$(fonts-unhinted-all))
fonts-croscore = $(wildcard hinted/Arimo*.ttf hinted/Cousine*.ttf hinted/Tinos*.ttf)
fonts-shipped-noto = $(fonts-core) $(fonts-extra)
fonts-shipped-all = $(fonts-shipped-noto) $(fonts-ui-core) $(fonts-ui-extra) $(fonts-croscore) $(fonts-unhinted)
fonts-nothinted = $(filter-out $(subst hinted,unhinted,$(fonts-shipped-all)),$(fonts-unhinted))
fonts-missed = $(filter-out $(notdir $(fonts-shipped-all)),$(notdir $(fonts-hinted-all) $(fonts-unhinted-all)))

$(if $(fonts-missed),$(warning Fonts missed in Debian packaging: $(fonts-missed)))

# use unhinted fonts in udeb, and split by what debian-installer needs
fonts-udeb-di = $(filter unhinted/NotoSerifGujarati-% unhinted/NotoSansSinhala-%,\
 $(call _filters,core,core-ui,$(fonts-unhinted-all)))
fonts-udeb-extra = $(call _filters,core,core-ui,$(fonts-unhinted-all))

fonts-scriptcount = $(shell \
 otfinfo -s $(fonts-shipped-noto) \
 | perl -n \
  -e 's/^.*\t+//;' \
  -e 's, ?(/|Default|<unknown|v\.2|\(.*\)).*,,;' \
  -e 's,^([^/]+)/\1,$1,;' \
  -e '/./ and print;' \
 | sort -u \
 | grep -c .)

# Install fonts
DEB_DH_INSTALL_ARGS_$(pkg-croscore) = $(fonts-croscore) usr/share/fonts/truetype/croscore/
define _installvar =
DEB_DH_INSTALL_ARGS_$$(pkg-$(1)) = $$(fonts-$(1)) usr/share/fonts/truetype/noto/
endef
$(foreach flavor,core extra ui-core ui-extra udeb-di nothinted udeb-extra,\
 $(eval $(call _installvar,$(flavor))))

# install bug-* files into all binary packages
DEB_DH_BUGFILES_ARGS_ALL = --all

# resolve scriptcount and familylist for long descriptions
DEB_DH_GENCONTROL_ARGS_ALL = -- -Vfonts:scriptcount="$(fonts-scriptcount)"
define _listvar =
install/$$(pkg-$(1))::
	printf fonts:familylist= \
		>> debian/$$(cdbs_curpkg).substvars
	otfinfo -a $$(fonts-$(1)) | cut -d: -f2 \
		| LC_ALL=C sort -u \
		| $$(substvars-list-encode) \
		>> debian/$$(cdbs_curpkg).substvars
endef
$(foreach flavor,core extra ui-core ui-extra nothinted,\
 $(eval $(call _listvar,$(flavor))))