--- /dev/null
+#!/usr/bin/env python3
+
+# Create the psycopg-binary package by renaming and patching psycopg-c
+
+import os
+import re
+import shutil
+from pathlib import Path
+from typing import Union
+
+curdir = Path(__file__).parent
+pdir = curdir / "../.."
+target = pdir / "psycopg_binary"
+
+if target.exists():
+ raise Exception(f"path {target} already exists")
+
+
+def sed_i(pattern: str, repl: str, filename: Union[str, Path]) -> None:
+ with open(filename, "rb") as f:
+ data = f.read()
+ newdata = re.sub(pattern.encode("utf8"), repl.encode("utf8"), data)
+ if newdata != data:
+ with open(filename, "wb") as f:
+ f.write(newdata)
+
+
+shutil.copytree(pdir / "psycopg_c", target)
+shutil.move(str(target / "psycopg_c"), str(target / "psycopg_binary"))
+sed_i("psycopg-c", "psycopg-binary", target / "setup.cfg")
+sed_i(
+ r"__impl__\s*=.*", '__impl__ = "binary"', target / "psycopg_binary/pq.pyx"
+)
+for dirpath, dirnames, filenames in os.walk(target):
+ for filename in filenames:
+ if os.path.splitext(filename)[1] not in (".pyx", ".pxd", ".py"):
+ continue
+ sed_i(r"\bpsycopg_c\b", "psycopg_binary", Path(dirpath) / filename)
+++ /dev/null
-#!/bin/bash
-
-# Create the psycopg-binary package by renaming and patching psycopg-c
-# This script is designed to run
-
-set -euo pipefail
-set -x
-
-dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
-pdir="$( cd "${dir}/../.." && pwd )"
-target="${pdir}/psycopg_binary"
-
-cp -r "${pdir}/psycopg_c" "${target}"
-mv "${target}"/{psycopg_c,psycopg_binary}/
-sed -i 's/psycopg-c/psycopg-binary/' "${target}"/setup.cfg
-sed -i "s/__impl__[[:space:]]*=.*/__impl__ = 'binary'/" \
- "${target}"/psycopg_binary/pq.pyx
-find "${target}" -name \*.pyx -or -name \*.pxd -or -name \*.py \
- | xargs sed -i 's/\bpsycopg_c\b/psycopg_binary/'