diff options
Diffstat (limited to 'lib')
-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 | ||