summaryrefslogtreecommitdiff
path: root/PolicyConfig.mk
blob: 1b8cb499c6527f8fa537f50e3ab55beac1431c69 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#
# Copyright (C) 2008 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.
#

# Make sure our needed product policy is present.
ifeq ($(PRODUCT_POLICY),)
$(error PRODUCT_POLICY MUST be defined.)
else
  ifeq ($(filter $(PRODUCT_POLICY),$(ALL_MODULES)),)
    $(error No module defined for the given PRODUCT_POLICY ($(PRODUCT_POLICY)))
  else
    # The policy MUST specify a module which builds a single jar
    ifneq ($(words $(call module-built-files,$(PRODUCT_POLICY))),1)
      $(error Policy module $(PRODUCT_POLICY) must build a single library jar)
    endif
  endif
endif


# We will always build all the policies. Then, we will copy the jars from
# the product specified policy into the locations where the current module
# is expected to have its jars. Then, the normal module install code will
# take care of things. We make each policy me non-installable, so that only
# the right one gets taken and installed. Having all the policies built
# also allows us to have unittests that refer to specific policies, but not
# necessarily the one used for the current product being built.
# TODO: Is this the best way to do this?

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := android.policy
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_MODULE_SUFFIX := $(COMMON_JAVA_PACKAGE_SUFFIX)

LOCAL_BUILT_MODULE_STEM := javalib.jar

# base_rules.mk may use this in unintended ways if a stale value is
# left lying around, so make sure to clear it.
all_res_assets :=

#######################################
include $(BUILD_SYSTEM)/base_rules.mk
#######################################

src_classes_jar := $(call _java-lib-full-classes.jar,$(PRODUCT_POLICY))
tgt_classes_jar := $(call _java-lib-full-classes.jar,$(LOCAL_MODULE))

src_javalib_jar := $(call module-built-files,$(PRODUCT_POLICY))
tgt_javalib_jar := $(LOCAL_BUILT_MODULE)

# make sure that the classes file gets there first since some rules in other
# places assume that the classes.jar for a module exists if the javalib.jar
# file exists.
$(tgt_javalib_jar): $(tgt_classes_jar)

$(tgt_javalib_jar): $(src_javalib_jar) | $(ACP)
	@echo "Copying policy javalib.jar: $@"
	$(copy-file-to-target)

$(tgt_classes_jar): $(src_classes_jar) | $(ACP)
	@echo "Copying policy classes.jar: $@"
	$(copy-file-to-target)

#
# Clean up after ourselves when switching build types
#
.PHONY: policy_installclean
policy_installclean: PRIVATE_CLEAN_DIR := $(call local-intermediates-dir,COMMON)
policy_installclean:
	$(hide) rm -rf $(PRIVATE_CLEAN_DIR)

installclean: policy_installclean