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

LOCAL_PATH := $(call my-dir)

# build vogar jar
# ============================================================

include $(CLEAR_VARS)

LOCAL_MODULE := vogar
LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0 SPDX-license-identifier-BSD
LOCAL_LICENSE_CONDITIONS := notice
LOCAL_NOTICE_FILE := $(LOCAL_PATH)/LICENSE
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_SRC_FILES := $(call all-java-files-under, src/)
LOCAL_JAVA_RESOURCE_DIRS := resources

LOCAL_STATIC_JAVA_LIBRARIES := \
  caliper \
  caliper-gson \
  guavalib \
  junit \
  testng \
  vogar-jsr305 \
  vogar-kxml-libcore-20110123

LOCAL_ADDITIONAL_DEPENDENCIES := \
  $(HOST_OUT_EXECUTABLES)/dx \
  $(HOST_OUT_EXECUTABLES)/d8 \
  $(HOST_OUT_JAVA_LIBRARIES)/desugar.jar

# Vogar uses android.jar.
LOCAL_CLASSPATH := $(call resolve-prebuilt-sdk-jar-path,current)

include $(BUILD_HOST_JAVA_LIBRARY)

# build vogar tests jar
# ============================================================
# Run the tests using using the following target.
.PHONY: run-vogar-tests
run-vogar-tests: vogar-tests
	ANDROID_BUILD_TOP=$$(pwd) \
	  java -cp ./out/host/linux-x86/framework/vogar-tests.jar \
	  org.junit.runner.JUnitCore vogar.AllTests

include $(CLEAR_VARS)

LOCAL_MODULE := vogar-tests
LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0 SPDX-license-identifier-BSD
LOCAL_LICENSE_CONDITIONS := notice
LOCAL_NOTICE_FILE := $(LOCAL_PATH)/LICENSE
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_SRC_FILES := $(call all-java-files-under, test/)

LOCAL_STATIC_JAVA_LIBRARIES := \
	junit \
	mockito \
	objenesis \
	vogar

include $(BUILD_HOST_JAVA_LIBRARY)

# copy vogar script
# ============================================================
include $(CLEAR_VARS)
LOCAL_IS_HOST_MODULE := true
LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_MODULE := vogar
LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0 SPDX-license-identifier-BSD
LOCAL_LICENSE_CONDITIONS := notice
LOCAL_NOTICE_FILE := $(LOCAL_PATH)/LICENSE
LOCAL_SRC_FILES := bin/vogar-android
include $(BUILD_PREBUILT)
