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 | |
| 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>
| -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 | ||
