[Cmake-commits] CMake branch, next, updated. v3.0.0-4061-g1ded851

Brad King brad.king at kitware.com
Wed Jul 2 09:50:26 EDT 2014


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  1ded8512c30c0627739cdd900f47efa6787cb948 (commit)
       via  71c981a213a463d05b4bdc73dfb445c80ce2a476 (commit)
      from  3811d18a7e1e1a7a70ce5ec35bea55e9f3c5f00d (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=1ded8512c30c0627739cdd900f47efa6787cb948
commit 1ded8512c30c0627739cdd900f47efa6787cb948
Merge: 3811d18 71c981a
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Wed Jul 2 09:50:26 2014 -0400
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Wed Jul 2 09:50:26 2014 -0400

    Merge topic 'libarchive-encoding' into next
    
    71c981a2 Encoding: Fix potential encoding issues with libarchive on Windows.


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=71c981a213a463d05b4bdc73dfb445c80ce2a476
commit 71c981a213a463d05b4bdc73dfb445c80ce2a476
Author:     Clinton Stimpson <clinton at elemtech.com>
AuthorDate: Thu Jun 12 06:46:40 2014 -0600
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Jul 2 09:49:45 2014 -0400

    Encoding: Fix potential encoding issues with libarchive on Windows.
    
    Because the 8bit string encoding in libarchive can be different than
    the 8bit string encoding in CMake, change to call the wide version
    of libarchive functions.  They are different if CMake is configured
    to use UTF-8 as the internal encoding.
    
    Create helper functions for some libarchive calls to use wstring
    internally on platforms supporting it.

diff --git a/Source/cmArchiveWrite.cxx b/Source/cmArchiveWrite.cxx
index 58f7573..3b0ead5 100644
--- a/Source/cmArchiveWrite.cxx
+++ b/Source/cmArchiveWrite.cxx
@@ -25,6 +25,28 @@ static std::string cm_archive_error_string(struct archive* a)
 }
 
 //----------------------------------------------------------------------------
+static void cm_archive_entry_copy_pathname(struct archive_entry* e,
+  const std::string& dest)
+{
+#if cmsys_STL_HAS_WSTRING
+  archive_entry_copy_pathname_w(e, cmsys::Encoding::ToWide(dest).c_str());
+#else
+  archive_entry_copy_pathname(e, dest.c_str());
+#endif
+}
+
+//----------------------------------------------------------------------------
+static void cm_archive_entry_copy_sourcepath(struct archive_entry* e,
+  const std::string& file)
+{
+#if cmsys_STL_HAS_WSTRING
+  archive_entry_copy_sourcepath_w(e, cmsys::Encoding::ToWide(file).c_str());
+#else
+  archive_entry_copy_sourcepath(e, file.c_str());
+#endif
+}
+
+//----------------------------------------------------------------------------
 class cmArchiveWrite::Entry
 {
   struct archive_entry* Object;
@@ -237,8 +259,8 @@ bool cmArchiveWrite::AddFile(const char* file,
     std::cout << dest << "\n";
     }
   Entry e;
-  archive_entry_copy_sourcepath(e, file);
-  archive_entry_set_pathname(e, dest.c_str());
+  cm_archive_entry_copy_sourcepath(e, file);
+  cm_archive_entry_copy_pathname(e, dest);
   if(archive_read_disk_entry_from_file(this->Disk, e, -1, 0) != ARCHIVE_OK)
     {
     this->Error = "archive_read_disk_entry_from_file: ";
diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx
index 2e417cb..d0fa834 100644
--- a/Source/cmSystemTools.cxx
+++ b/Source/cmSystemTools.cxx
@@ -91,6 +91,31 @@ extern char** environ;
 # endif
 #endif
 
+#if defined(CMAKE_BUILD_WITH_CMAKE)
+static std::string
+cm_archive_entry_pathname(struct archive_entry *entry)
+{
+#if cmsys_STL_HAS_WSTRING
+  return cmsys::Encoding::ToNarrow(
+    archive_entry_pathname_w(entry)).c_str();
+#else
+  return archive_entry_pathname(entry);
+#endif
+}
+
+static int cm_archive_read_open_file(struct archive* a,
+                                     const char* file,
+                                     int block_size)
+{
+#if cmsys_STL_HAS_WSTRING
+  std::wstring wfile = cmsys::Encoding::ToWide(file);
+  return archive_read_open_filename_w(a, wfile.c_str(), block_size);
+#else
+  return archive_read_open_filename(a, file, block_size);
+#endif
+}
+#endif
+
 #ifdef _WIN32
 class cmSystemToolsWindowsHandle
 {
@@ -1581,7 +1606,7 @@ namespace{
     }
   strftime(tmp, sizeof(tmp), fmt, localtime(&tim));
   fprintf(out, " %s ", tmp);
-  fprintf(out, "%s", archive_entry_pathname(entry));
+  fprintf(out, "%s", cm_archive_entry_pathname(entry).c_str());
 
   /* Extra information for links. */
   if (archive_entry_hardlink(entry)) /* Hard link */
@@ -1641,7 +1666,7 @@ bool extract_tar(const char* outFileName, bool verbose,
   archive_read_support_compression_all(a);
   archive_read_support_format_all(a);
   struct archive_entry *entry;
-  int r = archive_read_open_file(a, outFileName, 10240);
+  int r = cm_archive_read_open_file(a, outFileName, 10240);
   if(r)
     {
     cmSystemTools::Error("Problem with archive_read_open_file(): ",
@@ -1666,7 +1691,7 @@ bool extract_tar(const char* outFileName, bool verbose,
       if(extract)
         {
         cmSystemTools::Stdout("x ");
-        cmSystemTools::Stdout(archive_entry_pathname(entry));
+        cmSystemTools::Stdout(cm_archive_entry_pathname(entry).c_str());
         }
       else
         {
@@ -1676,7 +1701,7 @@ bool extract_tar(const char* outFileName, bool verbose,
       }
     else if(!extract)
       {
-      cmSystemTools::Stdout(archive_entry_pathname(entry));
+      cmSystemTools::Stdout(cm_archive_entry_pathname(entry).c_str());
       cmSystemTools::Stdout("\n");
       }
     if(extract)
@@ -1706,7 +1731,8 @@ bool extract_tar(const char* outFileName, bool verbose,
       else if(const char* linktext = archive_entry_symlink(entry))
         {
         std::cerr << "cmake -E tar: warning: skipping symbolic link \""
-                  << archive_entry_pathname(entry) << "\" -> \""
+                  << cm_archive_entry_pathname(entry)
+                  << "\" -> \""
                   << linktext << "\"." << std::endl;
         }
 #endif
@@ -1715,7 +1741,7 @@ bool extract_tar(const char* outFileName, bool verbose,
         cmSystemTools::Error("Problem with archive_write_header(): ",
                              archive_error_string(ext));
         cmSystemTools::Error("Current file: ",
-                             archive_entry_pathname(entry));
+                             cm_archive_entry_pathname(entry).c_str());
         break;
         }
       }

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

Summary of changes:


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list