# -*- sh-shell: rpm -*-
#
# 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.
%global use_flight 1
%global use_gandiva 0
%global use_mimalloc 0
%global use_ninja 1
# TODO: Enable this. This works on local but is fragile on GitHub Actions and
# Travis CI.
%global use_s3 0
%global have_rapidjson 1
%global have_re2 1
%global have_utf8proc 1
Name: libarrow
Version: 5.0.0
Release: 1%{?dist}
Summary: Apache Arrow is a data processing library for analysis
License: ASL 2.0
URL: https://arrow.apache.org/
Source0: https://dist.apache.org/repos/dist/release/arrow/arrow-%{version}/apache-arrow-%{version}.tar.gz
Patch0001: 0001-cpp-CMakeLists.txt.patch
# Apache ORC (liborc) has numerous compile errors and apparently assumes
# a 64-bit build and runtime environment. This is only consumer of the liborc
# package, and in turn the only consumer of this and liborc is Ceph, which
# is also 64-bit only
ExcludeArch: i686 armv7hl
BuildRequires: bison
BuildRequires: boost-devel
BuildRequires: brotli-devel
BuildRequires: bzip2-devel
BuildRequires: cmake
%if %{use_ninja}
BuildRequires: ninja-build
%endif
BuildRequires: meson
%if %{use_s3}
BuildRequires: curl-devel
%endif
BuildRequires: flex
BuildRequires: gcc-c++
BuildRequires: gflags-devel
BuildRequires: glog-devel
BuildRequires: protobuf-devel
BuildRequires: grpc-devel
BuildRequires: grpc-plugins
BuildRequires: libzstd-devel
BuildRequires: lz4-devel
BuildRequires: openssl-devel
BuildRequires: pkgconfig
BuildRequires: python3-devel
BuildRequires: python3-numpy
BuildRequires: xsimd-devel
BuildRequires: abseil-cpp-devel
BuildRequires: c-ares-devel
BuildRequires: thrift-devel
%if %{have_rapidjson}
BuildRequires: rapidjson-devel
%endif
%if %{have_re2}
BuildRequires: re2-devel
%endif
BuildRequires: snappy-devel
%if %{have_utf8proc}
BuildRequires: utf8proc-devel
%endif
BuildRequires: zlib-devel
BuildRequires: liborc-devel
%if %{use_gandiva}
BuildRequires: llvm-devel
BuildRequires: ncurses-devel
%endif
BuildRequires: gobject-introspection-devel
BuildRequires: gtk-doc
Requires: boost-system
Requires: boost-filesystem
Requires: brotli
%description
Apache Arrow is a data processing library for analysis.
%prep
%setup -q -n apache-arrow-%{version}
%patch0001 -p1
%build
mkdir cpp/build
pushd cpp/build
%cmake .. \
%if %{use_flight}
-DARROW_FLIGHT=ON \
%endif
%if %{use_gandiva}
-DARROW_GANDIVA=ON \
%endif
%if %{use_mimalloc}
-DARROW_MIMALLOC=ON \
%endif
-DARROW_ORC=ON \
-DARROW_PARQUET=ON \
-DARROW_PLASMA=ON \
-DARROW_PYTHON=ON \
-DARROW_JEMALLOC=OFF \
-DProtobuf_SOURCE="SYSTEM" \
-DgRPC_SOURCE="SYSTEM" \
-Dxsimd_SOURCE="SYSTEM" \
%if %{use_s3}
-DARROW_S3=ON \
%endif
-DARROW_WITH_BROTLI=ON \
-DARROW_WITH_BZ2=ON \
-DARROW_WITH_LZ4=ON \
-DARROW_WITH_SNAPPY=ON \
-DARROW_WITH_ZLIB=ON \
-DARROW_WITH_ZSTD=ON \
-DARROW_WITH_XSIMD=ON \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_COLOR_MAKEFILE:BOOL=OFF \
-DARROW_USE_CCACHE=OFF \
-DCMAKE_UNITY_BUILD=ON \
-DPARQUET_REQUIRE_ENCRYPTION=ON \
-DPythonInterp_FIND_VERSION=ON \
-DPythonInterp_FIND_VERSION_MAJOR=3 \
%if %{use_ninja}
-GNinja
%endif
export VERBOSE=1
export GCC_COLORS=
%cmake_build
popd
pushd c_glib
meson setup build \
--default-library=both \
--libdir=%{_libdir} \
--prefix=%{_prefix} \
-Darrow_cpp_build_dir=../cpp/build \
-Darrow_cpp_build_type=relwithdebinfo \
-Dgtk_doc=true
cd build && %ninja_build
%check
%install
echo install
pushd c_glib/build
DESTDIR=$RPM_BUILD_ROOT %ninja_install
popd
pushd cpp/build
%cmake_install
%files
%{_libdir}/libarrow.so.*
%package doc
Summary: Documentation files for Apache Arrow C++
BuildArch: noarch
%description doc
Documentation files for Apache Arrow C++.
%files doc
%license LICENSE.txt
%doc README.md NOTICE.txt
%exclude %{_docdir}/arrow/
%package devel
Summary: Libraries and header files for Apache Arrow C++
Requires: %{name} = %{version}-%{release}
Requires: brotli-devel
Requires: bzip2-devel
Requires: libzstd-devel
Requires: lz4-devel
Requires: openssl-devel
%if %{have_rapidjson}
Requires: rapidjson-devel
%endif
%if %{have_re2}
Requires: re2-devel
%endif
Requires: snappy-devel
%if %{have_utf8proc}
Requires: utf8proc-devel
%endif
Requires: zlib-devel
%description devel
Libraries and header files for Apache Arrow C++.
%files devel
%{_includedir}/arrow/
%exclude %{_includedir}/arrow/dataset/
%if %{use_flight}
%exclude %{_includedir}/arrow/flight/
%exclude %{_includedir}/arrow-flight-glib
%endif
%exclude %{_includedir}/arrow/python/
%exclude %{_libdir}/cmake/arrow/*
%{_libdir}/cmake/arrow/ArrowConfig*.cmake
%{_libdir}/cmake/arrow/ArrowOptions.cmake
%{_libdir}/cmake/arrow/ArrowTargets*.cmake
%{_libdir}/cmake/arrow/FindArrow.cmake
%{_libdir}/cmake/arrow/arrow-config.cmake
%exclude %{_libdir}/libarrow.a
%{_libdir}/libarrow.so
%{_libdir}/pkgconfig/arrow-compute.pc
%{_libdir}/pkgconfig/arrow-csv.pc
%{_libdir}/pkgconfig/arrow-filesystem.pc
%{_libdir}/pkgconfig/arrow-json.pc
%{_libdir}/pkgconfig/arrow-orc.pc
%{_libdir}/pkgconfig/arrow.pc
%package dataset-libs
Summary: C++ library to read and write semantic datasets
Requires: %{name} = %{version}-%{release}
Requires: %{name}-doc = %{version}-%{release}
%description dataset-libs
This package contains the libraries for Apache Arrow dataset.
%files dataset-libs
%{_libdir}/libarrow_dataset.so.*
%package dataset-devel
Summary: Libraries and header files for Apache Arrow dataset
Requires: %{name}-dataset-libs = %{version}-%{release}
%description dataset-devel
Libraries and header files for Apache Arrow dataset.
%files dataset-devel
%{_includedir}/arrow/dataset/
%{_libdir}/cmake/arrow/ArrowDatasetConfig*.cmake
%{_libdir}/cmake/arrow/ArrowDatasetTargets*.cmake
%{_libdir}/cmake/arrow/FindArrowDataset.cmake
%exclude %{_libdir}/libarrow_dataset.a
%{_libdir}/libarrow_dataset.so
%{_libdir}/pkgconfig/arrow-dataset.pc
%if %{use_flight}
%package flight-libs
Summary: C++ library for fast data transport
Requires: %{name} = %{version}-%{release}
Requires: %{name}-doc = %{version}-%{release}
Requires: openssl
%description flight-libs
This package contains the libraries for Apache Arrow Flight.
%files flight-libs
%{_libdir}/libarrow_flight.so.*
%{_libdir}/libarrow-flight-glib.so.*
%{_libdir}/girepository-1.0/ArrowFlight-1.0.typelib
%package flight-devel
Summary: Libraries and header files for Apache Arrow Flight
Requires: %{name}-flight-libs = %{version}-%{release}
%description flight-devel
Libraries and header files for Apache Arrow Flight.
%files flight-devel
%dir %{_includedir}/arrow/flight/
%{_includedir}/arrow/flight/*
%dir %{_includedir}/arrow-flight-glib
%{_includedir}/arrow-flight-glib/*
%{_libdir}/cmake/arrow/ArrowFlightConfig*.cmake
%{_libdir}/cmake/arrow/ArrowFlightTargets*.cmake
%{_libdir}/cmake/arrow/FindArrowFlight.cmake
%exclude %{_libdir}/libarrow_flight.a
%{_libdir}/libarrow_flight.so
%exclude %{_libdir}/libarrow-flight-glib.a
%{_libdir}/libarrow-flight-glib.so
%{_libdir}/pkgconfig/arrow-flight.pc
%{_libdir}/pkgconfig/arrow-flight-glib.pc
%endif
%if %{use_gandiva}
%package -n gandiva-libs
Summary: C++ library for compiling and evaluating expressions
Requires: %{name} = %{version}-%{release}
Requires: %{name}-doc = %{version}-%{release}
Requires: ncurses-libs
%description -n gandiva-libs
This package contains the libraries for Gandiva.
%files -n gandiva-libs
%{_libdir}/libgandiva.so.*
%package -n gandiva-devel
Summary: Libraries and header files for Gandiva
Requires: gandiva-libs = %{version}-%{release}
Requires: llvm-devel
%description -n gandiva-devel
Libraries and header files for Gandiva.
%files -n gandiva-devel
%{_includedir}/gandiva/
%{_libdir}/cmake/arrow/GandivaConfig*.cmake
%{_libdir}/cmake/arrow/GandivaTargets*.cmake
%{_libdir}/cmake/arrow/FindGandiva.cmake
%exclude %{_libdir}/libgandiva.a
%{_libdir}/libgandiva.so
%{_libdir}/pkgconfig/gandiva.pc
%endif
%package python-libs
Summary: Python integration library for Apache Arrow
Requires: %{name} = %{version}-%{release}
Requires: %{name}-doc = %{version}-%{release}
Requires: python3-numpy
%description python-libs
This package contains the Python integration library for Apache Arrow.
%files python-libs
%{_libdir}/libarrow_python.so.*
%package python-devel
Summary: Libraries and header files for Python integration library
Requires: %{name}-devel = %{version}-%{release}
Requires: %{name} = %{version}-%{release}
Requires: %{name}-python-libs = %{version}-%{release}
Requires: python3-devel
%description python-devel
Libraries and header files for Python integration library for Apache Arrow.
%files python-devel
%{_includedir}/arrow/python/
%exclude %{_includedir}/arrow/python/flight.h
%{_libdir}/cmake/arrow/ArrowPythonConfig*.cmake
%{_libdir}/cmake/arrow/ArrowPythonTargets*.cmake
%{_libdir}/cmake/arrow/FindArrowPython.cmake
%exclude %{_libdir}/libarrow_python.a
%{_libdir}/libarrow_python.so
%{_libdir}/pkgconfig/arrow-python.pc
%if %{use_flight}
%package python-flight-libs
Summary: Python integration library for Apache Arrow Flight
Requires: %{name}-flight-libs = %{version}-%{release}
Requires: %{name}-python-libs = %{version}-%{release}
Requires: %{name}-doc = %{version}-%{release}
%description python-flight-libs
This package contains the Python integration library for Apache Arrow Flight.
%files python-flight-libs
%{_libdir}/libarrow_python_flight.so.*
%package python-flight-devel
Summary: Libraries and header files for Python integration
Requires: %{name}-flight-devel = %{version}-%{release}
Requires: %{name}-python-devel = %{version}-%{release}
Requires: %{name}-python-flight-libs = %{version}-%{release}
%description python-flight-devel
Libraries and header files for Python integration library for
Apache Arrow Flight.
%files python-flight-devel
%{_includedir}/arrow/python/flight.h
%{_libdir}/cmake/arrow/ArrowPythonFlightConfig*.cmake
%{_libdir}/cmake/arrow/ArrowPythonFlightTargets*.cmake
%{_libdir}/cmake/arrow/FindArrowPythonFlight.cmake
%exclude %{_libdir}/libarrow_python_flight.a
%{_libdir}/libarrow_python_flight.so
%{_libdir}/pkgconfig/arrow-python-flight.pc
%endif
%package -n plasma-libs
Summary: Runtime libraries for Plasma in-memory object store
Requires: %{name} = %{version}-%{release}
Requires: %{name}-doc = %{version}-%{release}
%description -n plasma-libs
This package contains the libraries for Plasma in-memory object store.
%files -n plasma-libs
%{_libdir}/libplasma.so.*
%package -n plasma-store-server
Summary: Server for Plasma in-memory object store
Requires: plasma-libs = %{version}-%{release}
Requires: %{name}-doc = %{version}-%{release}
%description -n plasma-store-server
This package contains the server for Plasma in-memory object store.
%files -n plasma-store-server
%{_bindir}/plasma-store-server
%package -n plasma-devel
Summary: Libraries and header files for Plasma in-memory object store
Requires: plasma-libs = %{version}-%{release}
%description -n plasma-devel
Libraries and header files for Plasma in-memory object store.
%files -n plasma-devel
%{_includedir}/plasma/
%{_libdir}/cmake/arrow/PlasmaConfig*.cmake
%{_libdir}/cmake/arrow/PlasmaTargets*.cmake
%{_libdir}/cmake/arrow/FindPlasma.cmake
%exclude %{_libdir}/libplasma.a
%{_libdir}/libplasma.so
%{_libdir}/pkgconfig/plasma*.pc
%package -n parquet-libs
Summary: Runtime libraries for Apache Parquet C++
Requires: boost-program-options
Requires: %{name} = %{version}-%{release}
Requires: %{name}-doc = %{version}-%{release}
Requires: openssl
%description -n parquet-libs
This package contains the libraries for Apache Parquet C++.
%files -n parquet-libs
%{_libdir}/libparquet.so.*
%package -n parquet-devel
Summary: Libraries and header files for Apache Parquet C++
Requires: parquet-libs = %{version}-%{release}
Requires: zlib-devel
%description -n parquet-devel
Libraries and header files for Apache Parquet C++.
%files -n parquet-devel
%{_includedir}/parquet/
%{_libdir}/cmake/arrow/ParquetConfig*.cmake
%{_libdir}/cmake/arrow/ParquetTargets*.cmake
%{_libdir}/cmake/arrow/FindParquet.cmake
%exclude %{_libdir}/libparquet.a
%{_libdir}/libparquet.so
%{_libdir}/pkgconfig/parquet*.pc
%package glib-libs
Summary: Runtime libraries for Apache Arrow GLib
Requires: %{name} = %{version}-%{release}
Requires: %{name}-doc = %{version}-%{release}
%description glib-libs
This package contains the libraries for Apache Arrow GLib.
%files glib-libs
%{_libdir}/libarrow-glib.so.*
%{_libdir}/girepository-1.0/Arrow-1.0.typelib
%exclude %{_datadir}/doc/arrow-glib/*
%package glib-devel
Summary: Libraries and header files for Apache Arrow GLib
Requires: %{name}-devel = %{version}-%{release}
Requires: %{name}-glib-libs = %{version}-%{release}
Requires: glib2-devel
Requires: gobject-introspection-devel
%description glib-devel
Libraries and header files for Apache Arrow GLib.
%files glib-devel
%{_includedir}/arrow-glib/
%exclude %{_libdir}/libarrow-glib.a
%{_libdir}/libarrow-glib.so
%{_libdir}/pkgconfig/arrow-glib.pc
%{_libdir}/pkgconfig/arrow-orc-glib.pc
%{_datadir}/arrow-glib/example/
%{_datadir}/gir-1.0/Arrow-1.0.gir
%{_datadir}/gir-1.0/ArrowFlight-1.0.gir
%package glib-doc
Summary: Documentation for Apache Arrow GLib
%description glib-doc
Documentation for Apache Arrow GLib.
%files glib-doc
%{_datadir}/gtk-doc/html/arrow-glib/
%{_datadir}/gtk-doc/html/arrow-flight-glib/
%package dataset-glib-libs
Summary: Runtime libraries for Apache Arrow dataset GLib
Requires: %{name}-dataset-libs = %{version}-%{release}
Requires: %{name}-glib-libs = %{version}-%{release}
Requires: %{name}-doc = %{version}-%{release}
%description dataset-glib-libs
This package contains the libraries for Apache Arrow dataset GLib.
%files dataset-glib-libs
%{_libdir}/libarrow-dataset-glib.so.*
%{_libdir}/girepository-1.0/ArrowDataset-1.0.typelib
%package dataset-glib-devel
Summary: Libraries and header files for Apache Arrow dataset GLib
Requires: %{name}-dataset-devel = %{version}-%{release}
Requires: %{name}-glib-devel = %{version}-%{release}
Requires: %{name}-dataset-glib-libs = %{version}-%{release}
%description dataset-glib-devel
Libraries and header files for Apache Arrow dataset GLib.
%files dataset-glib-devel
%{_includedir}/arrow-dataset-glib/
%exclude %{_libdir}/libarrow-dataset-glib.a
%{_libdir}/libarrow-dataset-glib.so
%{_libdir}/pkgconfig/arrow-dataset-glib.pc
%{_datadir}/gir-1.0/ArrowDataset-1.0.gir
%package dataset-glib-doc
Summary: Documentation for Apache Arrow dataset GLib
%description dataset-glib-doc
Documentation for Apache Arrow dataset GLib.
%files dataset-glib-doc
%{_datadir}/gtk-doc/html/arrow-dataset-glib/
%if %{use_gandiva}
%package -n gandiva-glib-libs
Summary: Runtime libraries for Gandiva GLib
Requires: gandiva-libs = %{version}-%{release}
Requires: %{name}-glib-libs = %{version}-%{release}
Requires: %{name}-doc = %{version}-%{release}
%description -n gandiva-glib-libs
This package contains the libraries for Gandiva GLib.
%files -n gandiva-glib-libs
%{_libdir}/libgandiva-glib.so.*
%{_libdir}/girepository-1.0/Gandiva-1.0.typelib
%package -n gandiva-glib-devel
Summary: Libraries and header files for Gandiva GLib
Requires: gandiva-devel = %{version}-%{release}
Requires: %{name}-glib-devel = %{version}-%{release}
%description -n gandiva-glib-devel
Libraries and header files for Gandiva GLib.
%files -n gandiva-glib-devel
%{_includedir}/gandiva-glib/
%exclude %{_libdir}/libgandiva-glib.a
%{_libdir}/libgandiva-glib.so
%{_libdir}/pkgconfig/gandiva-glib.pc
%{_datadir}/gir-1.0/Gandiva-1.0.gir
%package -n gandiva-glib-doc
Summary: Documentation for Gandiva GLib
%description -n gandiva-glib-doc
Documentation for Gandiva GLib.
%files -n gandiva-glib-doc
%{_datadir}/gtk-doc/html/gandiva-glib/
%endif
%package -n plasma-glib-libs
Summary: Runtime libraries for Plasma GLib
Requires: plasma-libs = %{version}-%{release}
Requires: %{name}-glib-libs = %{version}-%{release}
Requires: %{name}-doc = %{version}-%{release}
%description -n plasma-glib-libs
This package contains the libraries for Plasma GLib.
%files -n plasma-glib-libs
%{_libdir}/libplasma-glib.so.*
%{_libdir}/girepository-1.0/Plasma-1.0.typelib
%package -n plasma-glib-devel
Summary: Libraries and header files for Plasma GLib
Requires: plasma-devel = %{version}-%{release}
Requires: plasma-glib-libs = %{version}-%{release}
Requires: %{name}-glib-devel = %{version}-%{release}
%description -n plasma-glib-devel
Libraries and header files for Plasma GLib.
%files -n plasma-glib-devel
%{_includedir}/plasma-glib/
%exclude %{_libdir}/libplasma-glib.a
%{_libdir}/libplasma-glib.so
%{_libdir}/pkgconfig/plasma-glib.pc
%{_datadir}/gir-1.0/Plasma-1.0.gir
%package -n plasma-glib-doc
Summary: Documentation for Plasma GLib
%description -n plasma-glib-doc
Documentation for Plasma GLib.
%files -n plasma-glib-doc
%{_datadir}/gtk-doc/html/plasma-glib/
%package -n parquet-glib-libs
Summary: Runtime libraries for Apache Parquet GLib
Requires: parquet-libs = %{version}-%{release}
Requires: %{name}-glib-libs = %{version}-%{release}
Requires: %{name}-doc = %{version}-%{release}
%description -n parquet-glib-libs
This package contains the libraries for Apache Parquet GLib.
%files -n parquet-glib-libs
%{_libdir}/libparquet-glib.so.*
%{_libdir}/girepository-1.0/Parquet-1.0.typelib
%package -n parquet-glib-devel
Summary: Libraries and header files for Apache Parquet GLib
Requires: parquet-devel = %{version}-%{release}
Requires: parquet-glib-libs = %{version}-%{release}
Requires: %{name}-glib-devel = %{version}-%{release}
%description -n parquet-glib-devel
Libraries and header files for Apache Parquet GLib.
%files -n parquet-glib-devel
%{_includedir}/parquet-glib/
%exclude %{_libdir}/libparquet-glib.a
%{_libdir}/libparquet-glib.so
%{_libdir}/pkgconfig/parquet-glib.pc
%{_datadir}/gir-1.0/Parquet-1.0.gir
%package -n parquet-glib-doc
Summary: Documentation for Apache Parquet GLib
%description -n parquet-glib-doc
Documentation for Apache Parquet GLib.
%files -n parquet-glib-doc
%{_datadir}/gtk-doc/html/parquet-glib/
%changelog
* Thu Jan 13 2022 Kaleb S. KEITHLEY <kkeithle [at] redhat.com> - 5.0.0-1
- Newer upstream release.