git: 1cfd15859d06 - main - devel/libsavitar: Update for cura 5.7 upgrade

From: Diane Bruce <db_at_FreeBSD.org>
Date: Wed, 04 Sep 2024 19:46:38 UTC
The branch main has been updated by db:

URL: https://cgit.FreeBSD.org/ports/commit/?id=1cfd15859d0639d1ae1aa367e2107f607280b854

commit 1cfd15859d0639d1ae1aa367e2107f607280b854
Author:     Matthieu Volat <mazhe@alkumuna.eu>
AuthorDate: 2024-09-04 19:45:10 +0000
Commit:     Diane Bruce <db@FreeBSD.org>
CommitDate: 2024-09-04 19:45:10 +0000

    devel/libsavitar: Update for cura 5.7 upgrade
    
    - modified for our build system from upstreams build system
---
 devel/libsavitar/Makefile                          |  25 ++-
 devel/libsavitar/distinfo                          |   8 +-
 devel/libsavitar/files/CMakeLists.txt              | 176 ++++++++++++++++
 devel/libsavitar/files/COPYING-CMAKE-SCRIPTS       |  22 ++
 devel/libsavitar/files/FindSIP.cmake               |  64 ++++++
 devel/libsavitar/files/FindSIP.py                  |  60 ++++++
 devel/libsavitar/files/SIPMacros.cmake             | 231 +++++++++++++++++++++
 devel/libsavitar/files/SavitarConfig.cmake.in      |   4 +
 devel/libsavitar/files/patch-CMakeLists.txt        |  11 -
 .../libsavitar/files/patch-include_Savitar_Face.h  |  15 ++
 .../files/patch-include_Savitar_MeshData.h         |  15 ++
 .../files/patch-include_Savitar_Namespace.h        |  24 +++
 .../libsavitar/files/patch-include_Savitar_Scene.h |  15 ++
 .../files/patch-include_Savitar_SceneNode.h        |  15 ++
 .../files/patch-include_Savitar_ThreeMFParser.h    |  17 ++
 .../files/patch-include_Savitar_Vertex.h           |  15 ++
 devel/libsavitar/files/patch-src_MeshData.cpp      |  11 -
 devel/libsavitar/files/patch-src_Namespace.cpp     |  11 -
 devel/libsavitar/files/patch-src_SceneNode.cpp     |  11 -
 devel/libsavitar/pkg-descr                         |   1 +
 devel/libsavitar/pkg-plist                         |   3 +-
 21 files changed, 697 insertions(+), 57 deletions(-)

diff --git a/devel/libsavitar/Makefile b/devel/libsavitar/Makefile
index 699b3c201bf6..4402f825597d 100644
--- a/devel/libsavitar/Makefile
+++ b/devel/libsavitar/Makefile
@@ -1,6 +1,5 @@
 PORTNAME=	libSavitar
-DISTVERSION=	4.13.1
-PORTREVISION=	1
+DISTVERSION=	5.3.0
 CATEGORIES=	devel cad
 DIST_SUBDIR=	Ultimaker
 
@@ -11,17 +10,25 @@ WWW=		https://github.com/Ultimaker/libSavitar
 LICENSE=	LGPL3
 LICENSE_FILE=	${WRKSRC}/LICENSE
 
-DEPRECATED=	Fails to build with modern python
-EXPIRATION_DATE=	2024-06-29
-
-BUILD_DEPENDS=	sip:devel/py-sip4
+BUILD_DEPENDS=	${PYTHON_PKGNAMEPREFIX}sip>=0:devel/py-sip@${PY_FLAVOR}
 LIB_DEPENDS=	libpugixml.so:textproc/pugixml
 
-USES=		cmake compiler:c++11-lang python pyqt:5 gettext-runtime
+USES=		cmake compiler:c++11-lang python pyqt:6 gettext-runtime
 USE_GITHUB=	yes
 GH_ACCOUNT=	Ultimaker
+GH_TUPLE=       Ultimaker:pySavitar:${PORTVERSION}:pySavitar
 USE_LDCONFIG=	yes
-CFLAGS+=	"-I${LOCALBASE}/include"
-LDFLAGS+=	"-L${LOCALBASE}/lib"
+CFLAGS+=	-I${LOCALBASE}/include
+LDFLAGS+=	-L${LOCALBASE}/lib
+
+post-extract:
+	@${MKDIR} ${WRKSRC}/cmake
+	@for f in COPYING-CMAKE-SCRIPTS FindSIP.cmake FindSIP.py SIPMacros.cmake; do \
+		${CP} ${FILESDIR}/$$f ${WRKSRC}/cmake; \
+		done
+	@for f in CMakeLists.txt SavitarConfig.cmake.in; do \
+		${CP} ${FILESDIR}/$$f ${WRKSRC}; \
+		done
+	@${CP} -r ${WRKDIR}/pySavitar-${DISTVERSION}/python ${WRKSRC}
 
 .include <bsd.port.mk>
diff --git a/devel/libsavitar/distinfo b/devel/libsavitar/distinfo
index 388b2bc869ae..fe660210b001 100644
--- a/devel/libsavitar/distinfo
+++ b/devel/libsavitar/distinfo
@@ -1,3 +1,5 @@
-TIMESTAMP = 1645698688
-SHA256 (Ultimaker/Ultimaker-libSavitar-4.13.1_GH0.tar.gz) = 0bd50f54d557bed70f2c8420405c690b819b287156e81e10b6f51651cebce2e9
-SIZE (Ultimaker/Ultimaker-libSavitar-4.13.1_GH0.tar.gz) = 100721
+TIMESTAMP = 1713950760
+SHA256 (Ultimaker/Ultimaker-libSavitar-5.3.0_GH0.tar.gz) = ed44dd42426ba4f592c2d83f652af5c2c60a1f619d16d31afa0babc2a0c997ce
+SIZE (Ultimaker/Ultimaker-libSavitar-5.3.0_GH0.tar.gz) = 25406
+SHA256 (Ultimaker/Ultimaker-pySavitar-5.3.0_GH0.tar.gz) = 968a5c8306448ebe8129449b097d76eedd9e7ddfd1e68888a71975897374d281
+SIZE (Ultimaker/Ultimaker-pySavitar-5.3.0_GH0.tar.gz) = 13402
diff --git a/devel/libsavitar/files/CMakeLists.txt b/devel/libsavitar/files/CMakeLists.txt
new file mode 100644
index 000000000000..1d0300ee0c80
--- /dev/null
+++ b/devel/libsavitar/files/CMakeLists.txt
@@ -0,0 +1,176 @@
+project(savitar)
+cmake_minimum_required(VERSION 3.8)
+
+include(GNUInstallDirs)
+include(CMakePackageConfigHelpers)
+include(GenerateExportHeader)
+
+option(BUILD_PYTHON "Build " ON)
+option(BUILD_STATIC "Build as a static library" OFF)
+option(BUILD_TESTS "Building the test-suite" OFF)
+
+if(BUILD_TESTS)
+    message(STATUS "Building with tests...")
+    find_package(GTest REQUIRED)
+    find_package(Threads QUIET)
+endif()
+
+#add_subdirectory(pugixml)
+
+if(BUILD_PYTHON)
+    list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
+
+    # FIXME: Remove the code for CMake <3.12 once we have switched over completely.
+    # FindPython3 is a new module since CMake 3.12. It deprecates FindPythonInterp and FindPythonLibs.
+    if(${CMAKE_VERSION} VERSION_LESS 3.12)
+        # FIXME: Use FindPython3 to find Python, new in CMake 3.12.
+        # However currently on our CI server it finds the wrong Python version and then doesn't find the headers.
+        find_package(PythonInterp 3.4 REQUIRED)
+        find_package(PythonLibs 3.4 REQUIRED)
+
+    else()
+        # Use FindPython3 for CMake >=3.12
+        find_package(Python3 3.4 REQUIRED COMPONENTS Interpreter Development)
+    endif()
+    execute_process(COMMAND ${Python_EXECUTABLE} -c "import sysconfig; print(sysconfig.get_path('platlib'), end='')" OUTPUT_VARIABLE Python_SITEARCH)
+
+    find_package(SIP REQUIRED)
+    if(NOT DEFINED LIB_SUFFIX)
+        set(LIB_SUFFIX "")
+    endif()
+    include(SIPMacros)
+
+    include_directories(include/ python/ src/ ${SIP_INCLUDE_DIRS} ${Python3_INCLUDE_DIRS})
+endif()
+
+set(CMAKE_CXX_STANDARD 17)
+
+if(APPLE AND CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
+endif()
+
+set(savitar_SRCS
+    src/Namespace.cpp
+    src/ThreeMFParser.cpp
+    src/SceneNode.cpp
+    src/Scene.cpp
+    src/MeshData.cpp
+    src/Vertex.cpp
+    src/Face.cpp
+)
+
+set(savitar_HDRS
+    include/Savitar/Face.h
+    include/Savitar/MeshData.h
+    include/Savitar/MetadataEntry.h
+    include/Savitar/Namespace.h
+    include/Savitar/Scene.h
+    include/Savitar/SceneNode.h
+    include/Savitar/ThreeMFParser.h
+    include/Savitar/Types.h
+    include/Savitar/Vertex.h
+    ${CMAKE_CURRENT_BINARY_DIR}/src/SavitarExport.h
+)
+
+set(SAVITAR_VERSION 0.1.2)
+set(SAVITAR_SOVERSION 0)
+
+set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_FULL_LIBDIR})
+
+if(BUILD_STATIC)
+    add_library(Savitar STATIC ${savitar_SRCS})
+else()
+    add_library(Savitar SHARED ${savitar_SRCS})
+endif()
+
+set(Savitar_LINK_LIBRARIES pugixml)
+if(CMAKE_USE_PTHREADS_INIT)
+    list(APPEND Savitar_LINK_LIBRARIES pthread)
+endif()
+target_link_libraries(Savitar PUBLIC ${Savitar_LINK_LIBRARIES})
+
+if(NOT WIN32 OR CMAKE_COMPILER_IS_GNUCXX)
+    set_target_properties(Savitar PROPERTIES COMPILE_FLAGS -fPIC)
+endif()
+
+if(BUILD_PYTHON)
+    set(SIP_EXTRA_FILES_DEPEND python/Types.sip python/MeshData.sip python/SceneNode.sip python/Scene.sip)
+    #set(SIP_EXTRA_SOURCE_FILES python/Types.cpp)
+    set(SIP_EXTRA_OPTIONS -g -n PyQt6.sip) # -g means always release the GIL before calling C++ methods. -n PyQt6.sip is required to not get the PyCapsule error
+    generate_sip_python_module_code(pySavitar python/pySavitar.sip python/pySavitar.sip "${SIP_EXTRA_FILES_DEPEND}" pySavitar_cpp_files)
+    build_sip_python_module(pySavitar python/pySavitar.sip "${pySavitar_cpp_files};${SIP_EXTRA_SOURCE_FILES}" "" Savitar)
+endif()
+
+target_include_directories(Savitar PUBLIC
+    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
+    $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
+)
+
+if(${CMAKE_BUILD_TYPE})
+    if(${CMAKE_BUILD_TYPE} STREQUAL "Debug" OR ${CMAKE_BUILD_TYPE} STREQUAL "RelWithDebInfo")
+        add_definitions(-DSAVITAR_DEBUG)
+    endif()
+endif()
+
+set_target_properties(Savitar PROPERTIES
+    FRAMEWORK FALSE
+    VERSION ${SAVITAR_VERSION}
+    SOVERSION ${SAVITAR_SOVERSION}
+    PUBLIC_HEADER "${savitar_HDRS}"
+    DEFINE_SYMBOL MAKE_SAVITAR_LIB
+    CXX_VISIBILITY_PRESET hidden
+    VISIBILITY_INLINES_HIDDEN 1
+)
+
+generate_export_header(Savitar
+    EXPORT_FILE_NAME src/SavitarExport.h
+)
+# This is required when building out-of-tree.
+# The compiler won't find the generated header otherwise.
+include_directories(${CMAKE_BINARY_DIR}/src)
+
+install(TARGETS Savitar
+    EXPORT Savitar-targets
+    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+    PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/Savitar
+)
+
+install(EXPORT Savitar-targets
+    DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/Savitar
+)
+
+configure_package_config_file(SavitarConfig.cmake.in ${CMAKE_BINARY_DIR}/SavitarConfig.cmake INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/Savitar)
+write_basic_package_version_file(${CMAKE_BINARY_DIR}/SavitarConfigVersion.cmake VERSION ${SAVITAR_VERSION} COMPATIBILITY SameMajorVersion)
+
+# List of tests. For each test there must be a file tests/${NAME}.cpp.
+set(savitar_TEST
+    ThreeMFParserTest
+    MeshDataTest
+    NamespaceTest
+)
+
+# Compiling the test environment.
+if (BUILD_TESTS)
+    include_directories(${GTEST_INCLUDE_DIR})
+
+    enable_testing()
+
+    #To make sure that the tests are built before running them, add the building of these tests as an additional test.
+    add_custom_target(build_all_tests)
+    add_test(BuildTests "${CMAKE_COMMAND}" --build ${CMAKE_CURRENT_BINARY_DIR} --target build_all_tests)
+
+    foreach (test ${savitar_TEST})
+        add_executable(${test} tests/main.cpp tests/${test}.cpp)
+        target_link_libraries(${test} Savitar ${GTEST_BOTH_LIBRARIES})
+        add_test(${test} ${test})
+        add_dependencies(build_all_tests ${test}) #Make sure that this gets built as part of the build_all_tests target.
+    endforeach()
+endif()
+
+install(FILES
+    ${CMAKE_BINARY_DIR}/SavitarConfig.cmake
+    ${CMAKE_BINARY_DIR}/SavitarConfigVersion.cmake
+    DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/Savitar
+)
diff --git a/devel/libsavitar/files/COPYING-CMAKE-SCRIPTS b/devel/libsavitar/files/COPYING-CMAKE-SCRIPTS
new file mode 100644
index 000000000000..4b417765f3a8
--- /dev/null
+++ b/devel/libsavitar/files/COPYING-CMAKE-SCRIPTS
@@ -0,0 +1,22 @@
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. The name of the author may not be used to endorse or promote products 
+   derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/devel/libsavitar/files/FindSIP.cmake b/devel/libsavitar/files/FindSIP.cmake
new file mode 100644
index 000000000000..101a991d7de1
--- /dev/null
+++ b/devel/libsavitar/files/FindSIP.cmake
@@ -0,0 +1,64 @@
+# Find SIP
+# ~~~~~~~~
+#
+# SIP website: http://www.riverbankcomputing.co.uk/sip/index.php
+#
+# Find the installed version of SIP. FindSIP should be called after Python
+# has been found.
+#
+# This file defines the following variables:
+#
+# SIP_VERSION - The version of SIP found expressed as a 6 digit hex number
+#     suitable for comparison as a string.
+#
+# SIP_VERSION_STR - The version of SIP found as a human readable string.
+#
+# SIP_BINARY_PATH - Path and filename of the SIP command line executable.
+#
+# SIP_INCLUDE_DIR - Directory holding the SIP C++ header file.
+#
+# SIP_DEFAULT_SIP_DIR - Default directory where .sip files should be installed
+#     into.
+
+# Copyright (c) 2007, Simon Edwards <simon@simonzone.com>
+# Redistribution and use is allowed according to the terms of the BSD license.
+# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+
+
+
+IF(SIP_VERSION)
+  # Already in cache, be silent
+  SET(SIP_FOUND TRUE)
+ELSE(SIP_VERSION)
+
+  FIND_FILE(_find_sip_py FindSIP.py PATHS ${CMAKE_MODULE_PATH} NO_CMAKE_FIND_ROOT_PATH)
+
+  EXECUTE_PROCESS(COMMAND ${Python_EXECUTABLE} ${_find_sip_py} OUTPUT_VARIABLE sip_config)
+  IF(sip_config)
+    STRING(REGEX REPLACE "^sip_version:([^\n]+).*$" "\\1" SIP_VERSION ${sip_config})
+    STRING(REGEX REPLACE ".*\nsip_version_num:([^\n]+).*$" "\\1" SIP_VERSION_NUM ${sip_config})
+    STRING(REGEX REPLACE ".*\nsip_version_str:([^\n]+).*$" "\\1" SIP_VERSION_STR ${sip_config})
+    STRING(REGEX REPLACE ".*\ndefault_sip_dir:([^\n]+).*$" "\\1" SIP_DEFAULT_SIP_DIR ${sip_config})
+    IF(${SIP_VERSION_STR} VERSION_LESS 5)
+      STRING(REGEX REPLACE ".*\nsip_bin:([^\n]+).*$" "\\1" SIP_BINARY_PATH ${sip_config})
+      STRING(REGEX REPLACE ".*\nsip_inc_dir:([^\n]+).*$" "\\1" SIP_INCLUDE_DIR ${sip_config})
+      STRING(REGEX REPLACE ".*\nsip_module_dir:([^\n]+).*$" "\\1" SIP_MODULE_DIR ${sip_config})
+    ELSE(${SIP_VERSION_STR} VERSION_LESS 5)
+      FIND_PROGRAM(SIP_BUILD_EXECUTABLE sip-build)
+    ENDIF(${SIP_VERSION_STR} VERSION_LESS 5)
+    SET(SIP_FOUND TRUE)
+  ENDIF(sip_config)
+
+  IF(SIP_FOUND)
+    IF(NOT SIP_FIND_QUIETLY)
+      MESSAGE(STATUS "Found SIP version: ${SIP_VERSION_STR}")
+    ENDIF(NOT SIP_FIND_QUIETLY)
+  ELSE(SIP_FOUND)
+    IF(SIP_FIND_REQUIRED)
+      MESSAGE(FATAL_ERROR "Could not find SIP")
+    ENDIF(SIP_FIND_REQUIRED)
+  ENDIF(SIP_FOUND)
+
+ENDIF(SIP_VERSION)
+
+ADD_DEFINITIONS(-DSIP_VERSION=0x${SIP_VERSION})
diff --git a/devel/libsavitar/files/FindSIP.py b/devel/libsavitar/files/FindSIP.py
new file mode 100644
index 000000000000..2e8eea04bb56
--- /dev/null
+++ b/devel/libsavitar/files/FindSIP.py
@@ -0,0 +1,60 @@
+# -*- coding: utf-8 -*-
+#
+#   Copyright (c) 2007, Simon Edwards <simon@simonzone.com>
+#    All rights reserved.
+#
+#    Redistribution and use in source and binary forms, with or without
+#    modification, are permitted provided that the following conditions are met:
+#        * Redistributions of source code must retain the above copyright
+#        notice, this list of conditions and the following disclaimer.
+#        * Redistributions in binary form must reproduce the above copyright
+#        notice, this list of conditions and the following disclaimer in the
+#        documentation and/or other materials provided with the distribution.
+#        * Neither the name of the  Simon Edwards <simon@simonzone.com> nor the
+#        names of its contributors may be used to endorse or promote products
+#        derived from this software without specific prior written permission.
+#
+#    THIS SOFTWARE IS PROVIDED BY Simon Edwards <simon@simonzone.com> ''AS IS'' AND ANY
+#    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+#    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+#    DISCLAIMED. IN NO EVENT SHALL Simon Edwards <simon@simonzone.com> BE LIABLE FOR ANY
+#    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+#    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+#    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+#    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+#    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# FindSIP.py
+# Copyright (c) 2007, Simon Edwards <simon@simonzone.com>
+# Redistribution and use is allowed according to the terms of the BSD license.
+# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+
+try:
+    import sipbuild
+
+    print("sip_version:%06.0x" % sipbuild.version.SIP_VERSION)
+    print("sip_version_num:%d" % sipbuild.version.SIP_VERSION)
+    print("sip_version_str:%s" % sipbuild.version.SIP_VERSION_STR)
+
+    import sysconfig
+    if "deb_system" in sysconfig.get_scheme_names():
+        python_modules_dir = sysconfig.get_path("purelib", "deb_system")
+    else:
+        python_modules_dir = sysconfig.get_path("purelib")
+    print("default_sip_dir:%s" % python_modules_dir)
+except ImportError:  # Code for SIP v4
+    import sipconfig
+
+    sipcfg = sipconfig.Configuration()
+    print("sip_version:%06.0x" % sipcfg.sip_version)
+    print("sip_version_num:%d" % sipcfg.sip_version)
+    print("sip_version_str:%s" % sipcfg.sip_version_str)
+    print("sip_bin:%s" % sipcfg.sip_bin)
+    print("default_sip_dir:%s" % sipcfg.default_sip_dir)
+    print("sip_inc_dir:%s" % sipcfg.sip_inc_dir)
+    # SIP 4.19.10+ has new sipcfg.sip_module_dir
+    if hasattr(sipcfg, "sip_module_dir"):
+        print("sip_module_dir:%s" % sipcfg.sip_module_dir)
+    else:
+        print("sip_module_dir:%s" % sipcfg.sip_mod_dir)
diff --git a/devel/libsavitar/files/SIPMacros.cmake b/devel/libsavitar/files/SIPMacros.cmake
new file mode 100644
index 000000000000..9b3affa1ee1f
--- /dev/null
+++ b/devel/libsavitar/files/SIPMacros.cmake
@@ -0,0 +1,231 @@
+# Macros for SIP
+# ~~~~~~~~~~~~~~
+# Copyright (c) 2007, Simon Edwards <simon@simonzone.com>
+# Redistribution and use is allowed according to the terms of the BSD license.
+# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+#
+# SIP website: http://www.riverbankcomputing.co.uk/sip/index.php
+#
+# This file defines the following macros:
+#
+# ADD_SIP_PYTHON_MODULE (MODULE_NAME MODULE_SIP [library1, libaray2, ...])
+#     Specifies a SIP file to be built into a Python module and installed.
+#     MODULE_NAME is the name of Python module including any path name. (e.g.
+#     os.sys, Foo.bar etc). MODULE_SIP the path and filename of the .sip file
+#     to process and compile. libraryN are libraries that the Python module,
+#     which is typically a shared library, should be linked to. The built
+#     module will also be install into Python's site-packages directory.
+#
+# The behavior of the ADD_SIP_PYTHON_MODULE macro can be controlled by a
+# number of variables:
+#
+# SIP_INCLUDES - List of directories which SIP will scan through when looking
+#     for included .sip files. (Corresponds to the -I option for SIP.)
+#
+# SIP_TAGS - List of tags to define when running SIP. (Corresponds to the -t
+#     option for SIP.)
+#
+# SIP_CONCAT_PARTS - An integer which defines the number of parts the C++ code
+#     of each module should be split into. Defaults to 8. (Corresponds to the
+#     -j option for SIP.)
+#
+# SIP_DISABLE_FEATURES - List of feature names which should be disabled
+#     running SIP. (Corresponds to the -x option for SIP.)
+#
+# SIP_EXTRA_OPTIONS - Extra command line options which should be passed on to
+#     SIP.
+
+# SIP_BUILD_EXTRA_OPTIONS - Extra command line options which should be passed on to
+#     sip-build.
+
+SET(SIP_INCLUDES)
+SET(SIP_TAGS)
+SET(SIP_CONCAT_PARTS 16)
+SET(SIP_DISABLE_FEATURES)
+SET(SIP_EXTRA_OPTIONS)
+SET(SIP_EXTRA_OBJECTS)
+SET(SIP_BUILD_EXTRA_OPTIONS)
+
+MACRO(GENERATE_SIP_PYTHON_MODULE_CODE MODULE_NAME MODULE_SIP SIP_FILES CPP_FILES)
+
+  STRING(REPLACE "." "/" _x ${MODULE_NAME})
+  GET_FILENAME_COMPONENT(_parent_module_path ${_x} PATH)
+  GET_FILENAME_COMPONENT(_child_module_name ${_x} NAME)
+  GET_FILENAME_COMPONENT(_module_path ${MODULE_SIP} PATH)
+  GET_FILENAME_COMPONENT(_abs_module_sip ${MODULE_SIP} ABSOLUTE)
+
+  # If this is not need anymore (using input configuration file for SIP files)
+  # SIP could be run in the source rather than in binary directory
+  #SET(_configured_module_sip ${CMAKE_CURRENT_BINARY_DIR}/${_module_path}/${_module_path}.sip)
+  SET(_configured_module_sip ${CMAKE_CURRENT_BINARY_DIR}/${_module_path}/${_child_module_name}.sip)
+  FOREACH (_sip_file ${SIP_FILES})
+    GET_FILENAME_COMPONENT(_sip_file_path ${_sip_file} PATH)
+    GET_FILENAME_COMPONENT(_sip_file_name_we ${_sip_file} NAME_WE)
+    #FILE(RELATIVE_PATH _sip_file_relpath ${BINDING_FILES_ROOT_DIR} "${_sip_file_path}/${_sip_file_name_we}")
+    SET(_sip_file_relpath "${_sip_file_path}/${_sip_file_name_we}")
+    SET(_out_sip_file "${CMAKE_CURRENT_BINARY_DIR}/${_sip_file_relpath}.sip")
+    CONFIGURE_FILE(${_sip_file} ${_out_sip_file})
+  ENDFOREACH (_sip_file)
+
+  SET(_message "-DMESSAGE=Generating CPP code for module ${MODULE_NAME}")
+  SET(_sip_output_files)
+
+  # Suppress warnings
+  IF(PEDANTIC)
+    IF(MSVC)
+      ADD_DEFINITIONS(
+        /wd4189  # local variable is initialized but not referenced
+        /wd4996  # deprecation warnings (bindings re-export deprecated methods)
+        /wd4701  # potentially uninitialized variable used (sip generated code)
+        /wd4702  # unreachable code (sip generated code)
+        /wd4703  # potentially uninitialized local pointer variable 'sipType' used
+      )
+    ELSE(MSVC)
+      # disable all warnings
+      ADD_DEFINITIONS( -w -Wno-deprecated-declarations )
+      IF(NOT APPLE)
+        ADD_DEFINITIONS( -fpermissive )
+      ENDIF(NOT APPLE)
+    ENDIF(MSVC)
+  ENDIF(PEDANTIC)
+
+  IF(MSVC)
+    ADD_DEFINITIONS( /bigobj )
+  ENDIF(MSVC)
+
+  IF (SIP_BUILD_EXECUTABLE)
+
+    FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${_module_path}/build/${_child_module_name})    # Output goes in this dir.
+
+    SET(_sip_output_files 
+        ${CMAKE_CURRENT_BINARY_DIR}/${_module_path}/build/${_child_module_name}/sip_array.c
+        ${CMAKE_CURRENT_BINARY_DIR}/${_module_path}/build/${_child_module_name}/sip_bool.cpp
+        ${CMAKE_CURRENT_BINARY_DIR}/${_module_path}/build/${_child_module_name}/sip_core.c
+        ${CMAKE_CURRENT_BINARY_DIR}/${_module_path}/build/${_child_module_name}/sip_descriptors.c
+        ${CMAKE_CURRENT_BINARY_DIR}/${_module_path}/build/${_child_module_name}/sip_enum.c
+        ${CMAKE_CURRENT_BINARY_DIR}/${_module_path}/build/${_child_module_name}/sip_int_convertors.c
+        ${CMAKE_CURRENT_BINARY_DIR}/${_module_path}/build/${_child_module_name}/sip_object_map.c
+        ${CMAKE_CURRENT_BINARY_DIR}/${_module_path}/build/${_child_module_name}/sip_threads.c
+        ${CMAKE_CURRENT_BINARY_DIR}/${_module_path}/build/${_child_module_name}/sip_voidptr.c)
+    FOREACH(CONCAT_NUM RANGE 0 ${SIP_CONCAT_PARTS} )
+      IF( ${CONCAT_NUM} LESS ${SIP_CONCAT_PARTS} )
+        SET(_sip_output_files ${_sip_output_files} ${CMAKE_CURRENT_BINARY_DIR}/${_module_path}/build/${_child_module_name}/sip${_child_module_name}part${CONCAT_NUM}.cpp )
+      ENDIF( ${CONCAT_NUM} LESS ${SIP_CONCAT_PARTS} )
+    ENDFOREACH(CONCAT_NUM RANGE 0 ${SIP_CONCAT_PARTS} )
+
+    #SET(SIPCMD ${SIP_BUILD_EXECUTABLE} --no-protected-is-public --pep484-pyi --no-make --concatenate=${SIP_CONCAT_PARTS} --qmake=${QMAKE_EXECUTABLE} --include-dir=${CMAKE_CURRENT_BINARY_DIR} --include-dir=${PYQT_SIP_DIR} --api-dir ${CMAKE_BINARY_DIR}/python ${SIP_BUILD_EXTRA_OPTIONS})
+    LIST(JOIN SIP_EXTRA_INCLUDE_DIRS "\",\"" _sip_extra_includes)
+    FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${_module_path}/pyproject.toml "\
+[build-system]\n\
+requires = [\"sip >=6, <7\"]\n\
+build-backend = \"sipbuild.api\"
+[tool.sip.metadata]\n\
+name = \"${_child_module_name}\"\n\
+[tool.sip.bindings.${_child_module_name}]\n\
+concatenate = ${SIP_CONCAT_PARTS}\n\
+include-dirs = [\"${_sip_extra_includes}\"]\n\
+protected-is-public = false\n\
+pep484-pyi = true\n\
+[tool.sip.project]\n\
+sip-files-dir = \"${CMAKE_CURRENT_SOURCE_DIR}/${_module_path}\"\n\
+")
+    SET(SIPCMD ${SIP_BUILD_EXECUTABLE} --no-compile ${SIP_BUILD_EXTRA_OPTIONS})
+
+    ADD_CUSTOM_COMMAND(
+      OUTPUT ${_sip_output_files}
+      COMMAND ${CMAKE_COMMAND} -E echo ${message}
+      COMMAND ${SIPCMD}
+      COMMAND ${CMAKE_COMMAND} -E touch ${_sip_output_files}
+      WORKING_DIRECTORY ${_module_path}
+      MAIN_DEPENDENCY ${_configured_module_sip}
+      DEPENDS ${SIP_EXTRA_FILES_DEPEND}
+      VERBATIM
+    )
+
+  ELSE (SIP_BUILD_EXECUTABLE)
+
+    FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${_module_path})    # Output goes in this dir.
+
+    SET(_sip_includes)
+    FOREACH (_inc ${SIP_INCLUDES})
+      GET_FILENAME_COMPONENT(_abs_inc ${_inc} ABSOLUTE)
+      LIST(APPEND _sip_includes -I ${_abs_inc})
+    ENDFOREACH (_inc )
+
+    SET(_sip_tags)
+    FOREACH (_tag ${SIP_TAGS})
+      LIST(APPEND _sip_tags -t ${_tag})
+    ENDFOREACH (_tag)
+
+    SET(_sip_x)
+    FOREACH (_x ${SIP_DISABLE_FEATURES})
+      LIST(APPEND _sip_x -x ${_x})
+    ENDFOREACH (_x ${SIP_DISABLE_FEATURES})
+
+    FOREACH(CONCAT_NUM RANGE 0 ${SIP_CONCAT_PARTS} )
+      IF( ${CONCAT_NUM} LESS ${SIP_CONCAT_PARTS} )
+        SET(_sip_output_files ${_sip_output_files} ${CMAKE_CURRENT_BINARY_DIR}/${_module_path}/sip${_child_module_name}part${CONCAT_NUM}.cpp )
+      ENDIF( ${CONCAT_NUM} LESS ${SIP_CONCAT_PARTS} )
+    ENDFOREACH(CONCAT_NUM RANGE 0 ${SIP_CONCAT_PARTS} )
+
+    SET(SIPCMD ${SIP_BINARY_PATH} ${_sip_tags} -w -e ${_sip_x} ${SIP_EXTRA_OPTIONS} -j ${SIP_CONCAT_PARTS} -c ${CMAKE_CURRENT_BINARY_DIR}/${_module_path} -I ${CMAKE_CURRENT_BINARY_DIR}/${_module_path} ${_sip_includes} ${_configured_module_sip})
+    ADD_CUSTOM_COMMAND(
+      OUTPUT ${_sip_output_files}
+      COMMAND ${CMAKE_COMMAND} -E echo ${message}
+      COMMAND ${CMAKE_COMMAND} -E touch ${_sip_output_files}
+      COMMAND ${SIPCMD}
+      MAIN_DEPENDENCY ${_configured_module_sip}
+      DEPENDS ${SIP_EXTRA_FILES_DEPEND}
+      VERBATIM
+    )
+
+  ENDIF (SIP_BUILD_EXECUTABLE)
+
+  ADD_CUSTOM_TARGET(generate_sip_${MODULE_NAME}_cpp_files DEPENDS ${_sip_output_files})
+
+  SET(CPP_FILES ${_sip_output_files})
+ENDMACRO(GENERATE_SIP_PYTHON_MODULE_CODE)
+
+# Will compile and link the module
+MACRO(BUILD_SIP_PYTHON_MODULE MODULE_NAME SIP_FILES EXTRA_OBJECTS)
+  SET(EXTRA_LINK_LIBRARIES ${ARGN})
+
+  # We give this target a long logical target name.
+  # (This is to avoid having the library name clash with any already
+  # install library names. If that happens then cmake dependency
+  # tracking get confused.)
+  STRING(REPLACE "." "_" _logical_name ${MODULE_NAME})
+  SET(_logical_name "python_module_${_logical_name}")
+  GET_FILENAME_COMPONENT(_module_path ${SIP_FILES} PATH)
+
+  ADD_LIBRARY(${_logical_name} MODULE ${_sip_output_files} ${EXTRA_OBJECTS})
+  SET_PROPERTY(TARGET ${_logical_name} PROPERTY AUTOMOC OFF)
+  TARGET_INCLUDE_DIRECTORIES(${_logical_name} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/${_module_path}/build ${SIP_EXTRA_INCLUDE_DIRS})
+
+  IF (${SIP_VERSION_STR} VERSION_LESS 5.0.0)
+    # require c++14 only -- sip breaks with newer versions due to reliance on throw(...) annotations removed in c++17
+    TARGET_COMPILE_FEATURES(${_logical_name} PRIVATE cxx_std_14)
+  ENDIF (${SIP_VERSION_STR} VERSION_LESS 5.0.0)
+
+  SET_TARGET_PROPERTIES(${_logical_name} PROPERTIES CXX_VISIBILITY_PRESET default)
+  IF (NOT APPLE)
+    TARGET_LINK_LIBRARIES(${_logical_name} ${Python_LIBRARIES})
+  ENDIF (NOT APPLE)
+  TARGET_LINK_LIBRARIES(${_logical_name} ${EXTRA_LINK_LIBRARIES})
+  IF (APPLE)
+    SET_TARGET_PROPERTIES(${_logical_name} PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
+  ENDIF (APPLE)
+  SET_TARGET_PROPERTIES(${_logical_name} PROPERTIES PREFIX "" OUTPUT_NAME ${_child_module_name})
+
+  IF (WIN32)
+    SET_TARGET_PROPERTIES(${_logical_name} PROPERTIES SUFFIX ".pyd")
+    GET_TARGET_PROPERTY(_runtime_output ${_logical_name} RUNTIME_OUTPUT_DIRECTORY)
+    ADD_CUSTOM_COMMAND(TARGET ${_logical_name} POST_BUILD
+      COMMAND ${CMAKE_COMMAND} -E echo "Copying extension ${_child_module_name}"
+      COMMAND ${CMAKE_COMMAND} -E copy_if_different "$<TARGET_FILE:${_logical_name}>" "${_runtime_output}/${_child_module_name}.pyd"
+      DEPENDS ${_logical_name}
+      )
+  ENDIF(WIN32)
+
+  INSTALL(TARGETS ${_logical_name} DESTINATION "${Python_SITEARCH}/${_parent_module_path}")
+ENDMACRO(BUILD_SIP_PYTHON_MODULE MODULE_NAME SIP_FILES EXTRA_OBJECTS)
diff --git a/devel/libsavitar/files/SavitarConfig.cmake.in b/devel/libsavitar/files/SavitarConfig.cmake.in
new file mode 100644
index 000000000000..d6c83012c619
--- /dev/null
+++ b/devel/libsavitar/files/SavitarConfig.cmake.in
@@ -0,0 +1,4 @@
+@PACKAGE_INIT@
+
+get_filename_component(SELF_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
+include(${SELF_DIR}/Savitar-targets.cmake)
diff --git a/devel/libsavitar/files/patch-CMakeLists.txt b/devel/libsavitar/files/patch-CMakeLists.txt
deleted file mode 100644
index 350b4f496b75..000000000000
--- a/devel/libsavitar/files/patch-CMakeLists.txt
+++ /dev/null
@@ -1,11 +0,0 @@
---- CMakeLists.txt.orig	2020-05-11 21:56:56 UTC
-+++ CMakeLists.txt
-@@ -15,7 +15,7 @@ if(BUILD_TESTS)
-     find_package(Threads QUIET)
- endif()
- 
--add_subdirectory(pugixml)
-+#add_subdirectory(pugixml)
- 
- if(BUILD_PYTHON)
-     list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
diff --git a/devel/libsavitar/files/patch-include_Savitar_Face.h b/devel/libsavitar/files/patch-include_Savitar_Face.h
new file mode 100644
index 000000000000..9dcedda902e2
--- /dev/null
+++ b/devel/libsavitar/files/patch-include_Savitar_Face.h
@@ -0,0 +1,15 @@
+--- include/Savitar/Face.h.orig	2023-09-08 18:09:36 UTC
++++ include/Savitar/Face.h
+@@ -4,9 +4,11 @@
+ #ifndef FACE_H
+ #define FACE_H
+ 
++#include "SavitarExport.h"
++
+ namespace Savitar
+ {
+-class Face
++class SAVITAR_EXPORT Face
+ {
+ public:
+     /**
diff --git a/devel/libsavitar/files/patch-include_Savitar_MeshData.h b/devel/libsavitar/files/patch-include_Savitar_MeshData.h
new file mode 100644
index 000000000000..855626826bb5
--- /dev/null
+++ b/devel/libsavitar/files/patch-include_Savitar_MeshData.h
@@ -0,0 +1,15 @@
+--- include/Savitar/MeshData.h.orig	2023-09-08 18:09:36 UTC
++++ include/Savitar/MeshData.h
+@@ -14,9 +14,11 @@
+ 
+ #include <pugixml.hpp>
+ 
++#include "SavitarExport.h"
++
+ namespace Savitar
+ {
+-class MeshData
++class SAVITAR_EXPORT MeshData
+ {
+ public:
+     /**
diff --git a/devel/libsavitar/files/patch-include_Savitar_Namespace.h b/devel/libsavitar/files/patch-include_Savitar_Namespace.h
new file mode 100644
index 000000000000..d5d104f896a6
--- /dev/null
+++ b/devel/libsavitar/files/patch-include_Savitar_Namespace.h
@@ -0,0 +1,24 @@
+--- include/Savitar/Namespace.h.orig	2023-09-08 18:09:36 UTC
++++ include/Savitar/Namespace.h
+@@ -10,6 +10,8 @@
+ 
+ #include <pugixml.hpp>
+ 
++#include "SavitarExport.h"
++
+ namespace xml_namespace
+ {
+ using xmlns_map_t = std::map<std::string, std::set<std::string>>;
+@@ -17,8 +19,8 @@ using xmlns_map_t = std::map<std::string, std::set<std
+ [[nodiscard]] std::string getCuraUri();
+ [[nodiscard]] std::string getDefaultUri();
+ 
+-[[nodiscard]] xmlns_map_t getAncestralNamespaces(const pugi::xml_node& xml_node);
+-[[nodiscard]] std::set<std::string> getNamesFor(const xmlns_map_t& map, const std::string& uri);
++[[nodiscard]] xmlns_map_t SAVITAR_EXPORT getAncestralNamespaces(const pugi::xml_node& xml_node);
++[[nodiscard]] std::set<std::string> SAVITAR_EXPORT getNamesFor(const xmlns_map_t& map, const std::string& uri);
+ } // namespace xml_namespace
+ 
+-#endif
+\ No newline at end of file
++#endif
diff --git a/devel/libsavitar/files/patch-include_Savitar_Scene.h b/devel/libsavitar/files/patch-include_Savitar_Scene.h
new file mode 100644
index 000000000000..cc2c03a81bda
--- /dev/null
+++ b/devel/libsavitar/files/patch-include_Savitar_Scene.h
@@ -0,0 +1,15 @@
+--- include/Savitar/Scene.h.orig	2023-09-08 18:09:36 UTC
++++ include/Savitar/Scene.h
+@@ -12,9 +12,11 @@
+ 
+ #include <pugixml.hpp>
+ 
++#include "SavitarExport.h"
++
+ namespace Savitar
+ {
+-class Scene
++class SAVITAR_EXPORT Scene
+ {
+ public:
+     /**
diff --git a/devel/libsavitar/files/patch-include_Savitar_SceneNode.h b/devel/libsavitar/files/patch-include_Savitar_SceneNode.h
new file mode 100644
index 000000000000..70d290cb2291
--- /dev/null
+++ b/devel/libsavitar/files/patch-include_Savitar_SceneNode.h
@@ -0,0 +1,15 @@
+--- include/Savitar/SceneNode.h.orig	2023-09-08 18:09:36 UTC
++++ include/Savitar/SceneNode.h
+@@ -13,9 +13,11 @@
+ 
+ #include <pugixml.hpp>
+ 
++#include "SavitarExport.h"
++
+ namespace Savitar
+ {
+-class SceneNode
++class SAVITAR_EXPORT SceneNode
+ {
+ public:
+     SceneNode() = default;
diff --git a/devel/libsavitar/files/patch-include_Savitar_ThreeMFParser.h b/devel/libsavitar/files/patch-include_Savitar_ThreeMFParser.h
new file mode 100644
index 000000000000..0bf7a784c716
--- /dev/null
+++ b/devel/libsavitar/files/patch-include_Savitar_ThreeMFParser.h
@@ -0,0 +1,17 @@
+--- include/Savitar/ThreeMFParser.h.orig	2023-09-08 18:09:36 UTC
++++ include/Savitar/ThreeMFParser.h
+@@ -8,11 +8,13 @@
+ #include <pugixml.hpp>
+ 
+ #include <string>
++
++#include "SavitarExport.h"
+ namespace Savitar
+ {
+ class Scene;
+ 
+-class ThreeMFParser
++class SAVITAR_EXPORT ThreeMFParser
+ {
+ public:
+     ThreeMFParser();
diff --git a/devel/libsavitar/files/patch-include_Savitar_Vertex.h b/devel/libsavitar/files/patch-include_Savitar_Vertex.h
new file mode 100644
index 000000000000..d0d6a84c69cd
--- /dev/null
+++ b/devel/libsavitar/files/patch-include_Savitar_Vertex.h
@@ -0,0 +1,15 @@
+--- include/Savitar/Vertex.h.orig	2023-09-08 18:09:36 UTC
++++ include/Savitar/Vertex.h
+@@ -4,9 +4,11 @@
+ #ifndef VERTEX_H
+ #define VERTEX_H
+ 
++#include "SavitarExport.h"
++
+ namespace Savitar
+ {
+-class Vertex
++class SAVITAR_EXPORT Vertex
+ {
+ public:
+     /**
diff --git a/devel/libsavitar/files/patch-src_MeshData.cpp b/devel/libsavitar/files/patch-src_MeshData.cpp
deleted file mode 100644
index 9d8a5686dd02..000000000000
--- a/devel/libsavitar/files/patch-src_MeshData.cpp
+++ /dev/null
@@ -1,11 +0,0 @@
---- src/MeshData.cpp.orig	2020-05-11 21:53:20 UTC
-+++ src/MeshData.cpp
-@@ -17,7 +17,7 @@
-  */
- 
- #include "MeshData.h"
--#include "../pugixml/src/pugixml.hpp"
-+#include <pugixml.hpp>
- #include <cstring>
- #include <iostream>
- #include <stdexcept> //For std::runtime_error.
diff --git a/devel/libsavitar/files/patch-src_Namespace.cpp b/devel/libsavitar/files/patch-src_Namespace.cpp
deleted file mode 100644
index 5da35e038d06..000000000000
--- a/devel/libsavitar/files/patch-src_Namespace.cpp
+++ /dev/null
@@ -1,11 +0,0 @@
---- src/Namespace.cpp.orig	2020-05-11 21:53:27 UTC
-+++ src/Namespace.cpp
-@@ -3,7 +3,7 @@
- 
- #include "Namespace.h"
- 
--#include "../pugixml/src/pugixml.hpp"
-+#include <pugixml.hpp>
- 
- namespace xml_namespace
- {
diff --git a/devel/libsavitar/files/patch-src_SceneNode.cpp b/devel/libsavitar/files/patch-src_SceneNode.cpp
deleted file mode 100644
index e055e80807d8..000000000000
--- a/devel/libsavitar/files/patch-src_SceneNode.cpp
+++ /dev/null
@@ -1,11 +0,0 @@
---- src/SceneNode.cpp.orig	2020-05-11 21:53:40 UTC
-+++ src/SceneNode.cpp
-@@ -18,7 +18,7 @@
- 
- #include "SceneNode.h"
- #include "Namespace.h"
--#include "../pugixml/src/pugixml.hpp"
-+#include <pugixml.hpp>
- #include <iostream>
- using namespace Savitar;
- 
diff --git a/devel/libsavitar/pkg-descr b/devel/libsavitar/pkg-descr
index f962b12ae25c..738afe5cb309 100644
--- a/devel/libsavitar/pkg-descr
+++ b/devel/libsavitar/pkg-descr
@@ -1 +1,2 @@
 libSavitar is a c++ implementation of 3mf loading with SIP python binding
+Used by cura
diff --git a/devel/libsavitar/pkg-plist b/devel/libsavitar/pkg-plist
index 75bbae9ccc82..00931d01ba6e 100644
--- a/devel/libsavitar/pkg-plist
+++ b/devel/libsavitar/pkg-plist
@@ -1,5 +1,6 @@
 include/Savitar/Face.h
 include/Savitar/MeshData.h
+include/Savitar/MetadataEntry.h
 include/Savitar/Namespace.h
 include/Savitar/SavitarExport.h
 include/Savitar/Scene.h
@@ -14,4 +15,4 @@ lib/cmake/Savitar/SavitarConfigVersion.cmake
 lib/libSavitar.so
 lib/libSavitar.so.0
 lib/libSavitar.so.0.1.2
-%%PYTHON_SITELIBDIR%%/Savitar.so
+%%PYTHON_SITELIBDIR%%/pySavitar.so