Revert "Delete deps-license target."
This reverts commit a553cc828ef1a1a9e59133f6aa1aaa1d267b7b79.
Reason for revert: atest has code that tries to build the target
Change-Id: I46902b3930a5a73aa3e5a15f29e0bb0246e59250
diff --git a/core/config.mk b/core/config.mk
index b2c094b..3d08ba4 100644
--- a/core/config.mk
+++ b/core/config.mk
@@ -1215,7 +1215,7 @@
DEFAULT_DATA_OUT_MODULES := ltp $(ltp_packages) $(kselftest_modules)
.KATI_READONLY := DEFAULT_DATA_OUT_MODULES
-# Make RECORD_ALL_DEPS readonly
-RECORD_ALL_DEPS :=$= $(filter true,$(RECORD_ALL_DEPS))
+# Make RECORD_ALL_DEPS readonly and also set it if deps-license is a goal.
+RECORD_ALL_DEPS :=$= $(filter true,$(RECORD_ALL_DEPS))$(filter deps-license,$(MAKECMDGOALS))
include $(BUILD_SYSTEM)/dumpvar.mk
diff --git a/core/ninja_config.mk b/core/ninja_config.mk
index 336048f..1ead512 100644
--- a/core/ninja_config.mk
+++ b/core/ninja_config.mk
@@ -24,6 +24,7 @@
continuous_native_tests \
cts \
custom_images \
+ deps-license \
dicttool_aosp \
dump-products \
eng \
diff --git a/core/tasks/deps_licenses.mk b/core/tasks/deps_licenses.mk
new file mode 100644
index 0000000..daf986f
--- /dev/null
+++ b/core/tasks/deps_licenses.mk
@@ -0,0 +1,59 @@
+#
+# Copyright (C) 2015 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# Print modules and their transitive dependencies with license files.
+# To invoke, run "make deps-license PROJ_PATH=<proj-path-patterns> DEP_PATH=<dep-path-patterns>".
+# PROJ_PATH restricts the paths of the source modules; DEP_PATH restricts the paths of the dependency modules.
+# Both can be makefile patterns supported by makefile function $(filter).
+# Example: "make deps-license packages/app/% external/%" prints all modules in packages/app/ with their dpendencies in external/.
+# The printout lines look like "<module_name> :: <module_paths> :: <license_files>".
+
+ifneq (,$(filter deps-license,$(MAKECMDGOALS)))
+ifndef PROJ_PATH
+$(error To "make deps-license" you must specify PROJ_PATH and DEP_PATH.)
+endif
+ifndef DEP_PATH
+$(error To "make deps-license" you must specify PROJ_PATH and DEP_PATH.)
+endif
+
+# Expand a module's dependencies transitively.
+# $(1): the variable name to hold the result.
+# $(2): the initial module name.
+define get-module-all-dependencies
+$(eval _gmad_new := $(sort $(filter-out $($(1)),\
+ $(foreach m,$(2),$(ALL_DEPS.$(m).ALL_DEPS)))))\
+$(if $(_gmad_new),$(eval $(1) += $(_gmad_new))\
+ $(call get-module-all-dependencies,$(1),$(_gmad_new)))
+endef
+
+define print-deps-license
+$(foreach m, $(sort $(ALL_DEPS.MODULES)),\
+ $(eval m_p := $(sort $(ALL_MODULES.$(m).PATH) $(ALL_MODULES.$(m)$(TARGET_2ND_ARCH_MODULE_SUFFIX).PATH)))\
+ $(if $(filter $(PROJ_PATH),$(m_p)),\
+ $(eval deps :=)\
+ $(eval $(call get-module-all-dependencies,deps,$(m)))\
+ $(info $(m) :: $(m_p) :: $(ALL_DEPS.$(m).LICENSE))\
+ $(foreach d,$(deps),\
+ $(eval d_p := $(sort $(ALL_MODULES.$(d).PATH) $(ALL_MODULES.$(d)$(TARGET_2ND_ARCH_MODULE_SUFFIX).PATH)))\
+ $(if $(filter $(DEP_PATH),$(d_p)),\
+ $(info $(space)$(space)$(space)$(space)$(d) :: $(d_p) :: $(ALL_DEPS.$(d).LICENSE))))))
+endef
+
+.PHONY: deps-license
+deps-license:
+ @$(call print-deps-license)
+
+endif