1PORTNAME=	arrow
2DISTVERSION=	21.0.0
3PORTREVISION=	7
4CATEGORIES=	databases
5MASTER_SITES=	APACHE/${PORTNAME}/${PORTNAME}-${DISTVERSION} \
6		https://github.com/apache/orc/archive/rel/:orc
7DISTNAME=	apache-${PORTNAME}-${DISTVERSION}
8DISTFILES=	apache-${PORTNAME}-${DISTVERSION}${EXTRACT_SUFX} release-1.6.6${EXTRACT_SUFX}:orc
9EXTRACT_ONLY=	apache-${PORTNAME}-${DISTVERSION}${EXTRACT_SUFX}
10
11MAINTAINER=	ports@MidnightBSD.org
12COMMENT=	Columnar in-memory analytics layer for big data
13WWW=		https://arrow.apache.org \
14		https://github.com/apache/arrow
15
16LICENSE=	Apache-2.0
17LICENSE_FILE=	${WRKSRC}/../LICENSE.txt
18
19LIB_DEPENDS=	libboost_thread.so:devel/boost-libs
20
21USES=		cmake compiler:c++17-lang localbase pkgconfig python:build,test
22USE_LDCONFIG=	yes
23
24USE_GITHUB=	nodefault
25GH_ACCOUNT=	apache
26#GH_TUPLE=	apache:arrow-testing:d2a1371:arrow_testing/testing \
27		apache:parquet-testing:c7cf137:parquet_testing/cpp/submodules/parquet-testing
28
29WRKSRC_SUBDIR=	cpp
30
31PLIST_SUB=	LIBVERSION=2100
32
33CMAKE_ARGS=	-DARROW_RUNTIME_SIMD_LEVEL=NONE -DARROW_SIMD_LEVEL=NONE -DCMAKE_CXX_STANDARD=17
34CMAKE_OFF=	ARROW_BUILD_BENCHMARKS ARROW_BUILD_STATIC ARROW_BUILD_TESTS ARROW_WITH_BACKTRACE
35
36BINARY_ALIAS=	python=${PYTHON_CMD} # only for tests
37
38OPTIONS_GROUP=			COMPONENTS COMPRESSION # components are listed in cpp/cmake_modules/DefineOptions.cmake
39OPTIONS_GROUP_COMPONENTS=	ACERO COMPUTE CSV DATASET FILESYSTEM FLIGHT FLIGHT_SQL GANDIVA HDFS IPC JSON MIMALLOC PARQUET ORC S3 SKYHOOK SUBSTRAIT BUILD_UTILITIES TENSORFLOW TESTING
40OPTIONS_GROUP_COMPRESSION=	BROTLI BZ2 LZ4 SNAPPY ZLIB ZSTD
41OPTIONS_SUB=			yes
42
43## DESCs
44
45COMPRESSION_DESC=		Compression support:
46COMPONENTS_DESC=		Build components:
47
48## Compression options
49
50BROTLI_CMAKE_BOOL=		ARROW_WITH_BROTLI
51BROTLI_LIB_DEPENDS=		libbrotlicommon.so:archivers/brotli
52
53BZ2_DESC=			bz2 compression support
54BZ2_CMAKE_BOOL=			ARROW_WITH_BZ2
55
56LZ4_CMAKE_BOOL=			ARROW_WITH_LZ4
57LZ4_LIB_DEPENDS=		liblz4.so:archivers/liblz4
58
59SNAPPY_CMAKE_BOOL=		ARROW_WITH_SNAPPY
60SNAPPY_LIB_DEPENDS=		libsnappy.so:archivers/snappy
61
62ZLIB_CMAKE_BOOL=		ARROW_WITH_ZLIB
63
64ZSTD_DESC=			zstd compression support
65ZSTD_CMAKE_BOOL=		ARROW_WITH_ZSTD
66ZSTD_LIB_DEPENDS=		libzstd.so:archivers/zstd
67
68## Component options
69
70ACERO_DESC=			Arrow Acero Engine Module
71ACERO_CMAKE_BOOL=		ARROW_ACERO
72ACERO_IMPLIES=			COMPUTE IPC
73
74COMPUTE_DESC=			Arrow Compute Modules
75COMPUTE_CMAKE_BOOL=		ARROW_COMPUTE
76COMPUTE_CMAKE_ON=		-DARROW_WITH_UTF8PROC=ON
77COMPUTE_LIB_DEPENDS=		libre2.so:devel/re2 \
78				libutf8proc.so:textproc/utf8proc
79
80CSV_DESC=			Arrow CSV Parser Module
81CSV_CMAKE_BOOL=			ARROW_CSV
82
83DATASET_DESC=			Arrow Dataset Modules
84DATASET_CMAKE_BOOL=		ARROW_DATASET
85DATASET_IMPLIES=		ACERO FILESYSTEM
86
87FILESYSTEM_DESC=		Arrow Filesystem Layer
88FILESYSTEM_CMAKE_BOOL=		ARROW_FILESYSTEM
89
90FLIGHT_DESC=			Arrow Flight RPC System
91FLIGHT_USES=			ssl
92FLIGHT_CMAKE_BOOL=		ARROW_FLIGHT
93FLIGHT_LIB_DEPENDS=		libgflags.so:devel/gflags \
94				libprotobuf.so:devel/protobuf \
95				libabsl_base.so:devel/abseil \
96				libcares.so:dns/c-ares \
97				libgrpc.so:devel/grpc \
98				libre2.so:devel/re2
99FLIGHT_IMPLIES=			IPC COMPUTE # see https://github.com/apache/arrow/issues/40766
100
101FLIGHT_SQL_DESC=		Arrow Flight SQL
102FLIGHT_SQL_CMAKE_BOOL=		ARROW_FLIGHT_SQL
103FLIGHT_SQL_IMPLIES=		FLIGHT
104
105GANDIVA_DESC=			Gandiva libraries
106GANDIVA_USES=			llvm:17,lib ssl
107GANDIVA_CMAKE_BOOL=		ARROW_GANDIVA
108GANDIVA_CMAKE_ON=		-DARROW_WITH_UTF8PROC=ON
109GANDIVA_LIB_DEPENDS=		libgrpc.so:devel/grpc \
110				libprotobuf.so:devel/protobuf \
111				libre2.so:devel/re2 \
112				libutf8proc.so:textproc/utf8proc
113
114HDFS_DESC=			Arrow HDFS bridge
115HDFS_CMAKE_BOOL=		ARROW_HDFS
116
117IPC_DESC=			Arrow IPC extensions
118IPC_CMAKE_BOOL=			ARROW_IPC
119
120JSON_DESC=			JSON support
121JSON_CMAKE_BOOL=		ARROW_JSON
122JSON_BUILD_DEPENDS=		${LOCALBASE}/include/rapidjson/rapidjson.h:devel/rapidjson
123
124MIMALLOC_DESC=			Arrow mimalloc-based allocato
125MIMALLOC_CMAKE_BOOL=		ARROW_MIMALLOC
126MIMALLOC_LIB_DEPENDS=		libmimalloc.so:devel/mimalloc
127MIMALLOC_BROKEN=		Pending paths fix in bug#255537
128
129PARQUET_DESC=			Parquet libraries
130PARQUET_CMAKE_BOOL=		ARROW_PARQUET PARQUET_REQUIRE_ENCRYPTION
131PARQUET_USES=			ssl
132PARQUET_LIB_DEPENDS=		libthrift.so:devel/thrift-cpp
133PARQUET_IMPLIES=		IPC
134
135ORC_DESC=			Arrow ORC adapter
136ORC_CMAKE_BOOL=			ARROW_ORC
137ORC_LIB_DEPENDS=		libprotobuf.so:devel/protobuf
138ORC_CONFIGURE_ENV=		ARROW_ORC_URL=file://${DISTDIR}/${DIST_SUBDIR}/release-1.6.6${EXTRACT_SUFX}
139ORC_IMPLIES=			LZ4 SNAPPY ZLIB ZSTD # cpp/CMakeLists.txt
140ORC_BROKEN=			fatal error: 'orc/OrcFile.hh' file not found: https://issues.apache.org/jira/browse/ARROW-12624
141
142BUILD_UTILITIES_DESC=		build Arrow commandline utilities
143BUILD_UTILITIES_CMAKE_BOOL=	ARROW_BUILD_UTILITIES
144
145#PYTHON_DESC=			Build python extension support
146#PYTHON_CMAKE_BOOL=		ARROW_PYTHON
147#PYTHON_USES=			python
148#PYTHON_BUILD_DEPENDS=		${PYTHON_PKGNAMEPREFIX}numpy1>=1.16:math/py-numpy1@${PY_FLAVOR} # see https://issues.apache.org/jira/browse/ARROW-16820
149#PYTHON_RUN_DEPENDS=		${PYTHON_PKGNAMEPREFIX}numpy1>=1.16:math/py-numpy1@${PY_FLAVOR}
150#PYTHON_IMPLIES=			COMPUTE CSV DATASET FILESYSTEM HDFS JSON
151#PYTHON_VARS=			PLIST_SUB+=PYTHON_SUFFIX=${PYTHON_SUFFIX}
152
153S3_DESC=			S3 support
154S3_CMAKE_BOOL=			ARROW_S3
155S3_USES=			ssl
156S3_LIB_DEPENDS=			\
157				libaws-c-auth.so:security/aws-c-auth \
158				libaws-c-cal.so:security/aws-c-cal \
159				libaws-c-common.so:devel/aws-c-common \
160				libaws-c-compression.so:devel/aws-c-compression \
161				libaws-c-event-stream.so:devel/aws-c-event-stream \
162				libaws-c-http.so:devel/aws-c-http \
163				libaws-c-io.so:devel/aws-c-io \
164				libaws-c-mqtt.so:devel/aws-c-mqtt \
165				libaws-c-s3.so:devel/aws-c-s3 \
166				libaws-c-sdkutils.so:devel/aws-c-sdkutils \
167				libaws-checksums.so:devel/aws-checksums \
168				libaws-crt-cpp.so:devel/aws-crt-cpp \
169				libaws-cpp-sdk-s3.so:devel/aws-sdk-cpp \
170				libs2n.so:security/s2n-tls
171
172SKYHOOK_DESC=			Build the Skyhook libraries
173SKYHOOK_CMAKE_BOOL=		ARROW_SKYHOOK
174SKYHOOK_IMPLIES=		DATASET PARQUET
175SKYHOOK_BROKEN=			could NOT find librados
176
177SUBSTRAIT_DESC=			Build the Arrow Substrait Consumer Module
178SUBSTRAIT_CMAKE_BOOL=		ARROW_SUBSTRAIT
179SUBSTRAIT_IMPLIES=		DATASET IPC PARQUET
180SUBSTRAIT_BROKEN=		needs investigation
181
182TENSORFLOW_DESC=		TensorFlow support
183TENSORFLOW_CMAKE_BOOL=		ARROW_TENSORFLOW
184TENSORFLOW_BROKEN=		needs testing
185
186TESTING_DESC=			Arrow testing libraries
187TESTING_CMAKE_BOOL=		ARROW_TESTING
188TESTING_LIB_DEPENDS=		libgtest.so:devel/googletest
189
190# form OPTIONS_DEFAULT
191.for opt in ${OPTIONS_GROUP_COMPONENTS} ${OPTIONS_GROUP_COMPRESSION}
192.  if "${${opt}_BROKEN}" == ""
193OPTIONS_DEFAULT+=	${opt}
194.  endif
195.endfor
196
197.include <bsd.mport.options.mk>
198
199.if !empty(PORT_OPTIONS:MCOMPUTE) || !empty(PORT_OPTIONS:MFLIGHT) || !empty(PORT_OPTIONS:MGANDIVA)
200PLIST_FILES+=	lib/cmake/Arrow/Findre2Alt.cmake
201.endif
202
203.if !empty(PORT_OPTIONS:MIPC) && !empty(PORT_OPTIONS:MBUILD_UTILITIES)
204PLIST_FILES+=	bin/arrow-file-to-stream \
205		bin/arrow-stream-to-file
206.endif
207.if !empty(PORT_OPTIONS:MGANDIVA) || !empty(PORT_OPTIONS:MCOMPUTE)
208PLIST_FILES+=	lib/cmake/Arrow/Findutf8proc.cmake
209.endif
210.if !empty(PORT_OPTIONS:MGANDIVA) || !empty(PORT_OPTIONS:MZSTD)
211PLIST_FILES+=	lib/cmake/Gandiva/FindzstdAlt.cmake
212.endif
213
214.if !empty(PORT_OPTIONS:MPYTHON) && !empty(PORT_OPTIONS:MFLIGHT)
215    PLIST_SUB+=	PYTHONFLIGHT=""
216.else
217    PLIST_SUB+=	PYTHONFLIGHT="@comment "
218.endif
219
220.if !empty(PORT_OPTIONS:MTESTING) && !empty(PORT_OPTIONS:MFLIGHT)
221    PLIST_SUB+=	TESTINGFLIGHT=""
222.else
223    PLIST_SUB+=	TESTINGFLIGHT="@comment "
224.endif
225
226post-install:
227	# based on the user's report on 2024-04-12, the R extension expects only "ON" and "OFF" values in lib/cmake/Arrow/ArrowOptions.cmake
228	# other values confuse the R extension build, so we adjust these values to "ON" and "OFF" as a workaround
229	${REINPLACE_CMD} -i '' \
230		-e 's|"true"|"ON"|; s|"false"|"OFF"|' \
231		${STAGEDIR}${PREFIX}/lib/cmake/Arrow/ArrowOptions.cmake
232
233do-test:
234	@cd ${BUILD_WRKSRC} && \
235		${SETENV} ${CONFIGURE_ENV} ${CMAKE_BIN} ${CMAKE_ARGS} -DARROW_BUILD_TESTS:BOOL=ON ${CMAKE_SOURCE_PATH} && \
236		${SETENV} ${MAKE_ENV} ${MAKE_CMD} ${MAKE_ARGS} ${ALL_TARGET} && \
237		${SETENV} ${MAKE_ENV} ${MAKE_CMD} ${MAKE_ARGS} test
238
239# tests as of : 89% tests passed, 10 tests failed out of 90, see https://github.com/apache/arrow/issues/45604
240
241.include <bsd.port.mk>
242