summaryrefslogtreecommitdiffstats
path: root/core/notice_files.mk
diff options
context:
space:
mode:
Diffstat (limited to 'core/notice_files.mk')
-rw-r--r--core/notice_files.mk65
1 files changed, 65 insertions, 0 deletions
diff --git a/core/notice_files.mk b/core/notice_files.mk
new file mode 100644
index 000000000..24295c781
--- /dev/null
+++ b/core/notice_files.mk
@@ -0,0 +1,65 @@
+###########################################################
+## Track NOTICE files
+###########################################################
+
+notice_file:=$(shell find $(LOCAL_PATH) -maxdepth 1 -name NOTICE)
+
+ifneq ($(strip $(notice_file)),)
+
+# This relies on the name of the directory in PRODUCT_OUT matching where
+# it's installed on the target - i.e. system, data, etc. This does
+# not work for root and isn't exact, but it's probably good enough for
+# compliance.
+# Includes the leading slash
+ifdef LOCAL_INSTALLED_MODULE
+ module_installed_filename := $(patsubst $(PRODUCT_OUT)%,%,$(LOCAL_INSTALLED_MODULE))
+else
+ # This module isn't installable
+ ifeq ($(LOCAL_MODULE_CLASS),STATIC_LIBRARIES)
+ # Stick the static libraries with the dynamic libraries.
+ # We can't use xxx_OUT_STATIC_LIBRARIES because it points into
+ # device-obj or host-obj.
+ module_installed_filename := \
+ $(patsubst $(PRODUCT_OUT)%,%,$($(my_prefix)OUT_SHARED_LIBRARIES))/$(notdir $(LOCAL_BUILT_MODULE))
+ else
+ ifeq ($(LOCAL_MODULE_CLASS),JAVA_LIBRARIES)
+ # Stick the static java libraries with the regular java libraries.
+ module_installed_filename := \
+ $(patsubst $(PRODUCT_OUT)%,%,$($(my_prefix)OUT_JAVA_LIBRARIES))/$(notdir $(LOCAL_BUILT_MODULE))
+ else
+ $(error Cannot determine where to install NOTICE file for $(LOCAL_MODULE))
+ endif # JAVA_LIBRARIES
+ endif # STATIC_LIBRARIES
+endif
+
+# In case it's actually a host file
+module_installed_filename := $(patsubst $(HOST_OUT)%,%,$(module_installed_filename))
+
+installed_notice_file := $($(my_prefix)OUT_NOTICE_FILES)/src/$(module_installed_filename).txt
+
+$(installed_notice_file): PRIVATE_INSTALLED_MODULE := $(module_installed_filename)
+
+$(installed_notice_file): $(notice_file)
+ @echo Notice file: $< -- $@
+ $(hide) mkdir -p $(dir $@)
+ $(hide) cat $< >> $@
+
+ifdef LOCAL_INSTALLED_MODULE
+# Make LOCAL_INSTALLED_MODULE depend on NOTICE files if they exist
+# libraries so they get installed along with it. Make it an order-only
+# dependency so we don't re-install a module when the NOTICE changes.
+$(LOCAL_INSTALLED_MODULE): | $(installed_notice_file)
+endif
+
+else
+# NOTICE file does not exist
+installed_notice_file :=
+endif
+
+# Create a predictable, phony target to build this notice file.
+# Define it even if the notice file doesn't exist so that other
+# modules can depend on it.
+notice_target := NOTICE-$(if \
+ $(LOCAL_IS_HOST_MODULE),HOST,TARGET)-$(LOCAL_MODULE_CLASS)-$(LOCAL_MODULE)
+.PHONY: $(notice_target)
+$(notice_target): $(installed_notice_file)