#!/usr/bin/make -f

include /usr/share/dpkg/architecture.mk
include /usr/share/dpkg/pkg-info.mk

export CC=clang
export CXX=clang++

# https://android.googlesource.com/platform/development/+/refs/tags/android-13.0.0_r66/sdk/build_tools_source.prop_template
export ANDROID_BUILD_TOOLS_VERSION = 33.0.0
export DEB_HOST_MULTIARCH

VERSION_UPSTREAM=$(DEB_VERSION_UPSTREAM)
## Only need below if we need to pull an unofficial release version, e.g. from a devel branch
#VERSION_UPSTREAM=t-beta-3

## Security Hardening
export DEB_BUILD_MAINT_OPTIONS = hardening=+all optimize=-lto
# https://android.googlesource.com/platform/build/soong/+/refs/tags/android-13.0.0_r66/cc/config/global.go#282
export DEB_CXXFLAGS_MAINT_APPEND = -fPIC -gdwarf-4
export DEB_LDFLAGS_MAINT_APPEND = -fPIC
export DEB_CPPFLAGS_MAINT_APPEND = -DNDEBUG -UDEBUG \
  -I/usr/include/android \
  -Wno-c99-designator \
  -Wno-gnu-designator \
  -Wno-gnu-folding-constant \
  -fmessage-length=0 \
  -fno-exceptions \
  -fno-strict-aliasing \
  -no-canonical-prefixes \
  \
  -Idebian/include \

ifneq (, $(shell which lld))
  export DEB_LDFLAGS_MAINT_APPEND += -fuse-ld=lld -Wl,--build-id=sha1
endif

debian/out/aapt: debian/aapt.mk debian/out/libaapt.so
	dh_auto_build --buildsystem=makefile -- -f $<

debian/out/aapt2: debian/aapt2.mk debian/out/libaapt2.so
	dh_auto_build --buildsystem=makefile -- -f $<

debian/out/lib%.so: debian/lib%.mk debian/out/libandroidfw.so
	dh_auto_build --buildsystem=makefile -- -f $<

debian/out/split-select: debian/split-select.mk debian/out/libandroidfw.so debian/out/libaapt.so
	dh_auto_build --buildsystem=makefile -- -f $<

debian/out/%_test: debian/%_test.mk debian/out/libaapt2.so
	dh_auto_build --buildsystem=makefile -- --file=$<

%:
	dh $@ --with bash-completion

override_dh_auto_configure:
	mkdir -p debian/out
	rm -f tools/aapt2/integration-tests/ConvertTest/duplicate_entries.apk
	dh_auto_configure

override_dh_auto_build-arch: debian/out/aapt debian/out/aapt2 debian/out/split-select
	pandoc -s -o debian/out/split-select.1 debian/split-select.1.md

override_dh_auto_build-indep: debian/out/aapt2
	LD_LIBRARY_PATH=debian/out \
	debian/out/aapt2 compile --dir core/res/res \
				-o debian/out/resources.zip
	LD_LIBRARY_PATH=debian/out \
	debian/out/aapt2 link --manifest core/res/AndroidManifest.xml \
				debian/out/resources.zip \
				-o debian/out/framework-res.apk \
				-A core/res/assets \
				--min-sdk-version 33 --target-sdk-version 33 \
				--product default \
				--version-code 33 --version-name 13.0.0

# Build-Depends (for dh_auto_test): wget
# If there's no wget, some tests in aapt2_test will be skipped
ifeq (,$(findstring nocheck, $(DEB_BUILD_OPTIONS)))
# Skip building aapt2_test for mipsel and mips64el, due to ftbfs: tools/aapt2/filter/AbiFilter_test.cpp:58:8: error: expected unqualified-id
ifeq ($(filter mipsel mips64el,$(DEB_HOST_ARCH)),)
override_dh_auto_test-arch: debian/out/aapt2_test
	LD_LIBRARY_PATH=debian/out debian/out/aapt version
	LD_LIBRARY_PATH=debian/out debian/out/aapt2 version
ifneq (, $(shell which wget))
	for dir in ConvertTest CommandTests CompileTest; do \
		(mkdir -p debian/out/integration-tests/$$dir; cd debian/out/integration-tests/$$dir; \
		wget -qO ../$${dir}.tgz \
			https://android.googlesource.com/platform/frameworks/base/+archive/refs/tags/android-$(subst +,_,$(VERSION_UPSTREAM))/tools/aapt2/integration-tests/$${dir}.tar.gz && \
		tar xfz ../$${dir}.tgz && rm ../$${dir}.tgz); \
	done
endif
	LD_LIBRARY_PATH=debian/out debian/out/aapt2_test
endif
endif

# Depends: git-buildpackage
update:
	gbp import-orig --uscan \
		--no-interactive --debian-branch=$(shell git symbolic-ref --short HEAD) \
		--postimport="\
		dch -b -v\$$GBP_DEBIAN_VERSION \"New upstream release \$$GBP_UPSTREAM_VERSION\"; \
		git add debian/changelog; \
		git commit -m\"dch: Note new upstream version \$$GBP_UPSTREAM_VERSION\""
