diff options
author | bill-auger <mr.j.spam.me@gmail.com> | 2024-04-19 21:57:50 -0400 |
---|---|---|
committer | bill-auger <mr.j.spam.me@gmail.com> | 2024-04-24 03:35:36 -0400 |
commit | 75e1f5b58b3a4d2b0fff25ebb43c984f2f711efb (patch) | |
tree | b36b06f92dcf25661c7a38e01551fc562006ddcc | |
parent | 5cefac87a7d28b75ce2ccb9ef54bb5cff4d7a123 (diff) |
freecad: rebuild against QT6
-rw-r--r-- | libre/freecad/62c3836c.patch | 83 | ||||
-rw-r--r-- | libre/freecad/PKGBUILD | 36 | ||||
-rw-r--r-- | libre/freecad/pyside6.patch | 121 |
3 files changed, 227 insertions, 13 deletions
diff --git a/libre/freecad/62c3836c.patch b/libre/freecad/62c3836c.patch new file mode 100644 index 000000000..fb180755b --- /dev/null +++ b/libre/freecad/62c3836c.patch @@ -0,0 +1,83 @@ +From 62c3836c97a56db24e3ef567a31eba2d0893b945 Mon Sep 17 00:00:00 2001 +From: Ladislav Michl <ladis@linux-mips.org> +Date: Tue, 23 Jan 2024 12:46:32 +0100 +Subject: [PATCH] Addon Manager: Qt6 fixes + +--- + src/Mod/AddonManager/addonmanager_utilities.py | 4 ++-- + src/Mod/AddonManager/change_branch.py | 2 +- + src/Mod/AddonManager/package_details.py | 7 +++---- + src/Mod/AddonManager/package_list.py | 7 +++---- + 4 files changed, 9 insertions(+), 11 deletions(-) + +diff --git a/src/Mod/AddonManager/addonmanager_utilities.py b/src/Mod/AddonManager/addonmanager_utilities.py +index 9ceabc2e9add..183a2047b086 100644 +--- a/src/Mod/AddonManager/addonmanager_utilities.py ++++ b/src/Mod/AddonManager/addonmanager_utilities.py +@@ -36,7 +36,7 @@ + from urllib.parse import urlparse + + try: +- from PySide import QtCore, QtWidgets ++ from PySide import QtCore, QtGui, QtWidgets + except ImportError: + QtCore = None + QtWidgets = None +@@ -245,7 +245,7 @@ def get_readme_html_url(repo): + def is_darkmode() -> bool: + """Heuristics to determine if we are in a darkmode stylesheet""" + pl = fci.FreeCADGui.getMainWindow().palette() +- return pl.color(pl.Background).lightness() < 128 ++ return pl.color(QtGui.QPalette.Window).lightness() < 128 + + + def warning_color_string() -> str: +diff --git a/src/Mod/AddonManager/change_branch.py b/src/Mod/AddonManager/change_branch.py +index 332795a22afc..ebe1819bc755 100644 +--- a/src/Mod/AddonManager/change_branch.py ++++ b/src/Mod/AddonManager/change_branch.py +@@ -216,7 +216,7 @@ def data(self, index: QtCore.QModelIndex, role: int = QtCore.Qt.DisplayRole): + dd = self.display_data[row] + if column == 3 or column == 4: + if dd[column] is not None: +- qdate = QtCore.QDateTime.fromTime_t(dd[column]) ++ qdate = QtCore.QDateTime.fromSecsSinceEpoch(dd[column]) + return QtCore.QLocale().toString(qdate, QtCore.QLocale.ShortFormat) + elif column < len(dd): + return dd[column] +diff --git a/src/Mod/AddonManager/package_details.py b/src/Mod/AddonManager/package_details.py +index 93dfb8bee962..8310b5e90343 100644 +--- a/src/Mod/AddonManager/package_details.py ++++ b/src/Mod/AddonManager/package_details.py +@@ -133,10 +133,9 @@ def display_repo_status(self, status): + date = "" + installed_version_string = "<h3>" + if repo.updated_timestamp: +- date = ( +- QtCore.QDateTime.fromTime_t(repo.updated_timestamp) +- .date() +- .toString(QtCore.Qt.SystemLocaleShortDate) ++ date = QtCore.QLocale().toString( ++ QtCore.QDateTime.fromSecsSinceEpoch(int(round(repo.updated_timestamp, 0))), ++ QtCore.QLocale.ShortFormat, + ) + if version and date: + installed_version_string += ( +diff --git a/src/Mod/AddonManager/package_list.py b/src/Mod/AddonManager/package_list.py +index a9dd3dc59856..d26b4f5489c3 100644 +--- a/src/Mod/AddonManager/package_list.py ++++ b/src/Mod/AddonManager/package_list.py +@@ -465,10 +465,9 @@ def get_expanded_update_string(repo: Addon) -> str: + installed_date_string = ( + "<br/>" + translate("AddonsInstaller", "Installed on") + ": " + ) +- installed_date_string += ( +- QtCore.QDateTime.fromTime_t(repo.updated_timestamp) +- .date() +- .toString(QtCore.Qt.SystemLocaleShortDate) ++ installed_date_string += QtCore.QLocale().toString( ++ QtCore.QDateTime.fromSecsSinceEpoch(int(round(repo.updated_timestamp, 0))), ++ QtCore.QLocale.ShortFormat, + ) + + available_version_string = "" diff --git a/libre/freecad/PKGBUILD b/libre/freecad/PKGBUILD index a19490ae6..56d711344 100644 --- a/libre/freecad/PKGBUILD +++ b/libre/freecad/PKGBUILD @@ -10,6 +10,7 @@ # Contributor: gborzi # Contributor: Adrian Insaurralde # Maintainer: Parabola Hackers <dev@lists.parabola.nu> +# Contributor: bill-auger <bill-auger@programmer.net> # parabola changes and rationale: @@ -25,33 +26,38 @@ pkgname=freecad pkgver=0.21.2 -pkgrel=3 -pkgrel+=.parabola2 +pkgrel=16 +pkgrel+=.parabola1 pkgdesc='Feature based parametric 3D CAD modeler' arch=(x86_64) arch+=(armv7h) # 'med-openmpi' is unavailable for i686 url='https://freecadweb.org/' license=(LGPL) depends=(boost-libs coin fmt glew jsoncpp libspnav med-openmpi netcdf - opencascade openmpi pugixml pyside2 pyside2-tools python-gitpython + opencascade openmpi pugixml pyside6 python-gitpython python-markdown python-matplotlib python-pip python-pivy python-ply - python-yaml qt5-svg qt5-tools qt5-webengine qt5-x11extras - qt5-xmlpatterns xerces-c verdict) -depends=( ${depends[*]/python-pip/} ) # build without pip -depends=( ${depends[*]/qt5-webengine/qt5-webkit} ) # build without webengine + python-yaml qt6-svg qt6-tools qt6-webengine + xerces-c verdict) +depends=( ${depends[*]/python-pip/} ) # build without pip +depends=( ${depends[*]/qt6-webengine/} ) # build without webengine makedepends=(boost cgns cmake eigen git libharu liblas ninja openvdb openvr - ospray pdal postgresql-libs python-mpi4py python-shiboken2 - qt5-webengine shiboken2 swig utf8cpp nlohmann-json) -makedepends=( ${makedepends[*]/qt5-webengine/} ) # redundant entry + ospray pdal postgresql-libs python-mpi4py + shiboken6 swig utf8cpp nlohmann-json) makedepends=( ${makedepends[*]/git/} ) # build from source-ball [[ "${CARCH}" == x86_64 ]] || makedepends=( ${makedepends[*]/ospray/} ) # unavailable for i686 and armv7h optdepends=('graphviz: dependency graph support' 'openscad: OpenSCAD support') source=(${pkgname}-${pkgver}.tar.gz::https://github.com/${pkgname}/${pkgname}/archive/refs/tags/${pkgver}.tar.gz # build from source-ball - freecad-vtk9.3.patch) # tag: 0.21.1 + freecad-vtk9.3.patch + pyside6.patch + 62c3836c.patch + https://github.com/FreeCAD/FreeCAD/commit/6043c904.patch) source+=(branding.xml) b2sums=('84a4f8008192cd1a2ee1737b537b2668a8c028aa8c8645e6e412ab9ef79bf3bdd2cb73d96fcfd2dbcff613cdcc59cbab95821406acdc9cd7d4eb4636c081be78' - 'f0b5a4648eb4befabb2339bae4e42044e436aa50ad1c2a25b243c965272a217b2c1c69c34d0d20bd01c573008de10f733b74857ffecac502b8558a7095e305e5') + 'f0b5a4648eb4befabb2339bae4e42044e436aa50ad1c2a25b243c965272a217b2c1c69c34d0d20bd01c573008de10f733b74857ffecac502b8558a7095e305e5' + '63bfac252cc813f4e2454b4bbd8b0c55e2882566bd39bf1d0b812bafc305cad6b65293bad4f3c043b58df93a2c685e82e5853059335fe8e90531dcbc23e324e9' + 'eb474708c3611293cfe3dfc287418b606f7735f6eb306f44f7394cd7e65256daddcee35984211982f25064e7ec81cc038d4eeb8d34af7399058ecfb6e8e99e9f' + 'de4b98c4b488045f9810dce124c271d6f4f629922e026f2d4f1efd6c9060b92309db41f8e0f6ebe5e7a27399911ac908cc8935c2501214326dbb1c4b739d46cc') b2sums+=('eb678f8bed6e11544bc7fb31205acbeaa0904c63d1828a0574900dcaeae453c7dacf5beaceeac5e2f951b8d46dfc5ae11ccd1b4a876f8809f81d76c71fc22e6a') @@ -112,6 +118,11 @@ prepare() { ln -fs FreeCAD-${pkgver} ${pkgname} # link source-ball root dir as VCS root dirname patch -d freecad -Np1 -i "$srcdir"/freecad-vtk9.3.patch + patch -d freecad -Np1 -i ../62c3836c.patch # Fix Qt6 issues in addons manager + patch -d freecad -Np1 -i ../pyside6.patch + patch -d freecad -Np1 -i ../6043c904.patch # Fix build with Python 3.12 + sed -e 's|Shiboken::Module::getTypes(requiredModule)|reinterpret_cast<PyTypeObject **>(Shiboken::Module::getTypes(requiredModule))|' \ + -i freecad/src/Gui/PythonWrapper.cpp # Fix build with PySide 6.7 } build() { @@ -123,7 +134,6 @@ build() { -B build \ -D BUILD_ENABLE_CXX_STD=C++17 \ -D BUILD_FLAT_MESH=ON \ - -D BUILD_QT5=ON \ -D CMAKE_BUILD_TYPE=Release \ -D CMAKE_C_FLAGS="$CFLAGS -ffat-lto-objects -fPIC -w" \ -D CMAKE_CXX_FLAGS="$CXXFLAGS -ffat-lto-objects -fPIC -w" \ diff --git a/libre/freecad/pyside6.patch b/libre/freecad/pyside6.patch new file mode 100644 index 000000000..658464682 --- /dev/null +++ b/libre/freecad/pyside6.patch @@ -0,0 +1,121 @@ +diff --git a/src/Mod/AddonManager/package_details.py b/src/Mod/AddonManager/package_details.py +index c9d1ae311a..9c0e040ea5 100644 +--- a/src/Mod/AddonManager/package_details.py ++++ b/src/Mod/AddonManager/package_details.py +@@ -26,7 +26,7 @@ + import os + from typing import Optional + +-from PySide import QtCore, QtGui, QtWidgets ++from PySide6 import QtCore, QtGui, QtWidgets + + import addonmanager_freecad_interface as fci + +@@ -51,14 +51,14 @@ translate = fci.translate + show_javascript_console_output = False + + try: +- from PySide import QtWebEngineWidgets ++ from PySide6 import QtWebEngineCore, QtWebEngineWidgets + + HAS_QTWEBENGINE = True + except ImportError: + fci.Console.PrintWarning( + translate( + "AddonsInstaller", +- "Addon Manager Warning: Could not import QtWebEngineWidgets -- README data will display as text-only", ++ "Addon Manager Warning: Could not import QtWebEngineCore -- README data will display as text-only", + ) + + "\n" + ) +@@ -715,14 +714,14 @@ class PackageDetails(QtWidgets.QWidget): + + if HAS_QTWEBENGINE: + +- class RestrictedWebPage(QtWebEngineWidgets.QWebEnginePage): ++ class RestrictedWebPage(QtWebEngineCore.QWebEnginePage): + """A class that follows links to FreeCAD wiki pages, but opens all other + clicked links in the system web browser""" + + def __init__(self, parent): + super().__init__(parent) + self.settings().setAttribute( +- QtWebEngineWidgets.QWebEngineSettings.ErrorPageEnabled, False ++ QtWebEngineCore.QWebEngineSettings.ErrorPageEnabled, False + ) + self.stored_url = None + +@@ -731,7 +730,7 @@ if HAS_QTWEBENGINE: + navigation requests to the FreeCAD Wiki (for translation purposes) -- + anything else will open in a new window. + """ +- if _type == QtWebEngineWidgets.QWebEnginePage.NavigationTypeLinkClicked: ++ if _type == QtWebEngineCore.QWebEnginePage.NavigationTypeLinkClicked: + # See if the link is to a FreeCAD Wiki page -- if so, follow it, + # otherwise ask the OS to open it + if ( +@@ -754,11 +753,11 @@ if HAS_QTWEBENGINE: + global show_javascript_console_output + if show_javascript_console_output: + tag = translate("AddonsInstaller", "Page JavaScript reported") +- if level == QtWebEngineWidgets.QWebEnginePage.InfoMessageLevel: ++ if level == QtWebEngineCore.QWebEnginePage.InfoMessageLevel: + fci.Console.PrintMessage(f"{tag} {lineNumber}: {message}\n") +- elif level == QtWebEngineWidgets.QWebEnginePage.WarningMessageLevel: ++ elif level == QtWebEngineCore.QWebEnginePage.WarningMessageLevel: + fci.Console.PrintWarning(f"{tag} {lineNumber}: {message}\n") +- elif level == QtWebEngineWidgets.QWebEnginePage.ErrorMessageLevel: ++ elif level == QtWebEngineCore.QWebEnginePage.ErrorMessageLevel: + fci.Console.PrintError(f"{tag} {lineNumber}: {message}\n") + + def _reload_stored_url(self): +diff --git a/src/Mod/AddonManager/AddonManager.py b/src/Mod/AddonManager/AddonManager.py +index cb8bb63d8a..7445173537 100644 +--- a/src/Mod/AddonManager/AddonManager.py ++++ b/src/Mod/AddonManager/AddonManager.py +@@ -427,15 +427,15 @@ class CommandAddonManager: + "You must restart FreeCAD for changes to take effect.", + ) + ) +- m.setIcon(m.Warning) +- m.setStandardButtons(m.Ok | m.Cancel) +- m.setDefaultButton(m.Cancel) ++ m.setIcon(m.Icon.Warning) ++ m.setStandardButtons(m.StandardButton.Ok | m.StandardButton.Cancel) ++ m.setDefaultButton(m.StandardButton.Cancel) + okBtn = m.button(QtWidgets.QMessageBox.StandardButton.Ok) + cancelBtn = m.button(QtWidgets.QMessageBox.StandardButton.Cancel) + okBtn.setText(translate("AddonsInstaller", "Restart now")) + cancelBtn.setText(translate("AddonsInstaller", "Restart later")) + ret = m.exec_() +- if ret == m.Ok: ++ if ret == m.StandardButton.Ok: + # restart FreeCAD after a delay to give time to this dialog to close + QtCore.QTimer.singleShot(1000, utils.restart_freecad) + +diff --git a/src/Mod/Arch/importIFClegacy.py b/src/Mod/Arch/importIFClegacy.py +index 8935233f09..20c395ed9d 100644 +--- a/src/Mod/Arch/importIFClegacy.py ++++ b/src/Mod/Arch/importIFClegacy.py +@@ -1800,7 +1800,7 @@ def explorer(filename,schema="IFC2X3_TC1.exp"): + tree.headerItem().setText(1, "") + tree.headerItem().setText(2, "Item and Properties") + bold = QtGui.QFont() +- bold.setWeight(75) ++ bold.setWeight(QtGui.QFont.Weight(75)) + bold.setBold(True) + + #print(ifc.Entities) +diff --git a/src/Mod/Draft/DraftGui.py b/src/Mod/Draft/DraftGui.py +index b19101e9ca..b44425e012 100644 +--- a/src/Mod/Draft/DraftGui.py ++++ b/src/Mod/Draft/DraftGui.py +@@ -406,7 +406,7 @@ class DraftToolBar: + self.promptlabel = self._label("promptlabel", self.layout, hide=task) + self.cmdlabel = self._label("cmdlabel", self.layout, hide=task) + boldtxt = QtGui.QFont() +- boldtxt.setWeight(75) ++ boldtxt.setWeight(QtGui.QFont.Weight(75)) + boldtxt.setBold(True) + self.cmdlabel.setFont(boldtxt) + |