mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-01-05 14:07:27 -08:00
See also: https://github.com/gentoo/gentoo/pull/44585 Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
449 lines
10 KiB
Bash
449 lines
10 KiB
Bash
# Copyright 1999-2026 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.9.0"
|
|
MY_TEST_PV2="${MY_TEST_PV//./_}_beta1"
|
|
|
|
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.9.2-0001-fix-installation-of-cmake-config-files.patch"
|
|
"${FILESDIR}/${PN}-7.9.0-0002-avoid-pre-stripping-binaries.patch"
|
|
"${FILESDIR}/${PN}-7.9.2-0003-Fix-building-with-musl.patch"
|
|
"${FILESDIR}/${PN}-7.9.0-0004-Only-try-to-find-the-jemalloc-libs-we-are-going-to-u.patch"
|
|
"${FILESDIR}/${PN}-7.8.0-tests.patch"
|
|
"${FILESDIR}/${PN}-7.8.0-jemalloc-noexcept.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() {
|
|
cmake_src_prepare
|
|
|
|
# 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++23"
|
|
-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
|
|
)
|
|
|
|
local test_name
|
|
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+=(
|
|
"demo draw bug30430"
|
|
|
|
'blend complex F4'
|
|
|
|
# skip all bugs
|
|
'bugs'
|
|
|
|
# skip failing bugs
|
|
# 'bugs caf bug31918_'{1,2}
|
|
# 'bugs fclasses bug'{6143,7287_{3,5},29064}
|
|
# 'bugs filling bug16119'
|
|
# 'bugs mesh bug'{24127,25594,26372,27693,27845,29641,29962,30008_2,30442,31258,31461,32241,32422}
|
|
# 'bugs modalg_1 '{buc60782_3,bug15036}
|
|
# 'bugs modalg_2 bug399'
|
|
# 'bugs modalg_5 bug23706_'{16,20,21,26,36,38,43,44,45,48,49,50,51,52,53,54,55,56,60,61}
|
|
# 'bugs modalg_5 bug24347'
|
|
# 'bugs modalg_6 bug'{26308,26525_3,27383_4,27884,6768}
|
|
# 'bugs modalg_7 bug'{26034,29311_4,29807_b3a,29807_sc01}
|
|
# 'bugs moddata_1 bug16'
|
|
# 'bugs moddata_2 bug712_2'
|
|
# 'bugs moddata_3 bug'{24959_1,27534,32058}
|
|
|
|
'geometry circ2d3Tan Circle'{CircleLin_11,LinPoint_11}
|
|
'heal checkshape bug32448_1'
|
|
'hlr exact_hlr bug25813_2'
|
|
'hlr poly_hlr '{Plate,bug25813_{2,3,4}}
|
|
'lowalgos intss bug'{25950,27431,29807_i{1003,2006,3003},30703,565,567_1}
|
|
'lowalgos proximity A'{4,5}
|
|
'offset wire_closed_inside_0_005 D1'
|
|
'opengles3 general msaa'
|
|
'opengles3 geom interior'{1,2}
|
|
'opengles3 raytrace msaa'
|
|
'opengles3 textures alpha_mask'
|
|
'perf mesh bug26965'
|
|
|
|
'opengl background bug27836'
|
|
'opengles3 background bug27836'
|
|
)
|
|
|
|
DEL_TESTS+=(
|
|
# Error: non-linear time growth detected!
|
|
# 'v3d/trsf/bug26029'
|
|
|
|
# needs dri3
|
|
# 'opengl/drivers/opengles'
|
|
# 'opengles3'
|
|
)
|
|
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
|
|
|
|
local test
|
|
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"
|
|
}
|