This is an automated email from the ASF dual-hosted git repository.
gangwu pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/orc.git
The following commit(s) were added to refs/heads/main by this push:
new 3bf6ea99c ORC-1689: [C++] Generate CMake config file
3bf6ea99c is described below
commit 3bf6ea99cc35595dfa972fe955b6777ad63d1df5
Author: Gang Wu <[email protected]>
AuthorDate: Sat Apr 27 22:13:48 2024 +0800
ORC-1689: [C++] Generate CMake config file
### What changes were proposed in this pull request?
Generate cmake config file and install it.
### Why are the changes needed?
It is good for downstream projects to find ORC library.
### How was this patch tested?
Test it locally.
### Was this patch authored or co-authored using generative AI tooling?
No.
Closes #1889 from wgtmac/ORC-1689.
Authored-by: Gang Wu <[email protected]>
Signed-off-by: Gang Wu <[email protected]>
---
CMakeLists.txt | 3 +
c++/CMakeLists.txt | 14 +++++
c++/include/CMakeLists.txt | 9 +--
c++/orcConfig.cmake.in | 103 ++++++++++++++++++++++++++++++++
c++/src/CMakeLists.txt | 27 ++++++---
cmake_modules/FindLZ4.cmake | 19 +++++-
cmake_modules/FindProtobuf.cmake | 32 ++++++++--
cmake_modules/FindSnappy.cmake | 29 +++++++--
cmake_modules/FindZLIB.cmake | 17 ++++++
cmake_modules/FindZSTD.cmake | 25 ++++++++
cmake_modules/ThirdpartyToolchain.cmake | 103 ++++++++++++++++++++++++++++++--
11 files changed, 351 insertions(+), 30 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 294179bea..213f55721 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -155,6 +155,9 @@ endif ()
enable_testing()
+INCLUDE(GNUInstallDirs) # Put it before ThirdpartyToolchain to make
CMAKE_INSTALL_LIBDIR available.
+set(ORC_INSTALL_CMAKE_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/orc)
+
INCLUDE(CheckSourceCompiles)
INCLUDE(ThirdpartyToolchain)
diff --git a/c++/CMakeLists.txt b/c++/CMakeLists.txt
index ec06458db..38c38f7ce 100644
--- a/c++/CMakeLists.txt
+++ b/c++/CMakeLists.txt
@@ -21,3 +21,17 @@ add_subdirectory(src)
if (BUILD_CPP_TESTS)
add_subdirectory(test)
endif ()
+
+# Generate cmake package configuration files
+include(CMakePackageConfigHelpers)
+configure_package_config_file(
+ orcConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/orcConfig.cmake
+ INSTALL_DESTINATION ${ORC_INSTALL_CMAKE_DIR})
+write_basic_package_version_file(
+ ${CMAKE_CURRENT_BINARY_DIR}/orcConfigVersion.cmake
+ VERSION ${ORC_VERSION}
+ COMPATIBILITY SameMajorVersion)
+install(FILES
+ ${CMAKE_CURRENT_BINARY_DIR}/orcConfig.cmake
+ ${CMAKE_CURRENT_BINARY_DIR}/orcConfigVersion.cmake
+ DESTINATION ${ORC_INSTALL_CMAKE_DIR})
diff --git a/c++/include/CMakeLists.txt b/c++/include/CMakeLists.txt
index 056d1b9fa..a9f8b4a3b 100644
--- a/c++/include/CMakeLists.txt
+++ b/c++/include/CMakeLists.txt
@@ -22,10 +22,11 @@ configure_file (
install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/orc/orc-config.hh"
- DESTINATION "include/orc"
+ DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/orc"
)
install(DIRECTORY
- "orc/"
- DESTINATION "include/orc"
- FILES_MATCHING PATTERN "*.hh")
+ "orc/"
+ DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/orc"
+ FILES_MATCHING PATTERN "*.hh"
+ )
diff --git a/c++/orcConfig.cmake.in b/c++/orcConfig.cmake.in
new file mode 100644
index 000000000..49663b342
--- /dev/null
+++ b/c++/orcConfig.cmake.in
@@ -0,0 +1,103 @@
+# 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.
+#
+# This config sets the following variables in your project:
+#
+# orc_VERSION - version of the found ORC
+# orc_FOUND - true if ORC found on the system
+#
+# This config sets the following targets in your project:
+#
+# orc::orc - for linked as static library
+#
+# For backward compatibility, this config also sets the following variables:
+#
+# ORC_FOUND - same as orc_FOUND above
+# ORC_STATIC_LIB - static library of the found ORC
+# ORC_INCLUDE_DIR - include directory of the found ORC
+# ORC_INCLUDE_DIRS - same as ORC_INCLUDE_DIR above
+
+@PACKAGE_INIT@
+
+set(ORC_VENDOR_DEPENDENCIES "@ORC_VENDOR_DEPENDENCIES@")
+set(ORC_SYSTEM_DEPENDENCIES "@ORC_SYSTEM_DEPENDENCIES@")
+
+if(DEFINED CMAKE_MODULE_PATH)
+ set(ORC_CMAKE_MODULE_PATH_OLD ${CMAKE_MODULE_PATH})
+else()
+ unset(ORC_CMAKE_MODULE_PATH_OLD)
+endif()
+set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}")
+
+include(CMakeFindDependencyMacro)
+foreach(dependency ${ORC_SYSTEM_DEPENDENCIES})
+ find_dependency(${dependency})
+endforeach()
+
+if(DEFINED ORC_CMAKE_MODULE_PATH_OLD)
+ set(CMAKE_MODULE_PATH ${ORC_CMAKE_MODULE_PATH_OLD})
+ unset(ORC_CMAKE_MODULE_PATH_OLD)
+else()
+ unset(CMAKE_MODULE_PATH)
+endif()
+
+include("${CMAKE_CURRENT_LIST_DIR}/orcTargets.cmake")
+
+get_target_property(orc_static_configurations orc::orc IMPORTED_CONFIGURATIONS)
+
+foreach(dependency ${ORC_VENDOR_DEPENDENCIES})
+ string(REPLACE "|" ";" dependency_pair ${dependency})
+ list(LENGTH dependency_pair dependency_pair_length)
+ if(NOT dependency_pair_length EQUAL 2)
+ message(FATAL_ERROR "Invalid vendor dependency: ${dependency}")
+ endif()
+ list(GET dependency_pair 0 target_name)
+ list(GET dependency_pair 1 static_lib_name)
+
+ add_library("${target_name}" STATIC IMPORTED)
+
+ foreach(CONFIGURATION ${orc_static_configurations})
+ string(TOUPPER "${CONFIGURATION}" CONFIGURATION)
+ get_target_property(orc_static_location orc::orc LOCATION_${CONFIGURATION})
+ get_filename_component(orc_lib_dir "${orc_static_location}" DIRECTORY)
+ set_property(TARGET "${target_name}"
+ APPEND
+ PROPERTY IMPORTED_CONFIGURATIONS ${CONFIGURATION})
+ set_target_properties("${target_name}"
+ PROPERTIES IMPORTED_LOCATION_${CONFIGURATION}
+ "${orc_lib_dir}/${static_lib_name}")
+ endforeach()
+endforeach()
+
+check_required_components(orc)
+
+foreach(BUILD_TYPE_SUFFIX
+ "_RELEASE"
+ "_RELWITHDEBINFO"
+ "_MINSIZEREL"
+ "_DEBUG"
+ "")
+ if(NOT ORC_STATIC_LIB)
+ get_target_property(ORC_STATIC_LIB orc::orc
IMPORTED_LOCATION${BUILD_TYPE_SUFFIX})
+ endif()
+endforeach()
+
+get_target_property(ORC_INCLUDE_DIR orc::orc INTERFACE_INCLUDE_DIRECTORIES)
+
+set(ORC_FOUND TRUE)
+set(ORC_VERSION ${orc_VERSION})
+set(ORC_INCLUDE_DIRS ${ORC_INCLUDE_DIR})
diff --git a/c++/src/CMakeLists.txt b/c++/src/CMakeLists.txt
index af69c7f62..5b7840301 100644
--- a/c++/src/CMakeLists.txt
+++ b/c++/src/CMakeLists.txt
@@ -202,18 +202,23 @@ endif(BUILD_ENABLE_AVX512)
add_library (orc STATIC ${SOURCE_FILES})
target_link_libraries (orc
- orc::protobuf
- orc::zlib
- orc::snappy
- orc::lz4
- orc::zstd
- ${LIBHDFSPP_LIBRARIES}
+ INTERFACE
+ ${ORC_INSTALL_INTERFACE_TARGETS}
+ PRIVATE
+ $<BUILD_INTERFACE:orc::protobuf>
+ $<BUILD_INTERFACE:orc::zlib>
+ $<BUILD_INTERFACE:orc::snappy>
+ $<BUILD_INTERFACE:orc::lz4>
+ $<BUILD_INTERFACE:orc::zstd>
+ $<BUILD_INTERFACE:${LIBHDFSPP_LIBRARIES}>
)
target_include_directories (orc
+ INTERFACE
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
PUBLIC
- ${CMAKE_SOURCE_DIR}/c++/include
- ${CMAKE_BINARY_DIR}/c++/include
+ $<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/c++/include>
+ $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/c++/include>
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}
@@ -234,4 +239,8 @@ endif ()
add_dependencies(orc orc-format_ep)
-install(TARGETS orc DESTINATION lib)
+install(TARGETS orc EXPORT orc_targets)
+install(EXPORT orc_targets
+ DESTINATION ${ORC_INSTALL_CMAKE_DIR}
+ NAMESPACE "orc::"
+ FILE "orcTargets.cmake")
diff --git a/cmake_modules/FindLZ4.cmake b/cmake_modules/FindLZ4.cmake
index b1557f496..3b9cc7fbd 100644
--- a/cmake_modules/FindLZ4.cmake
+++ b/cmake_modules/FindLZ4.cmake
@@ -22,6 +22,16 @@
# LZ4_STATIC_LIB: path to lz4.a
# LZ4_FOUND: whether LZ4 has been found
+if (NOT LZ4_HOME)
+ if (DEFINED ENV{LZ4_HOME})
+ set (LZ4_HOME "$ENV{LZ4_HOME}")
+ elseif (LZ4_ROOT)
+ set (LZ4_HOME "${LZ4_ROOT}")
+ elseif (DEFINED ENV{LZ4_ROOT})
+ set (LZ4_HOME "$ENV{LZ4_ROOT}")
+ endif ()
+endif ()
+
if( NOT "${LZ4_HOME}" STREQUAL "")
file (TO_CMAKE_PATH "${LZ4_HOME}" _lz4_path)
endif()
@@ -33,7 +43,7 @@ find_path (LZ4_INCLUDE_DIR lz4.h HINTS
NO_DEFAULT_PATH
PATH_SUFFIXES "include")
-find_library (LZ4_LIBRARY NAMES lz4 HINTS
+find_library (LZ4_LIBRARY NAMES lz4 liblz4 HINTS
${_lz4_path}
PATH_SUFFIXES "lib" "lib64")
@@ -74,3 +84,10 @@ mark_as_advanced (
LZ4_STATIC_LIB
LZ4_LIBRARY
)
+
+if(LZ4_FOUND AND NOT TARGET LZ4::lz4)
+ add_library(LZ4::lz4 UNKNOWN IMPORTED)
+ set_target_properties(LZ4::lz4
+ PROPERTIES IMPORTED_LOCATION "${LZ4_LIBRARY}"
+ INTERFACE_INCLUDE_DIRECTORIES
"${LZ4_INCLUDE_DIR}")
+endif()
diff --git a/cmake_modules/FindProtobuf.cmake b/cmake_modules/FindProtobuf.cmake
index cca7c8b87..82429a23f 100644
--- a/cmake_modules/FindProtobuf.cmake
+++ b/cmake_modules/FindProtobuf.cmake
@@ -17,7 +17,7 @@
# PROTOBUF_HOME environmental variable is used to check for Protobuf headers
and static library
-# PROTOBUF_FOUND is set if Protobuf is found
+# Protobuf_FOUND is set if Protobuf is found
# PROTOBUF_INCLUDE_DIR: directory containing headers
# PROTOBUF_LIBRARY: location of libprotobuf
# PROTOBUF_STATIC_LIB: location of protobuf.a
@@ -25,6 +25,19 @@
# PROTOC_STATIC_LIB: location of protoc.a
# PROTOBUF_EXECUTABLE: location of protoc
+if (NOT PROTOBUF_HOME)
+ if (DEFINED ENV{PROTOBUF_HOME})
+ set (PROTOBUF_HOME "$ENV{PROTOBUF_HOME}")
+ elseif (Protobuf_ROOT)
+ set (PROTOBUF_HOME "${Protobuf_ROOT}")
+ elseif (DEFINED ENV{Protobuf_ROOT})
+ set (PROTOBUF_HOME "$ENV{Protobuf_ROOT}")
+ elseif (PROTOBUF_ROOT)
+ set (PROTOBUF_HOME "${PROTOBUF_ROOT}")
+ elseif (DEFINED ENV{PROTOBUF_ROOT})
+ set (PROTOBUF_HOME "$ENV{PROTOBUF_ROOT}")
+ endif ()
+endif ()
if( NOT "${PROTOBUF_HOME}" STREQUAL "")
file (TO_CMAKE_PATH "${PROTOBUF_HOME}" _protobuf_path)
@@ -63,7 +76,7 @@ else()
NO_DEFAULT_PATH
PATH_SUFFIXES "include")
- find_library (PROTOBUF_LIBRARY NAMES protobuf HINTS
+ find_library (PROTOBUF_LIBRARY NAMES protobuf libprotobuf HINTS
${_protobuf_path}
PATH_SUFFIXES "lib")
@@ -71,7 +84,7 @@ else()
${_protobuf_path}
PATH_SUFFIXES "lib")
- find_library (PROTOC_LIBRARY NAMES protoc HINTS
+ find_library (PROTOC_LIBRARY NAMES protoc libprotoc HINTS
${_protobuf_path}
PATH_SUFFIXES "lib")
@@ -86,14 +99,14 @@ else()
endif ()
if (PROTOBUF_INCLUDE_DIR AND PROTOBUF_LIBRARY AND PROTOC_LIBRARY AND
PROTOBUF_EXECUTABLE)
- set (PROTOBUF_FOUND TRUE)
+ set (Protobuf_FOUND TRUE)
set (PROTOBUF_LIB_NAME protobuf)
set (PROTOC_LIB_NAME protoc)
else ()
- set (PROTOBUF_FOUND FALSE)
+ set (Protobuf_FOUND FALSE)
endif ()
-if (PROTOBUF_FOUND)
+if (Protobuf_FOUND)
message (STATUS "Found the Protobuf headers: ${PROTOBUF_INCLUDE_DIR}")
message (STATUS "Found the Protobuf library: ${PROTOBUF_LIBRARY}")
message (STATUS "Found the Protoc library: ${PROTOC_LIBRARY}")
@@ -125,3 +138,10 @@ mark_as_advanced (
PROTOC_STATIC_LIB
PROTOC_LIBRARY
)
+
+if(Protobuf_FOUND AND NOT TARGET protobuf::libprotobuf)
+ add_library(protobuf::libprotobuf UNKNOWN IMPORTED)
+ set_target_properties(protobuf::libprotobuf
+ PROPERTIES IMPORTED_LOCATION "${PROTOBUF_LIBRARY}"
+ INTERFACE_INCLUDE_DIRECTORIES
"${PROTOBUF_INCLUDE_DIR}")
+endif()
diff --git a/cmake_modules/FindSnappy.cmake b/cmake_modules/FindSnappy.cmake
index f0a077380..1ad991454 100644
--- a/cmake_modules/FindSnappy.cmake
+++ b/cmake_modules/FindSnappy.cmake
@@ -20,7 +20,21 @@
# SNAPPY_INCLUDE_DIR: directory containing headers
# SNAPPY_LIBRARY: path to libsnappy
# SNAPPY_STATIC_LIB: path to libsnappy.a
-# SNAPPY_FOUND: whether snappy has been found
+# Snappy_FOUND: whether snappy has been found
+
+if (NOT SNAPPY_HOME)
+ if (DEFINED ENV{SNAPPY_HOME})
+ set (SNAPPY_HOME "$ENV{SNAPPY_HOME}")
+ elseif (Snappy_ROOT)
+ set (SNAPPY_HOME "${Snappy_ROOT}")
+ elseif (DEFINED ENV{Snappy_ROOT})
+ set (SNAPPY_HOME "$ENV{Snappy_ROOT}")
+ elseif (SNAPPY_ROOT)
+ set (SNAPPY_HOME "${SNAPPY_ROOT}")
+ elseif (DEFINED ENV{SNAPPY_ROOT})
+ set (SNAPPY_HOME "$ENV{SNAPPY_ROOT}")
+ endif ()
+endif ()
if( NOT "${SNAPPY_HOME}" STREQUAL "")
file (TO_CMAKE_PATH "${SNAPPY_HOME}" _snappy_path)
@@ -42,14 +56,14 @@ find_library (SNAPPY_STATIC_LIB NAMES
${CMAKE_STATIC_LIBRARY_PREFIX}${SNAPPY_LIB
PATH_SUFFIXES "lib" "lib64")
if (SNAPPY_INCLUDE_DIR AND SNAPPY_LIBRARY)
- set (SNAPPY_FOUND TRUE)
+ set (Snappy_FOUND TRUE)
set (SNAPPY_HEADER_NAME snappy.h)
set (SNAPPY_HEADER ${SNAPPY_INCLUDE_DIR}/${SNAPPY_HEADER_NAME})
else ()
- set (SNAPPY_FOUND FALSE)
+ set (Snappy_FOUND FALSE)
endif ()
-if (SNAPPY_FOUND)
+if (Snappy_FOUND)
message (STATUS "Found the Snappy header: ${SNAPPY_HEADER}")
message (STATUS "Found the Snappy library: ${SNAPPY_LIBRARY}")
if (SNAPPY_STATIC_LIB)
@@ -74,3 +88,10 @@ mark_as_advanced (
SNAPPY_STATIC_LIB
SNAPPY_LIBRARY
)
+
+if(Snappy_FOUND AND NOT TARGET Snappy::snappy)
+ add_library(Snappy::snappy UNKNOWN IMPORTED)
+ set_target_properties(Snappy::snappy
+ PROPERTIES IMPORTED_LOCATION "${SNAPPY_LIBRARY}"
+ INTERFACE_INCLUDE_DIRECTORIES
"${SNAPPY_INCLUDE_DIR}")
+endif()
diff --git a/cmake_modules/FindZLIB.cmake b/cmake_modules/FindZLIB.cmake
index 2f83a974c..374814a7f 100644
--- a/cmake_modules/FindZLIB.cmake
+++ b/cmake_modules/FindZLIB.cmake
@@ -22,6 +22,16 @@
# ZLIB_STATIC_LIB: path to zlib.a
# ZLIB_FOUND: whether ZLIB has been found
+if (NOT ZLIB_HOME)
+ if (DEFINED ENV{ZLIB_HOME})
+ set (ZLIB_HOME "$ENV{ZLIB_HOME}")
+ elseif (ZLIB_ROOT)
+ set (ZLIB_HOME "${ZLIB_ROOT}")
+ elseif (DEFINED ENV{ZLIB_ROOT})
+ set (ZLIB_HOME "$ENV{ZLIB_ROOT}")
+ endif ()
+endif ()
+
if( NOT "${ZLIB_HOME}" STREQUAL "")
file (TO_CMAKE_PATH "${ZLIB_HOME}" _zlib_path)
endif()
@@ -78,3 +88,10 @@ mark_as_advanced (
ZLIB_STATIC_LIB
ZLIB_LIBRARY
)
+
+if(ZLIB_FOUND AND NOT TARGET ZLIB::ZLIB)
+ add_library(ZLIB::ZLIB UNKNOWN IMPORTED)
+ set_target_properties(ZLIB::ZLIB
+ PROPERTIES IMPORTED_LOCATION "${ZLIB_LIBRARY}"
+ INTERFACE_INCLUDE_DIRECTORIES
"${ZLIB_INCLUDE_DIR}")
+endif()
diff --git a/cmake_modules/FindZSTD.cmake b/cmake_modules/FindZSTD.cmake
index 7ec197221..faa1fe935 100644
--- a/cmake_modules/FindZSTD.cmake
+++ b/cmake_modules/FindZSTD.cmake
@@ -22,6 +22,16 @@
# ZSTD_STATIC_LIB: path to libzstd.a
# ZSTD_FOUND: whether zstd has been found
+if (NOT ZSTD_HOME)
+ if (DEFINED ENV{ZSTD_HOME})
+ set (ZSTD_HOME "$ENV{ZSTD_HOME}")
+ elseif (ZSTD_ROOT)
+ set (ZSTD_HOME "${ZSTD_ROOT}")
+ elseif (DEFINED ENV{ZSTD_ROOT})
+ set (ZSTD_HOME "$ENV{ZSTD_ROOT}")
+ endif ()
+endif ()
+
if( NOT "${ZSTD_HOME}" STREQUAL "")
file (TO_CMAKE_PATH "${ZSTD_HOME}" _zstd_path)
endif()
@@ -74,3 +84,18 @@ mark_as_advanced (
ZSTD_STATIC_LIB
ZSTD_LIBRARY
)
+
+if(ZSTD_FOUND)
+ if(NOT TARGET zstd::libzstd_static AND ${ZSTD_STATIC_LIB})
+ add_library(zstd::libzstd_static STATIC IMPORTED)
+ set_target_properties(zstd::libzstd_static
+ PROPERTIES IMPORTED_LOCATION "${ZSTD_STATIC_LIB}"
+ INTERFACE_INCLUDE_DIRECTORIES
"${ZSTD_INCLUDE_DIR}")
+ endif()
+ if(NOT TARGET zstd::libzstd_shared AND NOT ${ZSTD_STATIC_LIB})
+ add_library(zstd::libzstd_shared SHARED IMPORTED)
+ set_target_properties(zstd::libzstd_shared
+ PROPERTIES IMPORTED_LOCATION "${ZSTD_LIBRARY}"
+ INTERFACE_INCLUDE_DIRECTORIES
"${ZSTD_INCLUDE_DIR}")
+ endif()
+endif()
diff --git a/cmake_modules/ThirdpartyToolchain.cmake
b/cmake_modules/ThirdpartyToolchain.cmake
index c3d414e89..79324984a 100644
--- a/cmake_modules/ThirdpartyToolchain.cmake
+++ b/cmake_modules/ThirdpartyToolchain.cmake
@@ -15,6 +15,10 @@
# specific language governing permissions and limitations
# under the License.
+set(ORC_VENDOR_DEPENDENCIES)
+set(ORC_SYSTEM_DEPENDENCIES)
+set(ORC_INSTALL_INTERFACE_TARGETS)
+
set(ORC_FORMAT_VERSION "1.0.0")
set(LZ4_VERSION "1.9.3")
set(SNAPPY_VERSION "1.1.7")
@@ -47,22 +51,50 @@ string(TOUPPER ${CMAKE_BUILD_TYPE} UPPERCASE_BUILD_TYPE)
if (DEFINED ENV{SNAPPY_HOME})
set (SNAPPY_HOME "$ENV{SNAPPY_HOME}")
+elseif (Snappy_ROOT)
+ set (SNAPPY_HOME "${Snappy_ROOT}")
+elseif (DEFINED ENV{Snappy_ROOT})
+ set (SNAPPY_HOME "$ENV{Snappy_ROOT}")
+elseif (SNAPPY_ROOT)
+ set (SNAPPY_HOME "${SNAPPY_ROOT}")
+elseif (DEFINED ENV{SNAPPY_ROOT})
+ set (SNAPPY_HOME "$ENV{SNAPPY_ROOT}")
endif ()
if (DEFINED ENV{ZLIB_HOME})
set (ZLIB_HOME "$ENV{ZLIB_HOME}")
+elseif (ZLIB_ROOT)
+ set (ZLIB_HOME "${ZLIB_ROOT}")
+elseif (DEFINED ENV{ZLIB_ROOT})
+ set (ZLIB_HOME "$ENV{ZLIB_ROOT}")
endif ()
if (DEFINED ENV{LZ4_HOME})
set (LZ4_HOME "$ENV{LZ4_HOME}")
+elseif (LZ4_ROOT)
+ set (LZ4_HOME "${LZ4_ROOT}")
+elseif (DEFINED ENV{LZ4_ROOT})
+ set (LZ4_HOME "$ENV{LZ4_ROOT}")
endif ()
if (DEFINED ENV{PROTOBUF_HOME})
set (PROTOBUF_HOME "$ENV{PROTOBUF_HOME}")
+elseif (Protobuf_ROOT)
+ set (PROTOBUF_HOME "${Protobuf_ROOT}")
+elseif (DEFINED ENV{Protobuf_ROOT})
+ set (PROTOBUF_HOME "$ENV{Protobuf_ROOT}")
+elseif (PROTOBUF_ROOT)
+ set (PROTOBUF_HOME "${PROTOBUF_ROOT}")
+elseif (DEFINED ENV{PROTOBUF_ROOT})
+ set (PROTOBUF_HOME "$ENV{PROTOBUF_ROOT}")
endif ()
if (DEFINED ENV{ZSTD_HOME})
set (ZSTD_HOME "$ENV{ZSTD_HOME}")
+elseif (ZSTD_ROOT)
+ set (ZSTD_HOME "${ZSTD_ROOT}")
+elseif (DEFINED ENV{ZSTD_ROOT})
+ set (ZSTD_HOME "$ENV{ZSTD_ROOT}")
endif ()
if (DEFINED ENV{GTEST_HOME})
@@ -86,10 +118,22 @@ macro (add_built_library external_project_name target_name
link_lib include_dir)
add_dependencies (${target_name} ${external_project_name})
if (INSTALL_VENDORED_LIBS)
- install (FILES "${link_lib}" DESTINATION "lib")
+ install (FILES "${link_lib}" DESTINATION "${CMAKE_INSTALL_LIBDIR}")
endif ()
endmacro ()
+function(provide_cmake_module MODULE_NAME)
+ set(module "${CMAKE_SOURCE_DIR}/cmake_modules/${MODULE_NAME}.cmake")
+ if(EXISTS "${module}")
+ message(STATUS "Providing CMake module for ${MODULE_NAME} as part of CMake
package")
+ install(FILES "${module}" DESTINATION "${ORC_INSTALL_CMAKE_DIR}")
+ endif()
+endfunction()
+
+function(provide_find_module PACKAGE_NAME)
+ provide_cmake_module("Find${PACKAGE_NAME}")
+endfunction()
+
# ----------------------------------------------------------------------
# ORC Format
ExternalProject_Add (orc-format_ep
@@ -107,6 +151,8 @@ ExternalProject_Add (orc-format_ep
if (ORC_PACKAGE_KIND STREQUAL "conan")
find_package (Snappy REQUIRED CONFIG)
add_resolved_library (orc_snappy ${Snappy_LIBRARIES} ${Snappy_INCLUDE_DIR})
+ list (APPEND ORC_SYSTEM_DEPENDENCIES Snappy)
+ list (APPEND ORC_INSTALL_INTERFACE_TARGETS
"$<INSTALL_INTERFACE:Snappy::snappy>")
elseif (NOT "${SNAPPY_HOME}" STREQUAL "")
find_package (Snappy REQUIRED)
if (ORC_PREFER_STATIC_SNAPPY AND ${SNAPPY_STATIC_LIB})
@@ -114,10 +160,14 @@ elseif (NOT "${SNAPPY_HOME}" STREQUAL "")
else ()
add_resolved_library (orc_snappy ${SNAPPY_LIBRARY} ${SNAPPY_INCLUDE_DIR})
endif ()
+ list (APPEND ORC_SYSTEM_DEPENDENCIES Snappy)
+ list (APPEND ORC_INSTALL_INTERFACE_TARGETS
"$<INSTALL_INTERFACE:Snappy::snappy>")
+ provide_find_module (Snappy)
else ()
set(SNAPPY_HOME "${THIRDPARTY_DIR}/snappy_ep-install")
set(SNAPPY_INCLUDE_DIR "${SNAPPY_HOME}/include")
- set(SNAPPY_STATIC_LIB
"${SNAPPY_HOME}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}snappy${CMAKE_STATIC_LIBRARY_SUFFIX}")
+ set(SNAPPY_STATIC_LIB_NAME
"${CMAKE_STATIC_LIBRARY_PREFIX}snappy${CMAKE_STATIC_LIBRARY_SUFFIX}")
+ set(SNAPPY_STATIC_LIB "${SNAPPY_HOME}/lib/${SNAPPY_STATIC_LIB_NAME}")
set(SNAPPY_CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${SNAPPY_HOME}
-DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_LIBDIR=lib)
@@ -132,6 +182,9 @@ else ()
BUILD_BYPRODUCTS "${SNAPPY_STATIC_LIB}")
add_built_library (snappy_ep orc_snappy ${SNAPPY_STATIC_LIB}
${SNAPPY_INCLUDE_DIR})
+
+ list (APPEND ORC_VENDOR_DEPENDENCIES
"orc::vendored_snappy|${SNAPPY_STATIC_LIB_NAME}")
+ list (APPEND ORC_INSTALL_INTERFACE_TARGETS
"$<INSTALL_INTERFACE:orc::vendored_snappy>")
endif ()
add_library (orc::snappy ALIAS orc_snappy)
@@ -142,6 +195,8 @@ add_library (orc::snappy ALIAS orc_snappy)
if (ORC_PACKAGE_KIND STREQUAL "conan")
find_package (ZLIB REQUIRED CONFIG)
add_resolved_library (orc_zlib ${ZLIB_LIBRARIES} ${ZLIB_INCLUDE_DIR})
+ list (APPEND ORC_SYSTEM_DEPENDENCIES ZLIB)
+ list (APPEND ORC_INSTALL_INTERFACE_TARGETS "$<INSTALL_INTERFACE:ZLIB::ZLIB>")
elseif (NOT "${ZLIB_HOME}" STREQUAL "")
find_package (ZLIB REQUIRED)
if (ORC_PREFER_STATIC_ZLIB AND ${ZLIB_STATIC_LIB})
@@ -149,6 +204,9 @@ elseif (NOT "${ZLIB_HOME}" STREQUAL "")
else ()
add_resolved_library (orc_zlib ${ZLIB_LIBRARY} ${ZLIB_INCLUDE_DIR})
endif ()
+ list (APPEND ORC_SYSTEM_DEPENDENCIES ZLIB)
+ list (APPEND ORC_INSTALL_INTERFACE_TARGETS "$<INSTALL_INTERFACE:ZLIB::ZLIB>")
+ provide_find_module (ZLIB)
else ()
set(ZLIB_PREFIX "${THIRDPARTY_DIR}/zlib_ep-install")
set(ZLIB_INCLUDE_DIR "${ZLIB_PREFIX}/include")
@@ -160,7 +218,8 @@ else ()
else ()
set(ZLIB_STATIC_LIB_NAME z)
endif ()
- set(ZLIB_STATIC_LIB
"${ZLIB_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}${ZLIB_STATIC_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}")
+ set(ZLIB_STATIC_LIB_NAME
"${CMAKE_STATIC_LIBRARY_PREFIX}${ZLIB_STATIC_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}")
+ set(ZLIB_STATIC_LIB "${ZLIB_PREFIX}/lib/${ZLIB_STATIC_LIB_NAME}")
set(ZLIB_CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${ZLIB_PREFIX}
-DBUILD_SHARED_LIBS=OFF)
@@ -175,6 +234,9 @@ else ()
BUILD_BYPRODUCTS "${ZLIB_STATIC_LIB}")
add_built_library (zlib_ep orc_zlib ${ZLIB_STATIC_LIB} ${ZLIB_INCLUDE_DIR})
+
+ list (APPEND ORC_VENDOR_DEPENDENCIES
"orc::vendored_zlib|${ZLIB_STATIC_LIB_NAME}")
+ list (APPEND ORC_INSTALL_INTERFACE_TARGETS
"$<INSTALL_INTERFACE:orc::vendored_zlib>")
endif ()
add_library (orc::zlib ALIAS orc_zlib)
@@ -185,13 +247,19 @@ add_library (orc::zlib ALIAS orc_zlib)
if (ORC_PACKAGE_KIND STREQUAL "conan")
find_package (ZSTD REQUIRED CONFIG)
add_resolved_library (orc_zstd ${zstd_LIBRARIES} ${zstd_INCLUDE_DIR})
+ list (APPEND ORC_SYSTEM_DEPENDENCIES ZSTD)
+ list (APPEND ORC_INSTALL_INTERFACE_TARGETS
"$<INSTALL_INTERFACE:$<IF:$<TARGET_EXISTS:zstd::libzstd_shared>,zstd::libzstd_shared,zstd::libzstd_static>>")
elseif (NOT "${ZSTD_HOME}" STREQUAL "")
find_package (ZSTD REQUIRED)
if (ORC_PREFER_STATIC_ZSTD AND ${ZSTD_STATIC_LIB})
add_resolved_library (orc_zstd ${ZSTD_STATIC_LIB} ${ZSTD_INCLUDE_DIR})
+ list (APPEND ORC_INSTALL_INTERFACE_TARGETS
"$<INSTALL_INTERFACE:zstd::libzstd_static>")
else ()
add_resolved_library (orc_zstd ${ZSTD_LIBRARY} ${ZSTD_INCLUDE_DIR})
+ list (APPEND ORC_INSTALL_INTERFACE_TARGETS
"$<INSTALL_INTERFACE:$<IF:$<TARGET_EXISTS:zstd::libzstd_shared>,zstd::libzstd_shared,zstd::libzstd_static>>")
endif ()
+ list (APPEND ORC_SYSTEM_DEPENDENCIES ZSTD)
+ provide_find_module (ZSTD)
else ()
set(ZSTD_HOME "${THIRDPARTY_DIR}/zstd_ep-install")
set(ZSTD_INCLUDE_DIR "${ZSTD_HOME}/include")
@@ -203,7 +271,8 @@ else ()
else ()
set(ZSTD_STATIC_LIB_NAME zstd)
endif ()
- set(ZSTD_STATIC_LIB
"${ZSTD_HOME}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}${ZSTD_STATIC_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}")
+ set(ZSTD_STATIC_LIB_NAME
"${CMAKE_STATIC_LIBRARY_PREFIX}${ZSTD_STATIC_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}")
+ set(ZSTD_STATIC_LIB "${ZSTD_HOME}/lib/${ZSTD_STATIC_LIB_NAME}")
set(ZSTD_CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${ZSTD_HOME}
-DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_LIBDIR=lib)
@@ -225,6 +294,9 @@ else ()
BUILD_BYPRODUCTS ${ZSTD_STATIC_LIB})
add_built_library (zstd_ep orc_zstd ${ZSTD_STATIC_LIB} ${ZSTD_INCLUDE_DIR})
+
+ list (APPEND ORC_VENDOR_DEPENDENCIES
"orc::vendored_zstd|${ZSTD_STATIC_LIB_NAME}")
+ list (APPEND ORC_INSTALL_INTERFACE_TARGETS
"$<INSTALL_INTERFACE:orc::vendored_zstd>")
endif ()
add_library (orc::zstd ALIAS orc_zstd)
@@ -234,6 +306,8 @@ add_library (orc::zstd ALIAS orc_zstd)
if (ORC_PACKAGE_KIND STREQUAL "conan")
find_package (LZ4 REQUIRED CONFIG)
add_resolved_library (orc_lz4 ${lz4_LIBRARIES} ${lz4_INCLUDE_DIR})
+ list (APPEND ORC_SYSTEM_DEPENDENCIES LZ4)
+ list (APPEND ORC_INSTALL_INTERFACE_TARGETS "$<INSTALL_INTERFACE:LZ4::lz4>")
elseif (NOT "${LZ4_HOME}" STREQUAL "")
find_package (LZ4 REQUIRED)
if (ORC_PREFER_STATIC_LZ4 AND ${LZ4_STATIC_LIB})
@@ -241,10 +315,14 @@ elseif (NOT "${LZ4_HOME}" STREQUAL "")
else ()
add_resolved_library (orc_lz4 ${LZ4_LIBRARY} ${LZ4_INCLUDE_DIR})
endif ()
+ list (APPEND ORC_SYSTEM_DEPENDENCIES LZ4)
+ list (APPEND ORC_INSTALL_INTERFACE_TARGETS "$<INSTALL_INTERFACE:LZ4::lz4>")
+ provide_find_module (LZ4)
else ()
set(LZ4_PREFIX "${THIRDPARTY_DIR}/lz4_ep-install")
set(LZ4_INCLUDE_DIR "${LZ4_PREFIX}/include")
- set(LZ4_STATIC_LIB
"${LZ4_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}lz4${CMAKE_STATIC_LIBRARY_SUFFIX}")
+ set(LZ4_STATIC_LIB_NAME
"${CMAKE_STATIC_LIBRARY_PREFIX}lz4${CMAKE_STATIC_LIBRARY_SUFFIX}")
+ set(LZ4_STATIC_LIB "${LZ4_PREFIX}/lib/${LZ4_STATIC_LIB_NAME}")
set(LZ4_CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LZ4_PREFIX}
-DCMAKE_INSTALL_LIBDIR=lib
-DBUILD_SHARED_LIBS=OFF)
@@ -267,6 +345,9 @@ else ()
BUILD_BYPRODUCTS ${LZ4_STATIC_LIB})
add_built_library (lz4_ep orc_lz4 ${LZ4_STATIC_LIB} ${LZ4_INCLUDE_DIR})
+
+ list (APPEND ORC_VENDOR_DEPENDENCIES
"orc::vendored_lz4|${LZ4_STATIC_LIB_NAME}")
+ list (APPEND ORC_INSTALL_INTERFACE_TARGETS
"$<INSTALL_INTERFACE:orc::vendored_lz4>")
endif ()
add_library (orc::lz4 ALIAS orc_lz4)
@@ -380,6 +461,8 @@ endif ()
if (ORC_PACKAGE_KIND STREQUAL "conan")
find_package (Protobuf REQUIRED CONFIG)
add_resolved_library (orc_protobuf ${protobuf_LIBRARIES}
${protobuf_INCLUDE_DIR})
+ list (APPEND ORC_SYSTEM_DEPENDENCIES Protobuf)
+ list (APPEND ORC_INSTALL_INTERFACE_TARGETS
"$<INSTALL_INTERFACE:protobuf::libprotobuf>")
elseif (NOT "${PROTOBUF_HOME}" STREQUAL "")
find_package (Protobuf REQUIRED)
@@ -394,6 +477,10 @@ elseif (NOT "${PROTOBUF_HOME}" STREQUAL "")
else ()
add_resolved_library (orc_protoc ${PROTOC_LIBRARY} ${PROTOBUF_INCLUDE_DIR})
endif ()
+
+ list (APPEND ORC_SYSTEM_DEPENDENCIES Protobuf)
+ list (APPEND ORC_INSTALL_INTERFACE_TARGETS
"$<INSTALL_INTERFACE:protobuf::libprotobuf>")
+ provide_find_module (Protobuf)
else ()
set(PROTOBUF_PREFIX "${THIRDPARTY_DIR}/protobuf_ep-install")
set(PROTOBUF_INCLUDE_DIR "${PROTOBUF_PREFIX}/include")
@@ -413,7 +500,8 @@ else ()
else ()
set(PROTOBUF_STATIC_LIB_PREFIX ${CMAKE_STATIC_LIBRARY_PREFIX})
endif ()
- set(PROTOBUF_STATIC_LIB
"${PROTOBUF_PREFIX}/lib/${PROTOBUF_STATIC_LIB_PREFIX}protobuf${CMAKE_STATIC_LIBRARY_SUFFIX}")
+ set(PROTOBUF_STATIC_LIB_NAME
"${PROTOBUF_STATIC_LIB_PREFIX}protobuf${CMAKE_STATIC_LIBRARY_SUFFIX}")
+ set(PROTOBUF_STATIC_LIB "${PROTOBUF_PREFIX}/lib/${PROTOBUF_STATIC_LIB_NAME}")
set(PROTOC_STATIC_LIB
"${PROTOBUF_PREFIX}/lib/${PROTOBUF_STATIC_LIB_PREFIX}protoc${CMAKE_STATIC_LIBRARY_SUFFIX}")
set(PROTOBUF_EXECUTABLE
"${PROTOBUF_PREFIX}/bin/protoc${CMAKE_EXECUTABLE_SUFFIX}")
@@ -432,6 +520,9 @@ else ()
add_built_library (protobuf_ep orc_protobuf ${PROTOBUF_STATIC_LIB}
${PROTOBUF_INCLUDE_DIR})
add_built_library (protobuf_ep orc_protoc ${PROTOC_STATIC_LIB}
${PROTOBUF_INCLUDE_DIR})
+
+ list (APPEND ORC_VENDOR_DEPENDENCIES
"orc::vendored_protobuf|${PROTOBUF_STATIC_LIB_NAME}")
+ list (APPEND ORC_INSTALL_INTERFACE_TARGETS
"$<INSTALL_INTERFACE:orc::vendored_protobuf>")
endif ()
add_library (orc::protobuf ALIAS orc_protobuf)