Skip to content

Commit b29e52c

Browse files
committed
Added WriteResourceVersion, available in SConscript files
1 parent 62efde0 commit b29e52c

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

SCons/utils.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,4 +297,44 @@ def MakeReproducibleAction(target, source, env):
297297
def SilentActionEcho(target, source, env):
298298
return None
299299

300+
def WriteResourceVersion(rcfile, v1, v2, v3=0, v4=0, file_version=True, product_version=True, copyright_year=True, verbose=True):
301+
""" Replace version numbers in .rc file. """
302+
import datetime, os, re
303+
304+
regex_list = {}
305+
if file_version:
306+
regex_list[re.compile(r'^\s*FILEVERSION\s+([\d \t,]+)*$')] = f"{v1},{v2},{v3},{v4}"
307+
regex_list[re.compile(r'^\s*VALUE\s+"FileVersion"\s*,\s*"([\d\.]+)"\s*$')] = f"{v1}.{v2}.{v3}.{v4}"
308+
if product_version:
309+
regex_list[re.compile(r'^\s*PRODUCTVERSION\s+([\d \t,]+)*$')] = f"{v1},{v2},{v3},{v4}"
310+
regex_list[re.compile(r'^\s*VALUE\s+"ProductVersion"\s*,\s*"([\d\.]+)"\s*$')] = f"{v1}.{v2}.{v3}.{v4}"
311+
if copyright_year:
312+
regex_list[re.compile(r'^\s*VALUE\s+"LegalCopyright"\s*,\s*"\D+\d+-(\d+).*$')] = f"{datetime.datetime.now().year}"
313+
314+
lines = []
315+
replaced = 0
316+
317+
rcfile = rcfile if os.path.isabs(rcfile) else os.path.join(Dir('.').srcnode().abspath, rcfile)
318+
with open(rcfile) as file:
319+
if verbose: print(f"-- replacing in \"{file.name}\":")
320+
for line in file:
321+
for regex, value in regex_list.items():
322+
if (groups := regex.match(line)) != None:
323+
if (newline := line.replace(groups[1], value)) != line:
324+
if verbose: print(rf'replace "{groups[1]}" with "{value}" ---> ' + newline.replace('\n', '').lstrip())
325+
line = newline
326+
replaced += 1
327+
break
328+
lines.append(line)
329+
330+
if replaced > 0:
331+
with open(file.name, 'w') as file:
332+
for line in lines:
333+
file.write(line)
334+
return True
335+
else:
336+
if verbose: print("file already up-to-date")
337+
return False
338+
300339
Export('GetStdSysEnvVarList AddAvailableLibs AddZLib GenerateTryLinkCode FlagsConfigure GetAvailableLibs GetOptionOrEnv SilentActionEcho IsPEExecutable SetPESecurityFlagsWorker SetPEMinOS MakeReproducibleAction')
340+
Export('WriteResourceVersion')

0 commit comments

Comments
 (0)