Browse Source

Parse version better in `qmk doctor` GCC version checks (#9324)

Ryan 5 years ago
parent
commit
db80209e69
2 changed files with 17 additions and 6 deletions
  1. 13 2
      lib/python/qmk/cli/doctor.py
  2. 4 4
      lib/python/qmk/tests/test_cli_commands.py

+ 13 - 2
lib/python/qmk/cli/doctor.py

@@ -3,6 +3,7 @@
 Check out the user's QMK environment and make sure it's ready to compile.
 Check out the user's QMK environment and make sure it's ready to compile.
 """
 """
 import platform
 import platform
+import re
 import shutil
 import shutil
 import subprocess
 import subprocess
 from pathlib import Path
 from pathlib import Path
@@ -50,6 +51,16 @@ def _deprecated_udev_rule(vid, pid=None):
         return 'SUBSYSTEMS=="usb", ATTRS{idVendor}=="%s", MODE:="0666"' % vid
         return 'SUBSYSTEMS=="usb", ATTRS{idVendor}=="%s", MODE:="0666"' % vid
 
 
 
 
+def parse_gcc_version(version):
+    m = re.match(r"(\d+)(?:\.(\d+))?(?:\.(\d+))?", version)
+
+    return {
+        'major': int(m.group(1)),
+        'minor': int(m.group(2)) if m.group(2) else 0,
+        'patch': int(m.group(3)) if m.group(3) else 0
+    }
+
+
 def check_arm_gcc_version():
 def check_arm_gcc_version():
     """Returns True if the arm-none-eabi-gcc version is not known to cause problems.
     """Returns True if the arm-none-eabi-gcc version is not known to cause problems.
     """
     """
@@ -66,8 +77,8 @@ def check_avr_gcc_version():
     if 'output' in ESSENTIAL_BINARIES['avr-gcc']:
     if 'output' in ESSENTIAL_BINARIES['avr-gcc']:
         version_number = ESSENTIAL_BINARIES['avr-gcc']['output'].strip()
         version_number = ESSENTIAL_BINARIES['avr-gcc']['output'].strip()
 
 
-        major, minor, rest = version_number.split('.', 2)
-        if int(major) > 8:
+        parsed_version = parse_gcc_version(version_number)
+        if parsed_version['major'] > 8:
             cli.log.error('We do not recommend avr-gcc newer than 8. Downgrading to 8.x is recommended.')
             cli.log.error('We do not recommend avr-gcc newer than 8. Downgrading to 8.x is recommended.')
             return False
             return False
 
 

+ 4 - 4
lib/python/qmk/tests/test_cli_commands.py

@@ -115,7 +115,7 @@ def test_list_keymaps_no_keyboard_found():
 def test_json2c():
 def test_json2c():
     result = check_subcommand('json2c', 'keyboards/handwired/onekey/keymaps/default_json/keymap.json')
     result = check_subcommand('json2c', 'keyboards/handwired/onekey/keymaps/default_json/keymap.json')
     check_returncode(result, 0)
     check_returncode(result, 0)
-    assert result.stdout == '#include QMK_KEYBOARD_H\nconst uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {\t[0] = LAYOUT(KC_A)};\n\n'
+    assert result.stdout == '#include QMK_KEYBOARD_H\nconst uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {\t[0] = LAYOUT_ortho_1x1(KC_A)};\n\n'
 
 
 
 
 def test_info():
 def test_info():
@@ -132,7 +132,7 @@ def test_info_keyboard_render():
     check_returncode(result)
     check_returncode(result)
     assert 'Keyboard Name: handwired/onekey/pytest' in result.stdout
     assert 'Keyboard Name: handwired/onekey/pytest' in result.stdout
     assert 'Processor: STM32F303' in result.stdout
     assert 'Processor: STM32F303' in result.stdout
-    assert 'Layout:' in result.stdout
+    assert 'Layouts:' in result.stdout
     assert 'k0' in result.stdout
     assert 'k0' in result.stdout
 
 
 
 
@@ -149,6 +149,6 @@ def test_info_matrix_render():
     check_returncode(result)
     check_returncode(result)
     assert 'Keyboard Name: handwired/onekey/pytest' in result.stdout
     assert 'Keyboard Name: handwired/onekey/pytest' in result.stdout
     assert 'Processor: STM32F303' in result.stdout
     assert 'Processor: STM32F303' in result.stdout
-    assert 'LAYOUT' in result.stdout
+    assert 'LAYOUT_ortho_1x1' in result.stdout
     assert '│0A│' in result.stdout
     assert '│0A│' in result.stdout
-    assert 'Matrix for "LAYOUT"' in result.stdout
+    assert 'Matrix for "LAYOUT_ortho_1x1"' in result.stdout