|
1 | 1 | """Used by the make system to generate a rules.mk
|
2 | 2 | """
|
3 | 3 | from pathlib import Path
|
4 |
| - |
5 | 4 | from dotty_dict import dotty
|
| 5 | + |
| 6 | +from argcomplete.completers import FilesCompleter |
6 | 7 | from milc import cli
|
7 | 8 |
|
8 |
| -from qmk.info import info_json, keymap_json_config |
| 9 | +from qmk.info import info_json |
9 | 10 | from qmk.json_schema import json_load
|
10 | 11 | from qmk.keyboard import keyboard_completer, keyboard_folder
|
11 |
| -from qmk.commands import dump_lines |
12 |
| -from qmk.path import normpath |
| 12 | +from qmk.commands import dump_lines, parse_configurator_json |
| 13 | +from qmk.path import normpath, FileType |
13 | 14 | from qmk.constants import GPL2_HEADER_SH_LIKE, GENERATED_HEADER_SH_LIKE
|
14 | 15 |
|
15 | 16 |
|
@@ -39,20 +40,25 @@ def process_mapping_rule(kb_info_json, rules_key, info_dict):
|
39 | 40 | return f'{rules_key} ?= {rules_value}'
|
40 | 41 |
|
41 | 42 |
|
| 43 | +@cli.argument('filename', nargs='?', arg_only=True, type=FileType('r'), completer=FilesCompleter('.json'), help='A configurator export JSON to be compiled and flashed or a pre-compiled binary firmware file (bin/hex) to be flashed.') |
42 | 44 | @cli.argument('-o', '--output', arg_only=True, type=normpath, help='File to write to')
|
43 | 45 | @cli.argument('-q', '--quiet', arg_only=True, action='store_true', help="Quiet mode, only output error messages")
|
44 | 46 | @cli.argument('-e', '--escape', arg_only=True, action='store_true', help="Escape spaces in quiet mode")
|
45 |
| -@cli.argument('-kb', '--keyboard', arg_only=True, type=keyboard_folder, completer=keyboard_completer, required=True, help='Keyboard to generate rules.mk for.') |
46 |
| -@cli.argument('-km', '--keymap', arg_only=True, help='Keymap to generate rules.mk for.') |
| 47 | +@cli.argument('-kb', '--keyboard', arg_only=True, type=keyboard_folder, completer=keyboard_completer, help='Keyboard to generate rules.mk for.') |
47 | 48 | @cli.subcommand('Used by the make system to generate rules.mk from info.json', hidden=True)
|
48 | 49 | def generate_rules_mk(cli):
|
49 | 50 | """Generates a rules.mk file from info.json.
|
50 | 51 | """
|
51 | 52 | # Determine our keyboard/keymap
|
52 |
| - if cli.args.keymap: |
53 |
| - kb_info_json = dotty(keymap_json_config(cli.args.keyboard, cli.args.keymap)) |
54 |
| - else: |
| 53 | + if cli.args.filename: |
| 54 | + user_keymap = parse_configurator_json(cli.args.filename) |
| 55 | + kb_info_json = user_keymap.get('config', {}) |
| 56 | + elif cli.args.keyboard: |
55 | 57 | kb_info_json = dotty(info_json(cli.args.keyboard))
|
| 58 | + else: |
| 59 | + cli.log.error('You must supply a configurator export or `--keyboard`.') |
| 60 | + cli.subcommands['generate-rules-mk'].print_help() |
| 61 | + return False |
56 | 62 |
|
57 | 63 | info_rules_map = json_load(Path('data/mappings/info_rules.json'))
|
58 | 64 | rules_mk_lines = [GPL2_HEADER_SH_LIKE, GENERATED_HEADER_SH_LIKE]
|
|
0 commit comments