diff --git a/projects/riverbankcomputing.com/pyqt5/QtCore/package.yml b/projects/riverbankcomputing.com/pyqt5/QtCore/package.yml new file mode 100644 index 0000000000..7d187d6db8 --- /dev/null +++ b/projects/riverbankcomputing.com/pyqt5/QtCore/package.yml @@ -0,0 +1,79 @@ +# PyQt5.QtCore — Foundation binding for Qt 5's core library. +# +# Part of the PyQt5 sub-binding split. See parent meta package at +# riverbankcomputing.com/pyqt5 for topology. PyQt5 is a namespace +# package (`pkgutil.extend_path`), so each sibling's `.so` lives +# in its own prefix and Python merges them at import time via +# the stacked PYTHONPATH. + +distributable: + url: https://pypi.io/packages/source/P/PyQt5/PyQt5-{{ version.raw }}.tar.gz + strip-components: 1 + +versions: + url: https://pypi.org/simple/pyqt5/ + match: /PyQt5-\d+\.\d+\.\d+\.tar\.gz/ + strip: + - /^PyQt5-/ + - /\.tar\.gz/ + +platforms: + - linux/x86-64 + - linux/aarch64 + - darwin/x86-64 + - darwin/aarch64 + +dependencies: + python.org: ~3.11 + qt.io: ^5 + riverbankcomputing.com/sip: '*' + +runtime: + env: + PYTHONPATH: '{{prefix}}/share/python/site-packages:$PYTHONPATH' + +build: + dependencies: + riverbankcomputing.com/pyqt-builder: '*' + freedesktop.org/pkg-config: '*' + linux: + llvm.org: <17 + + script: + - run: | + export CXXFLAGS="${CXXFLAGS} -g0" + export CFLAGS="${CFLAGS} -g0" + export MAKEFLAGS="-j1" + + # Pre-accept the GPL license in pyproject.toml so sipbuild + # does not prompt. awk (not sed) because sed's `a\` form + # needs a literal newline that breaks YAML's run-block + # indentation. + if ! grep -q "confirm-license" "$SRCROOT/pyproject.toml"; then + awk '/^\[tool\.sip\.project\]$/ { print; print "confirm-license = true"; next } { print }' "$SRCROOT/pyproject.toml" > "$SRCROOT/pyproject.toml.tmp" + mv "$SRCROOT/pyproject.toml.tmp" "$SRCROOT/pyproject.toml" + fi + + PYVER={{deps.python.org.version.marketing}} + SITE_PACKAGES="{{prefix}}/share/python/site-packages" + mkdir -p "$SITE_PACKAGES" + + # Use upstream python directly — no per-binding venv, each + # sub-package overlays via PYTHONPATH. + PYTHON="{{deps.python.org.prefix}}/bin/python$PYVER" + + # Single binding, single pip pass. --no-build-isolation so + # our CFLAGS reach the compiler. --no-deps so pip does not + # try to fetch PyQt5-sip from PyPI (pantry's sip is in scope + # via runtime PYTHONPATH). + "$PYTHON" -m pip install --no-build-isolation --no-deps --force-reinstall \ + --target="$SITE_PACKAGES" \ + --config-settings=--enable=QtCore \ + --config-settings=--jobs=1 \ + "$SRCROOT" + +test: + dependencies: + python.org: ~3.11 + script: + - python{{deps.python.org.version.marketing}} -c "from PyQt5 import QtCore" diff --git a/projects/riverbankcomputing.com/pyqt5/QtDBus/package.yml b/projects/riverbankcomputing.com/pyqt5/QtDBus/package.yml new file mode 100644 index 0000000000..229c3f2d05 --- /dev/null +++ b/projects/riverbankcomputing.com/pyqt5/QtDBus/package.yml @@ -0,0 +1,80 @@ +# PyQt5.QtDBus — D-Bus binding for PyQt5. +# +# Part of the PyQt5 sub-binding split. See parent meta package at +# riverbankcomputing.com/pyqt5 for topology. PyQt5 is a namespace +# package (`pkgutil.extend_path`), so each sibling's `.so` lives +# in its own prefix and Python merges them at import time via +# the stacked PYTHONPATH. + +distributable: + url: https://pypi.io/packages/source/P/PyQt5/PyQt5-{{ version.raw }}.tar.gz + strip-components: 1 + +versions: + url: https://pypi.org/simple/pyqt5/ + match: /PyQt5-\d+\.\d+\.\d+\.tar\.gz/ + strip: + - /^PyQt5-/ + - /\.tar\.gz/ + +platforms: + - linux/x86-64 + - linux/aarch64 + - darwin/x86-64 + - darwin/aarch64 + +dependencies: + python.org: ~3.11 + qt.io: ^5 + riverbankcomputing.com/sip: '*' + riverbankcomputing.com/pyqt5/QtCore: '*' + +runtime: + env: + PYTHONPATH: '{{prefix}}/share/python/site-packages:$PYTHONPATH' + +build: + dependencies: + riverbankcomputing.com/pyqt-builder: '*' + freedesktop.org/pkg-config: '*' + linux: + llvm.org: <17 + + script: + - run: | + export CXXFLAGS="${CXXFLAGS} -g0" + export CFLAGS="${CFLAGS} -g0" + export MAKEFLAGS="-j1" + + # Pre-accept the GPL license in pyproject.toml so sipbuild + # does not prompt. awk (not sed) because sed's `a\` form + # needs a literal newline that breaks YAML's run-block + # indentation. + if ! grep -q "confirm-license" "$SRCROOT/pyproject.toml"; then + awk '/^\[tool\.sip\.project\]$/ { print; print "confirm-license = true"; next } { print }' "$SRCROOT/pyproject.toml" > "$SRCROOT/pyproject.toml.tmp" + mv "$SRCROOT/pyproject.toml.tmp" "$SRCROOT/pyproject.toml" + fi + + PYVER={{deps.python.org.version.marketing}} + SITE_PACKAGES="{{prefix}}/share/python/site-packages" + mkdir -p "$SITE_PACKAGES" + + # Use upstream python directly — no per-binding venv, each + # sub-package overlays via PYTHONPATH. + PYTHON="{{deps.python.org.prefix}}/bin/python$PYVER" + + # Single binding, single pip pass. --no-build-isolation so + # our CFLAGS reach the compiler. --no-deps so pip does not + # try to fetch PyQt5-sip from PyPI (pantry's sip is in scope + # via runtime PYTHONPATH). + "$PYTHON" -m pip install --no-build-isolation --no-deps --force-reinstall \ + --target="$SITE_PACKAGES" \ + --config-settings=--enable=QtDBus \ + --config-settings=--jobs=1 \ + "$SRCROOT" + +test: + dependencies: + python.org: ~3.11 + script: + - python{{deps.python.org.version.marketing}} -c "from PyQt5 import QtDBus" diff --git a/projects/riverbankcomputing.com/pyqt5/QtGui/package.yml b/projects/riverbankcomputing.com/pyqt5/QtGui/package.yml new file mode 100644 index 0000000000..9079610a5c --- /dev/null +++ b/projects/riverbankcomputing.com/pyqt5/QtGui/package.yml @@ -0,0 +1,80 @@ +# PyQt5.QtGui — GUI primitives (paint, fonts, images, OpenGL) binding for PyQt5. +# +# Part of the PyQt5 sub-binding split. See parent meta package at +# riverbankcomputing.com/pyqt5 for topology. PyQt5 is a namespace +# package (`pkgutil.extend_path`), so each sibling's `.so` lives +# in its own prefix and Python merges them at import time via +# the stacked PYTHONPATH. + +distributable: + url: https://pypi.io/packages/source/P/PyQt5/PyQt5-{{ version.raw }}.tar.gz + strip-components: 1 + +versions: + url: https://pypi.org/simple/pyqt5/ + match: /PyQt5-\d+\.\d+\.\d+\.tar\.gz/ + strip: + - /^PyQt5-/ + - /\.tar\.gz/ + +platforms: + - linux/x86-64 + - linux/aarch64 + - darwin/x86-64 + - darwin/aarch64 + +dependencies: + python.org: ~3.11 + qt.io: ^5 + riverbankcomputing.com/sip: '*' + riverbankcomputing.com/pyqt5/QtCore: '*' + +runtime: + env: + PYTHONPATH: '{{prefix}}/share/python/site-packages:$PYTHONPATH' + +build: + dependencies: + riverbankcomputing.com/pyqt-builder: '*' + freedesktop.org/pkg-config: '*' + linux: + llvm.org: <17 + + script: + - run: | + export CXXFLAGS="${CXXFLAGS} -g0" + export CFLAGS="${CFLAGS} -g0" + export MAKEFLAGS="-j1" + + # Pre-accept the GPL license in pyproject.toml so sipbuild + # does not prompt. awk (not sed) because sed's `a\` form + # needs a literal newline that breaks YAML's run-block + # indentation. + if ! grep -q "confirm-license" "$SRCROOT/pyproject.toml"; then + awk '/^\[tool\.sip\.project\]$/ { print; print "confirm-license = true"; next } { print }' "$SRCROOT/pyproject.toml" > "$SRCROOT/pyproject.toml.tmp" + mv "$SRCROOT/pyproject.toml.tmp" "$SRCROOT/pyproject.toml" + fi + + PYVER={{deps.python.org.version.marketing}} + SITE_PACKAGES="{{prefix}}/share/python/site-packages" + mkdir -p "$SITE_PACKAGES" + + # Use upstream python directly — no per-binding venv, each + # sub-package overlays via PYTHONPATH. + PYTHON="{{deps.python.org.prefix}}/bin/python$PYVER" + + # Single binding, single pip pass. --no-build-isolation so + # our CFLAGS reach the compiler. --no-deps so pip does not + # try to fetch PyQt5-sip from PyPI (pantry's sip is in scope + # via runtime PYTHONPATH). + "$PYTHON" -m pip install --no-build-isolation --no-deps --force-reinstall \ + --target="$SITE_PACKAGES" \ + --config-settings=--enable=QtGui \ + --config-settings=--jobs=1 \ + "$SRCROOT" + +test: + dependencies: + python.org: ~3.11 + script: + - python{{deps.python.org.version.marketing}} -c "from PyQt5 import QtGui" diff --git a/projects/riverbankcomputing.com/pyqt5/QtNetwork/package.yml b/projects/riverbankcomputing.com/pyqt5/QtNetwork/package.yml new file mode 100644 index 0000000000..88c9e29c5b --- /dev/null +++ b/projects/riverbankcomputing.com/pyqt5/QtNetwork/package.yml @@ -0,0 +1,80 @@ +# PyQt5.QtNetwork — Networking (TCP/UDP/SSL/HTTP) binding for PyQt5. +# +# Part of the PyQt5 sub-binding split. See parent meta package at +# riverbankcomputing.com/pyqt5 for topology. PyQt5 is a namespace +# package (`pkgutil.extend_path`), so each sibling's `.so` lives +# in its own prefix and Python merges them at import time via +# the stacked PYTHONPATH. + +distributable: + url: https://pypi.io/packages/source/P/PyQt5/PyQt5-{{ version.raw }}.tar.gz + strip-components: 1 + +versions: + url: https://pypi.org/simple/pyqt5/ + match: /PyQt5-\d+\.\d+\.\d+\.tar\.gz/ + strip: + - /^PyQt5-/ + - /\.tar\.gz/ + +platforms: + - linux/x86-64 + - linux/aarch64 + - darwin/x86-64 + - darwin/aarch64 + +dependencies: + python.org: ~3.11 + qt.io: ^5 + riverbankcomputing.com/sip: '*' + riverbankcomputing.com/pyqt5/QtCore: '*' + +runtime: + env: + PYTHONPATH: '{{prefix}}/share/python/site-packages:$PYTHONPATH' + +build: + dependencies: + riverbankcomputing.com/pyqt-builder: '*' + freedesktop.org/pkg-config: '*' + linux: + llvm.org: <17 + + script: + - run: | + export CXXFLAGS="${CXXFLAGS} -g0" + export CFLAGS="${CFLAGS} -g0" + export MAKEFLAGS="-j1" + + # Pre-accept the GPL license in pyproject.toml so sipbuild + # does not prompt. awk (not sed) because sed's `a\` form + # needs a literal newline that breaks YAML's run-block + # indentation. + if ! grep -q "confirm-license" "$SRCROOT/pyproject.toml"; then + awk '/^\[tool\.sip\.project\]$/ { print; print "confirm-license = true"; next } { print }' "$SRCROOT/pyproject.toml" > "$SRCROOT/pyproject.toml.tmp" + mv "$SRCROOT/pyproject.toml.tmp" "$SRCROOT/pyproject.toml" + fi + + PYVER={{deps.python.org.version.marketing}} + SITE_PACKAGES="{{prefix}}/share/python/site-packages" + mkdir -p "$SITE_PACKAGES" + + # Use upstream python directly — no per-binding venv, each + # sub-package overlays via PYTHONPATH. + PYTHON="{{deps.python.org.prefix}}/bin/python$PYVER" + + # Single binding, single pip pass. --no-build-isolation so + # our CFLAGS reach the compiler. --no-deps so pip does not + # try to fetch PyQt5-sip from PyPI (pantry's sip is in scope + # via runtime PYTHONPATH). + "$PYTHON" -m pip install --no-build-isolation --no-deps --force-reinstall \ + --target="$SITE_PACKAGES" \ + --config-settings=--enable=QtNetwork \ + --config-settings=--jobs=1 \ + "$SRCROOT" + +test: + dependencies: + python.org: ~3.11 + script: + - python{{deps.python.org.version.marketing}} -c "from PyQt5 import QtNetwork" diff --git a/projects/riverbankcomputing.com/pyqt5/QtPrintSupport/package.yml b/projects/riverbankcomputing.com/pyqt5/QtPrintSupport/package.yml new file mode 100644 index 0000000000..1a4de56e2f --- /dev/null +++ b/projects/riverbankcomputing.com/pyqt5/QtPrintSupport/package.yml @@ -0,0 +1,81 @@ +# PyQt5.QtPrintSupport — Printer support binding for PyQt5. +# +# Part of the PyQt5 sub-binding split. See parent meta package at +# riverbankcomputing.com/pyqt5 for topology. PyQt5 is a namespace +# package (`pkgutil.extend_path`), so each sibling's `.so` lives +# in its own prefix and Python merges them at import time via +# the stacked PYTHONPATH. + +distributable: + url: https://pypi.io/packages/source/P/PyQt5/PyQt5-{{ version.raw }}.tar.gz + strip-components: 1 + +versions: + url: https://pypi.org/simple/pyqt5/ + match: /PyQt5-\d+\.\d+\.\d+\.tar\.gz/ + strip: + - /^PyQt5-/ + - /\.tar\.gz/ + +platforms: + - linux/x86-64 + - linux/aarch64 + - darwin/x86-64 + - darwin/aarch64 + +dependencies: + python.org: ~3.11 + qt.io: ^5 + riverbankcomputing.com/sip: '*' + riverbankcomputing.com/pyqt5/QtCore: '*' + riverbankcomputing.com/pyqt5/QtGui: '*' + +runtime: + env: + PYTHONPATH: '{{prefix}}/share/python/site-packages:$PYTHONPATH' + +build: + dependencies: + riverbankcomputing.com/pyqt-builder: '*' + freedesktop.org/pkg-config: '*' + linux: + llvm.org: <17 + + script: + - run: | + export CXXFLAGS="${CXXFLAGS} -g0" + export CFLAGS="${CFLAGS} -g0" + export MAKEFLAGS="-j1" + + # Pre-accept the GPL license in pyproject.toml so sipbuild + # does not prompt. awk (not sed) because sed's `a\` form + # needs a literal newline that breaks YAML's run-block + # indentation. + if ! grep -q "confirm-license" "$SRCROOT/pyproject.toml"; then + awk '/^\[tool\.sip\.project\]$/ { print; print "confirm-license = true"; next } { print }' "$SRCROOT/pyproject.toml" > "$SRCROOT/pyproject.toml.tmp" + mv "$SRCROOT/pyproject.toml.tmp" "$SRCROOT/pyproject.toml" + fi + + PYVER={{deps.python.org.version.marketing}} + SITE_PACKAGES="{{prefix}}/share/python/site-packages" + mkdir -p "$SITE_PACKAGES" + + # Use upstream python directly — no per-binding venv, each + # sub-package overlays via PYTHONPATH. + PYTHON="{{deps.python.org.prefix}}/bin/python$PYVER" + + # Single binding, single pip pass. --no-build-isolation so + # our CFLAGS reach the compiler. --no-deps so pip does not + # try to fetch PyQt5-sip from PyPI (pantry's sip is in scope + # via runtime PYTHONPATH). + "$PYTHON" -m pip install --no-build-isolation --no-deps --force-reinstall \ + --target="$SITE_PACKAGES" \ + --config-settings=--enable=QtPrintSupport \ + --config-settings=--jobs=1 \ + "$SRCROOT" + +test: + dependencies: + python.org: ~3.11 + script: + - python{{deps.python.org.version.marketing}} -c "from PyQt5 import QtPrintSupport" diff --git a/projects/riverbankcomputing.com/pyqt5/QtSql/package.yml b/projects/riverbankcomputing.com/pyqt5/QtSql/package.yml new file mode 100644 index 0000000000..64f2d27b60 --- /dev/null +++ b/projects/riverbankcomputing.com/pyqt5/QtSql/package.yml @@ -0,0 +1,80 @@ +# PyQt5.QtSql — SQL database binding for PyQt5. +# +# Part of the PyQt5 sub-binding split. See parent meta package at +# riverbankcomputing.com/pyqt5 for topology. PyQt5 is a namespace +# package (`pkgutil.extend_path`), so each sibling's `.so` lives +# in its own prefix and Python merges them at import time via +# the stacked PYTHONPATH. + +distributable: + url: https://pypi.io/packages/source/P/PyQt5/PyQt5-{{ version.raw }}.tar.gz + strip-components: 1 + +versions: + url: https://pypi.org/simple/pyqt5/ + match: /PyQt5-\d+\.\d+\.\d+\.tar\.gz/ + strip: + - /^PyQt5-/ + - /\.tar\.gz/ + +platforms: + - linux/x86-64 + - linux/aarch64 + - darwin/x86-64 + - darwin/aarch64 + +dependencies: + python.org: ~3.11 + qt.io: ^5 + riverbankcomputing.com/sip: '*' + riverbankcomputing.com/pyqt5/QtCore: '*' + +runtime: + env: + PYTHONPATH: '{{prefix}}/share/python/site-packages:$PYTHONPATH' + +build: + dependencies: + riverbankcomputing.com/pyqt-builder: '*' + freedesktop.org/pkg-config: '*' + linux: + llvm.org: <17 + + script: + - run: | + export CXXFLAGS="${CXXFLAGS} -g0" + export CFLAGS="${CFLAGS} -g0" + export MAKEFLAGS="-j1" + + # Pre-accept the GPL license in pyproject.toml so sipbuild + # does not prompt. awk (not sed) because sed's `a\` form + # needs a literal newline that breaks YAML's run-block + # indentation. + if ! grep -q "confirm-license" "$SRCROOT/pyproject.toml"; then + awk '/^\[tool\.sip\.project\]$/ { print; print "confirm-license = true"; next } { print }' "$SRCROOT/pyproject.toml" > "$SRCROOT/pyproject.toml.tmp" + mv "$SRCROOT/pyproject.toml.tmp" "$SRCROOT/pyproject.toml" + fi + + PYVER={{deps.python.org.version.marketing}} + SITE_PACKAGES="{{prefix}}/share/python/site-packages" + mkdir -p "$SITE_PACKAGES" + + # Use upstream python directly — no per-binding venv, each + # sub-package overlays via PYTHONPATH. + PYTHON="{{deps.python.org.prefix}}/bin/python$PYVER" + + # Single binding, single pip pass. --no-build-isolation so + # our CFLAGS reach the compiler. --no-deps so pip does not + # try to fetch PyQt5-sip from PyPI (pantry's sip is in scope + # via runtime PYTHONPATH). + "$PYTHON" -m pip install --no-build-isolation --no-deps --force-reinstall \ + --target="$SITE_PACKAGES" \ + --config-settings=--enable=QtSql \ + --config-settings=--jobs=1 \ + "$SRCROOT" + +test: + dependencies: + python.org: ~3.11 + script: + - python{{deps.python.org.version.marketing}} -c "from PyQt5 import QtSql" diff --git a/projects/riverbankcomputing.com/pyqt5/QtSvg/package.yml b/projects/riverbankcomputing.com/pyqt5/QtSvg/package.yml new file mode 100644 index 0000000000..51695279ec --- /dev/null +++ b/projects/riverbankcomputing.com/pyqt5/QtSvg/package.yml @@ -0,0 +1,81 @@ +# PyQt5.QtSvg — SVG rendering binding for PyQt5. +# +# Part of the PyQt5 sub-binding split. See parent meta package at +# riverbankcomputing.com/pyqt5 for topology. PyQt5 is a namespace +# package (`pkgutil.extend_path`), so each sibling's `.so` lives +# in its own prefix and Python merges them at import time via +# the stacked PYTHONPATH. + +distributable: + url: https://pypi.io/packages/source/P/PyQt5/PyQt5-{{ version.raw }}.tar.gz + strip-components: 1 + +versions: + url: https://pypi.org/simple/pyqt5/ + match: /PyQt5-\d+\.\d+\.\d+\.tar\.gz/ + strip: + - /^PyQt5-/ + - /\.tar\.gz/ + +platforms: + - linux/x86-64 + - linux/aarch64 + - darwin/x86-64 + - darwin/aarch64 + +dependencies: + python.org: ~3.11 + qt.io: ^5 + riverbankcomputing.com/sip: '*' + riverbankcomputing.com/pyqt5/QtCore: '*' + riverbankcomputing.com/pyqt5/QtGui: '*' + +runtime: + env: + PYTHONPATH: '{{prefix}}/share/python/site-packages:$PYTHONPATH' + +build: + dependencies: + riverbankcomputing.com/pyqt-builder: '*' + freedesktop.org/pkg-config: '*' + linux: + llvm.org: <17 + + script: + - run: | + export CXXFLAGS="${CXXFLAGS} -g0" + export CFLAGS="${CFLAGS} -g0" + export MAKEFLAGS="-j1" + + # Pre-accept the GPL license in pyproject.toml so sipbuild + # does not prompt. awk (not sed) because sed's `a\` form + # needs a literal newline that breaks YAML's run-block + # indentation. + if ! grep -q "confirm-license" "$SRCROOT/pyproject.toml"; then + awk '/^\[tool\.sip\.project\]$/ { print; print "confirm-license = true"; next } { print }' "$SRCROOT/pyproject.toml" > "$SRCROOT/pyproject.toml.tmp" + mv "$SRCROOT/pyproject.toml.tmp" "$SRCROOT/pyproject.toml" + fi + + PYVER={{deps.python.org.version.marketing}} + SITE_PACKAGES="{{prefix}}/share/python/site-packages" + mkdir -p "$SITE_PACKAGES" + + # Use upstream python directly — no per-binding venv, each + # sub-package overlays via PYTHONPATH. + PYTHON="{{deps.python.org.prefix}}/bin/python$PYVER" + + # Single binding, single pip pass. --no-build-isolation so + # our CFLAGS reach the compiler. --no-deps so pip does not + # try to fetch PyQt5-sip from PyPI (pantry's sip is in scope + # via runtime PYTHONPATH). + "$PYTHON" -m pip install --no-build-isolation --no-deps --force-reinstall \ + --target="$SITE_PACKAGES" \ + --config-settings=--enable=QtSvg \ + --config-settings=--jobs=1 \ + "$SRCROOT" + +test: + dependencies: + python.org: ~3.11 + script: + - python{{deps.python.org.version.marketing}} -c "from PyQt5 import QtSvg" diff --git a/projects/riverbankcomputing.com/pyqt5/QtTest/package.yml b/projects/riverbankcomputing.com/pyqt5/QtTest/package.yml new file mode 100644 index 0000000000..55d89b2f0e --- /dev/null +++ b/projects/riverbankcomputing.com/pyqt5/QtTest/package.yml @@ -0,0 +1,80 @@ +# PyQt5.QtTest — Unit-test framework binding for PyQt5. +# +# Part of the PyQt5 sub-binding split. See parent meta package at +# riverbankcomputing.com/pyqt5 for topology. PyQt5 is a namespace +# package (`pkgutil.extend_path`), so each sibling's `.so` lives +# in its own prefix and Python merges them at import time via +# the stacked PYTHONPATH. + +distributable: + url: https://pypi.io/packages/source/P/PyQt5/PyQt5-{{ version.raw }}.tar.gz + strip-components: 1 + +versions: + url: https://pypi.org/simple/pyqt5/ + match: /PyQt5-\d+\.\d+\.\d+\.tar\.gz/ + strip: + - /^PyQt5-/ + - /\.tar\.gz/ + +platforms: + - linux/x86-64 + - linux/aarch64 + - darwin/x86-64 + - darwin/aarch64 + +dependencies: + python.org: ~3.11 + qt.io: ^5 + riverbankcomputing.com/sip: '*' + riverbankcomputing.com/pyqt5/QtCore: '*' + +runtime: + env: + PYTHONPATH: '{{prefix}}/share/python/site-packages:$PYTHONPATH' + +build: + dependencies: + riverbankcomputing.com/pyqt-builder: '*' + freedesktop.org/pkg-config: '*' + linux: + llvm.org: <17 + + script: + - run: | + export CXXFLAGS="${CXXFLAGS} -g0" + export CFLAGS="${CFLAGS} -g0" + export MAKEFLAGS="-j1" + + # Pre-accept the GPL license in pyproject.toml so sipbuild + # does not prompt. awk (not sed) because sed's `a\` form + # needs a literal newline that breaks YAML's run-block + # indentation. + if ! grep -q "confirm-license" "$SRCROOT/pyproject.toml"; then + awk '/^\[tool\.sip\.project\]$/ { print; print "confirm-license = true"; next } { print }' "$SRCROOT/pyproject.toml" > "$SRCROOT/pyproject.toml.tmp" + mv "$SRCROOT/pyproject.toml.tmp" "$SRCROOT/pyproject.toml" + fi + + PYVER={{deps.python.org.version.marketing}} + SITE_PACKAGES="{{prefix}}/share/python/site-packages" + mkdir -p "$SITE_PACKAGES" + + # Use upstream python directly — no per-binding venv, each + # sub-package overlays via PYTHONPATH. + PYTHON="{{deps.python.org.prefix}}/bin/python$PYVER" + + # Single binding, single pip pass. --no-build-isolation so + # our CFLAGS reach the compiler. --no-deps so pip does not + # try to fetch PyQt5-sip from PyPI (pantry's sip is in scope + # via runtime PYTHONPATH). + "$PYTHON" -m pip install --no-build-isolation --no-deps --force-reinstall \ + --target="$SITE_PACKAGES" \ + --config-settings=--enable=QtTest \ + --config-settings=--jobs=1 \ + "$SRCROOT" + +test: + dependencies: + python.org: ~3.11 + script: + - python{{deps.python.org.version.marketing}} -c "from PyQt5 import QtTest" diff --git a/projects/riverbankcomputing.com/pyqt5/QtWidgets/package.yml b/projects/riverbankcomputing.com/pyqt5/QtWidgets/package.yml new file mode 100644 index 0000000000..77772283f4 --- /dev/null +++ b/projects/riverbankcomputing.com/pyqt5/QtWidgets/package.yml @@ -0,0 +1,81 @@ +# PyQt5.QtWidgets — Full Qt 5 widget set — heaviest of the bindings. +# +# Part of the PyQt5 sub-binding split. See parent meta package at +# riverbankcomputing.com/pyqt5 for topology. PyQt5 is a namespace +# package (`pkgutil.extend_path`), so each sibling's `.so` lives +# in its own prefix and Python merges them at import time via +# the stacked PYTHONPATH. + +distributable: + url: https://pypi.io/packages/source/P/PyQt5/PyQt5-{{ version.raw }}.tar.gz + strip-components: 1 + +versions: + url: https://pypi.org/simple/pyqt5/ + match: /PyQt5-\d+\.\d+\.\d+\.tar\.gz/ + strip: + - /^PyQt5-/ + - /\.tar\.gz/ + +platforms: + - linux/x86-64 + - linux/aarch64 + - darwin/x86-64 + - darwin/aarch64 + +dependencies: + python.org: ~3.11 + qt.io: ^5 + riverbankcomputing.com/sip: '*' + riverbankcomputing.com/pyqt5/QtCore: '*' + riverbankcomputing.com/pyqt5/QtGui: '*' + +runtime: + env: + PYTHONPATH: '{{prefix}}/share/python/site-packages:$PYTHONPATH' + +build: + dependencies: + riverbankcomputing.com/pyqt-builder: '*' + freedesktop.org/pkg-config: '*' + linux: + llvm.org: <17 + + script: + - run: | + export CXXFLAGS="${CXXFLAGS} -g0" + export CFLAGS="${CFLAGS} -g0" + export MAKEFLAGS="-j1" + + # Pre-accept the GPL license in pyproject.toml so sipbuild + # does not prompt. awk (not sed) because sed's `a\` form + # needs a literal newline that breaks YAML's run-block + # indentation. + if ! grep -q "confirm-license" "$SRCROOT/pyproject.toml"; then + awk '/^\[tool\.sip\.project\]$/ { print; print "confirm-license = true"; next } { print }' "$SRCROOT/pyproject.toml" > "$SRCROOT/pyproject.toml.tmp" + mv "$SRCROOT/pyproject.toml.tmp" "$SRCROOT/pyproject.toml" + fi + + PYVER={{deps.python.org.version.marketing}} + SITE_PACKAGES="{{prefix}}/share/python/site-packages" + mkdir -p "$SITE_PACKAGES" + + # Use upstream python directly — no per-binding venv, each + # sub-package overlays via PYTHONPATH. + PYTHON="{{deps.python.org.prefix}}/bin/python$PYVER" + + # Single binding, single pip pass. --no-build-isolation so + # our CFLAGS reach the compiler. --no-deps so pip does not + # try to fetch PyQt5-sip from PyPI (pantry's sip is in scope + # via runtime PYTHONPATH). + "$PYTHON" -m pip install --no-build-isolation --no-deps --force-reinstall \ + --target="$SITE_PACKAGES" \ + --config-settings=--enable=QtWidgets \ + --config-settings=--jobs=1 \ + "$SRCROOT" + +test: + dependencies: + python.org: ~3.11 + script: + - python{{deps.python.org.version.marketing}} -c "from PyQt5 import QtWidgets" diff --git a/projects/riverbankcomputing.com/pyqt5/QtXml/package.yml b/projects/riverbankcomputing.com/pyqt5/QtXml/package.yml new file mode 100644 index 0000000000..ab2c4d3da9 --- /dev/null +++ b/projects/riverbankcomputing.com/pyqt5/QtXml/package.yml @@ -0,0 +1,80 @@ +# PyQt5.QtXml — DOM XML binding for PyQt5. +# +# Part of the PyQt5 sub-binding split. See parent meta package at +# riverbankcomputing.com/pyqt5 for topology. PyQt5 is a namespace +# package (`pkgutil.extend_path`), so each sibling's `.so` lives +# in its own prefix and Python merges them at import time via +# the stacked PYTHONPATH. + +distributable: + url: https://pypi.io/packages/source/P/PyQt5/PyQt5-{{ version.raw }}.tar.gz + strip-components: 1 + +versions: + url: https://pypi.org/simple/pyqt5/ + match: /PyQt5-\d+\.\d+\.\d+\.tar\.gz/ + strip: + - /^PyQt5-/ + - /\.tar\.gz/ + +platforms: + - linux/x86-64 + - linux/aarch64 + - darwin/x86-64 + - darwin/aarch64 + +dependencies: + python.org: ~3.11 + qt.io: ^5 + riverbankcomputing.com/sip: '*' + riverbankcomputing.com/pyqt5/QtCore: '*' + +runtime: + env: + PYTHONPATH: '{{prefix}}/share/python/site-packages:$PYTHONPATH' + +build: + dependencies: + riverbankcomputing.com/pyqt-builder: '*' + freedesktop.org/pkg-config: '*' + linux: + llvm.org: <17 + + script: + - run: | + export CXXFLAGS="${CXXFLAGS} -g0" + export CFLAGS="${CFLAGS} -g0" + export MAKEFLAGS="-j1" + + # Pre-accept the GPL license in pyproject.toml so sipbuild + # does not prompt. awk (not sed) because sed's `a\` form + # needs a literal newline that breaks YAML's run-block + # indentation. + if ! grep -q "confirm-license" "$SRCROOT/pyproject.toml"; then + awk '/^\[tool\.sip\.project\]$/ { print; print "confirm-license = true"; next } { print }' "$SRCROOT/pyproject.toml" > "$SRCROOT/pyproject.toml.tmp" + mv "$SRCROOT/pyproject.toml.tmp" "$SRCROOT/pyproject.toml" + fi + + PYVER={{deps.python.org.version.marketing}} + SITE_PACKAGES="{{prefix}}/share/python/site-packages" + mkdir -p "$SITE_PACKAGES" + + # Use upstream python directly — no per-binding venv, each + # sub-package overlays via PYTHONPATH. + PYTHON="{{deps.python.org.prefix}}/bin/python$PYVER" + + # Single binding, single pip pass. --no-build-isolation so + # our CFLAGS reach the compiler. --no-deps so pip does not + # try to fetch PyQt5-sip from PyPI (pantry's sip is in scope + # via runtime PYTHONPATH). + "$PYTHON" -m pip install --no-build-isolation --no-deps --force-reinstall \ + --target="$SITE_PACKAGES" \ + --config-settings=--enable=QtXml \ + --config-settings=--jobs=1 \ + "$SRCROOT" + +test: + dependencies: + python.org: ~3.11 + script: + - python{{deps.python.org.version.marketing}} -c "from PyQt5 import QtXml" diff --git a/projects/riverbankcomputing.com/pyqt5/package.yml b/projects/riverbankcomputing.com/pyqt5/package.yml new file mode 100644 index 0000000000..92f968c2de --- /dev/null +++ b/projects/riverbankcomputing.com/pyqt5/package.yml @@ -0,0 +1,59 @@ +# PyQt5 — Meta-package: pulls all PyQt5 sub-bindings together. +# +# Equivalent to homebrew's `pyqt@5` formula or apt's `python3-pyqt5`. +# Per-binding sub-recipes (QtCore / QtGui / QtWidgets / etc.) live in +# sibling directories so each binding gets its own CI job and its own +# 6 h timeout — the monolithic recipe was being OOM-killed and then +# GHA-cancelled at 1h33min. See PR pkgxdev/pantry#13064. +# +# Top 300 holdout #591. + +distributable: + url: https://pypi.io/packages/source/P/PyQt5/PyQt5-{{ version.raw }}.tar.gz + strip-components: 1 + +versions: + url: https://pypi.org/simple/pyqt5/ + match: /PyQt5-\d+\.\d+\.\d+\.tar\.gz/ + strip: + - /^PyQt5-/ + - /\.tar\.gz/ + +platforms: + - linux/x86-64 + - linux/aarch64 + - darwin/x86-64 + - darwin/aarch64 + +dependencies: + riverbankcomputing.com/pyqt5/QtCore: '*' + riverbankcomputing.com/pyqt5/QtDBus: '*' + riverbankcomputing.com/pyqt5/QtNetwork: '*' + riverbankcomputing.com/pyqt5/QtSql: '*' + riverbankcomputing.com/pyqt5/QtTest: '*' + riverbankcomputing.com/pyqt5/QtXml: '*' + riverbankcomputing.com/pyqt5/QtGui: '*' + riverbankcomputing.com/pyqt5/QtSvg: '*' + riverbankcomputing.com/pyqt5/QtPrintSupport: '*' + riverbankcomputing.com/pyqt5/QtWidgets: '*' + +# Meta package: no build artifacts of its own — every sub-binding +# carries its own .so into its own prefix and Python's pkgutil +# extends `PyQt5/__path__` to merge them at import time. We still +# need a `build.script` because pkgx requires one; emit a marker file +# so the package is non-empty and brewkit's bottling sees something. +build: + script: + - run: | + mkdir -p "{{prefix}}/share/pyqt5" + echo "PyQt5 {{version}} (meta-package — see sub-bindings)" > "{{prefix}}/share/pyqt5/README" + +test: + dependencies: + python.org: ~3.11 + script: + # Importing QtCore exercises the namespace-package overlay across + # at least one sub-binding prefix. Each sub-binding has its own + # test pass; this test only checks that the meta successfully + # pulled them all into scope. + - python{{deps.python.org.version.marketing}} -c "from PyQt5 import QtCore; print(QtCore.QT_VERSION_STR)"