FROM ubuntu:18.04


RUN apt-get -y install apt-transport-https

RUN apt-get -y update

RUN apt-get -y install git wget xz-utils build-essential \
                       curl libcap-dev \
                       cmake libncurses5-dev libboost-all-dev \
                       libexplain-dev \
                       gcc-5-multilib \
                       g++-5-multilib

RUN apt-get install -y autoconf


RUN apt-get install software-properties-common -y --no-install-recommends

# need GCC-4.8 or GCC-5

WORKDIR /PROPHET
RUN mkdir -p /PROPHET

COPY patches /PROPHET/patches

ENV GCC_VERS=5


RUN mkdir llvm-3.6.2 

WORKDIR /PROPHET/llvm-3.6.2

RUN \
 wget https://releases.llvm.org/3.6.2/llvm-3.6.2.src.tar.xz \
 && tar xf llvm-3.6.2.src.tar.xz 

RUN mv llvm-3.6.2.src llvm 

RUN cat /PROPHET/patches/llvm.patch
RUN patch -f -s -p0  < /PROPHET/patches/llvm.patch 

RUN \
 wget https://releases.llvm.org/3.6.2/cfe-3.6.2.src.tar.xz \
 && tar xf cfe-3.6.2.src.tar.xz \
 && mv cfe-3.6.2.src llvm/tools/clang  \
 && ln -sf llvm/tools/clang cfe 

RUN \
 wget https://releases.llvm.org/3.6.2/compiler-rt-3.6.2.src.tar.xz \
 && tar xf compiler-rt-3.6.2.src.tar.xz \
 && mv compiler-rt-3.6.2.src llvm/projects/compiler-rt  \
 && ln -sf llvm/projects/compiler-rt compiler-rt 

RUN mkdir build 

WORKDIR /PROPHET/llvm-3.6.2/build
RUN cmake \
	 -DLLVM_ENABLE_PROJECTS="all" \
	 -DCMAKE_C_COMPILER="gcc-$GCC_VERS" \
	 -DCMAKE_CXX_COMPILER="g++-$GCC_VERS" \
	 -DCMAKE_INSTALL_PREFIX=$(realpath ../tools) \
	 -DCMAKE_C_FLAGS=" -Wno-unused-function " \
	 -DCMAKE_CXX_FLAGS=" -Wno-unused-function "  \
	 -DCMAKE_CPP_FLAGS=" -Wno-unused-function " \
	 ../llvm/
RUN make 
RUN make clang
RUN make compiler-rt
RUN make install 

ENV LLVM_36_DIR=/PROPHET/llvm-3.6.2/tools
ENV PATH="${PATH}:${LLVM_36_DIR}/bin"

RUN echo "export PATH=\$PATH:/PROPHET/llvm-3.6.2/tools/bin" > /PROPHET/prophet_setup.bash

WORKDIR /PROPHET
RUN \
 mkdir prophet \
 && cp -r /PROPHET/patches/prophet prophet/patches 


 # please read fanl's README.html
 #  http://www.cs.toronto.edu/~fanl/program_repair/prophet-rep/README.html 
 # pre-requisites:
 #  + llvm-3.6.2
 #  + gcc<=4.9
WORKDIR /PROPHET/prophet

RUN \
  wget http://www.cs.toronto.edu/~fanl/program_repair/prophet-rep/prophet-0.1-src.tar.gz 

RUN tar -xvzf prophet-0.1-src.tar.gz > /dev/null 

# NEED TO APPLY PATCHES HERE
RUN ls 
RUN pwd 
RUN \
    for i in $(find /PROPHET/prophet/patches -type f -name "*.patch") ; do \
        f=$(echo $i | perl -p -e's#^.*patches/##;s#\.patch##'); \
        patch $f $i ; \
    done

RUN \
 perl -pi -e's/-Werror(\s*)/-Wno-unused-function$1/' prophet-gpl/configure.ac prophet-gpl/src/Makefile.am


WORKDIR /PROPHET/prophet/prophet-gpl
ENV FLAGS=' -Wno-unused-function -g -O2 -fno-rtti' 


RUN ls ${LLVM_36_DIR}/bin
# source /PROPHET/prophet_setup.bash 
RUN \
 autoreconf --install \
 &&  CC=gcc-$GCC_VERS CXX=g++-$GCC_VERS ./configure -v --with-sysroot=/usr/lib/gcc/x86_64-linux-gnu/$GCC_VERS \
         CFLAGS="$FLAGS" CPPFLAGS="$FLAGS" CXXFLAGS="$FLAGS" \
 && make src wrap include

RUN cd src && make 
RUN cd wrap && make 
RUN cd include && make 

ENV PROPHET64_BASE=/PROPHET/prophet/prophet-gpl
RUN echo "export PROPHET64_BASE=${PROPHET64_BASE}" >> /PROPHET/prophet_setup.bash

WORKDIR /PROPHET
