From 6f60f020d781d9a93786616039323e9f25e02c0b Mon Sep 17 00:00:00 2001 From: Dan Willemsen Date: Tue, 23 Feb 2016 13:40:07 -0800 Subject: [PATCH] Warn more clearly when there are duplicate copied headers When more than one makefile tries to copy a header to the same destination, the warning is not clear, and hard to track down and assign blame: build/core/copy_headers.mk:15: warning: ignoring old commands for target `out/target/product/bullhead/obj/include/qcom/display/copybit.h' With this change, the same behavior is kept, but the warning message is more descriptive, and contains the offending Android.mk files: build/core/Makefile:54: Duplicate header copy: out/target/product/bullhead/obj/include/qcom/display/copybit.h build/core/Makefile:54: Defined in: hardware/qcom/display/msm8994/libcopybit/Android.mk hardware/qcom/display/msm8994/libcopybit/Android.mk In this case, a $(CLEAR_VARS) is missing, so the same Android.mk file is copying the same headers twice. Bug: 27302058 Change-Id: Icf8f580ae71a78741db21c1d8f3213424459e637 --- core/Makefile | 17 ++++++++++++++--- core/copy_headers.mk | 6 ++++-- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/core/Makefile b/core/Makefile index 7bb9d17f4..2d7f76d6d 100644 --- a/core/Makefile +++ b/core/Makefile @@ -46,6 +46,20 @@ $(foreach cf,$(unique_product_copy_files_pairs), \ unique_product_copy_files_pairs := unique_product_copy_files_destinations := +# ----------------------------------------------------------------- +# Define rules to copy headers defined in copy_headers.mk +# If more than one makefile declared a header, print a warning, +# then copy the last one defined. This matches the previous make +# behavior. +$(foreach dest,$(ALL_COPIED_HEADERS), \ + $(eval _srcs := $(ALL_COPIED_HEADERS.$(dest).SRC)) \ + $(eval _src := $(word $(words $(_srcs)),$(_srcs))) \ + $(if $(call streq,$(_src),$(_srcs)),, \ + $(warning Duplicate header copy: $(dest)) \ + $(warning Defined in: $(ALL_COPIED_HEADERS.$(dest).MAKEFILE))) \ + $(eval $(call copy-one-header,$(_src),$(dest)))) +all_copied_headers: $(ALL_COPIED_HEADERS) + # ----------------------------------------------------------------- # docs/index.html ifeq (,$(TARGET_BUILD_APPS)) @@ -468,7 +482,6 @@ endif # the ramdisk INTERNAL_RAMDISK_FILES := $(filter $(TARGET_ROOT_OUT)/%, \ $(ALL_PREBUILT) \ - $(ALL_COPIED_HEADERS) \ $(ALL_GENERATED_SOURCES) \ $(ALL_DEFAULT_INSTALLED_MODULES)) @@ -1032,7 +1045,6 @@ PDK_FUSION_SYSIMG_FILES := \ INTERNAL_SYSTEMIMAGE_FILES := $(filter $(TARGET_OUT)/%, \ $(ALL_PREBUILT) \ - $(ALL_COPIED_HEADERS) \ $(ALL_GENERATED_SOURCES) \ $(ALL_DEFAULT_INSTALLED_MODULES) \ $(PDK_FUSION_SYSIMG_FILES) \ @@ -1949,7 +1961,6 @@ ATREE_FILES := ifeq ($(strip $(ATREE_FILES)),) ATREE_FILES := \ $(ALL_PREBUILT) \ - $(ALL_COPIED_HEADERS) \ $(ALL_DEFAULT_INSTALLED_MODULES) \ $(INSTALLED_RAMDISK_TARGET) \ $(ALL_DOCS) \ diff --git a/core/copy_headers.mk b/core/copy_headers.mk index e16560fbf..7d5a5d992 100644 --- a/core/copy_headers.mk +++ b/core/copy_headers.mk @@ -18,8 +18,10 @@ $(foreach header,$(LOCAL_COPY_HEADERS), \ $(if $(LOCAL_COPY_HEADERS_TO),\ $($(my_prefix)OUT_HEADERS)/$(LOCAL_COPY_HEADERS_TO)/$(notdir $(header)),\ $($(my_prefix)OUT_HEADERS)/$(notdir $(header)))) \ - $(eval $(call copy-one-header,$(_chFrom),$(_chTo))) \ - $(eval all_copied_headers: $(_chTo)) \ + $(eval ALL_COPIED_HEADERS.$(_chTo).MAKEFILE += $(LOCAL_MODULE_MAKEFILE)) \ + $(eval ALL_COPIED_HEADERS.$(_chTo).SRC += $(_chFrom)) \ + $(if $(filter $(_chTo),$(ALL_COPIED_HEADERS)),, \ + $(eval ALL_COPIED_HEADERS += $(_chTo))) \ ) _chFrom := _chTo :=