#!/usr/bin/make -f

export DEB_BUILD_MAINT_OPTIONS  = hardening=+all

DPKG_EXPORT_BUILDFLAGS = 1
include /usr/share/dpkg/default.mk

export CGO_CFLAGS   = $(CFLAGS)
export CGO_CPPFLAGS = $(CPPFLAGS)
export CGO_CXXFLAGS = $(CXXFLAGS) # probably irrelevant
export CGO_FFLAGS   = $(FFLAGS)   # even more so
export CGO_LDFLAGS  = $(LDFLAGS)

export DH_GOPKG = main

%:
	dh $@ --with=golang,python3

PACKAGE = ncbi-entrez-direct
LIB_DIR = /usr/lib/$(PACKAGE)
PKG_BIN_DIR = debian/$(PACKAGE)/usr/bin

WRAPPERS = $(filter-out bin/edict.sh, $(GO_APPS:%=bin/%.sh))
AS_IS_SCRIPTS = accn-at-a-time amino-acid-composition asn2ref \
                between-two-genes blst2tkns bsmp2info combine-uid-lists \
                csv2xml custom-index difference-uid-lists \
                disambiguate-nucleotides download-* ds2pme esample \
                exclude-uid-lists expand-current filter-columns \
                filter-record filter-stop-words find-in-gene fsa2xml \
                fuse-ranges fuse-segments gbf2* gene2range gff-sort gff2xml \
                gm2segs hgvs2spdi ini2xml intersect-uid-lists \
                join-into-groups-of json2xml jsonl2xml just-top-hits \
                pair-at-a-time pm-collect pm-refresh pma2apa pma2pme pmc2bioc \
                pmc2info print-columns print-missing-subranges \
                quote-grouped-elements ref2pmid refseq-nm-cds reorder-columns \
                scn2xml skip-if-file-exists snp2hgvs snp2tbl \
                sort-by-length sort-table sort-uniq-count* spdi2tbl \
                split-at-intron systematic-mutations tbl2prod tbl2xml \
                uniq-table word-at-a-time xml2fsa xml2tbl xy-plot yaml2xml
PERL_SCRIPTS = run-ncbi-converter xml2json
BIN_PERL_SCRIPTS = $(PERL_SCRIPTS:%=bin/%)
ECOMMON_SCRIPTS = ecollect efetch efilter einfo elink epost esearch
BIN_ECOMMON_SCRIPTS = $(ECOMMON_SCRIPTS:%=bin/%)
XCOMMON_SCRIPTS = cit2pmid pm-clean pm-prepare pm-setup \
                  xfetch xfilter xinfo xlink xsearch
BIN_XCOMMON_SCRIPTS = $(XCOMMON_SCRIPTS:%=bin/%)
OTHER_SCRIPTS = $(wildcard archive-*) esummary nquire
BIN_OTHER_SCRIPTS = $(OTHER_SCRIPTS:%=bin/%)
FIX_PERL_SHEBANG = 1s,^\#!/usr/bin/env perl$$,\#!/usr/bin/perl,

GOCODE    = /usr/share/gocode
GH        = github.com
GL        = golang.org
GOLIBSRC_ = $(GH)/fatih/color $(GH)/gabriel-vasile/mimetype \
            $(GH)/gedex/inflector $(GH)/gin-contrib/sse $(GH)/gin-gonic/gin \
            $(GH)/go-playground/locales \
            $(GH)/go-playground/universal-translator \
            $(GH)/go-playground/validator/v10 $(GH)/goccy/go-yaml \
            $(GH)/klauspost/compress $(GH)/klauspost/cpuid \
            $(GH)/klauspost/pgzip $(GH)/komkom/toml $(GH)/leodido/go-urn \
            $(GH)/mattn/go-colorable $(GH)/mattn/go-isatty \
            $(GH)/pbnjay/memory $(GH)/pelletier/go-toml/v2 $(GH)/pkg/errors \
            $(GH)/rainycape/unidecode $(GH)/shirou/gopsutil \
            $(GH)/stretchr/objx $(GH)/stretchr/testify \
            $(GH)/surgebase/porter2 $(GH)/ugorji/go/codec \
            $(GL)/x/crypto $(GL)/x/net $(GL)/x/sys $(GL)/x/text \
            $(GL)/x/xerrors google.golang.org/protobuf gopkg.in/yaml.v2
GOLIBSRC  = $(GOLIBSRC_:%=$(GOCODE)/src/%)

export GO111MODULE = off
export GOCACHE = $(CURDIR)/go-build
export GOPATH = $(CURDIR)/obj-$(DEB_HOST_GNU_TYPE)
GOLIBS = $(GOPATH)/src/eutils $(GOLIBSRC:$(GOCODE)/%=$(GOPATH)/%)

GO_APPS     = edict rchive transmute xtract
BIN_GO_APPS = $(GO_APPS:%=bin/%)

GOVERSION := $(word 3,$(shell go version)) # go version **goX.Y.Z** OS/CPU
GO_IS_OLD := $(shell dpkg --compare-versions 0$(GOVERSION) ge 0go1.10 || echo $$?)
ifneq (,$(GO_IS_OLD))
  export PATH := /usr/lib/go-1.10/bin:$(PATH)
endif

USE_LIB_DIR = s,\"$$pth\(\"*\)/,\"$(LIB_DIR)\1/,g

$(GOPATH)/%: # /usr/share/gocode/%
	mkdir -p $(dir $@)
	ln -s /usr/share/gocode/$* $@

$(GOPATH)/src/eutils:
	mkdir -p $(GOPATH)/src
	ln -s $(CURDIR)/eutils $@

$(GOPATH)/src/%: debian/vendor/%
	mkdir -p $(dir $@)
	ln -s $(CURDIR)/$< $@

# Needed by 4/7 archive-* scripts as of 23.7.20250401, harmless for the rest
bin/archive-%: archive-%
	mkdir -p bin
	sed -e '$(USE_LIB_DIR)' $< > $@
	chmod +x $@

bin/esummary: esummary
	mkdir -p bin
	sed -e 's/efetch/&.ncbi/' $< > $@
	chmod +x $@

bin/nquire: nquire
	mkdir -p bin
	sed -e '$(USE_LIB_DIR); s/ --no-check-certificate / /' $< > $@
	chmod +x $@

bin/%.sh: %
	mkdir -p bin
	sed -e 's,xml2json,$(LIB_DIR)/&,; s/python/&3/; /to precompiled/q' \
	    $< > $@
	echo 'exec $(LIB_DIR)/$< "$$@"' >> $@
	chmod +x $@

$(BIN_PERL_SCRIPTS): bin/%: %
	mkdir -p bin
	sed -e '$(FIX_PERL_SHEBANG)' $< > $@
	chmod +x $@

$(BIN_ECOMMON_SCRIPTS) $(BIN_XCOMMON_SCRIPTS): bin/%: %
	mkdir -p bin
	sed -e '$(USE_LIB_DIR)' $< > $@
	chmod +x $@

ifneq (,$(wildcard /usr/share/gocode/src/$(GH)/klauspost/cpuid/v2))
  $(GOPATH)/src/$(GH)/klauspost/cpuid: $(GOLIBS)
	mkdir -p $(GOPATH)/src/$(GH)/klauspost
	ln -s /usr/share/gocode/src/$(GH)/klauspost/cpuid/v2 \
	    $(GOPATH)/src/$(GH)/klauspost/cpuid
endif

$(BIN_GO_APPS): bin/%: cmd/%.go $(GOLIBS)
# Always use gccgo?  The resulting binary would be much smaller, but
# pull in a large shared library with few other reverse dependencies.
	go build -v -gccgoflags '$(CFLAGS) $(LDFLAGS)' -o $@ \
	    $(GOPATH)/src/$(DH_GOPKG)/$*.go

override_dh_auto_configure:
	mkdir -p $(GOPATH)/src/$(DH_GOPKG)
	ln -sv $(CURDIR)/cmd/*.go $(GOPATH)/src/$(DH_GOPKG)

override_dh_auto_build: $(WRAPPERS) $(BIN_PERL_SCRIPTS) \
                        $(BIN_ECOMMON_SCRIPTS) $(BIN_XCOMMON_SCRIPTS) \
                        $(BIN_OTHER_SCRIPTS) $(BIN_GO_APPS)
	dh_auto_build
	install $(AS_IS_SCRIPTS) bin/
	mv bin/efetch bin/efetch.ncbi
	mv bin/einfo  bin/einfo.ncbi
	install debian/efetch debian/einfo bin/
# It's spuriously executable, and dh_python3's practice of making hard links
# interferes with correcting permissions only for the installed copy.
	install -m644 edirect.py debian/

override_dh_install:
	dh_install
	mv $(PKG_BIN_DIR)/xml2json debian/$(PACKAGE)/$(LIB_DIR)/
	for x in $(GO_APPS); do \
	    test -f $(PKG_BIN_DIR)/$$x.sh || continue ; \
	    mv -v $(PKG_BIN_DIR)/$$x debian/$(PACKAGE)/$(LIB_DIR)/ ; \
	    mv -v $(PKG_BIN_DIR)/$$x.sh $(PKG_BIN_DIR)/$$x ; \
	done

override_dh_installexamples:
	dh_installexamples
	sed -i '$(FIX_PERL_SHEBANG)' debian/*/usr/share/doc/*/examples/*

override_dh_auto_clean:
	dh_auto_clean
	rm -rf bin debian/edirect.py $(GOCACHE) $(GOPATH)
