# docker build --build-arg BASE_IMAGE=${VARIABLE_NAME} --build-arg TEST_COVERAGE=yes/no --build-arg PYTHON_COVERAGE=${COVERAGE_EXECUTABLE} -f DOCKERFILE . -t IMAGE_NAME .

# BUILD CIG DEPENDENCIES ----------
ARG BASE_IMAGE
from ${BASE_IMAGE} as base
ARG REPO_DIR=.
ARG TEST_COVERAGE=no
ARG PYTHON_COVERAGE=coverage3
ENV TEST_COVERAGE=${TEST_COVERAGE} PYTHON_COVERAGE=${PYTHON_COVERAGE} 
ENV HWLOC_HIDE_ERRORS=2

LABEL maintainer="Brad Aagaard <baagaard@usgs.gov>"

USER ${TEST_USER}

# ------------------------------------------------------------------------------
# Pythia
# ------------------------------------------------------------------------------
ENV  src_dir=${TOPSRC_DIR}/pythia  build_dir=${TOPBUILD_DIR}/pythia

RUN git clone --depth 1 --recursive https://github.com/geodynamics/pythia.git ${src_dir}
WORKDIR ${src_dir}
RUN autoreconf --install --verbose && \
    mkdir -p ${build_dir}

WORKDIR ${build_dir}
RUN ${src_dir}/configure --enable-testing --prefix=${INSTALL_DIR} CPPFLAGS=-I${INSTALL_DIR}/include LDFLAGS="-L${INSTALL_DIR}/lib -L${INSTALL_DIR}/lib64" && make && make install && make check VERBOSE=1


# ------------------------------------------------------------------------------
# Install spatialdata
# ------------------------------------------------------------------------------
ENV  src_dir=${TOPSRC_DIR}/spatialdata  build_dir=${TOPBUILD_DIR}/spatialdata

RUN git clone --depth 50 --recursive https://github.com/geodynamics/spatialdata.git ${src_dir}
WORKDIR ${src_dir}
RUN autoreconf --install --verbose && \
    mkdir -p ${build_dir}

WORKDIR ${build_dir}
RUN ${src_dir}/configure --enable-testing --enable-swig --prefix=${INSTALL_DIR} CPPFLAGS="-I${INSTALL_DIR}/include" LDFLAGS="-L${INSTALL_DIR}/lib -L${INSTALL_DIR}/lib64" CXXFLAGS="-g -O" && make -j$(nproc) && make install && make check -j$(nproc) VERBOSE=1


# ------------------------------------------------------------------------------
# Install PETSc
# ------------------------------------------------------------------------------
ENV PETSC_DIR=${INSTALL_DIR}/petsc  PETSC_ARCH=arch-pylith

RUN git clone --branch knepley/pylith --single-branch https://gitlab.com/petsc/petsc.git ${PETSC_DIR}
WORKDIR ${PETSC_DIR}

RUN python3 ./configure --download-parmetis=1 --download-metis=1 --download-ml=1 --download-f2cblaslapack=1 --with-hdf5=1 --with-hdf5-include=${HDF5_INCDIR} --with-hdf5-lib=${HDF5_LIBDIR}/libhdf5.so --with-zlib=1 --LIBS=-lz --with-debugging=1 --with-fc=0 --with-64-bit-points=1 --with-large-file-io=1 CPPFLAGS="-I${INSTALL_DIR}/include" LDFLAGS="-L${INSTALL_DIR}/lib" CFLAGS="-g -O" && make -j$(nproc) && make check


# ------------------------------------------------------------------------------
# Install pylith
# ------------------------------------------------------------------------------
from base as src

ENV  src_dir=${TOPSRC_DIR}/pylith  build_dir=${TOPBUILD_DIR}/pylith

COPY --chown=pylith-tester:pylith-tester ${REPO_DIR} ${src_dir}
WORKDIR ${src_dir}
RUN autoreconf --install --verbose --force && \
    mkdir -p ${build_dir}

WORKDIR ${build_dir}
RUN ${src_dir}/configure --prefix=${INSTALL_DIR} --enable-hdf5 --enable-cubit --enable-testing --enable-swig --enable-test-coverage=${TEST_COVERAGE} --with-python-coverage=${PYTHON_COVERAGE} CPPFLAGS="-I${INSTALL_DIR}/include -I${HDF5_INCDIR}" LDFLAGS="-L${INSTALL_DIR}/lib -L${INSTALL_DIR}/lib64 -L${HDF5_LIBDIR} --coverage" CXXFLAGS="-g -O --coverage" CC=mpicc CXX=mpicxx

# ----------------------------------------
from src as build
RUN make -j$(nproc) install && make dist


WORKDIR ${src_dir}

# ----------------------------------------
from build as test

WORKDIR ${build_dir}
RUN make clean-coverage && make -j$(nproc) check VERBOSE=1 -C tests/libtests && make coverage-libtests
RUN make clean-coverage && make -j$(nproc) check VERBOSE=1 -C tests/mmstests && make coverage-mmstests
RUN make check VERBOSE=1 -C tests/pytests && make coverage-pytests
RUN make clean-coverage && make check VERBOSE=1 -C tests/fullscale && make coverage-fullscale

CMD /bin/bash
