git: 41828ceba798 - main - graphics/zeno: New port: simulation & rendering engine in nodes

From: Vladimir Druzenko <vvd_at_FreeBSD.org>
Date: Mon, 29 Jul 2024 16:51:14 UTC
The branch main has been updated by vvd:

URL: https://cgit.FreeBSD.org/ports/commit/?id=41828ceba798c6b95d7442c8bafe0b32e1a283fe

commit 41828ceba798c6b95d7442c8bafe0b32e1a283fe
Author:     Martin Filla <freebsd@sysctl.cz>
AuthorDate: 2024-07-29 16:47:45 +0000
Commit:     Vladimir Druzenko <vvd@FreeBSD.org>
CommitDate: 2024-07-29 16:47:45 +0000

    graphics/zeno: New port: simulation & rendering engine in nodes
    
    ZENO is an open-source, Node based 3D system able to produce
    cinematic physics effects at High Efficiency, it was designed
    for large scale simulations and has been tested on complex
    setups. Aside of its simulation Tools, ZENO provides necessary
    visualization nodes for users to import and run simulations if
    you feel that the current software you are using is too slow.
    
    https://github.com/zenustech/zeno/blob/master/README.md
    https://zenustech.com
    
    PR:     278611
---
 graphics/Makefile                                  |  1 +
 graphics/zeno/Makefile                             | 41 ++++++++++++++++++++
 graphics/zeno/distinfo                             |  3 ++
 .../zeno/files/patch-ui_zenodesign_CMakeLists.txt  | 11 ++++++
 .../patch-ui_zenodesign_layertreeitemdelegate.cpp  | 17 ++++++++
 .../zeno/files/patch-ui_zenodesign_layerwidget.cpp | 11 ++++++
 .../files/patch-ui_zenodesign_zpropertiespanel.cpp | 11 ++++++
 .../files/patch-ui_zenoedit_launch_offlinemain.cpp | 10 +++++
 .../files/patch-ui_zenoedit_launch_viewdecode.cpp  | 14 +++++++
 .../files/patch-ui_zenoedit_launch_viewdecode.h    | 15 ++++++++
 .../files/patch-ui_zenoedit_launch_ztcpserver.cpp  | 14 +++++++
 .../files/patch-ui_zenoedit_launch_ztcpserver.h    | 19 +++++++++
 .../files/patch-ui_zenoedit_nodesys_zenonode.cpp   | 16 ++++++++
 .../zeno/files/patch-ui_zenoedit_recordmain.cpp    | 10 +++++
 ...patch-ui_zenoedit_updaterequest_zsnetthread.cpp | 11 ++++++
 .../files/patch-ui_zenoedit_util_apphelper.cpp     | 14 +++++++
 .../zeno/files/patch-ui_zenoedit_util_apphelper.h  | 25 ++++++++++++
 ...ch-ui_zenoedit_viewportinteraction_nodesync.cpp | 13 +++++++
 .../files/patch-ui_zenoedit_zenoapplication.cpp    | 32 +++++++++++++++
 .../zeno/files/patch-ui_zenoedit_zenoapplication.h | 45 ++++++++++++++++++++++
 .../files/patch-ui_zenoedit_zenomainwindow.cpp     | 11 ++++++
 ...patch-zeno_include_zeno_utils_PropertyVisitor.h | 19 +++++++++
 .../zeno/files/patch-zeno_src_extra_GlobalComm.cpp | 10 +++++
 graphics/zeno/files/patch-zenovis_src_Scene.cpp    | 12 ++++++
 .../patch-zenovis_src_optx_RenderEngineOptx.cpp    | 14 +++++++
 graphics/zeno/patch-CMakeLists.txt                 | 12 ++++++
 graphics/zeno/pkg-descr                            |  6 +++
 27 files changed, 417 insertions(+)

diff --git a/graphics/Makefile b/graphics/Makefile
index 654d7107cfe0..5453f27ca0a2 100644
--- a/graphics/Makefile
+++ b/graphics/Makefile
@@ -1266,6 +1266,7 @@
     SUBDIR += zathura-pdf-poppler
     SUBDIR += zathura-ps
     SUBDIR += zbar
+    SUBDIR += zeno
     SUBDIR += zgv
     SUBDIR += zimg
     SUBDIR += zint
diff --git a/graphics/zeno/Makefile b/graphics/zeno/Makefile
new file mode 100644
index 000000000000..98636c75988b
--- /dev/null
+++ b/graphics/zeno/Makefile
@@ -0,0 +1,41 @@
+PORTNAME=	zeno
+DISTVERSION=	2023.11.16
+CATEGORIES=	graphics
+
+MAINTAINER=	freebsd@sysctl.cz
+COMMENT=	ZEn NOde system - a simulation & rendering engine in nodes
+WWW=		https://zenustech.com/
+
+LICENSE=	MPL20
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+BUILD_DEPENDS=	openmpi>0:net/openmpi \
+		cgal>=5.0.2:math/cgal \
+		onetbb>0:devel/onetbb \
+		openvdb>0:misc/openvdb
+
+USES=		cmake compiler:c++17-lang eigen:3 localbase:ldflags qt:5
+USE_GITHUB=	yes
+GH_ACCOUNT=	zenustech
+USE_LDCONFIG=	yes
+USE_QT=		core gui network opengl svg widgets buildtools:build qmake:build
+
+CMAKE_ON=	ZENO_BUILD_EDITOR ZENO_BUILD_SHARED ZENO_IPC_USE_TCP \
+		ZENO_MULTIPROCESS ZENO_NO_WARNING ZENO_USE_CCACHE
+CMAKE_OFF=	ZENO_BUILD_DESIGNER ZENO_BUILD_PLAYER ZENO_INSTALL_TARGET \
+		ZENO_MARCH_NATIVE ZENO_OPTIX_PROC ZENO_USE_FAST_MATH \
+		ZENO_WIN32_RC ZENO_WITH_CUDA
+# ZENO_BUILD_DESIGNER - bug https://github.com/zenustech/zeno/issues/1907
+
+# fix on 13.3: "ld: error: undefined reference due to --no-allow-shlib-undefined:
+LDFLAGS+=	-Wl,--allow-shlib-undefined -lomp
+
+PLIST_FILES=	bin/autotest \
+		bin/zenoedit \
+		lib/libzeno.so
+do-install:
+	${INSTALL_PROGRAM} ${WRKDIR}/.build/bin/autotest ${STAGEDIR}${PREFIX}/bin
+	${INSTALL_PROGRAM} ${WRKDIR}/.build/bin/zenoedit ${STAGEDIR}${PREFIX}/bin
+	${INSTALL_LIB} ${WRKDIR}/.build/bin/libzeno.so ${STAGEDIR}${PREFIX}/lib
+
+.include <bsd.port.mk>
diff --git a/graphics/zeno/distinfo b/graphics/zeno/distinfo
new file mode 100644
index 000000000000..09c74176f292
--- /dev/null
+++ b/graphics/zeno/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1713709608
+SHA256 (zenustech-zeno-2023.11.16_GH0.tar.gz) = ab6cf15c4daaf5afdf98fe5f25b9d9ceabee665c2fd0450227d22c5060e4696e
+SIZE (zenustech-zeno-2023.11.16_GH0.tar.gz) = 87281411
diff --git a/graphics/zeno/files/patch-ui_zenodesign_CMakeLists.txt b/graphics/zeno/files/patch-ui_zenodesign_CMakeLists.txt
new file mode 100644
index 000000000000..ebabd0014646
--- /dev/null
+++ b/graphics/zeno/files/patch-ui_zenodesign_CMakeLists.txt
@@ -0,0 +1,11 @@
+--- ui/zenodesign/CMakeLists.txt.orig	2024-04-22 14:05:16 UTC
++++ ui/zenodesign/CMakeLists.txt
+@@ -22,7 +22,7 @@ endif (WIN32)
+ 
+ file(GLOB_RECURSE source CONFIGURE_DEPENDS *.h *.cpp *.ui)
+ file(GLOB_RECURSE resource CONFIGURE_DEPENDS *.qrc)
+-qt5_add_big_resources(source ${resource})  # cihou msvc: fatal error C1060: compiler is out of heap space
++#qt5_add_big_resources(source ${resource})  # cihou msvc: fatal error C1060: compiler is out of heap space
+ 
+ add_executable(zenodesign ${source})
+ target_include_directories(zenodesign PRIVATE ../3rdparty ../zenoui ../editor)
diff --git a/graphics/zeno/files/patch-ui_zenodesign_layertreeitemdelegate.cpp b/graphics/zeno/files/patch-ui_zenodesign_layertreeitemdelegate.cpp
new file mode 100644
index 000000000000..13e5093b48d5
--- /dev/null
+++ b/graphics/zeno/files/patch-ui_zenodesign_layertreeitemdelegate.cpp
@@ -0,0 +1,17 @@
+--- ui/zenodesign/layertreeitemdelegate.cpp.orig	2023-11-22 19:17:26 UTC
++++ ui/zenodesign/layertreeitemdelegate.cpp
+@@ -1,7 +1,7 @@
+ #include "framework.h"
+ #include "layerwidget.h"
+ #include "layertreeitemdelegate.h"
+-
++#include "zenostyle.h"
+ 
+ LayerTreeitemDelegate::LayerTreeitemDelegate(QWidget* parent)
+     : QStyledItemDelegate(parent), m_treeview(nullptr)
+@@ -211,4 +211,4 @@ QSize LayerTreeitemDelegate::sizeHint(const QStyleOpti
+ void LayerTreeitemDelegate::initStyleOption(QStyleOptionViewItem* option, const QModelIndex& index) const
+ {
+     QStyledItemDelegate::initStyleOption(option, index);
+ }
++}
diff --git a/graphics/zeno/files/patch-ui_zenodesign_layerwidget.cpp b/graphics/zeno/files/patch-ui_zenodesign_layerwidget.cpp
new file mode 100644
index 000000000000..d4010efab16d
--- /dev/null
+++ b/graphics/zeno/files/patch-ui_zenodesign_layerwidget.cpp
@@ -0,0 +1,11 @@
+--- ui/zenodesign/layerwidget.cpp.orig	2023-11-22 19:17:26 UTC
++++ ui/zenodesign/layerwidget.cpp
+@@ -5,7 +5,7 @@
+ #include "layertreeitemdelegate.h"
+ #include "nodeswidget.h"
+ #include "util.h"
+-
++#include "zenostyle.h"
+ 
+ NodesView* getCurrentView(QWidget* pWidget)
+ {
diff --git a/graphics/zeno/files/patch-ui_zenodesign_zpropertiespanel.cpp b/graphics/zeno/files/patch-ui_zenodesign_zpropertiespanel.cpp
new file mode 100644
index 000000000000..38d90c9bbc81
--- /dev/null
+++ b/graphics/zeno/files/patch-ui_zenodesign_zpropertiespanel.cpp
@@ -0,0 +1,11 @@
+--- ui/zenodesign/zpropertiespanel.cpp.orig	2023-11-22 19:17:26 UTC
++++ ui/zenodesign/zpropertiespanel.cpp
+@@ -5,7 +5,7 @@
+ #include "styletabwidget.h"
+ #include "nodesview.h"
+ #include "nodeswidget.h"
+-
++#include "zenostyle.h"
+ 
+ DesignerMainWin* getMainWindow(QWidget* pWidget)
+ {
diff --git a/graphics/zeno/files/patch-ui_zenoedit_launch_offlinemain.cpp b/graphics/zeno/files/patch-ui_zenoedit_launch_offlinemain.cpp
new file mode 100644
index 000000000000..6b01f066bad5
--- /dev/null
+++ b/graphics/zeno/files/patch-ui_zenoedit_launch_offlinemain.cpp
@@ -0,0 +1,10 @@
+--- ui/zenoedit/launch/offlinemain.cpp.orig	2024-04-26 16:52:52 UTC
++++ ui/zenoedit/launch/offlinemain.cpp
+@@ -14,6 +14,7 @@
+ #include <zeno/extra/assetDir.h>
+ #include "util/apphelper.h"
+ #include "launch/ztcpserver.h"
++#include "zenoapplication.h"
+ 
+ int offline_main(const QCoreApplication& app);
+ int offline_main(const QCoreApplication& app) {
diff --git a/graphics/zeno/files/patch-ui_zenoedit_launch_viewdecode.cpp b/graphics/zeno/files/patch-ui_zenoedit_launch_viewdecode.cpp
new file mode 100644
index 000000000000..e06da93187c3
--- /dev/null
+++ b/graphics/zeno/files/patch-ui_zenoedit_launch_viewdecode.cpp
@@ -0,0 +1,14 @@
+--- ui/zenoedit/launch/viewdecode.cpp.orig	2024-04-23 11:14:37 UTC
++++ ui/zenoedit/launch/viewdecode.cpp
+@@ -1,4 +1,4 @@
+-#ifdef ZENO_MULTIPROCESS
++//#ifdef ZENO_MULTIPROCESS
+ #include "viewdecode.h"
+ #include "zenoapplication.h"
+ #include <zenomodel/include/graphsmanagment.h>
+@@ -335,4 +335,4 @@ void viewDecodeAppend(const char *buf, size_t n)
+     zeno::log_debug("viewDecodeAppend n={}", n);
+     viewDecodeData.append(buf, n);
+ }
+-#endif
++//#endif
diff --git a/graphics/zeno/files/patch-ui_zenoedit_launch_viewdecode.h b/graphics/zeno/files/patch-ui_zenoedit_launch_viewdecode.h
new file mode 100644
index 000000000000..8740668a906b
--- /dev/null
+++ b/graphics/zeno/files/patch-ui_zenoedit_launch_viewdecode.h
@@ -0,0 +1,15 @@
+--- ui/zenoedit/launch/viewdecode.h.orig	2024-04-23 11:14:05 UTC
++++ ui/zenoedit/launch/viewdecode.h
+@@ -1,10 +1,10 @@
+ #pragma once
+ 
+-#ifdef ZENO_MULTIPROCESS
++//#ifdef ZENO_MULTIPROCESS
+ #include <cstddef>
+ 
+ void viewDecodeClear();
+ void viewDecodeAppend(const char *buf, size_t n);
+ void viewDecodeSetFrameCache(const char *path, int gcmax);
+ void viewDecodeFinish();
+-#endif
++//#endif
diff --git a/graphics/zeno/files/patch-ui_zenoedit_launch_ztcpserver.cpp b/graphics/zeno/files/patch-ui_zenoedit_launch_ztcpserver.cpp
new file mode 100644
index 000000000000..5da73615e8b9
--- /dev/null
+++ b/graphics/zeno/files/patch-ui_zenoedit_launch_ztcpserver.cpp
@@ -0,0 +1,14 @@
+--- ui/zenoedit/launch/ztcpserver.cpp.orig	2024-04-23 11:08:52 UTC
++++ ui/zenoedit/launch/ztcpserver.cpp
+@@ -1,4 +1,4 @@
+-#if defined(ZENO_MULTIPROCESS) && defined(ZENO_IPC_USE_TCP)
++//#if defined(ZENO_MULTIPROCESS) && defined(ZENO_IPC_USE_TCP)
+ #include <cstdio>
+ #include <cstring>
+ #include "ztcpserver.h"
+@@ -443,4 +443,4 @@ void ZTcpServer::onProcFinished(int exitCode, QProcess
+         emit runFinished();
+ }
+ 
+-#endif
++//#endif
diff --git a/graphics/zeno/files/patch-ui_zenoedit_launch_ztcpserver.h b/graphics/zeno/files/patch-ui_zenoedit_launch_ztcpserver.h
new file mode 100644
index 000000000000..db6000efa04c
--- /dev/null
+++ b/graphics/zeno/files/patch-ui_zenoedit_launch_ztcpserver.h
@@ -0,0 +1,19 @@
+--- ui/zenoedit/launch/ztcpserver.h.orig	2024-04-23 11:07:59 UTC
++++ ui/zenoedit/launch/ztcpserver.h
+@@ -1,7 +1,7 @@
+ #ifndef __ZCORE_TCPSERVER_H__
+ #define __ZCORE_TCPSERVER_H__
+ 
+-#if defined(ZENO_MULTIPROCESS) && defined(ZENO_IPC_USE_TCP)
++//#if defined(ZENO_MULTIPROCESS) && defined(ZENO_IPC_USE_TCP)
+ 
+ #include <QObject>
+ #include <QtNetwork>
+@@ -52,6 +52,6 @@ private slots: (private)
+     int m_port;
+ };
+ 
+-#endif
++//#endif
+ 
+ #endif
diff --git a/graphics/zeno/files/patch-ui_zenoedit_nodesys_zenonode.cpp b/graphics/zeno/files/patch-ui_zenoedit_nodesys_zenonode.cpp
new file mode 100644
index 000000000000..ef623b2b81d6
--- /dev/null
+++ b/graphics/zeno/files/patch-ui_zenoedit_nodesys_zenonode.cpp
@@ -0,0 +1,16 @@
+--- ui/zenoedit/nodesys/zenonode.cpp.orig	2024-04-26 16:28:26 UTC
++++ ui/zenoedit/nodesys/zenonode.cpp
+@@ -35,6 +35,7 @@
+ #include "settings/zenosettingsmanager.h"
+ #include <zenomodel/include/command.h>
+ #include <zenomodel/include/nodeparammodel.h>
++#include <comctrl/gv/zveceditoritem.h>
+ 
+ 
+ ZenoNode::ZenoNode(const NodeUtilParam &params, QGraphicsItem *parent)
+@@ -2079,4 +2080,4 @@ void ZenoNode::onCustomNameChanged()
+             m_pCategoryItem->setText(text);
+         ZGraphicsLayout::updateHierarchy(m_pCategoryItem);
+     }
+ }
++}
diff --git a/graphics/zeno/files/patch-ui_zenoedit_recordmain.cpp b/graphics/zeno/files/patch-ui_zenoedit_recordmain.cpp
new file mode 100644
index 000000000000..9c0d47f63196
--- /dev/null
+++ b/graphics/zeno/files/patch-ui_zenoedit_recordmain.cpp
@@ -0,0 +1,10 @@
+--- ui/zenoedit/recordmain.cpp.orig	2024-04-26 16:42:36 UTC
++++ ui/zenoedit/recordmain.cpp
+@@ -15,6 +15,7 @@
+ #include <zeno/utils/log.h>
+ #include "common.h"
+ #include <rapidjson/document.h>
++#include "zenoapplication.h"
+ 
+ 
+ //--record true --zsg "C:\zeno\framenum.zsg" --cachePath "C:\tmp" --sframe 0 --frame 10 --sample 1 --optix 1 --path "C:\recordpath" --pixel 4500x3500 --aov 0 --needDenoise 0
diff --git a/graphics/zeno/files/patch-ui_zenoedit_updaterequest_zsnetthread.cpp b/graphics/zeno/files/patch-ui_zenoedit_updaterequest_zsnetthread.cpp
new file mode 100644
index 000000000000..d2fde5ed3a56
--- /dev/null
+++ b/graphics/zeno/files/patch-ui_zenoedit_updaterequest_zsnetthread.cpp
@@ -0,0 +1,11 @@
+--- ui/zenoedit/updaterequest/zsnetthread.cpp.orig	2023-11-22 19:17:26 UTC
++++ ui/zenoedit/updaterequest/zsnetthread.cpp
+@@ -37,7 +37,7 @@ void ZsNetThread::run()
+ 
+ void ZsNetThread::netGet()
+ {
+-#ifdef __linux__
++#if defined( __linux__) || defined(__FreeBSD__)
+     return;
+ #else
+     CURL* curl;
diff --git a/graphics/zeno/files/patch-ui_zenoedit_util_apphelper.cpp b/graphics/zeno/files/patch-ui_zenoedit_util_apphelper.cpp
new file mode 100644
index 000000000000..b3dfdf838076
--- /dev/null
+++ b/graphics/zeno/files/patch-ui_zenoedit_util_apphelper.cpp
@@ -0,0 +1,14 @@
+--- ui/zenoedit/util/apphelper.cpp.orig	2023-11-22 19:17:26 UTC
++++ ui/zenoedit/util/apphelper.cpp
+@@ -11,7 +11,11 @@
+ #include <zeno/core/Session.h>
+ #include <zeno/extra/GlobalComm.h>
+ #include "viewport/zoptixviewport.h"
++#include "timeline/ztimeline.h"
++#include "zenomodel/include/curveutil.h"
++#include "zenomodel/include/nodesmgr.h"
+ 
++#include "zenoapplication.h"
+ 
+ QModelIndexList AppHelper::getSubInOutNode(IGraphsModel* pModel, const QModelIndex& subgIdx, const QString& sockName, bool bInput)
+ {
diff --git a/graphics/zeno/files/patch-ui_zenoedit_util_apphelper.h b/graphics/zeno/files/patch-ui_zenoedit_util_apphelper.h
new file mode 100644
index 000000000000..2f05b940fa3c
--- /dev/null
+++ b/graphics/zeno/files/patch-ui_zenoedit_util_apphelper.h
@@ -0,0 +1,25 @@
+--- ui/zenoedit/util/apphelper.h.orig	2024-07-27 11:22:11 UTC
++++ ui/zenoedit/util/apphelper.h
+@@ -1,19 +1,18 @@
+ #ifndef __ZENOEDIT_HELPER__
+ #define __ZENOEDIT_HELPER__
+ 
+ #include <zenomodel/include/igraphsmodel.h>
+-#include "zenoapplication.h"
+ #include <zenomodel/include/graphsmanagment.h>
+ #include <zenomodel/include/igraphsmodel.h>
+-#include "zenomainwindow.h"
+ #include <zenovis/ObjectsManager.h>
+ #include <zeno/types/UserData.h>
+-#include <zenoui/comctrl/gv/zveceditoritem.h>
+-#include <viewport/viewportwidget.h>
+ #include "launch/corelaunch.h"
+ #include "settings/zsettings.h"
+ #include "viewport/recordvideomgr.h"
+ #include "panel/zenospreadsheet.h"
++
++class ZVecEditorItem;
++class ViewPortWidget;
+ 
+ class AppHelper
+ {
diff --git a/graphics/zeno/files/patch-ui_zenoedit_viewportinteraction_nodesync.cpp b/graphics/zeno/files/patch-ui_zenoedit_viewportinteraction_nodesync.cpp
new file mode 100644
index 000000000000..03c3e0756796
--- /dev/null
+++ b/graphics/zeno/files/patch-ui_zenoedit_viewportinteraction_nodesync.cpp
@@ -0,0 +1,13 @@
+--- ui/zenoedit/viewportinteraction/nodesync.cpp.orig	2024-04-26 16:47:28 UTC
++++ ui/zenoedit/viewportinteraction/nodesync.cpp
+@@ -1,3 +1,4 @@
++#include "zenoapplication.h"
+ #include "nodesync.h"
+ #include <zenomodel/include/uihelper.h>
+ 
+@@ -205,4 +206,4 @@ std::string NodeSyncMgr::getPrimSockName(NodeLocation&
+     return getPrimSockName(node_type.toStdString());
+ }
+ 
+ }
++}
diff --git a/graphics/zeno/files/patch-ui_zenoedit_zenoapplication.cpp b/graphics/zeno/files/patch-ui_zenoedit_zenoapplication.cpp
new file mode 100644
index 000000000000..78db1c85294b
--- /dev/null
+++ b/graphics/zeno/files/patch-ui_zenoedit_zenoapplication.cpp
@@ -0,0 +1,32 @@
+--- ui/zenoedit/zenoapplication.cpp.orig	2024-04-23 10:56:09 UTC
++++ ui/zenoedit/zenoapplication.cpp
+@@ -13,9 +13,9 @@
+ 
+ ZenoApplication::ZenoApplication(int &argc, char **argv)
+     : QApplication(argc, argv)
+-#if defined(ZENO_MULTIPROCESS) && defined(ZENO_IPC_USE_TCP)
++//#if defined(ZENO_MULTIPROCESS) && defined(ZENO_IPC_USE_TCP)
+     , m_server(nullptr)
+-#endif
++//#endif
+     , m_bUIApp(true)
+ {
+     initMetaTypes();
+@@ -173,7 +173,7 @@ QStandardItemModel* ZenoApplication::logModel() const
+     return graphsManagment()->logModel();
+ }
+ 
+-#if defined(ZENO_MULTIPROCESS) && defined(ZENO_IPC_USE_TCP)
++//#if defined(ZENO_MULTIPROCESS) && defined(ZENO_IPC_USE_TCP)
+ ZTcpServer* ZenoApplication::getServer()
+ {
+     if (!m_server) {
+@@ -182,7 +182,7 @@ ZTcpServer* ZenoApplication::getServer()
+     }
+     return m_server;
+ }
+-#endif
++//#endif
+ 
+ ZenoMainWindow* ZenoApplication::getMainWindow()
+ {
diff --git a/graphics/zeno/files/patch-ui_zenoedit_zenoapplication.h b/graphics/zeno/files/patch-ui_zenoedit_zenoapplication.h
new file mode 100644
index 000000000000..9d0bc740cbdd
--- /dev/null
+++ b/graphics/zeno/files/patch-ui_zenoedit_zenoapplication.h
@@ -0,0 +1,45 @@
+--- ui/zenoedit/zenoapplication.h.orig	2023-11-22 19:17:26 UTC
++++ ui/zenoedit/zenoapplication.h
+@@ -3,15 +3,15 @@
+ 
+ #include <QtWidgets>
+ #include "zwidgetostream.h"
++#include "zenomainwindow.h"
+ #include "cache/zcachemgr.h"
+ #include "uilogic/procclipboard.h"
+ #include <zeno/utils/scope_exit.h>
+ 
+ class GraphsManagment;
+-class ZenoMainWindow;
+-#if defined(ZENO_MULTIPROCESS) && defined(ZENO_IPC_USE_TCP)
++//#if defined(ZENO_MULTIPROCESS) && defined(ZENO_IPC_USE_TCP)
+ class ZTcpServer;
+-#endif
++//#endif
+ 
+ class ZenoApplication : public QApplication
+ {
+@@ -26,9 +26,9 @@ class ZenoApplication : public QApplication (public)
+ 	QWidget* getWindow(const QString& objName);
+     std::shared_ptr<ZCacheMgr> cacheMgr() const;
+     std::shared_ptr<ProcessClipboard> procClipboard() const;
+-#if defined(ZENO_MULTIPROCESS) && defined(ZENO_IPC_USE_TCP)
++//#if defined(ZENO_MULTIPROCESS) && defined(ZENO_IPC_USE_TCP)
+     ZTcpServer* getServer();
+-#endif
++//#endif
+     QStandardItemModel* logModel() const;
+     bool isUIApplication() const { return m_bUIApp; }
+ 
+@@ -39,9 +39,9 @@ private slots: (private)
+     QString readQss(const QString& qssPath);
+     void initMetaTypes();
+ 
+-#if defined(ZENO_MULTIPROCESS) && defined(ZENO_IPC_USE_TCP)
++//#if defined(ZENO_MULTIPROCESS) && defined(ZENO_IPC_USE_TCP)
+     ZTcpServer* m_server;
+-#endif
++//#endif
+     std::shared_ptr<ZWidgetErrStream> m_spUILogStream;
+     std::shared_ptr<ZCacheMgr> m_spCacheMgr;
+     std::shared_ptr<ProcessClipboard> m_spProcClipboard;
diff --git a/graphics/zeno/files/patch-ui_zenoedit_zenomainwindow.cpp b/graphics/zeno/files/patch-ui_zenoedit_zenomainwindow.cpp
new file mode 100644
index 000000000000..28655e79d20e
--- /dev/null
+++ b/graphics/zeno/files/patch-ui_zenoedit_zenomainwindow.cpp
@@ -0,0 +1,11 @@
+--- ui/zenoedit/zenomainwindow.cpp.orig	2024-04-22 13:07:02 UTC
++++ ui/zenoedit/zenomainwindow.cpp
+@@ -1467,7 +1467,7 @@ void ZenoMainWindow::onZenovisFrameUpdate(bool bGLView
+ 
+ void ZenoMainWindow::onCheckUpdate()
+ {
+-#ifdef __linux__
++#if defined( __linux__) || defined(__FreeBSD__)
+     return;
+ #else
+     ZCheckUpdateDlg dlg(this);
diff --git a/graphics/zeno/files/patch-zeno_include_zeno_utils_PropertyVisitor.h b/graphics/zeno/files/patch-zeno_include_zeno_utils_PropertyVisitor.h
new file mode 100644
index 000000000000..6a096943b480
--- /dev/null
+++ b/graphics/zeno/files/patch-zeno_include_zeno_utils_PropertyVisitor.h
@@ -0,0 +1,19 @@
+--- zeno/include/zeno/utils/PropertyVisitor.h.orig	2024-04-25 15:55:29 UTC
++++ zeno/include/zeno/utils/PropertyVisitor.h
+@@ -396,12 +396,12 @@ namespace zeno {
+                     }
+ 
+                     if constexpr (IsSharedPtr<ValueType>()) {
+-                        if (!bIsOptional || Primitive->userData().has<ValueType>(KeyName)) {
+-                            ValueRef = Primitive->userData().get<ValueType>(KeyName);
++                        if (!bIsOptional || Primitive->userData().template has<ValueType>(KeyName)) {
++                            ValueRef = Primitive->userData().template get<ValueType>(KeyName);
+                         }
+                     } else {
+-                        if (!bIsOptional || Primitive->userData().has<ValueType>(KeyName)) {
+-                            ValueRef = Primitive->userData().get2<ValueType>(KeyName);
++                        if (!bIsOptional || Primitive->userData().template has<ValueType>(KeyName)) {
++                            ValueRef = Primitive->userData().template get2<ValueType>(KeyName);
+                         }
+                     }
+                 };
diff --git a/graphics/zeno/files/patch-zeno_src_extra_GlobalComm.cpp b/graphics/zeno/files/patch-zeno_src_extra_GlobalComm.cpp
new file mode 100644
index 000000000000..a15914f4a00a
--- /dev/null
+++ b/graphics/zeno/files/patch-zeno_src_extra_GlobalComm.cpp
@@ -0,0 +1,10 @@
+--- zeno/src/extra/GlobalComm.cpp.orig	2024-04-21 08:28:40 UTC
++++ zeno/src/extra/GlobalComm.cpp
+@@ -10,6 +10,7 @@
+ #include <unordered_set>
+ #include <zeno/types/MaterialObject.h>
+ #include <zeno/types/CameraObject.h>
++#include <thread>
+ #ifdef __linux__
+     #include<unistd.h>
+     #include <sys/statfs.h>
diff --git a/graphics/zeno/files/patch-zenovis_src_Scene.cpp b/graphics/zeno/files/patch-zenovis_src_Scene.cpp
new file mode 100644
index 000000000000..b5f0794c8bf9
--- /dev/null
+++ b/graphics/zeno/files/patch-zenovis_src_Scene.cpp
@@ -0,0 +1,12 @@
+--- zenovis/src/Scene.cpp.orig	2024-04-22 12:39:31 UTC
++++ zenovis/src/Scene.cpp
+@@ -12,7 +12,9 @@
+ #include <zenovis/opengl/buffer.h>
+ #include <zenovis/opengl/common.h>
+ #include <zenovis/opengl/scope.h>
++#ifdef ZENO_ENABLE_OPTIX
+ #include "../xinxinoptix/xinxinoptixapi.h"
++#endif
+ #include <cstdlib>
+ #include <map>
+ 
diff --git a/graphics/zeno/files/patch-zenovis_src_optx_RenderEngineOptx.cpp b/graphics/zeno/files/patch-zenovis_src_optx_RenderEngineOptx.cpp
new file mode 100644
index 000000000000..49761eabee9a
--- /dev/null
+++ b/graphics/zeno/files/patch-zenovis_src_optx_RenderEngineOptx.cpp
@@ -0,0 +1,14 @@
+--- zenovis/src/optx/RenderEngineOptx.cpp.orig	2024-04-22 12:40:25 UTC
++++ zenovis/src/optx/RenderEngineOptx.cpp
+@@ -1,10 +1,10 @@
++#ifdef ZENO_ENABLE_OPTIX
+ #include "optixPathTracer.h"
+ #include "vec_math.h"
+ #include "xinxinoptixapi.h"
+ #include "zeno/utils/vec.h"
+ #include <limits>
+ #include <memory>
+-#ifdef ZENO_ENABLE_OPTIX
+ #include "../../xinxinoptix/xinxinoptixapi.h"
+ #include "../../xinxinoptix/SDK/sutil/sutil.h"
+ #include <zeno/types/PrimitiveObject.h>
diff --git a/graphics/zeno/patch-CMakeLists.txt b/graphics/zeno/patch-CMakeLists.txt
new file mode 100644
index 000000000000..508f9b91bea9
--- /dev/null
+++ b/graphics/zeno/patch-CMakeLists.txt
@@ -0,0 +1,12 @@
+--- CMakeLists.txt.orig	2023-11-22 19:17:26 UTC
++++ CMakeLists.txt
+@@ -26,6 +26,9 @@ if (PROJECT_BINARY_DIR STREQUAL PROJECT_SOURCE_DIR)
+         "Otherwise ZENO may fail to build, or make Git hard to exclude binary files.")
+ endif()
+ 
++#set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address")
++#set (CMAKE_LINKER_FLAGS_DEBUG "${CMAKE_LINKER_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address")
++
+ option(ZENO_BUILD_EDITOR "Build ZENO editor" ON)
+ option(ZENO_BUILD_DESIGNER "Build ZENO designer" OFF)
+ option(ZENO_BUILD_PLAYER "Build ZENO player" OFF)
diff --git a/graphics/zeno/pkg-descr b/graphics/zeno/pkg-descr
new file mode 100644
index 000000000000..a75d3c571b61
--- /dev/null
+++ b/graphics/zeno/pkg-descr
@@ -0,0 +1,6 @@
+ZENO is an open-source, Node based 3D system able to produce
+cinematic physics effects at High Efficiency, it was designed
+for large scale simulations and has been tested on complex
+setups. Aside of its simulation Tools, ZENO provides necessary
+visualization nodes for users to import and run simulations if
+you feel that the current software you are using is too slow.