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 2018/11/10 20:37:19 UTC

[arrow] branch master updated: PARQUET-1439: Remove PARQUET_ARROW_LINKAGE option, clean up overall library linking configuration

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 2a69511  PARQUET-1439: Remove PARQUET_ARROW_LINKAGE option, clean up overall library linking configuration
2a69511 is described below

commit 2a695116d97ae8f4dbf673f38c53a3f9feb43baf
Author: Wes McKinney <we...@apache.org>
AuthorDate: Sat Nov 10 15:37:11 2018 -0500

    PARQUET-1439: Remove PARQUET_ARROW_LINKAGE option, clean up overall library linking configuration
    
    Author: Wes McKinney <we...@apache.org>
    Author: Deepak Majeti <de...@hpe.com>
    Author: Kouhei Sutou <ko...@clear-code.com>
    Author: Deepak Majeti <md...@apache.org>
    
    Closes #2735 from majetideepak/PARQUET-1439 and squashes the following commits:
    
    6c3e18006 <Wes McKinney> CMake message is different
    80bd5cb49 <Wes McKinney> Fix appveyor-cpp-test-cmake-script.bat
    da5e19ea7 <Kouhei Sutou> Fix build error with vendored boost
    10642b3b6 <Wes McKinney> Link arrow_shared publicly with parquet_shared
    ceb664872 <Wes McKinney> Link arrow_shared in statically-linked Parquet tests
    6365952f3 <Wes McKinney> Use alias targets for ARROW_BOOST_LIBS
    eea1acee2 <Wes McKinney> Fix gflags issue on windows
    434bae7ab <Wes McKinney> Fix benchmark linking. Use ADD_ARROW_LIB for gandiva_jni
    dc604547a <Kouhei Sutou> Stop to create generic library in ADD_THIRDPARTY_LIB
    1b446e0fd <Wes McKinney> ARROW-3745 Do not link static libraries to themselves. Fix static library dependency error
    01f235d24 <Wes McKinney> Remove debugging message
    a85350450 <Wes McKinney> Clean up link dependencies. There is no such thing as private static link libs
    87c5f91d9 <Wes McKinney> Remove PARQUET_ARROW_LINKAGE option
    c521fc274 <Deepak Majeti> remove static linkage from travis script
    661a03ce4 <Deepak Majeti> Statically link parquet binaries and dynamically link parquet tests
    f033cb724 <Deepak Majeti> remove travis ci test
    eecbc8802 <Deepak Majeti> PARQUET-1439: Parquet build fails when PARQUET_ARROW_LINKAGE is static
---
 ci/appveyor-cpp-test-cmake-script.bat       |  8 ++--
 ci/travis_before_script_cpp.sh              |  1 +
 cpp/CMakeLists.txt                          | 59 ++++++++++++------------
 cpp/cmake_modules/BuildUtils.cmake          | 46 +++++++++++--------
 cpp/cmake_modules/GandivaBuildUtils.cmake   |  6 +--
 cpp/cmake_modules/ThirdpartyToolchain.cmake | 71 +++++++++++++++++------------
 cpp/src/arrow/CMakeLists.txt                |  4 +-
 cpp/src/arrow/flight/CMakeLists.txt         | 12 ++---
 cpp/src/arrow/gpu/CMakeLists.txt            |  2 +-
 cpp/src/arrow/ipc/CMakeLists.txt            |  2 +-
 cpp/src/arrow/python/CMakeLists.txt         |  2 +-
 cpp/src/arrow/python/util/CMakeLists.txt    |  4 +-
 cpp/src/arrow/util/CMakeLists.txt           |  8 ++--
 cpp/src/gandiva/CMakeLists.txt              | 28 +++++++-----
 cpp/src/gandiva/jni/CMakeLists.txt          | 40 +++++++---------
 cpp/src/parquet/CMakeLists.txt              | 63 +++++++++++++------------
 16 files changed, 188 insertions(+), 168 deletions(-)

diff --git a/ci/appveyor-cpp-test-cmake-script.bat b/ci/appveyor-cpp-test-cmake-script.bat
index c2740b8..86ecd50 100644
--- a/ci/appveyor-cpp-test-cmake-script.bat
+++ b/ci/appveyor-cpp-test-cmake-script.bat
@@ -121,7 +121,7 @@ cmake -G "%GENERATOR%" ^
       -DARROW_CXXFLAGS="/MP" ^
       .. >nul 2>error.txt
 
-FINDSTR /M /C:"No static or shared library provided for lz4_static" error.txt || exit /B
+FINDSTR /M /C:"No static or shared library provided for lz4" error.txt || exit /B
 set LZ4_HOME=
 
 popd
@@ -164,14 +164,14 @@ cmake -G "%GENERATOR%" ^
       .. 2>output.txt
 
 set LIBRARY_FOUND_MSG=Added static library dependency
-for %%x in (snappy gflags brotli_enc brotli_dec brotli_common lz4_static zstd_static) do (
+for %%x in (snappy gflags brotli_enc brotli_dec brotli_common lz4 zstd) do (
     echo Checking %%x library path
-    FINDSTR /C:"%LIBRARY_FOUND_MSG% %%x: %CONDA_PREFIX:\=/%" output.txt || exit /B
+    FINDSTR /C:"%LIBRARY_FOUND_MSG% %%x_static: %CONDA_PREFIX:\=/%" output.txt || exit /B
 )
 set LIBRARY_FOUND_MSG=Added shared library dependency
 for %%x in (zlib) do (
     echo Checking %%x library path
-    FINDSTR /C:"%LIBRARY_FOUND_MSG% %%x: %CONDA_PREFIX:\=/%" output.txt || exit /B
+    FINDSTR /C:"%LIBRARY_FOUND_MSG% %%x_shared: %CONDA_PREFIX:\=/%" output.txt || exit /B
 )
 
 popd
diff --git a/ci/travis_before_script_cpp.sh b/ci/travis_before_script_cpp.sh
index c9e60e6..f9e0602 100755
--- a/ci/travis_before_script_cpp.sh
+++ b/ci/travis_before_script_cpp.sh
@@ -86,6 +86,7 @@ fi
 if [ $ARROW_TRAVIS_PARQUET == "1" ]; then
   CMAKE_COMMON_FLAGS="$CMAKE_COMMON_FLAGS \
 -DARROW_PARQUET=ON \
+-DPARQUET_BUILD_EXAMPLES=ON \
 -DPARQUET_BUILD_EXECUTABLES=ON"
 fi
 
diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt
index 10d6c00..997421c 100644
--- a/cpp/CMakeLists.txt
+++ b/cpp/CMakeLists.txt
@@ -109,11 +109,11 @@ if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
     OFF)
 
   option(ARROW_BUILD_STATIC
-    "Build the libarrow static libraries"
+    "Build static libraries"
     ON)
 
   option(ARROW_BUILD_SHARED
-    "Build the libarrow shared libraries"
+    "Build shared libraries"
     ON)
 
   option(ARROW_TEST_MEMCHECK
@@ -298,16 +298,13 @@ Always OFF if building binaries"
     OFF)
 
   option(PARQUET_BUILD_EXECUTABLES
-    "Build the Parquet executable CLI tools"
+    "Build the Parquet executable CLI tools. Requires static libraries to be built."
     OFF)
 
   option(PARQUET_BUILD_EXAMPLES
-    "Build the Parquet examples"
+    "Build the Parquet examples. Requires static libraries to be built."
     OFF)
 
-  set(PARQUET_ARROW_LINKAGE "shared" CACHE STRING
-    "How to link Arrow libraries with libparquet.so. static|shared (default shared)")
-
   # Gandiva related build options
   option(ARROW_GANDIVA
     "Build the Gandiva libraries"
@@ -412,6 +409,11 @@ if(ARROW_BUILD_TESTS OR ARROW_BUILD_BENCHMARKS)
   set(ARROW_WITH_ZSTD ON)
 endif()
 
+if(PARQUET_BUILD_EXAMPLES OR PARQUET_BUILD_EXECUTABLES)
+  set(ARROW_PARQUET ON)
+  set(ARROW_BUILD_STATIC ON)
+endif()
+
 if (MSVC)
   # ORC doesn't build on windows
   set(ARROW_ORC OFF)
@@ -427,6 +429,8 @@ endif()
 
 if(NOT ARROW_BUILD_TESTS)
   set(NO_TESTS 1)
+else()
+  set(ARROW_BUILD_SHARED ON)
 endif()
 
 if(NOT ARROW_BUILD_BENCHMARKS)
@@ -628,13 +632,13 @@ endif(UNIX)
 set(ARROW_LINK_LIBS)
 
 # Libraries to link statically with libarrow.so
-set(ARROW_STATIC_LINK_LIBS double-conversion::double-conversion)
+set(ARROW_STATIC_LINK_LIBS double-conversion_static)
 
 if (ARROW_WITH_BROTLI)
   SET(ARROW_STATIC_LINK_LIBS
-    brotli_dec
-    brotli_enc
-    brotli_common
+    brotli_dec_static
+    brotli_enc_static
+    brotli_common_static
     ${ARROW_STATIC_LINK_LIBS})
 endif()
 
@@ -647,14 +651,11 @@ if (ARROW_WITH_LZ4)
 endif()
 
 if (ARROW_WITH_SNAPPY)
-  SET(ARROW_STATIC_LINK_LIBS snappy ${ARROW_STATIC_LINK_LIBS})
+  SET(ARROW_STATIC_LINK_LIBS snappy_static ${ARROW_STATIC_LINK_LIBS})
 endif()
 
 if (ARROW_WITH_ZLIB)
-  if (ZLIB_SHARED_LIB)
-    SET(ARROW_PRIVATE_LINK_LIBS zlib ${ARROW_PRIVATE_LINK_LIBS})
-  endif()
-  SET(ARROW_STATIC_LINK_LIBS zlib ${ARROW_STATIC_LINK_LIBS})
+  SET(ARROW_STATIC_LINK_LIBS ${ZLIB_LIBRARY} ${ARROW_STATIC_LINK_LIBS})
 endif()
 
 if (ARROW_WITH_ZSTD)
@@ -664,11 +665,10 @@ endif()
 if (ARROW_ORC)
   SET(ARROW_STATIC_LINK_LIBS
     ${ARROW_STATIC_LINK_LIBS}
-    orc)
+    orc_static)
 endif()
 
 if (ARROW_USE_GLOG)
-  #add_definitions(-DARROW_USE_GLOG)
   SET(ARROW_STATIC_LINK_LIBS glog_static ${ARROW_STATIC_LINK_LIBS})
 endif()
 
@@ -678,10 +678,9 @@ endif()
 
 if (ARROW_BUILD_BENCHMARKS)
   set(ARROW_BENCHMARK_LINK_LIBS
-    arrow_static
     arrow_benchmark_main
-    gtest
-    ${ARROW_STATIC_LINK_LIBS})
+    arrow_static
+    gtest_static)
 endif()
 
 set(ARROW_SHARED_PRIVATE_LINK_LIBS
@@ -690,7 +689,8 @@ set(ARROW_SHARED_PRIVATE_LINK_LIBS
   ${BOOST_FILESYSTEM_LIBRARY}
   ${BOOST_REGEX_LIBRARY})
 
-set(ARROW_STATIC_PRIVATE_LINK_LIBS
+set(ARROW_STATIC_LINK_LIBS
+  ${ARROW_STATIC_LINK_LIBS}
   ${BOOST_SYSTEM_LIBRARY}
   ${BOOST_FILESYSTEM_LIBRARY}
   ${BOOST_REGEX_LIBRARY})
@@ -704,19 +704,18 @@ endif()
 if (ARROW_BUILD_STATIC)
   set(ARROW_MIN_TEST_LIBS
     arrow_static
-    ${ARROW_STATIC_LINK_LIBS}
-    gtest_main
-    gtest)
+    gtest_main_static
+    gtest_static)
 else ()
   set(ARROW_MIN_TEST_LIBS
     arrow_shared
     ${ARROW_LINK_LIBS}
-    double-conversion::double-conversion
+    double-conversion_static
     ${BOOST_SYSTEM_LIBRARY}
     ${BOOST_FILESYSTEM_LIBRARY}
     ${BOOST_REGEX_LIBRARY}
-    gtest_main
-    gtest)
+    gtest_main_static
+    gtest_static)
 endif()
 
 if(NOT MSVC)
@@ -755,10 +754,10 @@ endif(ARROW_JEMALLOC)
 if (PTHREAD_LIBRARY)
   set(ARROW_LINK_LIBS
     ${ARROW_LINK_LIBS}
-    ${PTHREAD_LIBRARY})
+    pthreadshared)
   set(ARROW_STATIC_LINK_LIBS
     ${ARROW_STATIC_LINK_LIBS}
-    ${PTHREAD_LIBRARY})
+    pthreadshared)
 endif()
 
 ############################################################
diff --git a/cpp/cmake_modules/BuildUtils.cmake b/cpp/cmake_modules/BuildUtils.cmake
index 0cc0baa..37273b2 100644
--- a/cpp/cmake_modules/BuildUtils.cmake
+++ b/cpp/cmake_modules/BuildUtils.cmake
@@ -37,7 +37,7 @@ function(ADD_THIRDPARTY_LIB LIB_NAME)
       set_target_properties(${AUG_LIB_NAME}
         PROPERTIES INTERFACE_LINK_LIBRARIES "${ARG_DEPS}")
     endif()
-    message("Added static library dependency ${LIB_NAME}: ${ARG_STATIC_LIB}")
+    message("Added static library dependency ${AUG_LIB_NAME}: ${ARG_STATIC_LIB}")
 
     SET(AUG_LIB_NAME "${LIB_NAME}_shared")
     add_library(${AUG_LIB_NAME} SHARED IMPORTED)
@@ -54,11 +54,8 @@ function(ADD_THIRDPARTY_LIB LIB_NAME)
       set_target_properties(${AUG_LIB_NAME}
         PROPERTIES INTERFACE_LINK_LIBRARIES "${ARG_DEPS}")
     endif()
-    message("Added shared library dependency ${LIB_NAME}: ${ARG_SHARED_LIB}")
+    message("Added shared library dependency ${AUG_LIB_NAME}: ${ARG_SHARED_LIB}")
   elseif(ARG_STATIC_LIB)
-    add_library(${LIB_NAME} STATIC IMPORTED)
-    set_target_properties(${LIB_NAME}
-      PROPERTIES IMPORTED_LOCATION "${ARG_STATIC_LIB}")
     SET(AUG_LIB_NAME "${LIB_NAME}_static")
     add_library(${AUG_LIB_NAME} STATIC IMPORTED)
     set_target_properties(${AUG_LIB_NAME}
@@ -67,33 +64,24 @@ function(ADD_THIRDPARTY_LIB LIB_NAME)
       set_target_properties(${AUG_LIB_NAME}
         PROPERTIES INTERFACE_LINK_LIBRARIES "${ARG_DEPS}")
     endif()
-    set_target_properties(${LIB_NAME}
-      PROPERTIES INTERFACE_LINK_LIBRARIES "${AUG_LIB_NAME}")
-    message("Added static library dependency ${LIB_NAME}: ${ARG_STATIC_LIB}")
+    message("Added static library dependency ${AUG_LIB_NAME}: ${ARG_STATIC_LIB}")
   elseif(ARG_SHARED_LIB)
-    add_library(${LIB_NAME} SHARED IMPORTED)
     SET(AUG_LIB_NAME "${LIB_NAME}_shared")
     add_library(${AUG_LIB_NAME} SHARED IMPORTED)
 
     if(WIN32)
         # Mark the ”.lib” location as part of a Windows DLL
-        set_target_properties(${LIB_NAME}
-            PROPERTIES IMPORTED_IMPLIB "${ARG_SHARED_LIB}")
         set_target_properties(${AUG_LIB_NAME}
             PROPERTIES IMPORTED_IMPLIB "${ARG_SHARED_LIB}")
     else()
-        set_target_properties(${LIB_NAME}
-            PROPERTIES IMPORTED_LOCATION "${ARG_SHARED_LIB}")
         set_target_properties(${AUG_LIB_NAME}
             PROPERTIES IMPORTED_LOCATION "${ARG_SHARED_LIB}")
     endif()
-    message("Added shared library dependency ${LIB_NAME}: ${ARG_SHARED_LIB}")
+    message("Added shared library dependency ${AUG_LIB_NAME}: ${ARG_SHARED_LIB}")
     if(ARG_DEPS)
       set_target_properties(${AUG_LIB_NAME}
         PROPERTIES INTERFACE_LINK_LIBRARIES "${ARG_DEPS}")
     endif()
-    set_target_properties(${LIB_NAME}
-      PROPERTIES INTERFACE_LINK_LIBRARIES "${AUG_LIB_NAME}")
   else()
     message(FATAL_ERROR "No static or shared library provided for ${LIB_NAME}")
   endif()
@@ -103,7 +91,13 @@ endfunction()
 function(ADD_ARROW_LIB LIB_NAME)
   set(options BUILD_SHARED BUILD_STATIC)
   set(one_value_args SHARED_LINK_FLAGS)
-  set(multi_value_args SOURCES OUTPUTS STATIC_LINK_LIBS STATIC_PRIVATE_LINK_LIBS SHARED_LINK_LIBS SHARED_PRIVATE_LINK_LIBS EXTRA_INCLUDES DEPENDENCIES)
+  set(multi_value_args SOURCES OUTPUTS
+                       STATIC_LINK_LIBS
+                       SHARED_LINK_LIBS
+                       SHARED_PRIVATE_LINK_LIBS
+                       EXTRA_INCLUDES
+                       PRIVATE_INCLUDES
+                       DEPENDENCIES)
   cmake_parse_arguments(ARG "${options}" "${one_value_args}" "${multi_value_args}" ${ARGN})
   if(ARG_UNPARSED_ARGUMENTS)
     message(SEND_ERROR "Error: unrecognized arguments: ${ARG_UNPARSED_ARGUMENTS}")
@@ -157,6 +151,10 @@ function(ADD_ARROW_LIB LIB_NAME)
         ${ARG_EXTRA_INCLUDES}
         )
     endif()
+    if (ARG_PRIVATE_INCLUDES)
+      target_include_directories(${LIB_NAME}_objlib PRIVATE
+        ${ARG_PRIVATE_INCLUDES})
+    endif()
   endif()
 
   set(RUNTIME_INSTALL_DIR bin)
@@ -177,6 +175,11 @@ function(ADD_ARROW_LIB LIB_NAME)
         )
     endif()
 
+    if (ARG_PRIVATE_INCLUDES)
+      target_include_directories(${LIB_NAME}_shared PRIVATE
+        ${ARG_PRIVATE_INCLUDES})
+    endif()
+
     if(APPLE)
       # On OS X, you can avoid linking at library load time and instead
       # expecting that the symbols have been loaded separately. This happens
@@ -245,6 +248,11 @@ function(ADD_ARROW_LIB LIB_NAME)
         )
     endif()
 
+    if (ARG_PRIVATE_INCLUDES)
+      target_include_directories(${LIB_NAME}_static PRIVATE
+        ${ARG_PRIVATE_INCLUDES})
+    endif()
+
     if (MSVC)
       set(LIB_NAME_STATIC ${LIB_NAME}_static)
     else()
@@ -257,8 +265,7 @@ function(ADD_ARROW_LIB LIB_NAME)
       OUTPUT_NAME ${LIB_NAME_STATIC})
 
     target_link_libraries(${LIB_NAME}_static
-      LINK_PUBLIC ${ARG_STATIC_LINK_LIBS}
-      LINK_PRIVATE ${ARG_STATIC_PRIVATE_LINK_LIBS})
+      LINK_PUBLIC ${ARG_STATIC_LINK_LIBS})
 
     install(TARGETS ${LIB_NAME}_static
       EXPORT ${PROJECT_NAME}-targets
@@ -473,7 +480,6 @@ function(ARROW_TEST_LINK_LIBRARIES REL_TEST_NAME)
   target_link_libraries(${TEST_NAME} ${ARGN})
 endfunction()
 
-
 ############################################################
 # Fuzzing
 ############################################################
diff --git a/cpp/cmake_modules/GandivaBuildUtils.cmake b/cpp/cmake_modules/GandivaBuildUtils.cmake
index fc7bf7b..521d697 100644
--- a/cpp/cmake_modules/GandivaBuildUtils.cmake
+++ b/cpp/cmake_modules/GandivaBuildUtils.cmake
@@ -16,9 +16,9 @@
 # under the License.
 
 set(GANDIVA_TEST_LINK_LIBS
-  gtest
-  gtest_main
-  re2)
+  gtest_static
+  gtest_main_static
+  ${RE2_LIBRARY})
 
 if (PTHREAD_LIBRARY)
   set(GANDIVA_TEST_LINK_LIBS
diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake
index d323092..76a65b7 100644
--- a/cpp/cmake_modules/ThirdpartyToolchain.cmake
+++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake
@@ -331,6 +331,8 @@ if (WIN32)
 else()
   find_library(PTHREAD_LIBRARY pthread)
   message(STATUS "Found pthread: ${PTHREAD_LIBRARY}")
+  add_library(pthreadshared SHARED IMPORTED)
+  set_target_properties(pthreadshared PROPERTIES IMPORTED_LOCATION ${PTHREAD_LIBRARY})
 endif()
 
 # ----------------------------------------------------------------------
@@ -361,9 +363,9 @@ if (ARROW_BOOST_VENDORED)
     "${BOOST_LIB_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}boost_filesystem${CMAKE_STATIC_LIBRARY_SUFFIX}")
   set(BOOST_STATIC_REGEX_LIBRARY
     "${BOOST_LIB_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}boost_regex${CMAKE_STATIC_LIBRARY_SUFFIX}")
-  set(BOOST_SYSTEM_LIBRARY "${BOOST_STATIC_SYSTEM_LIBRARY}")
-  set(BOOST_FILESYSTEM_LIBRARY "${BOOST_STATIC_FILESYSTEM_LIBRARY}")
-  set(BOOST_REGEX_LIBRARY "${BOOST_STATIC_REGEX_LIBRARY}")
+  set(BOOST_SYSTEM_LIBRARY boost_system_static)
+  set(BOOST_FILESYSTEM_LIBRARY boost_filesystem_static)
+  set(BOOST_REGEX_LIBRARY boost_regex_static)
   if (ARROW_BOOST_HEADER_ONLY)
     set(BOOST_BUILD_PRODUCTS)
     set(BOOST_CONFIGURE_COMMAND "")
@@ -470,7 +472,7 @@ if (NOT ARROW_BOOST_HEADER_ONLY)
       STATIC_LIB "${BOOST_STATIC_REGEX_LIBRARY}"
       SHARED_LIB "${BOOST_SHARED_REGEX_LIBRARY}")
 
-  SET(ARROW_BOOST_LIBS boost_system boost_filesystem)
+  SET(ARROW_BOOST_LIBS ${BOOST_SYSTEM_LIBRARY} ${BOOST_FILESYSTEM_LIBRARY})
 endif()
 
 include_directories(SYSTEM ${Boost_INCLUDE_DIR})
@@ -503,10 +505,16 @@ endif()
 
 include_directories(SYSTEM ${DOUBLE_CONVERSION_INCLUDE_DIR})
 
+add_library(double-conversion INTERFACE)
 if (DOUBLE_CONVERSION_VENDORED)
-  ADD_THIRDPARTY_LIB(double-conversion::double-conversion
+  ADD_THIRDPARTY_LIB(double-conversion
     STATIC_LIB ${DOUBLE_CONVERSION_STATIC_LIB})
   add_dependencies(arrow_dependencies double-conversion_ep)
+  set_target_properties(double-conversion
+    PROPERTIES INTERFACE_LINK_LIBRARIES double-conversion_static)
+else()
+  set_target_properties(double-conversion
+    PROPERTIES INTERFACE_LINK_LIBRARIES double-conversion::double-conversion)
 endif()
 
 # ----------------------------------------------------------------------
@@ -557,8 +565,8 @@ if(ARROW_BUILD_TESTS OR ARROW_BUILD_BENCHMARKS)
     STATIC_LIB ${GTEST_MAIN_STATIC_LIB})
 
   if(GTEST_VENDORED)
-    add_dependencies(gtest googletest_ep)
-    add_dependencies(gtest_main googletest_ep)
+    add_dependencies(gtest_static googletest_ep)
+    add_dependencies(gtest_main_static googletest_ep)
   endif()
 
   # gflags (formerly Googleflags) command line parsing
@@ -603,13 +611,13 @@ if(ARROW_BUILD_TESTS OR ARROW_BUILD_BENCHMARKS)
   ADD_THIRDPARTY_LIB(gflags
     STATIC_LIB ${GFLAGS_STATIC_LIB})
   if(MSVC)
-    set_target_properties(gflags
+    set_target_properties(gflags_static
       PROPERTIES
       INTERFACE_LINK_LIBRARIES "shlwapi.lib")
   endif()
 
   if(GFLAGS_VENDORED)
-    add_dependencies(gflags gflags_ep)
+    add_dependencies(gflags_static gflags_ep)
   endif()
 endif()
 
@@ -655,7 +663,7 @@ if(ARROW_BUILD_BENCHMARKS)
     STATIC_LIB ${GBENCHMARK_STATIC_LIB})
 
   if(GBENCHMARK_VENDORED)
-    add_dependencies(benchmark gbenchmark_ep)
+    add_dependencies(benchmark_static gbenchmark_ep)
   endif()
 endif()
 
@@ -815,6 +823,7 @@ if (ARROW_WITH_ZLIB)
   endif()
   if(ZLIB_FOUND)
     ADD_THIRDPARTY_LIB(zlib SHARED_LIB ${ZLIB_SHARED_LIB})
+    set(ZLIB_LIBRARY zlib_shared)
   else()
     set(ZLIB_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/zlib_ep/src/zlib_ep-install")
     set(ZLIB_HOME "${ZLIB_PREFIX}")
@@ -837,13 +846,14 @@ if (ARROW_WITH_ZLIB)
                         -DBUILD_SHARED_LIBS=OFF)
     ADD_THIRDPARTY_LIB(zlib
       STATIC_LIB ${ZLIB_STATIC_LIB})
+    set(ZLIB_LIBRARY zlib_static)
 
     ExternalProject_Add(zlib_ep
       URL ${ZLIB_SOURCE_URL}
       ${EP_LOG_OPTIONS}
       BUILD_BYPRODUCTS "${ZLIB_STATIC_LIB}"
       CMAKE_ARGS ${ZLIB_CMAKE_ARGS})
-    add_dependencies(zlib zlib_ep)
+    add_dependencies(${ZLIB_LIBRARY} zlib_ep)
   endif()
 
   include_directories(SYSTEM ${ZLIB_INCLUDE_DIR})
@@ -915,7 +925,7 @@ if (ARROW_WITH_SNAPPY)
     STATIC_LIB ${SNAPPY_STATIC_LIB})
 
   if (SNAPPY_VENDORED)
-    add_dependencies(snappy snappy_ep)
+    add_dependencies(snappy_static snappy_ep)
   endif()
 endif()
 
@@ -974,9 +984,9 @@ if (ARROW_WITH_BROTLI)
     STATIC_LIB ${BROTLI_STATIC_LIBRARY_COMMON})
 
   if (BROTLI_VENDORED)
-    add_dependencies(brotli_enc brotli_ep)
-    add_dependencies(brotli_dec brotli_ep)
-    add_dependencies(brotli_common brotli_ep)
+    add_dependencies(brotli_enc_static brotli_ep)
+    add_dependencies(brotli_dec_static brotli_ep)
+    add_dependencies(brotli_common_static brotli_ep)
   endif()
 endif()
 
@@ -991,7 +1001,7 @@ if (ARROW_WITH_BZ2)
   endif()
 
   include_directories(SYSTEM ${BZ2_INCLUDE_DIR})
-  ADD_THIRDPARTY_LIB(bz2_static
+  ADD_THIRDPARTY_LIB(bz2
     STATIC_LIB ${BZ2_STATIC_LIB})
 endif()
 
@@ -1040,7 +1050,7 @@ if (ARROW_WITH_LZ4)
   endif()
 
   include_directories(SYSTEM ${LZ4_INCLUDE_DIR})
-  ADD_THIRDPARTY_LIB(lz4_static
+  ADD_THIRDPARTY_LIB(lz4
     STATIC_LIB ${LZ4_STATIC_LIB})
 
   if (LZ4_VENDORED)
@@ -1093,7 +1103,7 @@ if (ARROW_WITH_ZSTD)
   endif()
 
   include_directories(SYSTEM ${ZSTD_INCLUDE_DIR})
-  ADD_THIRDPARTY_LIB(zstd_static
+  ADD_THIRDPARTY_LIB(zstd
     STATIC_LIB ${ZSTD_STATIC_LIB})
 
   if (ZSTD_VENDORED)
@@ -1132,10 +1142,12 @@ if (ARROW_GANDIVA)
 
   if (ARROW_RE2_LINKAGE STREQUAL "shared")
     ADD_THIRDPARTY_LIB(re2
-      STATIC_LIB ${RE2_SHARED_LIB})
+      SHARED_LIB ${RE2_SHARED_LIB})
+    set(RE2_LIBRARY re2_shared)
   else()
     ADD_THIRDPARTY_LIB(re2
       STATIC_LIB ${RE2_STATIC_LIB})
+    set(RE2_LIBRARY re2_static)
   endif()
 
   if (RE2_VENDORED)
@@ -1172,14 +1184,15 @@ if (ARROW_ORC OR ARROW_FLIGHT OR ARROW_GANDIVA)
   include_directories (SYSTEM ${PROTOBUF_INCLUDE_DIR})
   if (ARROW_PROTOBUF_USE_SHARED)
     ADD_THIRDPARTY_LIB(protobuf
-      SHARED_LIB ${PROTOBUF_LIBRARY})
+      SHARED_LIB ${PROTOBUF_SHARED_LIB})
+    set(PROTOBUF_LIBRARY protobuf_shared)
   else ()
     ADD_THIRDPARTY_LIB(protobuf
       STATIC_LIB ${PROTOBUF_STATIC_LIB})
+    set(PROTOBUF_LIBRARY protobuf_static)
   endif ()
-
   if (PROTOBUF_VENDORED)
-    add_dependencies (protobuf protobuf_ep)
+    add_dependencies (${PROTOBUF_LIBRARY} protobuf_ep)
   endif ()
 endif()
 
@@ -1283,15 +1296,15 @@ if (ARROW_ORC)
       ${EP_LOG_OPTIONS})
 
     set(ORC_VENDORED 1)
-    add_dependencies(orc_ep zlib)
+    add_dependencies(orc_ep ${ZLIB_LIBRARY})
     if (LZ4_VENDORED)
       add_dependencies(orc_ep lz4_static)
     endif()
     if (SNAPPY_VENDORED)
-      add_dependencies(orc_ep snappy)
+      add_dependencies(orc_ep snappy_static)
     endif()
     if (PROTOBUF_VENDORED)
-      add_dependencies(orc_ep protobuf_ep)
+      add_dependencies(orc_ep ${PROTOBUF_LIBRARY})
     endif()
   else()
      set(ORC_INCLUDE_DIR "${ORC_HOME}/include")
@@ -1302,10 +1315,10 @@ if (ARROW_ORC)
   include_directories(SYSTEM ${ORC_INCLUDE_DIR})
   ADD_THIRDPARTY_LIB(orc
     STATIC_LIB ${ORC_STATIC_LIB}
-    DEPS protobuf)
+    DEPS ${PROTOBUF_LIBRARY})
 
   if (ORC_VENDORED)
-    add_dependencies(orc orc_ep)
+    add_dependencies(orc_static orc_ep)
   endif()
 
 endif()
@@ -1372,7 +1385,7 @@ if (NOT THRIFT_FOUND)
     set(THRIFT_CMAKE_ARGS "-DZLIB_LIBRARY=${ZLIB_STATIC_LIB}"
                           ${THRIFT_CMAKE_ARGS})
   endif()
-  set(THRIFT_DEPENDENCIES ${THRIFT_DEPENDENCIES} zlib)
+  set(THRIFT_DEPENDENCIES ${THRIFT_DEPENDENCIES} ${ZLIB_LIBRARY})
 
   if (MSVC)
     set(WINFLEXBISON_VERSION 2.4.9)
@@ -1478,7 +1491,7 @@ if (ARROW_USE_GLOG)
   message(STATUS "Glog static library: ${GLOG_STATIC_LIB}")
 
   include_directories(SYSTEM ${GLOG_INCLUDE_DIR})
-  ADD_THIRDPARTY_LIB(glog_static
+  ADD_THIRDPARTY_LIB(glog
     STATIC_LIB ${GLOG_STATIC_LIB})
 
   if (GLOG_VENDORED)
diff --git a/cpp/src/arrow/CMakeLists.txt b/cpp/src/arrow/CMakeLists.txt
index 7fb083c..cec6088 100644
--- a/cpp/src/arrow/CMakeLists.txt
+++ b/cpp/src/arrow/CMakeLists.txt
@@ -167,9 +167,7 @@ ADD_ARROW_LIB(arrow
   SHARED_LINK_FLAGS ${ARROW_SHARED_LINK_FLAGS}
   SHARED_LINK_LIBS ${ARROW_LINK_LIBS}
   SHARED_PRIVATE_LINK_LIBS ${ARROW_SHARED_PRIVATE_LINK_LIBS}
-  STATIC_LINK_LIBS ${ARROW_STATIC_LINK_LIBS}
-  STATIC_PRIVATE_LINK_LIBS ${ARROW_STATIC_PRIVATE_LINK_LIBS}
-)
+  STATIC_LINK_LIBS ${ARROW_STATIC_LINK_LIBS})
 
 find_package(Backtrace)
 
diff --git a/cpp/src/arrow/flight/CMakeLists.txt b/cpp/src/arrow/flight/CMakeLists.txt
index e830be3..bc22d60 100644
--- a/cpp/src/arrow/flight/CMakeLists.txt
+++ b/cpp/src/arrow/flight/CMakeLists.txt
@@ -94,8 +94,8 @@ if (ARROW_BUILD_TESTS OR ARROW_BUILD_BENCHMARKS)
   target_link_libraries(flight-test-server
     arrow_flight_static
     ${ARROW_FLIGHT_STATIC_LINK_LIBS}
-    gflags
-    gtest)
+    gflags_static
+    gtest_static)
 
   # This is needed for the unit tests
   if (ARROW_BUILD_TESTS)
@@ -123,8 +123,8 @@ if (ARROW_BUILD_BENCHMARKS)
   target_link_libraries(flight-perf-server
     arrow_flight_static
     ${ARROW_FLIGHT_STATIC_LINK_LIBS}
-    gflags
-    gtest)
+    gflags_static
+    gtest_static)
 
   add_executable(flight-benchmark
     flight-benchmark.cc
@@ -132,8 +132,8 @@ if (ARROW_BUILD_BENCHMARKS)
   target_link_libraries(flight-benchmark
     arrow_flight_static
     ${ARROW_FLIGHT_STATIC_LINK_LIBS}
-    gflags
-    gtest)
+    gflags_static
+    gtest_static)
 
   add_dependencies(flight-benchmark flight-perf-server)
 endif(ARROW_BUILD_BENCHMARKS)
diff --git a/cpp/src/arrow/gpu/CMakeLists.txt b/cpp/src/arrow/gpu/CMakeLists.txt
index 465977a..ed4c125 100644
--- a/cpp/src/arrow/gpu/CMakeLists.txt
+++ b/cpp/src/arrow/gpu/CMakeLists.txt
@@ -93,6 +93,6 @@ if (ARROW_BUILD_BENCHMARKS)
   cuda_add_executable(cuda-benchmark cuda-benchmark.cc)
   target_link_libraries(cuda-benchmark
     arrow_gpu_shared
-    gtest
+    gtest_static
     ${ARROW_BENCHMARK_LINK_LIBS})
 endif()
diff --git a/cpp/src/arrow/ipc/CMakeLists.txt b/cpp/src/arrow/ipc/CMakeLists.txt
index b7a90bc..13ed9b9 100644
--- a/cpp/src/arrow/ipc/CMakeLists.txt
+++ b/cpp/src/arrow/ipc/CMakeLists.txt
@@ -24,7 +24,7 @@ ADD_ARROW_TEST(ipc-json-test)
 
 if (NOT ARROW_BOOST_HEADER_ONLY)
   ADD_ARROW_TEST(json-integration-test
-    EXTRA_LINK_LIBS gflags)
+    EXTRA_LINK_LIBS gflags_static)
 
   # Test is being built
   if (TARGET json-integration-test)
diff --git a/cpp/src/arrow/python/CMakeLists.txt b/cpp/src/arrow/python/CMakeLists.txt
index 0e55ee4..edfe4e3 100644
--- a/cpp/src/arrow/python/CMakeLists.txt
+++ b/cpp/src/arrow/python/CMakeLists.txt
@@ -129,7 +129,7 @@ if (ARROW_BUILD_TESTS)
 	util/test_main.cc)
 
   target_link_libraries(arrow_python_test_main
-    gtest)
+    gtest_static)
   target_include_directories(arrow_python_test_main SYSTEM PUBLIC
     ${ARROW_PYTHON_INCLUDES})
 
diff --git a/cpp/src/arrow/python/util/CMakeLists.txt b/cpp/src/arrow/python/util/CMakeLists.txt
index 4cc20f6..8edde12 100644
--- a/cpp/src/arrow/python/util/CMakeLists.txt
+++ b/cpp/src/arrow/python/util/CMakeLists.txt
@@ -25,13 +25,13 @@ if (PYARROW_BUILD_TESTS)
 
   if (APPLE)
 	target_link_libraries(arrow/python_test_main
-      gtest
+      gtest_static
       dl)
 	set_target_properties(arrow/python_test_main
       PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
   else()
 	target_link_libraries(arrow/python_test_main
-      gtest
+      gtest_static
       pthread
       dl
 	  )
diff --git a/cpp/src/arrow/util/CMakeLists.txt b/cpp/src/arrow/util/CMakeLists.txt
index b9d3762..855ff6a 100644
--- a/cpp/src/arrow/util/CMakeLists.txt
+++ b/cpp/src/arrow/util/CMakeLists.txt
@@ -65,22 +65,22 @@ if (ARROW_BUILD_BENCHMARKS)
   add_library(arrow_benchmark_main benchmark_main.cc)
   if (APPLE)
     target_link_libraries(arrow_benchmark_main
-      benchmark
+      benchmark_static
     )
   elseif(MSVC)
     target_link_libraries(arrow_benchmark_main
-      benchmark
+      benchmark_static
       Shlwapi.lib
   )
   else()
     target_link_libraries(arrow_benchmark_main
-      benchmark
+      benchmark_static
       pthread
     )
   endif()
 
   # TODO(wesm): Some benchmarks include gtest.h
-  add_dependencies(arrow_benchmark_main gtest)
+  add_dependencies(arrow_benchmark_main gtest_static)
 endif()
 
 ADD_ARROW_TEST(bit-util-test)
diff --git a/cpp/src/gandiva/CMakeLists.txt b/cpp/src/gandiva/CMakeLists.txt
index 6c227ba..853e70d 100644
--- a/cpp/src/gandiva/CMakeLists.txt
+++ b/cpp/src/gandiva/CMakeLists.txt
@@ -61,22 +61,27 @@ set(SRC_FILES annotator.cc
       ${SHARED_HELPER_FILES}
       ${BC_FILE_PATH_CC})
 
-set(GANDIVA_PRIVATE_LINK_LIBS
-  boost_regex
-  boost_system
-  boost_filesystem
+set(GANDIVA_SHARED_PRIVATE_LINK_LIBS
+  arrow_shared
+  ${BOOST_REGEX_LIBRARY}
+  ${BOOST_SYSTEM_LIBRARY}
+  ${BOOST_FILESYSTEM_LIBRARY}
   LLVM::LLVM_INTERFACE
-  re2)
-set(GANDIVA_SHARED_PRIVATE_LINK_LIBS ${GANDIVA_PRIVATE_LINK_LIBS})
-set(GANDIVA_STATIC_PRIVATE_LINK_LIBS ${GANDIVA_PRIVATE_LINK_LIBS})
+  ${RE2_LIBRARY})
+
+set(GANDIVA_STATIC_LINK_LIBS
+  arrow_static
+  LLVM::LLVM_INTERFACE
+  ${RE2_LIBRARY})
+
 if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
-  set(GANDIVA_STATIC_PRIVATE_LINK_LIBS
-    ${GANDIVA_STATIC_PRIVATE_LINK_LIBS}
+  set(GANDIVA_STATIC_LINK_LIBS
+    ${GANDIVA_STATIC_LINK_LIBS}
     -static-libstdc++
     -static-libgcc)
 endif()
 
-add_arrow_lib(gandiva
+ADD_ARROW_LIB(gandiva
   SOURCES ${SRC_FILES}
   OUTPUTS GANDIVA_LIBRARIES
   DEPENDENCIES arrow_dependencies
@@ -84,8 +89,7 @@ add_arrow_lib(gandiva
   $<TARGET_PROPERTY:LLVM::LLVM_INTERFACE,INTERFACE_INCLUDE_DIRECTORIES>
   SHARED_LINK_LIBS arrow_shared
   SHARED_PRIVATE_LINK_LIBS ${GANDIVA_SHARED_PRIVATE_LINK_LIBS}
-  STATIC_LINK_LIBS arrow_static
-  STATIC_PRIVATE_LINK_LIBS ${GANDIVA_STATIC_PRIVATE_LINK_LIBS})
+  STATIC_LINK_LIBS ${GANDIVA_STATIC_LINK_LIBS})
 
 # install for gandiva
 include(GNUInstallDirs)
diff --git a/cpp/src/gandiva/jni/CMakeLists.txt b/cpp/src/gandiva/jni/CMakeLists.txt
index 090937a..8684fe8 100644
--- a/cpp/src/gandiva/jni/CMakeLists.txt
+++ b/cpp/src/gandiva/jni/CMakeLists.txt
@@ -31,7 +31,7 @@ get_filename_component(ABS_GANDIVA_PROTO ${CMAKE_SOURCE_DIR}/src/gandiva/proto/T
 add_custom_command(
   OUTPUT ${PROTO_OUTPUT_FILES}
   COMMAND ${PROTOBUF_EXECUTABLE} --proto_path ${CMAKE_SOURCE_DIR}/src/gandiva/proto --cpp_out ${PROTO_OUTPUT_DIR} ${CMAKE_SOURCE_DIR}/src/gandiva/proto/Types.proto
-  DEPENDS ${ABS_GANDIVA_PROTO} protobuf
+  DEPENDS ${ABS_GANDIVA_PROTO} ${PROTOBUF_LIBRARY}
   COMMENT "Running PROTO compiler on Types.proto"
   VERBATIM
 )
@@ -44,40 +44,34 @@ set(PROTO_HDRS "${PROTO_OUTPUT_DIR}/Types.pb.h")
 set(JNI_HEADERS_DIR "${CMAKE_CURRENT_BINARY_DIR}/java")
 add_subdirectory(../../../../java/gandiva ./java/gandiva)
 
-add_library(gandiva_jni SHARED
-  config_builder.cc
+set(GANDIVA_LINK_LIBS
+  ${PROTOBUF_LIBRARY}
+  gandiva_static)
+
+set(GANDIVA_JNI_SOURCES config_builder.cc
   config_holder.cc
   expression_registry_helper.cc
   jni_common.cc
   ${PROTO_SRCS})
-add_dependencies(gandiva_jni gandiva_java gandiva_jni_proto)
 
 # For users of gandiva_jni library (including integ tests), include-dir is :
 #   /usr/**/include dir after install,
 #   cpp/include during build
 # For building gandiva_jni library itself, include-dir (in addition to above) is :
 #   cpp/src
-target_include_directories(gandiva_jni
-  PUBLIC
-    $<INSTALL_INTERFACE:include>
-    $<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/include>
-    ${JNI_HEADERS_DIR}
-  PRIVATE
-    ${JNI_INCLUDE_DIRS}
-    ${CMAKE_CURRENT_BINARY_DIR}
-    ${CMAKE_SOURCE_DIR}/src
-)
+ADD_ARROW_LIB(gandiva_jni
+  SOURCES ${GANDIVA_JNI_SOURCES}
+  SHARED_PRIVATE_LINK_LIBS ${GANDIVA_LINK_LIBS}
+  STATIC_LINK_LIBS ${GANDIVA_LINK_LIBS}
+  DEPENDENCIES gandiva_java gandiva_jni_proto
+  EXTRA_INCLUDES $<INSTALL_INTERFACE:include>
+  $<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/include>
+  ${JNI_HEADERS_DIR}
+  PRIVATE_INCLUDES ${JNI_INCLUDE_DIRS} ${CMAKE_CURRENT_BINARY_DIR})
 
 # filter out everything that is not needed for the jni bridge
 # statically linked stdc++ has conflicts with stdc++ loaded by other libraries.
 if (NOT APPLE)
-set_target_properties(gandiva_jni PROPERTIES LINK_FLAGS "-Wl,--version-script=${CMAKE_SOURCE_DIR}/src/gandiva/jni/symbols.map")
+  set_target_properties(gandiva_jni_shared PROPERTIES
+    LINK_FLAGS "-Wl,--version-script=${CMAKE_SOURCE_DIR}/src/gandiva/jni/symbols.map")
 endif()
-
-# PROTOBUF is a private dependency i.e users of gandiva also will not have a 
-# dependency on protobuf.
-target_link_libraries(gandiva_jni
-  PRIVATE
-    protobuf
-    gandiva_static
-)
diff --git a/cpp/src/parquet/CMakeLists.txt b/cpp/src/parquet/CMakeLists.txt
index fd55488..6070cfb 100644
--- a/cpp/src/parquet/CMakeLists.txt
+++ b/cpp/src/parquet/CMakeLists.txt
@@ -55,25 +55,25 @@ endfunction()
 
 # TODO(wesm): Handling of ABI/SO version
 
-if ("${PARQUET_ARROW_LINKAGE}" STREQUAL "shared")
-  set(PARQUET_ARROW_LINK_LIBS
-    arrow_shared)
+if (ARROW_BUILD_STATIC)
+  set(PARQUET_STATIC_LINK_LIBS
+    arrow_static)
+  set(ARROW_LIBRARY_TESTING arrow_static)
 else()
-  set(PARQUET_ARROW_LINK_LIBS
-    arrow_static
-    ${ARROW_STATIC_LINK_LIBS})
+  set(ARROW_LIBRARY_TESTING arrow_shared)
 endif()
 
 set(PARQUET_BOOST_LINK_LIBS
-  boost_regex)
+  ${BOOST_REGEX_LIBRARY})
+
 if(MSVC)
   set(PARQUET_BOOST_LINK_LIBS ${PARQUET_BOOST_LINK_LIBS}
-    boost_system)
+    ${BOOST_SYSTEM_LIBRARY})
 endif()
 
 set(PARQUET_MIN_TEST_LIBS
-  gtest_main
-  gtest)
+  gtest_main_static
+  gtest_static)
 
 if (APPLE)
   set(PARQUET_MIN_TEST_LIBS
@@ -88,15 +88,13 @@ endif()
 
 set(PARQUET_SHARED_TEST_LINK_LIBS
   ${PARQUET_MIN_TEST_LIBS}
-  ${PARQUET_ARROW_LINK_LIBS}
   parquet_shared
   thriftstatic)
 
 set(PARQUET_STATIC_TEST_LINK_LIBS
   ${PARQUET_MIN_TEST_LIBS}
-  ${PARQUET_ARROW_LINK_LIBS}
-  parquet_static
-  thriftstatic)
+  ${ARROW_LIBRARY_TESTING}
+  parquet_static)
 
 ############################################################
 # Generated Thrift sources
@@ -158,18 +156,30 @@ add_custom_target(parquet-thrift-deps ALL
 set(PARQUET_DEPENDENCIES ${PARQUET_DEPENDENCIES} parquet-thrift-deps)
 
 if (NOT PARQUET_MINIMAL_DEPENDENCY)
+  set(PARQUET_SHARED_LINK_LIBS
+    arrow_shared)
+
 # These are libraries that we will link privately with parquet_shared (as they
-# do not need to be linked transitively by other linkers), but publicly with
-# parquet_static (because internal users need to transitively link all
-# dependencies)
-  set(PARQUET_INTERFACE_LINK_LIBS
-    ${PARQUET_ARROW_LINK_LIBS}
+# do not need to be linked transitively by other linkers)
+  set(PARQUET_SHARED_PRIVATE_LINK_LIBS
     ${PARQUET_BOOST_LINK_LIBS}
     thriftstatic
   )
+
+# Link publicly with # parquet_static (because internal users need to
+# transitively link all dependencies)
+  set(PARQUET_STATIC_LINK_LIBS
+    ${PARQUET_STATIC_LINK_LIBS}
+    ${PARQUET_BOOST_LINK_LIBS}
+    thriftstatic
+  )
+
 # Although we don't link parquet_objlib against anything, we need it to depend
 # on these libs as we may generate their headers via ExternalProject_Add
-  set(PARQUET_DEPENDENCIES ${PARQUET_DEPENDENCIES} ${PARQUET_INTERFACE_LINK_LIBS})
+set(PARQUET_DEPENDENCIES ${PARQUET_DEPENDENCIES}
+  ${PARQUET_SHARED_LINK_LIBS}
+  ${PARQUET_SHARED_PRIVATE_LINK_LIBS}
+  ${PARQUET_STATIC_LINK_LIBS})
 endif()
 
 if(NOT APPLE AND NOT MSVC)
@@ -193,16 +203,13 @@ ADD_ARROW_LIB(parquet
   OUTPUTS PARQUET_LIBRARIES
   DEPENDENCIES ${PARQUET_DEPENDENCIES}
   SHARED_LINK_FLAGS ${PARQUET_SHARED_LINK_FLAGS}
-  SHARED_PRIVATE_LINK_LIBS ${PARQUET_INTERFACE_LINK_LIBS}
-  STATIC_LINK_LIBS ${PARQUET_INTERFACE_LINK_LIBS}
+  SHARED_LINK_LIBS ${PARQUET_SHARED_LINK_LIBS}
+  SHARED_PRIVATE_LINK_LIBS ${PARQUET_SHARED_PRIVATE_LINK_LIBS}
+  STATIC_LINK_LIBS ${PARQUET_STATIC_LINK_LIBS}
 )
 
 # Thrift requires these definitions for some types that we use
 foreach(LIB_TARGET ${PARQUET_LIBRARIES})
-  if ("${PARQUET_ARROW_LINKAGE}" STREQUAL "static")
-    target_compile_definitions(${LIB_TARGET}
-      PRIVATE ARROW_STATIC)
-  endif()
   target_compile_definitions(${LIB_TARGET}
     PRIVATE PARQUET_EXPORTING
     PRIVATE HAVE_INTTYPES_H
@@ -283,9 +290,7 @@ ADD_PARQUET_TEST(schema-test USE_STATIC_LINKING)
 
 set(PARQUET_BENCHMARK_LINK_LIBRARIES
   arrow_benchmark_main
-  parquet_static
-  arrow_static
-  thriftstatic)
+  parquet_static)
 
 ADD_ARROW_BENCHMARK(column-io-benchmark)
 ARROW_BENCHMARK_LINK_LIBRARIES(column-io-benchmark