# 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.

ARG arch=amd64
FROM ${arch}/alpine:3.22

RUN apk add \
        apache-orc-dev \
        bash \
        benchmark-dev \
        boost-dev \
        brotli-dev \
        bzip2-dev \
        c-ares-dev \
        ccache \
        clang \
        cmake \
        curl-dev \
        g++ \
        gcc \
        gdb \
        gflags-dev \
        git \
        glog-dev \
        gmock \
        grpc-dev \
        gtest-dev \
        libxml2-dev \
        llvm-dev \
        llvm-gtest \
        llvm-static \
        lz4-dev \
        make \
        musl-locales \
        nlohmann-json \
        openssl-dev \
        patch \
        perl \
        pkgconfig \
        protobuf-dev \
        py3-pip \
        py3-numpy-dev \
        python3-dev \
        rapidjson-dev \
        re2-dev \
        rsync \
        samurai \
        snappy-dev \
        sqlite-dev \
        thrift-dev \
        tzdata \
        utf8proc-dev \
        xsimd-dev \
        zlib-dev \
        zstd-dev && \
    rm -rf /var/cache/apk/* && \
    ln -s /usr/share/zoneinfo/Etc/UTC /etc/localtime && \
    echo "Etc/UTC" > /etc/timezone

COPY ci/scripts/install_minio.sh /arrow/ci/scripts/
RUN /arrow/ci/scripts/install_minio.sh latest /usr/local

COPY ci/scripts/install_gcs_testbench.sh /arrow/ci/scripts/
RUN /arrow/ci/scripts/install_gcs_testbench.sh default

ENV ARROW_ACERO=ON \
    ARROW_AZURE=OFF \
    ARROW_BUILD_TESTS=ON \
    ARROW_DATASET=ON \
    ARROW_DEPENDENCY_SOURCE=SYSTEM \
    ARROW_FLIGHT=ON \
    ARROW_FLIGHT_SQL=ON \
    ARROW_GANDIVA=ON \
    ARROW_GCS=ON \
    ARROW_HOME=/usr/local \
    ARROW_ORC=ON \
    ARROW_PARQUET=ON \
    ARROW_S3=ON \
    ARROW_SUBSTRAIT=ON \
    ARROW_USE_CCACHE=ON \
    ARROW_WITH_BROTLI=ON \
    ARROW_WITH_BZ2=ON \
    ARROW_WITH_LZ4=ON \
    ARROW_WITH_OPENTELEMETRY=OFF \
    ARROW_WITH_MUSL=ON \
    ARROW_WITH_SNAPPY=ON \
    ARROW_WITH_ZLIB=ON \
    ARROW_WITH_ZSTD=ON \
    AWSSDK_SOURCE=BUNDLED \
    google_cloud_cpp_storage_SOURCE=BUNDLED \
    MUSL_LOCPATH=/usr/share/i18n/locales/musl \
    PATH=/usr/lib/ccache/bin:$PATH
