#!/usr/bin/make -f
#-*- makefile -*-

# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1

export DEB_BUILD_ARCH_OS ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH_OS)

export LC_ALL:=C.UTF-8

export DEB_BUILD_MAINT_OPTIONS = hardening=+all future=+lfs
include /usr/share/dpkg/buildtools.mk
DPKG_EXPORT_BUILDFLAGS = 1
include /usr/share/dpkg/buildflags.mk

DESTDIR=$(CURDIR)/debian/tmp

DDEBUG=`if (echo $(DEB_BUILD_OPTIONS) | grep -q debug) then \
		echo "--enable-debug"; \
	else \
		echo ""; \
	fi`

export DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
export DEB_HOST_GNU_TYPE  ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
export DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)

TCLV_PRIMARY = 8.6
TCLV_SECONDARY = 9.1

export LDFLAGS += -Wl,--as-needed
ifeq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE))
  confflags += --build=$(DEB_HOST_GNU_TYPE)
  export CROSS_BUILDING=no
else
  confflags += --build=$(DEB_BUILD_GNU_TYPE) --host=$(DEB_HOST_GNU_TYPE)
  LDFLAGS += -L/usr/lib/$(DEB_HOST_MULTIARCH)
  export CROSS_BUILDING=yes
endif

ifeq ($(origin CC),default)
  HOST_CC ?= $(DEB_HOST_GNU_TYPE)-gcc
else
  HOST_CC ?= $(CC)
endif

export CFLAGS += -O2 -fno-strict-aliasing \
	-DSQLITE_SECURE_DELETE -DSQLITE_ENABLE_COLUMN_METADATA \
	-DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS \
	-DSQLITE_ENABLE_RTREE -DSQLITE_SOUNDEX=1 \
	-DSQLITE_ENABLE_UNLOCK_NOTIFY \
	-DSQLITE_ENABLE_DBSTAT_VTAB \
	-DSQLITE_ENABLE_DBPAGE_VTAB \
	-DSQLITE_ALLOW_ROWID_IN_VIEW \
	-DSQLITE_ENABLE_UPDATE_DELETE_LIMIT=1 \
	-DSQLITE_ENABLE_LOAD_EXTENSION \
	-DSQLITE_ENABLE_JSON1 \
	-DSQLITE_LIKE_DOESNT_MATCH_BLOBS \
	-DSQLITE_THREADSAFE=1 \
	-DSQLITE_USE_URI=1 \
	-DSQLITE_MAX_SCHEMA_RETRY=25 \
	-DSQLITE_ENABLE_PREUPDATE_HOOK \
	-DSQLITE_ENABLE_SESSION \
	-DSQLITE_ENABLE_STMTVTAB \
	-DSQLITE_STRICT_SUBTYPE=1 \
	-DSQLITE_MAX_VARIABLE_NUMBER=250000

configure: configure-stamp
configure-stamp:
	dh_testdir
	for v in $(TCLV_PRIMARY) $(TCLV_SECONDARY) ; do \
		mkdir -p $(CURDIR)/debian/$$v && \
		cd $(CURDIR)/debian/$$v && \
		../../configure \
			$(confflags) \
			--prefix=/usr \
			--mandir=/usr/share/man \
		  	--with-tcl=/usr/lib/$(DEB_HOST_MULTIARCH)/tcl$$v \
			--enable-threadsafe \
			--soname=legacy \
			--disable-rpath \
			--dynlink-tools \
			--enable-load-extension \
			--enable-json \
			--enable-fts4 \
			--enable-fts5 \
			--disable-amalgamation \
			--libdir=\$${prefix}/lib/$(DEB_HOST_MULTIARCH) \
			--libexecdir=\$${libdir}/sqlite3 \
			TCLLIBDIR=/usr/lib/tcltk/$(DEB_HOST_MULTIARCH)/sqlite3 \
			SHELL=/bin/sh \
			$(DDEBUG) ; \
	done
	touch $@

build-arch: build-stamp
build-indep: build-stamp

build: build-arch build-indep
build-stamp: configure
	dh_testdir
	for v in $(TCLV_PRIMARY) $(TCLV_SECONDARY) ; do \
	  $(MAKE) -C$(CURDIR)/debian/$$v ; \
	done
	$(MAKE) -C$(CURDIR)/debian/$(TCLV_PRIMARY) lemon
ifeq (,$(findstring $(DEB_BUILD_ARCH_OS),kfreebsd))
	# build tools
	$(MAKE) -C$(CURDIR)/debian/$(TCLV_PRIMARY) showdb showjournal showstat4 showwal sqldiff sqlite3_analyzer sqlite3_rsync
endif
ifneq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE))
	$(MAKE) -C$(CURDIR)/debian/$(TCLV_PRIMARY) lemon
endif
	cd ext/misc && $(HOST_CC) $(LDFLAGS) $(CPPFLAGS) $(CFLAGS) -g -fPIC -I$(CURDIR)/debian/$(TCLV_PRIMARY) -shared csv.c -o csv.so
	cd ext/icu  && $(HOST_CC) $(LDFLAGS) $(CPPFLAGS) $(CFLAGS) -g -fPIC -I$(CURDIR)/debian/$(TCLV_PRIMARY) -I../../src -shared icu.c $(shell $(PKG_CONFIG) --libs --cflags icu-uc icu-io) -o icu.so

	touch $@

clean:
	dh_testdir
	dh_testroot
	for v in $(TCLV_PRIMARY) $(TCLV_SECONDARY) ; do \
		$(RM) -rf $(CURDIR)/debian/$$v ; \
	done
	$(RM) -f configure-stamp build-stamp
	$(RM) -f config.log config.h pkgIndex.tcl
	[ ! -f Makefile ] || $(MAKE) distclean
	$(RM) -f ext/misc/csv.so
	$(RM) -f ext/icu/icu.so
	dh_clean

install: build
	dh_testdir
	dh_testroot

	$(MAKE) -C$(CURDIR)/debian/$(TCLV_PRIMARY) install DESTDIR=$(DESTDIR)
	$(MAKE) -C$(CURDIR)/debian/$(TCLV_SECONDARY) install-tcl DESTDIR=$(DESTDIR)
	chrpath -d $(DESTDIR)/usr/bin/sqlite3
	chrpath -d $(DESTDIR)/usr/lib/tcltk/$(DEB_HOST_MULTIARCH)/sqlite3/lib*.so
	install -d $(DESTDIR)/usr/share/lemon
	install -m 0664 tool/lempar.c $(DESTDIR)/usr/share/lemon/
ifeq (,$(findstring $(DEB_BUILD_ARCH_OS),kfreebsd))
	for f in showdb showjournal showstat4 showwal sqldiff sqlite3_analyzer sqlite3_rsync ; do \
	    install -m 0775 $(CURDIR)/debian/$(TCLV_PRIMARY)/$$f $(DESTDIR)/usr/bin/ ; \
	done
endif
	install -m 0775 $(CURDIR)/debian/$(TCLV_PRIMARY)/lemon $(DESTDIR)/usr/bin/
	install -d $(DESTDIR)/usr/lib/$(DEB_HOST_MULTIARCH)/sqlite/
	install -m 0775 ext/misc/csv.so \
		$(DESTDIR)/usr/lib/$(DEB_HOST_MULTIARCH)/sqlite/
	install -m 0775 ext/icu/icu.so \
		$(DESTDIR)/usr/lib/$(DEB_HOST_MULTIARCH)/sqlite/

	# Enhance the pkgIndex.tcl file for the Tcl module. The file generated
	# by default does not support multiple Tcl versions
ifeq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE))
	PKGINDEX="$(DESTDIR)/usr/lib/tcltk/$(DEB_HOST_MULTIARCH)/sqlite3/pkgIndex.tcl" ; \
	VER=$$(cat VERSION) ; \
	echo "if {[package vsatisfies [package provide Tcl] 9]} {" > $$PKGINDEX ; \
	echo "    package ifneeded sqlite3 $$VER [list load [file join \$$dir libtcl9sqlite$$VER.so] Sqlite3]" >> $$PKGINDEX ; \
	echo "} {" >> $$PKGINDEX ; \
	echo "    package ifneeded sqlite3 $$VER [list load [file join \$$dir libsqlite$$VER.so] Sqlite3]" >> $$PKGINDEX ; \
	echo "}" >> $$PKGINDEX
else
	echo "" > $(DESTDIR)/usr/lib/tcltk/$(DEB_HOST_MULTIARCH)/sqlite3/pkgIndex.tcl
endif

binary-indep: build install
	dh_testdir
	dh_testroot

	dh_install -i --sourcedir=$(DESTDIR)
	dh_installdocs -i
	lynx -dump -nolist www/changes.html >changelog
	dh_installchangelogs -i www/changes.html changelog
	$(RM) changelog
	dh_compress -i
	dh_fixperms -i
	dh_installdeb -i
	dh_gencontrol -i
	dh_md5sums -i
	dh_builddeb -i

binary-arch: build install
	dh_testdir
	dh_testroot

	dh_install -a --sourcedir=$(DESTDIR)
	dh_installman -a
	dh_installdocs -a
	lynx -dump -nolist www/changes.html >changelog
	dh_installchangelogs -a www/changes.html changelog
	$(RM) changelog
	dh_strip -a
	dh_compress -a
	dh_fixperms -a
	dh_makeshlibs -a
	dh_installdeb -a
	dh_shlibdeps -a -ldebian/libsqlite3-0/usr/lib/$(DEB_HOST_MULTIARCH)
	dh_gencontrol -a
	dh_md5sums -a
	dh_builddeb -a

binary: binary-indep binary-arch
.PHONY: build build-indep build-arch clean configure binary-indep binary-arch binary
