You've already forked linux-packaging-mono
Imported Upstream version 5.18.0.246
Former-commit-id: 0c7ce5b1a7851e13f22acfd379b7f9fb304e4833
This commit is contained in:
parent
a7724cd563
commit
279aa8f685
66
external/llvm/utils/llvm-build/llvmbuild/configutil.py
vendored
Normal file
66
external/llvm/utils/llvm-build/llvmbuild/configutil.py
vendored
Normal file
@ -0,0 +1,66 @@
|
||||
"""
|
||||
Defines utilities useful for performing standard "configuration" style tasks.
|
||||
"""
|
||||
|
||||
import re
|
||||
import os
|
||||
|
||||
def configure_file(input_path, output_path, substitutions):
|
||||
"""configure_file(input_path, output_path, substitutions) -> bool
|
||||
|
||||
Given an input and output path, "configure" the file at the given input path
|
||||
by replacing variables in the file with those given in the substitutions
|
||||
list. Returns true if the output file was written.
|
||||
|
||||
The substitutions list should be given as a list of tuples (regex string,
|
||||
replacement), where the regex and replacement will be used as in 're.sub' to
|
||||
execute the variable replacement.
|
||||
|
||||
The output path's parent directory need not exist (it will be created).
|
||||
|
||||
If the output path does exist and the configured data is not different than
|
||||
it's current contents, the output file will not be modified. This is
|
||||
designed to limit the impact of configured files on build dependencies.
|
||||
"""
|
||||
|
||||
# Read in the input data.
|
||||
f = open(input_path, "rb")
|
||||
try:
|
||||
data = f.read()
|
||||
finally:
|
||||
f.close()
|
||||
|
||||
# Perform the substitutions.
|
||||
for regex_string,replacement in substitutions:
|
||||
regex = re.compile(regex_string)
|
||||
data = regex.sub(replacement, data)
|
||||
|
||||
# Ensure the output parent directory exists.
|
||||
output_parent_path = os.path.dirname(os.path.abspath(output_path))
|
||||
if not os.path.exists(output_parent_path):
|
||||
os.makedirs(output_parent_path)
|
||||
|
||||
# If the output path exists, load it and compare to the configured contents.
|
||||
if os.path.exists(output_path):
|
||||
current_data = None
|
||||
try:
|
||||
f = open(output_path, "rb")
|
||||
try:
|
||||
current_data = f.read()
|
||||
except:
|
||||
current_data = None
|
||||
f.close()
|
||||
except:
|
||||
current_data = None
|
||||
|
||||
if current_data is not None and current_data == data:
|
||||
return False
|
||||
|
||||
# Write the output contents.
|
||||
f = open(output_path, "wb")
|
||||
try:
|
||||
f.write(data)
|
||||
finally:
|
||||
f.close()
|
||||
|
||||
return True
|
Reference in New Issue
Block a user