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