You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@arrow.apache.org by "Ingo Müller (Jira)" <ji...@apache.org> on 2019/09/03 09:56:00 UTC

[jira] [Created] (ARROW-6421) Headers of system Boost not found in non-standard location

Ingo Müller created ARROW-6421:
----------------------------------

             Summary: Headers of system Boost not found in non-standard location
                 Key: ARROW-6421
                 URL: https://issues.apache.org/jira/browse/ARROW-6421
             Project: Apache Arrow
          Issue Type: Bug
          Components: C++
            Reporter: Ingo Müller


On a system that does not have boost installed in a default location, but in a non-default one, the boost headers are not found during compilation. This is true even though CMake correctly finds the Boost installation, e.g., through CMAKE_PREFIX_PATH.

The problem is the function ADD_ARROW_LIB LIB_NAME in cpp/cmake_modules/BuildUtils.cmake, which defines a target "{$LIB_NAME]_objlib" without the required dependencies (without any dependencies, actually). The required _compile-time_ dependencies are specified as properties of the corresponding_"_targets", for example, of the Boost::filesystem target. They should be added as dependencies using target_link_libraries (even though the name suggests that this is only for _link-time_ dependencies).

The following patch solves the problem, but might not be the best solution:
{noformat}
diff --git a/cpp/cmake_modules/BuildUtils.cmake b/cpp/cmake_modules/BuildUtils.cmake
index ecfa593a0..c2b744766 100644
--- a/cpp/cmake_modules/BuildUtils.cmake
+++ b/cpp/cmake_modules/BuildUtils.cmake
@@ -251,6 +251,13 @@ function(ADD_ARROW_LIB LIB_NAME)
                                      SOVERSION
                                      "${ARROW_SO_VERSION}")+    target_link_libraries(${LIB_NAME}_objlib
+                          LINK_PUBLIC
+                          "$<BUILD_INTERFACE:${ARG_SHARED_LINK_LIBS}>"
+                          "$<INSTALL_INTERFACE:${ARG_SHARED_INSTALL_INTERFACE_LIBS}>"
+                          LINK_PRIVATE
+                          ${ARG_SHARED_PRIVATE_LINK_LIBS})
+
     target_link_libraries(${LIB_NAME}_shared
                           LINK_PUBLIC
                           "$<BUILD_INTERFACE:${ARG_SHARED_LINK_LIBS}>"{noformat}

{{Steps to reproduce:}}
 # Make sure you don't have boost installed.
 # Install boost to /opt/boost-1.70.0 (or similar).
 # export CMAKE_PREFIX_PATH=/opt/boost-1.70.0
 # Compile the cpp project without setting -DBOOST_SOURCE or similar. Make sure CMake found your Boost installation in /opt



--
This message was sent by Atlassian Jira
(v8.3.2#803003)