public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Sam James" <sam@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] repo/gentoo:master commit in: media-gfx/freecad/, media-gfx/freecad/files/
Date: Thu, 08 May 2025 06:29:34 +0000 (UTC)	[thread overview]
Message-ID: <1746685607.4e4e6923f46abc463b88dca78e4dee07b65d5e69.sam@gentoo> (raw)

commit:     4e4e6923f46abc463b88dca78e4dee07b65d5e69
Author:     Paul Zander <negril.nx+gentoo <AT> gmail <DOT> com>
AuthorDate: Fri May  2 20:28:19 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> 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 <negril.nx+gentoo <AT> gmail.com>
Part-of: https://github.com/gentoo/gentoo/pull/41967
Signed-off-by: Sam James <sam <AT> 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 <negril.nx@gmail.com>
+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 <negril.nx@gmail.com>
+
+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
 }


             reply	other threads:[~2025-05-08  6:29 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-05-08  6:29 Sam James [this message]
  -- strict thread matches above, loose matches on Subject: below --
2024-11-24 20:25 [gentoo-commits] repo/gentoo:master commit in: media-gfx/freecad/, media-gfx/freecad/files/ Sam James
2024-11-23 19:40 Andreas Sturmlechner
2024-11-20 10:31 Nowa Ammerlaan
2024-06-03 15:00 Andrew Ammerlaan
2024-05-29 17:07 Andrew Ammerlaan
2024-04-14  8:56 Andrew Ammerlaan
2023-08-19  9:05 Miroslav Šulc
2022-04-02 12:58 Andreas Sturmlechner
2022-02-03  2:19 Sam James
2021-11-02 10:04 Sam James
2021-06-21 22:26 Sam James
2021-05-04 22:02 Sam James
2021-03-14 11:41 Joonas Niilola
2021-02-15  9:04 Joonas Niilola
2017-11-06  1:58 Andreas Sturmlechner
2016-04-03 19:08 David Seifert

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1746685607.4e4e6923f46abc463b88dca78e4dee07b65d5e69.sam@gentoo \
    --to=sam@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox