[Cmake-commits] CMake branch, next, updated. v3.4.2-2023-g683f5b1

Brad King brad.king at kitware.com
Tue Jan 19 16:02:18 EST 2016


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".

The branch, next has been updated
       via  683f5b178974acfe2d387e2ab0a4040ed023b51e (commit)
       via  1040e690c6c99979f8edf2a121de6d835be96dbe (commit)
       via  ce3b713baa1c899ae7739c192040e24445368a0a (commit)
       via  dc039cc02c857b2c418481533a236dad6a586a7f (commit)
       via  ffa2a8c967df09c4630e50e7c7339e36b027ecaf (commit)
       via  92e9bb21758f73266e1f805e366ce90d2cbd688d (commit)
       via  fb1526f57fe4720aff596b312e6a767502b86e13 (commit)
      from  2610a2b988323fa4653fb602935c3a6079d8b68a (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=683f5b178974acfe2d387e2ab0a4040ed023b51e
commit 683f5b178974acfe2d387e2ab0a4040ed023b51e
Merge: 2610a2b 1040e69
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Tue Jan 19 16:02:17 2016 -0500
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Tue Jan 19 16:02:17 2016 -0500

    Merge topic 'cleanup-RunSingleCommand' into next
    
    1040e690 cmSystemTools: Teach RunSingleCommand to merge child pipes when possible
    ce3b713b cmSystemTools: Simplify RunSingleCommand output string construction
    dc039cc0 cmSystemTools: Drop redundant condition in RunSingleCommand
    ffa2a8c9 cmSystemTools: Rename OUTPUT_NORMAL to OUTPUT_FORWARD to clarify its purpose
    92e9bb21 cmcmd.cxx: Remove unused code in __run_iwyu implementation
    fb1526f5 cmake: Change `-E chdir` to pass through stdout/stderr directly


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=1040e690c6c99979f8edf2a121de6d835be96dbe
commit 1040e690c6c99979f8edf2a121de6d835be96dbe
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Jan 14 16:11:23 2016 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Tue Jan 19 15:55:05 2016 -0500

    cmSystemTools: Teach RunSingleCommand to merge child pipes when possible
    
    Audit the code to make sure there are no callers that use OUTPUT_MERGE
    with separate capture strings.  Then change RunSingleCommand to
    implement output merging by giving the child process a single pipe for
    both its stdout and stderr descriptors.  This will more cleanly merge
    the content on atomic write boundaries in the child instead of on
    arbitrary buffering boundaries in the parent.

diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx
index 3a730b2..3ba7287 100644
--- a/Source/cmSystemTools.cxx
+++ b/Source/cmSystemTools.cxx
@@ -17,6 +17,7 @@
 #include <time.h>
 #include <string.h>
 #include <stdlib.h>
+#include <assert.h>
 #ifdef __QNX__
 # include <malloc.h> /* for malloc/free on QNX */
 #endif
@@ -673,7 +674,16 @@ bool cmSystemTools::RunSingleCommand(std::vector<std::string>const& command,
     {
     cmsysProcess_SetPipeShared(cp, cmsysProcess_Pipe_STDOUT, 1);
     cmsysProcess_SetPipeShared(cp, cmsysProcess_Pipe_STDERR, 1);
+    captureStdOut = 0;
+    captureStdErr = 0;
     }
+  else if (outputflag == OUTPUT_MERGE ||
+           (captureStdErr && captureStdErr == captureStdOut))
+    {
+    cmsysProcess_SetOption(cp, cmsysProcess_Option_MergeOutput, 1);
+    captureStdErr = 0;
+    }
+  assert(!captureStdErr || captureStdErr != captureStdOut);
 
   cmsysProcess_SetTimeout(cp, timeout);
   cmsysProcess_Execute(cp);
@@ -699,38 +709,26 @@ bool cmSystemTools::RunSingleCommand(std::vector<std::string>const& command,
           }
         }
 
-      if(pipe == cmsysProcess_Pipe_STDOUT ||
-         (pipe == cmsysProcess_Pipe_STDERR &&
-          captureStdOut == captureStdErr))
+      if (pipe == cmsysProcess_Pipe_STDOUT)
         {
-        if (captureStdOut)
+        if (outputflag != OUTPUT_NONE)
           {
-          tempStdOut.insert(tempStdOut.end(), data, data+length);
+          cmSystemTools::Stdout(data, length);
           }
-        }
-      else if(pipe == cmsysProcess_Pipe_STDERR)
-        {
-        if (captureStdErr)
+        if (captureStdOut)
           {
-          tempStdErr.insert(tempStdErr.end(), data, data+length);
+          tempStdOut.insert(tempStdOut.end(), data, data+length);
           }
         }
-      if(outputflag != OUTPUT_NONE)
+      else if (pipe == cmsysProcess_Pipe_STDERR)
         {
-        if(outputflag == OUTPUT_MERGE)
+        if (outputflag != OUTPUT_NONE)
           {
-          cmSystemTools::Stdout(data, length);
+          cmSystemTools::Stderr(data, length);
           }
-        else
+        if (captureStdErr)
           {
-          if(pipe == cmsysProcess_Pipe_STDERR)
-            {
-            cmSystemTools::Stderr(data, length);
-            }
-          else if(pipe == cmsysProcess_Pipe_STDOUT)
-            {
-            cmSystemTools::Stdout(data, length);
-            }
+          tempStdErr.insert(tempStdErr.end(), data, data+length);
           }
         }
       }
@@ -741,7 +739,7 @@ bool cmSystemTools::RunSingleCommand(std::vector<std::string>const& command,
     {
     captureStdOut->assign(tempStdOut.begin(), tempStdOut.end());
     }
-  if (captureStdErr && captureStdErr != captureStdOut)
+  if (captureStdErr)
     {
     captureStdErr->assign(tempStdErr.begin(), tempStdErr.end());
     }

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=ce3b713baa1c899ae7739c192040e24445368a0a
commit ce3b713baa1c899ae7739c192040e24445368a0a
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Jan 14 16:11:00 2016 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Tue Jan 19 15:51:00 2016 -0500

    cmSystemTools: Simplify RunSingleCommand output string construction
    
    Assign to the result strings instead setting to empty and appending.
    The old approach was left from when we directly buffered output in
    the strings.

diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx
index 2b0c2ed..3a730b2 100644
--- a/Source/cmSystemTools.cxx
+++ b/Source/cmSystemTools.cxx
@@ -660,14 +660,6 @@ bool cmSystemTools::RunSingleCommand(std::vector<std::string>const& command,
     argv.push_back(a->c_str());
     }
   argv.push_back(0);
-  if ( captureStdOut )
-    {
-    *captureStdOut = "";
-    }
-  if (captureStdErr && captureStdErr != captureStdOut)
-    {
-    *captureStdErr = "";
-    }
 
   cmsysProcess* cp = cmsysProcess_New();
   cmsysProcess_SetCommand(cp, &*argv.begin());
@@ -745,14 +737,13 @@ bool cmSystemTools::RunSingleCommand(std::vector<std::string>const& command,
     }
 
   cmsysProcess_WaitForExit(cp, 0);
-  if ( captureStdOut && tempStdOut.begin() != tempStdOut.end())
+  if (captureStdOut)
     {
-    captureStdOut->append(&*tempStdOut.begin(), tempStdOut.size());
+    captureStdOut->assign(tempStdOut.begin(), tempStdOut.end());
     }
-  if ( captureStdErr && captureStdErr != captureStdOut &&
-       tempStdErr.begin() != tempStdErr.end())
+  if (captureStdErr && captureStdErr != captureStdOut)
     {
-    captureStdErr->append(&*tempStdErr.begin(), tempStdErr.size());
+    captureStdErr->assign(tempStdErr.begin(), tempStdErr.end());
     }
 
   bool result = true;

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=dc039cc02c857b2c418481533a236dad6a586a7f
commit dc039cc02c857b2c418481533a236dad6a586a7f
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Jan 14 16:14:25 2016 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Tue Jan 19 15:49:48 2016 -0500

    cmSystemTools: Drop redundant condition in RunSingleCommand
    
    The output processing loop is already guarded by a condition so we do
    not need to repeat the condition inside the loop.

diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx
index a89a6e0b..2b0c2ed 100644
--- a/Source/cmSystemTools.cxx
+++ b/Source/cmSystemTools.cxx
@@ -696,19 +696,17 @@ bool cmSystemTools::RunSingleCommand(std::vector<std::string>const& command,
     {
     while((pipe = cmsysProcess_WaitForData(cp, &data, &length, 0)) > 0)
       {
-      if(captureStdOut || captureStdErr || outputflag != OUTPUT_NONE)
+      // Translate NULL characters in the output into valid text.
+      // Visual Studio 7 puts these characters in the output of its
+      // build process.
+      for(int i=0; i < length; ++i)
         {
-        // Translate NULL characters in the output into valid text.
-        // Visual Studio 7 puts these characters in the output of its
-        // build process.
-        for(int i=0; i < length; ++i)
+        if(data[i] == '\0')
           {
-          if(data[i] == '\0')
-            {
-            data[i] = ' ';
-            }
+          data[i] = ' ';
           }
         }
+
       if(pipe == cmsysProcess_Pipe_STDOUT ||
          (pipe == cmsysProcess_Pipe_STDERR &&
           captureStdOut == captureStdErr))

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=ffa2a8c967df09c4630e50e7c7339e36b027ecaf
commit ffa2a8c967df09c4630e50e7c7339e36b027ecaf
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Jan 14 14:54:58 2016 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Tue Jan 19 15:47:48 2016 -0500

    cmSystemTools: Rename OUTPUT_NORMAL to OUTPUT_FORWARD to clarify its purpose
    
    The OUTPUT_NORMAL value is not really "normal" and has only one caller.
    Rename it to OUTPUT_FORWARD to clarify that we are explicitly forwarding
    the output.

diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx
index 2126c71..c50bf66 100644
--- a/Source/cmGlobalGenerator.cxx
+++ b/Source/cmGlobalGenerator.cxx
@@ -1850,7 +1850,7 @@ int cmGlobalGenerator::Build(
       !makeCommand.empty() && cmSystemTools::LowerCase(
         cmSystemTools::GetFilenameName(makeCommand[0])) == "vcexpress.exe")
     {
-    outputflag = cmSystemTools::OUTPUT_NORMAL;
+    outputflag = cmSystemTools::OUTPUT_FORWARD;
     }
 
   // should we do a clean first?
diff --git a/Source/cmSystemTools.h b/Source/cmSystemTools.h
index 9cafbec..f511ae4 100644
--- a/Source/cmSystemTools.h
+++ b/Source/cmSystemTools.h
@@ -203,7 +203,7 @@ public:
    * Output is controlled with outputflag. If outputflag is OUTPUT_NONE, no
    * user-viewable output from the program being run will be generated.
    * OUTPUT_MERGE is the legacy behaviour where stdout and stderr are merged
-   * into stdout.  OUTPUT_NORMAL passes through the output to stdout/stderr as
+   * into stdout.  OUTPUT_FORWARD copies the output to stdout/stderr as
    * it was received.  OUTPUT_PASSTHROUGH passes through the original handles.
    *
    * If timeout is specified, the command will be terminated after
@@ -223,7 +223,7 @@ public:
    {
      OUTPUT_NONE = 0,
      OUTPUT_MERGE,
-     OUTPUT_NORMAL,
+     OUTPUT_FORWARD,
      OUTPUT_PASSTHROUGH
    };
   static bool RunSingleCommand(const char* command,

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=92e9bb21758f73266e1f805e366ce90d2cbd688d
commit 92e9bb21758f73266e1f805e366ce90d2cbd688d
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Jan 14 14:42:11 2016 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Tue Jan 19 15:46:15 2016 -0500

    cmcmd.cxx: Remove unused code in __run_iwyu implementation
    
    Do not try to capture stderr with OUTPUT_PASSTHROUGH.  RunSingleCommand
    will never populate it.

diff --git a/Source/cmcmd.cxx b/Source/cmcmd.cxx
index 7da81bb..8dd902b 100644
--- a/Source/cmcmd.cxx
+++ b/Source/cmcmd.cxx
@@ -361,11 +361,10 @@ int cmcmd::ExecuteCMakeCommand(std::vector<std::string>& args)
         }
 
       // Now run the real compiler command and return its result value.
-      if(!cmSystemTools::RunSingleCommand(orig_cmd, 0, &stdErr, &ret, 0,
+      if(!cmSystemTools::RunSingleCommand(orig_cmd, 0, 0, &ret, 0,
                                           cmSystemTools::OUTPUT_PASSTHROUGH))
         {
-        std::cerr << "Error running '" << orig_cmd[0] << "': "
-                  << stdErr << "\n";
+        std::cerr << "Error running '" << orig_cmd[0] << "'\n";
         return 1;
         }
       return ret;

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=fb1526f57fe4720aff596b312e6a767502b86e13
commit fb1526f57fe4720aff596b312e6a767502b86e13
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Jan 14 14:41:09 2016 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Tue Jan 19 15:44:30 2016 -0500

    cmake: Change `-E chdir` to pass through stdout/stderr directly
    
    Use OUTPUT_PASSTHROUGH instead of OUTPUT_NORMAL in order to avoid
    buffering the output just to re-print it.

diff --git a/Source/cmcmd.cxx b/Source/cmcmd.cxx
index fb7b1f5..7da81bb 100644
--- a/Source/cmcmd.cxx
+++ b/Source/cmcmd.cxx
@@ -621,7 +621,7 @@ int cmcmd::ExecuteCMakeCommand(std::vector<std::string>& args)
       int retval = 0;
       int timeout = 0;
       if ( cmSystemTools::RunSingleCommand(command.c_str(), 0, 0, &retval,
-             directory.c_str(), cmSystemTools::OUTPUT_NORMAL, timeout) )
+             directory.c_str(), cmSystemTools::OUTPUT_PASSTHROUGH, timeout) )
         {
         return retval;
         }

-----------------------------------------------------------------------

Summary of changes:
 Source/cmGlobalGenerator.cxx |    2 +-
 Source/cmSystemTools.cxx     |   75 +++++++++++++++++-------------------------
 Source/cmSystemTools.h       |    4 +--
 Source/cmcmd.cxx             |    7 ++--
 4 files changed, 37 insertions(+), 51 deletions(-)


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list