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

#
# Apache Thrift Docker build environment for Ubuntu Jammy
# with some updated packages.
#

FROM buildpack-deps:jammy-scm
LABEL MAINTAINER="Apache Thrift <dev@thrift.apache.org>"
ENV DEBIAN_FRONTEND=noninteractive

### Add apt repos

RUN apt-get update -yq && \
  apt-get dist-upgrade -y && \
  apt-get install -y --no-install-recommends --fix-missing \
  apt \
  apt-transport-https \
  apt-utils \
  curl \
  dirmngr \
  software-properties-common \
  wget

# Dart
RUN curl https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - && \
  curl https://storage.googleapis.com/download.dartlang.org/linux/debian/dart_stable.list > \
  /etc/apt/sources.list.d/dart_stable.list

# dotnet (netcore)
RUN curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > /etc/apt/trusted.gpg.d/microsoft.gpg && \
  wget -q -O /etc/apt/sources.list.d/microsoft-prod.list https://packages.microsoft.com/config/ubuntu/18.04/prod.list && \
  chown root:root /etc/apt/trusted.gpg.d/microsoft.gpg && \
  chown root:root /etc/apt/sources.list.d/microsoft-prod.list

# node.js
RUN curl -sL https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add - && \
  echo "deb https://deb.nodesource.com/node_16.x focal main" | tee /etc/apt/sources.list.d/nodesource.list

### install general dependencies
RUN apt-get update -yq && \
  apt-get install -y --no-install-recommends \
  `# General dependencies` \
  bash-completion \
  bison \
  build-essential \
  clang \
  cmake \
  debhelper \
  flex \
  gdb \
  libasound2 \
  libatk-bridge2.0-0 \
  libgtk-3-0 \
  llvm \
  ninja-build \
  pkg-config \
  unzip \
  valgrind \
  vim
ENV PATH /usr/lib/llvm-6.0/bin:$PATH

# lib/as3 (ActionScript)
RUN mkdir -p /usr/local/adobe/flex/4.6 && \
  cd /usr/local/adobe/flex/4.6 && \
  wget -q "http://download.macromedia.com/pub/flex/sdk/flex_sdk_4.6.zip" && \
  unzip flex_sdk_4.6.zip
ENV FLEX_HOME /usr/local/adobe/flex/4.6

# TODO: "apt-get install" without "apt-get update" in the same "RUN" step can cause cache issues if modified later.
# See https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#run
RUN apt-get install -y --no-install-recommends \
  `# C++ dependencies` \
  libboost-all-dev \
  libevent-dev \
  libssl-dev \
  qt5-default \
  qtbase5-dev \
  qtbase5-dev-tools

ENV SBCL_VERSION 1.5.3
RUN \
  `# Common Lisp (sbcl) dependencies` \
  curl --version && \
  curl -o sbcl-${SBCL_VERSION}-x86-64-linux-binary.tar.bz2 -J -L https://sourceforge.net/projects/sbcl/files/sbcl/${SBCL_VERSION}/sbcl-${SBCL_VERSION}-x86-64-linux-binary.tar.bz2/download?use_mirror=managedway# && \
  tar xjf sbcl-${SBCL_VERSION}-x86-64-linux-binary.tar.bz2 && \
  cd sbcl-${SBCL_VERSION}-x86-64-linux && \
  ./install.sh && \
  sbcl --version && \
  cd .. && \
  rm -rf sbcl*

ENV D_VERSION     2.087.0
ENV DMD_DEB       dmd_2.087.0-0_amd64.deb
RUN \
  `# D dependencies` \
  wget -q http://downloads.dlang.org/releases/2.x/${D_VERSION}/${DMD_DEB} && \
  dpkg --install ${DMD_DEB} && \
  rm -f ${DMD_DEB} && \
  mkdir -p /usr/include/dmd/druntime/import/deimos /usr/include/dmd/druntime/import/C && \
  git clone -b 'v2.0.2+2.0.16' https://github.com/D-Programming-Deimos/libevent.git deimos-libevent-2.0 && \
  mv deimos-libevent-2.0/deimos/* /usr/include/dmd/druntime/import/deimos/ && \
  mv deimos-libevent-2.0/C/* /usr/include/dmd/druntime/import/C/ && \
  rm -rf deimos-libevent-2.0 && \
  git clone -b 'v2.0.0+1.1.0h' https://github.com/D-Programming-Deimos/openssl.git deimos-openssl-1.1.0h && \
  mv deimos-openssl-1.1.0h/deimos/* /usr/include/dmd/druntime/import/deimos/ && \
  mv deimos-openssl-1.1.0h/C/* /usr/include/dmd/druntime/import/C/ && \
  rm -rf deimos-openssl-1.1.0h

ENV DART_VERSION 2.7.2-1
RUN apt-get install -y --no-install-recommends \
  `# Dart dependencies` \
  dart=$DART_VERSION
ENV PATH /usr/lib/dart/bin:$PATH

RUN apt-get install -y --no-install-recommends \
  `# dotnet core dependencies` \
  dotnet-sdk-6.0 \
  dotnet-runtime-6.0 \
  aspnetcore-runtime-6.0 \
  dotnet-apphost-pack-6.0

# Erlang dependencies
ARG ERLANG_OTP_VERSION=23.3.4.11
ARG ERLANG_REBAR_VERSION=3.18.0
RUN apt-get update && apt-get install -y --no-install-recommends libncurses5-dev && \
  curl -ssLo /usr/local/bin/kerl https://raw.githubusercontent.com/kerl/kerl/master/kerl && chmod +x /usr/local/bin/kerl && \
  kerl build $ERLANG_OTP_VERSION && kerl install $ERLANG_OTP_VERSION /usr/local/lib/otp/ && . /usr/local/lib/otp/activate && \
  curl -ssLo /usr/local/bin/rebar3 https://github.com/erlang/rebar3/releases/download/${ERLANG_REBAR_VERSION}/rebar3 && chmod +x /usr/local/bin/rebar3 && \
  rebar3 --version
ENV PATH /usr/local/lib/otp/bin:$PATH

RUN apt-get install -y --no-install-recommends \
  `# GlibC dependencies` \
  libglib2.0-dev

# golang
ENV GOLANG_VERSION 1.19.2
ENV GOLANG_DOWNLOAD_URL https://go.dev/dl/go$GOLANG_VERSION.linux-amd64.tar.gz
ENV GOLANG_DOWNLOAD_SHA256 5e8c5a74fe6470dd7e055a461acda8bb4050ead8c2df70f227e3ff7d8eb7eeb6
RUN curl -fsSL "$GOLANG_DOWNLOAD_URL" -o golang.tar.gz && \
  echo "$GOLANG_DOWNLOAD_SHA256  golang.tar.gz" | sha256sum -c - && \
  tar -C /usr/local -xzf golang.tar.gz && \
  ln -s /usr/local/go/bin/go /usr/local/bin && \
  rm golang.tar.gz

RUN apt-get install -y --no-install-recommends \
  `# Haxe dependencies` \
  haxe \
  neko \
  neko-dev && \
  haxelib setup --always /usr/share/haxe/lib && \
  haxelib install --always hxcpp 2>&1 > /dev/null

ENV GRADLE_VERSION="7.5.1"
RUN apt-get install -y --no-install-recommends \
  `# Java dependencies` \
  ant \
  ant-optional \
  maven \
  openjdk-11-jdk-headless && \
  `# Gradle` \
  wget https://services.gradle.org/distributions/gradle-$GRADLE_VERSION-bin.zip -q -O /tmp/gradle-$GRADLE_VERSION-bin.zip && \
  (echo "f6b8596b10cce501591e92f229816aa4046424f3b24d771751b06779d58c8ec4  /tmp/gradle-$GRADLE_VERSION-bin.zip" | sha256sum -c -) && \
  unzip -d /tmp /tmp/gradle-$GRADLE_VERSION-bin.zip && \
  mv /tmp/gradle-$GRADLE_VERSION /usr/local/gradle && \
  ln -s /usr/local/gradle/bin/gradle /usr/local/bin

RUN apt-get install -y --no-install-recommends \
  `# Lua dependencies` \
  lua5.2 \
  lua5.2-dev
# https://bugs.launchpad.net/ubuntu/+source/lua5.3/+bug/1707212
# lua5.3 does not install alternatives!
# need to update our luasocket code, lua doesn't have luaL_openlib any more

RUN apt-get install -y --no-install-recommends \
  `# Node.js dependencies` \
  nodejs

# Test dependencies for running puppeteer
RUN apt-get install -y --no-install-recommends \
  `# JS dependencies` \
  libxss1 \
  libxtst6

RUN apt-get install -y --no-install-recommends \
  `# OCaml dependencies` \
  ocaml \
  opam && \
  `# disable sandboxing see https://github.com/ocaml/opam/issues/4327` \
  opam init --yes --disable-sandboxing && \
  opam install --yes oasis

RUN apt-get install -y --no-install-recommends \
  `# Perl dependencies` \
  libbit-vector-perl \
  libclass-accessor-class-perl \
  libcrypt-ssleay-perl \
  libio-socket-ssl-perl \
  libnet-ssleay-perl \
  libtest-exception-perl

RUN apt-get install -y --no-install-recommends \
  `# Php dependencies` \
  php \
  php-cli \
  php-dev \
  php-json \
  php-pear \
  re2c \
  composer

RUN apt-get install -y --no-install-recommends \
  `# Python3 dependencies` \
  python3-all \
  python3-all-dbg \
  python3-all-dev \
  python3-pip \
  python3-setuptools \
  python3-six \
  python3-tornado \
  python3-twisted \
  python3-wheel \
  python3-zope.interface

RUN apt-get install -y --no-install-recommends \
  `# Ruby dependencies` \
  ruby \
  ruby-dev \
  ruby-bundler

# Rust dependencies
RUN curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain 1.61.0 -y
ENV PATH /root/.cargo/bin:$PATH

# Swift on Linux for cross tests
RUN apt-get install -yq \
  libedit-dev \
  libz3-dev \
  libpython2-dev \
  libxml2-dev && \
  cd / && \
  wget --quiet https://download.swift.org/swift-5.7-release/ubuntu2204/swift-5.7-RELEASE/swift-5.7-RELEASE-ubuntu22.04.tar.gz && \
  tar xf swift-5.7-RELEASE-ubuntu22.04.tar.gz && \
  mv swift-5.7-RELEASE-ubuntu22.04 /usr/share/swift && \
  rm swift-5.7-RELEASE-ubuntu22.04.tar.gz

ENV PATH /usr/share/swift/usr/bin:$PATH
RUN swift --version

# Locale(s) for cpp unit tests
RUN apt-get install -y --no-install-recommends \
  `# Locale dependencies` \
  locales && \
  locale-gen en_US.UTF-8 && \
  locale-gen de_DE.UTF-8 && \
  update-locale

RUN apt-get install -y --no-install-recommends \
  `# Static Code Analysis dependencies` \
  cppcheck \
  sloccount && \
  pip install flake8

# NOTE: this does not reduce the image size but adds an additional layer.
# # Clean up
# RUN rm -rf /var/cache/apt/* && \
#     rm -rf /var/lib/apt/lists/* && \
#     rm -rf /tmp/* && \
#     rm -rf /var/tmp/*

ENV THRIFT_ROOT /thrift
RUN mkdir -p $THRIFT_ROOT/src
COPY Dockerfile $THRIFT_ROOT/
WORKDIR $THRIFT_ROOT/src
