class ApacheArrow < Formula desc "Columnar in-memory analytics layer designed to accelerate big data" homepage "https://arrow.apache.org/" url "https://www.apache.org/dyn/closer.lua?path=arrow/arrow-22.0.0/apache-arrow-22.0.0.tar.gz" mirror "https://archive.apache.org/dist/arrow/arrow-22.0.0/apache-arrow-22.0.0.tar.gz" sha256 "131250cd24dec0cddde04e2ad8c9e2bc43edc5e84203a81cf71cf1a33a6e7e0f" license "Apache-2.0" head "https://github.com/apache/arrow.git", branch: "main" bottle do sha256 cellar: :any, arm64_tahoe: "32a87b802207cb423cf969a1c887b3512824ff662defc9aac49871be2eb56c9c" sha256 cellar: :any, arm64_sequoia: "6b37331ab91e0b096fdca9216c7ce523ac248354aebbaf5f798bcd05bea7c474" sha256 cellar: :any, arm64_sonoma: "9143f8470811431998dcfab5d3eec6852b458fc734a440dce3b2fd25b0d139d3" sha256 cellar: :any, sonoma: "11aa2ee9c037b6d1458ed7fd792b80e97544edcb0ca8b49b0267402aaea62899" sha256 arm64_linux: "8b049036a32ca8ad2e048ef81d36d835e38d4b389c2d2973dda201a92e52d9b4" sha256 x86_64_linux: "f1ad2f9f4fb216c51101823368f30947c1ebe79e9f72ae7c2df24d2aadecabc2" end depends_on "boost" => :build depends_on "cmake" => :build depends_on "gflags" => :build depends_on "rapidjson" => :build depends_on "xsimd" => :build depends_on "abseil" depends_on "aws-crt-cpp" depends_on "aws-sdk-cpp" depends_on "brotli" depends_on "grpc" depends_on "llvm" depends_on "lz4" depends_on "openssl@3" depends_on "protobuf" depends_on "re2" depends_on "snappy" depends_on "thrift" depends_on "utf8proc" depends_on "zstd" uses_from_macos "python" => :build uses_from_macos "bzip2" uses_from_macos "zlib" def install # We set `ARROW_ORC=OFF` because it fails to build with Protobuf 27.0 args = %W[ -DCMAKE_INSTALL_RPATH=#{rpath} -DLLVM_ROOT=#{Formula["llvm"].opt_prefix} -DCMAKE_C_COMPILER=#{Formula["llvm"].opt_bin}/clang -DCMAKE_CXX_COMPILER=#{Formula["llvm"].opt_bin}/clang++ -DARROW_DEPENDENCY_SOURCE=SYSTEM -DARROW_ACERO=ON -DARROW_COMPUTE=ON -DARROW_CSV=ON -DARROW_DATASET=ON -DARROW_FILESYSTEM=ON -DARROW_FLIGHT=ON -DARROW_FLIGHT_SQL=ON -DARROW_GANDIVA=ON -DARROW_HDFS=ON -DARROW_JSON=ON -DARROW_ORC=OFF -DARROW_PARQUET=ON -DARROW_PROTOBUF_USE_SHARED=ON -DARROW_S3=ON -DARROW_WITH_BZ2=ON -DARROW_WITH_ZLIB=ON -DARROW_WITH_ZSTD=ON -DARROW_WITH_LZ4=ON -DARROW_WITH_SNAPPY=ON -DARROW_WITH_BROTLI=ON -DARROW_WITH_UTF8PROC=ON -DARROW_INSTALL_NAME_RPATH=OFF -DPARQUET_BUILD_EXECUTABLES=ON ] args << "-DARROW_MIMALLOC=ON" unless Hardware::CPU.arm? args << if OS.mac? "-DCMAKE_SHARED_LINKER_FLAGS=-Wl,-dead_strip_dylibs" # Reduce overlinking else "-DCMAKE_BUILD_WITH_INSTALL_RPATH=ON" # Avoid versioned LLVM RPATH getting dropped end # ARROW_SIMD_LEVEL sets the minimum required SIMD. Since this defaults to # SSE4.2 on x86_64, we need to reduce level to match oldest supported CPU. # Ref: https://arrow.apache.org/docs/cpp/env_vars.html#envvar-ARROW_USER_SIMD_LEVEL if build.bottle? && Hardware::CPU.intel? && (!OS.mac? || !MacOS.version.requires_sse42?) args << "-DARROW_SIMD_LEVEL=NONE" end system "cmake", "-S", "cpp", "-B", "build", *args, *std_cmake_args system "cmake", "--build", "build" system "cmake", "--install", "build" end test do (testpath/"test.cpp").write <<~CPP #include "arrow/api.h" int main(void) { arrow::int64(); return 0; } CPP system ENV.cxx, "test.cpp", "-std=c++17", "-I#{include}", "-L#{lib}", "-larrow", "-o", "test" system "./test" end end