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 2019/04/04 19:51:20 UTC

[arrow] branch master updated: ARROW-5081: [C++] Use PATH_SUFFIXES when searching for dependencies

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 af4f529  ARROW-5081: [C++] Use PATH_SUFFIXES when searching for dependencies
af4f529 is described below

commit af4f52961209a5f1b43a19483536285c957e3bed
Author: David Li <li...@gmail.com>
AuthorDate: Thu Apr 4 14:51:11 2019 -0500

    ARROW-5081: [C++] Use PATH_SUFFIXES when searching for dependencies
    
    - Fixes some typos in `Find*.cmake` files
    - Use `PATH_SUFFIXES` more consistently when invoking `find_library` or `find_file`.
        - If this looks good, I can go ahead and change the rest of the invocations.
    - Enable linking against pre-built uriparser
    - Enable dynamic linking against dependencies
    
    Author: David Li <li...@gmail.com>
    
    Closes #4092 from lihalite/arrow-5081 and squashes the following commits:
    
    77a3dea4a <David Li> Remove explicit search of Library subdirectories
    0feb3daaa <David Li> Enable uriparser to be non-bundled
    436daf5d1 <David Li> Use PATH_SUFFIXES when searching for dependencies
---
 cpp/cmake_modules/BuildUtils.cmake           | 14 ++++++++
 cpp/cmake_modules/FindArrow.cmake            | 15 +++++---
 cpp/cmake_modules/FindArrowCuda.cmake        |  6 ++--
 cpp/cmake_modules/FindBrotli.cmake           | 29 ++++++++-------
 cpp/cmake_modules/FindDoubleConversion.cmake |  7 ++--
 cpp/cmake_modules/FindFlatbuffersAlt.cmake   |  8 ++---
 cpp/cmake_modules/FindGLOG.cmake             | 17 +++++----
 cpp/cmake_modules/FindGPerf.cmake            |  2 ++
 cpp/cmake_modules/FindGTest.cmake            |  1 +
 cpp/cmake_modules/FindLz4.cmake              | 14 ++++----
 cpp/cmake_modules/FindRE2.cmake              | 17 +++++----
 cpp/cmake_modules/FindSnappyAlt.cmake        | 10 ++++--
 cpp/cmake_modules/FindZSTD.cmake             | 14 ++++----
 cpp/cmake_modules/Findc-aresAlt.cmake        | 12 +++----
 cpp/cmake_modules/FindgRPCAlt.cmake          | 49 +++++++++++++++----------
 cpp/cmake_modules/FindgflagsAlt.cmake        | 12 +++++--
 cpp/cmake_modules/Finduriparser.cmake        | 53 ++++++++++++++++++++++++++++
 17 files changed, 195 insertions(+), 85 deletions(-)

diff --git a/cpp/cmake_modules/BuildUtils.cmake b/cpp/cmake_modules/BuildUtils.cmake
index 0f014ba..90944e6 100644
--- a/cpp/cmake_modules/BuildUtils.cmake
+++ b/cpp/cmake_modules/BuildUtils.cmake
@@ -15,6 +15,20 @@
 # specific language governing permissions and limitations
 # under the License.
 
+# Common path suffixes to be searched by find_library or find_path.
+# Windows artifacts may be found under "<root>/Library", so
+# search there as well.
+set(LIB_PATH_SUFFIXES
+    "${CMAKE_LIBRARY_ARCHITECTURE}"
+    "lib64"
+    "lib32"
+    "lib"
+    "bin"
+    "Library",
+    "Library/lib",
+    "Library/bin")
+set(INCLUDE_PATH_SUFFIXES "include" "Library" "Library/include")
+
 function(ADD_THIRDPARTY_LIB LIB_NAME)
   set(options)
   set(one_value_args SHARED_LIB STATIC_LIB)
diff --git a/cpp/cmake_modules/FindArrow.cmake b/cpp/cmake_modules/FindArrow.cmake
index 77ac81c..1b9125f 100644
--- a/cpp/cmake_modules/FindArrow.cmake
+++ b/cpp/cmake_modules/FindArrow.cmake
@@ -61,12 +61,13 @@ else()
             NO_DEFAULT_PATH)
 endif()
 
-find_library(ARROW_LIB_PATH NAMES arrow PATHS ${ARROW_SEARCH_LIB_PATH} NO_DEFAULT_PATH)
+find_library(ARROW_LIB_PATH NAMES arrow PATHS ${ARROW_SEARCH_LIB_PATH} PATH_SUFFIXES ${LIB_PATH_SUFFIXES} NO_DEFAULT_PATH)
 get_filename_component(ARROW_LIBS ${ARROW_LIB_PATH} DIRECTORY)
 
 find_library(ARROW_PYTHON_LIB_PATH
              NAMES arrow_python
              PATHS ${ARROW_SEARCH_LIB_PATH}
+             PATH_SUFFIXES ${LIB_PATH_SUFFIXES}
              NO_DEFAULT_PATH)
 get_filename_component(ARROW_PYTHON_LIBS ${ARROW_PYTHON_LIB_PATH} DIRECTORY)
 
@@ -74,6 +75,7 @@ if(PYARROW_BUILD_FLIGHT)
   find_library(ARROW_FLIGHT_LIB_PATH
                NAMES arrow_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)
 endif()
@@ -85,17 +87,20 @@ if(MSVC)
     set(ARROW_MSVC_STATIC_LIB_SUFFIX "_static")
   endif()
 
+  # Prioritize "/bin" over LIB_PATH_SUFFIXES - DLL files are installed
+  # in "/bin" and static objects are in "/lib", so we want to search
+  # "/bin" first
   find_library(ARROW_SHARED_LIBRARIES
                NAMES arrow
                PATHS ${ARROW_HOME}
-               NO_DEFAULT_PATH
-               PATH_SUFFIXES "bin")
+               PATH_SUFFIXES "bin" ${LIB_PATH_SUFFIXES}
+               NO_DEFAULT_PATH)
 
   find_library(ARROW_PYTHON_SHARED_LIBRARIES
                NAMES arrow_python
                PATHS ${ARROW_HOME}
-               NO_DEFAULT_PATH
-               PATH_SUFFIXES "bin")
+               PATH_SUFFIXES "bin" ${LIB_PATH_SUFFIXES}
+               NO_DEFAULT_PATH)
   get_filename_component(ARROW_SHARED_LIBS ${ARROW_SHARED_LIBRARIES} PATH)
   get_filename_component(ARROW_PYTHON_SHARED_LIBS ${ARROW_PYTHON_SHARED_LIBRARIES} PATH)
 endif()
diff --git a/cpp/cmake_modules/FindArrowCuda.cmake b/cpp/cmake_modules/FindArrowCuda.cmake
index 5ed9dd9..8db6a14 100644
--- a/cpp/cmake_modules/FindArrowCuda.cmake
+++ b/cpp/cmake_modules/FindArrowCuda.cmake
@@ -49,6 +49,7 @@ endif()
 
 find_path(ARROW_CUDA_INCLUDE_DIR arrow/gpu/cuda_api.h
           PATHS ${ARROW_SEARCH_HEADER_PATHS}
+          PATH_SUFFIXES ${INCLUDE_PATH_SUFFIXES}
           NO_DEFAULT_PATH)
 
 if(NOT (ARROW_CUDA_INCLUDE_DIR STREQUAL ARROW_INCLUDE_DIR))
@@ -63,6 +64,7 @@ endif()
 find_library(ARROW_CUDA_LIB_PATH
              NAMES arrow_cuda
              PATHS ${ARROW_SEARCH_LIB_PATH}
+             PATH_SUFFIXES ${LIB_PATH_SUFFIXES}
              NO_DEFAULT_PATH)
 get_filename_component(ARROW_CUDA_LIBS ${ARROW_CUDA_LIB_PATH} DIRECTORY)
 
@@ -70,8 +72,8 @@ if(MSVC)
   find_library(ARROW_CUDA_SHARED_LIBRARIES
                NAMES arrow_cuda
                PATHS ${ARROW_HOME}
-               NO_DEFAULT_PATH
-               PATH_SUFFIXES "bin")
+               PATH_SUFFIXES ${LIB_PATH_SUFFIXES}
+               NO_DEFAULT_PATH)
   get_filename_component(ARROW_CUDA_SHARED_LIBS ${ARROW_CUDA_SHARED_LIBRARIES} PATH)
 endif()
 
diff --git a/cpp/cmake_modules/FindBrotli.cmake b/cpp/cmake_modules/FindBrotli.cmake
index e1429a2..39e4ff4 100644
--- a/cpp/cmake_modules/FindBrotli.cmake
+++ b/cpp/cmake_modules/FindBrotli.cmake
@@ -28,12 +28,15 @@ if(BROTLI_PC_FOUND)
 
   find_library(BROTLI_COMMON_LIBRARY brotlicommon
                PATHS ${BROTLI_PC_LIBRARY_DIRS}
+               PATH_SUFFIXES ${LIB_PATH_SUFFIXES}
                NO_DEFAULT_PATH)
   find_library(BROTLI_ENC_LIBRARY brotlienc
                PATHS ${BROTLI_PC_LIBRARY_DIRS}
+               PATH_SUFFIXES ${LIB_PATH_SUFFIXES}
                NO_DEFAULT_PATH)
   find_library(BROTLI_DEC_LIBRARY brotlidec
                PATHS ${BROTLI_PC_LIBRARY_DIRS}
+               PATH_SUFFIXES ${LIB_PATH_SUFFIXES}
                NO_DEFAULT_PATH)
 elseif(BROTLI_ROOT)
   find_library(
@@ -43,8 +46,8 @@ elseif(BROTLI_ROOT)
           ${CMAKE_STATIC_LIBRARY_PREFIX}brotlicommon${CMAKE_STATIC_LIBRARY_SUFFIX}
           ${CMAKE_STATIC_LIBRARY_PREFIX}brotlicommon-static${CMAKE_STATIC_LIBRARY_SUFFIX}
           ${CMAKE_STATIC_LIBRARY_PREFIX}brotlicommon_static${CMAKE_STATIC_LIBRARY_SUFFIX}
-    PATHS ${BROTLI_ROOT} "${BROTLI_ROOT}/Library"
-    PATH_SUFFIXES "lib64" "lib" "bin"
+    PATHS ${BROTLI_ROOT}
+    PATH_SUFFIXES ${LIB_PATH_SUFFIXES}
     NO_DEFAULT_PATH)
   find_library(
     BROTLI_ENC_LIBRARY
@@ -53,8 +56,8 @@ elseif(BROTLI_ROOT)
           ${CMAKE_STATIC_LIBRARY_PREFIX}brotlienc${CMAKE_STATIC_LIBRARY_SUFFIX}
           ${CMAKE_STATIC_LIBRARY_PREFIX}brotlienc-static${CMAKE_STATIC_LIBRARY_SUFFIX}
           ${CMAKE_STATIC_LIBRARY_PREFIX}brotlienc_static${CMAKE_STATIC_LIBRARY_SUFFIX}
-    PATHS ${BROTLI_ROOT} "${BROTLI_ROOT}/Library"
-    PATH_SUFFIXES "lib64" "lib" "bin"
+    PATHS ${BROTLI_ROOT}
+    PATH_SUFFIXES ${LIB_PATH_SUFFIXES}
     NO_DEFAULT_PATH)
   find_library(
     BROTLI_DEC_LIBRARY
@@ -63,14 +66,14 @@ elseif(BROTLI_ROOT)
           ${CMAKE_STATIC_LIBRARY_PREFIX}brotlidec${CMAKE_STATIC_LIBRARY_SUFFIX}
           ${CMAKE_STATIC_LIBRARY_PREFIX}brotlidec-static${CMAKE_STATIC_LIBRARY_SUFFIX}
           ${CMAKE_STATIC_LIBRARY_PREFIX}brotlidec_static${CMAKE_STATIC_LIBRARY_SUFFIX}
-    PATHS ${BROTLI_ROOT} "${BROTLI_ROOT}/Library"
-    PATH_SUFFIXES "lib64" "lib" "bin"
+    PATHS ${BROTLI_ROOT}
+    PATH_SUFFIXES ${LIB_PATH_SUFFIXES}
     NO_DEFAULT_PATH)
   find_path(BROTLI_INCLUDE_DIR
             NAMES brotli/decode.h
-            PATHS ${BROTLI_ROOT} "${BROTLI_ROOT}/Library"
+            PATHS ${BROTLI_ROOT}
             NO_DEFAULT_PATH
-            PATH_SUFFIXES "include")
+            PATH_SUFFIXES ${INCLUDE_PATH_SUFFIXES})
 else()
   find_library(
     BROTLI_COMMON_LIBRARY
@@ -79,7 +82,7 @@ else()
           ${CMAKE_STATIC_LIBRARY_PREFIX}brotlicommon${CMAKE_STATIC_LIBRARY_SUFFIX}
           ${CMAKE_STATIC_LIBRARY_PREFIX}brotlicommon-static${CMAKE_STATIC_LIBRARY_SUFFIX}
           ${CMAKE_STATIC_LIBRARY_PREFIX}brotlicommon_static${CMAKE_STATIC_LIBRARY_SUFFIX}
-    PATH_SUFFIXES "lib64" "lib" "bin")
+    PATH_SUFFIXES ${LIB_PATH_SUFFIXES})
   find_library(
     BROTLI_ENC_LIBRARY
     NAMES brotlienc
@@ -87,7 +90,7 @@ else()
           ${CMAKE_STATIC_LIBRARY_PREFIX}brotlienc${CMAKE_STATIC_LIBRARY_SUFFIX}
           ${CMAKE_STATIC_LIBRARY_PREFIX}brotlienc-static${CMAKE_STATIC_LIBRARY_SUFFIX}
           ${CMAKE_STATIC_LIBRARY_PREFIX}brotlienc_static${CMAKE_STATIC_LIBRARY_SUFFIX}
-    PATH_SUFFIXES "lib64" "lib" "bin")
+    PATH_SUFFIXES ${LIB_PATH_SUFFIXES})
   find_library(
     BROTLI_DEC_LIBRARY
     NAMES brotlidec
@@ -95,8 +98,10 @@ else()
           ${CMAKE_STATIC_LIBRARY_PREFIX}brotlidec${CMAKE_STATIC_LIBRARY_SUFFIX}
           ${CMAKE_STATIC_LIBRARY_PREFIX}brotlidec-static${CMAKE_STATIC_LIBRARY_SUFFIX}
           ${CMAKE_STATIC_LIBRARY_PREFIX}brotlidec_static${CMAKE_STATIC_LIBRARY_SUFFIX}
-    PATH_SUFFIXES "lib64" "lib" "bin")
-  find_path(BROTLI_INCLUDE_DIR NAMES brotli/decode.h PATH_SUFFIXES "include")
+    PATH_SUFFIXES ${LIB_PATH_SUFFIXES})
+  find_path(BROTLI_INCLUDE_DIR
+            NAMES brotli/decode.h
+            PATH_SUFFIXES ${INCLUDE_PATH_SUFFIXES})
 endif()
 
 find_package_handle_standard_args(Brotli
diff --git a/cpp/cmake_modules/FindDoubleConversion.cmake b/cpp/cmake_modules/FindDoubleConversion.cmake
index 8e21867..d5d2035 100644
--- a/cpp/cmake_modules/FindDoubleConversion.cmake
+++ b/cpp/cmake_modules/FindDoubleConversion.cmake
@@ -19,17 +19,18 @@ if(DoubleConversion_ROOT)
   find_library(DoubleConversion_LIB
                NAMES double-conversion
                PATHS ${DoubleConversion_ROOT}
-               NO_DEFAULT_PATH)
+               NO_DEFAULT_PATH
+               PATH_SUFFIXES ${LIB_PATH_SUFFIXES})
   find_path(DoubleConversion_INCLUDE_DIR
             NAMES double-conversion/double-conversion.h
             PATHS ${DoubleConversion_ROOT}
             NO_DEFAULT_PATH
-            PATH_SUFFIXES "include")
+            PATH_SUFFIXES ${INCLUDE_PATH_SUFFIXES})
 else()
   find_library(DoubleConversion_LIB NAMES double-conversion)
   find_path(DoubleConversion_INCLUDE_DIR
             NAMES double-conversion/double-conversion.h
-            PATH_SUFFIXES "include")
+            PATH_SUFFIXES ${INCLUDE_PATH_SUFFIXES})
 endif()
 
 find_package_handle_standard_args(DoubleConversion REQUIRED_VARS DoubleConversion_LIB
diff --git a/cpp/cmake_modules/FindFlatbuffersAlt.cmake b/cpp/cmake_modules/FindFlatbuffersAlt.cmake
index 245f94a..c551c1c 100644
--- a/cpp/cmake_modules/FindFlatbuffersAlt.cmake
+++ b/cpp/cmake_modules/FindFlatbuffersAlt.cmake
@@ -20,22 +20,22 @@ if(Flatbuffers_ROOT)
                NAMES flatbuffers
                PATHS ${Flatbuffers_ROOT}
                NO_DEFAULT_PATH
-               PATH_SUFFIXES "lib")
+               PATH_SUFFIXES ${LIB_PATH_SUFFIXES})
   find_path(FLATBUFFERS_INCLUDE_DIR
             NAMES flatbuffers/flatbuffers.h
             PATHS ${Flatbuffers_ROOT}
             NO_DEFAULT_PATH
-            PATH_SUFFIXES "include")
+            PATH_SUFFIXES ${INCLUDE_PATH_SUFFIXES})
   find_program(FLATC
                NAMES flatc
                PATHS ${Flatbuffers_ROOT}
                NO_DEFAULT_PATH
                PATH_SUFFIXES "bin")
 else()
-  find_library(FLATBUFFERS_LIB NAMES flatbuffers)
+  find_library(FLATBUFFERS_LIB NAMES flatbuffers PATH_SUFFIXES ${LIB_PATH_SUFFIXES})
   find_path(FLATBUFFERS_INCLUDE_DIR
             NAMES flatbuffers/flatbuffers.h
-            PATH_SUFFIXES "include")
+            PATH_SUFFIXES ${INCLUDE_PATH_SUFFIXES})
   find_program(FLATC NAMES flatc PATHS PATH_SUFFIXES "bin")
 endif()
 
diff --git a/cpp/cmake_modules/FindGLOG.cmake b/cpp/cmake_modules/FindGLOG.cmake
index 2efc5e1..c5aa11b 100644
--- a/cpp/cmake_modules/FindGLOG.cmake
+++ b/cpp/cmake_modules/FindGLOG.cmake
@@ -21,21 +21,24 @@ pkg_check_modules(GLOG_PC libglog)
 if(GLOG_PC_FOUND)
   set(GLOG_INCLUDE_DIR "${GLOG_PC_INCLUDEDIR}")
   list(APPEND GLOG_PC_LIBRARY_DIRS "${GLOG_PC_LIBDIR}")
-  find_library(GLOG_LIB glog PATHS ${GLOG_PC_LIBRARY_DIRS} NO_DEFAULT_PATH)
+  find_library(GLOG_LIB glog
+               PATHS ${GLOG_PC_LIBRARY_DIRS}
+               PATH_SUFFIXES ${LIB_PATH_SUFFIXES}
+               NO_DEFAULT_PATH)
 elseif(GLOG_ROOT)
   find_library(GLOG_LIB
                NAMES glog
-               PATHS ${GLOG_ROOT} "${GLOG_ROOT}/Library"
-               PATH_SUFFIXES "lib64" "lib" "bin"
+               PATHS ${GLOG_ROOT}
+               PATH_SUFFIXES ${LIB_PATH_SUFFIXES}
                NO_DEFAULT_PATH)
   find_path(GLOG_INCLUDE_DIR
             NAMES glog/logging.h
-            PATHS ${GLOG_ROOT} "${GLOG_ROOT}/Library"
+            PATHS ${GLOG_ROOT}
             NO_DEFAULT_PATH
-            PATH_SUFFIXES "include")
+            PATH_SUFFIXES ${INCLUDE_PATH_SUFFIXES})
 else()
-  find_library(GLOG_LIB NAMES glog PATH_SUFFIXES "lib64" "lib" "bin")
-  find_path(GLOG_INCLUDE_DIR NAMES glog/logging.h PATH_SUFFIXES "include")
+  find_library(GLOG_LIB NAMES glog PATH_SUFFIXES ${LIB_PATH_SUFFIXES})
+  find_path(GLOG_INCLUDE_DIR NAMES glog/logging.h PATH_SUFFIXES ${INCLUDE_PATH_SUFFIXES})
 endif()
 
 find_package_handle_standard_args(GLOG REQUIRED_VARS GLOG_INCLUDE_DIR GLOG_LIB)
diff --git a/cpp/cmake_modules/FindGPerf.cmake b/cpp/cmake_modules/FindGPerf.cmake
index e90d4d0..96e507f 100644
--- a/cpp/cmake_modules/FindGPerf.cmake
+++ b/cpp/cmake_modules/FindGPerf.cmake
@@ -35,6 +35,7 @@ SET(GPERF_LIB_SEARCH $ENV{NATIVE_TOOLCHAIN}/gperftools-$ENV{GPERFTOOLS_VERSION}/
 FIND_LIBRARY(TCMALLOC_LIB_PATH
   NAMES libtcmalloc.a
   PATHS ${GPERF_LIB_SEARCH}
+  PATH_SUFFIXES ${LIB_PATH_SUFFIXES}
   NO_DEFAULT_PATH
 )
 
@@ -51,6 +52,7 @@ ENDIF (TCMALLOC_LIB_PATH AND GOOGLE_PERFTOOLS_INCLUDE_DIR)
 FIND_LIBRARY(PROFILER_LIB_PATH
   NAMES libprofiler.a
   PATHS ${GPERF_LIB_SEARCH}
+  PATH_SUFFIXES ${LIB_PATH_SUFFIXES}
 )
 
 IF (PROFILER_LIB_PATH AND GOOGLE_PERFTOOLS_INCLUDE_DIR)
diff --git a/cpp/cmake_modules/FindGTest.cmake b/cpp/cmake_modules/FindGTest.cmake
index 4086dd9..d746e40 100644
--- a/cpp/cmake_modules/FindGTest.cmake
+++ b/cpp/cmake_modules/FindGTest.cmake
@@ -194,6 +194,7 @@ find_path(GTEST_INCLUDE_DIR gtest/gtest.h
     HINTS
         $ENV{GTEST_ROOT}/include
         ${GTEST_ROOT}/include
+    PATH_SUFFIXES ${LIB_PATH_SUFFIXES}
 )
 mark_as_advanced(GTEST_INCLUDE_DIR)
 
diff --git a/cpp/cmake_modules/FindLz4.cmake b/cpp/cmake_modules/FindLz4.cmake
index 3606f5c..484466e 100644
--- a/cpp/cmake_modules/FindLz4.cmake
+++ b/cpp/cmake_modules/FindLz4.cmake
@@ -31,27 +31,27 @@ if(LZ4_PC_FOUND)
   find_library(LZ4_LIB lz4
                PATHS ${LZ4_PC_LIBRARY_DIRS}
                NO_DEFAULT_PATH
-               PATH_SUFFIXES "${CMAKE_LIBRARY_ARCHITECTURE}")
+               PATH_SUFFIXES ${LIB_PATH_SUFFIXES})
 elseif(LZ4_ROOT)
   find_library(
     LZ4_LIB
     NAMES lz4 ${LZ4_STATIC_LIB_NAME} lib${LZ4_STATIC_LIB_NAME}
           "${CMAKE_SHARED_LIBRARY_PREFIX}lz4_static${CMAKE_SHARED_LIBRARY_SUFFIX}"
-    PATHS ${LZ4_ROOT} "${LZ4_ROOT}/Library"
-    PATH_SUFFIXES "lib64" "lib" "bin"
+    PATHS ${LZ4_ROOT}
+    PATH_SUFFIXES ${LIB_PATH_SUFFIXES}
     NO_DEFAULT_PATH)
   find_path(LZ4_INCLUDE_DIR
             NAMES lz4.h
-            PATHS ${LZ4_ROOT} "${LZ4_ROOT}/Library"
+            PATHS ${LZ4_ROOT}
             NO_DEFAULT_PATH
-            PATH_SUFFIXES "include")
+            PATH_SUFFIXES ${INCLUDE_PATH_SUFFIXES})
 else()
   find_library(
     LZ4_LIB
     NAMES lz4 ${LZ4_STATIC_LIB_NAME} lib${LZ4_STATIC_LIB_NAME}
           "${CMAKE_SHARED_LIBRARY_PREFIX}lz4_static${CMAKE_SHARED_LIBRARY_SUFFIX}"
-    PATH_SUFFIXES "lib64" "lib" "bin")
-  find_path(LZ4_INCLUDE_DIR NAMES lz4.h PATH_SUFFIXES "include")
+    PATH_SUFFIXES ${LIB_PATH_SUFFIXES})
+  find_path(LZ4_INCLUDE_DIR NAMES lz4.h PATH_SUFFIXES ${INCLUDE_PATH_SUFFIXES})
 endif()
 
 find_package_handle_standard_args(Lz4 REQUIRED_VARS LZ4_LIB LZ4_INCLUDE_DIR)
diff --git a/cpp/cmake_modules/FindRE2.cmake b/cpp/cmake_modules/FindRE2.cmake
index 79f2216..8fab995 100644
--- a/cpp/cmake_modules/FindRE2.cmake
+++ b/cpp/cmake_modules/FindRE2.cmake
@@ -20,7 +20,10 @@ if(RE2_PC_FOUND)
   set(RE2_INCLUDE_DIR "${RE2_PC_INCLUDEDIR}")
 
   list(APPEND RE2_PC_LIBRARY_DIRS "${RE2_PC_LIBDIR}")
-  find_library(RE2_LIB re2 PATHS ${RE2_PC_LIBRARY_DIRS} NO_DEFAULT_PATH)
+  find_library(RE2_LIB re2
+               PATHS ${RE2_PC_LIBRARY_DIRS}
+               PATH_SUFFIXES ${LIB_PATH_SUFFIXES}
+               NO_DEFAULT_PATH)
 
   # On Fedora, the reported prefix is wrong. As users likely run into this,
   # workaround.
@@ -37,14 +40,14 @@ elseif(RE2_ROOT)
       re2
       "${CMAKE_STATIC_LIBRARY_PREFIX}re2${RE2_MSVC_STATIC_LIB_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}"
       "${CMAKE_SHARED_LIBRARY_PREFIX}re2${CMAKE_SHARED_LIBRARY_SUFFIX}"
-    PATHS ${RE2_ROOT} "${RE2_ROOT}/Library"
-    PATH_SUFFIXES "lib64" "lib" "bin"
+    PATHS ${RE2_ROOT}
+    PATH_SUFFIXES ${LIB_PATH_SUFFIXES}
     NO_DEFAULT_PATH)
   find_path(RE2_INCLUDE_DIR
             NAMES re2/re2.h
-            PATHS ${RE2_ROOT} "${RE2_ROOT}/Library"
+            PATHS ${RE2_ROOT}
             NO_DEFAULT_PATH
-            PATH_SUFFIXES "include")
+            PATH_SUFFIXES ${INCLUDE_PATH_SUFFIXES})
 else()
   find_library(
     RE2_LIB
@@ -52,8 +55,8 @@ else()
       re2
       "${CMAKE_STATIC_LIBRARY_PREFIX}re2${RE2_MSVC_STATIC_LIB_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}"
       "${CMAKE_SHARED_LIBRARY_PREFIX}re2${CMAKE_SHARED_LIBRARY_SUFFIX}"
-    PATH_SUFFIXES "lib64" "lib" "bin")
-  find_path(RE2_INCLUDE_DIR NAMES re2/re2.h PATH_SUFFIXES "include")
+    PATH_SUFFIXES ${LIB_PATH_SUFFIXES})
+  find_path(RE2_INCLUDE_DIR NAMES re2/re2.h PATH_SUFFIXES ${INCLUDE_PATH_SUFFIXES})
 endif()
 
 find_package_handle_standard_args(RE2 REQUIRED_VARS RE2_LIB RE2_INCLUDE_DIR)
diff --git a/cpp/cmake_modules/FindSnappyAlt.cmake b/cpp/cmake_modules/FindSnappyAlt.cmake
index ffe40e0..019c879 100644
--- a/cpp/cmake_modules/FindSnappyAlt.cmake
+++ b/cpp/cmake_modules/FindSnappyAlt.cmake
@@ -16,15 +16,19 @@
 # under the License.
 
 if(Snappy_ROOT)
-  find_library(Snappy_LIB NAMES snappy PATHS ${Snappy_ROOT} NO_DEFAULT_PATH)
+  find_library(Snappy_LIB
+               NAMES snappy
+               PATHS ${Snappy_ROOT}
+               PATH_SUFFIXES ${LIB_PATH_SUFFIXES}
+               NO_DEFAULT_PATH)
   find_path(Snappy_INCLUDE_DIR
             NAMES snappy.h
             PATHS ${Snappy_ROOT}
             NO_DEFAULT_PATH
-            PATH_SUFFIXES "include")
+            PATH_SUFFIXES ${INCLUDE_PATH_SUFFIXES})
 else()
   find_library(Snappy_LIB NAMES snappy)
-  find_path(Snappy_INCLUDE_DIR NAMES snappy.h PATH_SUFFIXES "include")
+  find_path(Snappy_INCLUDE_DIR NAMES snappy.h PATH_SUFFIXES ${INCLUDE_PATH_SUFFIXES})
 endif()
 
 find_package_handle_standard_args(SnappyAlt REQUIRED_VARS Snappy_LIB Snappy_INCLUDE_DIR)
diff --git a/cpp/cmake_modules/FindZSTD.cmake b/cpp/cmake_modules/FindZSTD.cmake
index 17b58a3..936016f 100644
--- a/cpp/cmake_modules/FindZSTD.cmake
+++ b/cpp/cmake_modules/FindZSTD.cmake
@@ -30,26 +30,26 @@ if(ZSTD_PC_FOUND)
   find_library(ZSTD_LIB zstd
                PATHS ${ZSTD_PC_LIBRARY_DIRS}
                NO_DEFAULT_PATH
-               PATH_SUFFIXES "${CMAKE_LIBRARY_ARCHITECTURE}")
+               PATH_SUFFIXES ${LIB_PATH_SUFFIXES})
 elseif(ZSTD_ROOT)
   message(STATUS "Using ZSTD_ROOT: ${ZSTD_ROOT}")
   find_library(ZSTD_LIB
                NAMES zstd "${ZSTD_STATIC_LIB_NAME}" "lib${ZSTD_STATIC_LIB_NAME}"
                      "${CMAKE_SHARED_LIBRARY_PREFIX}zstd${CMAKE_SHARED_LIBRARY_SUFFIX}"
-               PATHS ${ZSTD_ROOT} "${ZSTD_ROOT}/Library"
-               PATH_SUFFIXES "lib64" "lib" "bin"
+               PATHS ${ZSTD_ROOT}
+               PATH_SUFFIXES ${LIB_PATH_SUFFIXES}
                NO_DEFAULT_PATH)
   find_path(ZSTD_INCLUDE_DIR
             NAMES zstd.h
-            PATHS ${ZSTD_ROOT} "${ZSTD_ROOT}/Library"
+            PATHS ${ZSTD_ROOT}
             NO_DEFAULT_PATH
-            PATH_SUFFIXES "include")
+            PATH_SUFFIXES ${INCLUDE_PATH_SUFFIXES})
 else()
   find_library(ZSTD_LIB
                NAMES zstd "${ZSTD_STATIC_LIB_NAME}" "lib${ZSTD_STATIC_LIB_NAME}"
                      "${CMAKE_SHARED_LIBRARY_PREFIX}zstd${CMAKE_SHARED_LIBRARY_SUFFIX}"
-               PATH_SUFFIXES "lib64" "lib" "bin")
-  find_path(ZSTD_INCLUDE_DIR NAMES zstd.h PATH_SUFFIXES "include")
+               PATH_SUFFIXES ${LIB_PATH_SUFFIXES})
+  find_path(ZSTD_INCLUDE_DIR NAMES zstd.h PATH_SUFFIXES ${INCLUDE_PATH_SUFFIXES})
 endif()
 
 find_package_handle_standard_args(ZSTD REQUIRED_VARS ZSTD_LIB ZSTD_INCLUDE_DIR)
diff --git a/cpp/cmake_modules/Findc-aresAlt.cmake b/cpp/cmake_modules/Findc-aresAlt.cmake
index f31dfef..a769fb5 100644
--- a/cpp/cmake_modules/Findc-aresAlt.cmake
+++ b/cpp/cmake_modules/Findc-aresAlt.cmake
@@ -18,17 +18,17 @@
 if(c-ares_ROOT)
   find_library(CARES_LIB
                NAMES cares
-               PATHS ${c-ares_ROOT} "${c-ares_ROOT}/Library"
-               PATH_SUFFIXES "lib64" "lib" "bin"
+               PATHS ${c-ares_ROOT}
+               PATH_SUFFIXES ${LIB_PATH_SUFFIXES}
                NO_DEFAULT_PATH)
   find_path(CARES_INCLUDE_DIR
             NAMES ares.h
-            PATHS ${CARES_ROOT} "${CARES_ROOT}/Library"
+            PATHS ${c-ares_ROOT}
             NO_DEFAULT_PATH
-            PATH_SUFFIXES "include")
+            PATH_SUFFIXES ${INCLUDE_PATH_SUFFIXES})
 else()
-  find_library(CARES_LIB NAMES cares PATH_SUFFIXES "lib64" "lib" "bin")
-  find_path(CARES_INCLUDE_DIR NAMES ares.h PATH_SUFFIXES "include")
+  find_library(CARES_LIB NAMES cares PATH_SUFFIXES ${LIB_PATH_SUFFIXES})
+  find_path(CARES_INCLUDE_DIR NAMES ares.h PATH_SUFFIXES ${INCLUDE_PATH_SUFFIXES})
 endif()
 
 find_package_handle_standard_args(c-aresAlt REQUIRED_VARS CARES_INCLUDE_DIR CARES_LIB)
diff --git a/cpp/cmake_modules/FindgRPCAlt.cmake b/cpp/cmake_modules/FindgRPCAlt.cmake
index 5bb4b27..5d0ec84 100644
--- a/cpp/cmake_modules/FindgRPCAlt.cmake
+++ b/cpp/cmake_modules/FindgRPCAlt.cmake
@@ -17,11 +17,21 @@ if(GRPC_PC_FOUND)
   list(APPEND GRPC_PC_LIBRARY_DIRS "${GRPC_PC_LIBDIR}")
   message(STATUS "${GRPC_PC_LIBRARY_DIRS}")
 
-  find_library(GRPC_GPR_LIB gpr PATHS ${GRPC_PC_LIBRARY_DIRS} NO_DEFAULT_PATH)
-  find_library(GRPC_GRPC_LIB grpc PATHS ${GRPC_PC_LIBRARY_DIRS} NO_DEFAULT_PATH)
-  find_library(GRPC_GRPCPP_LIB grpc++ PATHS ${GRPC_PC_LIBRARY_DIRS} NO_DEFAULT_PATH)
+  find_library(GRPC_GPR_LIB gpr
+               PATHS ${GRPC_PC_LIBRARY_DIRS}
+               PATH_SUFFIXES ${LIB_PATH_SUFFIXES}
+               NO_DEFAULT_PATH)
+  find_library(GRPC_GRPC_LIB grpc
+               PATHS ${GRPC_PC_LIBRARY_DIRS}
+               PATH_SUFFIXES ${LIB_PATH_SUFFIXES}
+               NO_DEFAULT_PATH)
+  find_library(GRPC_GRPCPP_LIB grpc++
+               PATHS ${GRPC_PC_LIBRARY_DIRS}
+               PATH_SUFFIXES ${LIB_PATH_SUFFIXES}
+               NO_DEFAULT_PATH)
   find_library(GRPC_ADDRESS_SORTING_LIB address_sorting
                PATHS ${GRPC_PC_LIBRARY_DIRS}
+               PATH_SUFFIXES ${LIB_PATH_SUFFIXES}
                NO_DEFAULT_PATH)
   find_program(GRPC_CPP_PLUGIN grpc_cpp_plugin
                HINTS ${GRPC_PC_PREFIX}
@@ -29,36 +39,37 @@ if(GRPC_PC_FOUND)
                PATH_SUFFIXES "bin")
 elseif(gRPC_ROOT)
   find_library(GRPC_GPR_LIB gpr
-               PATHS ${GRPC_ROOT} "${GRPC_ROOT}/Library"
-               PATH_SUFFIXES "lib64" "lib" "bin"
+               PATHS ${gRPC_ROOT}
+               PATH_SUFFIXES ${LIB_PATH_SUFFIXES}
                NO_DEFAULT_PATH)
   find_library(GRPC_GRPC_LIB grpc
-               PATHS ${GRPC_ROOT} "${GRPC_ROOT}/Library"
-               PATH_SUFFIXES "lib64" "lib" "bin"
+               PATHS ${gRPC_ROOT}
+               PATH_SUFFIXES ${LIB_PATH_SUFFIXES}
                NO_DEFAULT_PATH)
   find_library(GRPC_GRPCPP_LIB grpc++
-               PATHS ${GRPC_ROOT} "${GRPC_ROOT}/Library"
-               PATH_SUFFIXES "lib64" "lib" "bin"
+               PATHS ${gRPC_ROOT}
+               PATH_SUFFIXES ${LIB_PATH_SUFFIXES}
                NO_DEFAULT_PATH)
   find_library(GRPC_ADDRESS_SORTING_LIB address_sorting
-               PATHS ${GRPC_ROOT} "${GRPC_ROOT}/Library"
-               PATH_SUFFIXES "lib64" "lib" "bin"
+               PATHS ${gRPC_ROOT}
+               PATH_SUFFIXES ${LIB_PATH_SUFFIXES}
                NO_DEFAULT_PATH)
   find_program(GRPC_CPP_PLUGIN grpc_cpp_plugin NO_DEFAULT_PATH
-               PATHS ${GRPC_ROOT} "${GRPC_ROOT}/Library"
+               PATHS ${gRPC_ROOT}
                PATH_SUFFIXES "bin")
   find_path(GRPC_INCLUDE_DIR
             NAMES grpc/grpc.h
-            PATHS ${GRPC_ROOT} "${GRPC_ROOT}/Library"
+            PATHS ${gRPC_ROOT}
             NO_DEFAULT_PATH
-            PATH_SUFFIXES "include")
+            PATH_SUFFIXES ${INCLUDE_PATH_SUFFIXES})
 else()
-  find_library(GRPC_GPR_LIB gpr PATH_SUFFIXES "lib64" "lib" "bin")
-  find_library(GRPC_GRPC_LIB grpc PATH_SUFFIXES "lib64" "lib" "bin")
-  find_library(GRPC_GRPCPP_LIB grpc++ PATH_SUFFIXES "lib64" "lib" "bin")
-  find_library(GRPC_ADDRESS_SORTING_LIB address_sorting PATH_SUFFIXES "lib64" "lib" "bin")
+  find_library(GRPC_GPR_LIB gpr PATH_SUFFIXES ${LIB_PATH_SUFFIXES})
+  find_library(GRPC_GRPC_LIB grpc PATH_SUFFIXES ${LIB_PATH_SUFFIXES})
+  find_library(GRPC_GRPCPP_LIB grpc++ PATH_SUFFIXES ${LIB_PATH_SUFFIXES})
+  find_library(GRPC_ADDRESS_SORTING_LIB address_sorting
+               PATH_SUFFIXES ${LIB_PATH_SUFFIXES})
   find_program(GRPC_CPP_PLUGIN grpc_cpp_plugin PATH_SUFFIXES "bin")
-  find_path(GRPC_INCLUDE_DIR NAMES grpc/grpc.h PATH_SUFFIXES "include")
+  find_path(GRPC_INCLUDE_DIR NAMES grpc/grpc.h PATH_SUFFIXES ${INCLUDE_PATH_SUFFIXES})
 endif()
 
 find_package_handle_standard_args(gRPCAlt
diff --git a/cpp/cmake_modules/FindgflagsAlt.cmake b/cpp/cmake_modules/FindgflagsAlt.cmake
index a9b8684..dfd64f8 100644
--- a/cpp/cmake_modules/FindgflagsAlt.cmake
+++ b/cpp/cmake_modules/FindgflagsAlt.cmake
@@ -16,15 +16,21 @@
 # under the License.
 
 if(gflags_ROOT)
-  find_library(gflags_LIB NAMES gflags PATHS ${gflags_ROOT} NO_DEFAULT_PATH)
+  find_library(gflags_LIB
+               NAMES gflags
+               PATHS ${gflags_ROOT}
+               PATH_SUFFIXES ${LIB_PATH_SUFFIXES}
+               NO_DEFAULT_PATH)
   find_path(GFLAGS_INCLUDE_DIR
             NAMES gflags/gflags.h
             PATHS ${gflags_ROOT}
             NO_DEFAULT_PATH
-            PATH_SUFFIXES "include")
+            PATH_SUFFIXES ${INCLUDE_PATH_SUFFIXES})
 else()
   find_library(gflags_LIB NAMES gflags)
-  find_path(GFLAGS_INCLUDE_DIR NAMES gflags/gflags.h PATH_SUFFIXES "include")
+  find_path(GFLAGS_INCLUDE_DIR
+            NAMES gflags/gflags.h
+            PATH_SUFFIXES ${INCLUDE_PATH_SUFFIXES})
 endif()
 
 find_package_handle_standard_args(gflagsAlt REQUIRED_VARS gflags_LIB GFLAGS_INCLUDE_DIR)
diff --git a/cpp/cmake_modules/Finduriparser.cmake b/cpp/cmake_modules/Finduriparser.cmake
new file mode 100644
index 0000000..a24cca4
--- /dev/null
+++ b/cpp/cmake_modules/Finduriparser.cmake
@@ -0,0 +1,53 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+pkg_check_modules(uriparser_PC liburiparser)
+if(uriparser_PC_FOUND)
+  set(uriparser_INCLUDE_DIR "${uriparser_PC_INCLUDEDIR}")
+
+  list(APPEND uriparser_PC_LIBRARY_DIRS "${uriparser_PC_LIBDIR}")
+  find_library(uriparser_LIB uriparser
+               PATHS ${uriparser_PC_LIBRARY_DIRS}
+               NO_DEFAULT_PATH
+               PATH_SUFFIXES "${CMAKE_LIBRARY_ARCHITECTURE}")
+elseif(uriparser_ROOT)
+  message(STATUS "Using uriparser_ROOT: ${uriparser_ROOT}")
+  find_library(uriparser_LIB
+               NAMES uriparser
+               PATHS ${uriparser_ROOT}
+               PATH_SUFFIXES ${LIB_PATH_SUFFIXES}
+               NO_DEFAULT_PATH)
+  find_path(uriparser_INCLUDE_DIR
+            NAMES uriparser/Uri.h
+            PATHS ${uriparser_ROOT}
+            NO_DEFAULT_PATH
+            PATH_SUFFIXES ${INCLUDE_PATH_SUFFIXES})
+else()
+  find_library(uriparser_LIB
+               NAMES uriparser
+               PATH_SUFFIXES ${LIB_PATH_SUFFIXES})
+  find_path(uriparser_INCLUDE_DIR NAMES uriparser/Uri.h PATH_SUFFIXES ${INCLUDE_PATH_SUFFIXES})
+endif()
+
+find_package_handle_standard_args(uriparser REQUIRED_VARS uriparser_LIB uriparser_INCLUDE_DIR)
+
+if(uriparser_FOUND)
+  add_library(uriparser::uriparser UNKNOWN IMPORTED)
+  set_target_properties(uriparser::uriparser
+                        PROPERTIES IMPORTED_LOCATION "${uriparser_LIB}"
+                                   INTERFACE_INCLUDE_DIRECTORIES "${uriparser_INCLUDE_DIR}")
+endif()