# This Dockerfile builds the psycopg2 wheel
# Inputs:
#    - PSYCOPG2_VERSION - Version to build

FROM python:3.9-slim-bullseye as main

LABEL org.opencontainers.image.description="A intermediate image with psycopg2 wheel built"

ARG DEBIAN_FRONTEND=noninteractive

ARG BUILD_PACKAGES="\
  build-essential \
  python3-dev \
  python3-pip \
  # https://www.psycopg.org/docs/install.html#prerequisites
  libpq-dev"

WORKDIR /usr/src

# As this is an base image for a multi-stage final image
# the added size of the install is basically irrelevant

RUN set -eux \
  && apt-get update --quiet \
  && apt-get install --yes --quiet --no-install-recommends $BUILD_PACKAGES \
  && rm -rf /var/lib/apt/lists/* \
  && python3 -m pip install --no-cache-dir --upgrade pip wheel

# Layers after this point change according to required version
# For better caching, seperate the basic installs from
# the building

ARG PSYCOPG2_VERSION

RUN set -eux \
  && echo "Building psycopg2 wheel ${PSYCOPG2_VERSION}" \
  && cd /usr/src \
  && mkdir wheels \
  && python3 -m pip wheel \
    # Build the package at the required version
    psycopg2==${PSYCOPG2_VERSION} \
    # Output the *.whl into this directory
    --wheel-dir wheels \
    # Do not use a binary packge for the package being built
    --no-binary=psycopg2 \
    # Do use binary packages for dependencies
    --prefer-binary \
    --no-cache-dir \
  && ls -ahl wheels/
