Make duplicate COPY_HEADERS an error

Test: on internal device that has warnings, test with
BUILD_BROKEN_DUP_COPY_HEADERS true and unset.
Test: build_test on downstream branches
Change-Id: I2cebd99b10f13fb75167dc8370ba762f94c41c2a
diff --git a/core/Makefile b/core/Makefile
index d5621d7..3d5d045 100644
--- a/core/Makefile
+++ b/core/Makefile
@@ -69,15 +69,24 @@
 # If more than one makefile declared a header, print a warning,
 # then copy the last one defined. This matches the previous make
 # behavior.
+has_dup_copy_headers :=
 $(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))) \
+	$(warning Defined in: $(ALL_COPIED_HEADERS.$(dest).MAKEFILE)) \
+	$(eval has_dup_copy_headers := true)) \
     $(eval $(call copy-one-header,$(_src),$(dest))))
 all_copied_headers: $(ALL_COPIED_HEADERS)
 
+ifdef has_dup_copy_headers
+  has_dup_copy_headers :=
+  ifneq ($(BUILD_BROKEN_DUP_COPY_HEADERS),true)
+    $(error duplicate header copies are no longer allowed. For more information about headers, see: https://android.googlesource.com/platform/build/soong/+/master/docs/best_practices.md#headers)
+  endif
+endif
+
 # -----------------------------------------------------------------
 # docs/index.html
 ifeq (,$(TARGET_BUILD_APPS))