# Copyright (c) 2009, 2025, Oracle and/or its affiliates.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0, as
# published by the Free Software Foundation.
#
# This program is designed to work with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation. The authors of MySQL hereby grant you an
# additional permission to link the program and your derivative works
# with the separately licensed software that they have either included with
# the program or referenced in the documentation.
#
# Without limiting anything contained in the foregoing, this file,
# which is part of MySQL Connector/Python, is also subject to the
# Universal FOSS Exception, version 1.0, a copy of which can be found at
# http://oss.oracle.com/licenses/universal-foss-exception.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License, version 2.0, for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA

# By default the container will use oracle linux 10 from OCR.
# The BASE_IMAGE environment variable can be used to pull
# any other Oracle Linux image from any other Docker registry.
ARG BASE_IMAGE=container-registry.oracle.com/os/oraclelinux:10-slim


FROM ${BASE_IMAGE} as pure_python
# In order to be able to run the tests within a private network,
# optional proxy configurations can be used.
ARG HTTP_PROXY
ARG HTTPS_PROXY
ARG NO_PROXY
ENV HTTP_PROXY=${HTTP_PROXY} HTTPS_PROXY=${HTTPS_PROXY} NO_PROXY=${NO_PROXY}
WORKDIR /connector-python
RUN microdnf install -y dnf \
    && dnf install -y gcc-c++
# Install Python (including dev files), and create a virtual environment
RUN dnf -y install python3-pip python3-devel python3-setuptools
RUN python3 -m venv /pyenvs/venv
ENV PATH="/pyenvs/venv/bin:$PATH"
RUN pip install --upgrade setuptools
# This volume can be used to share, among other things,
# the Unix socket file with the container.
VOLUME [ "/shared" ]
# Providing a private PyPI repository is allowed
# [PIP_INDEX_URL]: https://wiki.onap.org/display/DW/Configure+and+customize+pip
ARG PYPI_REPOSITORY
ENV PIP_INDEX_URL=${PYPI_REPOSITORY:-https://pypi.org/simple}
# Install MySQL Connector/Python (python only)
COPY . .
RUN cd mysqlx-connector-python \
    && pip install -r tests/requirements.txt \
    && pip install .


FROM pure_python AS c_extension
RUN dnf install -y git cmake
RUN mkdir /tools /install
ENV DIR_CONNECTOR=/connector-python
ENV DIR_TOOLS=/tools
ENV DIR_INSTALL=/install
# Abseil: https://github.com/abseil/abseil-cpp
# Install Protobuf C++: https://github.com/protocolbuffers/protobuf
ENV ABSEIL_VERSION="20230802.1"
ENV PROTOBUF_VERSION="v5.29.4"
RUN cd $DIR_TOOLS \
    && git clone --branch ${PROTOBUF_VERSION} https://github.com/protocolbuffers/protobuf.git \
    && cd protobuf/third_party \
    && git clone --branch ${ABSEIL_VERSION} https://github.com/abseil/abseil-cpp.git \
    && cd .. \
    && cmake . -DCMAKE_CXX_STANDARD=14 \
                -Dprotobuf_BUILD_TESTS=OFF \
                -Dprotobuf_ABSL_PROVIDER=module \
                -DCMAKE_PREFIX_PATH=${DIR_TOOLS}/protobuf \
                -DCMAKE_INSTALL_PREFIX=${DIR_INSTALL}/protobuf \
                -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
                -Dprotobuf_MSVC_STATIC_RUNTIME=OFF \
    && make -j$(nproc) \
    && make install
# Build protobuf cext
RUN rm -rf ${DIR_TOOLS} \
    && cd ${DIR_CONNECTOR} \
    && cd mysqlx-connector-python \
    && python setup.py install --with-protobuf-include-dir=${DIR_INSTALL}/protobuf/include \
                               --with-protobuf-lib-dir=${DIR_INSTALL}/protobuf/lib64 \
                               --with-protoc=${DIR_INSTALL}/protobuf/bin/protoc
