var MJH = {}; | |
MJH.SetVersion = function (objFile, objVersion, intReadOnly) { | |
var out = WScript.StdOut; | |
var objText = objFile.OpenAsTextStream(1); //read-only for now | |
var strLines = []; //array of lines of text | |
var idx = 0; | |
var major, minor, revision, build; | |
var bFileVersion = false; | |
var bProjectVersion = false; | |
var bFileInfo = false; | |
var bProductInfo = false; | |
while (!objText.atEndOfStream) { | |
strLine = objText.readLine(); | |
//out.WriteLine(strLine); | |
if (strLine.match(/FILEVERSION\s+(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*$/)) { | |
if (major === undefined) { | |
major = RegExp.$1; | |
minor = RegExp.$2; | |
revision = RegExp.$3; | |
build = RegExp.$4; | |
} else { | |
if (RegExp.$1 !== major) { | |
out.WriteLine("FILEVERSION has bad major number."); | |
return; | |
} | |
if (RegExp.$2 !== minor) { | |
out.WriteLine("FILEVERSION has bad minor number."); | |
return; | |
} | |
if (RegExp.$3 !== revision) { | |
out.WriteLine("FILEVERSION has bad revision number."); | |
return; | |
} | |
if (RegExp.$4 !== build) { | |
out.WriteLine("FILEVERSION has bad build number."); | |
return; | |
} | |
} | |
bFileVersion = true; | |
out.Write("old:"); | |
out.WriteLine(strLine); | |
if (intReadOnly >= 0) { | |
strLine = | |
RegExp["$`"] + | |
"FILEVERSION " + | |
objVersion.toMajor(major) + | |
"," + | |
objVersion.toMinor(minor) + | |
"," + | |
objVersion.toRevision(revision) + | |
"," + | |
objVersion.toBuild(build); | |
out.Write("new:"); | |
out.WriteLine(strLine); | |
out.WriteLine(); | |
} | |
} else if (strLine.match(/PRODUCTVERSION\s+(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*$/)) { | |
if (major === undefined) { | |
major = RegExp.$1; | |
minor = RegExp.$2; | |
revision = RegExp.$3; | |
build = RegExp.$4; | |
} else { | |
if (RegExp.$1 !== major) { | |
out.WriteLine("PRODUCTVERSION has bad major number."); | |
return; | |
} | |
if (RegExp.$2 !== minor) { | |
out.WriteLine("PRODUCTVERSION has bad minor number."); | |
return; | |
} | |
if (RegExp.$3 !== revision) { | |
out.WriteLine("PRODUCTVERSION has bad revision number."); | |
return; | |
} | |
if (RegExp.$4 !== build) { | |
out.WriteLine("PRODUCTVERSION has bad build number."); | |
return; | |
} | |
} | |
bProductVersion = true; | |
out.Write("old:"); | |
out.WriteLine(strLine); | |
if (intReadOnly >= 0) { | |
strLine = | |
RegExp["$`"] + | |
"PRODUCTVERSION " + | |
objVersion.toMajor(major) + | |
"," + | |
objVersion.toMinor(minor) + | |
"," + | |
objVersion.toRevision(revision) + | |
"," + | |
objVersion.toBuild(build); | |
out.Write("new:"); | |
out.WriteLine(strLine); | |
out.WriteLine(); | |
} | |
} else if (strLine.match(/VALUE\s+\"FileVersion\"\s*,\s*\"\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\"\s*$/)) { | |
if (major === undefined) { | |
out.WriteLine("version not defined in info section"); | |
return; | |
} | |
if (RegExp.$1 !== major) { | |
out.WriteLine("\"FileVersion\" has bad major number."); | |
return; | |
} | |
if (RegExp.$2 !== minor) { | |
out.WriteLine("\"FileVersion\" has bad minor number."); | |
return; | |
} | |
if (RegExp.$3 !== revision) { | |
out.WriteLine("\"FileVersion\" has bad revision number."); | |
return; | |
} | |
if (RegExp.$4 !== build) { | |
out.WriteLine("\"FileVersion\" has bad build number."); | |
return; | |
} | |
bFileInfo = true; | |
out.Write("old:"); | |
out.WriteLine(strLine); | |
if (intReadOnly >= 0) { | |
strLine = | |
RegExp["$`"] + | |
"VALUE \"FileVersion\", \"" + | |
objVersion.toMajor(major) + | |
", " + | |
objVersion.toMinor(minor) + | |
", " + | |
objVersion.toRevision(revision) + | |
", " + | |
objVersion.toBuild(build) + | |
"\""; | |
out.Write("new:"); | |
out.WriteLine(strLine); | |
out.WriteLine(); | |
} | |
} else if (strLine.match(/VALUE\s+\"ProductVersion\"\s*,\s*\"\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\"\s*$/)) { | |
if (major === undefined) { | |
out.WriteLine("version not defined in info section"); | |
return; | |
} | |
if (RegExp.$1 !== major) { | |
out.WriteLine("\"ProductVersion\" has bad major number."); | |
return; | |
} | |
if (RegExp.$2 !== minor) { | |
out.WriteLine("\"ProductVersion\" has bad minor number."); | |
return; | |
} | |
if (RegExp.$3 !== revision) { | |
out.WriteLine("\"ProductVersion\" has bad revision number."); | |
return; | |
} | |
if (RegExp.$4 !== build) { | |
out.WriteLine("\"ProductVersion\" has bad build number."); | |
return; | |
} | |
bProductInfo = true; | |
out.Write("old:"); | |
out.WriteLine(strLine); | |
if (intReadOnly >= 0) { | |
strLine = | |
RegExp["$`"] + | |
"VALUE \"ProductVersion\", \"" + | |
objVersion.toMajor(major) + | |
", " + | |
objVersion.toMinor(minor) + | |
", " + | |
objVersion.toRevision(revision) + | |
", " + | |
objVersion.toBuild(build) + | |
"\""; | |
out.Write("new:"); | |
out.WriteLine(strLine); | |
out.WriteLine(); | |
} | |
} | |
strLines[idx++] = strLine; | |
} | |
objText.Close(); | |
if (!bFileVersion) { | |
out.WriteLine("FILEVERSION not found"); | |
return; | |
} | |
if (!bProductVersion) { | |
out.WriteLine("PRODUCTVERSION not found"); | |
return; | |
} | |
if (!bFileInfo) { | |
out.WriteLine("\"FileVersion\" info not found"); | |
return; | |
} | |
if (!bProductInfo) { | |
out.WriteLine("\"ProductVersion\" info not found"); | |
return; | |
} | |
if (intReadOnly < 0) { | |
return; | |
} | |
if (intReadOnly === 0) { | |
out.WriteLine("No changes made (file was opened for reading only)."); | |
return; | |
} | |
out.WriteLine("Opening file for writing."); | |
objText = objFile.OpenAsTextStream(2); //2 = for writing | |
for (idx = 0; idx < strLines.length; ++idx) { | |
objText.WriteLine(strLines[idx]); | |
} | |
objText.Close(); | |
out.WriteLine("Changes were made to file."); | |
}; | |
MJH.Main = function() { | |
var out = WScript.StdOut; | |
var objFSO = new ActiveXObject("Scripting.FileSystemObject"); | |
var objArgs = WScript.Arguments; | |
var objRootFolder; | |
var objVersion; | |
var intReadWrite = -1; //read-only by default | |
if (objArgs.Length > 2) { | |
out.WriteLine("Too many arguments."); | |
return; | |
} | |
if (objArgs.Length >= 1) { | |
out.Write("arg[0]: "); | |
out.WriteLine(objArgs(0)); | |
if (!objArgs(0).match(/(\+?\d+)\.(\+?\d+)\.(\+?\d+)\.(\+?\d+)/)) { | |
out.WriteLine("bad version value"); | |
return; | |
} | |
objVersion = function (major, minor, revision, build) { | |
out.Write("version: major="); | |
out.Write(minor); | |
out.Write(" minor="); | |
out.Write(minor); | |
out.Write(" revision="); | |
out.Write(revision); | |
out.Write(" build="); | |
out.Write(build); | |
out.WriteLine(); | |
out.WriteLine(); | |
function transform(str, pat) { | |
var strnum, patnum, result; | |
if (pat.charAt(0) !== "+") { | |
return pat; | |
} | |
strnum = parseInt(str, 10); | |
patnum = parseInt(pat.slice(1), 10); | |
result = strnum + patnum; | |
return result.toString(); | |
} | |
return { | |
toMajor : function (str) { | |
return transform(str, major); | |
}, | |
toMinor : function (str) { | |
return transform(str, minor); | |
}, | |
toRevision : function (str) { | |
return transform(str, revision); | |
}, | |
toBuild : function (str) { | |
return transform(str, build); | |
} | |
}; | |
}(RegExp.$1, RegExp.$2, RegExp.$3, RegExp.$4); | |
intReadWrite = 0; | |
} | |
if (objArgs.Length >= 2) { | |
out.Write("arg[1]: "); | |
out.WriteLine(objArgs(1)); | |
intReadWrite = parseInt(objArgs(1), 10); | |
if (isNaN(intReadWrite)) { | |
out.WriteLine("read-write flag has bad syntax"); | |
return; | |
} | |
if (intReadWrite < 0) { | |
out.WriteLine("read-write flag is out-of-range (too small)"); | |
return; | |
} | |
if (intReadWrite > 1) { | |
out.WriteLine("read-write flag is out-of-range (too large)"); | |
return; | |
} | |
} | |
objRootFolder = objFSO.GetFolder("."); | |
out.Write("solution folder: "); | |
out.WriteLine(objRootFolder.Path); | |
out.WriteLine(); | |
function process(strName) { | |
var strPath = objFSO.BuildPath(objRootFolder.Path, strName); | |
var objFolder, objFile; | |
out.Write("project folder: "); | |
out.WriteLine(strPath); | |
if (!objFSO.FolderExists(strPath)) { | |
out.WriteLine("project folder does not exist"); | |
return; | |
} | |
objFolder = objFSO.GetFolder(strPath); | |
strPath = objFSO.BuildPath(objFolder.Path, strName + ".rc"); | |
if (!objFSO.FileExists(strPath)) { | |
out.WriteLine("resource file not found"); | |
return; | |
} | |
objFile = objFSO.GetFile(strPath); | |
out.Write("path: "); | |
out.WriteLine(objFile.Path); | |
out.Write("name: "); | |
out.WriteLine(objFile.Name); | |
out.WriteLine(); | |
MJH.SetVersion(objFile, objVersion, intReadWrite); | |
out.WriteLine(); | |
} | |
process("makewebm"); | |
process("playwebm"); | |
process("vp8decoder"); | |
process("vp8encoder"); | |
process("vp9decoder"); | |
process("vpxdecoder"); | |
process("webmmux"); | |
process("webmsource"); | |
process("webmsplit"); | |
process("webmcc"); | |
process("webmvorbisencoder"); | |
process("webmvorbisdecoder"); | |
process("webmoggsource"); | |
}; | |
MJH.Main(); |