# Copyright (C) 2015 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.

#
# Builds a compatibility test suite.
#

# Generate suite info property file
suite_info_prop := $(call intermediates-dir-for,JAVA_LIBRARIES,$(LOCAL_MODULE),true,COMMON)/test-suite-info.properties
$(suite_info_prop): PRIVATE_SUITE_BUILD_NUMBER := $(LOCAL_SUITE_BUILD_NUMBER)
$(suite_info_prop): PRIVATE_SUITE_TARGET_ARCH := $(LOCAL_SUITE_TARGET_ARCH)
$(suite_info_prop): PRIVATE_SUITE_NAME := $(LOCAL_SUITE_NAME)
$(suite_info_prop): PRIVATE_SUITE_FULLNAME := $(LOCAL_SUITE_FULLNAME)
$(suite_info_prop): PRIVATE_SUITE_VERSION := $(LOCAL_SUITE_VERSION)
$(suite_info_prop): cts/build/compatibility_test_suite.mk $(LOCAL_MODULE_MAKEFILE)
	@echo Generating: $@
	$(hide) echo "# This file is auto generated by Android.mk. Do not modify." > $@
	$(hide) echo "build_number = $(PRIVATE_SUITE_BUILD_NUMBER)" >> $@
	$(hide) echo "target_arch = $(PRIVATE_SUITE_TARGET_ARCH)" >> $@
	$(hide) echo "name = $(PRIVATE_SUITE_NAME)" >> $@
	$(hide) echo "fullname = $(PRIVATE_SUITE_FULLNAME)" >> $@
	$(hide) echo "version = $(PRIVATE_SUITE_VERSION)" >> $@

# Reset variables
LOCAL_SUITE_BUILD_NUMBER :=
LOCAL_SUITE_NAME :=
LOCAL_SUITE_FULLNAME :=
LOCAL_SUITE_VERSION :=

# Include the test suite properties file
LOCAL_JAVA_RESOURCE_FILES += $(suite_info_prop)

# Add the base libraries
LOCAL_JAVA_LIBRARIES += tradefed hosttestlib compatibility-host-util

LOCAL_MODULE_TAGS := optional

include $(BUILD_HOST_JAVA_LIBRARY)

suite_info_prop :=
