You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stdcxx.apache.org by se...@apache.org on 2005/11/25 23:16:48 UTC
svn commit: r349027 [4/4] - in /incubator/stdcxx/trunk: ./
etc/config/windows/
Added: incubator/stdcxx/trunk/etc/config/windows/summary.js
URL: http://svn.apache.org/viewcvs/incubator/stdcxx/trunk/etc/config/windows/summary.js?rev=349027&view=auto
==============================================================================
--- incubator/stdcxx/trunk/etc/config/windows/summary.js (added)
+++ incubator/stdcxx/trunk/etc/config/windows/summary.js Fri Nov 25 14:16:34 2005
@@ -0,0 +1,638 @@
+//
+// $Id$
+//
+// BuildLog.htm file constants
+
+var cmdLineTag = "Command Lines";
+var outputTag = "Output Window";
+var summaryTag = "Results";
+
+var errorsTag = "error(s)";
+var warningsTag = "warning(s)";
+
+var compilingTag = "Compiling...";
+var linkingTag = "Linking...";
+
+var hdrLibrary = "Library Summary";
+var hdrTestDriver = "Test Driver Summary";
+var hdrExamples = "Example Summary";
+var hdrTests = "Test Summary";
+
+////////////////////////////////////////////////////////////////////
+// read BuildLog.htm
+
+function readBuildLog(exeDir, itemInfo)
+{
+ if (! fso.FolderExists(exeDir))
+ return;
+
+ var blogDir = exeDir + "\\" + itemInfo.name;
+
+ if (! fso.FolderExists(blogDir))
+ return;
+
+ var blogFilePath = blogDir + "\\" + buildlogFile;
+ if (! fso.FileExists(blogFilePath))
+ return;
+
+ var blogFile = fso.OpenTextFile(blogFilePath);
+ var blogData = blogFile.ReadAll();
+
+ var posTmp = getCommandLinesInfo(itemInfo, blogData, 0);
+ posTmp = getCompilationInfo(itemInfo, blogData, posTmp);
+ posTmp = getBuildSummaryInfo(itemInfo, blogData, posTmp);
+}
+
+////////////////////////////////////////////////////////////////////
+// BuildLog.htm parsing methods
+
+function getCommandLinesInfo(itemInfo, blogData, posStart)
+{
+ //lookup for the command lines block
+ var posCmdLines = blogData.indexOf(cmdLineTag, posStart);
+ if (-1 == posCmdLines)
+ return posStart;
+
+ // extract table in the command lines block
+ itemInfo.buildCmdLog = extractTableData(blogData, posCmdLines);
+ return posStart + itemInfo.buildCmdLog.length;
+}
+
+
+function getCompilationInfo(itemInfo, blogData, posStart)
+{
+ //lookup for the output block
+ var posCmplInfo = blogData.indexOf(outputTag, posStart);
+ if (-1 == posCmplInfo)
+ return posStart;
+
+ // extract table in the output block
+ itemInfo.buildOutLog = extractTableData(blogData, posCmplInfo);
+ return posStart + itemInfo.buildOutLog.length;
+}
+
+
+function getBuildSummaryInfo(itemInfo, blogData, posStart)
+{
+ //lookup for the results block
+ var posResInfo = blogData.indexOf(summaryTag, posStart);
+ if (-1 == posResInfo)
+ return posStart;
+
+ // extract table in the results block
+ var summaryData = extractTableData(blogData, posResInfo);
+
+ // skip first line in the summary as not needed at all
+ var posPrjName = summaryData.indexOf(buildlogFile);
+ posPrjName = summaryData.indexOf("\r\n", posPrjName);
+ if (-1 == posPrjName)
+ return posStart + summaryData.length;
+
+ var prjSummary = summaryData.substr(posPrjName);
+
+ // we not needed in tags, so remove them
+ var tagIdx = prjSummary.indexOf("<");
+ itemInfo.buildOutLog += "\r\n" + prjSummary.substr(0, tagIdx);
+
+ // parse project summary and get number of errors and warnings
+ var rgSum = prjSummary.split(" ");
+
+ itemInfo.errorsCnt = rgSum[2];
+ itemInfo.warningsCnt = rgSum[4];
+
+ // check what kind of errors we have
+ if (itemInfo.errorsCnt != "0")
+ {
+ var posLinking = itemInfo.buildOutLog.indexOf(linkingTag);
+ if (posLinking != -1)
+ itemInfo.linkerErrors = true;
+ }
+
+ return posStart + summaryData.length;
+}
+
+
+function extractTableData(blogData, posStart)
+{
+ var posMainTable = blogData.indexOf("<table", posStart);
+ if (-1 == posMainTable)
+ return "";
+
+ // lookup for the main table close tag
+ var posCloseTag = posMainTable;
+ var posOpenTag = posMainTable;
+ while (true)
+ {
+ posCloseTag = blogData.indexOf("</table>", posCloseTag + 5);
+ if (-1 == posCloseTag) // no close tag?
+ break;
+
+ posOpenTag = blogData.indexOf("<table", posOpenTag + 5);
+ if (-1 == posOpenTag)
+ break;
+
+ if (posCloseTag < posOpenTag)
+ break;
+ }
+
+ var tableData = "";
+ var tableDataLen = posCloseTag + 8 - posMainTable;
+ if (tableDataLen > 0)
+ tableData = blogData.substr(posMainTable, tableDataLen);
+ else
+ tableData = blogData.substr(posMainTable);
+
+ // visual studio doesn't provide last table row close tags
+ // add them here
+ var indexClose = tableData.lastIndexOf("</table>");
+ tableData = tableData.substr(0, indexClose) + "</td></tr></table>";
+
+ return tableData;
+}
+
+////////////////////////////////////////////////////////////////////
+// get differences method
+
+function getDifferencesInfo(itemInfo)
+{
+ var diffs = getWinDiffDifferences(itemInfo.runOutput,
+ itemInfo.runReqOutput, "ILFRGX");
+
+ // replace first line
+ var endLine = String.fromCharCode(13) + String.fromCharCode(10);
+ var pos = diffs.indexOf(endLine);
+ if (-1 == pos)
+ {
+ itemInfo.runDiff = diffs;
+ return;
+ }
+
+ itemInfo.runDiff = "Differences between real output and required: ";
+ itemInfo.runDiff += diffs.substr(pos);
+
+ //WScript.Echo(itemInfo.runDiff);
+}
+
+///////////////////////////////////////////////////////////////////////
+// save methods
+
+function saveBuildSummary(itemInfo, fileSummary)
+{
+ var failed = (itemInfo.exitCode != 0 || itemInfo.errorsCnt != "0")
+ ? true : false;
+
+ if (failed == true)
+ fileSummary.WriteLine("<tr bgcolor=\"#FF9999\">");
+ else
+ fileSummary.WriteLine("<tr bgcolor=\"#FFFF99\">");
+
+ var someCol = "<td style=\"padding:2px;border-right:#000000 solid 1px;\
+ border-bottom:#000000 solid 1px;\" align=\"left\">";
+ var lastCol =
+ "<td style=\"padding:2px;border-bottom:#000000 solid 1px;\" \
+ align=\"right\">";
+
+ fileSummary.Write(someCol);
+ fileSummary.Write("<a href=\"#" + itemInfo.name + "\">");
+ fileSummary.WriteLine(itemInfo.name + "</a></td>");
+
+ if (itemInfo.errorsCnt != "0")
+ {
+ fileSummary.WriteLine(someCol + "Build Failed" + "</td>");
+ }
+ else
+ {
+ if (failed == true)
+ {
+ fileSummary.WriteLine(someCol + "Exited with code " +
+ itemInfo.exitCode + "</td>");
+ }
+ else
+ {
+ fileSummary.WriteLine(someCol + "Succeeded" + "</td>");
+ }
+ }
+
+ if (failed == false)
+ {
+ if (itemInfo.runDiff != "")
+ fileSummary.WriteLine(someCol + "Difference" + "</td>");
+ else
+ fileSummary.WriteLine(someCol + "Equal" + "</td>");
+ }
+ else
+ {
+ fileSummary.WriteLine(someCol + " " + "</td>");
+ }
+
+ fileSummary.WriteLine(lastCol + itemInfo.warningsCnt + "</td>");
+
+ fileSummary.WriteLine("</tr>");
+}
+
+function saveBuildInfo(itemInfo, infoDir, infoExt)
+{
+ var outfileName = infoDir + "\\" + itemInfo.name + "." + infoExt;
+ var outFile = fso.CreateTextFile(outfileName);
+
+ saveBuildInfoTable(outFile, itemInfo, hdrExamples, false);
+
+ outFile.Close();
+}
+
+function saveBuildInfoTable(outFile, itemInfo, linkSummary, bLib)
+{
+ outFile.WriteLine("<table border=\"0\" width=\"100%\" \
+ style=\"border:#000000 solid 1px;\" cellspacing=\"0\">");
+
+ outFile.Write("<tr><td bgcolor=\"#CCCCCC\" \
+ style=\"border-bottom:#000000 solid 1px;\"><strong>");
+ outFile.Write("<a name=\"" + itemInfo.name + "\">" +
+ itemInfo.name + "</a>");
+ outFile.WriteLine("</strong> <a href=\"#" +
+ makeLinkFromString(linkSummary) + "\"><i>(" +
+ linkSummary.toLowerCase() +
+ ")</i></a> <a href=\"#top\"><i>(top)</i></a></td></tr>");
+
+ saveBuildInfoBlock(outFile, "Build Command Lines",
+ itemInfo.buildCmdLog, false);
+ saveBuildInfoBlock(outFile, "Build Output",
+ itemInfo.buildOutLog, false);
+
+ if (false == bLib)
+ {
+ if (itemInfo.runOutput == "" && itemInfo.exitCode != 0)
+ itemInfo.runOutput = "Exited with code " + itemInfo.exitCode;
+
+ saveBuildInfoBlock(outFile,
+ "Executable Output", itemInfo.runOutput, true);
+ }
+
+ if (itemInfo.runDiff != "")
+ {
+ saveBuildInfoBlock(outFile, "Differences",
+ encodeHTML(itemInfo.runDiff), true);
+ }
+
+ outFile.WriteLine("</table>");
+}
+
+
+function saveBuildInfoBlock(outFile, blockName, blockData, needPre)
+{
+ // header
+ outFile.Write("<tr><td style=\"padding:4px;\"><strong>");
+ outFile.Write(blockName);
+ outFile.WriteLine("</strong></td></tr>");
+
+ // data
+ outFile.WriteLine("<tr><td widht=\"100%\" \
+ style=\"padding-left:4px;padding-right:4px;padding-bottom:4px;\">");
+
+ outFile.WriteLine("<table width=\"100%\" border=\"0\" \
+ bgcolor=\"#EEEEEE\" \
+ style=\"left-margin:5px;right-margin:\
+ 5px;border:#000000 solid 1px;\"> ");
+
+ outFile.WriteLine("<tr> <td>");
+
+ if (needPre == true)
+ outFile.WriteLine("<pre>");
+
+ outFile.WriteLine(blockData);
+
+ if (needPre == true)
+ outFile.WriteLine("</pre>");
+
+ outFile.WriteLine("</td></tr>");
+ outFile.WriteLine("</table>");
+ outFile.WriteLine("</td></tr>");
+}
+
+//////////////////////////////////////////////////////////////////////////
+//
+/////////////////////////////////////////////////////////////////////////
+
+function makeLinkFromString(linkString)
+{
+ var srcS = " ";
+ var destS = "-";
+ var reRep = new RegExp(srcS, "mg");
+ var res = linkString.replace(reRep, destS);
+ res = res.toLowerCase();
+ return res;
+}
+
+function getSummaryLogPath(buildDir, buildSummaryPrefix, buildType)
+{
+ var outDir = buildDir + "\\" + buildType;
+ return outDir + "\\" + buildSummaryPrefix + buildType + ".htm";
+}
+
+function makeSummaryLog(buildDir, buildSummaryPrefix, buildType)
+{
+ var outDir = buildDir + "\\" + buildType;
+ if (! fso.FolderExists(outDir))
+ fso.CreateFolder(outDir);
+
+ var oFolder = fso.GetFolder(outDir);
+ var sumFileName = buildSummaryPrefix + buildType + ".htm";
+ var fSum = oFolder.CreateTextFile(sumFileName);
+
+ fSum.WriteLine("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
+ fSum.WriteLine("<body bgcolor=\"#FFFFFF\"> \
+ <font face=\"arial\" color=\"#000000\">");
+
+ fSum.WriteLine("<center><H2>" + buildType + "</H2></center>");
+
+ fSum.WriteLine("<table border=\"0\" width=\"100%\">");
+
+ fSum.WriteLine("<tr><td style=\"padding-top:5px;padding-bottom:5px; \
+ border-top:#000000 solid 1px;border-bottom:#000000 solid 1px;\" \
+ align=\"center\">");
+
+ fSum.WriteLine("<a href=\"#" + makeLinkFromString(hdrLibrary) +
+ "\">" + hdrLibrary + "</a> : ");
+ fSum.WriteLine("<a href=\"#" + makeLinkFromString(hdrTestDriver) +
+ "\">" + hdrTestDriver + "</a> : ");
+ fSum.WriteLine("<a href=\"#" + makeLinkFromString(hdrExamples) +
+ "\">" + hdrExamples + "</a> : ");
+ fSum.WriteLine("<a href=\"#" + makeLinkFromString(hdrTests) +
+ "\">" + hdrTests + "</a>");
+
+ fSum.WriteLine("</td></tr>");
+
+ fSum.WriteLine("</table>");
+ fSum.WriteLine("<br/>");
+
+ return fSum;
+}
+
+
+function saveSummaryHeaderLib(fSum, libInfo, hdrLibrary)
+{
+ fSum.WriteLine("<strong><a name=\"" + makeLinkFromString(hdrLibrary) +
+ "\">" + hdrLibrary + "</a></strong>");
+
+ fSum.WriteLine("<table border=\"0\" width=\"100%\" \
+ style=\"border:#000000 solid 1px;\" cellspacing=\"0\">");
+
+ // save header row
+ fSum.WriteLine("<tr bgcolor=\"#CCCCCC\">");
+ fSum.WriteLine(
+ "<td style=\"padding:2px;border-right:#000000 solid 1px;\
+ border-bottom:#000000 solid 1px;\"><strong>Library</strong></td>");
+ fSum.WriteLine(
+ "<td style=\"padding:2px;border-right:#000000 solid 1px;\
+ border-bottom:#000000 solid 1px;\"><strong>State</strong></td>");
+ fSum.WriteLine(
+ "<td style=\"padding:2px;border-bottom:#000000 solid 1px;\">\
+ <strong>Warnings</strong></td>");
+ fSum.WriteLine("</tr>");
+
+ // save library header
+ if (libInfo.errorsCnt == "0")
+ fSum.WriteLine("<tr bgcolor=\"#FFFFFF\" \
+ style=\"border-bottom:#000000 solid 1px;\">");
+ else
+ fSum.WriteLine("<tr bgcolor=\"#FF9999\" \
+ style=\"border-bottom:#000000 solid 1px;\">");
+
+ fSum.WriteLine(
+ "<td style=\"padding:2px;border-right:#000000 solid 1px;\">"
+ + "<a href=\"#" + libInfo.name + "\">" + libInfo.name + "</a></td>");
+
+ fSum.Write("<td style=\"padding:2px;border-right:#000000 solid 1px;\">");
+ if (libInfo.errorsCnt == "0")
+ fSum.Write("OK");
+ else
+ fSum.Write("Failed");
+ fSum.WriteLine("</td>");
+
+ fSum.WriteLine("<td style=\"padding:2px;\">" +
+ libInfo.warningsCnt + "</td>");
+
+ fSum.WriteLine("</tr>");
+
+ fSum.WriteLine("</table>");
+ fSum.WriteLine("<br/>");
+}
+
+function saveSummaryHeaderTestDriver(fSum, rwtestInfo, hdrDriver)
+{
+ fSum.WriteLine("<strong><a name=\"" + makeLinkFromString(hdrDriver) +
+ "\">" + hdrDriver + "</a></strong>");
+
+ fSum.WriteLine("<table border=\"0\" width=\"100%\" \
+ style=\"border:#000000 solid 1px;\" cellspacing=\"0\">");
+
+ // save header row
+ fSum.WriteLine("<tr bgcolor=\"#CCCCCC\">");
+ fSum.WriteLine("<td style=\"padding:2px;border-right:#000000 solid 1px;\
+ border-bottom:#000000 solid 1px;\">\
+ <strong>Test Driver</strong></td>");
+ fSum.WriteLine(
+ "<td style=\"padding:2px;border-right:#000000 solid 1px;\
+ border-bottom:#000000 solid 1px;\"><strong>State</strong></td>");
+ fSum.WriteLine(
+ "<td style=\"padding:2px;border-bottom:#000000 solid 1px;\">\
+ <strong>Warnings</strong></td>");
+ fSum.WriteLine("</tr>");
+
+ // save test driver header
+ if (rwtestInfo.errorsCnt == "0")
+ fSum.WriteLine("<tr bgcolor=\"#FFFFFF\" \
+ style=\"border-bottom:#000000 solid 1px;\">");
+ else
+ fSum.WriteLine("<tr bgcolor=\"#FF9999\" \
+ style=\"border-bottom:#000000 solid 1px;\">");
+
+ fSum.WriteLine(
+ "<td style=\"padding:2px;border-right:#000000 solid 1px;\">" +
+ "<a href=\"#" + rwtestInfo.name + "\">" +
+ rwtestInfo.name + "</a></td>");
+
+ fSum.Write(
+ "<td style=\"padding:2px;border-right:#000000 solid 1px;\">");
+ if (rwtestInfo.errorsCnt == "0")
+ fSum.Write("OK");
+ else
+ fSum.Write("Failed");
+ fSum.WriteLine("</td>");
+
+ fSum.WriteLine("<td style=\"padding:2px;\">" +
+ rwtestInfo.warningsCnt + "</td>");
+
+ fSum.WriteLine("</tr>");
+
+ fSum.WriteLine("</table>");
+ fSum.WriteLine("<br/>");
+}
+
+
+function saveSummaryHeaderMulti(fSum, exsDir, buildType, hdrExamples)
+{
+ fSum.WriteLine("<strong><a name=\"" + makeLinkFromString(hdrExamples) +
+ "\">" + hdrExamples + "</a></strong>");
+
+ fSum.WriteLine("<table border=\"0\" width=\"100%\" \
+ style=\"border:#000000 solid 1px;\" cellspacing=\"0\">");
+
+ // save header row
+ fSum.WriteLine("<tr bgcolor=\"#CCCCCC\">");
+ fSum.WriteLine("<td style=\"padding:2px;border-right:#000000 solid 1px;\
+ border-bottom:#000000 solid 1px;\"><strong>Example</strong></td>");
+ fSum.WriteLine("<td style=\"padding:2px;border-right:#000000 solid 1px;\
+ border-bottom:#000000 solid 1px;\"><strong>State</strong></td>");
+ fSum.WriteLine("<td style=\"padding:2px;border-right:#000000 solid 1px;\
+ border-bottom:#000000 solid 1px;\">\
+ <strong>Comparision</strong></td>");
+ fSum.WriteLine("<td style=\"padding:2px;\
+ border-bottom:#000000 solid 1px;\"><strong>Warnings</strong></td>");
+ fSum.WriteLine("</tr>");
+
+ // load information from local summary file
+ // and save it to general summary
+ var lsumFileName = exsDir + "\\" + buildType + "\\" + summaryFileName;
+ if (fso.FileExists(lsumFileName))
+ {
+ var fileLSum = fso.OpenTextFile(lsumFileName);
+ var lsumData = fileLSum.ReadAll();
+ fSum.Write(lsumData);
+ }
+
+ fSum.WriteLine("</table>");
+ fSum.WriteLine("<br/>");
+}
+
+function saveBuildSummarySingle(fSum, libInfo, hdrLibrary)
+{
+ saveBuildInfoTable(fSum, libInfo, hdrLibrary, true);
+ fSum.WriteLine("<br/>");
+}
+
+
+function saveBuildSummaryMulti(fSum, htmDir, buildType)
+{
+ var htmFolder = fso.GetFolder(htmDir);
+ if (! htmDir)
+ return;
+
+ var enumHtmSubFolders = new Enumerator(htmFolder.SubFolders);
+ for (; !enumHtmSubFolders.atEnd(); enumHtmSubFolders.moveNext())
+ {
+ var htmFName = enumHtmSubFolders.item().Name;
+ if (buildType == htmFName)
+ {
+ saveBuildSummariesFromFolder(fSum,
+ enumHtmSubFolders.item().Path, htmFolderName);
+ }
+ else
+ {
+ saveBuildSummaryMulti(fSum, htmDir + "\\" + htmFName, buildType);
+ }
+ }
+}
+
+function saveBuildSummariesFromFolder(fSum, testFolder, htmFName)
+{
+ var htmFldName = testFolder + "\\" + htmFName;
+ if (! fso.FolderExists(htmFldName))
+ return;
+
+ var htmFld = fso.GetFolder(htmFldName);
+
+ var rx = new RegExp("^.+\\.(?:htm)$", "i");
+ var enumHtmFiles = new Enumerator(htmFld.Files);
+ for (; !enumHtmFiles.atEnd(); enumHtmFiles.moveNext())
+ {
+ var htmFileName = enumHtmFiles.item().Name;
+ if (! rx.test(htmFileName))
+ continue;
+
+ var htmFile = fso.OpenTextFile(htmFldName + "\\" + htmFileName);
+ var htmData = htmFile.ReadAll();
+
+ fSum.Write(htmData);
+
+ fSum.WriteLine("<br/>");
+ }
+}
+
+
+function closeSummaryLog(fSum)
+{
+ fSum.WriteLine("</body>");
+ fSum.Close();
+}
+
+////////////////////////////////////////////////////////////////////////////
+function checkForFailures(testDir, bType, logHtm, sumHtm, htmTempDir, seeHtm)
+{
+ var testFolder = fso.GetFolder(testDir);
+ if (! testFolder)
+ return;
+
+ var seeHtmHere = seeHtm;
+ if (false == seeHtmHere && testFolder.Name == bType)
+ seeHtmHere = true;
+
+ var enumHtmSubFolders = new Enumerator(testFolder.SubFolders);
+ for (; !enumHtmSubFolders.atEnd(); enumHtmSubFolders.moveNext())
+ {
+ var htmFName = enumHtmSubFolders.item().Name;
+ checkForFailures(testDir + "\\" + htmFName, bType,
+ logHtm, sumHtm, htmTempDir, seeHtmHere);
+ }
+
+ if (false == seeHtmHere)
+ return;
+
+ var rx = new RegExp("^.+\\.(?:htm)$", "i");
+ var enumHtmFiles = new Enumerator(testFolder.Files);
+ for (; !enumHtmFiles.atEnd(); enumHtmFiles.moveNext())
+ {
+ var htmFileName = enumHtmFiles.item().Name;
+ if (! rx.test(htmFileName))
+ continue;
+
+ if (htmFileName != logHtm)
+ continue;
+
+ var testInfo = new ItemBuildInfo(testFolder.Name);
+
+ var blogFile =
+ fso.OpenTextFile(testFolder.Path + "\\" + htmFileName);
+ var blogData = blogFile.ReadAll();
+
+ var posTmp = getCommandLinesInfo(testInfo, blogData, 0);
+ posTmp = getCompilationInfo(testInfo, blogData, posTmp);
+ posTmp = getBuildSummaryInfo(testInfo, blogData, posTmp);
+
+ if (testInfo.errorsCnt != "0")
+ saveBuildFailure(testFolder.Path, testInfo, sumHtm, htmTempDir);
+ }
+}
+
+function saveBuildFailure(testDir, testInfo, sumHtm, htmTempDir)
+{
+ var htmTempPath = getParentFolder(testDir) + "\\" + htmTempDir;
+ if (! fso.FolderExists(htmTempPath))
+ fso.CreateFolder(htmTempPath);
+
+ saveBuildInfo(testInfo, htmTempPath, "htm");
+
+ var sumTempFile;
+ if (fso.FileExists(sumHtm))
+ {
+ sumTempFile = fso.OpenTextFile(sumHtm, 8);
+ }
+ else
+ {
+ WScript.Echo("Path " + sumHtm + " not found");
+ return;
+ }
+
+ saveBuildSummary(testInfo, sumTempFile);
+ sumTempFile.Close();
+}
Propchange: incubator/stdcxx/trunk/etc/config/windows/summary.js
------------------------------------------------------------------------------
svn:keywords = Id
Added: incubator/stdcxx/trunk/etc/config/windows/update.wsf
URL: http://svn.apache.org/viewcvs/incubator/stdcxx/trunk/etc/config/windows/update.wsf?rev=349027&view=auto
==============================================================================
--- incubator/stdcxx/trunk/etc/config/windows/update.wsf (added)
+++ incubator/stdcxx/trunk/etc/config/windows/update.wsf Fri Nov 25 14:16:34 2005
@@ -0,0 +1,261 @@
+<?xml version="1.0" ?>
+<package>
+ <comment>
+ PrimalCode wizard generated file.
+ </comment>
+ <job id="doexe" prompt="no">
+ <?job error="false" debug="false" ?>
+ <runtime>
+ <description>
+Solution update script.
+ </description>
+ <named helpstring="Name of the solution" name="CONFIG"
+ required="true" type="string"/>
+ <named helpstring="Top directory of stdlib sources tree"
+ name="TOPDIR" required="false" type="string"/>
+ <named helpstring="Output directory for modules"
+ name="BUILDDIR" required="true" type="string"/>
+ <example>cscript update.wsf /TOPDIR:"C:\stdcxx"
+ /BUILDDIR:"C:\stdcxx\build" /CONFIG:VC71
+ </example>
+ <usage>
+Usage: cscript update.wsf /CONFIG:@CONFIG
+/BUILDDIR:@BUILDDIR [/TOPDIR:@TOPDIR] [BUILDTYPE:@BUILDTYPE]
+where
+@CONFIG is VC71,
+@TOPDIR - stdcxx main directory,
+@BUILDDIR - output directory for a build.
+ </usage>
+ </runtime>
+ <object id="fso" progid="Scripting.FileSystemObject"/>
+ <object id="WshShell" progid="WScript.Shell"/>
+ <script language="JScript" src="config.js"/>
+ <script language="JScript" src="msvc-config_classes.js"/>
+ <script language="JScript" src="data.js"/>
+ <script language="JScript" src="msvc-config.js"/>
+ <script language="JScript" src="utilities.js"/>
+ <script language="JScript" src="generate.js"/>
+ <script id="update" language="JScript">
+<![CDATA[
+//
+// Solution update script.
+//
+
+// constants
+var scriptDir = getParentFolder(WScript.ScriptFullName);
+var srcDir = getParentFolder(getParentFolder(getParentFolder(scriptDir)));
+var outDir = srcDir;
+var logFile = "slnupd.log";
+var logStream = null;
+var currentCfg = "";
+
+var winconfigDir = "\\etc\\config\\windows";
+
+var buildType = "";
+var tempBuildBatchName = "buildsol.bat";
+
+var description = new update; // run
+
+function update()
+{
+ WScript.Echo("Solution update script");
+ WScript.Echo("Checking arguments...");
+
+ readAndCheckArguments();
+
+ if (srcDir[srcDir.length - 1] != "\\")
+ srcDir += "\\";
+
+ if (outDir[outDir.length - 1] != "\\")
+ outDir += "\\";
+
+ WScript.Echo("Checking consistence...");
+ var logStream;
+ if (fso.FileExists(outDir + currentCfg + logFile))
+ {
+ logStream = fso.OpenTextFile(outDir + currentCfg + logFile, 8);
+ }
+ else
+ {
+ logStream = fso.CreateTextFile(outDir + currentCfg + logFile,
+ true, false);
+ }
+
+ // get solution template
+ var solution = getSolution(currentCfg);
+ if (!solution)
+ {
+ WScript.StdErr.WriteLine(
+ "Generate: Solution with the name "
+ + currentCfg + " not found");
+
+ logStream.WriteLine("Solution with the name "
+ + currentCfg + " not found");
+
+ logStream.Close();
+ WScript.Quit(2);
+ }
+
+ //ensure that it supports generation
+ if (!solution.generateSolution)
+ {
+ WScript.StdErr.WriteLine(
+ "Generate: Solution with the name "
+ + solution + " does not support IDE project generation");
+
+ logStream.WriteLine("Solution with the name "
+ + solution + " does not support IDE project generation");
+
+ logStream.Close();
+ WScript.Quit(2);
+ }
+
+ //read existing solution file
+ WScript.Echo("Reading solution...");
+ var slnFileName = outDir + "\\" + currentCfg + ".sln";
+ var prjInfo = readSolutionGUIDs(slnFileName);
+
+ WScript.Echo("Checking projects...");
+ //make solution structure
+ var fullSolution = fillSolutionTemplateLight(solution, prjInfo,
+ srcDir, outDir, logStream);
+
+ WScript.Echo("Updating solution...");
+ var modProjects = updateSolution(fullSolution, prjInfo,
+ srcDir, outDir, logStream);
+
+ //save solution
+ WScript.Echo("Writing modified projects on disk...");
+ saveModifiedProjects(modProjects, srcDir, outDir, logStream);
+
+ logStream.WriteLine("Solution updated");
+ logStream.Close();
+
+ WScript.Echo("Solution was updated successfully. See "
+ + outDir + currentCfg + "slnupd.log" + " for details.");
+ WScript.Quit(0);
+}
+
+
+function readAndCheckArguments()
+{
+ if (!WScript.Arguments.Named.Exists("CONFIG"))
+ {
+ WScript.StdErr.WriteLine(
+ "Generate: Missing required argument.");
+ WScript.Arguments.ShowUsage();
+ WScript.Quit(2);
+ }
+
+ if (!WScript.Arguments.Named.Exists("BUILDDIR"))
+ {
+ WScript.StdErr.WriteLine(
+ "Generate: Missing required argument BUILDDIR.");
+ WScript.Arguments.ShowUsage();
+ WScript.Quit(2);
+ }
+
+ currentCfg = WScript.Arguments.Named("CONFIG");
+
+ if (WScript.Arguments.Named.Exists("TOPDIR"))
+ {
+ srcDir = WScript.Arguments.Named("TOPDIR");
+ }
+ else
+ {
+ // try to deduce it
+ var myDir = WScript.ScriptFullName;
+ var dirIndex = myDir.indexOf(winconfigDir);
+ if (-1 == dirIndex)
+ {
+ WScript.StdErr.WriteLine(
+ "Generate: Missing required argument TOPDIR.");
+ WScript.Arguments.ShowUsage();
+ WScript.Quit(2);
+ }
+
+ srcDir = myDir.substr(0, dirIndex);
+ }
+
+ if (srcDir != "")
+ {
+ if (!fso.FolderExists(srcDir))
+ {
+ WScript.StdErr.WriteLine(
+ "Update: Unable to read sources folder "
+ + srcDir);
+ WScript.Quit(2);
+ }
+
+ outDir = srcDir;
+ }
+
+ if (WScript.Arguments.Named.Exists("BUILDDIR"))
+ {
+ outDir = WScript.Arguments.Named("BUILDDIR");
+ }
+
+ if (outDir != "")
+ {
+ if (!fso.FolderExists(outDir))
+ {
+ WScript.StdErr.WriteLine(
+ "Update: Unable to read destination folder "
+ + srcDir);
+ WScript.Quit(2);
+ }
+ }
+
+ var slnFileName = outDir + "\\" + currentCfg + ".sln";
+ if (! fso.FileExists(slnFileName))
+ {
+ WScript.StdErr.WriteLine(
+ "Update: Unable to read the solution "
+ + slnFileName);
+ WScript.Quit(2);
+ }
+}
+
+function updateSolution(fullSolution, prjInfo, srcDir, outDir, logStream)
+{
+ // set right guids and collect new projects
+ var rgModProjects = new Array();
+ for (var i in fullSolution.projects)
+ {
+ var solPrj = fullSolution.projects[i];
+ if (! solPrj || ! solPrj.name)
+ continue;
+
+ var oldProject = prjInfo[solPrj.name];
+ if (! oldProject) // new one
+ {
+ rgModProjects.push(solPrj);
+ continue;
+ }
+
+ solPrj.id = oldProject.id;
+ }
+
+ // save solution without saving projects
+ fullSolution.generateSolution(srcDir, outDir, logStream, false);
+
+ return rgModProjects;
+}
+
+function saveModifiedProjects(modProjects, srcDir, outDir, logStream)
+{
+ for(var i = 0; i < modProjects.length; i++)
+ {
+ WScript.Echo("saving " + modProjects[i].name + "...");
+ logStream.WriteLine("saving " + modProjects[i].name);
+
+ generateVCPROJ(modProjects[i], srcDir, outDir);
+
+ logStream.WriteLine(modProjects[i].name + " saved");
+ }
+}
+
+]]>
+ </script>
+ </job>
+</package>
Propchange: incubator/stdcxx/trunk/etc/config/windows/update.wsf
------------------------------------------------------------------------------
svn:keywords = Id
Added: incubator/stdcxx/trunk/etc/config/windows/utilities.js
URL: http://svn.apache.org/viewcvs/incubator/stdcxx/trunk/etc/config/windows/utilities.js?rev=349027&view=auto
==============================================================================
--- incubator/stdcxx/trunk/etc/config/windows/utilities.js (added)
+++ incubator/stdcxx/trunk/etc/config/windows/utilities.js Fri Nov 25 14:16:34 2005
@@ -0,0 +1,290 @@
+//
+// $Id$
+//
+// defines different utility functions
+
+// returns parent folder for a path
+function getParentFolder(path)
+{
+ var idx = path.lastIndexOf('\\');
+ return path.substr(0, idx);
+}
+
+var rxUUID = /[a-f0-9\-]+/i;
+// generates new UUID. uuidgen shall be runnable via PATH
+function createUUID()
+{
+ var exec = WshShell.Exec("uuidgen");
+ var time = 0;
+ while (exec.Status == 0)
+ {
+ WScript.Sleep(100); // wait for completion
+ time += 100;
+ if (time > 5000)
+ {
+ WScript.StdErr.WriteLine(
+ "createUUID: Fatal error: uuidgen" +
+ " failed to complete in 5" +
+ " seconds");
+ WScript.Quit(3);
+ }
+ }
+ var result = exec.ExitCode;
+ if (result != 0)
+ {
+ WScript.StdErr.WriteLine(
+ "createUUID: Fatal error: uuidgen"
+ + " failed");
+ WScript.Quit(3);
+ }
+ var id = exec.StdOut.ReadAll();
+ return "{" + rxUUID.exec(id)[0].toUpperCase() +"}";
+}
+
+
+/////////////////////////////////////////////////////////////////////////
+// get differences using WinDiff utility
+
+function getWinDiffDifferences(src1, src2, flags)
+{
+ try
+ {
+ // first create two temporary files
+ var tfolder, TemporaryFolder = 2;
+ tfolder = fso.GetSpecialFolder(TemporaryFolder);
+ if (! tfolder)
+ return "unknown";
+
+ var tname1 = fso.GetTempName();
+ var tfile1 = tfolder.CreateTextFile(tname1);
+ var tpath1 = tfolder.Path + "\\" + tname1;
+ tfile1.Write(src1);
+ tfile1.Close();
+
+ var tname2 = fso.GetTempName();
+ var tfile2 = tfolder.CreateTextFile(tname2);
+ var tpath2 = tfolder.Path + "\\" + tname2;
+ tfile2.Write(src2);
+ tfile2.Close();
+
+ var tResName = fso.GetTempName();
+ var tResPath = tfolder.Path + "\\" + tResName;
+
+ // second run windiff
+ var cmd = "windiff -F" + flags + " " + tResPath;
+ cmd += " " + tpath1;
+ cmd += " " + tpath2;
+
+ var result = WshShell.Run(cmd, 7, true);
+ if (result != 0)
+ {
+ WScript.StdErr.WriteLine(
+ "getWinDiffDifferences: Fatal error: windiff"
+ + " failed");
+ return "unknown";
+ }
+
+ // third read the results
+ var tResFile = fso.OpenTextFile(tfolder.Path + "\\" + tResName);
+ var res = tResFile.ReadAll();
+ tResFile.Close();
+
+ fso.DeleteFile(tpath1);
+ fso.DeleteFile(tpath2);
+ fso.DeleteFile(tResPath);
+
+ return res;
+ }
+ catch(e)
+ {
+ return "Information about differences is not available";
+ }
+}
+
+function makeTempFile()
+{
+ var tfolder, TemporaryFolder = 2;
+ tfolder = fso.GetSpecialFolder(TemporaryFolder);
+
+ var tname = fso.GetTempName();
+ var tfile = tfolder.CreateTextFile(tname);
+ tfile.Close();
+
+ return tfolder.Path + "\\" + tname;
+}
+
+function encodeHTML(srcString)
+{
+ var res = srcString;
+ var srcS = new Array ( "&", "<", ">", "\"" );
+ var destS = new Array ( "&", "<", ">", """ );
+ for (var t = 0; t < srcS.length; t++)
+ {
+ var reRep = new RegExp(srcS[t], "mg");
+ res = res.replace(reRep, destS[t]);
+ }
+
+ return res;
+}
+
+function removeLeadingDot(dotName)
+{
+ var index = dotName.indexOf(".");
+ if (0 != index)
+ return dotName;
+
+ var resName = dotName.substr(1);
+ return resName;
+}
+
+//////////////////////////////////////////////////////////////////////
+// compile environment
+var activeCompiler = null;
+var activeLinker = null;
+var activeLibrarian = null;
+
+var logFileName = "config.log";
+
+// Setup compiler and linker names and options
+function setCompileEnvironment(solutionName, configurationName
+ , projectName, logFile)
+{
+ var solution = configurations.get(solutionName);
+ var solutionconfig = solution.configurations.get(configurationName);
+ var projectConfig =
+ solutionconfig.projectConfigurations.get(projectName);
+ var project = solution.projects.get(projectConfig.projectName);
+ var platform = project.platforms.get(projectConfig.platform);
+ var configuration =
+ platform.configurations.get(projectConfig.configuration);
+
+ activeCompiler = configuration.tools.get(compilerToolName);
+ activeLinker = configuration.tools.get(linkerToolName);
+ activeLibrarian = configuration.tools.get(librarianToolName);
+
+ logFileName = logFile;
+}
+
+// performs compilation using provided compiler
+function compile(compiler)
+{
+ var command = compiler.getCommandLine();
+ var message = "Compiling with command \"" + command + "\"";
+ logLine(message);
+ return WshShell.Run("cmd /c \"" + command +"\" >> " +
+ logFileName + " 2>&1", runWindowMode, true);
+}
+
+// performs compilation using active compiler
+function compileFiles(srcs, defines)
+{
+ var compiler = activeCompiler.clone();
+ var srcsArr = srcs.split(" ");
+ for (i in srcsArr)
+ {
+ compiler.inputFiles.add(srcsArr[i]);
+ }
+ if (typeof(defines) == "string")
+ {
+ defines = Array(defines);
+ }
+ if (defines instanceof Array)
+ {
+ for (i in defines)
+ {
+ compiler.defines.add(defines[i]);
+ }
+ }
+ return compile(compiler);
+}
+
+// links using provided linker
+function link(linker)
+{
+ var command = linker.getCommandLine();
+ var message = "Linking with command \"" + command + "\"";
+ logLine(message);
+ return WshShell.Run("cmd /c \"" + command +"\" >> "
+ + logFileName + " 2>&1", runWindowMode, true);
+}
+
+// links using active linker
+function linkFiles(srcs, outName, linker)
+{
+ if (!linker)
+ {
+ linker = activeLinker.clone();
+ }
+ linker.outputFile = outName;
+ var srcsArr = srcs.split(" ");
+ for (i in srcsArr)
+ {
+ linker.inputFiles.add(srcsArr[i]);
+ }
+ return link(linker);
+}
+
+// preprocesses using provided compiler
+function preprocess(compiler, preprocFile)
+{
+ var command = compiler.getPreprocessCommandLine();
+ var message = "Preprocessing with command \"" + command + "\"";
+ logLine(message);
+ return WshShell.Run("cmd /c \"" + command +"\" > "
+ + preprocFile + " 2>> " + logFileName, runWindowMode, true);
+}
+
+// preprocesses using active compiler
+function preprocessFile(src, preprocFile)
+{
+ var compiler = activeCompiler.clone();
+ compiler.inputFiles.add(src);
+ return preprocess(compiler, preprocFile);
+}
+
+// links a library using provided librarian
+function buildLibrary(librarian)
+{
+ var command = librarian.getCommandLine();
+ var message = "Making library with command \"" + command + "\"";
+ logLine(message);
+ return WshShell.Run("cmd /c \"" + command +"\" >> "
+ + logFileName + " 2>&1", runWindowMode, true);
+}
+
+// links a library using active librarian
+function makeLibrary(srcFiles, outDir, outFile, isShared)
+{
+ var ret = compileFiles(srcFiles);
+ if (ret != 0)
+ {
+ return ret;
+ }
+ var objNames = srcFiles.replace(/(?:[\S]+[/\\\\])?([^/\\\\]+\.)cpp/gi,
+ outDir + "/$1obj");
+
+ if (isShared)
+ {
+ // call linker to build a dll
+ var linker = activeLinker.clone();
+ linker.isDLL = true;
+ return linkFiles(objNames, outFile, linker);
+ }
+ // call librarian to build lib
+ var librarian = activeLibrarian.clone();
+ librarian.outputFile = outFile;
+ var objsArray = objNames.split(" ");
+ for (i in objsArray)
+ {
+ librarian.inputFiles.add(objsArray);
+ }
+ return buildLibrary(librarian);
+}
+
+// logs text line into a log file
+function logLine(line)
+{
+ var stream = fso.OpenTextFile(logFileName, 8, true, 0);
+ stream.WriteLine(line);
+ stream.Close();
+}
Propchange: incubator/stdcxx/trunk/etc/config/windows/utilities.js
------------------------------------------------------------------------------
svn:keywords = Id
Added: incubator/stdcxx/trunk/generate.bat
URL: http://svn.apache.org/viewcvs/incubator/stdcxx/trunk/generate.bat?rev=349027&view=auto
==============================================================================
--- incubator/stdcxx/trunk/generate.bat (added)
+++ incubator/stdcxx/trunk/generate.bat Fri Nov 25 14:16:34 2005
@@ -0,0 +1,20 @@
+@echo off
+set ERRORLEVEL=0
+cscript /? > nul
+if %errorlevel% neq 0 (
+echo "Windows scripting host is not installed. Please install it."
+set ERRORLEVEL=1
+goto :EOF
+)
+
+set scriptdir=etc\config\windows
+set rungen=generate.wsf
+
+set runfile=%~dp0\%scriptdir%\%rungen%
+
+cscript /nologo %runfile% %*
+if %errorlevel% neq 0 (
+echo "Solution generation script failed."
+set ERRORLEVEL=1
+goto :EOF
+)
Propchange: incubator/stdcxx/trunk/generate.bat
------------------------------------------------------------------------------
svn:keywords = Id