[CLI] Add common util for dumping generated content (#16674)
This commit is contained in:
		@@ -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):
 | 
			
		||||
@@ -181,7 +183,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)
 | 
			
		||||
 | 
			
		||||
@@ -194,16 +196,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)
 | 
			
		||||
 | 
			
		||||
        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)
 | 
			
		||||
 
 | 
			
		||||
@@ -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)
 | 
			
		||||
 
 | 
			
		||||
@@ -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)
 | 
			
		||||
 
 | 
			
		||||
@@ -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)
 | 
			
		||||
 
 | 
			
		||||
@@ -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):
 | 
			
		||||
@@ -55,7 +57,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():
 | 
			
		||||
@@ -83,14 +85,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(' ', '\\ '))
 | 
			
		||||
@@ -98,6 +95,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)
 | 
			
		||||
 
 | 
			
		||||
@@ -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 not cli.args.quiet:
 | 
			
		||||
            cli.log.info('Wrote version.h to %s.', cli.args.output)
 | 
			
		||||
    if cli.args.skip_all:
 | 
			
		||||
        current_time = "1970-01-01-00:00:00"
 | 
			
		||||
    else:
 | 
			
		||||
        print(version_h)
 | 
			
		||||
        current_time = strftime(TIME_FMT)
 | 
			
		||||
 | 
			
		||||
    if cli.args.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")
 | 
			
		||||
 | 
			
		||||
    # 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)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user