diff options
| -rw-r--r-- | Makefile | 36 | ||||
| -rw-r--r-- | lib/python/qmk/cli/__init__.py | 1 | ||||
| -rw-r--r-- | lib/python/qmk/cli/resolve_alias.py | 16 |
3 files changed, 41 insertions, 12 deletions
| @@ -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 |
| 114 | TRY_TO_MATCH_RULE_FROM_LIST = $(eval $(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER,$1))$(RULE_FOUND) | 114 | TRY_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 | ||
| 118 | define 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 | ||
| 134 | endef | ||
| 135 | |||
| 136 | # Make it easier to call TRY_TO_MATCH_RULE_FROM_LIST_KB | ||
| 137 | TRY_TO_MATCH_RULE_FROM_LIST_KB = $(eval $(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER_KB,$1))$(RULE_FOUND) | ||
| 138 | |||
| 116 | define ALL_IN_LIST_LOOP | 139 | define 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 @@ | |||
| 1 | from qmk.keyboard import keyboard_folder | ||
| 2 | |||
| 3 | from 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') | ||
| 9 | def 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 | ||
