git: 552a69882221 - main - graphics/zeno: make the extensions selectable through OPTIONS
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 16 Oct 2026 19:56:40 UTC
The branch main has been updated by yuri:
URL: https://cgit.FreeBSD.org/ports/commit/?id=552a69882221f596c683317ca2b893f94549c44a
commit 552a69882221f596c683317ca2b893f94549c44a
Author: Martin Filla <freebsd@sysctl.cz>
AuthorDate: 2026-10-10 19:54:00 +0000
Commit: Yuri Victorovich <yuri@FreeBSD.org>
CommitDate: 2026-10-16 19:56:38 +0000
graphics/zeno: make the extensions selectable through OPTIONS
PR: 299284
Signed-off-by: Martin Filla <freebsd@sysctl.cz>
---
graphics/zeno/Makefile | 241 ++++++++++++++-------
graphics/zeno/files/extra-patch-libigl-diag | 25 +++
...qsort.cpp => extra-patch-libigl-meshfix-jqsort} | 0
graphics/zeno/files/extra-patch-libigl-slice_into | 16 ++
4 files changed, 201 insertions(+), 81 deletions(-)
diff --git a/graphics/zeno/Makefile b/graphics/zeno/Makefile
index e7b178c901c8..62c3c550ebe8 100644
--- a/graphics/zeno/Makefile
+++ b/graphics/zeno/Makefile
@@ -1,6 +1,6 @@
PORTNAME= zeno
DISTVERSION= 2024.10.1
-PORTREVISION= 4
+PORTREVISION= 5
CATEGORIES= graphics
MAINTAINER= freebsd@sysctl.cz
@@ -10,82 +10,29 @@ WWW= https://zenustech.com/
LICENSE= MPL20
LICENSE_FILE= ${WRKSRC}/LICENSE
-BUILD_DEPENDS= alembic>0:graphics/alembic \
- boost-libs>=1.85.0:devel/boost-libs \
+BUILD_DEPENDS= boost-libs>=1.85.0:devel/boost-libs \
c-blosc2>0:archivers/c-blosc2 \
- openmpi>0:net/openmpi \
- cgal>=5.0.2:math/cgal \
onetbb>0:devel/onetbb \
- opencv>0:graphics/opencv \
- sdl2>0:devel/sdl20 \
- qwt6-qt5>0:x11-toolkits/qwt6
+ openmpi>0:net/openmpi
-LIB_DEPENDS= libAlembic.so:graphics/alembic \
- libBulletCollision.so:devel/bullet \
+LIB_DEPENDS= libboost_atomic.so:devel/boost-libs \
+ libboost_chrono.so:devel/boost-libs \
+ libboost_thread.so:devel/boost-libs \
libcryptopp.so:security/cryptopp \
- libgmp.so:math/gmp \
- libmpfr.so:math/mpfr \
- libOpenEXR.so:graphics/openexr \
- libImath.so:math/Imath \
- libtiff.so:graphics/tiff \
- libopencv_highgui.so:graphics/opencv \
- libopencv_stitching.so:graphics/opencv \
- libopencv_videoio.so:graphics/opencv \
- libopencv_imgcodecs.so:graphics/opencv \
- libopencv_xfeatures2d.so:graphics/opencv \
- libopencv_ml.so:graphics/opencv \
- libopencv_shape.so:graphics/opencv \
- libopencv_calib3d.so:graphics/opencv \
- libopencv_features2d.so:graphics/opencv \
- libopencv_imgproc.so:graphics/opencv \
- libopencv_flann.so:graphics/opencv \
- libopencv_core.so:graphics/opencv
-
-USES= blaslapack:netlib cmake compiler:c++17-lang eigen:3 localbase:ldflags pkgconfig qt:5
+ libminizip.so:archivers/minizip \
+ libqwt.so:x11-toolkits/qwt6@qt5
+
+USES= cmake compiler:c++17-lang eigen:3 localbase:ldflags pkgconfig \
+ qt:5
USE_LDCONFIG= yes
USE_QT= core gui network opengl svg widgets buildtools:build qmake:build
-USE_SDL= sdl2
-USE_XORG= xext
-
-ONLY_FOR_ARCHS= amd64
-ONLY_FOR_ARCHS_REASON= heavy use of SSE instructions in ZenoFX module
-
-# bundled OpenNL (meshfix) relies on implicit function declarations
-CFLAGS+= -Wno-error=implicit-function-declaration
USE_GITHUB= yes
GH_ACCOUNT= zenustech
-GH_TUPLE+= zenustech:bullet3:aa4931408428cd72057e59627770fc027c5bb0be:bullet/projects/Rigid/bullet3 \
- zenustech:OpenSubdiv:a50680658f9732a41fea8e150310cfb9b147dc3c:opensubdiv/projects/MeshSubdiv/OpenSubdiv \
- zenustech:assimp:745fcc9ba0c79feb4edfc71f464d6d4c920ecc06:assimp/projects/FBX/assimp \
- zenustech:libigl:4c94cfef23974d945a6c0cf97660c327839df5d0:libigl/projects/cgmesh/libigl \
- libigl:tetgen:4f3bfba3997f20aa1f96cfaff604313a8c2c85b6:tetgen/projects/cgmesh/libigl/external/tetgen \
- libigl:libigl-predicates:488242fa2b1f98a9c5bd1441297fb4a99a6a9ae4:predicates/projects/cgmesh/libigl/external/predicates
CMAKE_ON= ZENO_BUILD_EDITOR ZENO_BUILD_SHARED ZENO_IPC_USE_TCP \
ZENO_MULTIPROCESS ZENO_NO_WARNING ZENO_USE_CCACHE \
- ZENO_WITH_ZenoFX \
- ZENO_WITH_Alembic ZENO_SYSTEM_ALEMBIC \
- ZENO_WITH_Rigid \
- ZENO_WITH_oldzenbase \
- ZENO_WITH_TreeSketch \
- ZENO_SYSTEM_OPENVDB \
- ZENO_WITH_Functional \
- ZENO_WITH_LSystem \
- ZENO_WITH_mesher \
- ZENO_WITH_CalcGeometryUV \
- ZENO_WITH_MeshSubdiv \
- ZENO_WITH_Audio \
- ZENO_WITH_PBD \
- ZENO_WITH_GUI \
- ZENO_WITH_ImgCV \
- ZENO_WITH_TOOL_FLIPtools \
- ZENO_WITH_TOOL_cgmeshTools \
- ZENO_WITH_TOOL_BulletTools \
- ZENO_WITH_TOOL_HerculesTools \
- ZENO_WITH_cgmesh ZENO_WITH_FEM ZENO_WITH_Skinning \
- ZENO_WITH_DemBones ZENO_WITH_FBX \
- LIBIGL_SKIP_DOWNLOAD
+ ZENO_SYSTEM_OPENVDB
# Bundled assimp, voro++, meshfix and tetgen are linked statically into
# libzeno.so so nothing extra has to be installed
@@ -95,41 +42,173 @@ CMAKE_OFF= ZENO_BUILD_DESIGNER ZENO_BUILD_PLAYER ZENO_INSTALL_TARGET \
ZFX_ENABLE_CUDA \
BUILD_SHARED_LIBS VORO_BUILD_SHARED_LIBS \
ASSIMP_BUILD_ASSIMP_TOOLS ASSIMP_BUILD_TESTS
- #ZENO_WITH_FastFLIP ZENO_WITH_zenvdb # compile zenovdb
- #ZENO_WITH_Euler ZENO_WITH_zenvdb # compile zenvdb killed gcc
- #ZENO_WITH_SampleModel # error: '_pgmptr' was not declared in this scope
-
-# Skinning needs cgmesh (libigl) and FEM (LBFGSpp headers).
-# FBX uses the bundled assimp fork; the prebuilt DemBones binaries from the
-# dem-bones-bin submodule are Linux/Windows only, so ExportFBX looks for
-# DemBones in ${PREFIX}/bin instead.
-# SampleModel and zenvdb need submodules which are not fetched (openvdb), add
-# them to GH_TUPLE when enabling those.
+
+# Every extension below is a set of nodes compiled into libzeno.so, so these
+# options only change what the editor offers - the package always installs the
+# same three files. Extensions that stay off and why:
+# zenvdb, FastFLIP # need the openvdb submodule, add it to GH_TUPLE first
+# Euler # needs zenvdb, and compiling it killed gcc
+# SampleModel # error: '_pgmptr' was not declared in this scope
+# CUDA, CuEulerian, CuLagrange, PyZpc, Nemo # need CUDA
+# GLTF, USD, Python, Roads, Geometry, ... # not tried on FreeBSD yet
# ZENO_BUILD_DESIGNER - bug https://github.com/zenustech/zeno/issues/1907
+OPTIONS_DEFINE= ALEMBIC AUDIO CALCUV CGMESH DEMBONES FBX FEM FUNCTIONAL \
+ GUI IMGCV LSYSTEM MESHER MESHSUBDIV OLDZENBASE PBD RIGID \
+ SKINNING TREESKETCH ZENOFX
+OPTIONS_GROUP= TOOLS
+OPTIONS_GROUP_TOOLS= BULLETTOOLS CGMESHTOOLS FLIPTOOLS HERCULESTOOLS
+OPTIONS_DEFAULT= ALEMBIC AUDIO CALCUV CGMESH DEMBONES FBX FEM \
+ FUNCTIONAL GUI IMGCV LSYSTEM MESHER MESHSUBDIV \
+ OLDZENBASE PBD RIGID SKINNING TREESKETCH ZENOFX \
+ BULLETTOOLS CGMESHTOOLS FLIPTOOLS HERCULESTOOLS
+
+ALEMBIC_DESC= Alembic (.abc) import and export nodes
+AUDIO_DESC= Audio analysis nodes (bundled Aquila)
+CALCUV_DESC= UV unwrapping nodes (bundled xatlas)
+CGMESH_DESC= Computational geometry nodes (libigl, CGAL, voro++)
+DEMBONES_DESC= Skinning decomposition nodes (DemBones)
+FBX_DESC= FBX import and export nodes (bundled assimp)
+FEM_DESC= Finite element nodes, implies CGMESH
+FUNCTIONAL_DESC= Functional programming nodes
+GUI_DESC= Interactive viewport nodes (SDL2)
+IMGCV_DESC= Image processing nodes (OpenCV)
+LSYSTEM_DESC= L-system procedural growth nodes
+MESHER_DESC= Mesh generation nodes
+MESHSUBDIV_DESC= Subdivision surface nodes (bundled OpenSubdiv)
+OLDZENBASE_DESC= Legacy mesh and particle nodes
+PBD_DESC= Position based dynamics nodes
+RIGID_DESC= Rigid body nodes (Bullet)
+SKINNING_DESC= Mesh skinning nodes, implies CGMESH and FEM
+TREESKETCH_DESC= Tree sketching nodes
+ZENOFX_DESC= ZenoFX expression wrangler nodes
+TOOLS_DESC= Node graph presets
+BULLETTOOLS_DESC= Bullet presets, implies RIGID
+CGMESHTOOLS_DESC= Voronoi fracture presets, implies CGMESH
+FLIPTOOLS_DESC= FLIP fluid presets
+HERCULESTOOLS_DESC= Hercules presets
+
+ALEMBIC_CMAKE_BOOL= ZENO_WITH_Alembic ZENO_SYSTEM_ALEMBIC
+ALEMBIC_BUILD_DEPENDS= alembic>0:graphics/alembic
+ALEMBIC_LIB_DEPENDS= libAlembic.so:graphics/alembic \
+ libImath.so:math/Imath \
+ libOpenEXR.so:graphics/openexr \
+ libpng16.so:graphics/png
+
+AUDIO_CMAKE_BOOL= ZENO_WITH_Audio
+
+CALCUV_CMAKE_BOOL= ZENO_WITH_CalcGeometryUV
+
+# The bundled zenustech/libigl fork pulled in here (and with it FEM and
+# SKINNING) dates from 2022 and asks for Eigen 3.3.7 in its own CMake; its
+# diag() and slice_into() use Eigen::DynamicSparseMatrix, which Eigen 5 no
+# longer ships. The patches below swap that for Eigen::SparseMatrix, so the
+# igl headers zeno uses compile against math/eigen3 as well as math/eigen5.
+# eigen:3 stays for now: CGAL and the rest of the stack here are still built
+# against Eigen 3.
+CGMESH_CMAKE_BOOL= ZENO_WITH_cgmesh LIBIGL_SKIP_DOWNLOAD
+CGMESH_USES= blaslapack:netlib
+CGMESH_BUILD_DEPENDS= cgal>=5.0.2:math/cgal
+CGMESH_LIB_DEPENDS= libgmp.so:math/gmp \
+ libmpfr.so:math/mpfr
+CGMESH_GH_TUPLE= zenustech:libigl:4c94cfef23974d945a6c0cf97660c327839df5d0:libigl/projects/cgmesh/libigl \
+ libigl:tetgen:4f3bfba3997f20aa1f96cfaff604313a8c2c85b6:tetgen/projects/cgmesh/libigl/external/tetgen \
+ libigl:libigl-predicates:488242fa2b1f98a9c5bd1441297fb4a99a6a9ae4:predicates/projects/cgmesh/libigl/external/predicates
+# The libigl fork only gets extracted when this option is on, so its patches
+# have to be conditional too
+CGMESH_EXTRA_PATCHES= ${PATCHDIR}/extra-patch-libigl-diag \
+ ${PATCHDIR}/extra-patch-libigl-meshfix-jqsort \
+ ${PATCHDIR}/extra-patch-libigl-slice_into
+# bundled OpenNL (meshfix) relies on implicit function declarations
+CGMESH_CFLAGS= -Wno-error=implicit-function-declaration
-PLIST_FILES= bin/autotest \
- bin/zenoedit \
- lib/libzeno.so
+DEMBONES_CMAKE_BOOL= ZENO_WITH_DemBones
+
+# The prebuilt DemBones binaries from the dem-bones-bin submodule are
+# Linux/Windows only, so ExportFBX looks for DemBones in ${PREFIX}/bin instead
+FBX_CMAKE_BOOL= ZENO_WITH_FBX
+FBX_GH_TUPLE= zenustech:assimp:745fcc9ba0c79feb4edfc71f464d6d4c920ecc06:assimp/projects/FBX/assimp
+
+FEM_CMAKE_BOOL= ZENO_WITH_FEM
+FEM_IMPLIES= CGMESH
+
+FUNCTIONAL_CMAKE_BOOL= ZENO_WITH_Functional
+
+GUI_CMAKE_BOOL= ZENO_WITH_GUI
+GUI_USES= sdl xorg
+GUI_USE= SDL=sdl2 XORG=xext
+
+IMGCV_CMAKE_BOOL= ZENO_WITH_ImgCV
+IMGCV_BUILD_DEPENDS= opencv>0:graphics/opencv
+IMGCV_LIB_DEPENDS= libopencv_calib3d.so:graphics/opencv \
+ libopencv_core.so:graphics/opencv \
+ libopencv_features2d.so:graphics/opencv \
+ libopencv_flann.so:graphics/opencv \
+ libopencv_highgui.so:graphics/opencv \
+ libopencv_imgcodecs.so:graphics/opencv \
+ libopencv_imgproc.so:graphics/opencv \
+ libopencv_ml.so:graphics/opencv \
+ libopencv_shape.so:graphics/opencv \
+ libopencv_stitching.so:graphics/opencv \
+ libopencv_videoio.so:graphics/opencv \
+ libopencv_xfeatures2d.so:graphics/opencv \
+ libtiff.so:graphics/tiff
+
+LSYSTEM_CMAKE_BOOL= ZENO_WITH_LSystem
+
+MESHER_CMAKE_BOOL= ZENO_WITH_mesher
+
+MESHSUBDIV_CMAKE_BOOL= ZENO_WITH_MeshSubdiv
+MESHSUBDIV_GH_TUPLE= zenustech:OpenSubdiv:a50680658f9732a41fea8e150310cfb9b147dc3c:opensubdiv/projects/MeshSubdiv/OpenSubdiv
+
+OLDZENBASE_CMAKE_BOOL= ZENO_WITH_oldzenbase
+
+PBD_CMAKE_BOOL= ZENO_WITH_PBD
# Bundled bullet3 fork is used only for parts devel/bullet does not provide
# (BulletInverseDynamics *.hpp, BussIK, VHACD, URDFImporter), the rest comes
# from devel/bullet
+RIGID_CMAKE_BOOL= ZENO_WITH_Rigid
+RIGID_LIB_DEPENDS= libBulletCollision.so:devel/bullet
+RIGID_GH_TUPLE= zenustech:bullet3:aa4931408428cd72057e59627770fc027c5bb0be:bullet/projects/Rigid/bullet3
+
+SKINNING_CMAKE_BOOL= ZENO_WITH_Skinning
+# skinning_bbw.cpp includes LBFGSB.h, which only lands on the include path
+# when FEM is built
+SKINNING_IMPLIES= CGMESH FEM
+
+TREESKETCH_CMAKE_BOOL= ZENO_WITH_TreeSketch
+
+ZENOFX_CMAKE_BOOL= ZENO_WITH_ZenoFX
+
+BULLETTOOLS_CMAKE_BOOL= ZENO_WITH_TOOL_BulletTools
+BULLETTOOLS_IMPLIES= RIGID
+CGMESHTOOLS_CMAKE_BOOL= ZENO_WITH_TOOL_cgmeshTools
+CGMESHTOOLS_IMPLIES= CGMESH
+FLIPTOOLS_CMAKE_BOOL= ZENO_WITH_TOOL_FLIPtools
+HERCULESTOOLS_CMAKE_BOOL= ZENO_WITH_TOOL_HerculesTools
+
+PLIST_FILES= bin/autotest \
+ bin/zenoedit \
+ lib/libzeno.so
+
BULLET_FORK= ${WRKSRC}/projects/Rigid/bullet3
-post-extract:
+post-extract-RIGID-on:
@cd ${BULLET_FORK} && ${RM} -r HACD src/Bullet3* src/BulletCollision \
src/BulletDynamics src/BulletSoftBody src/LinearMath src/clew \
src/*.cpp src/*.h
-post-patch:
+post-patch-RIGID-on:
@${FIND} ${BULLET_FORK}/src -name '*.[ch]*' -exec ${REINPLACE_CMD} -E \
's@#include "(\.\./)+(LinearMath|BulletCollision|BulletDynamics|Bullet3Common|btBullet)@#include "\2@' {} +
-pre-configure:
+pre-configure-RIGID-on:
@if ${GREP} -q BT_USE_DOUBLE_PRECISION ${LOCALBASE}/libdata/pkgconfig/bullet.pc; then \
${ECHO_MSG} "===> ${PKGNAME} requires single precision devel/bullet, deinstall bullet-double first"; \
${FALSE}; \
fi
+
+pre-configure:
${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|g' ${WRKSRC}/ui/zenoui/CMakeLists.txt
do-install:
diff --git a/graphics/zeno/files/extra-patch-libigl-diag b/graphics/zeno/files/extra-patch-libigl-diag
new file mode 100644
index 000000000000..7454e889b8b7
--- /dev/null
+++ b/graphics/zeno/files/extra-patch-libigl-diag
@@ -0,0 +1,25 @@
+Eigen::DynamicSparseMatrix lived in unsupported/ and was removed in Eigen 5.
+Eigen::SparseMatrix::coeffRef() inserts missing entries just like the dynamic
+variant did, so this keeps the same behaviour while building against both
+math/eigen3 and math/eigen5.
+
+--- projects/cgmesh/libigl/include/igl/diag.cpp.orig 2022-09-08 08:37:09 UTC
++++ projects/cgmesh/libigl/include/igl/diag.cpp
+@@ -72,7 +72,7 @@
+ Eigen::SparseMatrix<T>& X)
+ {
+ // clear and resize output
+- Eigen::DynamicSparseMatrix<T, Eigen::RowMajor> dyn_X(V.size(),V.size());
++ Eigen::SparseMatrix<T, Eigen::RowMajor> dyn_X(V.size(),V.size());
+ dyn_X.reserve(V.size());
+ // loop over non-zeros
+ for(typename Eigen::SparseVector<T>::InnerIterator it(V); it; ++it)
+@@ -89,7 +89,7 @@
+ {
+ assert(V.rows() == 1 || V.cols() == 1);
+ // clear and resize output
+- Eigen::DynamicSparseMatrix<T, Eigen::RowMajor> dyn_X(V.size(),V.size());
++ Eigen::SparseMatrix<T, Eigen::RowMajor> dyn_X(V.size(),V.size());
+ dyn_X.reserve(V.size());
+ // loop over non-zeros
+ for(int i = 0;i<V.size();i++)
diff --git a/graphics/zeno/files/patch-projects_cgmesh_libigl_meshfix_JMeshExt-1.0alpha__src_JMeshLib-1.2_src_PRIMITIVES_jqsort.cpp b/graphics/zeno/files/extra-patch-libigl-meshfix-jqsort
similarity index 100%
rename from graphics/zeno/files/patch-projects_cgmesh_libigl_meshfix_JMeshExt-1.0alpha__src_JMeshLib-1.2_src_PRIMITIVES_jqsort.cpp
rename to graphics/zeno/files/extra-patch-libigl-meshfix-jqsort
diff --git a/graphics/zeno/files/extra-patch-libigl-slice_into b/graphics/zeno/files/extra-patch-libigl-slice_into
new file mode 100644
index 000000000000..309d560dccbf
--- /dev/null
+++ b/graphics/zeno/files/extra-patch-libigl-slice_into
@@ -0,0 +1,16 @@
+Eigen::DynamicSparseMatrix lived in unsupported/ and was removed in Eigen 5.
+Eigen::SparseMatrix::coeffRef() inserts missing entries just like the dynamic
+variant did, so this keeps the same behaviour while building against both
+math/eigen3 and math/eigen5.
+
+--- projects/cgmesh/libigl/include/igl/slice_into.cpp.orig 2022-09-08 08:37:09 UTC
++++ projects/cgmesh/libigl/include/igl/slice_into.cpp
+@@ -34,7 +34,7 @@
+ #endif
+
+ // create temporary dynamic sparse matrix
+- Eigen::DynamicSparseMatrix<T, Eigen::RowMajor> dyn_Y(Y);
++ Eigen::SparseMatrix<T, Eigen::RowMajor> dyn_Y(Y);
+ // Iterate over outside
+ for(int k=0; k<X.outerSize(); ++k)
+ {