# getting a debian base image for the PIPS-IPM++ build
ARG BASE_IMAGE=debian:stable-slim
FROM $BASE_IMAGE

ARG CTEST=false

ENV IN_DOCKER=True

# installing the dependencies for running PIPS-IPM++ and the controller
RUN apt-get update
RUN apt-get install -y --no-install-recommends --no-install-suggests \
      mpich liblapack3 libmumps-5.7 libmetis5 zlib1g python3-minimal && \
      apt-get clean

# build PIPS-IPM++ (mount source from host, so it doesn't need to be copied in) and run test
RUN --mount=type=bind,target=/source \
      apt-get install -y --no-install-recommends --no-install-suggests \
        git cmake make libmpich-dev gcc g++ gfortran liblapack-dev libmetis-dev zlib1g-dev pkgconf libmumps-dev && \
      mkdir /build && \
      cd /build && \
      cmake /source -LA \
         -DWITH_MAKETEST="$CTEST" \
         -DMUMPS_D_LIBRARY=/usr/lib/x86_64-linux-gnu/libdmumps.so \
         -DMUMPS_INCLUDE_DIR=/usr/include \
         -DCMAKE_BUILD_TYPE=Release && \
      make -j4 && \
      make install && \
      (if [ "$CTEST" = "true" ]; then ctest -j4; fi) && \
      rm -r /build && \
      apt-get remove -y git cmake make libmpich-dev gcc g++ gfortran liblapack-dev libmetis-dev zlib1g-dev pkgconf libmumps-dev && \
      apt-get autoremove -y && \
      apt-get clean

# add controller and entrypoint.sh
COPY docker /

# install controller and its dependencies (pipstools, gamspy, etc)
RUN apt-get install -y --no-install-recommends --no-install-suggests git python3-venv && \
   cd /controller/ && \
   python3 -m venv /opt/venv && \
   /opt/venv/bin/python -m ensurepip --upgrade && \
   /opt/venv/bin/python -m pip install --upgrade pip && \
   /opt/venv/bin/pip install .[dev] && \
   /opt/venv/bin/python -m pip cache purge && \
   apt-get remove -y git python3-venv && \
   apt-get autoremove -y && \
   apt-get clean

ENV PATH="/opt/venv/bin:$PATH"

ENTRYPOINT ["/entrypoint.sh"]
CMD ["interactive"]
