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

#
# Note:
# This file configures the product.  It follows the default format
# generated by brunch (tools/bdk/brunch).  Any changes here should
# be kept in sync with brunch's templates.
#

CFGTREE_ROOT := $(LOCAL_PATH)
include device/generic/brillo/brillo_base.mk

PRODUCT_NAME := $(call get_product_name_from_file)
ifneq ($(PRODUCT_NAME),$(call cfgtree-get,name))
  $(error config/name, <name>.mk, and AndroidProducts.mk must all be updated together.)
endif
PRODUCT_BRAND := $(call cfgtree-get,brand)
PRODUCT_DEVICE := $(call cfgtree-get,device)
PRODUCT_MANUFACTURER := $(call cfgtree-get,manufacturer)
PRODUCT_PACKAGES += $(call cfgtree-get-if-exists,packages)
# Populate PRODUCT_COPY_FILES from disk but avoid requiring the use of
# $(LOCAL_PATH) by prepending it here.
PRODUCT_COPY_FILES += $(addprefix $(LOCAL_PATH)/,$(call cfgtree-get-if-exists,copy_files))

# Expect any required sepolicies in the sepolicy path.
BOARD_SEPOLICY_DIRS := $(BOARD_SEPOLICY_DIRS) $(LOCAL_PATH)/sepolicy

# Add any extra Android product.mk directive in extras.mk
-include $(LOCAL_PATH)/extras.mk
