diff options
author | Erovia <Erovia@users.noreply.github.com> | 2021-05-27 17:42:38 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-27 17:42:38 +0100 |
commit | 84883d340045c50ce6c200c9087461c1db853898 (patch) | |
tree | 7cdcc263baa2fc387f0f622c431523a9ee6aa7ec /lib/python | |
parent | 147cf8afbb3f7f9b09623c50e42fd3dec76d2147 (diff) | |
download | qmk_firmware-84883d340045c50ce6c200c9087461c1db853898.tar.gz qmk_firmware-84883d340045c50ce6c200c9087461c1db853898.zip |
CLI/c2json: Print 'cpp' error when executed in verbose mode (#12869)
Co-authored-by: Ryan <fauxpark@gmail.com>
Diffstat (limited to 'lib/python')
-rw-r--r-- | lib/python/qmk/cli/c2json.py | 9 | ||||
-rw-r--r-- | lib/python/qmk/errors.py | 7 | ||||
-rw-r--r-- | lib/python/qmk/keymap.py | 6 |
3 files changed, 20 insertions, 2 deletions
diff --git a/lib/python/qmk/cli/c2json.py b/lib/python/qmk/cli/c2json.py index e66b0a1b5..43110a938 100644 --- a/lib/python/qmk/cli/c2json.py +++ b/lib/python/qmk/cli/c2json.py | |||
@@ -9,6 +9,7 @@ import qmk.keymap | |||
9 | import qmk.path | 9 | import qmk.path |
10 | from qmk.json_encoders import InfoJSONEncoder | 10 | from qmk.json_encoders import InfoJSONEncoder |
11 | from qmk.keyboard import keyboard_completer, keyboard_folder | 11 | from qmk.keyboard import keyboard_completer, keyboard_folder |
12 | from qmk.errors import CppError | ||
12 | 13 | ||
13 | 14 | ||
14 | @cli.argument('--no-cpp', arg_only=True, action='store_false', help='Do not use \'cpp\' on keymap.c') | 15 | @cli.argument('--no-cpp', arg_only=True, action='store_false', help='Do not use \'cpp\' on keymap.c') |
@@ -37,7 +38,13 @@ def c2json(cli): | |||
37 | cli.args.output = None | 38 | cli.args.output = None |
38 | 39 | ||
39 | # Parse the keymap.c | 40 | # Parse the keymap.c |
40 | keymap_json = qmk.keymap.c2json(cli.args.keyboard, cli.args.keymap, cli.args.filename, use_cpp=cli.args.no_cpp) | 41 | try: |
42 | keymap_json = qmk.keymap.c2json(cli.args.keyboard, cli.args.keymap, cli.args.filename, use_cpp=cli.args.no_cpp) | ||
43 | except CppError as e: | ||
44 | if cli.config.general.verbose: | ||
45 | cli.log.debug('The C pre-processor ran into a fatal error: %s', e) | ||
46 | cli.log.error('Something went wrong. Try to use --no-cpp.\nUse the CLI in verbose mode to find out more.') | ||
47 | return False | ||
41 | 48 | ||
42 | # Generate the keymap.json | 49 | # Generate the keymap.json |
43 | try: | 50 | try: |
diff --git a/lib/python/qmk/errors.py b/lib/python/qmk/errors.py index 4a8a91556..131768782 100644 --- a/lib/python/qmk/errors.py +++ b/lib/python/qmk/errors.py | |||
@@ -3,3 +3,10 @@ class NoSuchKeyboardError(Exception): | |||
3 | """ | 3 | """ |
4 | def __init__(self, message): | 4 | def __init__(self, message): |
5 | self.message = message | 5 | self.message = message |
6 | |||
7 | |||
8 | class CppError(Exception): | ||
9 | """Raised when 'cpp' cannot process a file. | ||
10 | """ | ||
11 | def __init__(self, message): | ||
12 | self.message = message | ||
diff --git a/lib/python/qmk/keymap.py b/lib/python/qmk/keymap.py index ac7951082..2d5921e7a 100644 --- a/lib/python/qmk/keymap.py +++ b/lib/python/qmk/keymap.py | |||
@@ -13,6 +13,7 @@ from pygments import lex | |||
13 | 13 | ||
14 | import qmk.path | 14 | import qmk.path |
15 | from qmk.keyboard import find_keyboard_from_dir, rules_mk | 15 | from qmk.keyboard import find_keyboard_from_dir, rules_mk |
16 | from qmk.errors import CppError | ||
16 | 17 | ||
17 | # The `keymap.c` template to use when a keyboard doesn't have its own | 18 | # The `keymap.c` template to use when a keyboard doesn't have its own |
18 | DEFAULT_KEYMAP_C = """#include QMK_KEYBOARD_H | 19 | DEFAULT_KEYMAP_C = """#include QMK_KEYBOARD_H |
@@ -372,7 +373,10 @@ def _c_preprocess(path, stdin=DEVNULL): | |||
372 | """ | 373 | """ |
373 | cmd = ['cpp', str(path)] if path else ['cpp'] | 374 | cmd = ['cpp', str(path)] if path else ['cpp'] |
374 | pre_processed_keymap = cli.run(cmd, stdin=stdin) | 375 | pre_processed_keymap = cli.run(cmd, stdin=stdin) |
375 | 376 | if 'fatal error' in pre_processed_keymap.stderr: | |
377 | for line in pre_processed_keymap.stderr.split('\n'): | ||
378 | if 'fatal error' in line: | ||
379 | raise (CppError(line)) | ||
376 | return pre_processed_keymap.stdout | 380 | return pre_processed_keymap.stdout |
377 | 381 | ||
378 | 382 | ||