diff --git a/core/base_rules.mk b/core/base_rules.mk index 0cdaabdb5..68ac08be4 100644 --- a/core/base_rules.mk +++ b/core/base_rules.mk @@ -460,6 +460,33 @@ COMPATIBILITY.$(LOCAL_COMPATIBILITY_SUITE).FILES := \ $(my_all_targets) : $(my_compat_files) endif # LOCAL_COMPATIBILITY_SUITE +########################################################### +## Test Data +########################################################### +my_test_data_pairs := +my_installed_test_data := + +ifneq ($(filter NATIVE_TESTS,$(LOCAL_MODULE_CLASS)),) +ifneq ($(strip $(LOCAL_TEST_DATA)),) +ifneq (true,$(LOCAL_UNINSTALLABLE_MODULE)) + +my_test_data_pairs := $(strip $(foreach td,$(LOCAL_TEST_DATA), \ + $(eval _file := $(call word-colon,2,$(td))) \ + $(if $(_file), \ + $(eval _base := $(call word-colon,1,$(td))), \ + $(eval _base := $(LOCAL_PATH)) \ + $(eval _file := $(call word-colon,1,$(td)))) \ + $(if $(findstring ..,$(_file)),$(error $(LOCAL_MODULE_MAKEFILE): LOCAL_TEST_DATA may not include '..': $(_file))) \ + $(if $(filter /%,$(_base) $(_file)),$(error $(LOCAL_MODULE_MAKEFILE): LOCAL_TEST_DATA may not include absolute paths: $(_base) $(_file))) \ + $(call append-path,$(_base),$(_file)):$(call append-path,$(my_module_path),$(_file)))) + +my_installed_test_data := $(call copy-many-files,$(my_test_data_pairs)) +$(LOCAL_INSTALLED_MODULE): $(my_installed_test_data) + +endif +endif +endif + ########################################################### ## Register with ALL_MODULES ########################################################### @@ -481,11 +508,12 @@ ALL_MODULES.$(my_register_name).BUILT := \ ifneq (true,$(LOCAL_UNINSTALLABLE_MODULE)) ALL_MODULES.$(my_register_name).INSTALLED := \ $(strip $(ALL_MODULES.$(my_register_name).INSTALLED) \ - $(LOCAL_INSTALLED_MODULE) $(my_init_rc_installed) $(my_installed_symlinks)) + $(LOCAL_INSTALLED_MODULE) $(my_init_rc_installed) $(my_installed_symlinks) \ + $(my_installed_test_data)) ALL_MODULES.$(my_register_name).BUILT_INSTALLED := \ $(strip $(ALL_MODULES.$(my_register_name).BUILT_INSTALLED) \ $(LOCAL_BUILT_MODULE):$(LOCAL_INSTALLED_MODULE) \ - $(my_init_rc_pairs)) + $(my_init_rc_pairs) $(my_test_data_pairs)) endif ifdef LOCAL_PICKUP_FILES # Files or directories ready to pick up by the build system diff --git a/core/clear_vars.mk b/core/clear_vars.mk index 07f784112..c0343a0f7 100644 --- a/core/clear_vars.mk +++ b/core/clear_vars.mk @@ -209,6 +209,7 @@ LOCAL_STATIC_JAVA_LIBRARIES:= LOCAL_STATIC_LIBRARIES:= LOCAL_STRIP_MODULE:= LOCAL_SYSTEM_SHARED_LIBRARIES:=none +LOCAL_TEST_DATA:= LOCAL_TEST_MODULE_TO_PROGUARD_WITH:= LOCAL_TIDY:= LOCAL_TIDY_CHECKS:= diff --git a/core/definitions.mk b/core/definitions.mk index 698f52ca0..969260b82 100644 --- a/core/definitions.mk +++ b/core/definitions.mk @@ -468,6 +468,20 @@ $(strip \ ) endef +########################################################### +## Find test data in a form required by LOCAL_TEST_DATA +## $(1): the base dir, relative to the root of the source tree. +## $(3): the file name pattern to be passed to find as "-name" +## $(2): a list of subdirs of the base dir +########################################################### + +define find-test-data-in-subdirs +$(foreach f,$(sort $(patsubst ./%,%, \ + $(shell cd $(1) ; \ + find -L $(3) -type f -and -name $(2) -and -not -name ".*") \ +)),$(1):$(f)) +endef + ########################################################### ## Function we can evaluate to introduce a dynamic dependency ###########################################################