Skip to content

Commit 1d1ceeb

Browse files
committed
More board-header checks (followup to #2397)
- make the error messages less misleading - suggest replacing the old comment-style syntax with the new macro-style syntax
1 parent 174cafc commit 1d1ceeb

File tree

1 file changed

+31
-9
lines changed

1 file changed

+31
-9
lines changed

tools/check_board_header.py

+31-9
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,17 @@ def read_defines_from(header_file, defines_dict):
7575
# strip trailing comments
7676
line = re.sub(r"(?<=\S)\s*//.*$", "", line)
7777

78+
# look for "// old_comment BLAH_BLAH=42" and suggest changing it to "new_macro(BLAH_BLAH, 42)"
79+
for (old_comment, new_macro) in (
80+
('pico_cmake_set', 'pico_board_cmake_set'),
81+
('pico_cmake_set_default', 'pico_board_cmake_set_default')
82+
):
83+
m = re.match(r"^\s*//\s*{}\s+(\w+)\s*=\s*(.+?)\s*$".format(old_comment), line)
84+
if m:
85+
name = m.group(1)
86+
value = m.group(2)
87+
raise Exception("{}:{} \"// {} {}={}\" should be replaced with \"{}({}, {})\"".format(board_header, lineno, old_comment, name, value, new_macro, name, value))
88+
7889
# look for "pico_board_cmake_set(BLAH_BLAH, 42)"
7990
m = re.match(r"^\s*pico_board_cmake_set\s*\(\s*([a-zA-Z_][a-zA-Z0-9_]*)\s*,\s*(.*)\s*\)\s*$", line)
8091
if m:
@@ -87,10 +98,10 @@ def read_defines_from(header_file, defines_dict):
8798
# check for multiply-defined values
8899
if name in cmake_settings:
89100
if cmake_settings[name].value != value:
90-
raise Exception("{}:{} Conflicting values for pico_board_cmake_set {} ({} and {})".format(board_header, lineno, name, cmake_settings[name].value, value))
101+
raise Exception("{}:{} Conflicting values for pico_board_cmake_set({}) ({} and {})".format(board_header, lineno, name, cmake_settings[name].value, value))
91102
else:
92103
if show_warnings:
93-
warnings.warn("{}:{} Multiple values for pico_board_cmake_set {} ({} and {})".format(board_header, lineno, name, cmake_settings[name].value, value))
104+
warnings.warn("{}:{} Multiple values for pico_board_cmake_set({}) ({} and {})".format(board_header, lineno, name, cmake_settings[name].value, value))
94105
else:
95106
cmake_settings[name] = DefineType(name, value, None, lineno)
96107
continue
@@ -223,6 +234,17 @@ def read_defines_from(header_file, defines_dict):
223234
raise Exception("{}:{} Suggests including \"{}\" but file is named \"{}\"".format(board_header, lineno, include_suggestion, expected_include_suggestion))
224235
continue
225236

237+
# look for "// old_comment BLAH_BLAH=42" and suggest changing it to "new_macro(BLAH_BLAH, 42)"
238+
for (old_comment, new_macro) in (
239+
('pico_cmake_set', 'pico_board_cmake_set'),
240+
('pico_cmake_set_default', 'pico_board_cmake_set_default')
241+
):
242+
m = re.match(r"^\s*//\s*{}\s+(\w+)\s*=\s*(.+?)\s*$".format(old_comment), line)
243+
if m:
244+
name = m.group(1)
245+
value = m.group(2)
246+
raise Exception("{}:{} \"// {} {}={}\" should be replaced with \"{}({}, {})\"".format(board_header, lineno, old_comment, name, value, new_macro, name, value))
247+
226248
# look for "pico_board_cmake_set(BLAH_BLAH, 42)"
227249
m = re.match(r"^\s*pico_board_cmake_set\s*\(\s*([a-zA-Z_][a-zA-Z0-9_]*)\s*,\s*(.*)\s*\)\s*$", line)
228250
if m:
@@ -234,7 +256,7 @@ def read_defines_from(header_file, defines_dict):
234256
raise Exception("{}:{} Expected \"{}\" to be all uppercase".format(board_header, lineno, name))
235257
# check for multiply-defined values
236258
if name in cmake_settings:
237-
raise Exception("{}:{} Multiple values for pico_board_cmake_set {} ({} and {})".format(board_header, lineno, name, cmake_settings[name].value, value))
259+
raise Exception("{}:{} Multiple values for pico_board_cmake_set({}) ({} and {})".format(board_header, lineno, name, cmake_settings[name].value, value))
238260
else:
239261
if value:
240262
try:
@@ -256,7 +278,7 @@ def read_defines_from(header_file, defines_dict):
256278
raise Exception("{}:{} Expected \"{}\" to be all uppercase".format(board_header, lineno, name))
257279
# check for multiply-defined values
258280
if name in cmake_default_settings:
259-
raise Exception("{}:{} Multiple values for pico_board_cmake_set_default {} ({} and {})".format(board_header, lineno, name, cmake_default_settings[name].value, value))
281+
raise Exception("{}:{} Multiple values for pico_board_cmake_set_default({}) ({} and {})".format(board_header, lineno, name, cmake_default_settings[name].value, value))
260282
else:
261283
if value:
262284
try:
@@ -382,7 +404,7 @@ def read_defines_from(header_file, defines_dict):
382404
else:
383405
for setting in compulsory_cmake_settings:
384406
if setting not in cmake_settings:
385-
raise Exception("{} is missing a pico_board_cmake_set {} comment".format(board_header, setting))
407+
raise Exception("{} is missing a pico_board_cmake_set({}, XXX) call".format(board_header, setting))
386408
if cmake_settings['PICO_PLATFORM'].value == "rp2040":
387409
chip = 'RP2040'
388410
other_chip = 'RP2350'
@@ -399,19 +421,19 @@ def read_defines_from(header_file, defines_dict):
399421
chip = 'RP2350B'
400422
if not board_header.endswith("amethyst_fpga.h"):
401423
if 'PICO_RP2350_A2_SUPPORTED' not in cmake_default_settings:
402-
raise Exception("{} uses chip {} but is missing a pico_board_cmake_set_default {} comment".format(board_header, chip, 'PICO_RP2350_A2_SUPPORTED'))
424+
raise Exception("{} uses chip {} but is missing a pico_board_cmake_set_default({}, XXX) call".format(board_header, chip, 'PICO_RP2350_A2_SUPPORTED'))
403425
if 'PICO_RP2350_A2_SUPPORTED' not in defines:
404426
raise Exception("{} uses chip {} but is missing a #define {}".format(board_header, chip, 'PICO_RP2350_A2_SUPPORTED'))
405427
if defines['PICO_RP2350_A2_SUPPORTED'].resolved_value != 1:
406428
raise Exception("{} sets #define {} {} (should be 1)".format(board_header, chip, 'PICO_RP2350_A2_SUPPORTED', defines['PICO_RP2350_A2_SUPPORTED'].resolved_value))
407429
for setting in compulsory_cmake_default_settings:
408430
if setting not in cmake_default_settings:
409-
raise Exception("{} is missing a pico_board_cmake_set_default {} comment".format(board_header, setting))
431+
raise Exception("{} is missing a pico_board_cmake_set_default({}, XXX) call".format(board_header, setting))
410432
for setting in matching_cmake_default_settings:
411433
if setting in cmake_default_settings and setting not in defines:
412-
raise Exception("{} has pico_board_cmake_set_default {} but is missing a matching #define".format(board_header, setting))
434+
raise Exception("{} has pico_board_cmake_set_default({}, XXX) but is missing a matching #define".format(board_header, setting))
413435
elif setting in defines and setting not in cmake_default_settings:
414-
raise Exception("{} has #define {} but is missing a matching pico_board_cmake_set_default comment".format(board_header, setting))
436+
raise Exception("{} has #define {} but is missing a matching pico_board_cmake_set_default({}, XXX) call".format(board_header, setting, setting))
415437
elif setting in defines and setting in cmake_default_settings:
416438
if cmake_default_settings[setting].value != defines[setting].resolved_value:
417439
raise Exception("{} has mismatched pico_board_cmake_set_default and #define values for {}".format(board_header, setting))

0 commit comments

Comments
 (0)