# 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
#
#     https://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.

# Dockerfile for installing the necessary dependencies for building Avro.
# See BUILD.txt.

# Despite this base, JDK8 is used by default.  See below.
FROM openjdk:11-stretch
WORKDIR /root

ENV APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=isolemnlysweariamuptonogood \
    DEBIAN_FRONTEND=noninteractive

# Install dependencies from vanilla system packages
RUN apt-get -qqy update \
 && apt-get -qqy install --no-install-recommends ant \
                                                 apt-transport-https \
                                                 apt-utils \
                                                 asciidoc \
                                                 bison \
                                                 bzip2 \
                                                 bundler \
                                                 cmake \
                                                 cppcheck \
                                                 curl \
                                                 doxygen \
                                                 flex \
                                                 g++ \
                                                 gcc \
                                                 git \
                                                 libboost-all-dev \
                                                 libfontconfig1-dev \
                                                 libfreetype6-dev \
                                                 libglib2.0-dev \
                                                 libjansson-dev \
                                                 libsnappy-dev \
                                                 libsnappy1v5 \
                                                 make \
                                                 maven \
                                                 mypy \
                                                 openjdk-8-jdk \
                                                 perl \
                                                 python \
                                                 python-pip \
                                                 python-setuptools \
                                                 python-snappy \
                                                 python-wheel \
                                                 python3-pip \
                                                 python3-setuptools \
                                                 python3-snappy \
                                                 python3-wheel \
                                                 rake \
                                                 ruby \
                                                 ruby-dev \
                                                 source-highlight \
                                                 subversion \
                                                 valgrind \
                                                 vim \
 && apt-get -qqy clean \
 && rm -rf /var/lib/apt/lists

# Install nodejs 6
RUN curl -sSL https://deb.nodesource.com/setup_10.x \
  | bash - \
 && apt-get -qqy install nodejs \
 && apt-get -qqy clean \
 && rm -rf /var/lib/apt/lists \
 && npm install -g grunt-cli \
 && npm cache clean --force

# Install PHP
ENV PHP7_VERSION=7.3
RUN curl -sSL https://packages.sury.org/php/apt.gpg \
  | apt-key add --no-tty - \
 && echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list \
 && apt-get -qqy update \
 && apt-get -qqy install --no-install-recommends libzstd-dev \
                                                 libbz2-dev \
                                                 php${PHP7_VERSION} \
                                                 php${PHP7_VERSION}-bz2 \
                                                 php${PHP7_VERSION}-gmp \
                                                 php${PHP7_VERSION}-xml \
                                                 php${PHP7_VERSION}-mbstring \
                                                 php${PHP7_VERSION}-dev \
 && mkdir tmp && cd tmp \
 && git clone --recursive --depth=1 https://github.com/kjdev/php-ext-zstd.git \
 && cd php-ext-zstd \
 && phpize \
 && ./configure \
 && make \
 && make install \
 && echo "extension=zstd.so" > /etc/php/7.3/cli/conf.d/10-zstd.ini \
 && cd .. && rm -rf php-ext-zstd \
 && git clone --recursive --depth=1 https://github.com/kjdev/php-ext-snappy.git \
 && cd php-ext-snappy \
 && phpize \
 && ./configure \
 && make \
 && make install \
 && echo "extension=snappy.so" > /etc/php/7.3/cli/conf.d/10-snappy.ini \
 && cd .. && rm -rf php-ext-snappy \
 && php -m \
 && apt-get -qqy clean \
 && rm -rf /var/lib/apt/lists

RUN curl -sS https://getcomposer.org/installer | php -- --version=2.0.7 --install-dir=/usr/local/bin --filename=composer

# Install Perl modules
RUN apt-get -qqy update \
 && apt-get -qqy install --no-install-recommends libcompress-raw-zlib-perl \
                                                 libcpan-uploader-perl \
                                                 libencode-perl \
                                                 libio-string-perl \
                                                 libjson-xs-perl \
                                                 libmodule-install-perl \
                                                 libmodule-install-readmefrompod-perl \
                                                 libobject-tiny-perl \
                                                 libperl-critic-perl \
                                                 libregexp-common-perl \
                                                 libtest-exception-perl \
                                                 libtest-pod-perl \
                                                 libtry-tiny-perl \
 && apt-get -qqy clean \
 && rm -rf /var/lib/apt/lists
RUN curl -sSL https://cpanmin.us \
  | perl - --self-upgrade \
 && cpanm --mirror https://www.cpan.org/ install Compress::Zstd \
                                                 Module::Install::Repository \
 && rm -rf .cpanm

# Install Python packages
ENV PIP_NO_CACHE_DIR=off

# Install Python2 packages
RUN python2 -m pip install --upgrade pip setuptools wheel \
 && python2 -m pip install zstandard

# Install Python3 packages
RUN python3 -m pip install --upgrade pip setuptools wheel \
 && python3 -m pip install tox zstandard

# Install .NET SDK
RUN curl -sSLO https://packages.microsoft.com/config/ubuntu/16.04/packages-microsoft-prod.deb \
 && dpkg -i packages-microsoft-prod.deb \
 && rm packages-microsoft-prod.deb \
 && apt-get -qqy update \
 && apt-get -qqy install --no-install-recommends dotnet-sdk-3.1 \
 && apt-get -qqy clean \
 && rm -rf /var/lib/apt/lists

# Install Ruby modules
COPY lang/ruby/Gemfile /tmp
RUN bundle install --gemfile=/tmp/Gemfile

# Note: This "ubertool" container has two JDK versions:
# - OpenJDK 8 (installed as a package and available at /usr/bin/java)
# - OpenJDK 11 (installed from the base image, and prioritized in the PATH)
# - The root build.sh script switches between the versions according to
#   the JAVA environment variable.

# Since want the JDK8 as a default, we have to re-prepend it to the PATH.
# The /usr/local/openjdk-8 link is created to be consistent with the
# openjdk:8 image.

RUN ln -s /usr/lib/jvm/java-8-openjdk-amd64 /usr/local/openjdk-8
ENV JAVA_HOME /usr/local/openjdk-8
ENV PATH $JAVA_HOME/bin:$PATH

CMD ["/bin/bash", "-i"]
