You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stdcxx.apache.org by fa...@apache.org on 2006/10/06 14:16:33 UTC
svn commit: r453570 [3/3] - /incubator/stdcxx/trunk/etc/config/windows/
Added: incubator/stdcxx/trunk/etc/config/windows/run_locale_utils.wsf
URL: http://svn.apache.org/viewvc/incubator/stdcxx/trunk/etc/config/windows/run_locale_utils.wsf?view=auto&rev=453570
==============================================================================
--- incubator/stdcxx/trunk/etc/config/windows/run_locale_utils.wsf (added)
+++ incubator/stdcxx/trunk/etc/config/windows/run_locale_utils.wsf Fri Oct 6 05:16:32 2006
@@ -0,0 +1,596 @@
+<?xml version="1.0" ?><!-- -*- SGML -*- -->
+<package>
+ <comment>
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ </comment>
+ <job id="run_locale_utils" prompt="no">
+ <?job error="false" debug="false" ?>
+ <runtime>
+ <description>
+Checks locale utilities:
+ 1. Locale utilities sanity: location, output, etc;
+ 2. Functionality:
+ - (re)generation of databases;
+ </description>
+ <named helpstring="Debug output" name="d"/>
+ <named helpstring="Perform sanity check" name="s"/>
+ <named helpstring="Perform functionality check" name="f"/>
+ <named helpstring="Path to the locale source files"
+ name="i" type="string"/>
+ <named helpstring="Locale name" name="l" type="string"/>
+ <named helpstring="Output file" name="O" type="string"/>
+ <example>cscript run_locale_utils.wsf /s /b:..\..\..\bin\11s"
+ </example>
+ <usage>
+Usage: cscript run_locale_utils.wsf [/d] [/s] [/f [/i:@NlsDir /l:@LocaleName]] [/b:@BinDir] [/O:@Out],
+where
+- "/d" debug;
+- "/s" tests location, output;
+- "/f" tests functionality; is followed by:
+ - "/i:@NlsDir>"
+ - "/l:@LocaleName>";
+- "/b:@BinDir";
+- "/O:@OutFile"
+ </usage>
+ </runtime>
+ <object id="fso" progid="Scripting.FileSystemObject"/>
+ <object id="WshShell" progid="WScript.Shell"/>
+ <script id="run_locale_utils" language="JScript">
+<![CDATA[
+//
+// run_locale_utils script for Stdcxx library
+//
+
+var dbgout = false;
+var chk_sanity = false;
+var chk_func = false;
+var nlsdir = "";
+var locale_db = "";
+var bindir = "";
+var outstrm = WScript.StdOut;
+
+var locale = "locale.exe";
+var localedef = "localedef.exe";
+
+// assertions
+var assertions = 0;
+var failedassertions = 0;
+
+var run_stdout;
+var run_stderr;
+
+var WEnv = WshShell.Environment("PROCESS");
+
+// printf the message line to the stderr
+function DebugOutLine(msg)
+{
+ if (dbgout)
+ WScript.StdErr.WriteLine(msg);
+}
+
+// printf the message to the stderr
+function DebugOut(msg)
+{
+ if (dbgout)
+ WScript.StdErr.Write(msg);
+}
+
+// execute command and set run_stdout to the cmd stdout content;
+// set run_stderr to the cmd stderr content
+function Run(cmd)
+{
+ var exec = WshShell.Exec(cmd);
+ run_stdout = "";
+ run_stderr = "";
+ while (0 == exec.Status) {
+ WScript.Sleep(100);
+ run_stdout += exec.StdOut.ReadAll();
+ run_stderr += exec.StdErr.ReadAll();
+ }
+
+ run_stdout += exec.StdOut.ReadAll();
+ run_stderr += exec.StdErr.ReadAll();
+
+ return exec;
+}
+
+// convert number num to string with specified width
+function FormatNumber(num, width)
+{
+ var s = num.toString();
+ var spaces = width - s.length;
+ for (var i = 0; i < spaces; ++i)
+ s = " " + s;
+ return s;
+}
+
+var description = new run_locale_utils; // run
+
+//////////////////////////////////////////////////////////////////////////////
+// Function definitions - checking sanity
+//////////////////////////////////////////////////////////////////////////////
+
+function check_locale_help()
+{
+ DebugOut("Checking \"locale --help\" output...");
+
+ var cmd = locale + " --help";
+ var exec = Run(cmd);
+
+ var xout = new Array("NAME", "SYNOPSIS", "DESCRIPTION");
+
+ for (var i = 0; i < xout.length; ++i)
+ {
+ ++assertions;
+
+ if (0 > run_stdout.search(xout[i]))
+ {
+ DebugOutLine(" incorrect.");
+ DebugOutLine("ERROR: \"locale --help\" gives wrong output ("
+ + xout[i] + ").");
+
+ ++failedassertions;
+
+ return;
+ }
+ }
+
+ DebugOutLine(" correct.");
+}
+
+function check_locale_all()
+{
+ DebugOut("Checking \"locale -a\" output...");
+
+ var cmd = locale + " -a";
+ var exec = Run(cmd);
+ var aout = run_stdout.split("\n");
+
+ for (var i = 0; i < aout.length; ++i)
+ {
+ ++assertions;
+
+ var line = aout[i].replace("\r", "").replace("\n", "");
+
+ if (0 == line.length || "C" == line)
+ continue;
+
+ if (0 > line.search(new RegExp("[a-z]\{2\}_[A-Z]\{2\}")))
+ {
+ DebugOutLine(" incorrect.");
+ DebugOutLine(" Warning: Locale name " + line
+ + " not matching pattern.");
+
+ ++failedassertions;
+
+ return;
+ }
+ }
+
+ DebugOutLine("check completed.");
+}
+
+function check_locale_m()
+{
+ DebugOut("Checking \"locale -m\" output...");
+
+ var cmd = locale + " -m";
+ var exec = Run(cmd);
+ var aout = run_stdout.split("\n");
+
+ for (var i = 0; i < aout.length; ++i)
+ {
+ ++assertions;
+
+ var line = aout[i].replace("\r", "").replace("\n", "");
+
+ if (0 > line.search(new RegExp(".cm")))
+ {
+ DebugOutLine(" incorrect.");
+ DebugOutLine("ERROR: \"locale -m\" failed.");
+
+ ++failedassertions;
+
+ return;
+ }
+ }
+
+ DebugOutLine(" correct.");
+}
+
+function check_locale_k()
+{
+ DebugOut("Checking \"locale -k LC_ALL\" output...")
+
+ var cmd = locale + " -k LC_ALL";
+ var exec = Run(cmd);
+
+ var xout = new Array("upper", "lower", "space", "print", "cntrl",
+ "alpha", "digit", "punct", "graph", "xdigit", "toupper",
+ "tolower", "abday", "day", "abmon", "", "mon", "am_pm",
+ "d_t_fmt", "d_fmt", "t_fmt", "t_fmt_ampm", "int_curr_symbol",
+ "currency_symbol", "mon_decimal_point", "mon_thousands_sep",
+ "mon_grouping", "positive_sign", "negative_sign", "int_frac_digits",
+ "frac_digits", "p_cs_precedes", "p_sep_by_space", "n_cs_precedes",
+ "n_sep_by_space", "p_sign_posn", "n_sign_posn", "decimal_point",
+ "thousands_sep", "grouping");
+
+ var any_failed = false;
+
+ for (var i = 0; i < xout.length; ++i)
+ {
+ ++assertions;
+
+ if (0 > run_stdout.search(xout[i]))
+ {
+ // output text only for the first failure
+ if (!any_failed)
+ DebugOutLine(" incorrect.");
+
+ DebugOutLine("ERROR: \"locale -k\" gives wrong output (" +
+ + xout[i] +").");
+
+ ++failedassertions;
+
+ any_failed = true;
+
+ }
+ }
+
+ if (!any_failed)
+ DebugOutLine(" correct.");
+}
+
+function check_localedef_help()
+{
+ DebugOut("Checking \"localedef --help\" output...");
+
+ var cmd = localedef + " --help";
+ var exec = Run(cmd);
+
+ var xout = new Array("NAME", "SYNOPSIS", "DESCRIPTION");
+
+ for (var i = 0; i < xout.length; ++i)
+ {
+ ++assertions;
+
+ if (0 > run_stdout.search(xout[i]))
+ {
+ DebugOutLine(" incorrect.");
+ DebugOutLine("ERROR: \"localedef --help\" gives wrong output ("
+ + xout[i] + ").");
+
+ ++failedassertions;
+
+ return;
+ }
+ }
+
+ DebugOutLine(" correct.");
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// Function definitions - checking functionality
+//////////////////////////////////////////////////////////////////////////////
+
+
+//
+// Generates one specified locale
+//
+function generate_locale(charmap, src, locname)
+{
+ var err = "Cannot generate locale database - ";
+
+ // charmap - character map file used in generating the locale database
+ // src - source/locale definition file
+ // locname - locale database name
+
+ if (charmap == "")
+ {
+ outstrm.WriteLine(err + "character maps file not specified.");
+ WScript.Quit(1);
+ }
+
+ if (src == "")
+ {
+ outstrm.WriteLine(err + "source input file not specified.");
+ WScript.Quit(1);
+ }
+
+ if (locname == "")
+ {
+ outstrm.WriteLine(err + "output locale name not specified.");
+ WScript.Quit(1);
+ }
+
+ ++assertions;
+
+ // Generating the database
+ var cmd = localedef + " -w -c -f " + charmap
+ + " -i " + src + " " + locname;
+ DebugOutLine(cmd);
+
+ var retcode = Run(cmd).ExitCode;
+ if (retcode)
+ {
+ outstrm.WriteLine("Error - localedef returned code: " + retcode);
+ ++failedassertions;
+ }
+}
+
+//
+// Dumps one locale database
+//
+function dump_locale(dumpfile)
+{
+ var err = "Cannot dump locale database - ";
+
+ // dumpfile - current locale dump file
+
+ if (dumpfile == "")
+ {
+ outstrm.WriteLine(err + " - no output file specified.");
+ WScript.Quit(1);
+ }
+
+ ++assertions;
+
+ // Dumping locale database
+ var cmd = locale + " -ck -h LC_ALL > " + dumpfile;
+ DebugOutLine(cmd);
+
+ var exec = Run(cmd);
+
+ var dmpfile = fso.CreateTextFile(dumpfile, true);
+ if (dmpfile)
+ {
+ dmpfile.Write(run_stdout);
+ dmpfile.Close();
+ }
+
+ var retcode = exec.ExitCode;
+ if (retcode)
+ {
+ outstrm.WriteLine("Error - locale returned code: " + retcode);
+ ++failedassertions;
+ }
+}
+
+//
+// Test one locale
+//
+function test_locale(nlsdir, testdir, locname)
+{
+ var err = "Cannot test locale - ";
+
+ // nlsdir - nlsdir
+ // testdir - test directory
+ // locname - name of the locale database
+
+ if (nlsdir == "")
+ {
+ outstrm.WriteLine(err+ " - nls directory not specified.");
+ WScript.Quit(1);
+ }
+
+ if (testdir == "")
+ {
+ outstrm.WriteLine(err + " - test directory not specified.");
+ WScript.Quit(1);
+ }
+
+ if (locname == "")
+ {
+ outstrm.WriteLine(err+ " - locale database name not specified.");
+ WScript.Quit(1);
+ }
+
+ // get locale's name and encoding
+ var locale_src = locname.replace(
+ new RegExp("\([^.]*\)\.\([^>@]*\)\(.*\)"), "$1$3")
+ .replace("@", ".");
+
+ var locale_encoding = locname.replace(
+ new RegExp("\([^.]*\)\.\([^>@]*\)\(.*\)"), "$2")
+ .replace("@", ".");
+
+ DebugOutLine("locale_src = " + locale_src);
+ DebugOutLine("locale_encoding = " + locale_encoding);
+
+ var charmap = nlsdir + "\\charmaps\\" + locale_encoding;
+ var src = nlsdir + "\\src\\" + locale_src;
+ var locdir = testdir + "\\" + locname;
+
+ // generate the first locale database
+ generate_locale(charmap, src, locdir);
+
+ // set necessary environment variables
+ DebugOutLine("LC_ALL=" + locname);
+ WEnv("LC_ALL") = locname;
+ DebugOutLine("LANG=" + locname);
+ WEnv("LANG") = locname;
+
+ // adjust the locale root
+ DebugOutLine("RWSTD_LOCALE_ROOT=" + testdir);
+ WEnv("RWSTD_LOCALE_ROOT") = testdir;
+
+ var test1 = testdir + "\\out.1";
+
+ // dump the locale database content to temporary location
+ dump_locale(test1);
+ DebugOutLine("");
+
+ // remove stage one database
+ if (fso.FolderExists(locdir))
+ fso.DeleteFolder(locdir, true);
+
+ // generate stage two database
+ generate_locale(charmap, test1, locdir);
+
+ var test2 = testdir + "\\out.2";
+
+ // dump stage two database to file
+ dump_locale(test2);
+
+ // remove stage two database
+ if (fso.FolderExists(locdir))
+ fso.DeleteFolder(locdir, true);
+
+ // generate stage three database
+ generate_locale(charmap, test2, locdir);
+
+ var test3 = testdir + "\\out.3";
+
+ // and finally dump it to file
+ dump_locale(test3);
+
+ ++assertions;
+
+ // compare
+
+ var params = test2 +" " + test3;
+ var cmd = "fc.exe " + params;
+ var retcode = Run(cmd).ExitCode;
+ if (retcode)
+ {
+ DebugOutLine("ERROR: " + params +" differ.");
+ ++failedassertions;
+ }
+
+ // and remove database
+ if (fso.FolderExists(locdir))
+ fso.DeleteFolder(locdir);
+
+ // remove dump files
+ if (fso.FileExists(test1))
+ fso.DeleteFile(test1);
+ if (fso.FileExists(test2))
+ fso.DeleteFile(test2);
+ if (fso.FileExists(test3))
+ fso.DeleteFile(test3);
+
+ // and finally remove the tmp directory
+ if (fso.FolderExists(testdir))
+ fso.DeleteFolder(testdir);
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// Main code
+//////////////////////////////////////////////////////////////////////////////
+
+function run_locale_utils()
+{
+ if (WScript.Arguments.Named.Exists("d"))
+ dbgout = true;
+
+ if (WScript.Arguments.Named.Exists("s"))
+ chk_sanity = true;
+
+ if (WScript.Arguments.Named.Exists("f"))
+ chk_func = true;
+
+ if (WScript.Arguments.Named.Exists("i"))
+ nlsdir = WScript.Arguments.Named("i");
+
+ if (WScript.Arguments.Named.Exists("l"))
+ locale_db = WScript.Arguments.Named("l");
+
+ if (WScript.Arguments.Named.Exists("b"))
+ {
+ bindir = WScript.Arguments.Named("b");
+ locale = bindir + "\\" + locale;
+ localedef = bindir + "\\" + localedef;
+ }
+
+ if (WScript.Arguments.Named.Exists("O"))
+ {
+ var outfile = WScript.Arguments.Named("O");
+ outstrm = fso.CreateTextFile(outfile, true);
+ if (!outstrm)
+ {
+ WScript.StdErr.WriteLine("Unable to create " + outfile + ", aborting");
+ WScript.Quit(2);
+ }
+ }
+
+ if (chk_sanity)
+ {
+ // checking locale sanity
+ check_locale_help();
+ check_locale_all();
+ check_locale_m();
+ check_locale_k();
+ check_localedef_help();
+
+ }
+ else if (chk_func)
+ {
+ // set the temp dir
+ var TemporaryFolder = 2;
+ var tmpdir = fso.GetSpecialFolder(TemporaryFolder)
+ + "\\" + fso.GetTempName();
+
+ if (!fso.CreateFolder(tmpdir))
+ {
+ WScript.StdErr.WriteLine("Unable to create " + tmpdir
+ + ", aborting");
+ WScript.Quit(1);
+ }
+
+ // checking locale functionality
+ DebugOutLine("RWSTD_SRC_ROOT=" + nlsdir);
+ WEnv("RWSTD_SRC_ROOT") = nlsdir;
+ DebugOutLine("RWSTD_LOCALE_ROOT=" + tmpdir);
+ WEnv("RWSTD_LOCALE_ROOT") = tmpdir;
+
+ // test only one locale
+ test_locale(nlsdir, tmpdir, locale_db);
+
+ if (fso.FolderExists(tmpdir))
+ fso.DeleteFolder(tmpdir, true);
+ }
+ else
+ {
+ // Invocation is wrong
+ WScript.Arguments.ShowUsage();
+ WScript.Quit(2);
+ }
+
+ if (assertions)
+ {
+ var pcnt = 100 * (assertions - failedassertions) / assertions;
+ pcnt = Math.floor(pcnt + 0.5);
+ outstrm.WriteLine("# +-----------------------+--------+--------+--------+");
+ outstrm.WriteLine("# | DIAGNOSTIC | ACTIVE | TOTAL |INACTIVE|");
+ outstrm.WriteLine("# +-----------------------+--------+--------+--------+");
+ outstrm.WriteLine("# | (S7) ASSERTION | " + FormatNumber(failedassertions, 6)
+ + " | " + FormatNumber(assertions, 6) + " | " + FormatNumber(pcnt, 5) + "% |");
+ outstrm.WriteLine("# +-----------------------+--------+--------+--------+");
+ outstrm.WriteLine();
+ }
+ outstrm.WriteLine("## Assertions = " + assertions);
+ outstrm.WriteLine("## FailedAssertions = " + failedassertions);
+ outstrm.WriteLine();
+
+ WScript.Quit(failedassertions);
+}
+
+]]>
+ </script>
+ </job>
+</package>
Propchange: incubator/stdcxx/trunk/etc/config/windows/run_locale_utils.wsf
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/stdcxx/trunk/etc/config/windows/run_locale_utils.wsf
------------------------------------------------------------------------------
svn:keywords = Id
Modified: incubator/stdcxx/trunk/etc/config/windows/runall.wsf
URL: http://svn.apache.org/viewvc/incubator/stdcxx/trunk/etc/config/windows/runall.wsf?view=diff&rev=453570&r1=453569&r2=453570
==============================================================================
--- incubator/stdcxx/trunk/etc/config/windows/runall.wsf (original)
+++ incubator/stdcxx/trunk/etc/config/windows/runall.wsf Fri Oct 6 05:16:32 2006
@@ -1,7 +1,22 @@
<?xml version="1.0" ?>
<package>
<comment>
- PrimalCode wizard generated file.
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
</comment>
<job id="runexamples" prompt="no">
<?job error="false" debug="false" ?>
@@ -19,6 +34,8 @@
required="false" type="string"/>
<named helpstring="The copy lib dll to exe option" name="COPYDLL"
required="false" type="string"/>
+ <named helpstring="The copy lib dll to exe option" name="COPYRWTESTDLL"
+ required="false" type="string"/>
<named helpstring="The lib dll folder" name="LIBDIR"
required="false" type="string"/>
<example>
@@ -29,6 +46,7 @@
Usage: cscript runexamples.wsf /EXEDIR:@EXEDIR /INOUTDIR:@INOUTDIR
/BUILDTYPE:@BUILDTYPE
[/LOGFILE:@LOGFILE] [/COPYDLL:@COPYDLL] [/LIBDIR:@LIBDIR]
+[/COPYRWTESTDLL:@COPYRWTESTDLL]
where
@EXEDIR is the root directory with executables ro be run and checked,
@TOPDIR is the root directory with .in and .out files
@@ -37,6 +55,7 @@
@LOGFILE is the log file name.
@COPYDLL is the option for copy dll to executables
@LIBDIR is the library dll folder (specify when COPYDLL is true)
+@COPYRWTESTDLL is the option for copy rwtest.dll to executables
</usage>
</runtime>
<object id="fso" progid="Scripting.FileSystemObject"/>
@@ -58,6 +77,7 @@
var logFileName = ""; // the log file name
var logFileDefault = "runexamples.log"; // the default log file name
var copyDll = false;
+var copyRwtestDll = false;
var libdllFolder = "";
var varIn = "in";
@@ -69,21 +89,28 @@
var exRunTimedOut = 0;
var exBadCode = 0;
-var runTimeout = 10000; //30000
-var runSleepStep = 100;
+var runTimeout = 10; //30
var buildlogFile = "BuildLog.htm";
var summaryFileName = "Summary.htm";
var htmFolderName = "temphtm";
var libFileName = "stdlib";
+
+var utlExec = "exec.exe";
+var unicodeLog = false;
var description = new runexamples; // run
+// the main function of the script
function runexamples()
{
readAndCheckArguments();
- var buildOutDir = examplesDir + "\\" + buildType;
+ getCompilerOpts(currentCfg);
+
+ unicodeLog = UNICODELOG;
+
+ var buildOutDir = examplesDir;
if (! fso.FolderExists(buildOutDir))
fso.CreateFolder(buildOutDir);
@@ -110,6 +137,7 @@
WScript.Quit(0);
}
+// performs checking of the script parameters
function readAndCheckArguments()
{
if (!WScript.Arguments.Named.Exists("EXEDIR"))
@@ -139,6 +167,8 @@
examplesDir = WScript.Arguments.Named("EXEDIR");
inoutDir = WScript.Arguments.Named("INOUTDIR");
buildType = WScript.Arguments.Named("BUILDTYPE");
+
+ utlExec = examplesDir + "\\..\\bin\\" + utlExec;
if (WScript.Arguments.Named.Exists("CONFIG"))
currentCfg = WScript.Arguments.Named("CONFIG");
@@ -155,6 +185,13 @@
copyDll = true;
}
+ if (WScript.Arguments.Named.Exists("COPYRWTESTDLL"))
+ {
+ var copyOption = WScript.Arguments.Named("COPYRWTESTDLL");
+ if ("true" == copyOption)
+ copyRwtestDll = true;
+ }
+
if (WScript.Arguments.Named.Exists("LIBDIR"))
libdllFolder = WScript.Arguments.Named("LIBDIR");
@@ -175,6 +212,11 @@
}
}
+// run all executables starting from exeDir
+// exeDir - starting folder to search executables in
+// srcDir - starting folder to search .in and .out files for the executable
+// fileLog - filename of the logfile
+// fileSimmary - filename of the summary file
function runAllExamples(exeDir, srcDir, fileLog, fileSummary)
{
var exeFolder = fso.GetFolder(exeDir);
@@ -186,37 +228,44 @@
{
var exeFolderName = enumExeSubFolders.item().Name;
- var newSrc = srcDir;
- if (exeFolderName != buildType)
- newSrc += "\\" + exeFolderName;
+ var newSrc = srcDir + "\\" + exeFolderName;
runAllExamples(exeDir + "\\" + exeFolderName,
newSrc, fileLog, fileSummary);
}
- if (exeFolder.Name != buildType)
- return;
-
var dllCopied = false;
+ var rwtdllCopied = false;
var rx = new RegExp("^.+\\.(?:exe)$", "i");
var enumExeFiles = new Enumerator(exeFolder.Files);
for (; !enumExeFiles.atEnd(); enumExeFiles.moveNext())
{
+ var exeFileName = enumExeFiles.item().Name;
+ if (! rx.test(exeFileName))
+ continue;
+
// temporary copy the dll to the executable
if (copyDll && !dllCopied)
{
var dllName = libFileName + buildType + ".dll";
- var copyDllCmd = "cmd /c \"copy /Y " + libdllFolder + dllName +
+ var copyDllCmd = "cmd /c \"copy /Y " + libdllFolder + "\\" + dllName +
" " + exeDir + "\\" + dllName + "\"";
WshShell.Run(copyDllCmd, 7, true);
dllCopied = true;
}
- var exeFileName = enumExeFiles.item().Name;
- if (! rx.test(exeFileName))
- continue;
-
+ // temporary copy the rwtest.dll to the executable
+ if (copyRwtestDll && !rwtdllCopied)
+ {
+ var rwtdllName = "rwtest.dll";
+ var copyDllCmd = "cmd /c \"copy /Y " + examplesDir + "\\" + rwtdllName +
+ " " + exeDir + "\\" + rwtdllName + "\"";
+
+ WshShell.Run(copyDllCmd, 7, true);
+ rwtdllCopied = true;
+ }
+
var htmDir = exeDir + "\\" + htmFolderName;
if (! fso.FolderExists(htmDir))
fso.CreateFolder(htmDir);
@@ -232,16 +281,14 @@
var runCmd = exeDir + "\\" + exeFileName;
WScript.Echo("running " + exeFileName);
fileLog.WriteLine("running " + exeFileName);
-
+
exRun++;
if (inData != "" || outData != "")
- runWithChecks(runCmd, itemInfo, inData, outData, fileLog);
+ runWithChecks(runCmd, exeFileName, itemInfo, outData, fileLog);
else
runNoChecks(runCmd, exeFileName, itemInfo, fileLog);
- var unicodeLog =
- currentCfg == "msvc-8.0" || currentCfg == "icc-9.1" ? true : false;
readBuildLog(exeDir, itemInfo, unicodeLog);
saveBuildInfo(itemInfo, htmDir, "htm");
saveBuildSummary(itemInfo, fileSummary);
@@ -260,87 +307,72 @@
exeFolder.Path + "\\" + dllName);
}
}
-}
+ // delete the rwtest.dll if it was copied
+ if (copyRwtestDll && rwtdllCopied)
+ {
+ try
+ {
+ fso.DeleteFile(exeFolder.Path + "\\" + rwtdllName);
+ }
+ catch(e) // do nothing
+ {
+ fileLog.WriteLine("error: could not delete temporary file" +
+ exeFolder.Path + "\\" + rwtdllName);
+ }
+ }
+}
+// run command without comparing the command output with expected output
+// cmd - full path to the running executable
+// exeFileName - filename of the running executable
+// itemInfo - ItemBuildInfo object to hold the information
+// fileLog - log filename
function runNoChecks(cmd, exeFileName, itemInfo, fileLog)
{
- var scriptPath = WScript.ScriptFullName;
- var pathIndex = scriptPath.lastIndexOf(WScript.ScriptName);
- scriptPath = scriptPath.substr(0, pathIndex);
-
- var tempFileName = makeTempFile();
- var runCmdTimeOut = 7000;
-
- var runCmd = "cscript /nologo \"" + scriptPath + "runexe.wsf" + "\"" +
- " /RUNCMD:\"" + cmd + " < NUL: " + "\"" +
- " /OUTFILE:\"" + tempFileName + "\"";
+ var runCmd = utlExec + " -t " + runTimeout + " \"" + cmd + " < NUL:\"";
- var tStartDate = new Date();
- var tStartTime = tStartDate.getTime();
-
- var timeOutOccurred = false;
var oExec = WshShell.Exec(runCmd);
+ if (!oExec)
+ {
+ WScript.Echo(itemInfo.name + " failed to run");
+ return;
+ }
+
while (oExec.Status == 0)
- {
WScript.Sleep(500);
-
- var tCurDate = new Date();
- var tCurTime = tCurDate.getTime();
- if (tCurTime - tStartTime > runCmdTimeOut)
- {
- timeOutOccurred = true;
- //WScript.Echo("its time to terminate");
- try
- {
- inspectProcesses(exeFileName, true);
- //WScript.Echo(exeFileName + " terminated");
- oExec.Terminate();
- //WScript.Echo("terminated");
- }
- catch(e)
- {
- WScript.Echo("error during termination");
- }
-
- break;
- }
- }
-
- if (timeOutOccurred == true)
- itemInfo.exitCode = 5;
- else
- itemInfo.exitCode = oExec.ExitCode;
+
+ itemInfo.exitCode = oExec.ExitCode;
itemInfo.runDiff = "";
itemInfo.runOutput = "";
- //WScript.Echo("run script finished with code " + itemInfo.exitCode);
-
- var tFinishDate = new Date();
- var tFinishTime = tFinishDate.getTime();
-
- //WScript.Echo("time difference is " + (tFinishTime - tStartTime));
-
+ var outFileName = cmd.replace(".exe", ".out");
+
try
{
- var tempFile = fso.OpenTextFile(tempFileName, 1);
+ var outFile = fso.OpenTextFile(outFileName, 1);
var exeOutput = "";
- if (! tempFile.AtEndOfStream)
- exeOutput = tempFile.ReadAll();
+ if (!outFile.AtEndOfStream)
+ exeOutput = outFile.ReadAll();
itemInfo.runOutput = exeOutput;
- //WScript.Echo(itemInfo.runOutput);
- tempFile.Close();
- fso.DeleteFile(tempFileName);
+ outFile.Close();
+ fso.DeleteFile(outFileName);
}
catch(e)
{
- WScript.Echo("Could not delete temporary file " + tempFileName);
+ WScript.Echo("Could not delete temporary file " + outFileName);
}
-
+
+ var Status = oExec.StdOut.ReadAll();
+ WScript.Echo(Status);
+
+ if (itemInfo.exitCode == 0)
+ itemInfo.exitCode = parseStatus(exeFileName, Status);
+
if (itemInfo.exitCode != 0)
exBadCode++;
@@ -354,147 +386,87 @@
fileLog.WriteLine(" ");
}
-
-function inspectProcesses(exeName, bKill)
+// parse the exec utility output to get status of the running executable
+// exename - filename of the executable
+// exeOut - stdout content of the exec utility
+function parseStatus(exeName, execOut)
{
- var e = new Enumerator(GetObject("winmgmts:").InstancesOf("Win32_process"))
-
- for (; !e.atEnd(); e.moveNext())
+ var res = 0;
+
+ var pos = execOut.indexOf(exeName);
+ if (0 <= pos)
{
- var Process = e.item();
- //WScript.echo (Process.Name + "\t" + Process.processid)
-
- if (Process.Name == exeName)
+ var status = execOut.substr(pos + 26, 6);
+ res = parseInt(status);
+ if (isNaN(res))
{
- if (true == bKill)
+ switch (status)
{
- //WScript.Echo("find process to be killed: " + exeName);
- Process.Terminate();
+ case "KILLED":
+ ++exRunTimedOut;
+ break;
}
+ res = 0;
}
}
-}
-
-/*
-function runNoChecks(cmd, itemInfo, fileLog)
-{
- // make no input
- cmd += " < NUL:";
-
- var oExec = WshShell.Exec(cmd);
- if (! oExec)
- {
- WScript.Echo(itemInfo.name + " failed to run");
- return;
- }
-
- var exeOutput = "";
- var sleeping = 0;
- while (oExec.Status == 0)
- {
- WScript.Sleep(runSleepStep);
- sleeping += runSleepStep;
-
- if (sleeping >= runTimeout)
- {
- exRunTimedOut++;
- oExec.Terminate();
-
- WScript.Echo("terminated because of timeout");
- WScript.Echo(" ");
-
- fileLog.WriteLine(cmd + " terminated because of timeout");
- fileLog.WriteLine(" ");
-
- itemInfo.exitCode = 5;
-
- return;
- }
- }
-
- var exeOutput = "";
- if (sleeping < runTimeout)
- exeOutput += oExec.StdOut.ReadAll();
-
- WScript.Echo(exeOutput);
-
- if (oExec.ExitCode != 0)
- exBadCode++;
-
- exRunSucceeded++;
-
- itemInfo.runOutput = exeOutput;
- itemInfo.exitCode = oExec.ExitCode;
- itemInfo.runDiff = "";
-
- WScript.Echo("example succeeded! Exit code " + oExec.ExitCode);
- fileLog.WriteLine(itemInfo.name + " completed successfully, exit code "
- + oExec.ExitCode);
-
- WScript.Echo(" ");
- fileLog.WriteLine(" ");
+ return res;
}
-*/
-function runWithChecks(cmd, itemInfo, inData, outData, fileLog)
+// run command and compare the command output with expected output
+// cmd - full path to the running executable
+// exeFileName - filename of the running executable
+// itemInfo - ItemBuildInfo object to hold the information
+// outData - the expected output of the command
+// fileLog - log filename
+function runWithChecks(cmd, exeFileName, itemInfo, outData, fileLog)
{
- if (inData == "")
- cmd += " < NUL:";
-
- var oExec = WshShell.Exec(cmd);
- if (! oExec)
+ var runCmd = utlExec + " -t " + runTimeout + " -d " + inoutDir +
+ " \"" + cmd + "\"";
+
+ var oExec = WshShell.Exec(runCmd);
+ if (!oExec)
{
WScript.Echo(itemInfo.name + " failed to run");
return;
}
- if (inData != "")
- {
- WScript.Sleep(runSleepStep * 10);
- oExec.StdIn.Write(inData + "\n" + String.fromCharCode(26) );
- }
-
- var exeOutput = "";
- var sleeping = 0;
while (oExec.Status == 0)
- {
- WScript.Sleep(runSleepStep);
- sleeping += runSleepStep;
+ WScript.Sleep(500);
+
+ var outFileName = cmd.replace(".exe", ".out");
+
+ try
+ {
+ var outFile = fso.OpenTextFile(outFileName, 1);
- if (sleeping >= runTimeout)
- {
- exRunTimedOut++;
- oExec.Terminate();
-
- WScript.Echo("terminated because of timeout");
- WScript.Echo(" ");
-
- fileLog.WriteLine(itemInfo.name +
- " terminated because of timeout");
-
- fileLog.WriteLine(" ");
+ var exeOutput = "";
+ if (!outFile.AtEndOfStream)
+ exeOutput = outFile.ReadAll();
- itemInfo.exitCode = 3;
+ itemInfo.runOutput = exeOutput;
- return;
- }
+ outFile.Close();
+ fso.DeleteFile(outFileName);
}
-
- if (sleeping < runTimeout)
- exeOutput += oExec.StdOut.ReadAll();
-
- var errText = oExec.StdErr.ReadAll();
- if (errText != "")
- WScript.Echo(errText);
-
- if (oExec.ExitCode != 0)
- exBadCode++;
-
+ catch(e)
+ {
+ WScript.Echo("Could not delete temporary file " + outFileName);
+ }
+
+ var Status = oExec.StdOut.ReadAll();
+ WScript.Echo(Status);
+
itemInfo.runOutput = exeOutput;
itemInfo.exitCode = oExec.ExitCode;
itemInfo.runReqOutput = outData;
+ if (itemInfo.exitCode == 0)
+ itemInfo.exitCode = parseStatus(exeFileName, Status);
+
+ if (itemInfo.exitCode != 0)
+ exBadCode++;
+
if (exeOutput == outData)
{
itemInfo.runDiff = "";
@@ -503,7 +475,7 @@
WScript.Echo("example succeeded! Exit code " + oExec.ExitCode);
fileLog.WriteLine(itemInfo.name +
" completed successfully, exit code " +
- oExec.ExitCode);
+ itemInfo.exitCode);
}
else
{
@@ -514,13 +486,17 @@
WScript.Echo("example failed! Exit code " + oExec.ExitCode);
fileLog.WriteLine(itemInfo.name +
" completed with errors, exit code " +
- oExec.ExitCode);
+ itemInfo.exitCode);
}
WScript.Echo(" ");
fileLog.WriteLine(" ");
}
+// returns the content of the .in or .out file for the specified executable
+// srcDir - folder containing subfolders with .in and .out files
+// exeFileName - filename of the executable
+// nameSuffix - one of varIn, varOut
function readAllFromFile(srcDir, exeFileName, nameSuffix)
{
if (! fso.FolderExists(srcDir))
@@ -543,11 +519,17 @@
return (someFile.ReadAll());
}
+// returns the content of the .in file for the specified executable
+// srcDir - folder containing .in files
+// exeFileName - filename of the executable
function readInFile(srcDir, exeFileName)
{
return readAllFromFile(srcDir, exeFileName, varIn);
}
+// returns the content of the .out file for the specified executable
+// srcDir - folder containing .out files
+// exeFileName - filename of the executable
function readOutFile(srcDir, exeFileName)
{
var outData = readAllFromFile(srcDir, exeFileName, varOut);
@@ -571,6 +553,9 @@
return (linkedFile.ReadAll());
}
+// returns the filename without extension
+// fileName - source filename
+// fileExtension - extension of the file
function getPureFileName(fileName, fileExtension)
{
var pureName = fileName;
Modified: incubator/stdcxx/trunk/etc/config/windows/summary.js
URL: http://svn.apache.org/viewvc/incubator/stdcxx/trunk/etc/config/windows/summary.js?view=diff&rev=453570&r1=453569&r2=453570
==============================================================================
--- incubator/stdcxx/trunk/etc/config/windows/summary.js (original)
+++ incubator/stdcxx/trunk/etc/config/windows/summary.js Fri Oct 6 05:16:32 2006
@@ -1,6 +1,26 @@
//
// $Id$
//
+//////////////////////////////////////////////////////////////////////
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed
+// with this work for additional information regarding copyright
+// ownership. The ASF licenses this file to you under the Apache
+// License, Version 2.0 (the "License"); you may not use this file
+// except in compliance with the License. You may obtain a copy of
+// the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+// implied. See the License for the specific language governing
+// permissions and limitations under the License.
+//
+//////////////////////////////////////////////////////////////////////
+
// BuildLog.htm file constants
var cmdLineTag = "Command Lines";
@@ -19,8 +39,8 @@
var hdrTests = "Test Summary";
////////////////////////////////////////////////////////////////////
-// read BuildLog.htm
+// read BuildLog.htm
function readBuildLog(exeDir, itemInfo, useUnicode)
{
if (! fso.FolderExists(exeDir))
@@ -44,9 +64,7 @@
posTmp = getBuildSummaryInfo(itemInfo, blogData, posTmp);
}
-////////////////////////////////////////////////////////////////////
// BuildLog.htm parsing methods
-
function getCommandLinesInfo(itemInfo, blogData, posStart)
{
//lookup for the command lines block
@@ -525,7 +543,7 @@
// load information from local summary file
// and save it to general summary
- var lsumFileName = exsDir + "\\" + buildType + "\\" + summaryFileName;
+ var lsumFileName = exsDir + "\\" + summaryFileName;
if (fso.FileExists(lsumFileName))
{
var fileLSum = fso.OpenTextFile(lsumFileName);
@@ -544,32 +562,26 @@
}
-function saveBuildSummaryMulti(fSum, htmDir, buildType)
+function saveBuildSummaryMulti(fSum, htmDir)
{
- var htmFolder = fso.GetFolder(htmDir);
- if (! htmDir)
+ if (!fso.FolderExists(htmDir))
return;
+ var htmFolder = fso.GetFolder(htmDir);
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);
- }
+ saveBuildSummariesFromFolder(fSum,
+ enumHtmSubFolders.item().Path, htmFolderName);
+ saveBuildSummaryMulti(fSum, htmDir + "\\" + htmFName);
}
}
function saveBuildSummariesFromFolder(fSum, testFolder, htmFName)
{
var htmFldName = testFolder + "\\" + htmFName;
- if (! fso.FolderExists(htmFldName))
+ if (!fso.FolderExists(htmFldName))
return;
var htmFld = fso.GetFolder(htmFldName);
@@ -602,9 +614,9 @@
function checkForFailures(testDir, bType, logHtm, sumHtm, htmTempDir,
seeHtm, useUnicode)
{
- var testFolder = fso.GetFolder(testDir);
- if (! testFolder)
+ if (!fso.FolderExists(testDir))
return;
+ var testFolder = fso.GetFolder(testDir);
var seeHtmHere = seeHtm;
if (false == seeHtmHere && testFolder.Name == bType)
Modified: incubator/stdcxx/trunk/etc/config/windows/utilities.js
URL: http://svn.apache.org/viewvc/incubator/stdcxx/trunk/etc/config/windows/utilities.js?view=diff&rev=453570&r1=453569&r2=453570
==============================================================================
--- incubator/stdcxx/trunk/etc/config/windows/utilities.js (original)
+++ incubator/stdcxx/trunk/etc/config/windows/utilities.js Fri Oct 6 05:16:32 2006
@@ -2,6 +2,127 @@
// $Id$
//
// defines different utility functions
+//
+//////////////////////////////////////////////////////////////////////
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed
+// with this work for additional information regarding copyright
+// ownership. The ASF licenses this file to you under the Apache
+// License, Version 2.0 (the "License"); you may not use this file
+// except in compliance with the License. You may obtain a copy of
+// the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+// implied. See the License for the specific language governing
+// permissions and limitations under the License.
+//
+//////////////////////////////////////////////////////////////////////
+
+var VERSION = "";
+var DEVENV = "";
+var DEVENVFLAGS = "";
+var CPPFLAGS = "";
+var LDFLAGS = "";
+var CONVERT = false;
+var CXX = "";
+var LD = "";
+var AR = "";
+var SLNVER="";
+var SLNCOMMENT="";
+var UNICODELOG = false;
+var NOSTCRT = false;
+var WINDIFF = "";
+var ICCCONVERT = "";
+
+// read and parse compiler configuration file
+// config - name of the compiler configuration
+function getCompilerOpts(config)
+{
+ var scriptDir = getParentFolder(WScript.ScriptFullName);
+ var configFileName = scriptDir + "\\" + config + ".config";
+ var ForReading = 1;
+ var configFile = null;
+
+ try
+ {
+ configFile = fso.OpenTextFile(configFileName, ForReading);
+ }
+ catch (e) {}
+
+ if (null == configFile)
+ {
+ WScript.StdErr.WriteLine("Cannot open configuration file: " + configFileName);
+ WScript.Quit(3);
+ }
+
+ while (!configFile.AtEndOfStream)
+ {
+ var line = configFile.ReadLine();
+ if (0 == line.indexOf("//"))
+ continue;
+ var inc = "#include ";
+ var pos = line.indexOf(inc);
+ if (0 == pos)
+ getCompilerOpts(line.substr(pos + inc.length));
+ var tokens = line.split("=");
+ if (2 == tokens.length)
+ {
+ switch (tokens[0])
+ {
+ case "VERSION":
+ VERSION = tokens[1];
+ break;
+ case "DEVENV":
+ DEVENV = tokens[1];
+ break;
+ case "DEVENVFLAGS":
+ DEVENVFLAGS = tokens[1];
+ break;
+ case "CPPFLAGS":
+ CPPFLAGS = tokens[1];
+ break;
+ case "LDFLAGS":
+ LDFLAGS = tokens[1];
+ break;
+ case "CONVERT":
+ CONVERT = (tokens[1] != "0");
+ break;
+ case "CXX":
+ CXX = tokens[1];
+ break;
+ case "LD":
+ LD = tokens[1];
+ break;
+ case "AR":
+ AR = tokens[1];
+ break;
+ case "SLNVER":
+ SLNVER = tokens[1];
+ break;
+ case "SLNCOMMENT":
+ SLNCOMMENT = tokens[1];
+ break;
+ case "UNICODELOG":
+ UNICODELOG = (tokens[1] != "0");
+ break;
+ case "NOSTCRT":
+ NOSTCRT = (tokens[1] != "0");
+ break;
+ case "WINDIFF":
+ WINDIFF = tokens[1];
+ break;
+ case "ICCCONVERT":
+ ICCCONVERT = tokens[1];
+ break;
+ }
+ }
+ }
+}
// returns parent folder for a path
function getParentFolder(path)
@@ -10,43 +131,41 @@
return path.substr(0, idx);
}
-var rxUUID = /[a-f0-9\-]+/i;
-// generates new UUID. uuidgen shall be runnable via PATH
-function createUUID()
+// returns filename from a path
+function getFileName(path)
{
- 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() +"}";
+ var idx = path.lastIndexOf('\\');
+ return path.substr(idx + 1);
}
+// returns extension of the file name (with dot at first character)
+function getExtension(filename)
+{
+ var idx = filename.lastIndexOf('.');
+ return 0 <= idx ? filename.substr(idx) : ".";
+}
/////////////////////////////////////////////////////////////////////////
// get differences using WinDiff utility
function getWinDiffDifferences(src1, src2, flags)
{
+ if (WINDIFF == "")
+ {
+ if (VERSION == "")
+ WINDIFF = "windiff";
+ else
+ {
+ var ver = "";
+ if (0 <= VERSION.indexOf("."))
+ ver = VERSION.replace(".", "");
+ WINDIFF = WshShell.Environment.Item("VS" + ver + "COMNTOOLS") +
+ "\\bin\\windiff";
+ if (WINDIFF[0] != "\"")
+ WINDIFF = "\"" + WINDIFF + "\"";
+ }
+ }
+
try
{
// first create two temporary files
@@ -71,7 +190,7 @@
var tResPath = tfolder.Path + "\\" + tResName;
// second run windiff
- var cmd = "windiff -F" + flags + " " + tResPath;
+ var cmd = WINDIFF + " -F" + flags + " " + tResPath;
cmd += " " + tpath1;
cmd += " " + tpath2;
@@ -80,7 +199,7 @@
{
WScript.StdErr.WriteLine(
"getWinDiffDifferences: Fatal error: windiff"
- + " failed");
+ + " failed");
return "unknown";
}
@@ -88,7 +207,7 @@
var tResFile = fso.OpenTextFile(tfolder.Path + "\\" + tResName);
var res = tResFile.ReadAll();
tResFile.Close();
-
+
fso.DeleteFile(tpath1);
fso.DeleteFile(tpath2);
fso.DeleteFile(tResPath);
@@ -101,6 +220,7 @@
}
}
+// create temporary file and return path to this file
function makeTempFile()
{
var tfolder, TemporaryFolder = 2;
@@ -113,6 +233,8 @@
return tfolder.Path + "\\" + tname;
}
+// encode symbols within string with escaped analog
+// srcString - source string
function encodeHTML(srcString)
{
var res = srcString;
@@ -127,6 +249,9 @@
return res;
}
+// returns source string without first character if it equal to symbol
+// dotName - source string
+// symbol - symbol to remove
function removeLeadingSymbol(dotName, symbol)
{
var index = dotName.indexOf(symbol);
@@ -137,6 +262,7 @@
return resName;
}
+// returns source string without first character is is a dot
function removeLeadingDot(dotName)
{
var index = dotName.indexOf(".");
@@ -147,196 +273,131 @@
return resName;
}
-// icc specific - solution conversion
-function convertSolutionImpl(slnFileName, toICC, logStream)
-{
- var convertKey = toICC == true ? "/IC" : "/VC";
- var cmdICConvert = iccConversionUtility + " \"" + slnFileName +
- "\" " + convertKey;
-
- var convertKeyFriendly = toICC == true ? "ICC" : "MSVC";
- WScript.Echo("Converting solution to " + convertKeyFriendly +
- ". This may take several minutes.");
-
- var res = -1;
- try
- {
- if (logStream)
- logStream.WriteLine("Converting " + cmdICConvert);
-
- res = WshShell.Run(cmdICConvert, 7, true);
- if (0 != res)
- WScript.Echo("Conversion finished with code " + res);
-
- if (logStream)
- logStream.WriteLine("Conversion to " + convertKeyFriendly +
- " finished with code " + res);
- }
- catch(e)
- {
- WScript.Echo("Conversion failed");
- if (logStream)
- logStream.WriteLine("Conversion failed");
-
- return -1;
- }
-
- return res;
-}
-
-//////////////////////////////////////////////////////////////////////
-// 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)
-{
- // obtain the solution. Check that there is no specail solution
- // for configure script
- var solution = configurations.get(solutionName);
- if (null != configurations.get(solutionName + "_config"))
- solution = configurations.get(solutionName + "_config");
-
- 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;
+// returns the source filename with replaced extension to new one
+// filename - source filename
+// ext - new extension
+function changeFileExt(filename, ext)
+{
+ var arr = filename.split(".");
+ arr[arr.length - 1] = ext;
+ return arr.join(".");
}
-// performs compilation using provided compiler
-function compile(compiler)
+// returns new UUID
+function createUUID()
{
- var command = compiler.getCommandLine();
- var message = "Compiling with command \"" + command + "\"";
- logLine(message);
- return WshShell.Run("cmd /c \"" + command +"\" >> " +
- logFileName + " 2>&1", runWindowMode, true);
+ return WScript.CreateObject("scriptlet.typelib").guid;
}
-// performs compilation using active compiler
-function compileFiles(srcs, defines)
+// returns index of value in array or -1
+function arrayIndexOf(array, value)
{
- 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)
+ for (var i = 0; i < array.length; ++i)
+ if (array[i] == value)
+ return i;
+
+ return -1;
+}
+
+// create MSVS solution file
+// projects - array of the projects
+// path - output folder
+// name - name of the solutuion file
+function generateSolution(projects, path, name)
+{
+ path += "\\";
+ var sln = fso.CreateTextFile(path + name, true, false);
+ // header
+ sln.WriteLine("Microsoft Visual Studio Solution File, Format Version " + SLNVER);
+ if (0 < SLNCOMMENT.length)
+ sln.WriteLine("# " + SLNCOMMENT);
+ for (var i = 0; i < projects.length; ++i)
+ {
+ // project section header
+ var Project = projects[i];
+ var VCProject = Project.VSProject;
+ sln.Write("Project(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = ");
+ sln.Write("\"" + VCProject.Name + "\"");
+ var projectFile = VCProject.ProjectFile;
+ var pos = projectFile.indexOf(path);
+ if (0 == pos)
+ projectFile = projectFile.substr(path.length);
+ sln.Write(", \"" + projectFile + "\"");
+ sln.WriteLine(", \"" + VCProject.ProjectGUID + "\"");
+
+ if (SLNVER != "7.00")
{
- compiler.defines.add(defines[i]);
+ // project dependencies
+ sln.WriteLine(
+ "\tProjectSection(ProjectDependencies) = postProject");
+ var deps = Project.PrjRefs.concat(Project.PrjDeps);
+ for (var j = 0; j < deps.length; ++j)
+ {
+ var depGUID = deps[j].VSProject.ProjectGUID;
+ sln.WriteLine("\t\t" + depGUID + " = " + depGUID);
+ }
+ sln.WriteLine("\tEndProjectSection");
}
+ // project section end
+ sln.WriteLine("EndProject");
}
- 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)
+ // Global section
+ sln.WriteLine("Global");
+ // solution configurations
+ sln.WriteLine("\tGlobalSection(SolutionConfiguration) = preSolution");
+ for (var i = 0; i < confNames.length; ++i)
{
- return ret;
+ var confName = confNames[i];
+ var confKey = (SLNVER == "7.00" ? "ConfigName." + i : confName);
+ sln.WriteLine("\t\t" + confKey + " = " + confName);
}
- var objNames = srcFiles.replace(/(?:[\S]+[/\\\\])?([^/\\\\]+\.)cpp/gi,
- outDir + "/$1obj");
-
- if (isShared)
+ sln.WriteLine("\tEndGlobalSection");
+
+ // project dependencies for MSVC 7.0
+ if (SLNVER == "7.00")
{
- // call linker to build a dll
- var linker = activeLinker.clone();
- linker.isDLL = true;
- return linkFiles(objNames, outFile, linker);
+ sln.WriteLine("\tGlobalSection(ProjectDependencies) = postSolution");
+ for (var i = 0; i < projects.length; ++i)
+ {
+ var Project = projects[i];
+ var VCProject = Project.VSProject;
+ var prjGUID = VCProject.ProjectGUID;
+ var deps = Project.PrjRefs.concat(Project.PrjDeps);
+ for (var j = 0; j < deps.length; ++j)
+ {
+ var depGUID = deps[j].VSProject.ProjectGUID;
+ sln.WriteLine("\t\t" + prjGUID + "." + j + " = " + depGUID);
+ }
+ }
+ sln.WriteLine("\tEndGlobalSection");
}
- // call librarian to build lib
- var librarian = activeLibrarian.clone();
- librarian.outputFile = outFile;
- var objsArray = objNames.split(" ");
- for (i in objsArray)
- {
- librarian.inputFiles.add(objsArray);
+
+ // project configurations
+ sln.WriteLine("\tGlobalSection(ProjectConfiguration) = postSolution");
+ for (var i = 0; i < projects.length; ++i)
+ {
+ var Project = projects[i];
+ var VCProject = Project.VSProject;
+ var prjGUID = VCProject.ProjectGUID;
+ var cfgs = VCProject.Configurations;
+ for (var j = 1; j <= cfgs.Count; ++j)
+ {
+ var cfg = cfgs.Item(j);
+ sln.WriteLine("\t\t" + prjGUID + "." + cfg.ConfigurationName +
+ ".ActiveCfg = " + cfg.Name);
+ sln.WriteLine("\t\t" + prjGUID + "." + cfg.ConfigurationName +
+ ".Build.0 = " + cfg.Name);
+ }
}
- return buildLibrary(librarian);
-}
+ sln.WriteLine("\tEndGlobalSection");
-// logs text line into a log file
-function logLine(line)
-{
- var stream = fso.OpenTextFile(logFileName, 8, true, 0);
- stream.WriteLine(line);
- stream.Close();
+ // some unknown stuff
+ sln.WriteLine("\tGlobalSection(ExtensibilityGlobals) = postSolution");
+ sln.WriteLine("\tEndGlobalSection");
+ sln.WriteLine("\tGlobalSection(ExtensibilityAddIns) = postSolution");
+ sln.WriteLine("\tEndGlobalSection");
+
+ sln.WriteLine("EndGlobal");
+ sln.Close();
}