diff options
Diffstat (limited to 'lib/python/qmk/keyboard.py')
-rw-r--r-- | lib/python/qmk/keyboard.py | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/lib/python/qmk/keyboard.py b/lib/python/qmk/keyboard.py index 0168d17ef..e45768556 100644 --- a/lib/python/qmk/keyboard.py +++ b/lib/python/qmk/keyboard.py | |||
@@ -92,7 +92,16 @@ def list_keyboards(): | |||
92 | kb_wildcard = os.path.join(base_path, "**", "rules.mk") | 92 | kb_wildcard = os.path.join(base_path, "**", "rules.mk") |
93 | paths = [path for path in glob(kb_wildcard, recursive=True) if 'keymaps' not in path] | 93 | paths = [path for path in glob(kb_wildcard, recursive=True) if 'keymaps' not in path] |
94 | 94 | ||
95 | return sorted(map(_find_name, paths)) | 95 | return sorted(set(map(resolve_keyboard, map(_find_name, paths)))) |
96 | |||
97 | |||
98 | def resolve_keyboard(keyboard): | ||
99 | cur_dir = Path('keyboards') | ||
100 | rules = parse_rules_mk_file(cur_dir / keyboard / 'rules.mk') | ||
101 | while 'DEFAULT_FOLDER' in rules and keyboard != rules['DEFAULT_FOLDER']: | ||
102 | keyboard = rules['DEFAULT_FOLDER'] | ||
103 | rules = parse_rules_mk_file(cur_dir / keyboard / 'rules.mk') | ||
104 | return keyboard | ||
96 | 105 | ||
97 | 106 | ||
98 | def config_h(keyboard): | 107 | def config_h(keyboard): |
@@ -106,8 +115,7 @@ def config_h(keyboard): | |||
106 | """ | 115 | """ |
107 | config = {} | 116 | config = {} |
108 | cur_dir = Path('keyboards') | 117 | cur_dir = Path('keyboards') |
109 | rules = rules_mk(keyboard) | 118 | keyboard = Path(resolve_keyboard(keyboard)) |
110 | keyboard = Path(rules['DEFAULT_FOLDER'] if 'DEFAULT_FOLDER' in rules else keyboard) | ||
111 | 119 | ||
112 | for dir in keyboard.parts: | 120 | for dir in keyboard.parts: |
113 | cur_dir = cur_dir / dir | 121 | cur_dir = cur_dir / dir |
@@ -125,13 +133,10 @@ def rules_mk(keyboard): | |||
125 | Returns: | 133 | Returns: |
126 | a dictionary representing the content of the entire rules.mk tree for a keyboard | 134 | a dictionary representing the content of the entire rules.mk tree for a keyboard |
127 | """ | 135 | """ |
128 | keyboard = Path(keyboard) | ||
129 | cur_dir = Path('keyboards') | 136 | cur_dir = Path('keyboards') |
137 | keyboard = Path(resolve_keyboard(keyboard)) | ||
130 | rules = parse_rules_mk_file(cur_dir / keyboard / 'rules.mk') | 138 | rules = parse_rules_mk_file(cur_dir / keyboard / 'rules.mk') |
131 | 139 | ||
132 | if 'DEFAULT_FOLDER' in rules: | ||
133 | keyboard = Path(rules['DEFAULT_FOLDER']) | ||
134 | |||
135 | for i, dir in enumerate(keyboard.parts): | 140 | for i, dir in enumerate(keyboard.parts): |
136 | cur_dir = cur_dir / dir | 141 | cur_dir = cur_dir / dir |
137 | rules = parse_rules_mk_file(cur_dir / 'rules.mk', rules) | 142 | rules = parse_rules_mk_file(cur_dir / 'rules.mk', rules) |