8e52223de3
Changes: https://github.com/psycopg/psycopg/blob/master/docs/news.rst https://www.psycopg.org/psycopg3/docs/news.html
105 lines
3.1 KiB
Python
105 lines
3.1 KiB
Python
--- 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
|
|
+)
|