# ============================================================================
# Copyright 2017-2025, Schlumberger
#
# Licensed 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.
# ============================================================================

# ====================================================================================
# INITIAL STEPS
# ====================================================================================

# base image
FROM ubuntu:24.04 AS dev

# build as root
USER 0

# install required build tools via packet manager
RUN apt-get -y update && apt-get -y install \
    cmake \
    g++ \
    git \
    liblzma-dev \
    libtool \
    pkgconf \
    python3 \
    python3-pip \
    python3-setuptools \
    uuid-dev \
    wget \
    zlib1g-dev \
    libpsl-dev \
    libbrotli-dev \
    libzstd-dev \
    libnghttp2-dev \
    libidn2-dev

# temporary working directory
WORKDIR /tmp

ARG WGET="wget --quiet"

# ====================================================================================
# if we want to avoid adding shared libraries as depdendencies (since in linux most of them export all their symbols)
# we need to see if static libraries with Position Indepdent Code are built (aka, .a that can be used to build .so later on)
#
# the analysis is done with :
#  for slib in /usr/local/lib*/*.a; do echo $slib; readelf --relocs ${slib} | egrep -c '(GOT|PLT|JUMP_SLO)'; done
#
# aka : for all archives, read relocations, see if they are pointing to the global offset table,
#       the procedure linkage table or are calls to shared libraries ( jump )
#       not quite sure this is exhaustive as this indicates _some relocatable code present_
#       not absence of relocations without indirections.
#
# otherwise we'd have to play with visibiliy at library build time, linker version scripts etc.
# ====================================================================================

RUN echo "{" > /versions.json

# ====================================================================================
# OPENSSL (1.1.1w)
# ====================================================================================

FROM dev AS openssl-dev

ARG LIBRARIES_INSTALL_PATH=/usr/local
ARG KEEP_DEPENDENCIES=false
ARG LIB_OPENSSL_VERSION=1.1.1w

RUN ${WGET} https://www.openssl.org/source/openssl-${LIB_OPENSSL_VERSION}.tar.gz \
    && tar -zxvf openssl-${LIB_OPENSSL_VERSION}.tar.gz \
    && cd openssl-${LIB_OPENSSL_VERSION} \
    && ./config --prefix=${LIBRARIES_INSTALL_PATH} no-shared \
    && make -j $(nproc) \
    && make install_sw \
    && cd .. \
    && if [ "${KEEP_DEPENDENCIES}" = "false" ]; then \
            rm -rf openssl-${LIB_OPENSSL_VERSION}.tar.gz \
            openssl-${LIB_OPENSSL_VERSION}; \
        fi \
    && ldconfig

RUN echo " \"openssl\": { \"version\" : \"${LIB_OPENSSL_VERSION}\", \"url\" : \"https://www.openssl.org/\" }," >> /versions.json

# ====================================================================================
# CARES (1.20.1)
# ====================================================================================

FROM openssl-dev AS cares-dev

ARG LIBRARIES_INSTALL_PATH=/usr/local
ARG KEEP_DEPENDENCIES=false
ARG LIB_C_ARES_VERSION=1_20_1

RUN ${WGET} --no-check-certificate -q https://github.com/c-ares/c-ares/archive/cares-${LIB_C_ARES_VERSION}.tar.gz \
    && tar -xf cares-${LIB_C_ARES_VERSION}.tar.gz \
    && cmake \
        -DCMAKE_BUILD_TYPE=Release \
        -DCMAKE_INSTALL_PREFIX=${LIBRARIES_INSTALL_PATH} \
        -DCARES_STATIC=ON \
        -DCARES_SHARED=OFF \
        -DCARES_STATIC_PIC=ON \
        -Hc-ares-cares-${LIB_C_ARES_VERSION} \
        -Bc-ares-cares-${LIB_C_ARES_VERSION}/cmake-out \
    && cmake \
        --build c-ares-cares-${LIB_C_ARES_VERSION}/cmake-out \
        --target install -- -j $( nproc ) \
    && if [ "${KEEP_DEPENDENCIES}" = "false" ]; then \
            rm -rf cares-${LIB_C_ARES_VERSION}.tar.gz \
            c-ares-cares-${LIB_C_ARES_VERSION}; \
        fi \
    && ldconfig

RUN echo " \"c_ares\": { \"version\" : \"${LIB_C_ARES_VERSION}\", \"url\" : \"https://github.com/c-ares/c-ares\" }," >> /versions.json

# ====================================================================================
# CURL (8.12.0)
# ====================================================================================

FROM cares-dev AS curl-dev

ARG LIBRARIES_INSTALL_PATH=/usr/local
ARG KEEP_DEPENDENCIES=false
ARG LIB_CURL_VERSION=8.12.0

RUN git clone --depth 1 -b curl-$(echo "$LIB_CURL_VERSION" | tr . _) https://github.com/curl/curl.git curl --recursive \
    && cd curl \
    && mkdir build \
    && cd build \
    && cmake \
        -DCMAKE_BUILD_TYPE=Release \
        -DCMAKE_INSTALL_PREFIX=${LIBRARIES_INSTALL_PATH} \
        -DBUILD_SHARED_LIBS=OFF \
        -DCMAKE_POSITION_INDEPENDENT_CODE=ON .. \
        -DENABLE_ARES=ON \
        -DZLIB_USE_STATIC_LIBS=ON \
        -DCMAKE_FIND_DEBUG_MODE=FALSE \
        -DOPENSSL_USE_STATIC_LIBS=ON \
    && make -j $(nproc) \
    && make install \
    && perl -pi -e 's@ -lcurl @ \${libdir}/libcurl.a @g' ${LIBRARIES_INSTALL_PATH}/lib/pkgconfig/libcurl.pc \
    && echo "Requires: libcares openssl zlib" >> ${LIBRARIES_INSTALL_PATH}/lib/pkgconfig/libcurl.pc \
    && cat ${LIBRARIES_INSTALL_PATH}/lib/pkgconfig/libcurl.pc \
    && cd ../.. \
    && if [ "${KEEP_DEPENDENCIES}" = "false" ]; then \
            rm -rf curl; \
        fi \
    && ldconfig

RUN echo " \"curl\": { \"version\" : \"${LIB_CURL_VERSION}\", \"url\" : \"https://github.com/curl/curl\" }," >> /versions.json

# ====================================================================================
# AZURE C SHARED UTILITY (LTS_07_2020_Ref02)
# ====================================================================================

FROM curl-dev AS azure-c-shared-utility-dev

ARG LIBRARIES_INSTALL_PATH=/usr/local
ARG KEEP_DEPENDENCIES=false
ARG AZURE_C_SHARED_UTILITY_VERSION=LTS_07_2020_Ref02

COPY patches/azure-c-shared-utility-${AZURE_C_SHARED_UTILITY_VERSION}.patch /tmp
RUN git clone --recursive -b ${AZURE_C_SHARED_UTILITY_VERSION} https://github.com/Azure/azure-c-shared-utility  \
    && cd azure-c-shared-utility \
    && git apply /tmp/azure-c-shared-utility-${AZURE_C_SHARED_UTILITY_VERSION}.patch \
    && rm /tmp/azure-c-shared-utility-${AZURE_C_SHARED_UTILITY_VERSION}.patch \
    && env PKG_CONFIG_PATH=${LIBRARIES_INSTALL_PATH}/lib/pkgconfig \
      cmake \
        -DCMAKE_PREFIX_PATH="${LIBRARIES_INSTALL_PATH}/lib/cmake" \
        -DCMAKE_BUILD_TYPE=Release \
        -DBUILD_SHARED_LIBS:BOOL=NO \
        -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON \
        -DCMAKE_CXX_STANDARD=17 \
        -DCMAKE_CXX_STANDARD_REQUIRED=ON \
        -DCMAKE_CXX_EXTENSIONS=OFF \
        -DCMAKE_C_FLAGS="-DCURL_STATICLIB -DCARES_STATICLIB" \
        -DOPENSSL_USE_STATIC_LIBS=ON \
        -DZLIB_USE_STATIC_LIBS=ON \
        -DCMAKE_FIND_DEBUG_MODE=OFF \
        -Dskip_samples=OFF \
        -Duse_c_ares=ON \
        -DZLIB_ROOT=${LIBRARIES_INSTALL_PATH} \
        -H. -Bcmake-out \
    && cmake --build cmake-out --target install -- -j $(nproc) \
    && cd .. \
    && if [ "${KEEP_DEPENDENCIES}" = "false" ]; then \
            rm -rf azure-c-shared-utility; \
        fi \
    && ldconfig

RUN echo " \"azure_c_shared_utility\": { \"version\" : \"${AZURE_C_SHARED_UTILITY_VERSION}\", \"url\" : \"https://github.com/Azure/azure-c-shared-utility\" }," >> /versions.json

# ====================================================================================
# AZURE UAMQP C (8.4.0)
# ====================================================================================

FROM azure-c-shared-utility-dev AS azure-uamqp-c-dev

ARG LIBRARIES_INSTALL_PATH=/usr/local
ARG KEEP_DEPENDENCIES=false
ARG UAMQP_SHORT_VERSION=9c8c180
ARG UAMQP_VERSION=9c8c1805fac797e2d14a32ff6a7d9756a5ee82e1

COPY patches/azure-uamqp-c-9c8c180.patch /tmp/
COPY patches/safe_math.h ${LIBRARIES_INSTALL_PATH}/include/azureiot/azure_c_shared_utility
RUN git clone https://github.com/Azure/azure-uamqp-c \
    && cd azure-uamqp-c \
    && git checkout ${UAMQP_VERSION} \
    && patch -p0 < /tmp/azure-uamqp-c-${UAMQP_SHORT_VERSION}.patch \
    && rm -rf /tmp/azure-uamqp-c-${UAMQP_SHORT_VERSION}.patch \
    && env PKG_CONFIG_PATH=${LIBRARIES_INSTALL_PATH}/lib/pkgconfig:${LIBRARIES_INSTALL_PATH}/lib64/pkgconfig \
    && cmake \
        -DCMAKE_PREFIX_PATH="${LIBRARIES_INSTALL_PATH}/lib64/cmake;${LIBRARIES_INSTALL_PATH}/lib/cmake" \
        -DCMAKE_BUILD_TYPE=Release \
        -DBUILD_SHARED_LIBS:BOOL=NO \
        -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON \
        -DCMAKE_CXX_STANDARD=17 \
        -DCMAKE_CXX_STANDARD_REQUIRED=ON \
        -DCMAKE_CXX_EXTENSIONS=OFF \
        -DSHARED_UTIL_FOLDER="${LIBRARIES_INSTALL_PATH}/cmake"  \
        -DOPENSSL_USE_STATIC_LIBS=ON \
        -H. -Bcmake-out \
    &&  cmake --build cmake-out --target install -- -j $(nproc) \
    && cd .. \
    && if [ "${KEEP_DEPENDENCIES}" = "false" ]; then \
            rm -rf azure-uamqp-c; \
        fi \
    && ldconfig

RUN echo " \"azure_uamqp_c\": { \"version\" : \"${UAMQP_VERSION}\", \"url\" : \"https://github.com/Azure/azure-uamqp-c\" }," >> /versions.json

# ====================================================================================
# ABSEIL (20240722.0 )
# ====================================================================================

FROM azure-c-shared-utility-dev AS abseil-dev

ARG LIBRARIES_INSTALL_PATH=/usr/local
ARG KEEP_DEPENDENCIES=false
ARG ABSEIL_VERSION=20240722.0

RUN ${WGET} https://github.com/abseil/abseil-cpp/releases/download/${ABSEIL_VERSION}/abseil-cpp-${ABSEIL_VERSION}.tar.gz \
    && tar -zxvf abseil-cpp-${ABSEIL_VERSION}.tar.gz \
    && cd abseil-cpp-${ABSEIL_VERSION} \
    && cmake \
        -DCMAKE_CXX_STANDARD=17 \
        -DCMAKE_BUILD_TYPE=Release \
        -DCMAKE_INSTALL_PREFIX=/usr/local \
        -DBUILD_TESTING=OFF \
        -DBUILD_SHARED_LIBS=NO \
        -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
        -DABSL_PROPAGATE_CXX_STD=ON \
        -H. -Bcmake-out \
    && cmake --build cmake-out --target install -- -j $(nproc) \
    && cd .. \
    && if [ "${KEEP_DEPENDENCIES}" = "false" ]; then \
            rm -rf abseil-cpp-${ABSEIL_VERSION} \
            abseil-cpp-${ABSEIL_VERSION}.tar.gz; \
        fi \
    && ldconfig

RUN echo " \"abseil_cpp\": { \"version\" : \"${ABSEIL_VERSION}\", \"url\" : \"https://github.com/abseil/abseil-cpp/archive/${ABSEIL_VERSION}.tar.gz\" }," >> /versions.json

# ====================================================================================
# OPENTELEMETRY (1.16.1)
# ====================================================================================

FROM abseil-dev AS opentelemetry-cpp-dev

ARG LIBRARIES_INSTALL_PATH=/usr/local
ARG KEEP_DEPENDENCIES=false
ARG OTEL_CPP_VERSION=1.16.1

RUN curl -sL https://github.com/open-telemetry/opentelemetry-cpp/archive/refs/tags/v${OTEL_CPP_VERSION}.tar.gz -o opentelemetry-cpp-${OTEL_CPP_VERSION}.tar.gz \
    && tar -zxvf opentelemetry-cpp-${OTEL_CPP_VERSION}.tar.gz \
    && cd opentelemetry-cpp-${OTEL_CPP_VERSION} \
    && perl -pi -e 's@find_package\(Threads\)@find_package(Threads)\nfind_package(absl CONFIG REQUIRED)\n@g' cmake/opentelemetry-cpp-config.cmake.in \
    && cmake \
        -DCMAKE_CXX_STANDARD=17 -DCMAKE_CXX_STANDARD_REQUIRED=ON -DCMAKE_CXX_EXTENSIONS=OFF \
        -DCMAKE_BUILD_TYPE=Release \
        -DBUILD_SHARED_LIBS=NO \
        -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
        -DWITH_STL=OFF \
        -DWITH_ABSEIL=YES \
        -DWITH_OTLP_GRPC:BOOL=NO \
        -DWITH_OTLP_HTTP:BOOL=NO \
        -DWITH_ASYNC_EXPORT_PREVIEW:BOOL=YES \
        -DBUILD_TESTING=NO \
        -DCMAKE_FIND_DEBUG_MODE=FALSE \
        -H. -Bcmake-out \
    && cmake --build cmake-out --target install -- -j $(nproc) \
    && cd .. \
    && if [ "${KEEP_DEPENDENCIES}" = "false" ]; then \
            rm -rf opentelemetry-cpp-${OTEL_CPP_VERSION} \
            opentelemetry-cpp-${OTEL_CPP_VERSION}.tar.gz; \
        fi \
    && ldconfig

RUN echo " \"opentelemetry_cpp\": { \"version\" : \"${OTEL_CPP_VERSION}\", \"url\" : \"https://github.com/opentelemetry/opentelemetry-cpp\" }," >> /versions.json

# ====================================================================================
# LIBXML2 (2.12.10)
# ====================================================================================

FROM opentelemetry-cpp-dev AS libxml2-dev

ARG LIBRARIES_INSTALL_PATH=/usr/local
ARG KEEP_DEPENDENCIES=false
ARG LIB_XML2_VERSION=2.12.10

RUN ${WGET} https://github.com/GNOME/libxml2/archive/v${LIB_XML2_VERSION}.tar.gz \
    && tar -zxvf v${LIB_XML2_VERSION}.tar.gz \
    && cd libxml2-${LIB_XML2_VERSION} \
    && env ACLOCAL_PATH=/usr/share/aclocal/ \
    && ./autogen.sh --prefix=${LIBRARIES_INSTALL_PATH} --with-pic --enable-static=yes --enable-shared=no \
    && make -j $(nproc) \
    && make install \
    && cd .. \
    && if [ "${KEEP_DEPENDENCIES}" = "false" ]; then \
            rm -rf v${LIB_XML2_VERSION}.tar.gz \
            libxml2-${LIB_XML2_VERSION}; \
        fi \
    && ldconfig

RUN echo " \"libxml2\": { \"version\" : \"${LIB_XML2_VERSION}\", \"url\" : \"https://github.com/GNOME/libxml2/archive/v${LIB_XML2_VERSION}.tar.g\" }," >> /versions.json

# ====================================================================================
# AZURE STORAGE FOR CPP (12.10.0)
# ====================================================================================

FROM libxml2-dev AS azure-storage-blobs-dev

ARG LIBRARIES_INSTALL_PATH=/usr/local
ARG KEEP_DEPENDENCIES=false
ARG AZURE_STORAGE_FOR_CPP_VERSION=12.10.0

COPY patches/azure-sdk-for-cpp-azure-storage-blobs_${AZURE_STORAGE_FOR_CPP_VERSION}.patch /tmp/
COPY patches/safe_math.h ${LIBRARIES_INSTALL_PATH}/include/azureiot/azure_c_shared_utility
RUN ${WGET} https://github.com/Azure/azure-sdk-for-cpp/archive/refs/tags/azure-storage-blobs_${AZURE_STORAGE_FOR_CPP_VERSION}.tar.gz \
    && tar -zxvf azure-storage-blobs_${AZURE_STORAGE_FOR_CPP_VERSION}.tar.gz \
    && cd azure-sdk-for-cpp-azure-storage-blobs_${AZURE_STORAGE_FOR_CPP_VERSION} \
    && patch -p0 <  /tmp/azure-sdk-for-cpp-azure-storage-blobs_${AZURE_STORAGE_FOR_CPP_VERSION}.patch \
    && rm /tmp/azure-sdk-for-cpp-azure-storage-blobs_${AZURE_STORAGE_FOR_CPP_VERSION}.patch \
    && env AZURE_SDK_DISABLE_AUTO_VCPKG=ON PKG_CONFIG_PATH=${LIBRARIES_INSTALL_PATH}/lib/pkgconfig: \
      cmake \
      -DCMAKE_PREFIX_PATH="${LIBRARIES_INSTALL_PATH}/lib/cmake;${LIBRARIES_INSTALL_PATH}/cmake" \
      -DCMAKE_CXX_STANDARD=17 \
      -DCMAKE_CXX_STANDARD_REQUIRED=ON \
      -DCMAKE_CXX_FLAGS='-Wno-maybe-uninitialized' \
      -DCMAKE_BUILD_TYPE=Release \
      -DBUILD_SHARED_LIBS:BOOL=NO \
      -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON \
      -DBUILD_TRANSPORT_CURL:BOOL=ON \
      -DOPENSSL_USE_STATIC_LIBS=ON \
      -DZLIB_ROOT=${LIBRARIES_INSTALL_PATH} \
      -H. -Bcmake-out \
    && cmake --build cmake-out --target install -- -j $(nproc) \
    && cd .. \
    && if [ "${KEEP_DEPENDENCIES}" = "false" ]; then \
            rm -rf azure-sdk-for-cpp-azure-storage-blobs_${AZURE_STORAGE_FOR_CPP_VERSION} \
            azure-storage-blobs_${AZURE_STORAGE_FOR_CPP_VERSION}.tar.gz; \
        fi \
    && ldconfig

RUN echo " \"azure_sdk_for_cpp\": { \"version\" : \"${AZURE_STORAGE_FOR_CPP_VERSION}\", \"url\" : \"https://github.com/Azure/azure-sdk-for-cpp\"     }," >> /versions.json

# ====================================================================================
# CRC32C (1.1.2)
# ====================================================================================

FROM azure-storage-blobs-dev AS crc32c-dev

ARG LIBRARIES_INSTALL_PATH=/usr/local
ARG KEEP_DEPENDENCIES=false
ARG CRC32C_VERSION=1.1.2

RUN ${WGET} -O crc32c-${CRC32C_VERSION}.tar.gz https://github.com/google/crc32c/archive/refs/tags/${CRC32C_VERSION}.tar.gz --no-check-certificate \
    && tar -zxvf crc32c-${CRC32C_VERSION}.tar.gz \
    && cd crc32c-${CRC32C_VERSION} \
    && cmake \
        -DCMAKE_BUILD_TYPE=Release \
        -DBUILD_SHARED_LIBS=NO \
        -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
        -DCRC32C_BUILD_TESTS=0 \
        -DCRC32C_BUILD_BENCHMARKS=0 \
        -DCRC32C_USE_GLOG=OFF \
        -H. -Bcmake-out  \
    && cmake --build cmake-out --target install -- -j $(nproc) \
    && cd .. \
    && if [ "${KEEP_DEPENDENCIES}" = "false" ]; then \
            rm -rf crc32c-${CRC32C_VERSION} \
            crc32c-${CRC32C_VERSION}.tar.gz; \
        fi \
    && ldconfig

RUN echo " \"crc32c\": { \"version\" : \"${CRC32C_VERSION}\", \"url\" : \"https://github.com/google/crc32c\" }," >> /versions.json

# ====================================================================================
# AWS SDK (1.11.381)
# ====================================================================================

FROM crc32c-dev AS aws-sdk-cpp-dev

ARG LIBRARIES_INSTALL_PATH=/usr/local
ARG KEEP_DEPENDENCIES=false
ARG AWS_SDK_CPP_TAG=1.11.381

RUN git clone --recursive https://github.com/aws/aws-sdk-cpp \
    && cd aws-sdk-cpp \
    && git checkout ${AWS_SDK_CPP_TAG} \
    && cmake  \
        -DCMAKE_BUILD_TYPE=Release \
        -DCMAKE_INSTALL_PREFIX=${LIBRARIES_INSTALL_PATH} \
        -DCMAKE_PREFIX_PATH=${LIBRARIES_INSTALL_PATH} \
        -DBUILD_SHARED_LIBS=OFF \
        -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
        -DBUILD_ONLY="s3;transfer" \
        -DENABLE_TESTING=OFF \
        -DCMAKE_CXX_STANDARD=17 \
        -DCMAKE_CXX_STANDARD_REQUIRED=ON \
        -DCMAKE_CXX_EXTENSIONS=OFF \
        -H. -Bcmake-out \
    && cmake --build cmake-out --target install -- -j 16 \
    && cd .. \
    && if [ "${KEEP_DEPENDENCIES}" = "false" ]; then \
            rm -rf aws-sdk-cpp; \
        fi \
    && ldconfig

RUN echo " \"aws_sdk_cpp\": { \"version\" : \"${AWS_SDK_CPP_TAG}\", \"url\" : \"https://github.com/aws/aws-sdk-cpp\"     }," >> /versions.json

ARG CMAKE_BUILD_OPTIONS="--parallel 4 --target install"

## nlohmann/json
ARG NLOHMANN_JSON_VERSION=3.11.3
ARG NLOHMANN_JSON_PREFIX=json-${NLOHMANN_JSON_VERSION}
RUN ${WGET} https://github.com/nlohmann/json/archive/refs/tags/v${NLOHMANN_JSON_VERSION}.tar.gz --output-document ${NLOHMANN_JSON_PREFIX}.tar.gz
RUN tar --extract --file ${NLOHMANN_JSON_PREFIX}.tar.gz
RUN cmake -S ${NLOHMANN_JSON_PREFIX}/ -B ${NLOHMANN_JSON_PREFIX}/build/ \
        -DCMAKE_BUILD_TYPE=Release \
        -DBUILD_SHARED_LIBS=NO \
        -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
        -DJSON_BuildTests=OFF \
    && cmake --build ${NLOHMANN_JSON_PREFIX}/build/ ${CMAKE_BUILD_OPTIONS} \
    && if [ "${KEEP_DEPENDENCIES}" = "false" ]; then \
        rm -rf ${NLOHMANN_JSON_PREFIX}*; \
       fi \
    && ldconfig
RUN echo " \"nlohmann_json\": { \"version\" : \"${NLOHMANN_JSON_VERSION}\", \"url\" : \"https://github.com/nlohmann/json\" }," >> /versions.json

# Google Cloud Platform C++ Client Libraries
ARG GCP_CLIENT_VERSION=2.28.0
ARG GCP_CLIENT_PREFIX=google-cloud-cpp-${GCP_CLIENT_VERSION}
RUN ${WGET} https://github.com/googleapis/google-cloud-cpp/archive/v${GCP_CLIENT_VERSION}.tar.gz --output-document ${GCP_CLIENT_PREFIX}.tar.gz \
    && tar --extract --file ${GCP_CLIENT_PREFIX}.tar.gz
RUN cmake -S ${GCP_CLIENT_PREFIX}/ -B ${GCP_CLIENT_PREFIX}/build/ \
        -DGOOGLE_CLOUD_CPP_ENABLE=storage \
        -DBUILD_TESTING=OFF \
        -DGOOGLE_CLOUD_CPP_WITH_MOCKS=OFF \
        -DGOOGLE_CLOUD_CPP_ENABLE_EXAMPLES=OFF \
        -DBUILD_SHARED_LIBS=NO \
        -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
    && cmake --build ${GCP_CLIENT_PREFIX}/build/ ${CMAKE_BUILD_OPTIONS} \
    && if [ "${KEEP_DEPENDENCIES}" = "false" ]; then \
        rm -rf ${GCP_CLIENT_PREFIX}*; \
        fi \
    && ldconfig    
RUN echo " \"google_cloud_cpp\": { \"version\" : \"${GCP_CLIENT_VERSION}\", \"url\" : \"https://github.com/googleapis/google-cloud-cpp/archive/v${GCP_CLIENT_VERSION}.tar.gz\" }," >> /versions.json

# ====================================================================================
# FINAL STEPS
# ====================================================================================

WORKDIR /
RUN ldconfig /usr/local/lib*
RUN echo "\"end\":\"end\" }" >> /versions.json
RUN perl -pi -e 's/ +/ /g' /versions.json && cat /versions.json
RUN echo 'export PS1="\\[\\e[32m\\]\\w\\[\\e[m\\]\\[\\e[36m\\]-\\[\\e[m\\]\\[\\e[36m\\]\\\\$\\[\\e[m\\] " \n\
alias ll="ls -AlF" \n\
alias h="history" \n\
' >> ~/.bashrc
