# Copyright 2020 the original author or authors.
#
# 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.

FROM ubuntu:16.04

# Update to have latest images
RUN apt-get update && apt-get -q -y install \
    git=1:2.7.4-0ubuntu1.9 \
    pkg-config=0.29.1-0ubuntu1 \
    build-essential=12.1ubuntu2 \
    autoconf=2.69-9 libtool=2.4.6-0.1 \
    libgflags-dev=2.1.2-3 \
    clang=1:3.8-33ubuntu3.1 \
    libc++-dev=3.7.0-1ubuntu0.1 \
    unzip=6.0-20ubuntu1 \
    libssl-dev=1.0.2g-1ubuntu4.17 \
    gawk=1:4.1.3+dfsg-0.1 \
    debhelper=9.20160115ubuntu3 \
    dh-systemd=1.29ubuntu4 \
    init-system-helpers=1.29ubuntu4 \
    curl=7.47.0-1ubuntu2.16 \
    ccache=3.2.4-1 \
    g++-4.9=4.9.3-13ubuntu2 \
    wget=1.17.1-1ubuntu1.5 \
    ca-certificates=20201027ubuntu0.16.04.1 \
    lcov=1.12-2 \
    libgoogle-glog-dev=0.3.4-0.1 \
    libpcap-dev=1.7.4-2ubuntu0.1 && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

# Install cmake (need cmake version 3.15.0 or later to compile grpc c++ 1.31.1)
RUN wget -q -O cmake-linux.sh https://github.com/Kitware/CMake/releases/download/v3.17.0/cmake-3.17.0-Linux-x86_64.sh && \
sh cmake-linux.sh -- --skip-license && rm cmake-linux.sh

ARG GRPC_VER
# Download, compile and install gRPC. Remove the source and build artificats after install.
RUN cd /tmp && git clone --recurse-submodules -b $GRPC_VER https://github.com/grpc/grpc && \
    cd /tmp/grpc && mkdir -p cmake/build && cd cmake/build && cmake -DgRPC_INSTALL=ON -DgRPC_BUILD_TESTS=OFF ../.. && \
    make && make install && cd /tmp && \
    rm -rf /tmp/grpc

ARG PCAPPLUSPLUS_VER
# Download, compile and install PcapPlusPlus. Remove the source and build artificats after install.
RUN cd /tmp && git clone -b $PCAPPLUSPLUS_VER https://github.com/seladb/PcapPlusPlus.git && \
    cd /tmp/PcapPlusPlus && ./configure-linux.sh —default && \
    make all && make install && cd /tmp && \
    rm -rf /tmp/PcapPlusPlus

ARG GTEST_VER
# Download compile and install gtest library. Remove the source and build artificats after install.
RUN cd /tmp && git clone https://github.com/google/googletest.git && \
    cd /tmp/googletest && git checkout $GTEST_VER && \
    cd /tmp/googletest && cmake CMakeLists.txt && \
    make && make install && ldconfig && \
    rm -rf /tmp/googletest

ARG CMOCK_VER
# Download and install C-Mock library. Remove the source and build artificats after install.
RUN cd /tmp && git clone https://github.com/hjagodzinski/C-Mock.git && \
    cd /tmp/C-Mock && git checkout $CMOCK_VER && \
    make install && \
    rm -rf /tmp/C-Mock

ARG GMOCK_GLOBAL_VER
# Download and install gmock-global library. Remove the source and build artificats after install.
RUN cd /tmp && git clone https://github.com/apriorit/gmock-global.git && \
    cd /tmp/gmock-global && git checkout $GMOCK_GLOBAL_VER && \
    cp -rf /tmp/gmock-global/include/gmock-global /usr/local/include && rm -rf /tmp/gmock-global

WORKDIR /app
