# Build jar from gradle module.

# Common parameters:
# - LOCAL_NAME
# - LOCAL_JAR_NAME
# - LOCAL_PROJECT_DIR

_sdk_dir := $(realpath $(dir $(lastword $(MAKEFILE_LIST))))

include $(_sdk_dir)/path-utilities.mk

####################################
# Check necessary input parameters #
####################################

ifeq ($(LOCAL_NAME),)
  $(error LOCAL_NAME is not specified)
endif

ifeq ($(LOCAL_PROJECT_DIR),)
  $(error LOCAL_PROJECT_DIR is not specified)
endif

ifeq ($(LOCAL_JAR_NAME),)
  LOCAL_JAR_NAME := $(LOCAL_NAME).jar
endif


##########################
# Strip input parameters #
##########################

LOCAL_NAME:=$(strip $(LOCAL_NAME))
LOCAL_JAR_NAME:=$(strip $(LOCAL_JAR_NAME))
LOCAL_PROJECT_DIR:=$(strip $(LOCAL_PROJECT_DIR))

############################
# Default build parameters #
############################

_local_output_dir := $(strip $(call get-absolute-path,./out/gradle/$(LOCAL_NAME)))

###################
# Default targets #
###################

.PHONY: build
build: $(LOCAL_NAME)

.PHONY: $(LOCAL_NAME)
$(LOCAL_NAME): $(_local_output_dir)/$(LOCAL_JAR_NAME).jar

.PHONY: $(_local_output_dir)/$(LOCAL_JAR_NAME).jar
$(_local_output_dir)/$(LOCAL_JAR_NAME).jar: _local_jar_name := $(LOCAL_JAR_NAME)
$(_local_output_dir)/$(LOCAL_JAR_NAME).jar: _local_project_dir := $(LOCAL_PROJECT_DIR)
$(_local_output_dir)/$(LOCAL_JAR_NAME).jar: _local_output_dir := $(_local_output_dir)
$(_local_output_dir)/$(LOCAL_JAR_NAME).jar:
	mkdir -p $(_local_output_dir)
	cd $(_local_project_dir) && gradle clean build && cp `find . -name $(_local_jar_name).jar` $(@)

.PHONY: clean
clean: $(LOCAL_NAME)-clean

.PHONY: $(LOCAL_NAME)-clean
$(LOCAL_NAME)-clean: $(_local_output_dir)/$(LOCAL_JAR_NAME).jar-clean

.PHONY: $(_local_output_dir)/$(LOCAL_JAR_NAME).jar-clean
$(_local_output_dir)/$(LOCAL_JAR_NAME).jar-clean: _local_output_dir := $(_local_output_dir)
$(_local_output_dir)/$(LOCAL_JAR_NAME).jar-clean: _local_project_dir := $(LOCAL_PROJECT_DIR)
$(_local_output_dir)/$(LOCAL_JAR_NAME).jar-clean:
	rm -rf $(_local_output_dir)
	cd $(_local_project_dir) && gradle clean

##############
# Clear vars #
##############

include $(_sdk_dir)/clear-vars.mk
