###
### BUILD1 STAGE
###
FROM ubuntu:18.04 AS build-boost-stage
WORKDIR /home/molecuilder

# add all packages for boost
RUN apt-get update && apt-get install -y \
        bzip2 \
        cmake \
        g++ \
        git \
        libbz2-dev \
        libgsl0-dev \
        libblas-dev \
        libpython3-dev \
        libcppunit-dev \
	python3-dev \
	python3-numpy \
        wget \
&& rm -rf /var/lib/apt-get/lists/*
# link pyconfig-config as it's used by both boost's bootstrap and boost.m4 to find python
# RUN ln -s /usr/bin/python3.6-config /usr/bin/python-config

# compile boost libs
ADD boost_1_69_0.tar.bz2 .
RUN (cd boost_1_69_0 && \
        echo "# Configure specific Python version.\nusing python : 3.6m : /usr/bin/python3.6m : /usr/include/python3.6m : /usr/lib/x86_64-linux-gnu ;\n\nusing mpi ;" >user-config.jam && \
        ./bootstrap.sh && \
	./b2 \
		-j8 \
		--build-type=complete \
		--build-dir=build64 \
		--layout=tagged \
		--prefix=/home/molecuilder/_pkgs/boost-1.69 \
		--user-config=user-config.jam \
		variant=release \
		threading=multi \
		install)
RUN rm -rf boost_1_69_0.tar.bz2

# build molecuilder
###
### BUILD2 STAGE
###
FROM ubuntu:18.04 as build-molecuilder-stage
WORKDIR /home/molecuilder
ENV MOLECUILDER_VERSION 1.7.1

# copy build boost
COPY --from=build-boost-stage /home/molecuilder/_pkgs /home/molecuilder/_pkgs

# add all packages for boost
RUN apt-get update && apt-get install -y \
        bzip2 \
        cmake \
        g++ \
        git \
        libbz2-dev \
        libgsl0-dev \
        libblas-dev \
        libpython3-dev \
        libcppunit-dev \
	python3-dev \
        wget \
&& rm -rf /var/lib/apt-get/lists/*
# link pyconfig-config as it's used by both boost's bootstrap and boost.m4 to find python
RUN ln -s /usr/bin/python3.6-config /usr/bin/python-config
RUN ln -s /home/molecuilder/_pkgs/boost-1.69/lib/libboost_python36-mt-x64.so /home/molecuilder/_pkgs/boost-1.69/lib/libboost_python-mt-x64.so
RUN ln -s /home/molecuilder/_pkgs/boost-1.69/lib/libboost_numpy36-mt-x64.so /home/molecuilder/_pkgs/boost-1.69/lib/libboost_numpy3-mt-x64.so

ENV ARCHIVE molecuilder-1.7.1.tar.bz2
COPY dependencies_ubuntu18_04.txt .
RUN apt-get update && apt-get install -y \
    `cat dependencies_ubuntu18_04.txt` \
&& rm -rf /var/lib/apt-get/lists/*
# update locate db, otherwise pyconfig.h is not found
RUN updatedb
COPY libqt4-3d*.deb ./
RUN dpkg -i libqt4-3d-dev_1.0-tp2_amd64.deb libqt4-3d_1.0-tp2_amd64.deb
COPY $ARCHIVE .
#RUN (GIT_SSL_NO_VERIFY=true git clone -b stable https://molecuilder.t3m4.net/git/molecuilder.git molecuilder && \
#RUN (cd molecuilder && \
#	git checkout v$MOLECUILDER_VERSION && \
#       ./bootstrap)
RUN (cp `basename $ARCHIVE` `basename $ARCHIVE | sed -e "s#-#_#" -e "s#\(\.tar\.${suffix}\)#.orig\1#"`)
RUN ( tar -jxvf $ARCHIVE && \
	cd molecuilder-1.7.1 && \
	mkdir -p build64 && \
	cd build64 && \
	../configure \
		-C \
		'PKG_CONFIG_PATH=' \
		'BOOST_PYTHON_CONFIG=/usr/bin/python3-config' \
		'--with-boost=/home/molecuilder/_pkgs/boost-1.69' \
		'--enable-jobmarket' \
		'--enable-python' \
		'--enable-qtgui' \
		'--disable-qwt' \
		'--enable-vmg' \
		'--with-vmg-mpi' \
		'--enable-levmar' \
		'--disable-valgrind' \
		'--enable-action-thread' \
		'--disable-debug' \
		'CXXFLAGS=-Wall -g0 -O3' \
		'CXX=mpic++' 'CC=mpicc' 'FC=mpif90' \
		'--disable-qtgui-capture-log' \
		'--with-default-parallel=none' \
		'PYTHON=/usr/bin/python3' \
                'QT_CFLAGS=-I/usr/share/qt4/include -I/usr/share/qt4/include/Qt -I/usr/share/qt4/include/QtCore -I/usr/share/qt4/include/QtGui' \
		'QT_LDFLAGS=-L/usr/lib/x86_64-linux-gnu -L/usr/lib' \
		'QT_LIBS=-lQtCore -lQtGui -lQtOpenGL -lQt3D' \
		'--prefix=/home/molecuilder/_pkgs/molecuilder-1.7.1')
RUN (cd molecuilder-1.7.1/build64 && \
	make -j8 && \
	make install)
#RUN (cd molecuilder-1.7.1/ && \
#	debuild -j6 -ub -uc)
#RUN mv molecuilder-1.7.1/build64/*.deb . && \
#	rm -rf molecuilder

###
### DEPLOY STAGE
###
FROM ubuntu:18.04
WORKDIR /home/molecuilder

RUN apt-get -y update && apt-get install -y \
	iproute2 \
	libblas3 \
	libgfortran3 \
	libglvnd0 \
	libgsl23 \ 
	liblapack3 \
	libopenmpi-dev \
	libpython3.6-minimal \
	libqt4-opengl \
	libqtcore4 \
	libqtgui4 \
	libqwt5-qt4 \
	mpi-default-bin \
	openmpi-bin \
	openmpi-common \
	python3 \
	python3-pip \
	units \
	mesa-utils \
	libgl1-mesa-glx
COPY --from=build-molecuilder-stage /home/molecuilder/_pkgs ./_pkgs
COPY libqt4-3d_1.0-tp2_amd64.deb /tmp
COPY run_poolworker.sh /tmp
RUN dpkg -i /tmp/libqt4-3d_1.0-tp2_amd64.deb && \
	rm -f /tmp/libqt4-3d_1.0-tp2_amd64.deb
ENV OMPI_MCA_plm_rsh_agent /bin/false
ENV PATH "$PATH:/home/molecuilder/_pkgs/molecuilder-1.7.1"

# install for taking screenshots
RUN /usr/bin/python3 -m pip install pyscreenshot
RUN apt-get -y update && DEBIAN_FRONTEND=noninteractive TZ="Europe/Amsterdam" apt-get -y install tzdata
RUN apt -y install libjpeg9-dev zlibc zlib1g-dev gnome-screenshot python3-tk
RUN /usr/bin/python3 -m pip install pyautogui

RUN mkdir -p /tmp/molecuilder

# allow OpenGL to work in dockerized container (start with --privileged)
ENV NVIDIA_DRIVER_CAPABILITIES all
ENV QT_X11_NO_MITSHM=1
EnV LIBGL_ALWAYS_INDIRECT=1
