commit:     df20c4dd9eb75148b975b870f4b498fe267bca38
Author:     Paul Zander <negril.nx+gentoo <AT> gmail <DOT> com>
AuthorDate: Fri May 23 20:19:46 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Fri Aug  1 08:08:08 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=df20c4dd

media-gfx/freecad: add 1.0.1, update 9999

Freecad doesn't properly clean up object references, leading to assert failures
with qt-6.9 and python-3.13. So we need dev-lang/python[-debug] to avoid asserts
and allow python-3.13. Add postinst message warning about the issue.

Revisit missing and obsolete dependencies.

Append ldflags only for bfd linker.

Move the install location to /usr/$(get_libdir)/freecad, so that
running tests becomes viable.

Set vars so freecad --version reports useful info.

Revamp the test phase to improve error handling.

Drop obsolete freecad-thumbnailer code, it is installed via cmake now.

Closes: https://bugs.gentoo.org/957532
Closes: https://bugs.gentoo.org/952517
Signed-off-by: Paul Zander <negril.nx+gentoo <AT> gmail.com>
Part-of: https://github.com/gentoo/gentoo/pull/43083
Signed-off-by: Sam James <sam <AT> gentoo.org>

 media-gfx/freecad/Manifest                         |   2 +
 .../files/freecad-1.0.1-opencascade-7.9.0.patch    |  24 +++
 ...-src-Qt-only-build-test-for-BUILD_GUI-ON.patch} |   0
 ...s-src-Qt-only-build-test-for-BUILD_GUI-ON.patch |  32 +++-
 .../{freecad-9999.ebuild => freecad-1.0.1.ebuild}  | 210 +++++++++++++--------
 media-gfx/freecad/freecad-9999.ebuild              | 203 ++++++++++++--------
 6 files changed, 302 insertions(+), 169 deletions(-)

diff --git a/media-gfx/freecad/Manifest b/media-gfx/freecad/Manifest
index d8eb55b255f4..c371ec6f757f 100644
--- a/media-gfx/freecad/Manifest
+++ b/media-gfx/freecad/Manifest
@@ -1,3 +1,5 @@
 DIST freecad-1.0.0.tar.gz 91599325 BLAKE2B 
65540eb42e7d508456c9edbf2122e0f288708c33e6d00d3c8c45550e7a614f658f91ba25978a66819bc094b7138aab72a89c0172d0841be1ff798ade5a8bdc64
 SHA512 
afc1079ea04fd5bb8135f8ad1012d9e4e05c8839dd0a4e00253eada58fe018f445c1200d1ca7ac9f268644c946cbf55b7b313dc3d6bd010f9da3a3334103b7db
+DIST freecad-1.0.1.tar.gz 91625067 BLAKE2B 
059246ba4f9424fbd6f01455975cd4413660239cd2553ec7f685aa84dec47fddcdffd90269996a877ae44df460c75d345300872a179ffa0f149cb748b17444c0
 SHA512 
69a82c0af45137079b1ce184a4a3df475c005da66b4a4cab17371a1f62432b13f721e3da8b350b3ad50125c939cdfa5fed477e0605d52bd8fcee3c528931a185
 DIST freecad-18423.patch 3094 BLAKE2B 
a5f4d1b7767e14ae61052348d57fcdaa4f73d2356daea1d2b89b3629faf92aadc1b1fd5c94443f1a5cc9917cf2026a19c28de990506b8da5886863354e581dc9
 SHA512 
a4dec8c9e6ac489c81cf7d4b81090614880a94664a0844c2ceab472fd410364aab555287f3233c965791d9fbf72f6faa36645910cc0f8bfcb9fa1d34c29f6a69
 DIST freecad-20710.patch 902 BLAKE2B 
ce69e5714c06e969bd533c54be9f7de0c23fc881a5259979c444aecc1f5cbb175b01c7a61bf3ebc35e0eeb7f9aabfba729499e449cbf2a06055df6aecc8465cd
 SHA512 
1df1b0941d1ccbf9aef0f882cd17e647448acb9267a2fae503b4427b80620374e5d4e1a1bb651fab8b631db3ff4d53748951d75e244a9ffddda817b6d4971a84
+DIST freecad-22221.patch 7118 BLAKE2B 
b8432e7eafe265fda739a94eb0d6a2e644afe510e79fc1bed46d09defe5fdbb57d6bef206e292fa912b6a34242ecdb14c1fe5d8c3ebfc74330d8b4e0042fdb39
 SHA512 
23f914b27f28fe72829a31b8d646fcdc2241c3541a5d13eab34a7acbc88bdbbe2b7447aa6e0768a98dcb72c61f802aab5efbdd194b4d6db3997475231aad71f9

diff --git a/media-gfx/freecad/files/freecad-1.0.1-opencascade-7.9.0.patch 
b/media-gfx/freecad/files/freecad-1.0.1-opencascade-7.9.0.patch
new file mode 100644
index 000000000000..3181b71a924e
--- /dev/null
+++ b/media-gfx/freecad/files/freecad-1.0.1-opencascade-7.9.0.patch
@@ -0,0 +1,24 @@
+From 172546f3ca58fd1a861fd1efe0c30c89cf74a56d Mon Sep 17 00:00:00 2001
+From: chris <[email protected]>
+Date: Sun, 18 May 2025 12:41:59 -0500
+Subject: [PATCH] fix for #20656
+
+---
+ cMake/FindOCC.cmake | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/cMake/FindOCC.cmake b/cMake/FindOCC.cmake
+index 2b084e3a5616..b6b742fcc472 100644
+--- a/cMake/FindOCC.cmake
++++ b/cMake/FindOCC.cmake
+@@ -110,6 +110,10 @@ if (OCC_FOUND)
+             TKHLR
+             TKFeat
+     )
++    if (OCC_VERSION_STRING VERSION_GREATER_EQUAL 7.9.0)
++        list(APPEND OCC_LIBRARIES TKExpress)
++    endif ()
++
+     set(OCC_OCAF_LIBRARIES
+             TKBin
+             TKBinL

diff --git 
a/media-gfx/freecad/files/freecad-9999-tests-src-Qt-only-build-test-for-BUILD_GUI-ON.patch
 
b/media-gfx/freecad/files/freecad-1.0.1-tests-src-Qt-only-build-test-for-BUILD_GUI-ON.patch
similarity index 100%
copy from 
media-gfx/freecad/files/freecad-9999-tests-src-Qt-only-build-test-for-BUILD_GUI-ON.patch
copy to 
media-gfx/freecad/files/freecad-1.0.1-tests-src-Qt-only-build-test-for-BUILD_GUI-ON.patch

diff --git 
a/media-gfx/freecad/files/freecad-9999-tests-src-Qt-only-build-test-for-BUILD_GUI-ON.patch
 
b/media-gfx/freecad/files/freecad-9999-tests-src-Qt-only-build-test-for-BUILD_GUI-ON.patch
index 3eb2e79c4c3d..89ac7d02a16c 100644
--- 
a/media-gfx/freecad/files/freecad-9999-tests-src-Qt-only-build-test-for-BUILD_GUI-ON.patch
+++ 
b/media-gfx/freecad/files/freecad-9999-tests-src-Qt-only-build-test-for-BUILD_GUI-ON.patch
@@ -1,20 +1,38 @@
+From 9e10e873affcadbad27b0b71a7a4bb9bb7644ba4 Mon Sep 17 00:00:00 2001
+From: Paul Zander <[email protected]>
+Date: Mon, 14 Jul 2025 15:18:26 +0200
+Subject: [PATCH] tests src Qt only build test for BUILD_GUI=ON
+
+Signed-off-by: Paul Zander <[email protected]>
+
+diff --git a/tests/src/Base/CMakeLists.txt b/tests/src/Base/CMakeLists.txt
+index 0bdc34ba5c..850772b5b3 100644
 --- a/tests/src/Base/CMakeLists.txt
 +++ b/tests/src/Base/CMakeLists.txt
-@@ -11,4 +11,6 @@ target_sources(
-             ${CMAKE_CURRENT_SOURCE_DIR}/tst_Tools.cpp
+@@ -30,7 +30,9 @@ add_executable(Base_tests_run
+         Writer.cpp
  )
  
--setup_qt_test(InventorBuilder)
 +if(BUILD_GUI)
-+    setup_qt_test(InventorBuilder)
+ setup_qt_test(InventorBuilder)
 +endif()
+ 
+ target_link_libraries(Base_tests_run PRIVATE
+     GTest::gtest_main
+diff --git a/tests/src/Gui/CMakeLists.txt b/tests/src/Gui/CMakeLists.txt
+index bf6b87d0fd..0b186fbf5c 100644
 --- a/tests/src/Gui/CMakeLists.txt
 +++ b/tests/src/Gui/CMakeLists.txt
-@@ -6,4 +6,6 @@ target_sources(
+@@ -8,7 +8,9 @@ add_executable(Gui_tests_run
  )
  
  # Qt tests
--setup_qt_test(QuantitySpinBox)
 +if(BUILD_GUI)
-+    setup_qt_test(QuantitySpinBox)
+ setup_qt_test(QuantitySpinBox)
 +endif()
+ 
+ 
+ target_link_libraries(Gui_tests_run PRIVATE
+-- 
+2.50.1
+

diff --git a/media-gfx/freecad/freecad-9999.ebuild 
b/media-gfx/freecad/freecad-1.0.1.ebuild
similarity index 75%
copy from media-gfx/freecad/freecad-9999.ebuild
copy to media-gfx/freecad/freecad-1.0.1.ebuild
index 6d2d43adf512..1e5f622c62de 100644
--- a/media-gfx/freecad/freecad-9999.ebuild
+++ b/media-gfx/freecad/freecad-1.0.1.ebuild
@@ -5,6 +5,10 @@ EAPI=8
 
 PYTHON_COMPAT=( python3_{11..13} )
 
+# https://github.com/FreeCAD/FreeCAD/issues/19066
+# The added asserts break on mem leaks, so tests fail.
+# PYTHON_REQ_USE="-debug"
+
 inherit check-reqs cmake cuda edo flag-o-matic optfeature python-single-r1 
qmake-utils toolchain-funcs xdg virtualx
 
 DESCRIPTION="Qt based Computer Aided Design application"
@@ -15,10 +19,13 @@ MY_PN=FreeCAD
 if [[ ${PV} == *9999* ]]; then
        inherit git-r3
        EGIT_REPO_URI="https://github.com/${MY_PN}/${MY_PN}.git";
+       EGIT_SUBMODULES=( 'src/Mod/AddonManager' )
        S="${WORKDIR}/freecad-${PV}"
 else
        SRC_URI="
                
https://github.com/${MY_PN}/${MY_PN}/archive/refs/tags/${PV}.tar.gz -> 
${P}.tar.gz
+               
https://github.com/FreeCAD/FreeCAD/commit/d91b3e051789623f0bc1eff65947c361e7a661d0.patch
 -> ${PN}-20710.patch
+               
https://github.com/FreeCAD/FreeCAD/commit/3d2b7dc9c7ac898b30fe469b7cbd424ed1bca0a2.patch
 -> ${PN}-22221.patch
        "
        KEYWORDS="~amd64"
        S="${WORKDIR}/FreeCAD-${PV}"
@@ -52,10 +59,12 @@ REQUIRED_USE="
 
 RESTRICT="!test? ( test )"
 
+# if opencascade[tbb], we link to tbb
+# if vtk[cuda], we use cuda
 RDEPEND="
        ${PYTHON_DEPS}
-       dev-cpp/gtest
-       dev-cpp/yaml-cpp
+       dev-cpp/tbb:=
+       dev-cpp/yaml-cpp:=
        dev-libs/boost:=
        dev-libs/libfmt:=
        dev-libs/xerces-c:=[icu]
@@ -65,7 +74,7 @@ RDEPEND="
        sys-libs/zlib
        $(python_gen_cond_dep '
                dev-python/numpy[${PYTHON_USEDEP}]
-               dev-python/pybind11[${PYTHON_USEDEP}]
+               <dev-python/pybind11-3[${PYTHON_USEDEP}]
                dev-python/pyyaml[${PYTHON_USEDEP}]
        ')
        assembly? ( sci-libs/ondselsolver )
@@ -87,7 +96,6 @@ RDEPEND="
                        >=dev-python/pivy-0.6.5[${PYTHON_USEDEP}]
                        
dev-python/pyside:6=[uitools(-),gui,svg,${PYTHON_USEDEP}]
                ' )
-               virtual/glu
                virtual/opengl
                spacenav? ( dev-libs/libspnav[X?] )
        )
@@ -95,7 +103,6 @@ RDEPEND="
        openscad? ( $(python_gen_cond_dep 'dev-python/ply[${PYTHON_USEDEP}]') )
        pcl? ( sci-libs/pcl:= )
        smesh? (
-               sci-libs/hdf5:=[zlib]
                >=sci-libs/med-4.0.0-r1
                sci-libs/vtk:=
        )
@@ -104,23 +111,36 @@ DEPEND="${RDEPEND}
        >=dev-cpp/eigen-3.3.1:3
        dev-cpp/ms-gsl
        test? (
+               $(python_gen_impl_dep '-debug')
+               $(python_gen_cond_dep '
+                       sci-libs/vtk[python,${PYTHON_SINGLE_USEDEP}]
+               ' )
                gui? (
                        $(python_gen_cond_dep '
-                               dev-python/pyside:6=[tools(-),${PYTHON_USEDEP}]
+                               dev-python/pyside:6[tools(-),${PYTHON_USEDEP}]
                        ' )
                )
+               dev-cpp/gtest
        )
 "
 BDEPEND="
        dev-lang/swig
-       test? ( dev-cpp/gtest )
+       test? (
+               gui? (
+                       $(python_gen_cond_dep '
+                               dev-python/pytest[${PYTHON_USEDEP}]
+                               dev-python/typing-extensions[${PYTHON_USEDEP}]
+                       ' )
+               )
+       )
 "
 
 PATCHES=(
-       "${FILESDIR}"/${PN}-9999-Gentoo-specific-don-t-check-vcs.patch
+       "${FILESDIR}"/${PN}-1.0.0-r1-Gentoo-specific-don-t-check-vcs.patch
        
"${FILESDIR}"/${PN}-0.21.0-0001-Gentoo-specific-disable-ccache-usage.patch
-       
"${FILESDIR}"/${PN}-9999-tests-src-Qt-only-build-test-for-BUILD_GUI-ON.patch
-       
"${FILESDIR}/${PN}-1.0.0-r4-error-cannot-convert-bool-to-App-DocumentInitFlags.patch"
+       
"${FILESDIR}"/${PN}-1.0.1-tests-src-Qt-only-build-test-for-BUILD_GUI-ON.patch
+       "${DISTDIR}/${PN}-20710.patch" # DESTDIR in env
+       "${DISTDIR}/${PN}-22221.patch" # vtk-9.5
 )
 
 DOCS=( CODE_OF_CONDUCT.md README.md )
@@ -244,6 +264,11 @@ src_prepare() {
        sed -e '/import imghdr/d' -i src/Mod/CAM/CAMTests/TestCAMSanity.py || 
die
 
        cmake_src_prepare
+
+       if ! grep -q TKExpress cMake/FindOCC.cmake ; then
+               eqawarn "Applying opencascade-7.9.0 patch"
+               eapply -l "${FILESDIR}/${PN}-1.0.1-opencascade-7.9.0.patch"
+       fi
 }
 
 src_configure() {
@@ -254,15 +279,10 @@ src_configure() {
        filter-lto
 
        # Fix building tests
-       if ! tc-ld-is-mold; then # 940524
+       if tc-ld-is-bfd; then # 940524
                append-ldflags -Wl,--copy-dt-needed-entries
        fi
 
-       # cmake-4
-       # https://github.com/FreeCAD/FreeCAD/issues/20246
-       : "${CMAKE_POLICY_VERSION_MINIMUM:=3.10}"
-       export CMAKE_POLICY_VERSION_MINIMUM
-
        local mycmakeargs=(
                -DCMAKE_POLICY_DEFAULT_CMP0144="OLD" # FLANN_ROOT
                -DCMAKE_POLICY_DEFAULT_CMP0167="OLD" # FindBoost
@@ -293,6 +313,7 @@ src_configure() {
                -DBUILD_INSPECTION=$(usex inspection)
                -DBUILD_JTREADER=OFF                                    # uses 
an old proprietary library
                -DBUILD_MATERIAL=ON
+               -DBUILD_MATERIAL_EXTERNAL=ON
                -DBUILD_MEASURE=ON
                -DBUILD_MESH=$(usex mesh)
                -DBUILD_MESH_PART=$(usex mesh)
@@ -314,13 +335,17 @@ src_configure() {
                -DBUILD_TUX=$(usex gui)
                -DBUILD_WEB=ON                                                  
# needed by start workspace
 
-               -DCMAKE_INSTALL_DATADIR=/usr/share/${PN}/data
-               -DCMAKE_INSTALL_DOCDIR=/usr/share/doc/${PF}
-               -DCMAKE_INSTALL_INCLUDEDIR=/usr/include/${PN}
-               -DCMAKE_INSTALL_PREFIX=/usr/$(get_libdir)/${PN}
+               # do not set these or tests fail
+               # -DCMAKE_INSTALL_DATADIR=share/${PN}/data
+               # -DCMAKE_INSTALL_DOCDIR=share/doc/${PF}
+               # -DCMAKE_INSTALL_INCLUDEDIR=include/${PN}
+               # -DCMAKE_INSTALL_PREFIX=/usr/$(get_libdir)/${PN}
+               -DCMAKE_INSTALL_PREFIX="${EPREFIX}/usr/$(get_libdir)/${PN}"
 
                -DFREECAD_BUILD_DEBIAN=OFF
 
+               -DFREECAD_USE_EXTERNAL_E57FORMAT="no"
+               -DFREECAD_USE_EXTERNAL_GTEST="yes"
                -DFREECAD_USE_EXTERNAL_ONDSELSOLVER=$(usex assembly)
                -DFREECAD_USE_EXTERNAL_SMESH=OFF                # no package in 
Gentoo
                -DFREECAD_USE_EXTERNAL_ZIPIOS=OFF               # doesn't work 
yet, also no package in Gentoo tree
@@ -339,18 +364,21 @@ src_configure() {
                # Use the version of pyside[tools] that matches the selected 
python version
                -DPYTHON_CONFIG_SUFFIX="-${EPYTHON}"
                # -DPython3_EXECUTABLE=${EPYTHON}
-
-               -DPACKAGE_WCREF="%{release} (Git)"
-               -DPACKAGE_WCURL="git://github.com/FreeCAD/FreeCAD.git main"
        )
 
        if [[ ${PV} == *9999* ]]; then
                mycmakeargs+=(
                        -DENABLE_DEVELOPER_TESTS=ON
+
+                       -DPACKAGE_WCREF="%{release} (Git)"
+                       -DPACKAGE_WCURL="git://github.com/FreeCAD/FreeCAD.git 
main"
                )
        else
                mycmakeargs+=(
                        -DENABLE_DEVELOPER_TESTS=OFF
+
+                       -DPACKAGE_WCREF="${PVR} (gentoo)"
+                       -DPACKAGE_WCURL="git://github.com/FreeCAD/FreeCAD.git 
${PV}"
                )
        fi
 
@@ -391,9 +419,6 @@ src_configure() {
                )
        fi
 
-       addpredict "/dev/char/"
-       [[ -c "/dev/udmabuf" ]] && addwrite "/dev/udmabuf"
-
        cmake_src_configure
 }
 
@@ -406,103 +431,115 @@ src_configure() {
 # configuration. Without those, there is a sandbox violation, when it
 # tries to create /var/lib/portage/home/.FreeCAD directory.
 src_test() {
+       cd "${BUILD_DIR}" || die
+
+       [[ -c "/dev/udmabuf" ]] && addwrite "/dev/udmabuf"
+
+       if use bim; then
+               # No module named 'ifcopenshell' #940465
+               rm "${BUILD_DIR}/Mod/BIM/nativeifc/ifc_performance_test.py" || 
die
+       fi
+
+       if use cam; then
+               # we need the spaces to match the python indent
+               sed -e '/test46/a \        return' -i 
"Mod/CAM/CAMTests/TestPathOpUtil.py" || die
+               sed -e '/test47/a \        return' -i 
"Mod/CAM/CAMTests/TestPathOpUtil.py" || die
+       fi
+
        local -x EPYTEST_IGNORE=(
                "Mod/BIM/nativeifc/ifc_performance_test.py"
        )
-       local -x EPYTEST_DESELECT=(
-               
"Mod/AddonManager/AddonManagerTest/gui/test_installer_gui.py::TestInstallerGui::test_check_python_version_bad"
-               
"Mod/AddonManager/AddonManagerTest/gui/test_installer_gui.py::TestInstallerGui::test_check_python_version_bad"
-               
"Mod/AddonManager/AddonManagerTest/gui/test_installer_gui.py::TestInstallerGui::test_dependency_failure_dialog"
-               
"Mod/AddonManager/AddonManagerTest/gui/test_installer_gui.py::TestInstallerGui::test_failure_dialog"
-               
"Mod/AddonManager/AddonManagerTest/gui/test_installer_gui.py::TestInstallerGui::test_handle_disallowed_python"
-               
"Mod/AddonManager/AddonManagerTest/gui/test_installer_gui.py::TestInstallerGui::test_install"
-               
"Mod/AddonManager/AddonManagerTest/gui/test_installer_gui.py::TestInstallerGui::test_no_pip_dialog"
-               
"Mod/AddonManager/AddonManagerTest/gui/test_installer_gui.py::TestInstallerGui::test_no_python_dialog"
-               
"Mod/AddonManager/AddonManagerTest/gui/test_installer_gui.py::TestInstallerGui::test_report_missing_workbenches_multiple"
-               
"Mod/AddonManager/AddonManagerTest/gui/test_installer_gui.py::TestInstallerGui::test_report_missing_workbenches_single"
-               
"Mod/AddonManager/AddonManagerTest/gui/test_installer_gui.py::TestInstallerGui::test_success_dialog"
-
-               
"Mod/AddonManager/AddonManagerTest/gui/test_uninstaller_gui.py::TestUninstallerGUI::test_confirmation_dialog_cancel"
-               
"Mod/AddonManager/AddonManagerTest/gui/test_uninstaller_gui.py::TestUninstallerGUI::test_confirmation_dialog_yes"
-               
"Mod/AddonManager/AddonManagerTest/gui/test_uninstaller_gui.py::TestUninstallerGUI::test_failure_dialog"
-               
"Mod/AddonManager/AddonManagerTest/gui/test_uninstaller_gui.py::TestUninstallerGUI::test_progress_dialog"
-               
"Mod/AddonManager/AddonManagerTest/gui/test_uninstaller_gui.py::TestUninstallerGUI::test_success_dialog"
-               
"Mod/AddonManager/AddonManagerTest/gui/test_uninstaller_gui.py::TestUninstallerGUI::test_timer_launches_progress_dialog"
-       )
-
-       cd "${BUILD_DIR}" || die
 
-       # No module named 'ifcopenshell' #940465
-       rm "${BUILD_DIR}/Mod/BIM/nativeifc/ifc_performance_test.py" || die
+       if ! use openscad ; then
+               EPYTEST_IGNORE+=(
+                       "Mod/OpenSCAD/OpenSCADTest/app/test_importCSG.py"
+                       "Mod/OpenSCAD/OpenSCADTest/gui/test_dummy.py"
+               )
+       fi
 
        local -x FREECAD_USER_HOME="${HOME}"
-       local -x FREECAD_USER_DATA="${T}"
-       local -x FREECAD_USER_TEMP="${T}"
+       local -x FREECAD_USER_DATA="${T}/data"
+       local -x FREECAD_USER_TEMP="${T}/temp"
 
-       local fail=""
+       mkdir -p "${FREECAD_USER_DATA}" "${FREECAD_USER_TEMP}" || die
+
+       local failed=()
        local run
-       nonfatal \
-               edo "${BUILD_DIR}/bin/FreeCADCmd" \
+
+       if \
+               ! nonfatal \
+               edo \
+               "${BUILD_DIR}/bin/FreeCADCmd" \
                        --run-test 0 \
                        --set-config AppHomePath="${BUILD_DIR}/" \
-                       --log-file "${T}/FreeCADCmd.log" \
-               || fail+=" FreeCADCmd"
+                       --log-file "${T}/FreeCADCmd.log"; then
+               ret=$?
+               eerror "FreeCADCmd failed $ret"
+               failed+=( "FreeCADCmd" )
+       fi
 
        if use gui; then
-               # this is naive
                addpredict "/dev/char/"
                addwrite "/dev/dri/renderD128"
                addwrite "/dev/dri/card0"
+
                [[ -c "/dev/nvidiactl" ]] && addwrite "/dev/nvidiactl"
                [[ -c "/dev/nvidia-uvm" ]] && addwrite "/dev/nvidia-uvm"
                [[ -c "/dev/nvidia-uvm-tools" ]] && addwrite 
"/dev/nvidia-uvm-tools"
                [[ -c "/dev/nvidia0" ]] && addwrite "/dev/nvidia0"
+
                [[ -c "/dev/udmabuf" ]] && addwrite "/dev/udmabuf"
 
-               nonfatal \
-                       virtx edo "${BUILD_DIR}/bin/FreeCAD" \
+               if \
+                       ! nonfatal \
+                       virtx \
+                       edo \
+                       "${BUILD_DIR}/bin/FreeCAD" \
                                --run-test 0 \
                                --set-config AppHomePath="${BUILD_DIR}/" \
-                               --log-file "${T}/FreeCAD.log" \
-                       || fail+=" FreeCAD"
+                               --log-file "${T}/FreeCAD.log" ; then
+                       ret=$?
+                       eerror "FreeCAD failed $ret"
+                       failed+=( "FreeCAD" )
+               fi
 
-               run=virtx
+               run="virtx"
        fi
 
-       # nonfatal \
-               ${run} cmake_src_test || fail+=" cmake"
-       if [[ -n "${fail}" ]]; then
-               eerror "${fail}"
-               die "${fail}"
+       if [[ ${PV} == *9999* ]]; then
+               if ! nonfatal \
+                       "${run}" \
+                       cmake_src_test; then
+                       eerror "cmake failed $?"
+                       failed+=( "cmake" )
+               fi
+       fi
+
+       if [[ "${#failed[@]}" -gt 0 ]]; then
+               eerror "Tests ${failed[*]} failed"
+               if ! use debug && [[ ${PV} != *9999* ]]; then
+                       die "${failed[@]}"
+               fi
        fi
 }
 
 src_install() {
        cmake_src_install
 
-       if [[ -f src/Tools/freecad-thumbnailer ]]; then
-               dobin src/Tools/freecad-thumbnailer
-       fi
-
-       if [[ -f freecad-thumbnailer ]]; then
-               dobin freecad-thumbnailer
-       fi
-
        if use gui; then
                newbin - freecad <<- _EOF_
-               #!/bin/sh
-               # https://github.com/coin3d/coin/issues/451
-               : "\${QT_QPA_PLATFORM:=xcb}"
-               export QT_QPA_PLATFORM
-               exec /usr/$(get_libdir)/${PN}/bin/FreeCAD "\${@}"
+                       #!/bin/sh
+                       # https://github.com/coin3d/coin/issues/451
+                       : "\${QT_QPA_PLATFORM:=xcb}"
+                       export QT_QPA_PLATFORM
+                       exec ${EPREFIX}/usr/$(get_libdir)/${PN}/bin/FreeCAD 
"\${@}"
                _EOF_
-               mv "${ED}/usr/$(get_libdir)/${PN}/share/"* "${ED}/usr/share" || 
die "failed to move shared resources"
        fi
        dosym -r "/usr/$(get_libdir)/${PN}/bin/FreeCADCmd" "/usr/bin/freecadcmd"
 
        rm -r "${ED}/usr/$(get_libdir)/${PN}/include/E57Format" || die "failed 
to drop unneeded include directory E57Format"
 
-       python_optimize "${ED}/usr/share/${PN}/data/Mod/Start/StartPage" 
"${ED}/usr/$(get_libdir)/${PN}/"{Ext,Mod}/
+       python_optimize "${ED}/usr/share/${PN}/data/Mod/Start/" 
"${ED}/usr/$(get_libdir)/${PN}/"{Ext,Mod}/
        # compile main package in python site-packages as well
        python_optimize
 }
@@ -524,6 +561,13 @@ pkg_postinst() {
        if use fem || use mesh; then
                optfeature "mesh generation" sci-libs/gmsh
        fi
+
+       if use python_single_target_python3_13; then
+               einfo "${PN} is reported to suffer from memory leaks."
+               einfo "This can cause to program abortions with python-3.13"
+               einfo "Fall back to python-3.12 if that happens."
+               einfo "See https://github.com/FreeCAD/FreeCAD/issues/19066 for 
details."
+       fi
 }
 
 pkg_postrm() {

diff --git a/media-gfx/freecad/freecad-9999.ebuild 
b/media-gfx/freecad/freecad-9999.ebuild
index 6d2d43adf512..61ae246d1eb1 100644
--- a/media-gfx/freecad/freecad-9999.ebuild
+++ b/media-gfx/freecad/freecad-9999.ebuild
@@ -5,6 +5,10 @@ EAPI=8
 
 PYTHON_COMPAT=( python3_{11..13} )
 
+# https://github.com/FreeCAD/FreeCAD/issues/19066
+# The added asserts break on mem leaks, so tests fail.
+# PYTHON_REQ_USE="-debug"
+
 inherit check-reqs cmake cuda edo flag-o-matic optfeature python-single-r1 
qmake-utils toolchain-funcs xdg virtualx
 
 DESCRIPTION="Qt based Computer Aided Design application"
@@ -15,6 +19,7 @@ MY_PN=FreeCAD
 if [[ ${PV} == *9999* ]]; then
        inherit git-r3
        EGIT_REPO_URI="https://github.com/${MY_PN}/${MY_PN}.git";
+       EGIT_SUBMODULES=( 'src/Mod/AddonManager' )
        S="${WORKDIR}/freecad-${PV}"
 else
        SRC_URI="
@@ -52,10 +57,12 @@ REQUIRED_USE="
 
 RESTRICT="!test? ( test )"
 
+# if opencascade[tbb], we link to tbb
+# if vtk[cuda], we use cuda
 RDEPEND="
        ${PYTHON_DEPS}
-       dev-cpp/gtest
-       dev-cpp/yaml-cpp
+       dev-cpp/tbb:=
+       dev-cpp/yaml-cpp:=
        dev-libs/boost:=
        dev-libs/libfmt:=
        dev-libs/xerces-c:=[icu]
@@ -87,7 +94,6 @@ RDEPEND="
                        >=dev-python/pivy-0.6.5[${PYTHON_USEDEP}]
                        
dev-python/pyside:6=[uitools(-),gui,svg,${PYTHON_USEDEP}]
                ' )
-               virtual/glu
                virtual/opengl
                spacenav? ( dev-libs/libspnav[X?] )
        )
@@ -95,7 +101,6 @@ RDEPEND="
        openscad? ( $(python_gen_cond_dep 'dev-python/ply[${PYTHON_USEDEP}]') )
        pcl? ( sci-libs/pcl:= )
        smesh? (
-               sci-libs/hdf5:=[zlib]
                >=sci-libs/med-4.0.0-r1
                sci-libs/vtk:=
        )
@@ -104,16 +109,28 @@ DEPEND="${RDEPEND}
        >=dev-cpp/eigen-3.3.1:3
        dev-cpp/ms-gsl
        test? (
+               $(python_gen_impl_dep '-debug')
+               $(python_gen_cond_dep '
+                       sci-libs/vtk[python,${PYTHON_SINGLE_USEDEP}]
+               ' )
                gui? (
                        $(python_gen_cond_dep '
-                               dev-python/pyside:6=[tools(-),${PYTHON_USEDEP}]
+                               dev-python/pyside:6[tools(-),${PYTHON_USEDEP}]
                        ' )
                )
+               dev-cpp/gtest
        )
 "
 BDEPEND="
        dev-lang/swig
-       test? ( dev-cpp/gtest )
+       test? (
+               gui? (
+                       $(python_gen_cond_dep '
+                               dev-python/pytest[${PYTHON_USEDEP}]
+                               dev-python/typing-extensions[${PYTHON_USEDEP}]
+                       ' )
+               )
+       )
 "
 
 PATCHES=(
@@ -243,7 +260,16 @@ src_prepare() {
        # deprecated in python-3.11 removed in python-3.13
        sed -e '/import imghdr/d' -i src/Mod/CAM/CAMTests/TestCAMSanity.py || 
die
 
+       # band-aid fix for botched version check, needs to be revisited for 
VTK-10
+       sed -e 's/vtkVersion.GetVTKMajorVersion() > 
9/vtkVersion.GetVTKMajorVersion() >= 9/g' \
+               -i src/Mod/Fem/femguiutils/data_extraction.py || die
+
        cmake_src_prepare
+
+       if ! grep -q TKExpress cMake/FindOCC.cmake ; then
+               eqawarn "Applying opencascade-7.9.0 patch"
+               eapply -l "${FILESDIR}/${PN}-1.0.1-opencascade-7.9.0.patch"
+       fi
 }
 
 src_configure() {
@@ -254,15 +280,10 @@ src_configure() {
        filter-lto
 
        # Fix building tests
-       if ! tc-ld-is-mold; then # 940524
+       if tc-ld-is-bfd; then # 940524
                append-ldflags -Wl,--copy-dt-needed-entries
        fi
 
-       # cmake-4
-       # https://github.com/FreeCAD/FreeCAD/issues/20246
-       : "${CMAKE_POLICY_VERSION_MINIMUM:=3.10}"
-       export CMAKE_POLICY_VERSION_MINIMUM
-
        local mycmakeargs=(
                -DCMAKE_POLICY_DEFAULT_CMP0144="OLD" # FLANN_ROOT
                -DCMAKE_POLICY_DEFAULT_CMP0167="OLD" # FindBoost
@@ -293,6 +314,7 @@ src_configure() {
                -DBUILD_INSPECTION=$(usex inspection)
                -DBUILD_JTREADER=OFF                                    # uses 
an old proprietary library
                -DBUILD_MATERIAL=ON
+               -DBUILD_MATERIAL_EXTERNAL=ON
                -DBUILD_MEASURE=ON
                -DBUILD_MESH=$(usex mesh)
                -DBUILD_MESH_PART=$(usex mesh)
@@ -314,13 +336,17 @@ src_configure() {
                -DBUILD_TUX=$(usex gui)
                -DBUILD_WEB=ON                                                  
# needed by start workspace
 
-               -DCMAKE_INSTALL_DATADIR=/usr/share/${PN}/data
-               -DCMAKE_INSTALL_DOCDIR=/usr/share/doc/${PF}
-               -DCMAKE_INSTALL_INCLUDEDIR=/usr/include/${PN}
-               -DCMAKE_INSTALL_PREFIX=/usr/$(get_libdir)/${PN}
+               # do not set these or tests fail
+               # -DCMAKE_INSTALL_DATADIR=share/${PN}/data
+               # -DCMAKE_INSTALL_DOCDIR=share/doc/${PF}
+               # -DCMAKE_INSTALL_INCLUDEDIR=include/${PN}
+               # -DCMAKE_INSTALL_PREFIX=/usr/$(get_libdir)/${PN}
+               -DCMAKE_INSTALL_PREFIX="${EPREFIX}/usr/$(get_libdir)/${PN}"
 
                -DFREECAD_BUILD_DEBIAN=OFF
 
+               -DFREECAD_USE_EXTERNAL_E57FORMAT="no"
+               -DFREECAD_USE_EXTERNAL_GTEST="yes"
                -DFREECAD_USE_EXTERNAL_ONDSELSOLVER=$(usex assembly)
                -DFREECAD_USE_EXTERNAL_SMESH=OFF                # no package in 
Gentoo
                -DFREECAD_USE_EXTERNAL_ZIPIOS=OFF               # doesn't work 
yet, also no package in Gentoo tree
@@ -339,18 +365,21 @@ src_configure() {
                # Use the version of pyside[tools] that matches the selected 
python version
                -DPYTHON_CONFIG_SUFFIX="-${EPYTHON}"
                # -DPython3_EXECUTABLE=${EPYTHON}
-
-               -DPACKAGE_WCREF="%{release} (Git)"
-               -DPACKAGE_WCURL="git://github.com/FreeCAD/FreeCAD.git main"
        )
 
        if [[ ${PV} == *9999* ]]; then
                mycmakeargs+=(
                        -DENABLE_DEVELOPER_TESTS=ON
+
+                       -DPACKAGE_WCREF="%{release} (Git)"
+                       -DPACKAGE_WCURL="git://github.com/FreeCAD/FreeCAD.git 
main"
                )
        else
                mycmakeargs+=(
                        -DENABLE_DEVELOPER_TESTS=OFF
+
+                       -DPACKAGE_WCREF="${PVR} (gentoo)"
+                       -DPACKAGE_WCURL="git://github.com/FreeCAD/FreeCAD.git 
${PV}"
                )
        fi
 
@@ -391,9 +420,6 @@ src_configure() {
                )
        fi
 
-       addpredict "/dev/char/"
-       [[ -c "/dev/udmabuf" ]] && addwrite "/dev/udmabuf"
-
        cmake_src_configure
 }
 
@@ -406,103 +432,115 @@ src_configure() {
 # configuration. Without those, there is a sandbox violation, when it
 # tries to create /var/lib/portage/home/.FreeCAD directory.
 src_test() {
+       cd "${BUILD_DIR}" || die
+
+       [[ -c "/dev/udmabuf" ]] && addwrite "/dev/udmabuf"
+
+       if use bim; then
+               # No module named 'ifcopenshell' #940465
+               rm "${BUILD_DIR}/Mod/BIM/nativeifc/ifc_performance_test.py" || 
die
+       fi
+
+       if use cam; then
+               # we need the spaces to match the python indent
+               sed -e '/test46/a \        return' -i 
"Mod/CAM/CAMTests/TestPathOpUtil.py" || die
+               sed -e '/test47/a \        return' -i 
"Mod/CAM/CAMTests/TestPathOpUtil.py" || die
+       fi
+
        local -x EPYTEST_IGNORE=(
                "Mod/BIM/nativeifc/ifc_performance_test.py"
        )
-       local -x EPYTEST_DESELECT=(
-               
"Mod/AddonManager/AddonManagerTest/gui/test_installer_gui.py::TestInstallerGui::test_check_python_version_bad"
-               
"Mod/AddonManager/AddonManagerTest/gui/test_installer_gui.py::TestInstallerGui::test_check_python_version_bad"
-               
"Mod/AddonManager/AddonManagerTest/gui/test_installer_gui.py::TestInstallerGui::test_dependency_failure_dialog"
-               
"Mod/AddonManager/AddonManagerTest/gui/test_installer_gui.py::TestInstallerGui::test_failure_dialog"
-               
"Mod/AddonManager/AddonManagerTest/gui/test_installer_gui.py::TestInstallerGui::test_handle_disallowed_python"
-               
"Mod/AddonManager/AddonManagerTest/gui/test_installer_gui.py::TestInstallerGui::test_install"
-               
"Mod/AddonManager/AddonManagerTest/gui/test_installer_gui.py::TestInstallerGui::test_no_pip_dialog"
-               
"Mod/AddonManager/AddonManagerTest/gui/test_installer_gui.py::TestInstallerGui::test_no_python_dialog"
-               
"Mod/AddonManager/AddonManagerTest/gui/test_installer_gui.py::TestInstallerGui::test_report_missing_workbenches_multiple"
-               
"Mod/AddonManager/AddonManagerTest/gui/test_installer_gui.py::TestInstallerGui::test_report_missing_workbenches_single"
-               
"Mod/AddonManager/AddonManagerTest/gui/test_installer_gui.py::TestInstallerGui::test_success_dialog"
-
-               
"Mod/AddonManager/AddonManagerTest/gui/test_uninstaller_gui.py::TestUninstallerGUI::test_confirmation_dialog_cancel"
-               
"Mod/AddonManager/AddonManagerTest/gui/test_uninstaller_gui.py::TestUninstallerGUI::test_confirmation_dialog_yes"
-               
"Mod/AddonManager/AddonManagerTest/gui/test_uninstaller_gui.py::TestUninstallerGUI::test_failure_dialog"
-               
"Mod/AddonManager/AddonManagerTest/gui/test_uninstaller_gui.py::TestUninstallerGUI::test_progress_dialog"
-               
"Mod/AddonManager/AddonManagerTest/gui/test_uninstaller_gui.py::TestUninstallerGUI::test_success_dialog"
-               
"Mod/AddonManager/AddonManagerTest/gui/test_uninstaller_gui.py::TestUninstallerGUI::test_timer_launches_progress_dialog"
-       )
 
-       cd "${BUILD_DIR}" || die
-
-       # No module named 'ifcopenshell' #940465
-       rm "${BUILD_DIR}/Mod/BIM/nativeifc/ifc_performance_test.py" || die
+       if ! use openscad ; then
+               EPYTEST_IGNORE+=(
+                       "Mod/OpenSCAD/OpenSCADTest/app/test_importCSG.py"
+                       "Mod/OpenSCAD/OpenSCADTest/gui/test_dummy.py"
+               )
+       fi
 
        local -x FREECAD_USER_HOME="${HOME}"
-       local -x FREECAD_USER_DATA="${T}"
-       local -x FREECAD_USER_TEMP="${T}"
+       local -x FREECAD_USER_DATA="${T}/data"
+       local -x FREECAD_USER_TEMP="${T}/temp"
+
+       mkdir -p "${FREECAD_USER_DATA}" "${FREECAD_USER_TEMP}" || die
 
-       local fail=""
+       local failed=()
        local run
-       nonfatal \
-               edo "${BUILD_DIR}/bin/FreeCADCmd" \
+
+       if \
+               ! nonfatal \
+               edo \
+               "${BUILD_DIR}/bin/FreeCADCmd" \
                        --run-test 0 \
                        --set-config AppHomePath="${BUILD_DIR}/" \
-                       --log-file "${T}/FreeCADCmd.log" \
-               || fail+=" FreeCADCmd"
+                       --log-file "${T}/FreeCADCmd.log"; then
+               ret=$?
+               eerror "FreeCADCmd failed $ret"
+               failed+=( "FreeCADCmd" )
+       fi
 
        if use gui; then
-               # this is naive
                addpredict "/dev/char/"
                addwrite "/dev/dri/renderD128"
                addwrite "/dev/dri/card0"
+
                [[ -c "/dev/nvidiactl" ]] && addwrite "/dev/nvidiactl"
                [[ -c "/dev/nvidia-uvm" ]] && addwrite "/dev/nvidia-uvm"
                [[ -c "/dev/nvidia-uvm-tools" ]] && addwrite 
"/dev/nvidia-uvm-tools"
                [[ -c "/dev/nvidia0" ]] && addwrite "/dev/nvidia0"
+
                [[ -c "/dev/udmabuf" ]] && addwrite "/dev/udmabuf"
 
-               nonfatal \
-                       virtx edo "${BUILD_DIR}/bin/FreeCAD" \
+               if \
+                       ! nonfatal \
+                       virtx \
+                       edo \
+                       "${BUILD_DIR}/bin/FreeCAD" \
                                --run-test 0 \
                                --set-config AppHomePath="${BUILD_DIR}/" \
-                               --log-file "${T}/FreeCAD.log" \
-                       || fail+=" FreeCAD"
+                               --log-file "${T}/FreeCAD.log" ; then
+                       ret=$?
+                       eerror "FreeCAD failed $ret"
+                       failed+=( "FreeCAD" )
+               fi
+
+               run="virtx"
+       fi
 
-               run=virtx
+       if [[ ${PV} == *9999* ]]; then
+               if ! nonfatal \
+                       "${run}" \
+                       cmake_src_test; then
+                       eerror "cmake failed $?"
+                       failed+=( "cmake" )
+               fi
        fi
 
-       # nonfatal \
-               ${run} cmake_src_test || fail+=" cmake"
-       if [[ -n "${fail}" ]]; then
-               eerror "${fail}"
-               die "${fail}"
+       if [[ "${#failed[@]}" -gt 0 ]]; then
+               eerror "Tests ${failed[*]} failed"
+               if ! use debug && [[ ${PV} != *9999* ]]; then
+                       die "${failed[@]}"
+               fi
        fi
 }
 
 src_install() {
        cmake_src_install
 
-       if [[ -f src/Tools/freecad-thumbnailer ]]; then
-               dobin src/Tools/freecad-thumbnailer
-       fi
-
-       if [[ -f freecad-thumbnailer ]]; then
-               dobin freecad-thumbnailer
-       fi
-
        if use gui; then
                newbin - freecad <<- _EOF_
-               #!/bin/sh
-               # https://github.com/coin3d/coin/issues/451
-               : "\${QT_QPA_PLATFORM:=xcb}"
-               export QT_QPA_PLATFORM
-               exec /usr/$(get_libdir)/${PN}/bin/FreeCAD "\${@}"
+                       #!/bin/sh
+                       # https://github.com/coin3d/coin/issues/451
+                       : "\${QT_QPA_PLATFORM:=xcb}"
+                       export QT_QPA_PLATFORM
+                       exec ${EPREFIX}/usr/$(get_libdir)/${PN}/bin/FreeCAD 
"\${@}"
                _EOF_
-               mv "${ED}/usr/$(get_libdir)/${PN}/share/"* "${ED}/usr/share" || 
die "failed to move shared resources"
        fi
        dosym -r "/usr/$(get_libdir)/${PN}/bin/FreeCADCmd" "/usr/bin/freecadcmd"
 
        rm -r "${ED}/usr/$(get_libdir)/${PN}/include/E57Format" || die "failed 
to drop unneeded include directory E57Format"
 
-       python_optimize "${ED}/usr/share/${PN}/data/Mod/Start/StartPage" 
"${ED}/usr/$(get_libdir)/${PN}/"{Ext,Mod}/
+       python_optimize "${ED}/usr/share/${PN}/data/Mod/Start/" 
"${ED}/usr/$(get_libdir)/${PN}/"{Ext,Mod}/
        # compile main package in python site-packages as well
        python_optimize
 }
@@ -524,6 +562,13 @@ pkg_postinst() {
        if use fem || use mesh; then
                optfeature "mesh generation" sci-libs/gmsh
        fi
+
+       if use python_single_target_python3_13; then
+               einfo "${PN} is reported to suffer from memory leaks."
+               einfo "This can cause to program abortions with python-3.13"
+               einfo "Fall back to python-3.12 if that happens."
+               einfo "See https://github.com/FreeCAD/FreeCAD/issues/19066 for 
details."
+       fi
 }
 
 pkg_postrm() {

Reply via email to