commit: 9561ca1722798d21a0b2e2c11fe3bf3a32a10eef Author: Paul Zander <negril.nx+gentoo <AT> gmail <DOT> com> AuthorDate: Sun Nov 9 23:05:59 2025 +0000 Commit: Andreas Sturmlechner <asturm <AT> gentoo <DOT> org> CommitDate: Fri Jan 2 17:15:22 2026 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=9561ca17
sci-libs/opencascade: add 7.8.1-r1 Closes: https://bugs.gentoo.org/946076 Signed-off-by: Paul Zander <negril.nx+gentoo <AT> gmail.com> Part-of: https://github.com/gentoo/gentoo/pull/44585 Signed-off-by: Andreas Sturmlechner <asturm <AT> gentoo.org> sci-libs/opencascade/opencascade-7.8.1-r1.ebuild | 436 +++++++++++++++++++++++ 1 file changed, 436 insertions(+) diff --git a/sci-libs/opencascade/opencascade-7.8.1-r1.ebuild b/sci-libs/opencascade/opencascade-7.8.1-r1.ebuild new file mode 100644 index 000000000000..701d440ded80 --- /dev/null +++ b/sci-libs/opencascade/opencascade-7.8.1-r1.ebuild @@ -0,0 +1,436 @@ +# Copyright 1999-2025 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +inherit cmake cuda flag-o-matic multiprocessing virtualx xdg-utils + +DESCRIPTION="Development platform for CAD/CAE, 3D surface/solid modeling and data exchange" +HOMEPAGE="https://www.opencascade.com" + +MY_PN="OCCT" + +MY_TEST_PV="7.8.0" +MY_TEST_PV2="${MY_TEST_PV//./_}" + +SRC_URI=" + test? ( + https://github.com/Open-Cascade-SAS/${MY_PN}/releases/download/V${MY_TEST_PV2}/${PN}-dataset-${MY_TEST_PV}.tar.xz + ) +" + +if [[ ${PV} = *9999* ]] ; then + inherit git-r3 + EGIT_REPO_URI="https://github.com/Open-Cascade-SAS/${MY_PN}.git" +else + MY_PV="${PV//./_}" + SRC_URI+=" + https://github.com/Open-Cascade-SAS/${MY_PN}/archive/refs/tags/V${MY_PV}.tar.gz -> ${P}.tar.gz + " + S="${WORKDIR}/${MY_PN}-${MY_PV}" + + if [[ "${PV}" != *rc* ]]; then + KEYWORDS="~amd64 ~arm ~arm64 ~riscv ~x86" + fi +fi + +LICENSE="|| ( Open-CASCADE-LGPL-2.1-Exception-1.0 LGPL-2.1 )" +SLOT="0/$(ver_cut 1-2)" +IUSE="X debug doc freeimage gles2 jemalloc json opengl optimize tbb test testprograms tk truetype vtk" + +# vtk libs are hardcoded in src/TKIVtk*/EXTERNLIB +REQUIRED_USE=" + ?? ( + optimize + tbb + ) + test? ( + freeimage + json + opengl + tk + truetype + ) + vtk? ( + X + opengl + ) +" + +RESTRICT="!test? ( test )" + +RDEPEND=" + dev-lang/tcl:= + dev-libs/double-conversion + tk? ( + dev-lang/tk:= + ) + gles2? ( + media-libs/libglvnd + ) + opengl? ( + media-libs/libglvnd[X] + ) + X? ( + x11-libs/libX11 + ) + freeimage? ( + media-libs/freeimage + ) + jemalloc? ( + dev-libs/jemalloc + ) + tbb? ( + dev-cpp/tbb:= + ) + truetype? ( + media-libs/fontconfig + media-libs/freetype:2 + ) + vtk? ( + sci-libs/vtk:=[rendering,truetype?] + tbb? ( + sci-libs/vtk[tbb] + ) + ) +" +DEPEND=" + ${RDEPEND} + X? ( + x11-base/xorg-proto + ) + json? ( + dev-libs/rapidjson + ) + test? ( + freeimage? ( + media-libs/freeimage[jpeg,mng,png,tiff] + ) + truetype? ( + media-fonts/noto-cjk + media-fonts/urw-fonts + ) + ) +" +BDEPEND=" + doc? ( + app-text/doxygen[dot] + ) + test? ( + dev-tcltk/thread + ) +" + +PATCHES=( + "${FILESDIR}/${PN}-7.5.1-0005-fix-write-permissions-on-scripts.patch" + "${FILESDIR}/${PN}-7.5.1-0006-fix-creation-of-custom.sh-script.patch" + "${FILESDIR}/${PN}-7.7.0-fix-installation-of-cmake-config-files.patch" + "${FILESDIR}/${PN}-7.7.0-avoid-pre-stripping-binaries.patch" + "${FILESDIR}/${PN}-7.7.0-musl.patch" + "${FILESDIR}/${PN}-7.7.0-tbb-detection.patch" + "${FILESDIR}/${PN}-7.7.0-jemalloc-lib-type.patch" + "${FILESDIR}/${PN}-7.8.0-cmake-min-version.patch" + "${FILESDIR}/${PN}-7.8.0-tests.patch" + "${FILESDIR}/${PN}-7.8.0-jemalloc-noexcept.patch" + "${FILESDIR}/${PN}-7.8.1-vtk_components.patch" + "${FILESDIR}/${PN}-7.8.1-freetype-const.patch" +) + +src_unpack() { + if [[ ${PV} = *9999* ]] ; then + git-r3_src_unpack + else + unpack "${P}.tar.gz" + fi + + if use test; then + pushd "${WORKDIR}" > /dev/null || die + # should be in paths indicated by CSF_TestDataPath environment variable, + # or in subfolder data in the script directory + unpack "${PN}-dataset-${MY_TEST_PV}.tar.xz" + popd > /dev/null || die + fi +} + +src_prepare() { + # File DEFINES has not been found in + touch src/TKOpenGles/DEFINES || die + + cmake_src_prepare + + sed -e 's|/lib\$|/'"$(get_libdir)"'\$|' \ + -i adm/templates/OpenCASCADEConfig.cmake.in || die + + # There is an OCCT_UPDATE_TARGET_FILE cmake macro that fails due to some + # assumptions it makes about installation paths. Rather than fixing it, just + # get rid of the mechanism altogether - its purpose is to allow a + # side-by-side installation of release and debug libraries. + sed -e 's|\\${OCCT_INSTALL_BIN_LETTER}||' \ + -i adm/cmake/occt_toolkit.cmake || die +} + +src_configure() { + # -Werror=odr + # https://bugs.gentoo.org/862912 + # https://tracker.dev.opencascade.org/view.php?id=33091 + filter-lto + + local mycmakeargs=( + -D3RDPARTY_DIR="${ESYSROOT}/usr" + -DBUILD_CPP_STANDARD="C++17" + -DBUILD_SOVERSION_NUMBERS=2 + + -DBUILD_DOC_Overview="$(usex doc)" + -DBUILD_Inspector="no" + + -DBUILD_ENABLE_FPE_SIGNAL_HANDLER="$(usex debug)" + -DBUILD_USE_PCH="no" + # -DBUILD_OPT_PROFILE="Default" # Production + # -DBUILD_RESOURCES="yes" + # -DBUILD_YACCLEX="yes" + + -DBUILD_RELEASE_DISABLE_EXCEPTIONS="no" # bug #847916 + -DINSTALL_DIR="${EPREFIX}/usr" + -DINSTALL_DIR_BIN="$(get_libdir)/${PN}/bin" + -DINSTALL_DIR_CMAKE="$(get_libdir)/cmake/${PN}" + -DINSTALL_DIR_DATA="share/${PN}/data" + -DINSTALL_DIR_DOC="share/doc/${PF}" + -DINSTALL_DIR_INCLUDE="include/${PN}" + -DINSTALL_DIR_LIB="$(get_libdir)/${PN}" + -DINSTALL_DIR_RESOURCE="share/${PN}/resources" + # -DINSTALL_DIR_SAMPLES="share/${PN}/samples" + -DINSTALL_DIR_SCRIPT="$(get_libdir)/${PN}/bin" + -DINSTALL_DIR_TESTS="share/${PN}/tests" + -DINSTALL_DIR_WITH_VERSION="no" + -DINSTALL_SAMPLES="no" + + -DINSTALL_TEST_CASES="$(usex testprograms)" + + # no package yet in tree + -DUSE_DRACO="no" + # ffmpeg: https://tracker.dev.opencascade.org/view.php?id=32871 + -DUSE_FFMPEG="no" + -DUSE_FREEIMAGE="$(usex freeimage)" + -DUSE_FREETYPE="$(usex truetype)" + # Indicates whether OpenGL ES 2.0 should be used in OCCT visualization module + -DUSE_GLES2="$(usex gles2)" + # Indicates whether OpenGL desktop should be used in OCCT visualization module + -DUSE_OPENGL="$(usex opengl)" + # no package in tree + -DUSE_OPENVR="no" + -DUSE_RAPIDJSON="$(usex json)" + -DUSE_TBB="$(usex tbb)" + -DUSE_TK="$(usex tk)" + -DUSE_VTK="$(usex vtk)" + -DUSE_XLIB="$(usex X)" + ) + + # Select using memory manager tool. + if ! use jemalloc && ! use tbb; then + mycmakeargs+=( -DUSE_MMGR_TYPE=NATIVE ) + elif use jemalloc && ! use tbb; then + mycmakeargs+=( + -DUSE_MMGR_TYPE=JEMALLOC + -D3RDPARTY_JEMALLOC_INCLUDE_DIR="${ESYSROOT}/usr/include/jemalloc" + ) + elif ! use jemalloc && use tbb; then + mycmakeargs+=( -DUSE_MMGR_TYPE=TBB ) + elif use jemalloc && use tbb; then + mycmakeargs+=( -DUSE_MMGR_TYPE=FLEXIBLE ) + fi + + if use doc; then + mycmakeargs+=( + -DINSTALL_DOC_Overview="yes" + -D3RDPARTY_SKIP_DOT_EXECUTABLE="no" + ) + fi + + if use tbb; then + mycmakeargs+=( + -D3RDPARTY_TBB_DIR="${ESYSROOT}/usr" + ) + fi + + if use vtk; then + local vtk_ver + vtk_ver="$(best_version "sci-libs/vtk")" + vtk_ver=$(ver_cut 1-2 "${vtk_ver#sci-libs/vtk-}") + mycmakeargs+=( + -D3RDPARTY_VTK_INCLUDE_DIR="${ESYSROOT}/usr/include/vtk-${vtk_ver}" + -D3RDPARTY_VTK_LIBRARY_DIR="${ESYSROOT}/usr/$(get_libdir)" + ) + + # USE=vtk depends on sci-lib/vtk, which looks up a cuda compiler when build with USE=cuda. + # We therefore need to set the correct CUDAHOSTCXX and setup the sandbox. + if has_version "sci-libs/vtk[cuda]"; then + cuda_add_sandbox + addpredict "/dev/char" + export CUDAHOSTCXX="$(cuda_gccdir)" + fi + fi + + cmake_src_configure + + sed -e "s|lib/|$(get_libdir)/|" \ + -e "s|VAR_CASROOT|${EPREFIX}/usr|" \ + < "${FILESDIR}/${PN}.env.in" > "${T}/99${PN}" || die + + # use TBB for memory allocation optimizations + if use tbb; then + sed -e 's|^#MMGT_OPT=0$|MMGT_OPT=2|' -i "${T}/99${PN}" || die + fi + + # use internal optimized memory manager and don't clear memory with this + # memory manager. + if use optimize ; then + sed -e 's|^#MMGT_OPT=0$|MMGT_OPT=1|' \ + -e 's|^#MMGT_CLEAR=1$|MMGT_CLEAR=0|' \ + -i "${T}/99${PN}" || die + fi +} + +src_test() { + cat >> "${BUILD_DIR}/custom.sh" <<- _EOF_ || die + export CSF_TestDataPath="${WORKDIR}/${PN}-dataset-${MY_TEST_PV}" + _EOF_ + + local test_file="${T}/testscript.tcl" + + local draw_opts=( + i # see ${BUILD_DIR}/custom*.sh + # -b # batch mode (no GUI, no viewers) + -v # no GUI, use virtual (off-screen) windows for viewers + ) + + local test_names=( + "demo draw bug30430" # prone to dying due to cpu limit + ) + + local test_opts=( # run single tests + -overwrite + ) + + for test_name in "${test_names[@]}"; do + mkdir -vp "$(dirname "${BUILD_DIR}/test_results/${test_name// /\/}.html")" || die + cat >> "${test_file}" <<- _EOF_ || die + test ${test_name} -outfile "${BUILD_DIR}/test_results/${test_name// /\/}.html" ${test_opts[@]} + _EOF_ + done + + local testgrid_opts=( + -overwrite + ) + + local SKIP_TESTS=() + local DEL_TESTS=() + + if [[ "${OCCT_OPTIONAL_TESTS}" != "true" ]]; then + SKIP_TESTS+=( + 'blend complex F4' + 'bugs' + 'geometry circ2d3Tan '{CircleCircleLin_11,CircleLinPoint_11} + 'heal checkshape bug32448_1' + 'hlr exact_hlr bug25813_2' + + 'hlr poly_hlr '{bug25813_2,bug25813_3,bug25813_4,Plate} + 'lowalgos intss bug'{565,567_1,25950,27431,29807_i1003,29807_i2006,29807_i3003,29807_i5002,30703} + 'lowalgos proximity '{A4,A5} + 'opengl background bug27836' + 'opengl drivers opengles' + 'opengles3' + + 'demo draw bug30430' + + 'offset wire_closed_inside_0_005 D1' + ) + + DEL_TESTS+=( + 'opengl/data/background/bug27836' + 'opengl/data/text/bug22149' + 'opengl/data/text/C2' + 'perf/mesh/bug26965' + 'v3d/trsf/bug26029' + ) + fi + + if ! use gles2; then + DEL_TESTS+=( + # 'opengl/drivers/opengles' + # 'opengles3' + ) + fi + + if use gles2 || use opengl; then + xdg_environment_reset + addwrite '/dev/dri/' + [[ -c /dev/udmabuf ]] && addwrite /dev/udmabuf + fi + + if ! use tk || ! use vtk; then + DEL_TESTS+=( + # 'opengl/data/transparency/oit' + ) + fi + + if ! use vtk; then + SKIP_TESTS+=( + 'vtk' + ) + cat >> "${CMAKE_USE_DIR}/tests/opengl/parse.rules" <<- _EOF_ || die + IGNORE /Could not open: libTKIVtkDraw/skip VTK + _EOF_ + fi + + if [[ -n "${SKIP_TESTS[*]}" ]]; then + testgrid_opts+=( -exclude "$(IFS=',' ; echo "${SKIP_TESTS[*]}")" ) + fi + + for test in "${DEL_TESTS[@]}"; do + rm -r "${CMAKE_USE_DIR}/tests/${test}" || die + done + + testgrid_opts+=( + # -refresh 5 # default is 60 + -overwrite + -parallel "$(makeopts_jobs)" + ) + cat >> "${test_file}" <<- _EOF_ || die + testgrid -outdir "${BUILD_DIR}/test_results" ${testgrid_opts[@]} + _EOF_ + + # regenerate summary in case we have to + cat >> "${test_file}" <<- _EOF_ || die + testsummarize "${BUILD_DIR}/test_results" + _EOF_ + + # Work around zink warnings + export LIBGL_ALWAYS_SOFTWARE="true" + + local -x CASROOT="${BUILD_DIR}" + + virtx \ + "${BUILD_DIR}/draw.sh" \ + "${draw_opts[@]}" \ + -f "${test_file}" + + if [[ ! -f "${BUILD_DIR}/test_results/tests.log" ]]; then + eerror "tests never ran!" + die + fi + + failed_tests="$(grep ": FAILED" "${BUILD_DIR}/test_results/tests.log")" + if [[ -n ${failed_tests} ]]; then + eerror "Failed tests:" + eerror "${failed_tests}" + die + fi +} + +src_install() { + cmake_src_install + + doenvd "${T}/99${PN}" + + docompress -x "/usr/share/doc/${PF}/overview/html" +}
