commit | 93b63e8f3b4880927ccbd5522c967df79e926cda | [log] [tgz] |
---|---|---|
author | Sutou Kouhei <kou@clear-code.com> | Tue Aug 30 13:57:58 2022 +0900 |
committer | GitHub <noreply@github.com> | Tue Aug 30 13:57:58 2022 +0900 |
tree | e231152118547657093fad2eb4d56eeec90ababf | |
parent | b43c6f6b18acee019a500bc6a05af18c07f2ca79 [diff] |
ARROW-12175: [C++] Fix CMake packages (#13892) ARROW-9171 and ARROW-17231 are also fixed. Our CMake packages are broken. For example, `find_package(Parquet)` doesn't work without specifying `CMAKE_MODULE_PATH`. `find_package(${PACKAGE})` searches `${PREFIX}/${PACKAGE}/${PACKAGE}Config.cmake` or `${PREFIX}/${PACKAGE}/Find${PACKAGE}.cmake`. But our .cmake files are always installed `${PREFIX}/arrow/`. So `find_package(Parquet)` can't find `${PREFIX}/arrow/FindParquet.cmake` because "`/arrow/`" isn't "`/${PACKAGE}`". This change fixes this by installing `${PACKAGE}Config.cmake` to `${PREFIX}/${PACKAGE}/` instead of `${PREFIX}/arrow/`. This also removes all `Find${PACKAGE}.cmake`. We only provides `${PACKAGE}Config.cmake`. Our `Find${PACKAGE}.cmake` can find `${PACKAGE}` by CMake, pkg-config or manual .so/.h search. But we don't need to support pkg-config nor manual .so/.h search. We can use `${PACKAGE}Config.cmake` to support CMake package search. So this removes all `Find${PACKAGE}.cmake`. This also introduces namespace to our CMake targets. For example, `arrow_shared` is exported as `Arrow::arrow_shared` and `parquet_static` is exported as `Parquet::parquet_static`. But no namespace targets such as `arrow_shared` and `parquet_static` are still also exported for keeping backward compatibility. But this requires CMake 3.18 or later for users because `add_library(ALIAS)` for non-global `IMPORTED` library is available since CMake 3.18. (`Plasma::plasma-store-server` target is also added for `plasma-store-server` executable.) FYI: We can resolve this problem by using `COMPONENTS` feature of `find_package()`. For example, `find_package(Arrow COMPONENTS Parquet)` is used instead of `find_package(Parquet)`. With `COMPONENTS`, `${PACKAGE}` is always "Arrow". So we can still install our .cmake files to `${PREFIX}/arrow/`. But this approach breaks backward compatibility. So I choose `${PREFIX}/${PACKAGE}/*.cmake` approach. Authored-by: Sutou Kouhei <kou@clear-code.com> Signed-off-by: Sutou Kouhei <kou@clear-code.com>
Apache Arrow is a development platform for in-memory analytics. It contains a set of technologies that enable big data systems to process and move data fast.
Major components of the project include:
Arrow is an Apache Software Foundation project. Learn more at arrow.apache.org.
The reference Arrow libraries contain many distinct software components:
The official Arrow libraries in this repository are in different stages of implementing the Arrow format and related features. See our current feature matrix on git master.
Please read our latest project contribution guide.
Even if you do not plan to contribute to Apache Arrow itself or Arrow integrations in other projects, we'd be happy to have you involved: