mirror of
https://github.com/MarlinFirmware/Marlin.git
synced 2024-11-27 13:56:24 +00:00
🔨 Updated 'mfconfig init'
This commit is contained in:
parent
408a53bcdd
commit
3ad684b10b
@ -140,8 +140,17 @@ if [[ $ACTION == "init" ]]; then
|
|||||||
cp -R "$TEMP/config" .
|
cp -R "$TEMP/config" .
|
||||||
find config -type f \! -name "Configuration*" -exec rm "{}" \;
|
find config -type f \! -name "Configuration*" -exec rm "{}" \;
|
||||||
|
|
||||||
|
addpathlabels() {
|
||||||
|
find config -name "Conf*.h" -print0 | while read -d $'\0' fn ; do
|
||||||
|
fldr=$(dirname "$fn")
|
||||||
|
blank_line=$(awk '/^\s*$/ {print NR; exit}' "$fn")
|
||||||
|
$SED -i~ "${blank_line}i\\\n#define CONFIG_EXAMPLES_DIR \"$fldr\"\\ " "$fn"
|
||||||
|
rm -f "$fn~"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
echo "- Adding path labels to all configs..."
|
echo "- Adding path labels to all configs..."
|
||||||
config-labels.py >/dev/null 2>&1
|
addpathlabels
|
||||||
|
|
||||||
git add . >/dev/null && git commit -m "Examples Customizations" >/dev/null
|
git add . >/dev/null && git commit -m "Examples Customizations" >/dev/null
|
||||||
|
|
||||||
@ -149,7 +158,7 @@ if [[ $ACTION == "init" ]]; then
|
|||||||
cp -R "$TEMP/config" .
|
cp -R "$TEMP/config" .
|
||||||
|
|
||||||
# Apply labels again!
|
# Apply labels again!
|
||||||
config-labels.py >/dev/null 2>&1
|
addpathlabels
|
||||||
|
|
||||||
git add . >/dev/null && git commit -m "Examples Extras" >/dev/null
|
git add . >/dev/null && git commit -m "Examples Extras" >/dev/null
|
||||||
|
|
||||||
|
@ -1,198 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
#
|
|
||||||
# for python3.5 or higher
|
|
||||||
#-----------------------------------
|
|
||||||
# Within Marlin project MarlinFirmware/Configurations, this program visits all folders
|
|
||||||
# under .../config/examples/*, processing each Configuration.h, Configuration_adv.h,
|
|
||||||
# _Bootscreen.h, and _Statusscreen.h, to insert:
|
|
||||||
# #define CONFIG_EXAMPLES_DIR "examples/<style>/<vendor>/<model>"
|
|
||||||
# ... or similar path leading to this file.
|
|
||||||
#
|
|
||||||
# Warning: The program modifies files in place, so be sure to back them up first if needed.
|
|
||||||
# Can be run multiple times if needed. Only modifies files which don't have
|
|
||||||
# correct #define CONFIG_EXAMPLES_DIR line.
|
|
||||||
#
|
|
||||||
# Invocation:
|
|
||||||
#-------------
|
|
||||||
# 1. Change directory to your MarlinFirmware/Configurations working copy
|
|
||||||
# 2. python3 config-labels.py
|
|
||||||
#
|
|
||||||
#-----------------------------------
|
|
||||||
# 2020-05-10 GMW original
|
|
||||||
# 2020-06-05 SRL style tweaks
|
|
||||||
#-----------------------------------
|
|
||||||
#
|
|
||||||
import sys
|
|
||||||
from pathlib import Path
|
|
||||||
from distutils.dir_util import copy_tree # for copy_tree, because shutil.copytree can't handle existing files, dirs
|
|
||||||
|
|
||||||
# Modify input_examples_dir and output_examples_dir for your installation
|
|
||||||
# No trailing slash
|
|
||||||
# Setting output_examples_dir = input_examples_dir causes the program to insert into the existing files.
|
|
||||||
|
|
||||||
input_examples_dir = r'config/examples'
|
|
||||||
# output_examples_dir = input_examples_dir
|
|
||||||
output_examples_dir = r'config/examples'
|
|
||||||
|
|
||||||
#-------------------------------------
|
|
||||||
|
|
||||||
files_to_mod = ['Configuration.h', 'Configuration_adv.h', '_Bootscreen.h', '_Statusscreen.h']
|
|
||||||
|
|
||||||
macro_name = 'CONFIG_EXAMPLES_DIR'
|
|
||||||
def_macro_name = '#define ' + macro_name
|
|
||||||
|
|
||||||
filenum = 0
|
|
||||||
different_out_dir = not (output_examples_dir == input_examples_dir)
|
|
||||||
|
|
||||||
#----------------------------------------------
|
|
||||||
def process_file(subdir: str, filename: str):
|
|
||||||
#----------------------------------------------
|
|
||||||
global filenum
|
|
||||||
filenum += 1
|
|
||||||
|
|
||||||
print(str(filenum) + ' ' + filename + ': ' + subdir)
|
|
||||||
|
|
||||||
def_line = (def_macro_name + ' "' + subdir.replace('\\', '/') + '"')
|
|
||||||
|
|
||||||
#------------------------
|
|
||||||
# Read file
|
|
||||||
#------------------------
|
|
||||||
lines = []
|
|
||||||
infilepath = Path(input_examples_dir, subdir, filename)
|
|
||||||
try:
|
|
||||||
# UTF-8 because some files contain unicode chars
|
|
||||||
with infilepath.open('rt', encoding="utf-8") as infile:
|
|
||||||
lines = infile.readlines()
|
|
||||||
|
|
||||||
except Exception as e:
|
|
||||||
print('Failed to read file: ' + str(e) )
|
|
||||||
raise Exception
|
|
||||||
|
|
||||||
lines = [line.rstrip('\r\n') for line in lines]
|
|
||||||
|
|
||||||
#------------------------
|
|
||||||
# Process lines
|
|
||||||
#------------------------
|
|
||||||
file_modified = False
|
|
||||||
|
|
||||||
# region state machine
|
|
||||||
# -1 = before pragma once;
|
|
||||||
# 0 = region to place define;
|
|
||||||
# 1 = past region to place define
|
|
||||||
region = -1
|
|
||||||
|
|
||||||
outlines = []
|
|
||||||
for line in lines:
|
|
||||||
outline = line
|
|
||||||
|
|
||||||
if (region == -1) and (def_macro_name in line):
|
|
||||||
outline = None
|
|
||||||
file_modified = True
|
|
||||||
|
|
||||||
elif (region == -1) and ('pragma once' in line):
|
|
||||||
region = 0
|
|
||||||
|
|
||||||
elif (region == 0):
|
|
||||||
if (line.strip() == ''):
|
|
||||||
pass
|
|
||||||
elif (def_macro_name in line):
|
|
||||||
region = 1
|
|
||||||
if line == def_line: # leave it as is
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
outline = def_line
|
|
||||||
file_modified = True
|
|
||||||
else: # some other string
|
|
||||||
outlines.append(def_line)
|
|
||||||
outlines.append('')
|
|
||||||
region = 1
|
|
||||||
file_modified = True
|
|
||||||
|
|
||||||
elif (region == 1):
|
|
||||||
if (def_macro_name in line):
|
|
||||||
outline = None
|
|
||||||
file_modified = True
|
|
||||||
else:
|
|
||||||
pass
|
|
||||||
|
|
||||||
# end if
|
|
||||||
if outline is not None:
|
|
||||||
outlines.append(outline)
|
|
||||||
# end for
|
|
||||||
|
|
||||||
#-------------------------
|
|
||||||
# Output file
|
|
||||||
#-------------------------
|
|
||||||
outdir = Path(output_examples_dir, subdir)
|
|
||||||
outfilepath = outdir / filename
|
|
||||||
|
|
||||||
if file_modified:
|
|
||||||
# Note: no need to create output dirs, as the initial copy_tree
|
|
||||||
# will do that.
|
|
||||||
|
|
||||||
print(' writing ' + str(outfilepath))
|
|
||||||
try:
|
|
||||||
# Preserve unicode chars; Avoid CR-LF on Windows.
|
|
||||||
with outfilepath.open("w", encoding="utf-8", newline='\n') as outfile:
|
|
||||||
outfile.write("\n".join(outlines) + "\n")
|
|
||||||
|
|
||||||
except Exception as e:
|
|
||||||
print('Failed to write file: ' + str(e) )
|
|
||||||
raise Exception
|
|
||||||
else:
|
|
||||||
print(' no change for ' + str(outfilepath))
|
|
||||||
|
|
||||||
#----------
|
|
||||||
def main():
|
|
||||||
#----------
|
|
||||||
global filenum
|
|
||||||
global input_examples_dir
|
|
||||||
global output_examples_dir
|
|
||||||
filenum = 0
|
|
||||||
|
|
||||||
#--------------------------------
|
|
||||||
# Check for requirements
|
|
||||||
#--------------------------------
|
|
||||||
input_examples_dir = input_examples_dir.strip()
|
|
||||||
input_examples_dir = input_examples_dir.rstrip('\\/')
|
|
||||||
output_examples_dir = output_examples_dir.strip()
|
|
||||||
output_examples_dir = output_examples_dir.rstrip('\\/')
|
|
||||||
|
|
||||||
for dir in (input_examples_dir, output_examples_dir):
|
|
||||||
if not Path(dir).exists():
|
|
||||||
print('Directory not found: ' + dir)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
#--------------------------------
|
|
||||||
# Copy tree if necessary.
|
|
||||||
#--------------------------------
|
|
||||||
# This includes files that are not otherwise included in the
|
|
||||||
# insertion of the define statement.
|
|
||||||
#
|
|
||||||
if different_out_dir:
|
|
||||||
print('Copying files to new directory: ' + output_examples_dir)
|
|
||||||
try:
|
|
||||||
copy_tree(input_examples_dir, output_examples_dir)
|
|
||||||
except Exception as e:
|
|
||||||
print('Failed to copy directory: ' + str(e) )
|
|
||||||
raise Exception
|
|
||||||
|
|
||||||
#-----------------------------
|
|
||||||
# Find and process files
|
|
||||||
#-----------------------------
|
|
||||||
len_input_examples_dir = 1 + len(input_examples_dir)
|
|
||||||
|
|
||||||
for filename in files_to_mod:
|
|
||||||
input_path = Path(input_examples_dir)
|
|
||||||
filepathlist = input_path.rglob(filename)
|
|
||||||
|
|
||||||
for filepath in filepathlist:
|
|
||||||
fulldirpath = str(filepath.parent)
|
|
||||||
subdir = fulldirpath[len_input_examples_dir:]
|
|
||||||
|
|
||||||
process_file(subdir, filename)
|
|
||||||
|
|
||||||
#==============
|
|
||||||
print('--- Starting config-labels ---')
|
|
||||||
main()
|
|
||||||
print('--- Done ---')
|
|
Loading…
Reference in New Issue
Block a user