@@ -297,4 +297,44 @@ def MakeReproducibleAction(target, source, env):
297297def 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+
300339Export ('GetStdSysEnvVarList AddAvailableLibs AddZLib GenerateTryLinkCode FlagsConfigure GetAvailableLibs GetOptionOrEnv SilentActionEcho IsPEExecutable SetPESecurityFlagsWorker SetPEMinOS MakeReproducibleAction' )
340+ Export ('WriteResourceVersion' )
0 commit comments