You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@stdcxx.apache.org by Martin Sebor <se...@roguewave.com> on 2007/09/14 17:24:25 UTC

Re: svn commit: r575378 - in /incubator/stdcxx/trunk: etc/config/windows/runall.wsf util/cmdopt.cpp util/runall.cpp

faridz@apache.org wrote:
> Author: faridz
> Date: Thu Sep 13 10:39:29 2007
> New Revision: 575378

I suspect this change might be responsible for failures in last
night's Sun C++ builds. From:
http://people.apache.org/~sebor/stdcxx/results/solaris-10-amd64-sunpro-5.8-11D-575378-log.gz.txt

CC -c -D_RWSTDDEBUG    -I$(TOPDIR)/include -I$(BUILDDIR)/include 
-library=%none -g  -xarch=amd64 +w -errtags -erroff=hidef 
$(TOPDIR)/util/runall.cpp
"$(TOPDIR)/util/runall.cpp", line 564: Warning, truncwarn: Conversion of 
64 bit type value to "int" causes truncation.
"$(TOPDIR)/util/runall.cpp", line 573: Error, badinittype: Cannot use 
const char* to initialize char*.
1 Error(s) and 1 Warning(s) detected.

Martin

> 
> URL: http://svn.apache.org/viewvc?rev=575378&view=rev
> Log:
> 2007-09-13 Farid Zaripov <Fa...@epam.com>
> 
> 	STDCXX-543
> 	* runall.cpp (main): Added ability to pass list of the targets
> 	using the text file.
> 	* cmdopt.cpp: Updated usage_text with description of the
> 	changes above.
> 	* runall.wsf (runAllExamples): Pass targets using text file
> 	rather than using command line if the resulting command line
> 	length would exceed the maximum value.
> 
> Modified:
>     incubator/stdcxx/trunk/etc/config/windows/runall.wsf
>     incubator/stdcxx/trunk/util/cmdopt.cpp
>     incubator/stdcxx/trunk/util/runall.cpp
> 
> Modified: incubator/stdcxx/trunk/etc/config/windows/runall.wsf
> URL: http://svn.apache.org/viewvc/incubator/stdcxx/trunk/etc/config/windows/runall.wsf?rev=575378&r1=575377&r2=575378&view=diff
> ==============================================================================
> --- incubator/stdcxx/trunk/etc/config/windows/runall.wsf (original)
> +++ incubator/stdcxx/trunk/etc/config/windows/runall.wsf Thu Sep 13 10:39:29 2007
> @@ -249,31 +249,59 @@
>          runCmd += " -d \"" + srcDir + "\"";
>  
>      if (0 < runflags.length)
> -        runCmd += " " + runflags;
> -
> -    runCmd += " " + exeFiles.join(" ");
> +        runCmd += " " + runflags + " ";
>  
> +    var targets = exeFiles.join(" ");
> +    var target_list = null;
> +    
>      var prevDir = WshShell.CurrentDirectory;
>      WshShell.CurrentDirectory = exeDir;
> -    var oExec = WshShell.Exec("cmd /c " + runCmd + " 2>&1");
> -    WshShell.CurrentDirectory = prevDir;
>      
> -    if (!oExec)
> +    // the max command line len == 2047 for Win2000
> +    // http://support.microsoft.com/kb/830473
> +    var MaxCmdLineLen = 2047;
> +    if (MaxCmdLineLen >= runCmd.length + targets.length)
> +        runCmd += exeFiles.join(" ");
> +    else
>      {
> -        // WScript.Echo(itemInfo.name + " failed to run");
> -        return;
> +        target_list = "targets.lst";
> +        
> +        var strm = fso.CreateTextFile(target_list, true);
> +        for (var i = 0; i < exeFiles.length; ++i)
> +            strm.WriteLine(exeFiles[i]);
> +        strm.Close();
> +        
> +        runCmd += "@" + target_list;
>      }
>  
> -    var execOut = "";
> -    while (oExec.Status == 0)
> +    try
>      {
> +        runCmd = "cmd /c " + runCmd + " 2>&1";
> +        var oExec = WshShell.Exec(runCmd);
> +
> +        var execOut = "";
> +        while (oExec.Status == 0)
> +        {
> +            execOut += oExec.StdOut.ReadAll();
> +            WScript.Sleep(100);
> +        }
> +
>          execOut += oExec.StdOut.ReadAll();
> -        WScript.Sleep(100);
> +        WScript.Echo(execOut);
>      }
> -    
> -    execOut += oExec.StdOut.ReadAll();
> -    WScript.Echo(execOut);
> -    
> +    catch (e)
> +    {
> +        WScript.Echo("Exception in WshShell.Exec(" + runCmd + "): " + e.message);
> +        return;
> +    }
> +    finally
> +    {
> +        if (null != target_list)
> +            fso.DeleteFile(target_list);
> +
> +        WshShell.CurrentDirectory = prevDir;
> +    }
> +
>      for (var i = 0; i < arrInfo.length; ++i)
>      {
>          var itemInfo = arrInfo[i];
> 
> Modified: incubator/stdcxx/trunk/util/cmdopt.cpp
> URL: http://svn.apache.org/viewvc/incubator/stdcxx/trunk/util/cmdopt.cpp?rev=575378&r1=575377&r2=575378&view=diff
> ==============================================================================
> --- incubator/stdcxx/trunk/util/cmdopt.cpp (original)
> +++ incubator/stdcxx/trunk/util/cmdopt.cpp Thu Sep 13 10:39:29 2007
> @@ -89,6 +89,8 @@
>      "\n"
>      "  Treats each token in targets as the path to an executable. Each target\n"
>      "  enumerated is executed, and the output is processed after termination.\n"
> +    "  If target prepended by '@' character, target is treated as text file\n"
> +    "  with list of targets (one target per line).\n"
>      "  If the execution takes longer than a certain (configurable) amount of\n"
>      "  time, the process is killed.\n"
>      "\n"
> 
> Modified: incubator/stdcxx/trunk/util/runall.cpp
> URL: http://svn.apache.org/viewvc/incubator/stdcxx/trunk/util/runall.cpp?rev=575378&r1=575377&r2=575378&view=diff
> ==============================================================================
> --- incubator/stdcxx/trunk/util/runall.cpp (original)
> +++ incubator/stdcxx/trunk/util/runall.cpp Thu Sep 13 10:39:29 2007
> @@ -31,6 +31,7 @@
>  #include <stdio.h>      /* for FILE, fopen(), ... */
>  
>  #include <ctype.h>      /* for isspace */
> +#include <limits.h>     /* for PATH_MAX */
>  #include <sys/types.h>
>  #include <sys/stat.h>
>  #if !defined (_WIN32) && !defined (_WIN64)
> @@ -61,6 +62,12 @@
>  #  define S_IXOTH 0001
>  #endif   /* S_IXOTH */
>  
> +#if !defined (PATH_MAX) || PATH_MAX < 128 || 4096 < PATH_MAX
> +   // deal  with undefined, bogus, or excessive values
> +#  undef  PATH_MAX
> +#  define PATH_MAX   1024
> +#endif
> +
>  /**
>     Utility function to rework the argv array
>  
> @@ -537,11 +544,50 @@
>          struct target_status summary;
>          memset (&summary, 0, sizeof summary);
>  
> +        /* number of program's executed */
> +        int progs_count = 0;
> +
>          for (i = 0; i < argc; ++i) {
> -            run_target (&summary, argv [i], &target_template);
> +            const char* target = argv [i];
> +
> +            if ('@' == target [0]) {
> +                /* read targets from specified file */
> +                const char* lst_name = target + 1;
> +                FILE* lst = fopen (lst_name, "r");
> +                if (0 == lst) {
> +                    warn ("Error opening %s: %s\n", lst_name, strerror (errno));
> +                    break;
> +                }
> +
> +                while (!feof (lst)) {
> +                    char buf [PATH_MAX];
> +                    target = fgets (buf, sizeof (buf), lst);
> +
> +                    if (ferror (lst)) {
> +                        warn ("Error reading %s: %s\n", lst_name, strerror (errno));
> +                        break;
> +                    }
> +
> +                    if (target) {
> +                        /* remove terminating newline character if present */
> +                        if (char* pos = strchr (target, '\n'))
> +                            *pos = '\0';
> +                        if (*target) {
> +                            ++progs_count;
> +                            run_target (&summary, target, &target_template);
> +                        }
> +                    }
> +                }
> +
> +                fclose (lst);
> +            }
> +            else {
> +                ++progs_count;
> +                run_target (&summary, target, &target_template);
> +            }
>          }
>  
> -        print_footer (argc, &summary);
> +        print_footer (progs_count, &summary);
>  
>          if (target_template.argv [0])
>              free (target_template.argv [0]);
> 
>