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