summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbill-auger <mr.j.spam.me@gmail.com>2024-04-19 21:57:50 -0400
committerbill-auger <mr.j.spam.me@gmail.com>2024-04-24 03:35:36 -0400
commit75e1f5b58b3a4d2b0fff25ebb43c984f2f711efb (patch)
treeb36b06f92dcf25661c7a38e01551fc562006ddcc
parent5cefac87a7d28b75ce2ccb9ef54bb5cff4d7a123 (diff)
freecad: rebuild against QT6
-rw-r--r--libre/freecad/62c3836c.patch83
-rw-r--r--libre/freecad/PKGBUILD36
-rw-r--r--libre/freecad/pyside6.patch121
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)
+