summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile36
-rw-r--r--lib/python/qmk/cli/__init__.py1
-rw-r--r--lib/python/qmk/cli/resolve_alias.py16
3 files changed, 41 insertions, 12 deletions
diff --git a/Makefile b/Makefile
index 5fcd6bbf0f..c68ee7418a 100644
--- a/Makefile
+++ b/Makefile
@@ -113,6 +113,29 @@ endef
113# Make it easier to call TRY_TO_MATCH_RULE_FROM_LIST 113# Make it easier to call TRY_TO_MATCH_RULE_FROM_LIST
114TRY_TO_MATCH_RULE_FROM_LIST = $(eval $(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER,$1))$(RULE_FOUND) 114TRY_TO_MATCH_RULE_FROM_LIST = $(eval $(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER,$1))$(RULE_FOUND)
115 115
116# As TRY_TO_MATCH_RULE_FROM_LIST_HELPER, but with additional
117# resolution of DEFAULT_FOLDER and keyboard_aliases.hjson for provided rule
118define TRY_TO_MATCH_RULE_FROM_LIST_HELPER_KB
119 # Split on ":", padding with empty strings to avoid indexing issues
120 TOKEN1:=$$(shell python3 -c "import sys; print((sys.argv[1].split(':',1)+[''])[0])" $$(RULE))
121 TOKENr:=$$(shell python3 -c "import sys; print((sys.argv[1].split(':',1)+[''])[1])" $$(RULE))
122
123 TOKEN1:=$$(shell $(QMK_BIN) resolve-alias --allow-unknown $$(TOKEN1))
124
125 FOUNDx:=$$(shell echo $1 | tr " " "\n" | grep -Fx $$(TOKEN1))
126 ifneq ($$(FOUNDx),)
127 RULE := $$(TOKENr)
128 RULE_FOUND := true
129 MATCHED_ITEM := $$(TOKEN1)
130 else
131 RULE_FOUND := false
132 MATCHED_ITEM :=
133 endif
134endef
135
136# Make it easier to call TRY_TO_MATCH_RULE_FROM_LIST_KB
137TRY_TO_MATCH_RULE_FROM_LIST_KB = $(eval $(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER_KB,$1))$(RULE_FOUND)
138
116define ALL_IN_LIST_LOOP 139define ALL_IN_LIST_LOOP
117 OLD_RULE$1 := $$(RULE) 140 OLD_RULE$1 := $$(RULE)
118 $$(eval $$(call $1,$$(ITEM$1))) 141 $$(eval $$(call $1,$$(ITEM$1)))
@@ -138,7 +161,7 @@ define PARSE_RULE
138 $$(eval $$(call PARSE_TEST)) 161 $$(eval $$(call PARSE_TEST))
139 # If the rule starts with the name of a known keyboard, then continue 162 # If the rule starts with the name of a known keyboard, then continue
140 # the parsing from PARSE_KEYBOARD 163 # the parsing from PARSE_KEYBOARD
141 else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(shell $(QMK_BIN) list-keyboards --no-resolve-defaults)),true) 164 else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST_KB,$$(shell $(QMK_BIN) list-keyboards)),true)
142 KEYBOARD_RULE=$$(MATCHED_ITEM) 165 KEYBOARD_RULE=$$(MATCHED_ITEM)
143 $$(eval $$(call PARSE_KEYBOARD,$$(MATCHED_ITEM))) 166 $$(eval $$(call PARSE_KEYBOARD,$$(MATCHED_ITEM)))
144 else 167 else
@@ -170,17 +193,6 @@ define PARSE_KEYBOARD
170 # include the correct makefile to determine the actual name of it 193 # include the correct makefile to determine the actual name of it
171 CURRENT_KB := $1 194 CURRENT_KB := $1
172 195
173 # KEYBOARD_FOLDERS := $$(subst /, , $(CURRENT_KB))
174
175 DEFAULT_FOLDER := $$(CURRENT_KB)
176
177 # We assume that every rules.mk will contain the full default value
178 $$(eval include $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/rules.mk)
179 ifneq ($$(DEFAULT_FOLDER),$$(CURRENT_KB))
180 $$(eval include $(ROOT_DIR)/keyboards/$$(DEFAULT_FOLDER)/rules.mk)
181 endif
182 CURRENT_KB := $$(DEFAULT_FOLDER)
183
184 # 5/4/3/2/1 196 # 5/4/3/2/1
185 KEYBOARD_FOLDER_PATH_1 := $$(CURRENT_KB) 197 KEYBOARD_FOLDER_PATH_1 := $$(CURRENT_KB)
186 KEYBOARD_FOLDER_PATH_2 := $$(patsubst %/,%,$$(dir $$(KEYBOARD_FOLDER_PATH_1))) 198 KEYBOARD_FOLDER_PATH_2 := $$(patsubst %/,%,$$(dir $$(KEYBOARD_FOLDER_PATH_1)))
diff --git a/lib/python/qmk/cli/__init__.py b/lib/python/qmk/cli/__init__.py
index 2d63dfb447..bb47ea26ed 100644
--- a/lib/python/qmk/cli/__init__.py
+++ b/lib/python/qmk/cli/__init__.py
@@ -82,6 +82,7 @@ subcommands = [
82 'qmk.cli.new.keymap', 82 'qmk.cli.new.keymap',
83 'qmk.cli.painter', 83 'qmk.cli.painter',
84 'qmk.cli.pytest', 84 'qmk.cli.pytest',
85 'qmk.cli.resolve_alias',
85 'qmk.cli.test.c', 86 'qmk.cli.test.c',
86 'qmk.cli.userspace.add', 87 'qmk.cli.userspace.add',
87 'qmk.cli.userspace.compile', 88 'qmk.cli.userspace.compile',
diff --git a/lib/python/qmk/cli/resolve_alias.py b/lib/python/qmk/cli/resolve_alias.py
new file mode 100644
index 0000000000..b9ffb46618
--- /dev/null
+++ b/lib/python/qmk/cli/resolve_alias.py
@@ -0,0 +1,16 @@
1from qmk.keyboard import keyboard_folder
2
3from milc import cli
4
5
6@cli.argument('--allow-unknown', arg_only=True, action='store_true', help="Return original if rule is not a valid keyboard.")
7@cli.argument('keyboard', arg_only=True, help='The keyboard\'s name')
8@cli.subcommand('Resolve DEFAULT_FOLDER and any keyboard_aliases for provided rule')
9def resolve_alias(cli):
10 try:
11 print(keyboard_folder(cli.args.keyboard))
12 except ValueError:
13 if cli.args.allow_unknown:
14 print(cli.args.keyboard)
15 else:
16 raise