#
# 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 curl -O -L https://github.com/apache/logging-log4cxx/archive/v0.11.0.tar.gz && \
    tar xvfz v0.11.0.tar.gz && \
    cd logging-log4cxx-0.11.0 && \
    ./autogen.sh && \
    CXXFLAGS=-fPIC ./configure && \
    make && make install && \
    rm -rf /v0.11.0.tar.gz /logging-log4cxx-0.11.0

# 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 && \
    CXXFLAGS="-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 /
