Merge upstream changes from Marlin 2.1.2.5
This commit is contained in:
96
buildroot/bin/config.py
Executable file
96
buildroot/bin/config.py
Executable file
@@ -0,0 +1,96 @@
|
||||
'''
|
||||
config.py - Helper functions for config manipulation
|
||||
'''
|
||||
import re
|
||||
|
||||
FILES = ('Marlin/Configuration.h', 'Marlin/Configuration_adv.h')
|
||||
|
||||
def set(file_path, define_name, value):
|
||||
'''
|
||||
Replaces a define in a file with a new value.
|
||||
Returns True if the define was found and replaced, False otherwise.
|
||||
'''
|
||||
# Read the contents of the file
|
||||
with open(file_path, 'r') as f:
|
||||
content = f.readlines()
|
||||
|
||||
modified = False
|
||||
for i in range(len(content)):
|
||||
# Regex to match the desired pattern
|
||||
match = re.match(r'^(\s*)(/*)(\s*)(#define\s+{})\s+(.*)$'.format(re.escape(define_name)), content[i])
|
||||
if match:
|
||||
new_line = f"{match[1]}{match[3]}{match[4]} {value} // {match[5]}\n"
|
||||
content[i] = new_line
|
||||
modified = True
|
||||
|
||||
# Write the modified content back to the file only if changes were made
|
||||
if modified:
|
||||
with open(file_path, 'w') as f:
|
||||
f.writelines(content)
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
def add(file_path, define_name, value=""):
|
||||
'''
|
||||
Insert a define on the first blank line in a file.
|
||||
Returns True if the define was found and replaced, False otherwise.
|
||||
'''
|
||||
with open(file_path, 'r') as f:
|
||||
content = f.readlines()
|
||||
|
||||
# Prepend a space to the value if it's not empty
|
||||
if value != "":
|
||||
value = " " + value
|
||||
|
||||
# Find the first blank line to insert the new define
|
||||
for i in range(len(content)):
|
||||
if content[i].strip() == '':
|
||||
# Insert the define at the first blank line
|
||||
content.insert(i, f"#define {define_name}{value}\n")
|
||||
break
|
||||
else:
|
||||
# If no blank line is found, append to the end
|
||||
content.append(f"#define {define_name}{value}\n")
|
||||
|
||||
with open(file_path, 'w') as f:
|
||||
f.writelines(content)
|
||||
|
||||
def enable(file_path, define_name, enable=True):
|
||||
'''
|
||||
Uncomment or comment the named defines in the given file path.
|
||||
Returns True if the define was found, False otherwise.
|
||||
'''
|
||||
# Read the contents of the file
|
||||
with open(file_path, 'r') as f:
|
||||
content = f.readlines()
|
||||
|
||||
# Prepare the regex
|
||||
regex = re.compile(r'^(\s*)(/*)(\s*)(#define\s+{}\b.*?)( *//.*)?$'.format(re.escape(define_name)))
|
||||
|
||||
# Find the define in the file and uncomment or comment it
|
||||
found = False
|
||||
modified = False
|
||||
for i in range(len(content)):
|
||||
match = regex.match(content[i])
|
||||
if not match: continue
|
||||
found = True
|
||||
if enable:
|
||||
if match[2]:
|
||||
modified = True
|
||||
comment = '' if match[5] is None else ' ' + match[5]
|
||||
content[i] = f"{match[1]}{match[3]}{match[4]}{comment}\n"
|
||||
else:
|
||||
if not match[2]:
|
||||
modified = True
|
||||
comment = '' if match[5] is None else match[5]
|
||||
if comment.startswith(' '): comment = comment[2:]
|
||||
content[i] = f"{match[1]}//{match[3]}{match[4]}{comment}\n"
|
||||
break
|
||||
|
||||
# Write the modified content back to the file only if changes were made
|
||||
if modified:
|
||||
with open(file_path, 'w') as f:
|
||||
f.writelines(content)
|
||||
|
||||
return found
|
Reference in New Issue
Block a user