diff --git a/buildroot/share/git/mfconfig b/buildroot/share/git/mfconfig index b379317d98..8528859446 100755 --- a/buildroot/share/git/mfconfig +++ b/buildroot/share/git/mfconfig @@ -140,8 +140,17 @@ if [[ $ACTION == "init" ]]; then cp -R "$TEMP/config" . 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..." - config-labels.py >/dev/null 2>&1 + addpathlabels git add . >/dev/null && git commit -m "Examples Customizations" >/dev/null @@ -149,7 +158,7 @@ if [[ $ACTION == "init" ]]; then cp -R "$TEMP/config" . # Apply labels again! - config-labels.py >/dev/null 2>&1 + addpathlabels git add . >/dev/null && git commit -m "Examples Extras" >/dev/null diff --git a/buildroot/share/scripts/config-labels.py b/buildroot/share/scripts/config-labels.py deleted file mode 100755 index b571a434b7..0000000000 --- a/buildroot/share/scripts/config-labels.py +++ /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 ---')