Browse Source

Merge remote-tracking branch 'origin/develop' into xap

zvecr 4 years ago
parent
commit
2e8db66201

+ 4 - 14
lib/python/qmk/cli/generate/config_h.py

@@ -9,7 +9,9 @@ from qmk.info import info_json
 from qmk.json_schema import json_load, validate
 from qmk.keyboard import keyboard_completer, keyboard_folder
 from qmk.keymap import locate_keymap
+from qmk.commands import dump_lines
 from qmk.path import normpath
+from qmk.constants import GPL2_HEADER_C_LIKE, GENERATED_HEADER_C_LIKE
 
 
 def direct_pins(direct_pins, postfix):
@@ -186,7 +188,7 @@ def generate_config_h(cli):
         kb_info_json = dotty(info_json(cli.args.keyboard))
 
     # Build the info_config.h file.
-    config_h_lines = ['/* This file was generated by `qmk generate-config-h`. Do not edit or copy.', ' */', '', '#pragma once']
+    config_h_lines = [GPL2_HEADER_C_LIKE, GENERATED_HEADER_C_LIKE, '#pragma once']
 
     generate_config_items(kb_info_json, config_h_lines)
 
@@ -199,16 +201,4 @@ def generate_config_h(cli):
         generate_split_config(kb_info_json, config_h_lines)
 
     # Show the results
-    config_h = '\n'.join(config_h_lines)
-
-    if cli.args.output:
-        cli.args.output.parent.mkdir(parents=True, exist_ok=True)
-        if cli.args.output.exists():
-            cli.args.output.replace(cli.args.output.parent / (cli.args.output.name + '.bak'))
-        cli.args.output.write_text(config_h, encoding='utf-8')
-
-        if not cli.args.quiet:
-            cli.log.info('Wrote info_config.h to %s.', cli.args.output)
-
-    else:
-        print(config_h)
+    dump_lines(cli.args.output, config_h_lines, cli.args.quiet)

+ 4 - 14
lib/python/qmk/cli/generate/dfu_header.py

@@ -7,6 +7,8 @@ from qmk.decorators import automagic_keyboard
 from qmk.info import info_json
 from qmk.path import is_keyboard, normpath
 from qmk.keyboard import keyboard_completer
+from qmk.commands import dump_lines
+from qmk.constants import GPL2_HEADER_C_LIKE, GENERATED_HEADER_C_LIKE
 
 
 @cli.argument('-o', '--output', arg_only=True, type=normpath, help='File to write to')
@@ -30,7 +32,7 @@ def generate_dfu_header(cli):
     # Build the Keyboard.h file.
     kb_info_json = dotty(info_json(cli.config.generate_dfu_header.keyboard))
 
-    keyboard_h_lines = ['/* This file was generated by `qmk generate-dfu-header`. Do not edit or copy.', ' */', '', '#pragma once']
+    keyboard_h_lines = [GPL2_HEADER_C_LIKE, GENERATED_HEADER_C_LIKE, '#pragma once']
     keyboard_h_lines.append(f'#define MANUFACTURER {kb_info_json["manufacturer"]}')
     keyboard_h_lines.append(f'#define PRODUCT {kb_info_json["keyboard_name"]} Bootloader')
 
@@ -45,16 +47,4 @@ def generate_dfu_header(cli):
         keyboard_h_lines.append(f'#define QMK_SPEAKER {kb_info_json["qmk_lufa_bootloader.speaker"]}')
 
     # Show the results
-    keyboard_h = '\n'.join(keyboard_h_lines)
-
-    if cli.args.output:
-        cli.args.output.parent.mkdir(parents=True, exist_ok=True)
-        if cli.args.output.exists():
-            cli.args.output.replace(cli.args.output.parent / (cli.args.output.name + '.bak'))
-        cli.args.output.write_text(keyboard_h)
-
-        if not cli.args.quiet:
-            cli.log.info('Wrote Keyboard.h to %s.', cli.args.output)
-
-    else:
-        print(keyboard_h)
+    dump_lines(cli.args.output, keyboard_h_lines, cli.args.quiet)

+ 4 - 14
lib/python/qmk/cli/generate/keyboard_h.py

@@ -3,8 +3,10 @@
 from milc import cli
 
 from qmk.info import info_json
+from qmk.commands import dump_lines
 from qmk.keyboard import keyboard_completer, keyboard_folder
 from qmk.path import normpath
+from qmk.constants import GPL2_HEADER_C_LIKE, GENERATED_HEADER_C_LIKE
 
 
 def would_populate_layout_h(keyboard):
@@ -36,22 +38,10 @@ def generate_keyboard_h(cli):
     has_layout_h = would_populate_layout_h(cli.args.keyboard)
 
     # Build the layouts.h file.
-    keyboard_h_lines = ['/* This file was generated by `qmk generate-keyboard-h`. Do not edit or copy.', ' */', '', '#pragma once', '#include "quantum.h"']
+    keyboard_h_lines = [GPL2_HEADER_C_LIKE, GENERATED_HEADER_C_LIKE, '#pragma once', '#include "quantum.h"']
 
     if not has_layout_h:
         keyboard_h_lines.append('#pragma error("<keyboard>.h is only optional for data driven keyboards - kb.h == bad times")')
 
     # Show the results
-    keyboard_h = '\n'.join(keyboard_h_lines) + '\n'
-
-    if cli.args.output:
-        cli.args.output.parent.mkdir(parents=True, exist_ok=True)
-        if cli.args.output.exists():
-            cli.args.output.replace(cli.args.output.parent / (cli.args.output.name + '.bak'))
-        cli.args.output.write_text(keyboard_h)
-
-        if not cli.args.quiet:
-            cli.log.info('Wrote keyboard_h to %s.', cli.args.output)
-
-    else:
-        print(keyboard_h)
+    dump_lines(cli.args.output, keyboard_h_lines, cli.args.quiet)

+ 4 - 15
lib/python/qmk/cli/generate/layouts.py

@@ -2,11 +2,12 @@
 """
 from milc import cli
 
-from qmk.constants import COL_LETTERS, ROW_LETTERS
+from qmk.constants import COL_LETTERS, ROW_LETTERS, GPL2_HEADER_C_LIKE, GENERATED_HEADER_C_LIKE
 from qmk.decorators import automagic_keyboard, automagic_keymap
 from qmk.info import info_json
 from qmk.keyboard import keyboard_completer, keyboard_folder
 from qmk.path import is_keyboard, normpath
+from qmk.commands import dump_lines
 
 usb_properties = {
     'vid': 'VENDOR_ID',
@@ -38,7 +39,7 @@ def generate_layouts(cli):
     kb_info_json = info_json(cli.config.generate_layouts.keyboard)
 
     # Build the layouts.h file.
-    layouts_h_lines = ['/* This file was generated by `qmk generate-layouts`. Do not edit or copy.', ' */', '', '#pragma once']
+    layouts_h_lines = [GPL2_HEADER_C_LIKE, GENERATED_HEADER_C_LIKE, '#pragma once']
 
     if 'matrix_size' not in kb_info_json:
         cli.log.error('%s: Invalid matrix config.', cli.config.generate_layouts.keyboard)
@@ -86,16 +87,4 @@ def generate_layouts(cli):
         layouts_h_lines.append('#endif')
 
     # Show the results
-    layouts_h = '\n'.join(layouts_h_lines) + '\n'
-
-    if cli.args.output:
-        cli.args.output.parent.mkdir(parents=True, exist_ok=True)
-        if cli.args.output.exists():
-            cli.args.output.replace(cli.args.output.parent / (cli.args.output.name + '.bak'))
-        cli.args.output.write_text(layouts_h)
-
-        if not cli.args.quiet:
-            cli.log.info('Wrote info_config.h to %s.', cli.args.output)
-
-    else:
-        print(layouts_h)
+    dump_lines(cli.args.output, layouts_h_lines, cli.args.quiet)

+ 4 - 10
lib/python/qmk/cli/generate/rules_mk.py

@@ -9,7 +9,9 @@ from qmk.info import info_json
 from qmk.json_schema import json_load, validate
 from qmk.keyboard import keyboard_completer, keyboard_folder
 from qmk.keymap import locate_keymap
+from qmk.commands import dump_lines
 from qmk.path import normpath
+from qmk.constants import GPL2_HEADER_SH_LIKE, GENERATED_HEADER_SH_LIKE
 
 
 def process_mapping_rule(kb_info_json, rules_key, info_dict):
@@ -57,7 +59,7 @@ def generate_rules_mk(cli):
         kb_info_json = dotty(info_json(cli.args.keyboard))
 
     info_rules_map = json_load(Path('data/mappings/info_rules.json'))
-    rules_mk_lines = ['# This file was generated by `qmk generate-rules-mk`. Do not edit or copy.', '']
+    rules_mk_lines = [GPL2_HEADER_SH_LIKE, GENERATED_HEADER_SH_LIKE]
 
     # Iterate through the info_rules map to generate basic rules
     for rules_key, info_dict in info_rules_map.items():
@@ -85,14 +87,9 @@ def generate_rules_mk(cli):
             rules_mk_lines.append('CUSTOM_MATRIX ?= yes')
 
     # Show the results
-    rules_mk = '\n'.join(rules_mk_lines) + '\n'
+    dump_lines(cli.args.output, rules_mk_lines)
 
     if cli.args.output:
-        cli.args.output.parent.mkdir(parents=True, exist_ok=True)
-        if cli.args.output.exists():
-            cli.args.output.replace(cli.args.output.parent / (cli.args.output.name + '.bak'))
-        cli.args.output.write_text(rules_mk)
-
         if cli.args.quiet:
             if cli.args.escape:
                 print(cli.args.output.as_posix().replace(' ', '\\ '))
@@ -100,6 +97,3 @@ def generate_rules_mk(cli):
                 print(cli.args.output)
         else:
             cli.log.info('Wrote rules.mk to %s.', cli.args.output)
-
-    else:
-        print(rules_mk)

+ 31 - 11
lib/python/qmk/cli/generate/version_h.py

@@ -1,9 +1,15 @@
 """Used by the make system to generate version.h for use in code.
 """
+from time import strftime
+
 from milc import cli
 
-from qmk.commands import create_version_h
 from qmk.path import normpath
+from qmk.commands import dump_lines
+from qmk.commands import get_git_version
+from qmk.constants import GPL2_HEADER_C_LIKE, GENERATED_HEADER_C_LIKE
+
+TIME_FMT = '%Y-%m-%d-%H:%M:%S'
 
 
 @cli.argument('-o', '--output', arg_only=True, type=normpath, help='File to write to')
@@ -17,15 +23,29 @@ def generate_version_h(cli):
     if cli.args.skip_all:
         cli.args.skip_git = True
 
-    version_h = create_version_h(cli.args.skip_git, cli.args.skip_all)
-
-    if cli.args.output:
-        cli.args.output.parent.mkdir(parents=True, exist_ok=True)
-        if cli.args.output.exists():
-            cli.args.output.replace(cli.args.output.parent / (cli.args.output.name + '.bak'))
-        cli.args.output.write_text(version_h)
+    if cli.args.skip_all:
+        current_time = "1970-01-01-00:00:00"
+    else:
+        current_time = strftime(TIME_FMT)
 
-        if not cli.args.quiet:
-            cli.log.info('Wrote version.h to %s.', cli.args.output)
+    if cli.args.skip_git:
+        git_version = "NA"
+        chibios_version = "NA"
+        chibios_contrib_version = "NA"
     else:
-        print(version_h)
+        git_version = get_git_version(current_time)
+        chibios_version = get_git_version(current_time, "chibios", "os")
+        chibios_contrib_version = get_git_version(current_time, "chibios-contrib", "os")
+
+    # Build the version.h file.
+    version_h_lines = [GPL2_HEADER_C_LIKE, GENERATED_HEADER_C_LIKE, '#pragma once']
+
+    version_h_lines.append(f"""
+#define QMK_VERSION "{git_version}"
+#define QMK_BUILDDATE "{current_time}"
+#define CHIBIOS_VERSION "{chibios_version}"
+#define CHIBIOS_CONTRIB_VERSION "{chibios_contrib_version}"
+""")
+
+    # Show the results
+    dump_lines(cli.args.output, version_h_lines, cli.args.quiet)

+ 12 - 48
lib/python/qmk/commands.py

@@ -5,8 +5,6 @@ import sys
 import shutil
 from pathlib import Path
 from subprocess import DEVNULL
-from time import strftime
-from itertools import islice
 
 from milc import cli
 import jsonschema
@@ -15,8 +13,6 @@ import qmk.keymap
 from qmk.constants import QMK_FIRMWARE, KEYBOARD_OUTPUT_PREFIX
 from qmk.json_schema import json_load, validate
 
-time_fmt = '%Y-%m-%d-%H:%M:%S'
-
 
 def _find_make():
     """Returns the correct make command for this environment.
@@ -140,37 +136,6 @@ def get_make_parallel_args(parallel=1):
     return parallel_args
 
 
-def create_version_h(skip_git=False, skip_all=False):
-    """Generate version.h contents
-    """
-    if skip_all:
-        current_time = "1970-01-01-00:00:00"
-    else:
-        current_time = None
-
-    if skip_git:
-        git_version = "NA"
-        chibios_version = "NA"
-        chibios_contrib_version = "NA"
-    else:
-        git_version = get_git_version(current_time)
-        chibios_version = get_git_version(current_time, "chibios", "os")
-        chibios_contrib_version = get_git_version(current_time, "chibios-contrib", "os")
-
-    version_h_lines = f"""/* This file was automatically generated. Do not edit or copy.
- */
-
-#pragma once
-
-#define QMK_VERSION "{git_version}"
-#define QMK_BUILDDATE "{current_time}"
-#define CHIBIOS_VERSION "{chibios_version}"
-#define CHIBIOS_CONTRIB_VERSION "{chibios_contrib_version}"
-"""
-
-    return version_h_lines
-
-
 def compile_configurator_json(user_keymap, bootloader=None, parallel=1, **env_vars):
     """Convert a configurator export JSON file into a C file and then compile it.
 
@@ -205,9 +170,6 @@ def compile_configurator_json(user_keymap, bootloader=None, parallel=1, **env_va
     keymap_dir.mkdir(exist_ok=True, parents=True)
     keymap_c.write_text(c_text)
 
-    version_h = Path('quantum/version.h')
-    version_h.write_text(create_version_h())
-
     # Return a command that can be run to make the keymap and flash if given
     verbose = 'true' if cli.config.general.verbose else 'false'
     color = 'true' if cli.config.general.color else 'false'
@@ -370,16 +332,18 @@ def get_chunks(it, size):
     return iter(lambda: tuple(islice(it, size)), ())
 
 
-def dump_lines(output_file, lines):
+def dump_lines(output_file, lines, quiet=True):
     """Handle dumping to stdout or file
     Creates parent folders if required
     """
-    generated = '\n'.join(lines)
-    if output_file:
-        if output_file.name == '-':
-            print(generated)
-        else:
-            output_file.parent.mkdir(parents=True, exist_ok=True)
-            if output_file.exists():
-                output_file.replace(output_file.parent / (output_file.name + '.bak'))
-            output_file.write_text(generated)
+    generated = '\n'.join(lines) + '\n'
+    if output_file and output_file.name != '-':
+        output_file.parent.mkdir(parents=True, exist_ok=True)
+        if output_file.exists():
+            output_file.replace(output_file.parent / (output_file.name + '.bak'))
+        output_file.write_text(generated, encoding='utf-8')
+
+        if not quiet:
+            cli.log.info(f'Wrote {output_file.name} to {output_file}.')
+    else:
+        print(generated)

+ 4 - 31
lib/python/qmk/constants.py

@@ -78,40 +78,14 @@ BUILD_DIR = environ.get('BUILD_DIR', '.build')
 KEYBOARD_OUTPUT_PREFIX = f'{BUILD_DIR}/obj_'
 
 # Headers for generated files
-this_year = date.today().year
 GPL2_HEADER_C_LIKE = f'''\
-/* Copyright {this_year} QMK
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
+// Copyright {date.today().year} QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
 '''
 
 GPL2_HEADER_SH_LIKE = f'''\
-# Copyright {this_year} QMK
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+# Copyright {date.today().year} QMK
+# SPDX-License-Identifier: GPL-2.0-or-later
 '''
 
 GENERATED_HEADER_C_LIKE = '''\
@@ -124,7 +98,6 @@ GENERATED_HEADER_C_LIKE = '''\
       888     888  888 888 "Y8888b.      888    888 888 88888888      888 "Y8888b.
       888     888  888 888      X88      888    888 888 Y8b.          888      X88
       888     888  888 888  88888P'      888    888 888  "Y8888       888  88888P'
-
                                                         888                 888
                                                         888                 888
                                                         888                 888