# 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.
#
#

# Gmock builds 2 libraries: libgmock and libgmock_main. libgmock
# contains most of the code (assertions...) and libgmock_main just
# provide a common main to run the test (ie if you link against
# libgmock_main you won't/should not provide a main() entry point.

# TODO: The targets below have some redundancy. Check if we cannot
# condense them using function(s) for the common code.

LOCAL_PATH := $(call my-dir)

libgmock_target_includes := \
  $(LOCAL_PATH)/.. \
  $(LOCAL_PATH)/../include \
  $(TOP)/external/gtest/include

libgmock_host_includes := \
  $(LOCAL_PATH)/.. \
  $(LOCAL_PATH)/../include \
  $(TOP)/external/gtest/include

libgmock_cflags := \
  -Wno-missing-field-initializers \

#######################################################################
# gmock lib for the NDK

include $(CLEAR_VARS)
LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk

LOCAL_SDK_VERSION := 9
LOCAL_NDK_STL_VARIANT := gnustl_static

LOCAL_CPP_EXTENSION := .cc
LOCAL_SRC_FILES := gmock-all.cc
LOCAL_C_INCLUDES := $(libgmock_target_includes)
LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/../include
LOCAL_CPPFLAGS := -std=c++11
LOCAL_C_FLAGS += $(libgmock_cflags)
LOCAL_MODULE := libgmock_ndk

include $(BUILD_STATIC_LIBRARY)

#######################################################################
# gmock_main for the NDK

include $(CLEAR_VARS)
LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk

LOCAL_SDK_VERSION := 9
LOCAL_NDK_STL_VARIANT := gnustl_static

LOCAL_CPP_EXTENSION := .cc
LOCAL_SRC_FILES := gmock_main.cc
LOCAL_C_INCLUDES := $(libgmock_target_includes)
LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/../include
LOCAL_CPPFLAGS := -std=c++11
LOCAL_C_FLAGS += $(libgmock_cflags)
LOCAL_MODULE := libgmock_main_ndk

include $(BUILD_STATIC_LIBRARY)

# Don't build for unbundled branches
ifeq (,$(TARGET_BUILD_APPS))
#######################################################################
# gmock lib host

include $(CLEAR_VARS)

LOCAL_CPP_EXTENSION := .cc
LOCAL_SRC_FILES := gmock-all.cc
LOCAL_C_INCLUDES := $(libgmock_host_includes)
LOCAL_C_FLAGS += $(libgmock_cflags)
LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/../include
LOCAL_MODULE := libgmock_host
LOCAL_MULTILIB := both
LOCAL_SANITIZE := never
LOCAL_RTTI_FLAG := -frtti
LOCAL_MODULE_HOST_OS := linux darwin windows

include $(BUILD_HOST_STATIC_LIBRARY)

#######################################################################
# gmock_main lib host

include $(CLEAR_VARS)

LOCAL_CPP_EXTENSION := .cc
LOCAL_SRC_FILES := gmock_main.cc
LOCAL_C_INCLUDES := $(libgmock_host_includes)
LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/../include
LOCAL_C_FLAGS += $(libgmock_cflags)
LOCAL_MODULE := libgmock_main_host
LOCAL_MULTILIB := both
LOCAL_SANITIZE := never
LOCAL_MODULE_HOST_OS := linux darwin windows

include $(BUILD_HOST_STATIC_LIBRARY)

#######################################################################
# gmock lib target

include $(CLEAR_VARS)

LOCAL_CPP_EXTENSION := .cc
LOCAL_SRC_FILES := gmock-all.cc
LOCAL_C_INCLUDES := $(libgmock_target_includes)
LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/../include
LOCAL_CFLAGS += $(libgmock_cflags)
LOCAL_MODULE := libgmock
LOCAL_SANITIZE := never
LOCAL_RTTI_FLAG := -frtti

include $(BUILD_STATIC_LIBRARY)

#######################################################################
# gmock_main lib target

include $(CLEAR_VARS)

LOCAL_CPP_EXTENSION := .cc
LOCAL_SRC_FILES := gmock_main.cc
LOCAL_C_INCLUDES := $(libgmock_target_includes)
LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/../include
LOCAL_CFLAGS += $(libgmock_cflags)
LOCAL_MODULE := libgmock_main
LOCAL_SANITIZE := never

include $(BUILD_STATIC_LIBRARY)
endif
