# Copyright (C) 2016 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

#
# Input variables
#
# $(car_module) - name of the car library module
# $(car_module_api_dir) - dir to store API files
# $(car_module_include_systemapi) - if systemApi file should be generated
# $(car_module_java_libraries) - dependent libraries
# $(car_module_java_packages) - list of package names containing public classes
# $(car_module_src_files) - list of source files
# $(api_check_current_msg_file) - file containing error message for current API check
# $(api_check_last_msg_file) - file containing error message for last SDK API check
# ---------------------------------------------

ifeq ($(BOARD_IS_AUTOMOTIVE), true)
ifneq ($(TARGET_BUILD_PDK), true)
#
# Generate the public stub source files
# ---------------------------------------------
include $(CLEAR_VARS)

car_module_api_file := \
    $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/$(car_module)_api.txt
car_module_removed_file := \
    $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/$(car_module)_removed.txt

LOCAL_MODULE := $(car_module)-stubs
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_MODULE_TAGS := optional

LOCAL_SRC_FILES := $(car_module_src_files)
LOCAL_JAVA_LIBRARIES := $(car_module_java_libraries) $(car_module)
LOCAL_ADDITIONAL_JAVA_DIR := \
    $(call intermediates-dir-for,$(LOCAL_MODULE_CLASS),$(car_module),,COMMON)/src
LOCAL_SDK_VERSION := $(CAR_CURRENT_SDK_VERSION)

LOCAL_DROIDDOC_STUB_OUT_DIR := $(TARGET_OUT_COMMON_INTERMEDIATES)/$(LOCAL_MODULE_CLASS)/$(LOCAL_MODULE)_intermediates/src

LOCAL_DROIDDOC_OPTIONS:= \
    -stubpackages "$(subst $(space),:,$(car_module_java_packages))" \
    -api $(car_module_api_file) \
    -removedApi $(car_module_removed_file) \
    -nodocs \
    -hide 113 \
    -hide 110
LOCAL_DROIDDOC_CUSTOM_TEMPLATE_DIR := build/tools/droiddoc/templates-sdk
LOCAL_UNINSTALLABLE_MODULE := true

include $(BUILD_DROIDDOC)
car_stub_stamp := $(full_target)
$(car_module_api_file) : $(full_target)

ifeq ($(car_module_include_systemapi), true)
#
# Generate the system stub source files
# ---------------------------------------------
include $(CLEAR_VARS)

car_module_system_api_file := \
    $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/$(car_module)_system_api.txt
car_module_system_removed_file := \
    $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/$(car_module)_system_removed.txt

LOCAL_MODULE := $(car_module)-system-stubs
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_MODULE_TAGS := optional

LOCAL_SRC_FILES := $(car_module_src_files)
LOCAL_JAVA_LIBRARIES := $(car_module_java_libraries) $(car_module)
LOCAL_ADDITIONAL_JAVA_DIR := \
    $(call intermediates-dir-for,$(LOCAL_MODULE_CLASS),$(car_module),,COMMON)/src
LOCAL_SDK_VERSION := $(CAR_CURRENT_SDK_VERSION)

LOCAL_DROIDDOC_STUB_OUT_DIR := $(TARGET_OUT_COMMON_INTERMEDIATES)/$(LOCAL_MODULE_CLASS)/$(LOCAL_MODULE)_intermediates/src

LOCAL_DROIDDOC_OPTIONS:= \
    -stubpackages "$(subst $(space),:,$(car_module_java_packages))" \
    -showAnnotation android.annotation.SystemApi \
    -api $(car_module_system_api_file) \
    -removedApi $(car_module_system_removed_file) \
    -nodocs \
    -hide 113 \
    -hide 110
LOCAL_DROIDDOC_CUSTOM_TEMPLATE_DIR := build/tools/droiddoc/templates-sdk
LOCAL_UNINSTALLABLE_MODULE := true

include $(BUILD_DROIDDOC)
car_system_stub_stamp := $(full_target)
$(car_module_system_api_file) : $(full_target)

#($(car_module_include_systemapi), true)
endif
#
# Check public API
# ---------------------------------------------
.PHONY: $(car_module)-check-public-api
checkapi: $(car_module)-check-public-api
$(car_module): $(car_module)-check-public-api

last_released_sdk_$(car_module) := $(lastword $(call numerically_sort, \
    $(filter-out current, \
        $(patsubst $(car_module_api_dir)/%.txt,%, $(wildcard $(car_module_api_dir)/*.txt)) \
    )))

# Check that the API we're building hasn't broken the last-released SDK version
# if it exists
ifneq ($(last_released_sdk_$(car_module)),)
$(eval $(call check-api, \
    $(car_module)-checkapi-last, \
    $(car_module_api_dir)/$(last_released_sdk_$(car_module)).txt, \
    $(car_module_api_file), \
    $(car_module_api_dir)/removed.txt, \
    $(car_module_removed_file), \
    -hide 2 -hide 3 -hide 4 -hide 5 -hide 6 -hide 24 -hide 25 -hide 26 -hide 27 \
        -warning 7 -warning 8 -warning 9 -warning 10 -warning 11 -warning 12 \
        -warning 13 -warning 14 -warning 15 -warning 16 -warning 17 -warning 18 -hide 113, \
    cat $(api_check_last_msg_file), \
    $(car_module)-check-public-api, \
    $(car_stub_stamp)))
endif

# Check that the API we're building hasn't changed from the not-yet-released
# SDK version.
$(eval $(call check-api, \
    $(car_module)-checkapi-current, \
    $(car_module_api_dir)/current.txt, \
    $(car_module_api_file), \
    $(car_module_api_dir)/removed.txt, \
    $(car_module_removed_file), \
    -error 2 -error 3 -error 4 -error 5 -error 6 -error 7 -error 8 -error 9 -error 10 -error 11 \
        -error 12 -error 13 -error 14 -error 15 -error 16 -error 17 -error 18 -error 19 -error 20 \
        -error 21 -error 23 -error 24 -error 25 -hide 113, \
    cat $(api_check_current_msg_file), \
    $(car_module)-check-public-api, \
    $(car_stub_stamp)))

.PHONY: update-$(car_module)-api
update-$(car_module)-api: PRIVATE_API_DIR := $(car_module_api_dir)
update-$(car_module)-api: PRIVATE_MODULE := $(car_module)
update-$(car_module)-api: PRIVATE_REMOVED_API_FILE := $(car_module_removed_file)
update-$(car_module)-api: $(car_module_api_file) | $(ACP)
	@echo Copying $(PRIVATE_MODULE) current.txt
	$(hide) $(ACP) $< $(PRIVATE_API_DIR)/current.txt
	@echo Copying $(PRIVATE_MODULE) removed.txt
	$(hide) $(ACP) $(PRIVATE_REMOVED_API_FILE) $(PRIVATE_API_DIR)/removed.txt

# Run this update API task on the update-car-api task
update-car-api: update-$(car_module)-api

ifeq ($(car_module_include_systemapi), true)

#
# Check system API
# ---------------------------------------------
.PHONY: $(car_module)-check-system-api
checkapi: $(car_module)-check-system-api
$(car_module): $(car_module)-check-system-api

last_released_system_sdk_$(car_module) := $(lastword $(call numerically_sort, \
    $(filter-out system-current, \
        $(patsubst $(car_module_api_dir)/%.txt,%, $(wildcard $(car_module_api_dir)/system-*.txt)) \
    )))

# Check that the API we're building hasn't broken the last-released SDK version
# if it exists
ifneq ($(last_released_system_sdk_$(car_module)),)
$(eval $(call check-api, \
    $(car_module)-checksystemapi-last, \
    $(car_module_api_dir)/$(last_released_system_sdk_$(car_module)).txt, \
    $(car_module_system_api_file), \
    $(car_module_api_dir)/system-removed.txt, \
    $(car_module_system_removed_file), \
    -hide 2 -hide 3 -hide 4 -hide 5 -hide 6 -hide 24 -hide 25 -hide 26 -hide 27 \
        -warning 7 -warning 8 -warning 9 -warning 10 -warning 11 -warning 12 \
        -warning 13 -warning 14 -warning 15 -warning 16 -warning 17 -warning 18 -hide 113, \
    cat $(api_check_last_msg_file), \
    $(car_module)-check-system-api, \
    $(car_system_stub_stamp)))
endif

# Check that the API we're building hasn't changed from the not-yet-released
# SDK version.
$(eval $(call check-api, \
    $(car_module)-checksystemapi-current, \
    $(car_module_api_dir)/system-current.txt, \
    $(car_module_system_api_file), \
    $(car_module_api_dir)/system-removed.txt, \
    $(car_module_system_removed_file), \
    -error 2 -error 3 -error 4 -error 5 -error 6 -error 7 -error 8 -error 9 -error 10 -error 11 \
        -error 12 -error 13 -error 14 -error 15 -error 16 -error 17 -error 18 -error 19 -error 20 \
        -error 21 -error 23 -error 24 -error 25 -hide 113, \
    cat $(api_check_current_msg_file), \
    $(car_module)-check-system-api, \
    $(car_stub_stamp)))

.PHONY: update-$(car_module)-system-api
update-$(car_module)-system-api: PRIVATE_API_DIR := $(car_module_api_dir)
update-$(car_module)-system-api: PRIVATE_MODULE := $(car_module)
update-$(car_module)-system-api: PRIVATE_REMOVED_API_FILE := $(car_module_system_removed_file)
update-$(car_module)-system-api: $(car_module_system_api_file) | $(ACP)
	@echo Copying $(PRIVATE_MODULE) system-current.txt
	$(hide) $(ACP) $< $(PRIVATE_API_DIR)/system-current.txt
	@echo Copying $(PRIVATE_MODULE) system-removed.txt
	$(hide) $(ACP) $(PRIVATE_REMOVED_API_FILE) $(PRIVATE_API_DIR)/system-removed.txt

# Run this update API task on the update-car-api task
update-car-api: update-$(car_module)-system-api

#($(car_module_include_systemapi), true)
endif

#($(TARGET_BUILD_PDK),true)
endif

#($(BOARD_IS_AUTOMOTIVE), true)
endif
#
# Clear variables
# ---------------------------------------------
car_module :=
car_module_api_dir :=
car_module_src_files :=
car_module_java_libraries :=
car_module_java_packages :=
car_module_api_file :=
car_module_removed_file :=
car_module_system_api_file :=
car_module_system_removed__file :=
car_stub_stamp :=
car_system_stub_stamp :=
car_module_include_systemapi :=
