This is an automated email from the ASF dual-hosted git repository.

wesm pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow.git


The following commit(s) were added to refs/heads/master by this push:
     new 102acc4  ARROW-6860: [Python][C++] Do not link shared libraries 
monolithically to pyarrow.lib, add libarrow_python_flight.so
102acc4 is described below

commit 102acc47287c37a01ac11a5cb6bd1da3f1f0712d
Author: Wes McKinney <wesm+...@apache.org>
AuthorDate: Sat Oct 12 14:42:04 2019 -0500

    ARROW-6860: [Python][C++] Do not link shared libraries monolithically to 
pyarrow.lib, add libarrow_python_flight.so
    
    Adding a new shared library libarrow_python_flight.so that allows us to 
link libarrow_flight and this new library to the Cython _flight extension. I 
initially tried moving the Flight Python bindings directly to libarrow_flight 
but realized this would create a transitive dependency on libpython which is 
not desirable. Any shared library that uses Python C APIs is expected to be 
loaded into a running Python interpreter and not linked explicitly to libpython
    
    Because Apache ORC also needs to statically link Protocol Buffers, I have 
disabled it in the manylinux wheels. Hopefully we can come up with a solution 
where projects like Apache Beam, TensorFlow, and others can all use Protocol 
Buffers together and not have these problems
    
    Closes #5627 from wesm/ARROW-6860 and squashes the following commits:
    
    d5d67f81c <Wes McKinney> Revert libarrow_flight.pxd changes
    b31fbdf32 <Wes McKinney> Build libarrow_python_flight that links to 
libarrow_python and libarrow_flight. Do not link all shared libraries to Cython 
"lib" extension
    
    Authored-by: Wes McKinney <wesm+...@apache.org>
    Signed-off-by: Wes McKinney <wesm+...@apache.org>
---
 cpp/cmake_modules/FindArrowFlight.cmake | 41 +++++++++++++++++++++--
 cpp/src/arrow/python/CMakeLists.txt     | 48 +++++++++++++++++++--------
 cpp/src/arrow/python/flight.h           | 59 +++++++++++++++++++++++----------
 python/CMakeLists.txt                   | 46 ++++++++++++++++++++-----
 python/manylinux1/build_arrow.sh        | 11 +++---
 python/manylinux2010/build_arrow.sh     | 11 +++---
 6 files changed, 166 insertions(+), 50 deletions(-)

diff --git a/cpp/cmake_modules/FindArrowFlight.cmake 
b/cpp/cmake_modules/FindArrowFlight.cmake
index 193361a..048e153 100644
--- a/cpp/cmake_modules/FindArrowFlight.cmake
+++ b/cpp/cmake_modules/FindArrowFlight.cmake
@@ -66,7 +66,13 @@ find_library(ARROW_FLIGHT_LIB_PATH
              PATHS ${ARROW_SEARCH_LIB_PATH}
              PATH_SUFFIXES ${LIB_PATH_SUFFIXES}
              NO_DEFAULT_PATH)
+find_library(ARROW_PYTHON_FLIGHT_LIB_PATH
+             NAMES arrow_python_flight
+             PATHS ${ARROW_SEARCH_LIB_PATH}
+             PATH_SUFFIXES ${LIB_PATH_SUFFIXES}
+             NO_DEFAULT_PATH)
 get_filename_component(ARROW_FLIGHT_LIBS ${ARROW_FLIGHT_LIB_PATH} DIRECTORY)
+get_filename_component(ARROW_PYTHON_FLIGHT_LIBS 
${ARROW_PYTHON_FLIGHT_LIB_PATH} DIRECTORY)
 
 if(MSVC)
   # Prioritize "/bin" over LIB_PATH_SUFFIXES - DLL files are installed
@@ -77,7 +83,15 @@ if(MSVC)
                PATHS ${ARROW_HOME}
                PATH_SUFFIXES "bin" ${LIB_PATH_SUFFIXES}
                NO_DEFAULT_PATH)
+  find_library(ARROW_PYTHON_FLIGHT_SHARED_LIBRARIES
+               NAMES arrow_flight
+               PATHS ${ARROW_HOME}
+               PATH_SUFFIXES "bin" ${LIB_PATH_SUFFIXES}
+               NO_DEFAULT_PATH)
+
   get_filename_component(ARROW_FLIGHT_SHARED_LIBS 
${ARROW_FLIGHT_SHARED_LIBRARIES} DIRECTORY)
+  get_filename_component(ARROW_PYTHON_FLIGHT_SHARED_LIBS
+    ${ARROW_PYTHON_FLIGHT_SHARED_LIBRARIES} DIRECTORY)
 endif()
 
 if(ARROW_FLIGHT_INCLUDE_DIR AND ARROW_FLIGHT_LIBS)
@@ -117,9 +131,32 @@ else()
   set(ARROW_FLIGHT_FOUND FALSE)
 endif()
 
+if(ARROW_PYTHON_FLIGHT_LIBS)
+  set(ARROW_PYTHON_FLIGHT_FOUND TRUE)
+  set(ARROW_PYTHON_FLIGHT_LIB_NAME arrow_python_flight)
+  if(MSVC)
+    set(
+      ARROW_PYTHON_FLIGHT_STATIC_LIB
+      
${ARROW_PYTHON_FLIGHT_LIBS}/${ARROW_PYTHON_FLIGHT_LIB_NAME}${ARROW_MSVC_STATIC_LIB_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}
+      )
+    set(ARROW_PYTHON_FLIGHT_SHARED_LIB
+        
${ARROW_PYTHON_FLIGHT_SHARED_LIBS}/${ARROW_PYTHON_FLIGHT_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX})
+    set(ARROW_PYTHON_FLIGHT_SHARED_IMP_LIB 
${ARROW_PYTHON_FLIGHT_LIBS}/${ARROW_PYTHON_FLIGHT_LIB_NAME}.lib)
+  else()
+    set(ARROW_PYTHON_FLIGHT_STATIC_LIB 
${ARROW_LIBS}/lib${ARROW_PYTHON_FLIGHT_LIB_NAME}.a)
+    set(ARROW_PYTHON_FLIGHT_SHARED_LIB
+        
${ARROW_LIBS}/lib${ARROW_PYTHON_FLIGHT_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX})
+  endif()
+
+  message(STATUS "Found the Arrow Flight Python library: 
${ARROW_PYTHON_FLIGHT_LIB_PATH}")
+endif()
+
 if(MSVC)
   mark_as_advanced(ARROW_FLIGHT_INCLUDE_DIR ARROW_FLIGHT_STATIC_LIB 
ARROW_FLIGHT_SHARED_LIB
-                   ARROW_FLIGHT_SHARED_IMP_LIB)
+    ARROW_FLIGHT_SHARED_IMP_LIB
+    ARROW_PYTHON_FLIGHT_STATIC_LIB ARROW_PYTHON_FLIGHT_SHARED_LIB
+                   ARROW_PYTHON_FLIGHT_SHARED_IMP_LIB)
 else()
-  mark_as_advanced(ARROW_FLIGHT_INCLUDE_DIR ARROW_FLIGHT_STATIC_LIB 
ARROW_FLIGHT_SHARED_LIB)
+  mark_as_advanced(ARROW_FLIGHT_INCLUDE_DIR ARROW_FLIGHT_STATIC_LIB 
ARROW_FLIGHT_SHARED_LIB
+    ARROW_PYTHON_FLIGHT_STATIC_LIB ARROW_PYTHON_FLIGHT_SHARED_LIB)
 endif()
diff --git a/cpp/src/arrow/python/CMakeLists.txt 
b/cpp/src/arrow/python/CMakeLists.txt
index 85a4aad..11ad300 100644
--- a/cpp/src/arrow/python/CMakeLists.txt
+++ b/cpp/src/arrow/python/CMakeLists.txt
@@ -48,26 +48,12 @@ set(ARROW_PYTHON_SRCS
 
 set(ARROW_PYTHON_DEPENDENCIES arrow_dependencies)
 
-if(ARROW_FLIGHT)
-  set(ARROW_PYTHON_DEPENDENCIES ${ARROW_PYTHON_DEPENDENCIES} flight_grpc_gen)
-  set(ARROW_PYTHON_SRCS ${ARROW_PYTHON_SRCS} flight.cc)
-endif()
-
 if("${COMPILER_FAMILY}" STREQUAL "clang")
   set_property(SOURCE pyarrow.cc APPEND_STRING PROPERTY COMPILE_FLAGS " 
-Wno-cast-qual ")
 endif()
 
 set(ARROW_PYTHON_SHARED_LINK_LIBS arrow_shared ${PYTHON_OTHER_LIBS})
 
-if(ARROW_FLIGHT)
-  # Must link shared: we don't want to link more than one copy of gRPC
-  # into the eventual Cython shared object, otherwise gRPC calls fail
-  # with weird errors due to multiple copies of global static state
-  # (The other solution is to link gRPC shared everywhere instead of
-  # statically only in Flight)
-  set(ARROW_PYTHON_SHARED_LINK_LIBS ${ARROW_PYTHON_SHARED_LINK_LIBS} 
arrow_flight_shared)
-endif()
-
 if(WIN32)
   set(ARROW_PYTHON_SHARED_LINK_LIBS ${ARROW_PYTHON_SHARED_LINK_LIBS} 
${PYTHON_LIBRARIES})
 endif()
@@ -100,6 +86,40 @@ if(ARROW_BUILD_STATIC AND MSVC)
   target_compile_definitions(arrow_python_static PUBLIC ARROW_STATIC)
 endif()
 
+if(ARROW_FLIGHT AND ARROW_BUILD_SHARED)
+  # Must link to shared libarrow_flight: we don't want to link more than one
+  # copy of gRPC into the eventual Cython shared object, otherwise gRPC calls
+  # fail with weird errors due to multiple copies of global static state (The
+  # other solution is to link gRPC shared everywhere instead of statically only
+  # in Flight)
+  add_arrow_lib(arrow_python_flight
+                SOURCES
+                flight.cc
+                OUTPUTS
+                ARROW_PYFLIGHT_LIBRARIES
+                DEPENDENCIES
+                flight_grpc_gen
+                SHARED_LINK_FLAGS
+                ${ARROW_VERSION_SCRIPT_FLAGS} # Defined in 
cpp/arrow/CMakeLists.txt
+                SHARED_LINK_LIBS
+                arrow_python_shared
+                arrow_flight_shared
+                STATIC_LINK_LIBS
+                ${PYTHON_OTHER_LIBS}
+                EXTRA_INCLUDES
+                "${ARROW_PYTHON_INCLUDES}")
+
+  add_dependencies(arrow_python ${ARROW_PYFLIGHT_LIBRARIES})
+
+  foreach(LIB_TARGET ${ARROW_PYFLIGHT_LIBRARIES})
+    target_compile_definitions(${LIB_TARGET} PRIVATE ARROW_PYFLIGHT_EXPORTING)
+  endforeach()
+
+  if(ARROW_BUILD_STATIC AND MSVC)
+    target_compile_definitions(arrow_python_flight_static PUBLIC ARROW_STATIC)
+  endif()
+endif()
+
 if("${COMPILER_FAMILY}" STREQUAL "clang")
   # Clang, be quiet. Python C API has lots of macros
   set_property(SOURCE ${ARROW_PYTHON_SRCS}
diff --git a/cpp/src/arrow/python/flight.h b/cpp/src/arrow/python/flight.h
index c97705d..41329ed 100644
--- a/cpp/src/arrow/python/flight.h
+++ b/cpp/src/arrow/python/flight.h
@@ -27,18 +27,39 @@
 #include "arrow/python/common.h"
 #include "arrow/python/config.h"
 
+#if defined(_WIN32) || defined(__CYGWIN__)  // Windows
+#if defined(_MSC_VER)
+#pragma warning(disable : 4251)
+#else
+#pragma GCC diagnostic ignored "-Wattributes"
+#endif
+
+#ifdef ARROW_STATIC
+#define ARROW_PYFLIGHT_EXPORT
+#elif defined(ARROW_PYFLIGHT_EXPORTING)
+#define ARROW_PYFLIGHT_EXPORT __declspec(dllexport)
+#else
+#define ARROW_PYFLIGHT_EXPORT __declspec(dllimport)
+#endif
+
+#else  // Not Windows
+#ifndef ARROW_PYFLIGHT_EXPORT
+#define ARROW_PYFLIGHT_EXPORT __attribute__((visibility("default")))
+#endif
+#endif  // Non-Windows
+
 namespace arrow {
 
 namespace py {
 
 namespace flight {
 
-ARROW_PYTHON_EXPORT
+ARROW_PYFLIGHT_EXPORT
 extern const char* kPyServerMiddlewareName;
 
 /// \brief A table of function pointers for calling from C++ into
 /// Python.
-class ARROW_PYTHON_EXPORT PyFlightServerVtable {
+class ARROW_PYFLIGHT_EXPORT PyFlightServerVtable {
  public:
   std::function<Status(PyObject*, const arrow::flight::ServerCallContext&,
                        const arrow::flight::Criteria*,
@@ -69,7 +90,7 @@ class ARROW_PYTHON_EXPORT PyFlightServerVtable {
       list_actions;
 };
 
-class ARROW_PYTHON_EXPORT PyServerAuthHandlerVtable {
+class ARROW_PYFLIGHT_EXPORT PyServerAuthHandlerVtable {
  public:
   std::function<Status(PyObject*, arrow::flight::ServerAuthSender*,
                        arrow::flight::ServerAuthReader*)>
@@ -77,7 +98,7 @@ class ARROW_PYTHON_EXPORT PyServerAuthHandlerVtable {
   std::function<Status(PyObject*, const std::string&, std::string*)> is_valid;
 };
 
-class ARROW_PYTHON_EXPORT PyClientAuthHandlerVtable {
+class ARROW_PYFLIGHT_EXPORT PyClientAuthHandlerVtable {
  public:
   std::function<Status(PyObject*, arrow::flight::ClientAuthSender*,
                        arrow::flight::ClientAuthReader*)>
@@ -86,7 +107,8 @@ class ARROW_PYTHON_EXPORT PyClientAuthHandlerVtable {
 };
 
 /// \brief A helper to implement an auth mechanism in Python.
-class ARROW_PYTHON_EXPORT PyServerAuthHandler : public 
arrow::flight::ServerAuthHandler {
+class ARROW_PYFLIGHT_EXPORT PyServerAuthHandler
+    : public arrow::flight::ServerAuthHandler {
  public:
   explicit PyServerAuthHandler(PyObject* handler,
                                const PyServerAuthHandlerVtable& vtable);
@@ -100,7 +122,8 @@ class ARROW_PYTHON_EXPORT PyServerAuthHandler : public 
arrow::flight::ServerAuth
 };
 
 /// \brief A helper to implement an auth mechanism in Python.
-class ARROW_PYTHON_EXPORT PyClientAuthHandler : public 
arrow::flight::ClientAuthHandler {
+class ARROW_PYFLIGHT_EXPORT PyClientAuthHandler
+    : public arrow::flight::ClientAuthHandler {
  public:
   explicit PyClientAuthHandler(PyObject* handler,
                                const PyClientAuthHandlerVtable& vtable);
@@ -113,7 +136,7 @@ class ARROW_PYTHON_EXPORT PyClientAuthHandler : public 
arrow::flight::ClientAuth
   PyClientAuthHandlerVtable vtable_;
 };
 
-class ARROW_PYTHON_EXPORT PyFlightServer : public 
arrow::flight::FlightServerBase {
+class ARROW_PYFLIGHT_EXPORT PyFlightServer : public 
arrow::flight::FlightServerBase {
  public:
   explicit PyFlightServer(PyObject* server, const PyFlightServerVtable& 
vtable);
 
@@ -152,7 +175,7 @@ typedef std::function<Status(PyObject*, 
std::unique_ptr<arrow::flight::Result>*)
     PyFlightResultStreamCallback;
 
 /// \brief A ResultStream built around a Python callback.
-class ARROW_PYTHON_EXPORT PyFlightResultStream : public 
arrow::flight::ResultStream {
+class ARROW_PYFLIGHT_EXPORT PyFlightResultStream : public 
arrow::flight::ResultStream {
  public:
   /// \brief Construct a FlightResultStream from a Python object and callback.
   /// Must only be called while holding the GIL.
@@ -167,7 +190,7 @@ class ARROW_PYTHON_EXPORT PyFlightResultStream : public 
arrow::flight::ResultStr
 
 /// \brief A wrapper around a FlightDataStream that keeps alive a
 /// Python object backing it.
-class ARROW_PYTHON_EXPORT PyFlightDataStream : public 
arrow::flight::FlightDataStream {
+class ARROW_PYFLIGHT_EXPORT PyFlightDataStream : public 
arrow::flight::FlightDataStream {
  public:
   /// \brief Construct a FlightDataStream from a Python object and underlying 
stream.
   /// Must only be called while holding the GIL.
@@ -183,7 +206,7 @@ class ARROW_PYTHON_EXPORT PyFlightDataStream : public 
arrow::flight::FlightDataS
   std::unique_ptr<arrow::flight::FlightDataStream> stream_;
 };
 
-class ARROW_PYTHON_EXPORT PyServerMiddlewareFactory
+class ARROW_PYFLIGHT_EXPORT PyServerMiddlewareFactory
     : public arrow::flight::ServerMiddlewareFactory {
  public:
   /// \brief A callback to create the middleware instance in Python
@@ -205,7 +228,7 @@ class ARROW_PYTHON_EXPORT PyServerMiddlewareFactory
   StartCallCallback start_call_;
 };
 
-class ARROW_PYTHON_EXPORT PyServerMiddleware : public 
arrow::flight::ServerMiddleware {
+class ARROW_PYFLIGHT_EXPORT PyServerMiddleware : public 
arrow::flight::ServerMiddleware {
  public:
   typedef std::function<Status(PyObject*,
                                arrow::flight::AddCallHeaders* 
outgoing_headers)>
@@ -231,7 +254,7 @@ class ARROW_PYTHON_EXPORT PyServerMiddleware : public 
arrow::flight::ServerMiddl
   Vtable vtable_;
 };
 
-class ARROW_PYTHON_EXPORT PyClientMiddlewareFactory
+class ARROW_PYFLIGHT_EXPORT PyClientMiddlewareFactory
     : public arrow::flight::ClientMiddlewareFactory {
  public:
   /// \brief A callback to create the middleware instance in Python
@@ -251,7 +274,7 @@ class ARROW_PYTHON_EXPORT PyClientMiddlewareFactory
   StartCallCallback start_call_;
 };
 
-class ARROW_PYTHON_EXPORT PyClientMiddleware : public 
arrow::flight::ClientMiddleware {
+class ARROW_PYFLIGHT_EXPORT PyClientMiddleware : public 
arrow::flight::ClientMiddleware {
  public:
   typedef std::function<Status(PyObject*,
                                arrow::flight::AddCallHeaders* 
outgoing_headers)>
@@ -284,7 +307,7 @@ typedef std::function<Status(PyObject*, 
arrow::flight::FlightPayload*)>
     PyGeneratorFlightDataStreamCallback;
 
 /// \brief A FlightDataStream built around a Python callback.
-class ARROW_PYTHON_EXPORT PyGeneratorFlightDataStream
+class ARROW_PYFLIGHT_EXPORT PyGeneratorFlightDataStream
     : public arrow::flight::FlightDataStream {
  public:
   /// \brief Construct a FlightDataStream from a Python object and underlying 
stream.
@@ -304,22 +327,22 @@ class ARROW_PYTHON_EXPORT PyGeneratorFlightDataStream
   PyGeneratorFlightDataStreamCallback callback_;
 };
 
-ARROW_PYTHON_EXPORT
+ARROW_PYFLIGHT_EXPORT
 Status CreateFlightInfo(const std::shared_ptr<arrow::Schema>& schema,
                         const arrow::flight::FlightDescriptor& descriptor,
                         const std::vector<arrow::flight::FlightEndpoint>& 
endpoints,
                         int64_t total_records, int64_t total_bytes,
                         std::unique_ptr<arrow::flight::FlightInfo>* out);
 
-ARROW_PYTHON_EXPORT
+ARROW_PYFLIGHT_EXPORT
 Status DeserializeBasicAuth(const std::string& buf,
                             std::unique_ptr<arrow::flight::BasicAuth>* out);
 
-ARROW_PYTHON_EXPORT
+ARROW_PYFLIGHT_EXPORT
 Status SerializeBasicAuth(const arrow::flight::BasicAuth& basic_auth, 
std::string* out);
 
 /// \brief Create a SchemaResult from schema.
-ARROW_PYTHON_EXPORT
+ARROW_PYFLIGHT_EXPORT
 Status CreateSchemaResult(const std::shared_ptr<arrow::Schema>& schema,
                           std::unique_ptr<arrow::flight::SchemaResult>* out);
 
diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
index 6925efd..9f7c1b3 100644
--- a/python/CMakeLists.txt
+++ b/python/CMakeLists.txt
@@ -410,7 +410,7 @@ if(PYARROW_BUILD_CUDA)
     else()
       add_thirdparty_lib(arrow_cuda SHARED_LIB ${ARROW_CUDA_SHARED_LIB})
     endif()
-    set(LINK_LIBS ${LINK_LIBS} arrow_cuda_shared)
+    set(CUDA_LINK_LIBS arrow_cuda_shared)
     set(CYTHON_EXTENSIONS ${CYTHON_EXTENSIONS} _cuda)
   endif()
 endif()
@@ -445,7 +445,7 @@ if(PYARROW_BUILD_PARQUET)
     else()
       add_thirdparty_lib(parquet SHARED_LIB ${PARQUET_SHARED_LIB})
     endif()
-    set(LINK_LIBS ${LINK_LIBS} parquet_shared)
+    set(PARQUET_LINK_LIBS parquet_shared)
   else()
     find_package(Thrift)
     if(PYARROW_BOOST_USE_SHARED)
@@ -457,7 +457,7 @@ if(PYARROW_BUILD_PARQUET)
     add_thirdparty_lib(boost_regex STATIC_LIB ${Boost_REGEX_LIBRARY_RELEASE})
     add_thirdparty_lib(parquet STATIC_LIB ${PARQUET_STATIC_LIB})
     add_thirdparty_lib(thrift STATIC_LIB ${THRIFT_STATIC_LIB})
-    set(LINK_LIBS ${LINK_LIBS} parquet_static thrift_static boost_regex_static)
+    set(PARQUET_LINK_LIBS parquet_static thrift_static boost_regex_static)
   endif()
   set(CYTHON_EXTENSIONS ${CYTHON_EXTENSIONS} _parquet)
 endif()
@@ -483,8 +483,7 @@ if(PYARROW_BUILD_PLASMA)
                      SO_VERSION
                      ${ARROW_SO_VERSION})
   endif()
-  set(LINK_LIBS ${LINK_LIBS} libplasma_shared)
-
+  set(PLASMA_LINK_LIBS libplasma_shared)
   set(CYTHON_EXTENSIONS ${CYTHON_EXTENSIONS} _plasma)
   file(COPY ${PLASMA_EXECUTABLE} DESTINATION ${BUILD_OUTPUT_ROOT_DIRECTORY})
 endif()
@@ -498,7 +497,7 @@ endif()
 if(PYARROW_BUILD_FLIGHT)
   # Arrow Flight
   find_package(ArrowFlight)
-  if(NOT ARROW_FLIGHT_FOUND)
+  if(NOT ARROW_PYTHON_FLIGHT_FOUND)
     message(FATAL_ERROR "Unable to locate Arrow Flight libraries")
   else()
     if(PYARROW_BUNDLE_ARROW_CPP)
@@ -507,8 +506,14 @@ if(PYARROW_BUILD_FLIGHT)
                        ${ARROW_ABI_VERSION}
                        SO_VERSION
                        ${ARROW_SO_VERSION})
+      bundle_arrow_lib(ARROW_PYTHON_FLIGHT_SHARED_LIB
+                       ABI_VERSION
+                       ${ARROW_ABI_VERSION}
+                       SO_VERSION
+                       ${ARROW_SO_VERSION})
       if(MSVC)
         bundle_arrow_implib(ARROW_FLIGHT_SHARED_IMP_LIB)
+        bundle_arrow_implib(ARROW_PYTHON_FLIGHT_SHARED_IMP_LIB)
         bundle_arrow_dependency(cares cares.dll)
         bundle_arrow_dependency(libprotobuf libprotobuf.dll)
         # XXX Hardcoded library names because CMake is too stupid to give us
@@ -520,10 +525,13 @@ if(PYARROW_BUILD_FLIGHT)
     endif()
     if(MSVC)
       add_thirdparty_lib(arrow_flight SHARED_LIB 
${ARROW_FLIGHT_SHARED_IMP_LIB})
+      add_thirdparty_lib(arrow_python_flight SHARED_LIB
+                         ${ARROW_PYTHON_FLIGHT_SHARED_IMP_LIB})
     else()
       add_thirdparty_lib(arrow_flight SHARED_LIB ${ARROW_FLIGHT_SHARED_LIB})
+      add_thirdparty_lib(arrow_python_flight SHARED_LIB 
${ARROW_PYTHON_FLIGHT_SHARED_LIB})
     endif()
-    set(LINK_LIBS ${LINK_LIBS} arrow_flight_shared)
+    set(FLIGHT_LINK_LIBS arrow_flight_shared arrow_python_flight_shared)
     set(CYTHON_EXTENSIONS ${CYTHON_EXTENSIONS} _flight)
   endif()
 endif()
@@ -559,7 +567,7 @@ if(PYARROW_BUILD_GANDIVA)
     add_thirdparty_lib(gandiva SHARED_LIB ${GANDIVA_SHARED_LIB})
   endif()
 
-  set(LINK_LIBS ${LINK_LIBS} gandiva_shared)
+  set(GANDIVA_LINK_LIBS gandiva_shared)
   set(CYTHON_EXTENSIONS ${CYTHON_EXTENSIONS} gandiva)
 endif()
 
@@ -622,3 +630,25 @@ foreach(module ${CYTHON_EXTENSIONS})
 
   # Generated files will be moved to the right directory by setup.py.
 endforeach(module)
+
+# Additional link libraries
+
+if(PYARROW_BUILD_CUDA)
+  target_link_libraries(_cuda ${CUDA_LINK_LIBS})
+endif()
+
+if(PYARROW_BUILD_FLIGHT)
+  target_link_libraries(_flight ${FLIGHT_LINK_LIBS})
+endif()
+
+if(PYARROW_BUILD_GANDIVA)
+  target_link_libraries(gandiva ${GANDIVA_LINK_LIBS})
+endif()
+
+if(PYARROW_BUILD_PARQUET)
+  target_link_libraries(_parquet ${PARQUET_LINK_LIBS})
+endif()
+
+if(PYARROW_BUILD_PLASMA)
+  target_link_libraries(_plasma ${PLASMA_LINK_LIBS})
+endif()
diff --git a/python/manylinux1/build_arrow.sh b/python/manylinux1/build_arrow.sh
index 7a8917e..bf12da5 100755
--- a/python/manylinux1/build_arrow.sh
+++ b/python/manylinux1/build_arrow.sh
@@ -41,7 +41,11 @@ cd /arrow/python
 # PyArrow build configuration
 export PYARROW_BUILD_TYPE='release'
 export PYARROW_CMAKE_GENERATOR='Ninja'
-export PYARROW_WITH_ORC=1
+
+# ARROW-6860: Disabling ORC in wheels until Protobuf static linking issues
+# across projects is resolved
+export PYARROW_WITH_ORC=0
+
 export PYARROW_WITH_PARQUET=1
 export PYARROW_WITH_PLASMA=1
 export PYARROW_BUNDLE_ARROW_CPP=1
@@ -97,7 +101,8 @@ cmake -DCMAKE_BUILD_TYPE=Release \
     -DPythonInterp_FIND_VERSION=${PYTHON_VERSION} \
     -DARROW_PLASMA=ON \
     -DARROW_TENSORFLOW=ON \
-    -DARROW_ORC=ON \
+    -DARROW_ORC=OFF \
+    -DORC_SOURCE=BUNDLED \
     -DARROW_WITH_BZ2=ON \
     -DARROW_WITH_ZLIB=ON \
     -DARROW_WITH_ZSTD=ON \
@@ -110,7 +115,6 @@ cmake -DCMAKE_BUILD_TYPE=Release \
     -DBoost_NAMESPACE=arrow_boost \
     -DBOOST_ROOT=/arrow_boost_dist \
     -DOPENSSL_USE_STATIC_LIBS=ON \
-    -DORC_SOURCE=BUNDLED \
     -GNinja /arrow/cpp
 ninja
 ninja install
@@ -149,7 +153,6 @@ else
   $PYTHON_INTERPRETER -c "
 import sys
 import pyarrow
-import pyarrow.orc
 import pyarrow.parquet
 import pyarrow.plasma
 
diff --git a/python/manylinux2010/build_arrow.sh 
b/python/manylinux2010/build_arrow.sh
index 6ae4962..a6ce49a 100755
--- a/python/manylinux2010/build_arrow.sh
+++ b/python/manylinux2010/build_arrow.sh
@@ -41,7 +41,11 @@ cd /arrow/python
 # PyArrow build configuration
 export PYARROW_BUILD_TYPE='release'
 export PYARROW_CMAKE_GENERATOR='Ninja'
-export PYARROW_WITH_ORC=1
+
+# ARROW-6860: Disabling ORC in wheels until Protobuf static linking issues
+# across projects is resolved
+export PYARROW_WITH_ORC=0
+
 export PYARROW_WITH_PARQUET=1
 export PYARROW_WITH_PLASMA=1
 export PYARROW_BUNDLE_ARROW_CPP=1
@@ -98,7 +102,8 @@ PATH="${CPYTHON_PATH}/bin:${PATH}" cmake 
-DCMAKE_BUILD_TYPE=Release \
     -DPythonInterp_FIND_VERSION=${PYTHON_VERSION} \
     -DARROW_PLASMA=ON \
     -DARROW_TENSORFLOW=ON \
-    -DARROW_ORC=ON \
+    -DARROW_ORC=OFF \
+    -DORC_SOURCE=BUNDLED \
     -DARROW_WITH_BZ2=ON \
     -DARROW_WITH_ZLIB=ON \
     -DARROW_WITH_ZSTD=ON \
@@ -111,7 +116,6 @@ PATH="${CPYTHON_PATH}/bin:${PATH}" cmake 
-DCMAKE_BUILD_TYPE=Release \
     -DBoost_NAMESPACE=arrow_boost \
     -DBOOST_ROOT=/arrow_boost_dist \
     -DOPENSSL_USE_STATIC_LIBS=ON \
-    -DORC_SOURCE=BUNDLED \
     -GNinja /arrow/cpp
 ninja install
 popd
@@ -145,7 +149,6 @@ $PIP install repaired_wheels/*.whl
 $PYTHON_INTERPRETER -c "
 import sys
 import pyarrow
-import pyarrow.orc
 import pyarrow.parquet
 import pyarrow.plasma
 

Reply via email to