notice_files.mk revision 057aaea54a8dd6aa769290b1c0f471a17aaf1a22
1########################################################### 2## Track NOTICE files 3########################################################### 4 5notice_file:=$(strip $(wildcard $(LOCAL_PATH)/NOTICE)) 6 7ifeq ($(LOCAL_MODULE_CLASS),GYP) 8 # We ignore NOTICE files for modules of type GYP. 9 notice_file := 10endif 11 12ifeq ($(LOCAL_MODULE_CLASS),NOTICE_FILES) 13# If this is a NOTICE-only module, we don't include base_rule.mk, 14# so my_prefix is not set at this point. 15ifeq ($(LOCAL_IS_HOST_MODULE),true) 16 my_prefix := HOST_ 17 LOCAL_HOST_PREFIX := 18else 19 my_prefix := TARGET_ 20endif 21endif 22 23ifdef notice_file 24 25# This relies on the name of the directory in PRODUCT_OUT matching where 26# it's installed on the target - i.e. system, data, etc. This does 27# not work for root and isn't exact, but it's probably good enough for 28# compliance. 29# Includes the leading slash 30ifdef LOCAL_INSTALLED_MODULE 31 module_installed_filename := $(patsubst $(PRODUCT_OUT)%,%,$(LOCAL_INSTALLED_MODULE)) 32else 33 # This module isn't installable 34 ifeq ($(LOCAL_MODULE_CLASS),STATIC_LIBRARIES) 35 # Stick the static libraries with the dynamic libraries. 36 # We can't use xxx_OUT_STATIC_LIBRARIES because it points into 37 # device-obj or host-obj. 38 module_installed_filename := \ 39 $(patsubst $(PRODUCT_OUT)%,%,$($(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)OUT_SHARED_LIBRARIES))/$(notdir $(LOCAL_BUILT_MODULE)) 40 else 41 ifeq ($(LOCAL_MODULE_CLASS),JAVA_LIBRARIES) 42 # Stick the static java libraries with the regular java libraries. 43 module_leaf := $(notdir $(LOCAL_BUILT_MODULE)) 44 # javalib.jar is the default name for the build module (and isn't meaningful) 45 # If that's what we have, substitute the module name instead. These files 46 # aren't included on the device, so this name is synthetic anyway. 47 ifneq ($(filter javalib.jar classes.jack,$(module_leaf)),) 48 module_leaf := $(LOCAL_MODULE).jar 49 endif 50 module_installed_filename := \ 51 $(patsubst $(PRODUCT_OUT)%,%,$($(my_prefix)OUT_JAVA_LIBRARIES))/$(module_leaf) 52 else 53 $(error Cannot determine where to install NOTICE file for $(LOCAL_MODULE)) 54 endif # JAVA_LIBRARIES 55 endif # STATIC_LIBRARIES 56endif 57 58# In case it's actually a host file 59module_installed_filename := $(patsubst $(HOST_OUT)%,%,$(module_installed_filename)) 60module_installed_filename := $(patsubst $(HOST_CROSS_OUT)%,%,$(module_installed_filename)) 61 62installed_notice_file := $($(my_prefix)OUT_NOTICE_FILES)/src/$(module_installed_filename).txt 63 64$(installed_notice_file): PRIVATE_INSTALLED_MODULE := $(module_installed_filename) 65 66$(installed_notice_file): $(notice_file) 67 @echo Notice file: $< -- $@ 68 $(hide) mkdir -p $(dir $@) 69 $(hide) cat $< > $@ 70 71ifdef LOCAL_INSTALLED_MODULE 72# Make LOCAL_INSTALLED_MODULE depend on NOTICE files if they exist 73# libraries so they get installed along with it. Make it an order-only 74# dependency so we don't re-install a module when the NOTICE changes. 75$(LOCAL_INSTALLED_MODULE): | $(installed_notice_file) 76endif 77 78# To facilitate collecting NOTICE files for apps_only build, 79# we install the NOTICE file even if a module gets built but not installed, 80# because shared jni libraries won't be installed to the system image. 81ifdef TARGET_BUILD_APPS 82# for static Java libraries, we don't need to even build LOCAL_BUILT_MODULE, 83# but just javalib.jar in the common intermediate dir. 84ifeq ($(LOCAL_MODULE_CLASS),JAVA_LIBRARIES) 85$(intermediates.COMMON)/javalib.jar : | $(installed_notice_file) 86else 87$(LOCAL_BUILT_MODULE): | $(installed_notice_file) 88endif # JAVA_LIBRARIES 89endif # TARGET_BUILD_APPS 90 91else 92# NOTICE file does not exist 93installed_notice_file := 94endif 95 96# Create a predictable, phony target to build this notice file. 97# Define it even if the notice file doesn't exist so that other 98# modules can depend on it. 99notice_target := NOTICE-$(if \ 100 $(LOCAL_IS_HOST_MODULE),HOST,TARGET)-$(LOCAL_MODULE_CLASS)-$(LOCAL_MODULE) 101.PHONY: $(notice_target) 102$(notice_target): $(installed_notice_file) 103