# O-RAN-SC
#
# Copyright (C) 2019 AT&T Intellectual Property and Nokia
#
# 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.

# Builder image Alpine 3.9
# gcc/g++ v 8
# golang v 1.12
# python 3.7
# nng library (libnng.so, libnng.so.X.X.X; see below for pinned version)
# Includes RIC libraries as a distribution path because
# PackageCloud does not support Alpine .apk (yet):
# mdc log library (libmdclog.so, libmdbclog.so.X.X.X; see below for pinned version)
# rmr library (librmr_nng.so, libmdclog.so..X.X.X; see below for pinned version)
# How to get a library file from this Docker base image:
# COPY --from=nexus3.o-ran-sc.org:10004/bldr-alpine3:1-a3.9 /usr/local/lib64/libnng.so.X.X.X /usr/local/lib
# COPY --from=nexus3.o-ran-sc.org:10004/bldr-alpine3:1-a3.9 /usr/local/lib64/librmr_nng.so.X.X.X /usr/local/lib
# COPY --from=nexus3.o-ran-sc.org:10004/bldr-alpine3:1-a3.9 /usr/local/lib/libmdclog.so.X.X.X /usr/local/lib
# Some packages install to /usr/local/lib, others to /usr/local/lib64
# Alpine by default searches /usr/local/lib but not /usr/local/lib64

FROM python:3.7-alpine
RUN apk update && apk add \
  autoconf \
  automake \
  build-base \
  cmake \
  libtool \
  ninja \
  pkgconfig \
  python-dev \
  git \
  go

# the autoconf-archive in alpine's edge repos is too new
# for our purposes, so we'll use one from the source.
RUN cd /tmp \
    && git clone --branch v2015.09.25 git://git.sv.gnu.org/autoconf-archive.git \
    && cp /tmp/autoconf-archive/m4/* /usr/share/aclocal \
    && rm -rf /tmp/autoconf-archive

# NNG repo is not frequently tagged so it's pinned to a commit hash.
# This commit provides fix to the proxy-reconnect
# bug that we identified:  https://github.com/nanomsg/nng/issues/970
RUN cd /tmp \
    && git clone https://github.com/nanomsg/nng.git \
    && cd nng \
    && git checkout e618abf8f3db2a94269a79c8901a51148d48fcc2 \
    && mkdir build \
    && cd build \
    && cmake -DBUILD_SHARED_LIBS=1 -G Ninja .. \
    && ninja \
    && ninja install

# MCDLOG, version is pinned
RUN cd /tmp \
   && git clone --branch v0.0.4 https://gerrit.o-ran-sc.org/r/com/log \
   && cd log \
   && ./autogen.sh \
   && ./configure \
   && make \
   && make install

# RMR, version is pinned
RUN cd /tmp \
    && git clone --branch 1.3.0 https://gerrit.o-ran-sc.org/r/ric-plt/lib/rmr \
    && cd rmr \
    && mkdir build \
    && cd build \
    && cmake .. \
    && make install
