You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by we...@apache.org on 2017/01/26 23:38:26 UTC

arrow git commit: ARROW-513: [C++] Fixing Appveyor / MSVC build

Repository: arrow
Updated Branches:
  refs/heads/master a90b5f363 -> aac2e70c1


ARROW-513: [C++] Fixing Appveyor / MSVC build

Visual Studio 2015 (MSVC 19.0) seems to have a compiler bug with inheriting private ctors. It didn't like the private `using StreamWriter::StreamWriter` in the `FileWriter` implementation. This is not consistent with Microsoft's Modern C++ support matrix https://msdn.microsoft.com/en-us/library/hh567368.aspx, so perhaps they now support inheriting *public* constructors.

Author: Wes McKinney <we...@twosigma.com>

Closes #305 from wesm/ARROW-513 and squashes the following commits:

9362674 [Wes McKinney] Visual Studio 2015 has limited support for inheriting constructors
93119e5 [Wes McKinney] Export some more classes to appease MSVC
9d4887c [Wes McKinney] Disable MSVC 4251 warning, add some ARROW_EXPORT visibility macros


Project: http://git-wip-us.apache.org/repos/asf/arrow/repo
Commit: http://git-wip-us.apache.org/repos/asf/arrow/commit/aac2e70c
Tree: http://git-wip-us.apache.org/repos/asf/arrow/tree/aac2e70c
Diff: http://git-wip-us.apache.org/repos/asf/arrow/diff/aac2e70c

Branch: refs/heads/master
Commit: aac2e70c1639cb45c5300b18dd94b000ba4b79db
Parents: a90b5f3
Author: Wes McKinney <we...@twosigma.com>
Authored: Thu Jan 26 18:38:19 2017 -0500
Committer: Wes McKinney <we...@twosigma.com>
Committed: Thu Jan 26 18:38:19 2017 -0500

----------------------------------------------------------------------
 cpp/src/arrow/io/interfaces.h        | 16 ++++++++--------
 cpp/src/arrow/io/io-file-test.cc     | 16 ++++++----------
 cpp/src/arrow/ipc/file.cc            |  3 +++
 cpp/src/arrow/ipc/file.h             |  2 +-
 cpp/src/arrow/ipc/metadata.h         |  6 +++---
 cpp/src/arrow/util/CMakeLists.txt    | 28 ++++++++++++----------------
 cpp/src/arrow/util/file-to-stream.cc |  4 ++--
 cpp/src/arrow/util/io-util.h         | 22 +++++++++-------------
 cpp/src/arrow/util/stream-to-file.cc |  6 +++---
 cpp/src/arrow/util/visibility.h      |  5 +++++
 10 files changed, 52 insertions(+), 56 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/arrow/blob/aac2e70c/cpp/src/arrow/io/interfaces.h
----------------------------------------------------------------------
diff --git a/cpp/src/arrow/io/interfaces.h b/cpp/src/arrow/io/interfaces.h
index 7868090..e9f07f0 100644
--- a/cpp/src/arrow/io/interfaces.h
+++ b/cpp/src/arrow/io/interfaces.h
@@ -42,7 +42,7 @@ struct ObjectType {
   enum type { FILE, DIRECTORY };
 };
 
-class FileSystemClient {
+class ARROW_EXPORT FileSystemClient {
  public:
   virtual ~FileSystemClient() {}
 };
@@ -64,7 +64,7 @@ class ARROW_EXPORT FileInterface {
   DISALLOW_COPY_AND_ASSIGN(FileInterface);
 };
 
-class Seekable {
+class ARROW_EXPORT Seekable {
  public:
   virtual Status Seek(int64_t position) = 0;
 };
@@ -76,7 +76,7 @@ class ARROW_EXPORT Writeable {
   Status Write(const std::string& data);
 };
 
-class Readable {
+class ARROW_EXPORT Readable {
  public:
   virtual Status Read(int64_t nbytes, int64_t* bytes_read, uint8_t* out) = 0;
 
@@ -84,12 +84,12 @@ class Readable {
   virtual Status Read(int64_t nbytes, std::shared_ptr<Buffer>* out) = 0;
 };
 
-class OutputStream : virtual public FileInterface, public Writeable {
+class ARROW_EXPORT OutputStream : virtual public FileInterface, public Writeable {
  protected:
   OutputStream() {}
 };
 
-class InputStream : virtual public FileInterface, public Readable {
+class ARROW_EXPORT InputStream : virtual public FileInterface, public Readable {
  protected:
   InputStream() {}
 };
@@ -118,7 +118,7 @@ class ARROW_EXPORT ReadableFileInterface : public InputStream, public Seekable {
   ReadableFileInterface();
 };
 
-class WriteableFileInterface : public OutputStream, public Seekable {
+class ARROW_EXPORT WriteableFileInterface : public OutputStream, public Seekable {
  public:
   virtual Status WriteAt(int64_t position, const uint8_t* data, int64_t nbytes) = 0;
 
@@ -126,8 +126,8 @@ class WriteableFileInterface : public OutputStream, public Seekable {
   WriteableFileInterface() { set_mode(FileMode::READ); }
 };
 
-class ReadWriteFileInterface : public ReadableFileInterface,
-                               public WriteableFileInterface {
+class ARROW_EXPORT ReadWriteFileInterface : public ReadableFileInterface,
+                                            public WriteableFileInterface {
  protected:
   ReadWriteFileInterface() { ReadableFileInterface::set_mode(FileMode::READWRITE); }
 };

http://git-wip-us.apache.org/repos/asf/arrow/blob/aac2e70c/cpp/src/arrow/io/io-file-test.cc
----------------------------------------------------------------------
diff --git a/cpp/src/arrow/io/io-file-test.cc b/cpp/src/arrow/io/io-file-test.cc
index 86a3287..5810c82 100644
--- a/cpp/src/arrow/io/io-file-test.cc
+++ b/cpp/src/arrow/io/io-file-test.cc
@@ -341,14 +341,12 @@ TEST_F(TestReadableFile, ThreadSafety) {
   std::atomic<int> correct_count(0);
   const int niter = 10000;
 
-  auto ReadData = [&correct_count, &data, niter, this] () {
+  auto ReadData = [&correct_count, &data, niter, this]() {
     std::shared_ptr<Buffer> buffer;
 
     for (int i = 0; i < niter; ++i) {
       ASSERT_OK(file_->ReadAt(0, 3, &buffer));
-      if (0 == memcmp(data.c_str(), buffer->data(), 3)) {
-        correct_count += 1;
-      }
+      if (0 == memcmp(data.c_str(), buffer->data(), 3)) { correct_count += 1; }
     }
   };
 
@@ -498,20 +496,18 @@ TEST_F(TestMemoryMappedFile, ThreadSafety) {
 
   std::shared_ptr<MemoryMappedFile> file;
   ASSERT_OK(MemoryMappedFile::Open(path, FileMode::READWRITE, &file));
-  ASSERT_OK(file->Write(reinterpret_cast<const uint8_t*>(data.c_str()),
-          static_cast<int64_t>(data.size())));
+  ASSERT_OK(file->Write(
+      reinterpret_cast<const uint8_t*>(data.c_str()), static_cast<int64_t>(data.size())));
 
   std::atomic<int> correct_count(0);
   const int niter = 10000;
 
-  auto ReadData = [&correct_count, &data, niter, &file] () {
+  auto ReadData = [&correct_count, &data, niter, &file]() {
     std::shared_ptr<Buffer> buffer;
 
     for (int i = 0; i < niter; ++i) {
       ASSERT_OK(file->ReadAt(0, 3, &buffer));
-      if (0 == memcmp(data.c_str(), buffer->data(), 3)) {
-        correct_count += 1;
-      }
+      if (0 == memcmp(data.c_str(), buffer->data(), 3)) { correct_count += 1; }
     }
   };
 

http://git-wip-us.apache.org/repos/asf/arrow/blob/aac2e70c/cpp/src/arrow/ipc/file.cc
----------------------------------------------------------------------
diff --git a/cpp/src/arrow/ipc/file.cc b/cpp/src/arrow/ipc/file.cc
index bc086e3..3b18326 100644
--- a/cpp/src/arrow/ipc/file.cc
+++ b/cpp/src/arrow/ipc/file.cc
@@ -158,6 +158,9 @@ Status FileFooter::GetSchema(std::shared_ptr<Schema>* out) const {
 // ----------------------------------------------------------------------
 // File writer implementation
 
+FileWriter::FileWriter(io::OutputStream* sink, const std::shared_ptr<Schema>& schema)
+    : StreamWriter(sink, schema) {}
+
 Status FileWriter::Open(io::OutputStream* sink, const std::shared_ptr<Schema>& schema,
     std::shared_ptr<FileWriter>* out) {
   *out = std::shared_ptr<FileWriter>(new FileWriter(sink, schema));  // ctor is private

http://git-wip-us.apache.org/repos/asf/arrow/blob/aac2e70c/cpp/src/arrow/ipc/file.h
----------------------------------------------------------------------
diff --git a/cpp/src/arrow/ipc/file.h b/cpp/src/arrow/ipc/file.h
index 7696954..cf0baab 100644
--- a/cpp/src/arrow/ipc/file.h
+++ b/cpp/src/arrow/ipc/file.h
@@ -78,7 +78,7 @@ class ARROW_EXPORT FileWriter : public StreamWriter {
   Status Close() override;
 
  private:
-  using StreamWriter::StreamWriter;
+  FileWriter(io::OutputStream* sink, const std::shared_ptr<Schema>& schema);
 
   Status Start() override;
 

http://git-wip-us.apache.org/repos/asf/arrow/blob/aac2e70c/cpp/src/arrow/ipc/metadata.h
----------------------------------------------------------------------
diff --git a/cpp/src/arrow/ipc/metadata.h b/cpp/src/arrow/ipc/metadata.h
index 6e15ef3..81e3dbd 100644
--- a/cpp/src/arrow/ipc/metadata.h
+++ b/cpp/src/arrow/ipc/metadata.h
@@ -85,12 +85,12 @@ class ARROW_EXPORT SchemaMetadata {
 };
 
 // Field metadata
-struct FieldMetadata {
+struct ARROW_EXPORT FieldMetadata {
   int32_t length;
   int32_t null_count;
 };
 
-struct BufferMetadata {
+struct ARROW_EXPORT BufferMetadata {
   int32_t page;
   int64_t offset;
   int64_t length;
@@ -149,7 +149,7 @@ class ARROW_EXPORT Message {
   std::unique_ptr<MessageImpl> impl_;
 };
 
-struct FileBlock {
+struct ARROW_EXPORT FileBlock {
   FileBlock() {}
   FileBlock(int64_t offset, int32_t metadata_length, int64_t body_length)
       : offset(offset), metadata_length(metadata_length), body_length(body_length) {}

http://git-wip-us.apache.org/repos/asf/arrow/blob/aac2e70c/cpp/src/arrow/util/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/cpp/src/arrow/util/CMakeLists.txt b/cpp/src/arrow/util/CMakeLists.txt
index 0830ee2..19b1e19 100644
--- a/cpp/src/arrow/util/CMakeLists.txt
+++ b/cpp/src/arrow/util/CMakeLists.txt
@@ -68,24 +68,20 @@ if (ARROW_BUILD_BENCHMARKS)
   endif()
 endif()
 
-if (ARROW_BUILD_UTILITIES)
-  if (APPLE)
-    set(UTIL_LINK_LIBS
-      arrow_ipc_static
-      arrow_io_static
-      arrow_static
-      boost_filesystem_static
-      boost_system_static
-      dl)
-  else()
+if (ARROW_IPC AND ARROW_BUILD_UTILITIES)
+  set(UTIL_LINK_LIBS
+    arrow_ipc_static
+    arrow_io_static
+    arrow_static
+    boost_filesystem_static
+    boost_system_static
+    dl)
+
+  if (NOT APPLE)
     set(UTIL_LINK_LIBS
-      arrow_ipc_static
-      arrow_io_static
-      arrow_static
-      pthread
+      ${UTIL_LINK_LIBS}
       boost_filesystem_static
-      boost_system_static
-      dl)
+      boost_system_static)
   endif()
 
   add_executable(file-to-stream file-to-stream.cc)

http://git-wip-us.apache.org/repos/asf/arrow/blob/aac2e70c/cpp/src/arrow/util/file-to-stream.cc
----------------------------------------------------------------------
diff --git a/cpp/src/arrow/util/file-to-stream.cc b/cpp/src/arrow/util/file-to-stream.cc
index 42c1d55..7daf263 100644
--- a/cpp/src/arrow/util/file-to-stream.cc
+++ b/cpp/src/arrow/util/file-to-stream.cc
@@ -15,11 +15,11 @@
 // specific language governing permissions and limitations
 // under the License.
 
-#include <iostream>
 #include "arrow/io/file.h"
 #include "arrow/ipc/file.h"
 #include "arrow/ipc/stream.h"
 #include "arrow/status.h"
+#include <iostream>
 
 #include "arrow/util/io-util.h"
 
@@ -44,7 +44,7 @@ Status ConvertToStream(const char* path) {
   return writer->Close();
 }
 
-} // namespace arrow
+}  // namespace arrow
 
 int main(int argc, char** argv) {
   if (argc != 2) {

http://git-wip-us.apache.org/repos/asf/arrow/blob/aac2e70c/cpp/src/arrow/util/io-util.h
----------------------------------------------------------------------
diff --git a/cpp/src/arrow/util/io-util.h b/cpp/src/arrow/util/io-util.h
index 3e5054d..9f26456 100644
--- a/cpp/src/arrow/util/io-util.h
+++ b/cpp/src/arrow/util/io-util.h
@@ -18,8 +18,8 @@
 #ifndef ARROW_UTIL_IO_UTIL_H
 #define ARROW_UTIL_IO_UTIL_H
 
-#include <iostream>
 #include "arrow/buffer.h"
+#include <iostream>
 
 namespace arrow {
 namespace io {
@@ -27,13 +27,11 @@ namespace io {
 // Output stream that just writes to stdout.
 class StdoutStream : public OutputStream {
  public:
-  StdoutStream() : pos_(0) {
-    set_mode(FileMode::WRITE);
-  }
+  StdoutStream() : pos_(0) { set_mode(FileMode::WRITE); }
   virtual ~StdoutStream() {}
 
   Status Close() { return Status::OK(); }
-  Status Tell(int64_t* position)  {
+  Status Tell(int64_t* position) {
     *position = pos_;
     return Status::OK();
   }
@@ -43,6 +41,7 @@ class StdoutStream : public OutputStream {
     std::cout.write(reinterpret_cast<const char*>(data), nbytes);
     return Status::OK();
   }
+
  private:
   int64_t pos_;
 };
@@ -50,13 +49,11 @@ class StdoutStream : public OutputStream {
 // Input stream that just reads from stdin.
 class StdinStream : public InputStream {
  public:
-  StdinStream() : pos_(0) {
-    set_mode(FileMode::READ);
-  }
+  StdinStream() : pos_(0) { set_mode(FileMode::READ); }
   virtual ~StdinStream() {}
 
   Status Close() { return Status::OK(); }
-  Status Tell(int64_t* position)  {
+  Status Tell(int64_t* position) {
     *position = pos_;
     return Status::OK();
   }
@@ -86,8 +83,7 @@ class StdinStream : public InputStream {
   int64_t pos_;
 };
 
-} // namespace io
-} // namespace arrow
-
-#endif // ARROW_UTIL_IO_UTIL_H
+}  // namespace io
+}  // namespace arrow
 
+#endif  // ARROW_UTIL_IO_UTIL_H

http://git-wip-us.apache.org/repos/asf/arrow/blob/aac2e70c/cpp/src/arrow/util/stream-to-file.cc
----------------------------------------------------------------------
diff --git a/cpp/src/arrow/util/stream-to-file.cc b/cpp/src/arrow/util/stream-to-file.cc
index 7a8ec0b..393b07d 100644
--- a/cpp/src/arrow/util/stream-to-file.cc
+++ b/cpp/src/arrow/util/stream-to-file.cc
@@ -15,11 +15,11 @@
 // specific language governing permissions and limitations
 // under the License.
 
-#include <iostream>
+#include "arrow/ipc/stream.h"
 #include "arrow/io/file.h"
 #include "arrow/ipc/file.h"
-#include "arrow/ipc/stream.h"
 #include "arrow/status.h"
+#include <iostream>
 
 #include "arrow/util/io-util.h"
 
@@ -46,7 +46,7 @@ Status ConvertToFile() {
   return writer->Close();
 }
 
-} // namespace arrow
+}  // namespace arrow
 
 int main(int argc, char** argv) {
   arrow::Status status = arrow::ConvertToFile();

http://git-wip-us.apache.org/repos/asf/arrow/blob/aac2e70c/cpp/src/arrow/util/visibility.h
----------------------------------------------------------------------
diff --git a/cpp/src/arrow/util/visibility.h b/cpp/src/arrow/util/visibility.h
index 9321cc5..4819a00 100644
--- a/cpp/src/arrow/util/visibility.h
+++ b/cpp/src/arrow/util/visibility.h
@@ -19,6 +19,11 @@
 #define ARROW_UTIL_VISIBILITY_H
 
 #if defined(_WIN32) || defined(__CYGWIN__)
+#if defined(_MSC_VER)
+#pragma warning(disable : 4251)
+#else
+#pragma GCC diagnostic ignored "-Wattributes"
+#endif
 #define ARROW_EXPORT __declspec(dllexport)
 #define ARROW_NO_EXPORT
 #else  // Not Windows