[Cmake-commits] CMake branch, next, updated. v2.8.12.1-6333-gbe4160a

Brad King brad.king at kitware.com
Fri Dec 20 14:28:37 EST 2013


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  be4160a7f864528dd2b8d9f069152ad84c51adc8 (commit)
       via  f4fcfc6ef354c9e56ef054ddf77151627fbea5dc (commit)
       via  7aa3c2015f773d9b9433ca72242d03470c461c27 (commit)
      from  57cb856b7ffec333b10d1165f888bf972b93d3f1 (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 -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=be4160a7f864528dd2b8d9f069152ad84c51adc8
commit be4160a7f864528dd2b8d9f069152ad84c51adc8
Merge: 57cb856 f4fcfc6
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Fri Dec 20 14:28:34 2013 -0500
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Fri Dec 20 14:28:34 2013 -0500

    Merge topic 'update-kwsys' into next
    
    f4fcfc6 Merge branch 'upstream-kwsys' into update-kwsys
    7aa3c20 KWSys 2013-12-19 (2426b57d)


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=f4fcfc6ef354c9e56ef054ddf77151627fbea5dc
commit f4fcfc6ef354c9e56ef054ddf77151627fbea5dc
Merge: 6820882 7aa3c20
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Fri Dec 20 14:27:36 2013 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Fri Dec 20 14:27:36 2013 -0500

    Merge branch 'upstream-kwsys' into update-kwsys


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=7aa3c2015f773d9b9433ca72242d03470c461c27
commit 7aa3c2015f773d9b9433ca72242d03470c461c27
Author:     KWSys Robot <kwrobot at kitware.com>
AuthorDate: Thu Dec 19 08:01:48 2013 -0700
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Fri Dec 20 14:27:32 2013 -0500

    KWSys 2013-12-19 (2426b57d)
    
    Extract upstream KWSys using the following shell commands.
    
    $ git archive --prefix=upstream-kwsys/ 2426b57d | tar x
    $ git shortlog --no-merges --abbrev=8 --format='%h %s' 88165c5e..2426b57d
    Clinton Stimpson (1):
          2426b57d Encoding: Add support for program arguments argc/argv.
    
    Change-Id: Id1fbc042a093b1de398753ffa16d4f9449e99423

diff --git a/Encoding.hxx.in b/Encoding.hxx.in
index 60a4a8e..aba4175 100644
--- a/Encoding.hxx.in
+++ b/Encoding.hxx.in
@@ -14,6 +14,7 @@
 
 #include <@KWSYS_NAMESPACE@/Configure.hxx>
 #include <@KWSYS_NAMESPACE@/stl/string>
+#include <@KWSYS_NAMESPACE@/stl/vector>
 
 /* Define these macros temporarily to keep the code readable.  */
 #if !defined (KWSYS_NAMESPACE) && !@KWSYS_NAMESPACE at _NAME_IS_KWSYS
@@ -25,6 +26,36 @@ namespace @KWSYS_NAMESPACE@
 class @KWSYS_NAMESPACE at _EXPORT Encoding
 {
 public:
+
+  // Container class for argc/argv.
+  class CommandLineArguments
+  {
+    public:
+      // On Windows, get the program command line arguments
+      // in this Encoding module's 8 bit encoding.
+      // On other platforms the given argc/argv is used, and
+      // to be consistent, should be the argc/argv from main().
+      static CommandLineArguments Main(int argc, char const* const* argv);
+
+      // Construct CommandLineArguments with the given
+      // argc/argv.  It is assumed that the string is already
+      // in the encoding used by this module.
+      CommandLineArguments(int argc, char const* const* argv);
+
+      // Construct CommandLineArguments with the given
+      // argc and wide argv.  This is useful if wmain() is used.
+      CommandLineArguments(int argc, wchar_t const* const* argv);
+      ~CommandLineArguments();
+      CommandLineArguments(const CommandLineArguments&);
+      CommandLineArguments& operator=(const CommandLineArguments&);
+
+      int argc() const;
+      char const* const* argv() const;
+
+    protected:
+      std::vector<char*> argv_;
+  };
+
   /**
    * Convert between char and wchar_t
    */
diff --git a/EncodingCXX.cxx b/EncodingCXX.cxx
index aebc148..f76deb5 100644
--- a/EncodingCXX.cxx
+++ b/EncodingCXX.cxx
@@ -29,6 +29,7 @@
 #endif
 
 #include <stdlib.h>
+#include <string.h>
 
 #ifdef _MSC_VER
 # pragma warning (disable: 4786)
@@ -42,6 +43,98 @@
 namespace KWSYS_NAMESPACE
 {
 
+Encoding::CommandLineArguments
+Encoding::CommandLineArguments::Main(int argc, char const* const* argv)
+{
+#ifdef _WIN32
+  (void) argc;
+  (void) argv;
+
+  int ac;
+  LPWSTR* w_av = CommandLineToArgvW(GetCommandLineW(), &ac);
+
+  std::vector<std::string> av1(ac);
+  std::vector<char const*> av2(ac);
+  for(int i=0; i<ac; i++)
+    {
+    av1[i] = ToNarrow(w_av[i]);
+    av2[i] = av1[i].c_str();
+    }
+  LocalFree(w_av);
+  return CommandLineArguments(ac, &av2[0]);
+#else
+  return CommandLineArguments(argc, argv);
+#endif
+}
+
+Encoding::CommandLineArguments::CommandLineArguments(int ac,
+                                                     char const* const* av)
+{
+  this->argv_.resize(ac+1);
+  for(int i=0; i<ac; i++)
+    {
+    this->argv_[i] = strdup(av[i]);
+    }
+  this->argv_[ac] = 0;
+}
+
+Encoding::CommandLineArguments::CommandLineArguments(int ac,
+                                                     wchar_t const* const* av)
+{
+  this->argv_.resize(ac+1);
+  for(int i=0; i<ac; i++)
+    {
+    this->argv_[i] = kwsysEncoding_DupToNarrow(av[i]);
+    }
+  this->argv_[ac] = 0;
+}
+
+Encoding::CommandLineArguments::~CommandLineArguments()
+{
+  for(size_t i=0; i<this->argv_.size(); i++)
+    {
+    free(argv_[i]);
+    }
+}
+
+Encoding::CommandLineArguments::
+  CommandLineArguments(const CommandLineArguments& other)
+{
+  this->argv_.resize(other.argv_.size());
+  for(size_t i=0; i<this->argv_.size(); i++)
+    {
+    this->argv_[i] = other.argv_[i] ? strdup(other.argv_[i]) : 0;
+    }
+}
+
+Encoding::CommandLineArguments&
+Encoding::CommandLineArguments::operator=(const CommandLineArguments& other)
+{
+  size_t i;
+  for(i=0; i<this->argv_.size(); i++)
+    {
+    free(this->argv_[i]);
+    }
+
+  this->argv_.resize(other.argv_.size());
+  for(i=0; i<this->argv_.size(); i++)
+    {
+    this->argv_[i] = other.argv_[i] ? strdup(other.argv_[i]) : 0;
+    }
+
+  return *this;
+}
+
+int Encoding::CommandLineArguments::argc() const
+{
+  return static_cast<int>(this->argv_.size() - 1);
+}
+
+char const* const* Encoding::CommandLineArguments::argv() const
+{
+  return &this->argv_[0];
+}
+
 #if KWSYS_STL_HAS_WSTRING
 
 kwsys_stl::wstring Encoding::ToWide(const kwsys_stl::string& str)
diff --git a/testEncoding.cxx b/testEncoding.cxx
index a65c430..094588c 100644
--- a/testEncoding.cxx
+++ b/testEncoding.cxx
@@ -145,6 +145,36 @@ static int testRobustEncoding()
   return ret;
 }
 
+static int testCommandLineArguments()
+{
+  int status = 0;
+
+  char const* argv[2] = {
+    "./app.exe",
+    (char const*)helloWorldStrings[1]
+  };
+
+  kwsys::Encoding::CommandLineArguments args(2, argv);
+  kwsys::Encoding::CommandLineArguments arg2 =
+    kwsys::Encoding::CommandLineArguments(args);
+
+  char const* const* u8_argv = args.argv();
+  for(int i=0; i<args.argc(); i++)
+  {
+    char const* u8_arg = u8_argv[i];
+    if(strcmp(argv[i], u8_arg) != 0)
+    {
+      std::cout << "argv[" << i << "] " << argv[i] << " != "
+                << u8_arg << std::endl;
+      status++;
+    }
+  }
+
+  kwsys::Encoding::CommandLineArguments args3 =
+    kwsys::Encoding::CommandLineArguments::Main(2, argv);
+
+  return status;
+}
 
 //----------------------------------------------------------------------------
 int testEncoding(int, char*[])
@@ -163,6 +193,7 @@ int testEncoding(int, char*[])
 
   ret |= testHelloWorldEncoding();
   ret |= testRobustEncoding();
+  ret |= testCommandLineArguments();
 
   return ret;
 }

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

Summary of changes:
 Source/kwsys/Encoding.hxx.in  |   31 ++++++++++++++
 Source/kwsys/EncodingCXX.cxx  |   93 +++++++++++++++++++++++++++++++++++++++++
 Source/kwsys/testEncoding.cxx |   31 ++++++++++++++
 3 files changed, 155 insertions(+), 0 deletions(-)


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list