From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp.gentoo.org (woodpecker.gentoo.org [140.211.166.183]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id 9279A1584AD for ; Thu, 08 May 2025 06:29:57 +0000 (UTC) Received: from lists.gentoo.org (bobolink.gentoo.org [140.211.166.189]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) (Authenticated sender: relay-lists.gentoo.org@gentoo.org) by smtp.gentoo.org (Postfix) with ESMTPSA id 78BDE343128 for ; Thu, 08 May 2025 06:29:57 +0000 (UTC) Received: from bobolink.gentoo.org (localhost [127.0.0.1]) by bobolink.gentoo.org (Postfix) with ESMTP id B23BC1104B0; Thu, 08 May 2025 06:29:37 +0000 (UTC) Received: from smtp.gentoo.org (woodpecker.gentoo.org [140.211.166.183]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by bobolink.gentoo.org (Postfix) with ESMTPS id A863B1104B0 for ; Thu, 08 May 2025 06:29:37 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 36C123430BB for ; Thu, 08 May 2025 06:29:37 +0000 (UTC) Received: from localhost.localdomain (localhost [IPv6:::1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id C67542865 for ; Thu, 08 May 2025 06:29:34 +0000 (UTC) From: "Sam James" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Sam James" Message-ID: <1746685607.4e4e6923f46abc463b88dca78e4dee07b65d5e69.sam@gentoo> Subject: [gentoo-commits] repo/gentoo:master commit in: media-gfx/freecad/, media-gfx/freecad/files/ X-VCS-Repository: repo/gentoo X-VCS-Files: media-gfx/freecad/Manifest media-gfx/freecad/files/freecad-1.0.0-r4-error-cannot-convert-bool-to-App-DocumentInitFlags.patch media-gfx/freecad/freecad-1.0.0-r4.ebuild media-gfx/freecad/freecad-9999.ebuild X-VCS-Directories: media-gfx/freecad/files/ media-gfx/freecad/ X-VCS-Committer: sam X-VCS-Committer-Name: Sam James X-VCS-Revision: 4e4e6923f46abc463b88dca78e4dee07b65d5e69 X-VCS-Branch: master Date: Thu, 08 May 2025 06:29:34 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-Archives-Salt: 989b7b94-479c-42c1-9b76-feec896bb145 X-Archives-Hash: 208d808328fe02ee04d6ccfbbf5645df commit: 4e4e6923f46abc463b88dca78e4dee07b65d5e69 Author: Paul Zander gmail com> AuthorDate: Fri May 2 20:28:19 2025 +0000 Commit: Sam James gentoo org> CommitDate: Thu May 8 06:26:47 2025 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=4e4e6923 media-gfx/freecad: 1.0.0-r4 fixes Fix build with openimageio-3 Run more tests. Closes: https://bugs.gentoo.org/952517 Signed-off-by: Paul Zander gmail.com> Part-of: https://github.com/gentoo/gentoo/pull/41967 Signed-off-by: Sam James gentoo.org> media-gfx/freecad/Manifest | 1 + ...not-convert-bool-to-App-DocumentInitFlags.patch | 30 +++ ...freecad-9999.ebuild => freecad-1.0.0-r4.ebuild} | 203 +++++++++++++++++-- media-gfx/freecad/freecad-9999.ebuild | 222 +++++++++++++++++++-- 4 files changed, 419 insertions(+), 37 deletions(-) diff --git a/media-gfx/freecad/Manifest b/media-gfx/freecad/Manifest index 6466fc004001..d8eb55b255f4 100644 --- a/media-gfx/freecad/Manifest +++ b/media-gfx/freecad/Manifest @@ -1,2 +1,3 @@ DIST freecad-1.0.0.tar.gz 91599325 BLAKE2B 65540eb42e7d508456c9edbf2122e0f288708c33e6d00d3c8c45550e7a614f658f91ba25978a66819bc094b7138aab72a89c0172d0841be1ff798ade5a8bdc64 SHA512 afc1079ea04fd5bb8135f8ad1012d9e4e05c8839dd0a4e00253eada58fe018f445c1200d1ca7ac9f268644c946cbf55b7b313dc3d6bd010f9da3a3334103b7db +DIST freecad-18423.patch 3094 BLAKE2B a5f4d1b7767e14ae61052348d57fcdaa4f73d2356daea1d2b89b3629faf92aadc1b1fd5c94443f1a5cc9917cf2026a19c28de990506b8da5886863354e581dc9 SHA512 a4dec8c9e6ac489c81cf7d4b81090614880a94664a0844c2ceab472fd410364aab555287f3233c965791d9fbf72f6faa36645910cc0f8bfcb9fa1d34c29f6a69 DIST freecad-20710.patch 902 BLAKE2B ce69e5714c06e969bd533c54be9f7de0c23fc881a5259979c444aecc1f5cbb175b01c7a61bf3ebc35e0eeb7f9aabfba729499e449cbf2a06055df6aecc8465cd SHA512 1df1b0941d1ccbf9aef0f882cd17e647448acb9267a2fae503b4427b80620374e5d4e1a1bb651fab8b631db3ff4d53748951d75e244a9ffddda817b6d4971a84 diff --git a/media-gfx/freecad/files/freecad-1.0.0-r4-error-cannot-convert-bool-to-App-DocumentInitFlags.patch b/media-gfx/freecad/files/freecad-1.0.0-r4-error-cannot-convert-bool-to-App-DocumentInitFlags.patch new file mode 100644 index 000000000000..abdbb55c144f --- /dev/null +++ b/media-gfx/freecad/files/freecad-1.0.0-r4-error-cannot-convert-bool-to-App-DocumentInitFlags.patch @@ -0,0 +1,30 @@ +From b629af0a3125f9cf40814ed254ab1259b2b3401a Mon Sep 17 00:00:00 2001 +From: Paul Zander +Date: Tue, 8 Apr 2025 22:15:17 +0200 +Subject: [PATCH] =?UTF-8?q?error:=20cannot=20convert=20=E2=80=98bool?= + =?UTF-8?q?=E2=80=99=20to=20=E2=80=98App::DocumentInitFlags=E2=80=99?= +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Caused by https://github.com/FreeCAD/FreeCAD/pull/19136 +Partial fix in https://github.com/FreeCAD/FreeCAD/pull/20058 + +Signed-off-by: Paul Zander + +diff --git a/src/Mod/Cloud/App/AppCloud.cpp b/src/Mod/Cloud/App/AppCloud.cpp +index 3ec811dc04..78b6d7f819 100644 +--- a/src/Mod/Cloud/App/AppCloud.cpp ++++ b/src/Mod/Cloud/App/AppCloud.cpp +@@ -1451,7 +1451,7 @@ void Cloud::Module::LinkXSetValue(std::string filename) + string newName; + Document* currentDoc = GetApplication().getActiveDocument(); + newName = GetApplication().getUniqueDocumentName("unnamed"); +- newDoc = GetApplication().newDocument(newName.c_str(), (const char*)path.c_str(), true); ++ newDoc = GetApplication().newDocument(newName.c_str(), (const char*)path.c_str(), {.createView=true}); + GetApplication().setActiveDocument(newDoc); + this->cloudRestore((const char*)path.c_str()); + GetApplication().setActiveDocument(currentDoc); +-- +2.49.0 + diff --git a/media-gfx/freecad/freecad-9999.ebuild b/media-gfx/freecad/freecad-1.0.0-r4.ebuild similarity index 57% copy from media-gfx/freecad/freecad-9999.ebuild copy to media-gfx/freecad/freecad-1.0.0-r4.ebuild index afd582d56c4e..77b33c13b543 100644 --- a/media-gfx/freecad/freecad-9999.ebuild +++ b/media-gfx/freecad/freecad-1.0.0-r4.ebuild @@ -1,11 +1,11 @@ -# Copyright 1999-2024 Gentoo Authors +# Copyright 1999-2025 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=8 -PYTHON_COMPAT=( python3_{10..12} ) +PYTHON_COMPAT=( python3_{11..12} ) -inherit check-reqs cmake flag-o-matic optfeature python-single-r1 qmake-utils xdg +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" HOMEPAGE="https://www.freecad.org/ https://github.com/FreeCAD/FreeCAD" @@ -17,7 +17,11 @@ if [[ ${PV} == *9999* ]]; then EGIT_REPO_URI="https://github.com/${MY_PN}/${MY_PN}.git" S="${WORKDIR}/freecad-${PV}" else - SRC_URI="https://github.com/${MY_PN}/${MY_PN}/archive/refs/tags/${PV}.tar.gz -> ${P}.tar.gz" + SRC_URI=" + https://github.com/${MY_PN}/${MY_PN}/archive/refs/tags/${PV}.tar.gz -> ${P}.tar.gz + https://github.com/FreeCAD/FreeCAD/commit/8934af10128f0bd2d0ffada946d1c93bc5d8869f.patch -> ${PN}-18423.patch + https://github.com/FreeCAD/FreeCAD/commit/d91b3e051789623f0bc1eff65947c361e7a661d0.patch -> ${PN}-20710.patch + " KEYWORDS="~amd64" S="${WORKDIR}/FreeCAD-${PV}" fi @@ -26,17 +30,18 @@ fi # examples are licensed CC-BY-SA (without note of specific version) LICENSE="LGPL-2 CC-BY-SA-4.0" SLOT="0" -IUSE="debug designer +gui netgen pcl smesh spacenav test X" +IUSE="debug designer +gui netgen pcl +smesh spacenav test X" # Modules are found in src/Mod/ and their options defined in: # cMake/FreeCAD_Helpers/InitializeFreeCADBuildOptions.cmake # To get their dependencies: # 'grep REQUIRES_MODS cMake/FreeCAD_Helpers/CheckInterModuleDependencies.cmake' -IUSE+=" addonmgr assembly bim cam cloud fem idf inspection mesh openscad points reverse robot surface +techdraw" +IUSE+=" addonmgr assembly +bim cam cloud fem idf inspection +mesh openscad points reverse robot surface +techdraw" REQUIRED_USE=" ${PYTHON_REQUIRED_USE} bim? ( mesh ) cam? ( mesh ) + gui? ( bim ) designer? ( gui ) fem? ( smesh ) inspection? ( points ) @@ -45,6 +50,7 @@ REQUIRED_USE=" reverse? ( mesh points ) test? ( techdraw ) " +# Draft Workbench needs BIM RESTRICT="!test? ( test )" @@ -99,6 +105,13 @@ RDEPEND=" DEPEND="${RDEPEND} >=dev-cpp/eigen-3.3.1:3 dev-cpp/ms-gsl + test? ( + gui? ( + $(python_gen_cond_dep ' + dev-python/pyside:6=[tools(-),${PYTHON_USEDEP}] + ' ) + ) + ) " BDEPEND=" dev-lang/swig @@ -106,15 +119,81 @@ BDEPEND=" " 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 + "${DISTDIR}/${PN}-18423.patch" # vtk-9.4 + "${DISTDIR}/${PN}-20710.patch" # DESTDIR in env ) DOCS=( CODE_OF_CONDUCT.md README.md ) CHECKREQS_DISK_BUILD="2G" +cuda_get_host_compiler() { + if [[ -n "${NVCC_CCBIN}" ]]; then + echo "${NVCC_CCBIN}" + return + fi + + if [[ -n "${CUDAHOSTCXX}" ]]; then + echo "${CUDAHOSTCXX}" + return + fi + + einfo "Trying to find working CUDA host compiler" + + if ! tc-is-gcc && ! tc-is-clang; then + die "$(tc-get-compiler-type) compiler is not supported" + fi + + local compiler compiler_type compiler_version + local package package_version + local NVCC_CCBIN_default + + compiler_type="$(tc-get-compiler-type)" + compiler_version="$("${compiler_type}-major-version")" + + # try the default compiler first + NVCC_CCBIN="$(tc-getCXX)" + NVCC_CCBIN_default="${NVCC_CCBIN}-${compiler_version}" + + compiler="${NVCC_CCBIN/%-${compiler_version}}" + + # store the package so we can re-use it later + if tc-is-gcc; then + package="sys-devel/${compiler_type}" + elif tc-is-clang; then + package="llvm-core/${compiler_type}" + else + die "$(tc-get-compiler-type) compiler is not supported" + fi + + package_version="${package}" + + ebegin "testing ${NVCC_CCBIN_default} (default)" + + while ! nvcc -v -ccbin "${NVCC_CCBIN}" - -x cu <<<"int main(){}" &>> "${T}/cuda_get_host_compiler.log" ; do + eend 1 + + while true; do + # prepare next version + if ! package_version="<$(best_version "${package_version}")"; then + die "could not find a supported version of ${compiler}" + fi + + NVCC_CCBIN="${compiler}-$(ver_cut 1 "${package_version/#<${package}-/}")" + + [[ "${NVCC_CCBIN}" != "${NVCC_CCBIN_default}" ]] && break + done + ebegin "testing ${NVCC_CCBIN}" + done + eend $? + + echo "${NVCC_CCBIN}" + export NVCC_CCBIN +} + pkg_setup() { check-reqs_pkg_setup python-single-r1_pkg_setup @@ -124,6 +203,9 @@ src_prepare() { # Fix desktop file sed -e 's/Exec=FreeCAD/Exec=freecad/' -i src/XDGData/org.freecad.FreeCAD.desktop || die + # deprecated in python-3.11 removed in python-3.13 + sed -e '/import imghdr/d' -i src/Mod/CAM/CAMTests/TestCAMSanity.py || die + cmake_src_prepare } @@ -131,12 +213,25 @@ src_configure() { # -Werror=odr, -Werror=lto-type-mismatch # https://bugs.gentoo.org/875221 # https://github.com/FreeCAD/FreeCAD/issues/13173 + append-flags -fno-strict-aliasing filter-lto # Fix building tests - append-ldflags -Wl,--copy-dt-needed-entries + if ! tc-ld-is-mold; 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 + -DCMAKE_POLICY_DEFAULT_CMP0175="OLD" # add_custom_command + -DCMAKE_POLICY_DEFAULT_CMP0153="OLD" # exec_program + -DBUILD_DESIGNER_PLUGIN=$(usex designer) -DBUILD_FORCE_DIRECTORY=ON # force building in a dedicated directory -DBUILD_GUI=$(usex gui) @@ -151,7 +246,7 @@ src_configure() { -DBUILD_CAM=$(usex cam) -DBUILD_CLOUD=$(usex cloud) -DBUILD_DRAFT=ON - -DBUILD_DRAWING=OFF # Unmaintained and not ported to Qt 6 + # see below for DRAWING -DBUILD_FEM=$(usex fem) -DBUILD_FEM_NETGEN=$(usex fem $(usex netgen)) -DBUILD_FLAT_MESH=$(usex mesh) # a submodule of MeshPart @@ -171,14 +266,14 @@ src_configure() { -DBUILD_POINTS=$(usex points) -DBUILD_REVERSEENGINEERING=$(usex reverse) -DBUILD_ROBOT=$(usex robot) - -DBUILD_SANDBOX=OFF + # -DBUILD_SANDBOX=OFF -DBUILD_SHOW=$(usex gui) -DBUILD_SKETCHER=ON # needed by draft workspace -DBUILD_SPREADSHEET=ON -DBUILD_START=ON -DBUILD_SURFACE=$(usex surface) -DBUILD_TECHDRAW=$(usex techdraw) - -DBUILD_TEST=ON # always build test workbench for run-time testing + -DBUILD_TEST="$(usex test)" # always build test workbench for run-time testing -DBUILD_TUX=$(usex gui) -DBUILD_WEB=ON # needed by start workspace @@ -192,6 +287,8 @@ src_configure() { -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 + -DFREECAD_USE_EXTERNAL_FMT="yes" + -DFREECAD_USE_EXTERNAL_KDL=OFF # https://github.com/FreeCAD/FreeCAD/commit/9f98866 -DFREECAD_USE_FREETYPE=ON -DFREECAD_USE_OCC_VARIANT:STRING="Official Version" -DFREECAD_USE_PCL=$(usex pcl) @@ -202,11 +299,24 @@ src_configure() { # sub-packages will still be installed inside /usr/lib64/freecad -DINSTALL_TO_SITEPACKAGES=ON - # Use the version of shiboken2 that matches the selected python version + # Use the version of pyside[tools] that matches the selected python version -DPYTHON_CONFIG_SUFFIX="-${EPYTHON}" - -DPython3_EXECUTABLE=${PYTHON} + # -DPython3_EXECUTABLE=${EPYTHON} + + -DPACKAGE_WCREF="${PVR} (gentoo)" + -DPACKAGE_WCURL="git://github.com/FreeCAD/FreeCAD.git ${PV}" ) + if [[ ${PV} == *9999* ]]; then + mycmakeargs+=( + -DENABLE_DEVELOPER_TESTS=ON + ) + else + mycmakeargs+=( + -DENABLE_DEVELOPER_TESTS=OFF + ) + fi + if use debug; then # BUILD_SANDBOX currently broken, see # https://forum.freecadweb.org/viewtopic.php?f=4&t=36071&start=30#p504595 @@ -221,6 +331,11 @@ src_configure() { ) fi + if use fem || use smesh; then + export CUDAHOSTCXX="$(cuda_get_host_compiler)" + cuda_add_sandbox + fi + if use gui; then mycmakeargs+=( -DFREECAD_QT_MAJOR_VERSION=6 @@ -229,9 +344,14 @@ src_configure() { -DQt6Core_MOC_EXECUTABLE="$(qt6_get_bindir)/moc" -DQt6Core_RCC_EXECUTABLE="$(qt6_get_bindir)/rcc" -DBUILD_QT5=OFF + # Drawing module unmaintained and not ported to qt6 + -DBUILD_DRAWING=OFF ) fi + addpredict "/dev/char/" + [[ -c "/dev/udmabuf" ]] && addwrite "/dev/udmabuf" + cmake_src_configure } @@ -246,16 +366,61 @@ src_configure() { src_test() { cd "${BUILD_DIR}" || die + # No module named 'ifcopenshell' #940465 + rm "${BUILD_DIR}/Mod/BIM/nativeifc/ifc_performance_test.py" || die + local -x FREECAD_USER_HOME="${HOME}" local -x FREECAD_USER_DATA="${T}" local -x FREECAD_USER_TEMP="${T}" - ./bin/FreeCADCmd --run-test 0 --set-config AppHomePath="${BUILD_DIR}/" || die + + local fail="" + local run + nonfatal \ + edo "${BUILD_DIR}/bin/FreeCADCmd" \ + --run-test 0 \ + --set-config AppHomePath="${BUILD_DIR}/" \ + --log-file "${T}/FreeCADCmd.log" \ + || fail+=" FreeCADCmd" + + 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" \ + --run-test 0 \ + --set-config AppHomePath="${BUILD_DIR}/" \ + --log-file "${T}/FreeCAD.log" \ + || fail+=" FreeCAD" + + run=virtx + fi + + # nonfatal \ + ${run} cmake_src_test || fail+=" cmake" + if [[ -n "${fail}" ]]; then + eerror "${fail}" + die "${fail}" + fi } src_install() { cmake_src_install - dobin src/Tools/freecad-thumbnailer + 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_ @@ -265,13 +430,13 @@ src_install() { export QT_QPA_PLATFORM exec /usr/$(get_libdir)/${PN}/bin/FreeCAD "\${@}" _EOF_ - mv "${ED}"/usr/$(get_libdir)/${PN}/share/* "${ED}"/usr/share || die "failed to move shared resources" + 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 + 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" + 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/StartPage" "${ED}/usr/$(get_libdir)/${PN}/"{Ext,Mod}/ # compile main package in python site-packages as well python_optimize } diff --git a/media-gfx/freecad/freecad-9999.ebuild b/media-gfx/freecad/freecad-9999.ebuild index afd582d56c4e..c2051afedaa9 100644 --- a/media-gfx/freecad/freecad-9999.ebuild +++ b/media-gfx/freecad/freecad-9999.ebuild @@ -1,11 +1,11 @@ -# Copyright 1999-2024 Gentoo Authors +# Copyright 1999-2025 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=8 -PYTHON_COMPAT=( python3_{10..12} ) +PYTHON_COMPAT=( python3_{11..13} ) -inherit check-reqs cmake flag-o-matic optfeature python-single-r1 qmake-utils xdg +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" HOMEPAGE="https://www.freecad.org/ https://github.com/FreeCAD/FreeCAD" @@ -17,7 +17,9 @@ if [[ ${PV} == *9999* ]]; then EGIT_REPO_URI="https://github.com/${MY_PN}/${MY_PN}.git" S="${WORKDIR}/freecad-${PV}" else - SRC_URI="https://github.com/${MY_PN}/${MY_PN}/archive/refs/tags/${PV}.tar.gz -> ${P}.tar.gz" + SRC_URI=" + https://github.com/${MY_PN}/${MY_PN}/archive/refs/tags/${PV}.tar.gz -> ${P}.tar.gz + " KEYWORDS="~amd64" S="${WORKDIR}/FreeCAD-${PV}" fi @@ -26,17 +28,18 @@ fi # examples are licensed CC-BY-SA (without note of specific version) LICENSE="LGPL-2 CC-BY-SA-4.0" SLOT="0" -IUSE="debug designer +gui netgen pcl smesh spacenav test X" +IUSE="debug designer +gui netgen pcl +smesh spacenav test X" # Modules are found in src/Mod/ and their options defined in: # cMake/FreeCAD_Helpers/InitializeFreeCADBuildOptions.cmake # To get their dependencies: # 'grep REQUIRES_MODS cMake/FreeCAD_Helpers/CheckInterModuleDependencies.cmake' -IUSE+=" addonmgr assembly bim cam cloud fem idf inspection mesh openscad points reverse robot surface +techdraw" +IUSE+=" addonmgr assembly +bim cam cloud fem idf inspection +mesh openscad points reverse robot surface +techdraw" REQUIRED_USE=" ${PYTHON_REQUIRED_USE} bim? ( mesh ) cam? ( mesh ) + gui? ( bim ) designer? ( gui ) fem? ( smesh ) inspection? ( points ) @@ -45,6 +48,7 @@ REQUIRED_USE=" reverse? ( mesh points ) test? ( techdraw ) " +# Draft Workbench needs BIM RESTRICT="!test? ( test )" @@ -99,6 +103,13 @@ RDEPEND=" DEPEND="${RDEPEND} >=dev-cpp/eigen-3.3.1:3 dev-cpp/ms-gsl + test? ( + gui? ( + $(python_gen_cond_dep ' + dev-python/pyside:6=[tools(-),${PYTHON_USEDEP}] + ' ) + ) + ) " BDEPEND=" dev-lang/swig @@ -109,12 +120,77 @@ PATCHES=( "${FILESDIR}"/${PN}-9999-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" ) DOCS=( CODE_OF_CONDUCT.md README.md ) CHECKREQS_DISK_BUILD="2G" +cuda_get_host_compiler() { + if [[ -n "${NVCC_CCBIN}" ]]; then + echo "${NVCC_CCBIN}" + return + fi + + if [[ -n "${CUDAHOSTCXX}" ]]; then + echo "${CUDAHOSTCXX}" + return + fi + + einfo "Trying to find working CUDA host compiler" + + if ! tc-is-gcc && ! tc-is-clang; then + die "$(tc-get-compiler-type) compiler is not supported" + fi + + local compiler compiler_type compiler_version + local package package_version + local NVCC_CCBIN_default + + compiler_type="$(tc-get-compiler-type)" + compiler_version="$("${compiler_type}-major-version")" + + # try the default compiler first + NVCC_CCBIN="$(tc-getCXX)" + NVCC_CCBIN_default="${NVCC_CCBIN}-${compiler_version}" + + compiler="${NVCC_CCBIN/%-${compiler_version}}" + + # store the package so we can re-use it later + if tc-is-gcc; then + package="sys-devel/${compiler_type}" + elif tc-is-clang; then + package="llvm-core/${compiler_type}" + else + die "$(tc-get-compiler-type) compiler is not supported" + fi + + package_version="${package}" + + ebegin "testing ${NVCC_CCBIN_default} (default)" + + while ! nvcc -v -ccbin "${NVCC_CCBIN}" - -x cu <<<"int main(){}" &>> "${T}/cuda_get_host_compiler.log" ; do + eend 1 + + while true; do + # prepare next version + if ! package_version="<$(best_version "${package_version}")"; then + die "could not find a supported version of ${compiler}" + fi + + NVCC_CCBIN="${compiler}-$(ver_cut 1 "${package_version/#<${package}-/}")" + + [[ "${NVCC_CCBIN}" != "${NVCC_CCBIN_default}" ]] && break + done + ebegin "testing ${NVCC_CCBIN}" + done + eend $? + + echo "${NVCC_CCBIN}" + export NVCC_CCBIN +} + pkg_setup() { check-reqs_pkg_setup python-single-r1_pkg_setup @@ -124,6 +200,9 @@ src_prepare() { # Fix desktop file sed -e 's/Exec=FreeCAD/Exec=freecad/' -i src/XDGData/org.freecad.FreeCAD.desktop || die + # deprecated in python-3.11 removed in python-3.13 + sed -e '/import imghdr/d' -i src/Mod/CAM/CAMTests/TestCAMSanity.py || die + cmake_src_prepare } @@ -131,12 +210,25 @@ src_configure() { # -Werror=odr, -Werror=lto-type-mismatch # https://bugs.gentoo.org/875221 # https://github.com/FreeCAD/FreeCAD/issues/13173 + append-flags -fno-strict-aliasing filter-lto # Fix building tests - append-ldflags -Wl,--copy-dt-needed-entries + if ! tc-ld-is-mold; 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 + -DCMAKE_POLICY_DEFAULT_CMP0175="OLD" # add_custom_command + -DCMAKE_POLICY_DEFAULT_CMP0153="OLD" # exec_program + -DBUILD_DESIGNER_PLUGIN=$(usex designer) -DBUILD_FORCE_DIRECTORY=ON # force building in a dedicated directory -DBUILD_GUI=$(usex gui) @@ -151,7 +243,7 @@ src_configure() { -DBUILD_CAM=$(usex cam) -DBUILD_CLOUD=$(usex cloud) -DBUILD_DRAFT=ON - -DBUILD_DRAWING=OFF # Unmaintained and not ported to Qt 6 + # see below for DRAWING -DBUILD_FEM=$(usex fem) -DBUILD_FEM_NETGEN=$(usex fem $(usex netgen)) -DBUILD_FLAT_MESH=$(usex mesh) # a submodule of MeshPart @@ -171,14 +263,14 @@ src_configure() { -DBUILD_POINTS=$(usex points) -DBUILD_REVERSEENGINEERING=$(usex reverse) -DBUILD_ROBOT=$(usex robot) - -DBUILD_SANDBOX=OFF + # -DBUILD_SANDBOX=OFF -DBUILD_SHOW=$(usex gui) -DBUILD_SKETCHER=ON # needed by draft workspace -DBUILD_SPREADSHEET=ON -DBUILD_START=ON -DBUILD_SURFACE=$(usex surface) -DBUILD_TECHDRAW=$(usex techdraw) - -DBUILD_TEST=ON # always build test workbench for run-time testing + -DBUILD_TEST="$(usex test)" # always build test workbench for run-time testing -DBUILD_TUX=$(usex gui) -DBUILD_WEB=ON # needed by start workspace @@ -192,6 +284,8 @@ src_configure() { -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 + -DFREECAD_USE_EXTERNAL_FMT="yes" + -DFREECAD_USE_EXTERNAL_KDL=OFF # https://github.com/FreeCAD/FreeCAD/commit/9f98866 -DFREECAD_USE_FREETYPE=ON -DFREECAD_USE_OCC_VARIANT:STRING="Official Version" -DFREECAD_USE_PCL=$(usex pcl) @@ -202,11 +296,24 @@ src_configure() { # sub-packages will still be installed inside /usr/lib64/freecad -DINSTALL_TO_SITEPACKAGES=ON - # Use the version of shiboken2 that matches the selected python version + # Use the version of pyside[tools] that matches the selected python version -DPYTHON_CONFIG_SUFFIX="-${EPYTHON}" - -DPython3_EXECUTABLE=${PYTHON} + # -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 + ) + else + mycmakeargs+=( + -DENABLE_DEVELOPER_TESTS=OFF + ) + fi + if use debug; then # BUILD_SANDBOX currently broken, see # https://forum.freecadweb.org/viewtopic.php?f=4&t=36071&start=30#p504595 @@ -221,6 +328,11 @@ src_configure() { ) fi + if use fem || use smesh; then + export CUDAHOSTCXX="$(cuda_get_host_compiler)" + cuda_add_sandbox + fi + if use gui; then mycmakeargs+=( -DFREECAD_QT_MAJOR_VERSION=6 @@ -229,9 +341,14 @@ src_configure() { -DQt6Core_MOC_EXECUTABLE="$(qt6_get_bindir)/moc" -DQt6Core_RCC_EXECUTABLE="$(qt6_get_bindir)/rcc" -DBUILD_QT5=OFF + # Drawing module unmaintained and not ported to qt6 + -DBUILD_DRAWING=OFF ) fi + addpredict "/dev/char/" + [[ -c "/dev/udmabuf" ]] && addwrite "/dev/udmabuf" + cmake_src_configure } @@ -244,18 +361,87 @@ src_configure() { # configuration. Without those, there is a sandbox violation, when it # tries to create /var/lib/portage/home/.FreeCAD directory. src_test() { + 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 + local -x FREECAD_USER_HOME="${HOME}" local -x FREECAD_USER_DATA="${T}" local -x FREECAD_USER_TEMP="${T}" - ./bin/FreeCADCmd --run-test 0 --set-config AppHomePath="${BUILD_DIR}/" || die + + local fail="" + local run + nonfatal \ + edo "${BUILD_DIR}/bin/FreeCADCmd" \ + --run-test 0 \ + --set-config AppHomePath="${BUILD_DIR}/" \ + --log-file "${T}/FreeCADCmd.log" \ + || fail+=" FreeCADCmd" + + 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" \ + --run-test 0 \ + --set-config AppHomePath="${BUILD_DIR}/" \ + --log-file "${T}/FreeCAD.log" \ + || fail+=" FreeCAD" + + run=virtx + fi + + # nonfatal \ + ${run} cmake_src_test || fail+=" cmake" + if [[ -n "${fail}" ]]; then + eerror "${fail}" + die "${fail}" + fi } src_install() { cmake_src_install - dobin src/Tools/freecad-thumbnailer + 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_ @@ -265,13 +451,13 @@ src_install() { export QT_QPA_PLATFORM exec /usr/$(get_libdir)/${PN}/bin/FreeCAD "\${@}" _EOF_ - mv "${ED}"/usr/$(get_libdir)/${PN}/share/* "${ED}"/usr/share || die "failed to move shared resources" + 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 + 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" + 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/StartPage" "${ED}/usr/$(get_libdir)/${PN}/"{Ext,Mod}/ # compile main package in python site-packages as well python_optimize }