#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you 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.
#


FROM quay.io/pypa/manylinux1_x86_64

RUN yum install -y gtest-devel

ARG PYTHON_VERSION
ARG PYTHON_SPEC

ENV PYTHON_VERSION=${PYTHON_VERSION}
ENV PYTHON_SPEC=${PYTHON_SPEC}

ENV PATH="/opt/python/${PYTHON_SPEC}/bin:${PATH}"

RUN ln -s /opt/python/${PYTHON_SPEC}/include/python${PYTHON_VERSION}m /opt/python/${PYTHON_SPEC}/include/python${PYTHON_VERSION}

# Perl (required for building OpenSSL)
RUN curl -O -L https://www.cpan.org/src/5.0/perl-5.10.0.tar.gz && \
    tar xvfz perl-5.10.0.tar.gz && \
    cd perl-5.10.0 && \
    ./configure.gnu --prefix=/usr/local/ && \
    make && make install && \
    rm -rf /perl-5.10.0.tar.gz /perl-5.10.0

####################################
# These dependencies can be found in Ubuntu but they're not compiled with -fPIC,
# so they cannot be statically linked into a shared library
####################################

# ZLib
RUN curl -O -L https://zlib.net/zlib-1.2.11.tar.gz && \
    tar xvfz zlib-1.2.11.tar.gz && \
    cd zlib-1.2.11 && \
    CFLAGS="-fPIC -O3" ./configure && \
    make && make install && \
    rm -rf /zlib-1.2.11.tar.gz /zlib-1.2.11

# Compile OpenSSL
RUN curl -O -L https://github.com/openssl/openssl/archive/OpenSSL_1_1_0j.tar.gz && \
    tar xvfz OpenSSL_1_1_0j.tar.gz && \
    cd openssl-OpenSSL_1_1_0j/ && \
    ./Configure -fPIC --prefix=/usr/local/ssl/ no-shared linux-x86_64 && \
    make && make install && \
    rm -rf /OpenSSL_1_1_0j.tar.gz /openssl-OpenSSL_1_1_0j

# Download and compile boost
RUN curl -O -L https://dl.bintray.com/boostorg/release/1.68.0/source/boost_1_68_0.tar.gz && \
    tar xvfz boost_1_68_0.tar.gz && \
    cd /boost_1_68_0 && \
    ./bootstrap.sh --with-libraries=program_options,filesystem,regex,thread,system,python && \
    ./b2 address-model=64 cxxflags=-fPIC link=static threading=multi variant=release install && \
    rm -rf /boost_1_68_0.tar.gz /boost_1_68_0

# Download and copile protoubf
RUN curl -O -L  https://github.com/google/protobuf/releases/download/v3.3.0/protobuf-cpp-3.3.0.tar.gz && \
    tar xvfz protobuf-cpp-3.3.0.tar.gz && \
    cd protobuf-3.3.0/ && \
    CXXFLAGS=-fPIC ./configure && \
    make && make install && ldconfig && \
    rm -rf /protobuf-cpp-3.3.0.tar.gz /protobuf-3.3.0

# Compile APR
RUN curl -O -L  http://archive.apache.org/dist/apr/apr-1.5.2.tar.gz && \
    tar xvfz apr-1.5.2.tar.gz && \
    cd apr-1.5.2 && \
    CFLAGS=-fPIC CXXFLAGS=-fPIC ./configure && \
    make && make install && \
    rm -rf /apr-1.5.2.tar.gz /apr-1.5.2

# Compile APR-Util
RUN curl -O -L  http://archive.apache.org/dist/apr/apr-util-1.5.4.tar.gz && \
    tar xvfz apr-util-1.5.4.tar.gz && \
    cd apr-util-1.5.4 && \
    CFLAGS=-fPIC CXXFLAGS=-fPIC ./configure -with-apr=/usr/local/apr && \
    make && make install && \
    rm -rf /apr-util-1.5.4.tar.gz /apr-util-1.5.4

# Libtool
RUN curl -L -O https://ftp.gnu.org/gnu/libtool/libtool-2.4.6.tar.gz && \
    tar xvfz libtool-2.4.6.tar.gz && \
    cd libtool-2.4.6 && \
    ./configure && \
    make && make install && \
    rm -rf /libtool-2.4.6.tar.gz /libtool-2.4.6

# Compile log4cxx
RUN git clone https://github.com/apache/logging-log4cxx.git && \
    cd logging-log4cxx && \
    ./autogen.sh && \
    CXXFLAGS=-fPIC ./configure && \
    make && make install && \
    rm -rf /logging-log4cxx

# Compile expat
RUN curl -O -L  https://github.com/libexpat/libexpat/archive/R_2_2_0.tar.gz && \
    tar xfvz R_2_2_0.tar.gz && \
    cd libexpat-R_2_2_0/expat && \
    ./buildconf.sh && \
    CFLAGS=-fPIC CXXFLAGS=-fPIC ./configure  && \
    make && make installlib && \
    rm -rf /R_2_2_0.tar.gz /libexpat-R_2_2_0

RUN curl -O -L https://github.com/Kitware/CMake/archive/v3.12.1.tar.gz && \
    tar xvfz v3.12.1.tar.gz && \
    cd CMake-3.12.1 && \
    ./configure && \
    make && make install && \
    rm -rf /v3.12.1.tar.gz /CMake-3.12.1

# Compile JSON CPP
RUN curl -O -L  https://github.com/open-source-parsers/jsoncpp/archive/1.8.0.tar.gz && \
    tar xvfz 1.8.0.tar.gz && \
    cd jsoncpp-1.8.0 && \
    cmake . -DCMAKE_POSITION_INDEPENDENT_CODE=ON && \
    make && make install && \
    rm -rf /1.8.0.tar.gz /jsoncpp-1.8.0

# LibCurl
RUN curl -O -L  https://github.com/curl/curl/releases/download/curl-7_61_0/curl-7.61.0.tar.gz && \
    tar xvfz curl-7.61.0.tar.gz && \
    cd curl-7.61.0 && \
    CFLAGS=-fPIC ./configure --with-ssl=/usr/local/ssl/ && \
    make && make install && \
    rm -rf /curl-7.61.0.tar.gz /curl-7.61.0

# Zstandard
RUN curl -O -L https://github.com/facebook/zstd/releases/download/v1.3.7/zstd-1.3.7.tar.gz && \
    tar xvfz zstd-1.3.7.tar.gz && \
    cd zstd-1.3.7 && \
    CFLAGS="-fPIC -O3" make -j8 && \
    make install && \
    rm -rf /zstd-1.3.7 /zstd-1.3.7.tar.gz

# Snappy
RUN curl -O -L https://github.com/google/snappy/releases/download/1.1.3/snappy-1.1.3.tar.gz && \
    tar xvfz snappy-1.1.3.tar.gz && \
    cd snappy-1.1.3 && \
    CFLAGS="-fPIC -O3" ./configure && \
    make && make install && \
    rm -rf /snappy-1.1.3 /snappy-1.1.3.tar.gz

RUN pip install twine
RUN pip install fastavro
RUN pip install six
RUN pip install enum34


ENV PYTHON_INCLUDE_DIR /opt/python/${PYTHON_SPEC}/include
ENV PYTHON_LIBRARIES   /opt/python/${PYTHON_SPEC}/lib/python${PYTHON_VERSION}
ENV OPENSSL_ROOT_DIR   /usr/local/ssl/

COPY build-wheel-file-within-docker.sh /
COPY build-client-lib-within-docker.sh /
