Merge "Allow duplicate release config maps and build flag declarations" into main
diff --git a/core/release_config.mk b/core/release_config.mk
index a6152bd..36882bb 100644
--- a/core/release_config.mk
+++ b/core/release_config.mk
@@ -119,12 +119,17 @@
 endef
 
 # Include the config map files and populate _flag_declaration_files.
+# If the file is found more than once, only include it the first time.
 _flag_declaration_files :=
+_included_config_map_files :=
 $(foreach f, $(config_map_files), \
     $(eval FLAG_DECLARATION_FILES:= ) \
-    $(eval _included := $(f)) \
-    $(eval include $(f)) \
-    $(eval _flag_declaration_files += $(FLAG_DECLARATION_FILES)) \
+    $(if $(filter $(_included_config_map_files),$(f)),,\
+        $(eval _included := $(f)) \
+        $(eval include $(f)) \
+        $(eval _flag_declaration_files += $(FLAG_DECLARATION_FILES)) \
+        $(eval _included_config_map_files += $(f)) \
+    ) \
 )
 FLAG_DECLARATION_FILES :=
 
diff --git a/core/release_config.scl b/core/release_config.scl
index 662d155..629e223 100644
--- a/core/release_config.scl
+++ b/core/release_config.scl
@@ -145,6 +145,21 @@
     else:
         return val
 
+def equal_flag_declaration(flag, other):
+    """Return true if the flag declarations are equal.
+
+    Args:
+      flag: This flag declaration.
+      other: Another flag declaration.
+
+    Returns:
+      Whether the declarations are the same.
+    """
+    for key in "name", "partitions", "default", "appends":
+        if flag[key] != other[key]:
+            return False
+    return True
+
 def release_config(all_flags, all_values):
     """Return the make variables that should be set for this release config.
 
@@ -163,7 +178,11 @@
     flags_dict = {}
     for flag in all_flags:
         if flag["name"] in flag_names:
-            fail(flag["declared_in"] + ": Duplicate declaration of flag " + flag["name"])
+            if equal_flag_declaration(flag, flags_dict[flag["name"]]):
+                continue
+            else:
+                fail(flag["declared_in"] + ": Duplicate declaration of flag " + flag["name"] +
+                     " (declared first in " + flags_dict[flag["name"]]["declared_in"] + ")")
         flag_names.append(flag["name"])
         flags_dict[flag["name"]] = flag