git: 283eb43e76ab - main - www/py-pywebview-qt: New port: Build GUI for your Python program with JavaScript, HTML, and CSS (qt)

From: Jose Alonso Cardenas Marquez <acm_at_FreeBSD.org>
Date: Fri, 08 Nov 2024 02:26:55 UTC
The branch main has been updated by acm:

URL: https://cgit.FreeBSD.org/ports/commit/?id=283eb43e76abbb9447ce752b8218e59fa000b1b6

commit 283eb43e76abbb9447ce752b8218e59fa000b1b6
Author:     Jesús Daniel Colmenares Oviedo <DtxdF@disroot.org>
AuthorDate: 2024-11-08 02:26:22 +0000
Commit:     Jose Alonso Cardenas Marquez <acm@FreeBSD.org>
CommitDate: 2024-11-08 02:26:22 +0000

    www/py-pywebview-qt: New port: Build GUI for your Python program with JavaScript, HTML, and CSS (qt)
    
    pywebview is a lightweight cross-platform wrapper around a webview
    component that allows to display HTML content in its own native GUI
    window. It gives you the power of web technologies in your desktop
    application, hiding the fact that the GUI is browser based. Available
    for Windows, macOS, Linux and Android. You can use pywebview either
    with a 3rd party web framework or on its own with a two way bridge
    between Python and DOM.
    
    WWW: https://github.com/r0x0r/pywebview
    PR:             282459
---
 www/Makefile                                      |  1 +
 www/py-pywebview-qt/Makefile                      | 32 +++++++++++++++++++++++
 www/py-pywebview-qt/distinfo                      |  3 +++
 www/py-pywebview-qt/files/patch-webview_guilib.py | 20 ++++++++++++++
 www/py-pywebview-qt/pkg-descr                     |  7 +++++
 www/py-pywebview-qt/pkg-message                   |  8 ++++++
 6 files changed, 71 insertions(+)

diff --git a/www/Makefile b/www/Makefile
index 7111ef5f0f3f..6feb49a8df25 100644
--- a/www/Makefile
+++ b/www/Makefile
@@ -1800,6 +1800,7 @@
     SUBDIR += py-python-multipart
     SUBDIR += py-pyweblib
     SUBDIR += py-pywebview-gtk
+    SUBDIR += py-pywebview-qt
     SUBDIR += py-pywikibot
     SUBDIR += py-pywry
     SUBDIR += py-qh3
diff --git a/www/py-pywebview-qt/Makefile b/www/py-pywebview-qt/Makefile
new file mode 100644
index 000000000000..d471e1ef1302
--- /dev/null
+++ b/www/py-pywebview-qt/Makefile
@@ -0,0 +1,32 @@
+PORTNAME=	pywebview
+DISTVERSION=	5.3.2
+CATEGORIES=	www python
+MASTER_SITES=	PYPI
+PKGNAMEPREFIX=	${PYTHON_PKGNAMEPREFIX}
+PKGNAMESUFFIX=	-qt
+
+MAINTAINER=	DtxdF@disroot.org
+COMMENT=	Build GUI for your Python program with JavaScript, HTML, and CSS (qt)
+WWW=		https://github.com/r0x0r/pywebview
+
+LICENSE=	BSD3CLAUSE
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+BUILD_DEPENDS=	${PYTHON_PKGNAMEPREFIX}setuptools-scm>=0:devel/py-setuptools-scm@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}setuptools>=0:devel/py-setuptools@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}wheel>=0:devel/py-wheel@${PY_FLAVOR}
+RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}bottle>=0:www/py-bottle@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}proxy_tools>=0:www/py-proxy_tools@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}pyside2>=0:devel/pyside2@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}QtPy>=0:devel/py-QtPy@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}typing-extensions>=0:devel/py-typing-extensions@${PY_FLAVOR}
+
+USES=		pyqt:5 python
+USE_PYQT=	webengine:run
+USE_PYTHON=	autoplist cryptography pep517
+
+CONFLICTS_INSTALL=	www/py-${PORTNAME}-gtk
+
+NO_ARCH=	yes
+
+.include <bsd.port.mk>
diff --git a/www/py-pywebview-qt/distinfo b/www/py-pywebview-qt/distinfo
new file mode 100644
index 000000000000..b30de28d91b1
--- /dev/null
+++ b/www/py-pywebview-qt/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1730049620
+SHA256 (pywebview-5.3.2.tar.gz) = 77b88a63e65e12913d269205e9c6d357666d4864826749c738bf432bd3ad23d9
+SIZE (pywebview-5.3.2.tar.gz) = 443072
diff --git a/www/py-pywebview-qt/files/patch-webview_guilib.py b/www/py-pywebview-qt/files/patch-webview_guilib.py
new file mode 100644
index 000000000000..072cd2d04a60
--- /dev/null
+++ b/www/py-pywebview-qt/files/patch-webview_guilib.py
@@ -0,0 +1,20 @@
+--- webview/guilib.py.orig	2024-10-27 17:42:14 UTC
++++ webview/guilib.py
+@@ -114,7 +114,7 @@ def initialize(forced_gui: GUIType | None = None):
+     elif hasattr(sys, 'getandroidapilevel'):
+         try_import([import_android])
+ 
+-    elif platform.system() == 'Linux' or platform.system() == 'OpenBSD':
++    elif platform.system() == 'Linux' or platform.system() == 'OpenBSD' or platform.system() == 'FreeBSD':
+         if forced_gui == 'qt':
+             guis = [import_qt, import_gtk]
+         else:
+@@ -135,7 +135,7 @@ def initialize(forced_gui: GUIType | None = None):
+             raise WebViewException('You must have pythonnet installed in order to use pywebview.')
+     else:
+         raise WebViewException(
+-            'Unsupported platform. Only Windows, Linux, OS X, OpenBSD are supported.'
++            'Unsupported platform. Only Windows, Linux, OS X, OpenBSD, FreeBSD are supported.'
+         )
+ 
+     guilib.setup_app()
diff --git a/www/py-pywebview-qt/pkg-descr b/www/py-pywebview-qt/pkg-descr
new file mode 100644
index 000000000000..dd8643f9f8b9
--- /dev/null
+++ b/www/py-pywebview-qt/pkg-descr
@@ -0,0 +1,7 @@
+pywebview is a lightweight cross-platform wrapper around a webview
+component that allows to display HTML content in its own native GUI
+window. It gives you the power of web technologies in your desktop
+application, hiding the fact that the GUI is browser based. Available
+for Windows, macOS, Linux and Android. You can use pywebview either
+with a 3rd party web framework or on its own with a two way bridge
+between Python and DOM.
diff --git a/www/py-pywebview-qt/pkg-message b/www/py-pywebview-qt/pkg-message
new file mode 100644
index 000000000000..9a68da360c97
--- /dev/null
+++ b/www/py-pywebview-qt/pkg-message
@@ -0,0 +1,8 @@
+[
+{ type: install
+  message: <<EOM
+If the error 'Could not initialize GLX' is displayed, set the 'QT_XCB_GL_INTEGRATION=none'
+environment variable or install 'graphics/mesa-dri' and add your user to the 'video' group.
+EOM
+}
+]