From 479da2f3bb9b4a53d7299f0efd3bea5424b99192 Mon Sep 17 00:00:00 2001 From: Nelson Li Date: Thu, 3 May 2018 10:12:27 +0000 Subject: [PATCH] Build System: Validate AndroidTest.xml Configs make should fail if the test has a poorly configured atest configuration BUG: 73082610 Test: cd packages/apps/Bluetooth/tests/unit; mma Modify AndroidTest.xml to a not well-formed xml; mma Then, it should build fail. atest -v BluetoothInstrumentationTests Change-Id: I774b4eb81a1b9e9ae31de949aea995d2f258e9a1 --- core/base_rules.mk | 11 +++++++---- core/definitions.mk | 23 ++++++++++++++++++++--- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/core/base_rules.mk b/core/base_rules.mk index 63c6c52627..075465eb95 100644 --- a/core/base_rules.mk +++ b/core/base_rules.mk @@ -557,7 +557,8 @@ multi_arch := # The module itself. $(foreach suite, $(LOCAL_COMPATIBILITY_SUITE), \ $(eval my_compat_dist_$(suite) := $(foreach dir, $(call compatibility_suite_dirs,$(suite),$(arch_dir)), \ - $(LOCAL_BUILT_MODULE):$(dir)/$(my_installed_module_stem)))) + $(LOCAL_BUILT_MODULE):$(dir)/$(my_installed_module_stem))) \ + $(eval my_compat_dist_config_$(suite) := )) # Make sure we only add the files once for multilib modules. ifndef $(my_prefix)$(LOCAL_MODULE_CLASS)_$(LOCAL_MODULE)_compat_files @@ -604,7 +605,7 @@ is_instrumentation_test := ifneq (,$(test_config)) $(foreach suite, $(LOCAL_COMPATIBILITY_SUITE), \ - $(eval my_compat_dist_$(suite) += $(foreach dir, $(call compatibility_suite_dirs,$(suite)), \ + $(eval my_compat_dist_config_$(suite) += $(foreach dir, $(call compatibility_suite_dirs,$(suite)), \ $(test_config):$(dir)/$(LOCAL_MODULE).config))) endif @@ -612,14 +613,14 @@ test_config := ifneq (,$(wildcard $(LOCAL_PATH)/DynamicConfig.xml)) $(foreach suite, $(LOCAL_COMPATIBILITY_SUITE), \ - $(eval my_compat_dist_$(suite) += $(foreach dir, $(call compatibility_suite_dirs,$(suite)), \ + $(eval my_compat_dist_config_$(suite) += $(foreach dir, $(call compatibility_suite_dirs,$(suite)), \ $(LOCAL_PATH)/DynamicConfig.xml:$(dir)/$(LOCAL_MODULE).dynamic))) endif ifneq (,$(wildcard $(LOCAL_PATH)/$(LOCAL_MODULE)_*.config)) $(foreach extra_config, $(wildcard $(LOCAL_PATH)/$(LOCAL_MODULE)_*.config), \ $(foreach suite, $(LOCAL_COMPATIBILITY_SUITE), \ - $(eval my_compat_dist_$(suite) += $(foreach dir, $(call compatibility_suite_dirs,$(suite)), \ + $(eval my_compat_dist_config_$(suite) += $(foreach dir, $(call compatibility_suite_dirs,$(suite)), \ $(extra_config):$(dir)/$(notdir $(extra_config)))))) endif endif # $(my_prefix)$(LOCAL_MODULE_CLASS)_$(LOCAL_MODULE)_compat_files @@ -638,6 +639,8 @@ arch_dir := is_native := $(call create-suite-dependencies) +$(foreach suite, $(LOCAL_COMPATIBILITY_SUITE), \ + $(eval my_compat_dist_config_$(suite) := )) endif # LOCAL_COMPATIBILITY_SUITE diff --git a/core/definitions.mk b/core/definitions.mk index 092a778d8f..90c6ecb9c2 100644 --- a/core/definitions.mk +++ b/core/definitions.mk @@ -2671,6 +2671,18 @@ $(2): $(1) $(XMLLINT) $$(copy-file-to-target) endef +# Copies many xml files and check they are well-formed. +# $(1): The xml files to copy. Each entry is a ':' separated src:dst pair. +# Evaluates to the list of the dst files. (ie suitable for a dependency list.) +define copy-many-xml-files-checked +$(foreach f, $(1), $(strip \ + $(eval _cmf_tuple := $(subst :, ,$(f))) \ + $(eval _cmf_src := $(word 1,$(_cmf_tuple))) \ + $(eval _cmf_dest := $(word 2,$(_cmf_tuple))) \ + $(eval $(call copy-xml-file-checked,$(_cmf_src),$(_cmf_dest))) \ + $(_cmf_dest))) +endef + # Copy the file only if it is a well-formed manifest file. For use viea $(eval) # $(1): source file # $(2): destination file @@ -3116,15 +3128,20 @@ endef # For each suite: # 1. Copy the files to the many suite output directories. +# And for test config files, we'll check the .xml is well-formed before copy. # 2. Add all the files to each suite's dependent files list. # 3. Do the dependency addition to my_all_targets -# Requires for each suite: my_compat_dist_$(suite) to be defined. +# Requires for each suite: use my_compat_dist_config_$(suite) to define the test config. +# and use my_compat_dist_$(suite) to define the others. define create-suite-dependencies $(foreach suite, $(LOCAL_COMPATIBILITY_SUITE), \ $(eval COMPATIBILITY.$(suite).FILES := \ - $$(COMPATIBILITY.$(suite).FILES) $$(foreach f,$$(my_compat_dist_$(suite)),$$(call word-colon,2,$$(f))))) \ + $$(COMPATIBILITY.$(suite).FILES) $$(foreach f,$$(my_compat_dist_$(suite)),$$(call word-colon,2,$$(f))) \ + $$(foreach f,$$(my_compat_dist_config_$(suite)),$$(call word-colon,2,$$(f))))) \ $(eval $(my_all_targets) : $(call copy-many-files, \ - $(sort $(foreach suite,$(LOCAL_COMPATIBILITY_SUITE),$(my_compat_dist_$(suite)))))) + $(sort $(foreach suite,$(LOCAL_COMPATIBILITY_SUITE),$(my_compat_dist_$(suite))))) \ + $(call copy-many-xml-files-checked, \ + $(sort $(foreach suite,$(LOCAL_COMPATIBILITY_SUITE),$(my_compat_dist_config_$(suite)))))) endef ###########################################################