Diff freecad-1.0.0-r2 with a freecad-9999

/usr/portage/media-gfx/freecad/freecad-9999.ebuild 2025-07-29 16:22:14.340455366 +0300
3 3

  
4 4
EAPI=8
5 5

  
6
PYTHON_COMPAT=( python3_{10..12} )
6
PYTHON_COMPAT=( python3_{11..13} )
7 7

  
8
inherit check-reqs cmake flag-o-matic optfeature python-single-r1 qmake-utils xdg
8
inherit check-reqs cmake cuda edo flag-o-matic optfeature python-single-r1 qmake-utils toolchain-funcs xdg virtualx
9 9

  
10 10
DESCRIPTION="Qt based Computer Aided Design application"
11 11
HOMEPAGE="https://www.freecad.org/ https://github.com/FreeCAD/FreeCAD"
......
17 17
	EGIT_REPO_URI="https://github.com/${MY_PN}/${MY_PN}.git"
18 18
	S="${WORKDIR}/freecad-${PV}"
19 19
else
20
	SRC_URI="https://github.com/${MY_PN}/${MY_PN}/archive/refs/tags/${PV}.tar.gz -> ${P}.tar.gz"
21
	KEYWORDS="amd64"
20
	SRC_URI="
21
		https://github.com/${MY_PN}/${MY_PN}/archive/refs/tags/${PV}.tar.gz -> ${P}.tar.gz
22
	"
23
	KEYWORDS="~amd64"
22 24
	S="${WORKDIR}/FreeCAD-${PV}"
23 25
fi
24 26

  
......
31 33
# cMake/FreeCAD_Helpers/InitializeFreeCADBuildOptions.cmake
32 34
# To get their dependencies:
33 35
# 'grep REQUIRES_MODS cMake/FreeCAD_Helpers/CheckInterModuleDependencies.cmake'
34
IUSE+=" addonmgr +bim cam cloud fem idf inspection +mesh openscad points reverse robot surface +techdraw"
36
IUSE+=" addonmgr assembly +bim cam cloud fem idf inspection +mesh openscad points reverse robot surface +techdraw"
35 37

  
36 38
REQUIRED_USE="
37 39
	${PYTHON_REQUIRED_USE}
......
66 68
		dev-python/pybind11[${PYTHON_USEDEP}]
67 69
		dev-python/pyyaml[${PYTHON_USEDEP}]
68 70
	')
71
	assembly? ( sci-libs/ondselsolver )
69 72
	cloud? (
70 73
		dev-libs/openssl:=
71 74
		net-misc/curl
......
100 103
DEPEND="${RDEPEND}
101 104
	>=dev-cpp/eigen-3.3.1:3
102 105
	dev-cpp/ms-gsl
106
	test? (
107
		gui? (
108
			$(python_gen_cond_dep '
109
				dev-python/pyside:6=[tools(-),${PYTHON_USEDEP}]
110
			' )
111
		)
112
	)
103 113
"
104 114
BDEPEND="
105 115
	dev-lang/swig
......
107 117
"
108 118

  
109 119
PATCHES=(
110
	"${FILESDIR}"/${PN}-1.0.0-r1-Gentoo-specific-don-t-check-vcs.patch
120
	"${FILESDIR}"/${PN}-9999-Gentoo-specific-don-t-check-vcs.patch
111 121
	"${FILESDIR}"/${PN}-0.21.0-0001-Gentoo-specific-disable-ccache-usage.patch
112 122
	"${FILESDIR}"/${PN}-9999-tests-src-Qt-only-build-test-for-BUILD_GUI-ON.patch
123
	"${FILESDIR}/${PN}-1.0.0-r4-error-cannot-convert-bool-to-App-DocumentInitFlags.patch"
113 124
)
114 125

  
115 126
DOCS=( CODE_OF_CONDUCT.md README.md )
116 127

  
117 128
CHECKREQS_DISK_BUILD="2G"
118 129

  
130
cuda_get_host_compiler() {
131
	if [[ -n "${NVCC_CCBIN}" ]]; then
132
		echo "${NVCC_CCBIN}"
133
		return
134
	fi
135

  
136
	if [[ -n "${CUDAHOSTCXX}" ]]; then
137
		echo "${CUDAHOSTCXX}"
138
		return
139
	fi
140

  
141
	if ! has_version dev-util/nvidia-cuda-toolkit ; then
142
		return
143
	fi
144

  
145
	einfo "Trying to find working CUDA host compiler"
146

  
147
	if ! tc-is-gcc && ! tc-is-clang; then
148
		die "$(tc-get-compiler-type) compiler is not supported"
149
	fi
150

  
151
	local compiler compiler_type compiler_version
152
	local package package_version
153
	local NVCC_CCBIN_default
154

  
155
	compiler_type="$(tc-get-compiler-type)"
156
	compiler_version="$("${compiler_type}-major-version")"
157

  
158
	# try the default compiler first
159
	NVCC_CCBIN="$(tc-getCXX)"
160
	NVCC_CCBIN_default="${NVCC_CCBIN}-${compiler_version}"
161

  
162
	compiler="${NVCC_CCBIN/%-${compiler_version}}"
163

  
164
	# store the package so we can re-use it later
165
	if tc-is-gcc; then
166
		package="sys-devel/${compiler_type}"
167
	elif tc-is-clang; then
168
		package="llvm-core/${compiler_type}"
169
	else
170
		die "$(tc-get-compiler-type) compiler is not supported"
171
	fi
172

  
173
	package_version="${package}"
174

  
175
	ebegin "testing ${NVCC_CCBIN_default} (default)"
176

  
177
	while ! nvcc -v -ccbin "${NVCC_CCBIN}" - -x cu <<<"int main(){}" &>> "${T}/cuda_get_host_compiler.log" ; do
178
		eend 1
179

  
180
		while true; do
181
			# prepare next version
182
			if ! package_version="<$(best_version "${package_version}")"; then
183
				die "could not find a supported version of ${compiler}"
184
			fi
185

  
186
			NVCC_CCBIN="${compiler}-$(ver_cut 1 "${package_version/#<${package}-/}")"
187

  
188
			[[ "${NVCC_CCBIN}" != "${NVCC_CCBIN_default}" ]] && break
189
		done
190
		ebegin "testing ${NVCC_CCBIN}"
191
	done
192
	eend $?
193

  
194
	echo "${NVCC_CCBIN}"
195
	export NVCC_CCBIN
196
}
197

  
119 198
pkg_setup() {
120 199
	check-reqs_pkg_setup
121 200
	python-single-r1_pkg_setup
......
125 204
	# Fix desktop file
126 205
	sed -e 's/Exec=FreeCAD/Exec=freecad/' -i src/XDGData/org.freecad.FreeCAD.desktop || die
127 206

  
207
	# deprecated in python-3.11 removed in python-3.13
208
	sed -e '/import imghdr/d' -i src/Mod/CAM/CAMTests/TestCAMSanity.py || die
209

  
128 210
	cmake_src_prepare
129 211
}
130 212

  
......
132 214
	# -Werror=odr, -Werror=lto-type-mismatch
133 215
	# https://bugs.gentoo.org/875221
134 216
	# https://github.com/FreeCAD/FreeCAD/issues/13173
217
	append-flags -fno-strict-aliasing
135 218
	filter-lto
136 219

  
137 220
	# Fix building tests
138
	append-ldflags -Wl,--copy-dt-needed-entries
221
	if ! tc-ld-is-mold; then # 940524
222
		append-ldflags -Wl,--copy-dt-needed-entries
223
	fi
224

  
225
	# cmake-4
226
	# https://github.com/FreeCAD/FreeCAD/issues/20246
227
	: "${CMAKE_POLICY_VERSION_MINIMUM:=3.10}"
228
	export CMAKE_POLICY_VERSION_MINIMUM
139 229

  
140 230
	local mycmakeargs=(
231
		-DCMAKE_POLICY_DEFAULT_CMP0144="OLD" # FLANN_ROOT
232
		-DCMAKE_POLICY_DEFAULT_CMP0167="OLD" # FindBoost
233
		-DCMAKE_POLICY_DEFAULT_CMP0175="OLD" # add_custom_command
234
		-DCMAKE_POLICY_DEFAULT_CMP0153="OLD" # exec_program
235

  
141 236
		-DBUILD_DESIGNER_PLUGIN=$(usex designer)
142 237
		-DBUILD_FORCE_DIRECTORY=ON				# force building in a dedicated directory
143 238
		-DBUILD_GUI=$(usex gui)
......
147 242

  
148 243
		# Modules
149 244
		-DBUILD_ADDONMGR=$(usex addonmgr)
150
		-DBUILD_ASSEMBLY=OFF					# Requires OndselSolver
245
		-DBUILD_ASSEMBLY=$(usex assembly)
151 246
		-DBUILD_BIM=$(usex bim)
152 247
		-DBUILD_CAM=$(usex cam)
153 248
		-DBUILD_CLOUD=$(usex cloud)
......
172 267
		-DBUILD_POINTS=$(usex points)
173 268
		-DBUILD_REVERSEENGINEERING=$(usex reverse)
174 269
		-DBUILD_ROBOT=$(usex robot)
175
		-DBUILD_SANDBOX=OFF
270
		# -DBUILD_SANDBOX=OFF
176 271
		-DBUILD_SHOW=$(usex gui)
177 272
		-DBUILD_SKETCHER=ON						# needed by draft workspace
178 273
		-DBUILD_SPREADSHEET=ON
179 274
		-DBUILD_START=ON
180 275
		-DBUILD_SURFACE=$(usex surface)
181 276
		-DBUILD_TECHDRAW=$(usex techdraw)
182
		-DBUILD_TEST=ON							# always build test workbench for run-time testing
277
		-DBUILD_TEST="$(usex test)"				# always build test workbench for run-time testing
183 278
		-DBUILD_TUX=$(usex gui)
184 279
		-DBUILD_WEB=ON							# needed by start workspace
185 280

  
......
190 285

  
191 286
		-DFREECAD_BUILD_DEBIAN=OFF
192 287

  
288
		-DFREECAD_USE_EXTERNAL_ONDSELSOLVER=$(usex assembly)
193 289
		-DFREECAD_USE_EXTERNAL_SMESH=OFF		# no package in Gentoo
194 290
		-DFREECAD_USE_EXTERNAL_ZIPIOS=OFF		# doesn't work yet, also no package in Gentoo tree
291
		-DFREECAD_USE_EXTERNAL_FMT="yes"
292
		-DFREECAD_USE_EXTERNAL_KDL=OFF # https://github.com/FreeCAD/FreeCAD/commit/9f98866
195 293
		-DFREECAD_USE_FREETYPE=ON
196 294
		-DFREECAD_USE_OCC_VARIANT:STRING="Official Version"
197 295
		-DFREECAD_USE_PCL=$(usex pcl)
......
202 300
		# sub-packages will still be installed inside /usr/lib64/freecad
203 301
		-DINSTALL_TO_SITEPACKAGES=ON
204 302

  
205
		# Use the version of shiboken2 that matches the selected python version
303
		# Use the version of pyside[tools] that matches the selected python version
206 304
		-DPYTHON_CONFIG_SUFFIX="-${EPYTHON}"
207
		-DPython3_EXECUTABLE=${PYTHON}
305
		# -DPython3_EXECUTABLE=${EPYTHON}
306

  
307
		-DPACKAGE_WCREF="%{release} (Git)"
308
		-DPACKAGE_WCURL="git://github.com/FreeCAD/FreeCAD.git main"
208 309
	)
209 310

  
311
	if [[ ${PV} == *9999* ]]; then
312
		mycmakeargs+=(
313
			-DENABLE_DEVELOPER_TESTS=ON
314
		)
315
	else
316
		mycmakeargs+=(
317
			-DENABLE_DEVELOPER_TESTS=OFF
318
		)
319
	fi
320

  
210 321
	if use debug; then
211 322
		# BUILD_SANDBOX currently broken, see
212 323
		# https://forum.freecadweb.org/viewtopic.php?f=4&t=36071&start=30#p504595
......
221 332
		)
222 333
	fi
223 334

  
335
	if use fem || use smesh; then
336
		export CUDAHOSTCXX="$(cuda_get_host_compiler)"
337
		cuda_add_sandbox
338
	fi
339

  
224 340
	if use gui; then
225 341
		mycmakeargs+=(
226 342
			-DFREECAD_QT_MAJOR_VERSION=6
......
234 350
		)
235 351
	fi
236 352

  
353
	addpredict "/dev/char/"
354
	[[ -c "/dev/udmabuf" ]] && addwrite "/dev/udmabuf"
355

  
237 356
	cmake_src_configure
238 357
}
239 358

  
......
246 365
# configuration. Without those, there is a sandbox violation, when it
247 366
# tries to create /var/lib/portage/home/.FreeCAD directory.
248 367
src_test() {
368
	local -x EPYTEST_IGNORE=(
369
		"Mod/BIM/nativeifc/ifc_performance_test.py"
370
	)
371
	local -x EPYTEST_DESELECT=(
372
		"Mod/AddonManager/AddonManagerTest/gui/test_installer_gui.py::TestInstallerGui::test_check_python_version_bad"
373
		"Mod/AddonManager/AddonManagerTest/gui/test_installer_gui.py::TestInstallerGui::test_check_python_version_bad"
374
		"Mod/AddonManager/AddonManagerTest/gui/test_installer_gui.py::TestInstallerGui::test_dependency_failure_dialog"
375
		"Mod/AddonManager/AddonManagerTest/gui/test_installer_gui.py::TestInstallerGui::test_failure_dialog"
376
		"Mod/AddonManager/AddonManagerTest/gui/test_installer_gui.py::TestInstallerGui::test_handle_disallowed_python"
377
		"Mod/AddonManager/AddonManagerTest/gui/test_installer_gui.py::TestInstallerGui::test_install"
378
		"Mod/AddonManager/AddonManagerTest/gui/test_installer_gui.py::TestInstallerGui::test_no_pip_dialog"
379
		"Mod/AddonManager/AddonManagerTest/gui/test_installer_gui.py::TestInstallerGui::test_no_python_dialog"
380
		"Mod/AddonManager/AddonManagerTest/gui/test_installer_gui.py::TestInstallerGui::test_report_missing_workbenches_multiple"
381
		"Mod/AddonManager/AddonManagerTest/gui/test_installer_gui.py::TestInstallerGui::test_report_missing_workbenches_single"
382
		"Mod/AddonManager/AddonManagerTest/gui/test_installer_gui.py::TestInstallerGui::test_success_dialog"
383

  
384
		"Mod/AddonManager/AddonManagerTest/gui/test_uninstaller_gui.py::TestUninstallerGUI::test_confirmation_dialog_cancel"
385
		"Mod/AddonManager/AddonManagerTest/gui/test_uninstaller_gui.py::TestUninstallerGUI::test_confirmation_dialog_yes"
386
		"Mod/AddonManager/AddonManagerTest/gui/test_uninstaller_gui.py::TestUninstallerGUI::test_failure_dialog"
387
		"Mod/AddonManager/AddonManagerTest/gui/test_uninstaller_gui.py::TestUninstallerGUI::test_progress_dialog"
388
		"Mod/AddonManager/AddonManagerTest/gui/test_uninstaller_gui.py::TestUninstallerGUI::test_success_dialog"
389
		"Mod/AddonManager/AddonManagerTest/gui/test_uninstaller_gui.py::TestUninstallerGUI::test_timer_launches_progress_dialog"
390
	)
391

  
249 392
	cd "${BUILD_DIR}" || die
250 393

  
394
	# No module named 'ifcopenshell' #940465
395
	rm "${BUILD_DIR}/Mod/BIM/nativeifc/ifc_performance_test.py" || die
396

  
251 397
	local -x FREECAD_USER_HOME="${HOME}"
252 398
	local -x FREECAD_USER_DATA="${T}"
253 399
	local -x FREECAD_USER_TEMP="${T}"
254
	./bin/FreeCADCmd --run-test 0 --set-config AppHomePath="${BUILD_DIR}/" || die
400

  
401
	local fail=""
402
	local run
403
	nonfatal \
404
		edo "${BUILD_DIR}/bin/FreeCADCmd" \
405
			--run-test 0 \
406
			--set-config AppHomePath="${BUILD_DIR}/" \
407
			--log-file "${T}/FreeCADCmd.log" \
408
		|| fail+=" FreeCADCmd"
409

  
410
	if use gui; then
411
		# this is naive
412
		addpredict "/dev/char/"
413
		addwrite "/dev/dri/renderD128"
414
		addwrite "/dev/dri/card0"
415
		[[ -c "/dev/nvidiactl" ]] && addwrite "/dev/nvidiactl"
416
		[[ -c "/dev/nvidia-uvm" ]] && addwrite "/dev/nvidia-uvm"
417
		[[ -c "/dev/nvidia-uvm-tools" ]] && addwrite "/dev/nvidia-uvm-tools"
418
		[[ -c "/dev/nvidia0" ]] && addwrite "/dev/nvidia0"
419
		[[ -c "/dev/udmabuf" ]] && addwrite "/dev/udmabuf"
420

  
421
		nonfatal \
422
			virtx edo "${BUILD_DIR}/bin/FreeCAD" \
423
				--run-test 0 \
424
				--set-config AppHomePath="${BUILD_DIR}/" \
425
				--log-file "${T}/FreeCAD.log" \
426
			|| fail+=" FreeCAD"
427

  
428
		run=virtx
429
	fi
430

  
431
	# nonfatal \
432
		${run} cmake_src_test || fail+=" cmake"
433
	if [[ -n "${fail}" ]]; then
434
		eerror "${fail}"
435
		die "${fail}"
436
	fi
255 437
}
256 438

  
257 439
src_install() {
258 440
	cmake_src_install
259 441

  
260
	dobin src/Tools/freecad-thumbnailer
442
	if [[ -f src/Tools/freecad-thumbnailer ]]; then
443
		dobin src/Tools/freecad-thumbnailer
444
	fi
445

  
446
	if [[ -f freecad-thumbnailer ]]; then
447
		dobin freecad-thumbnailer
448
	fi
261 449

  
262 450
	if use gui; then
263 451
		newbin - freecad <<- _EOF_
......
267 455
		export QT_QPA_PLATFORM
268 456
		exec /usr/$(get_libdir)/${PN}/bin/FreeCAD "\${@}"
269 457
		_EOF_
270
		mv "${ED}"/usr/$(get_libdir)/${PN}/share/* "${ED}"/usr/share || die "failed to move shared resources"
458
		mv "${ED}/usr/$(get_libdir)/${PN}/share/"* "${ED}/usr/share" || die "failed to move shared resources"
271 459
	fi
272
	dosym -r /usr/$(get_libdir)/${PN}/bin/FreeCADCmd /usr/bin/freecadcmd
460
	dosym -r "/usr/$(get_libdir)/${PN}/bin/FreeCADCmd" "/usr/bin/freecadcmd"
273 461

  
274
	rm -r "${ED}"/usr/$(get_libdir)/${PN}/include/E57Format || die "failed to drop unneeded include directory E57Format"
462
	rm -r "${ED}/usr/$(get_libdir)/${PN}/include/E57Format" || die "failed to drop unneeded include directory E57Format"
275 463

  
276
	python_optimize "${ED}"/usr/share/${PN}/data/Mod/Start/StartPage "${ED}"/usr/$(get_libdir)/${PN}{/Ext,/Mod}/
464
	python_optimize "${ED}/usr/share/${PN}/data/Mod/Start/StartPage" "${ED}/usr/$(get_libdir)/${PN}/"{Ext,Mod}/
277 465
	# compile main package in python site-packages as well
278 466
	python_optimize
279 467
}
Thank you!