diff options
Diffstat (limited to 'lib/python/qmk/info.py')
-rw-r--r-- | lib/python/qmk/info.py | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/lib/python/qmk/info.py b/lib/python/qmk/info.py index de7632e37..15a5c097a 100644 --- a/lib/python/qmk/info.py +++ b/lib/python/qmk/info.py @@ -6,15 +6,22 @@ from pathlib import Path from milc import cli -from qmk.constants import ARM_PROCESSORS, AVR_PROCESSORS, VUSB_PROCESSORS +from qmk.constants import CHIBIOS_PROCESSORS, LUFA_PROCESSORS, VUSB_PROCESSORS from qmk.c_parse import find_layouts from qmk.keyboard import config_h, rules_mk +from qmk.makefile import parse_rules_mk_file from qmk.math import compute def info_json(keyboard): """Generate the info.json data for a specific keyboard. """ + cur_dir = Path('keyboards') + rules = parse_rules_mk_file(cur_dir / keyboard / 'rules.mk') + if 'DEFAULT_FOLDER' in rules: + keyboard = rules['DEFAULT_FOLDER'] + rules = parse_rules_mk_file(cur_dir / keyboard / 'rules.mk', rules) + info_data = { 'keyboard_name': str(keyboard), 'keyboard_folder': str(keyboard), @@ -22,7 +29,7 @@ def info_json(keyboard): 'maintainer': 'qmk', } - for layout_name, layout_json in _find_all_layouts(keyboard).items(): + for layout_name, layout_json in _find_all_layouts(keyboard, rules).items(): if not layout_name.startswith('LAYOUT_kc'): info_data['layouts'][layout_name] = layout_json @@ -88,9 +95,9 @@ def _extract_rules_mk(info_data): rules = rules_mk(info_data['keyboard_folder']) mcu = rules.get('MCU') - if mcu in ARM_PROCESSORS: + if mcu in CHIBIOS_PROCESSORS: arm_processor_rules(info_data, rules) - elif mcu in AVR_PROCESSORS: + elif mcu in LUFA_PROCESSORS + VUSB_PROCESSORS: avr_processor_rules(info_data, rules) else: cli.log.warning("%s: Unknown MCU: %s" % (info_data['keyboard_folder'], mcu)) @@ -99,22 +106,24 @@ def _extract_rules_mk(info_data): return info_data -def _find_all_layouts(keyboard): - """Looks for layout macros associated with this keyboard. - """ - layouts = {} - rules = rules_mk(keyboard) - keyboard_path = Path(rules.get('DEFAULT_FOLDER', keyboard)) - - # Pull in all layouts defined in the standard files +def _search_keyboard_h(path): current_path = Path('keyboards/') - for directory in keyboard_path.parts: + layouts = {} + for directory in path.parts: current_path = current_path / directory keyboard_h = '%s.h' % (directory,) keyboard_h_path = current_path / keyboard_h if keyboard_h_path.exists(): layouts.update(find_layouts(keyboard_h_path)) + return layouts + + +def _find_all_layouts(keyboard, rules): + """Looks for layout macros associated with this keyboard. + """ + layouts = _search_keyboard_h(Path(keyboard)) + if not layouts: # If we didn't find any layouts above we widen our search. This is error # prone which is why we want to encourage people to follow the standard above. |