# Sign apk

_sdk_dir := $(realpath $(dir $(lastword $(MAKEFILE_LIST))))
_sign_tool_dir := $(_sdk_dir)/../tools/sign-apk

# Common parameters:
# - LOCAL_NAME
# - LOCAL_UNSIGNED_APK
# Optional:
# - LOCAL_KEYSTORE
# - LOCAL_KEYSTORE_PSWRD
# - LOCAL_SDK_PATH
# - LOCAL_BUILD_TOOLS_VERSION

####################################
# Check necessary input parameters #
####################################

LOCAL_NAME := $(strip $(LOCAL_NAME))
LOCAL_UNSIGNED_APK := $(strip $(LOCAL_UNSIGNED_APK))
LOCAL_KEYSTORE := $(strip $(LOCAL_KEYSTORE))
LOCAL_KEYSTORE_PSWRD := $(strip $(LOCAL_KEYSTORE_PSWRD))
LOCAL_SDK_PATH := $(strip $(LOCAL_SDK_PATH))
LOCAL_BUILD_TOOLS_VERSION := $(strip $(LOCAL_BUILD_TOOLS_VERSION))

ifeq ($(LOCAL_NAME),)
  $(error LOCAL_NAME is not specified)
endif

ifeq ($(LOCAL_UNSIGNED_APK),)
  $(error LOCAL_UNSIGNED_APK is not specified)
endif

ifneq ($(LOCAL_KEYSTORE),)
  ifneq ($(LOCAL_KEY),)
    $(error LOCAL_KEYSTORE conflicts with LOCAL_KEY)
  endif
  
  ifneq ($(LOCAL_CERTIFICATE),)
    $(error LOCAL_KEYSTORE conflicts with LOCAL_CERTIFICATE)
  endif

  _local_apksigner := $(strip $(LOCAL_SDK_PATH)/build-tools/$(LOCAL_BUILD_TOOLS_VERSION)/apksigner)
  _local_keystore := $(call get-absolute-path,$(LOCAL_KEYSTORE))
else
  ifeq ($(LOCAL_KEY),)
    LOCAL_KEY := $(_sign_tool_dir)/platform.pk8
  endif

  ifeq ($(LOCAL_CERTIFICATE),)
    LOCAL_CERTIFICATE := $(_sign_tool_dir)/platform.x509.pem
  endif
endif

include $(_sdk_dir)/path-utilities.mk

_apk_output_dir := $(call get-absolute-path,./out/apk/signed)
_apk_output := $(_apk_output_dir)/$(LOCAL_NAME).apk
_apk_input := $(call get-absolute-path,$(LOCAL_UNSIGNED_APK))

ifeq ($(LOCAL_SDK_PATH),)
  $(_apk_input)_sign := java -jar $(_sign_tool_dir)/signapk.jar $(LOCAL_CERTIFICATE) $(LOCAL_KEY) $(_apk_input) $(_apk_output)
else
  $(_apk_input)_sign := $(_local_apksigner) sign -ks $(_local_keystore) $(_apk_input) && cp $(_apk_input) $(_apk_output)
endif

.PHONY: sign
sign: $(LOCAL_NAME)-sign

.PHONY: $(LOCAL_NAME)-sign
$(LOCAL_NAME)-sign: $(_apk_output)

$(_apk_output): _apk_output_dir := $(_apk_output_dir)
$(_apk_output): _apk_input := $(_apk_input)
$(_apk_output): _local_apksigner := $(_local_apksigner)
$(_apk_output): _local_keystore := $(_local_keystore)
$(_apk_output): $(_apk_input)
	mkdir -p $(_apk_output_dir)
	$($(_apk_input)_sign)

