git: 8e52223de39a - main - databases/py-psycopg-c: Update to 3.3.4

From: Po-Chuan Hsieh <sunpoet_at_FreeBSD.org>
Date: Sat, 11 Jul 2026 12:23:34 UTC
The branch main has been updated by sunpoet:

URL: https://cgit.FreeBSD.org/ports/commit/?id=8e52223de39a57c5b217a7422477090fbed5ec4b

commit 8e52223de39a57c5b217a7422477090fbed5ec4b
Author:     Po-Chuan Hsieh <sunpoet@FreeBSD.org>
AuthorDate: 2026-07-11 11:46:35 +0000
Commit:     Po-Chuan Hsieh <sunpoet@FreeBSD.org>
CommitDate: 2026-07-11 12:21:00 +0000

    databases/py-psycopg-c: Update to 3.3.4
    
    Changes:        https://github.com/psycopg/psycopg/blob/master/docs/news.rst
                    https://www.psycopg.org/psycopg3/docs/news.html
---
 databases/py-psycopg-c/Makefile                   |   4 +-
 databases/py-psycopg-c/distinfo                   |   6 +-
 databases/py-psycopg-c/files/patch-pyproject.toml |  38 ++++++++
 databases/py-psycopg-c/files/patch-setup.py       | 104 ++++++++++++++++++++++
 4 files changed, 147 insertions(+), 5 deletions(-)

diff --git a/databases/py-psycopg-c/Makefile b/databases/py-psycopg-c/Makefile
index 30888cee0fc6..c5a8c7beeb17 100644
--- a/databases/py-psycopg-c/Makefile
+++ b/databases/py-psycopg-c/Makefile
@@ -1,5 +1,5 @@
 PORTNAME=	psycopg-c
-PORTVERSION=	3.2.13
+PORTVERSION=	3.3.4
 CATEGORIES=	databases python
 MASTER_SITES=	PYPI
 PKGNAMEPREFIX=	${PYTHON_PKGNAMEPREFIX}
@@ -13,7 +13,7 @@ WWW=		https://www.psycopg.org/psycopg3/ \
 LICENSE=	LGPL3
 LICENSE_FILE=	${WRKSRC}/LICENSE.txt
 
-BUILD_DEPENDS=	${PYTHON_PKGNAMEPREFIX}setuptools>=49.2.0:devel/py-setuptools@${PY_FLAVOR} \
+BUILD_DEPENDS=	${PYTHON_PKGNAMEPREFIX}setuptools>=61:devel/py-setuptools@${PY_FLAVOR} \
 		${PY_TOMLI} \
 		${PYTHON_PKGNAMEPREFIX}wheel>=0.37:devel/py-wheel@${PY_FLAVOR}
 
diff --git a/databases/py-psycopg-c/distinfo b/databases/py-psycopg-c/distinfo
index dd8e114e8978..653eb5ab6ea6 100644
--- a/databases/py-psycopg-c/distinfo
+++ b/databases/py-psycopg-c/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1763853252
-SHA256 (psycopg_c-3.2.13.tar.gz) = 3f8d69a563f198198aaf3333e3830c68368a4e45cd60faeabca9949f958f6480
-SIZE (psycopg_c-3.2.13.tar.gz) = 624372
+TIMESTAMP = 1783564020
+SHA256 (psycopg_c-3.3.4.tar.gz) = ed8106128b2d04359c185fc9641b4409abfce4d0b6fb1d1ff6800646e27f1a22
+SIZE (psycopg_c-3.3.4.tar.gz) = 647111
diff --git a/databases/py-psycopg-c/files/patch-pyproject.toml b/databases/py-psycopg-c/files/patch-pyproject.toml
new file mode 100644
index 000000000000..07f9ae701331
--- /dev/null
+++ b/databases/py-psycopg-c/files/patch-pyproject.toml
@@ -0,0 +1,38 @@
+--- pyproject.toml.orig	2026-05-01 20:43:36 UTC
++++ pyproject.toml
+@@ -5,7 +5,7 @@ requires = [
+     #   `[tool.setuptools.ext-modules]` in `pyproject.toml` is still
+     #   *experimental* and likely to change in future releases
+     #
+-    "setuptools == 80.3.1",
++    "setuptools >= 61",
+     "wheel >= 0.37",
+     "tomli >= 2.0.1; python_version < '3.11'",
+ ]
+@@ -25,8 +25,7 @@ version = "3.3.4"
+ name = "psycopg-c"
+ description = "PostgreSQL database adapter for Python -- C optimisation distribution"
+ version = "3.3.4"
+-license = "LGPL-3.0-only"
+-license-files = ["LICENSE.txt"]
++license = {text = "LGPL-3.0-only"}
+ classifiers = [
+     "Development Status :: 5 - Production/Stable",
+     "Intended Audience :: Developers",
+@@ -89,16 +88,6 @@ psycopg_binary = [
+     "py.typed",
+     "*.pyi",
+ ]
+-
+-# Note: these ext modules lack details such as libraries and directories.
+-# They are added by the 'psycopg_build_ext' build module.
+-[[tool.setuptools.ext-modules]]
+-name = "psycopg_c._psycopg"
+-sources = ["psycopg_c/_psycopg.c", "psycopg_c/types/numutils.c"]
+-
+-[[tool.setuptools.ext-modules]]
+-name = "psycopg_c.pq"
+-sources = ["psycopg_c/pq.c"]
+ 
+ [tool.setuptools.cmdclass]
+ build_ext = "psycopg_build_ext.psycopg_build_ext"
diff --git a/databases/py-psycopg-c/files/patch-setup.py b/databases/py-psycopg-c/files/patch-setup.py
new file mode 100644
index 000000000000..bea888ebdc3d
--- /dev/null
+++ b/databases/py-psycopg-c/files/patch-setup.py
@@ -0,0 +1,104 @@
+--- setup.py.orig	2026-07-11 02:53:43 UTC
++++ setup.py
+@@ -0,0 +1,101 @@
++#!/usr/bin/env python3
++"""
++PostgreSQL database adapter for Python - optimisation package
++"""
++
++# Copyright (C) 2020 The Psycopg Team
++
++import os
++import sys
++import subprocess as sp
++from distutils import log
++from distutils.command.build_ext import build_ext
++
++from setuptools import Extension, setup
++
++# Move to the directory of setup.py: executing this file from another location
++# (e.g. from the project root) will fail
++here = os.path.abspath(os.path.dirname(__file__))
++if os.path.abspath(os.getcwd()) != here:
++    os.chdir(here)
++
++
++def get_config(what: str) -> str:
++    pg_config = "pg_config"
++    try:
++        out = sp.run([pg_config, f"--{what}"], stdout=sp.PIPE, check=True)
++    except Exception as e:
++        log.error(f"couldn't run {pg_config!r} --{what}: %s", e)
++        raise
++    else:
++        return out.stdout.strip().decode()
++
++
++class psycopg_build_ext(build_ext):
++    def finalize_options(self) -> None:
++        self._setup_ext_build()
++        super().finalize_options()
++
++    def _setup_ext_build(self) -> None:
++        cythonize = None
++
++        # In the sdist there are not .pyx, only c, so we don't need Cython.
++        # Otherwise Cython is a requirement and it is used to compile pyx to c.
++        if os.path.exists("psycopg_c/_psycopg.pyx"):
++            from Cython.Build import cythonize  # type: ignore
++
++        # Add include and lib dir for the libpq.
++        includedir = get_config("includedir")
++        libdir = get_config("libdir")
++        for ext in self.distribution.ext_modules:
++            ext.include_dirs.append(includedir)
++            ext.library_dirs.append(libdir)
++
++            if sys.platform == "win32":
++                # For __imp_htons and others
++                ext.libraries.append("ws2_32")
++
++        if cythonize is not None:
++            for ext in self.distribution.ext_modules:
++                for i in range(len(ext.sources)):
++                    base, fext = os.path.splitext(ext.sources[i])
++                    if fext == ".c" and os.path.exists(base + ".pyx"):
++                        ext.sources[i] = base + ".pyx"
++
++            self.distribution.ext_modules = cythonize(
++                self.distribution.ext_modules,
++                language_level=3,
++                compiler_directives={
++                    "always_allow_keywords": False,
++                },
++                annotate=False,  # enable to get an html view of the C module
++            )
++        else:
++            self.distribution.ext_modules = [pgext, pqext]
++
++
++# MSVC requires an explicit "libpq"
++libpq = "pq" if sys.platform != "win32" else "libpq"
++
++# Some details missing, to be finished by psycopg_build_ext.finalize_options
++pgext = Extension(
++    "psycopg_c._psycopg",
++    [
++        "psycopg_c/_psycopg.c",
++        "psycopg_c/types/numutils.c",
++    ],
++    libraries=[libpq],
++    include_dirs=[],
++)
++
++pqext = Extension(
++    "psycopg_c.pq",
++    ["psycopg_c/pq.c"],
++    libraries=[libpq],
++    include_dirs=[],
++)
++
++setup(
++    ext_modules=[pgext, pqext],
++    cmdclass={"build_ext": psycopg_build_ext},  # type: ignore
++)