Download raw body.
[UPDATE] cad/openscad to 2025.10.14
On Wed, Nov 26, 2025 at 01:11:20PM +0000, Johannes Thyssen Tishman wrote:
> 2025-11-07T10:59:10-0800 Andrew Hewus Fresh <andrew@afresh1.com>:
> > I got this to work with QT6 as suggested and put back the `unlink` patch
> > because I actually did hit it.
> >
> > Once we solve the manifold and clipper2 being picked up by blender
> > questions, I'll ask for an OK.
> >
> > For now, here's the current patch for testing, unless someone wants to
> > OK contingent on the dependencies going in.
>
> I just build this update on my laptop and on a clean chroot without
> issues. I noticed, however, that there a few dependencies picked up at
> configure time that are not listed in the Makefile. I've added them just
> for safety.
>
> Other than that, I made the follwoing tweaks on top of your last diff:
>
> 1. Manually disable SpNav to avoid picking it up in case it get's
> ported.
> 2. Move TEST_IS_INTERACTIVE under CONFIGURE_ARGS as in the
> Makefile template.
Seems reasonable, thanks!
> 3. Use ${FILESDIR} for startup script. This is just preference. Please
> ignore if you disagree.
Are we allowed to hardcode ${LOCALBASE} line this? I know there has
been discussion in the past about it. I could use this and PKG_SUBST,
but seemed overkill for a two-line file.
> 4. Remove patches/patch-src_filemodule_cc. This file was moved to
> src/core/SourceFile.cc upstream since our last update to the port and
> now includes our changes.
Weird, I don't have that file in my WIP, I must have screwed up the
patch somehow.
https://cvs.afresh1.com/cgi-bin/cvsweb/mystuff-openscad/cad/openscad/patches/
> The diff below shows the changes made on top of your last diff for
> convenience and to ease reviewing. A diff with both our changes that
> should apply cleanly on the recent cad/openscad revision by ian@ is
> attached.
>
> Many tests are not passing when I run them as follows (using
> PORTS_PRIVSEP=Yes):
>
> $ xhost +si:localuser:_pbuild; make test; xhost -si:localuser:_pbuild
>
> Most of them fail with the following error which I don't have time to
> debug right now:
>
> GL context provider 'glx' not found
> Can't create OffscreenView: Unable to obtain GL Context
>
> I found this[0] which may help.
>
> [0] https://github.com/pythonscad/pythonscad/issues/14
>
> Once again, thank you for your work on this afresh1@ :)
>
> diff -rNup /tmp/openscad/Makefile /usr/ports/cad/openscad/Makefile
> --- /tmp/openscad/Makefile Wed Nov 26 11:21:48 2025
> +++ /usr/ports/cad/openscad/Makefile Wed Nov 26 11:12:40 2025
> @@ -6,7 +6,6 @@ DISTNAME = openscad-${V}
> CATEGORIES = cad
>
> HOMEPAGE = https://www.openscad.org/
> -TEST_IS_INTERACTIVE = X11
>
> # AGPL-3.0
> PERMIT_PACKAGE = Yes
> @@ -37,23 +36,30 @@ COMPILER = base-clang ports-gcc
>
> BUILD_DEPENDS = cad/clipper2 \
> devel/bison \
> + devel/harfbuzz,-main \
> devel/gettext,-tools \
> devel/sanitizers-cmake \
> + graphics/cairo \
> graphics/glslang \
> + graphics/ImageMagick \
> + graphics/shaderc \
> graphics/vulkan-tools \
> math/cgal \
> + math/double-conversion \
> math/eigen3 \
> - shells/bash
> + shells/bash \
> + textproc/libxml \
> + x11/xkbcommon
>
> LIB_DEPENDS = archivers/libzip \
> cad/clipper2 \
> + cad/lib3mf \
> cad/manifold \
> devel/boost \
> devel/gettext \
> devel/glib2 \
> devel/gmp \
> devel/gmp,-cxx \
> - devel/lib3mf \
> devel/mpfr \
> devel/tbb \
> editors/qscintilla,qt6 \
> @@ -100,6 +106,11 @@ CONFIGURE_ARGS += -DUSE_IMAGE_COMPARE_PY=OFF
> # I don't know how link in comms/libhidapi
> CONFIGURE_ARGS += -DENABLE_HIDAPI=OFF
>
> +# We don't have SpNav. Disable in case it get's ported.
> +CONFIGURE_ARGS += -DCMAKE_DISABLE_FIND_PACKAGE_SpNav=ON
> +
> +TEST_IS_INTERACTIVE = X11
> +
> post-extract:
> rmdir ${WRKSRC}/libraries/MCAD
> cp -a ${WRKDIR}/MCAD-${MCAD_COMMIT} ${WRKSRC}/libraries/MCAD
> @@ -111,11 +122,7 @@ post-extract:
> # to be absolute so our patch works.
> post-install:
> mv ${PREFIX}/bin/openscad ${PREFIX}/libexec/openscad
> - ${INSTALL_SCRIPT} /dev/null ${PREFIX}/bin/openscad
> - printf "%s\n%s\n" \
> - '#!/bin/sh' \
> - 'exec ${TRUEPREFIX}/libexec/openscad "$$@"' \
> - > ${PREFIX}/bin/openscad
> + ${INSTALL_SCRIPT} ${FILESDIR}/openscad ${PREFIX}/bin/openscad
> ${MODPY_COMPILEALL} ${PREFIX}/share/openscad/libraries/MCAD/
>
> .include <bsd.port.mk>
> diff -rNup /tmp/openscad/files/openscad /usr/ports/cad/openscad/files/openscad
> --- /tmp/openscad/files/openscad Thu Jan 1 01:00:00 1970
> +++ /usr/ports/cad/openscad/files/openscad Tue Nov 25 15:00:14 2025
> @@ -0,0 +1,3 @@
> +#!/bin/sh
> +
> +exec /usr/local/libexec/openscad "$@"
> diff -rNup /tmp/openscad/patches/patch-src_filemodule_cc /usr/ports/cad/openscad/patches/patch-src_filemodule_cc
> --- /tmp/openscad/patches/patch-src_filemodule_cc Wed Nov 26 10:20:14 2025
> +++ /usr/ports/cad/openscad/patches/patch-src_filemodule_cc Thu Jan 1 01:00:00 1970
> @@ -1,12 +0,0 @@
> -Index: src/filemodule.cc
> ---- src/FileModule.cc.orig Fri Nov 21 10:07:49 2025
> -+++ src/FileModule.cc Fri Nov 21 10:09:46 2025
> -@@ -65,7 +65,7 @@
> - auto ext = fs::path(path).extension().generic_string();
> -
> - if (boost::iequals(ext, ".otf") || boost::iequals(ext, ".ttf")) {
> -- if (fs::is_regular(path)) {
> -+ if (fs::is_regular_file(path)) {
> - FontCache::instance()->register_font_file(path);
> - } else {
> - LOG(message_group::Error,Location::NONE,"","Can't read font with path '%1$s'",path);
> Index: Makefile
> ===================================================================
> RCS file: /cvs/ports/cad/openscad/Makefile,v
> diff -u -p -u -p -r1.57 Makefile
> --- Makefile 22 Nov 2025 01:49:32 -0000 1.57
> +++ Makefile 26 Nov 2025 10:12:44 -0000
> @@ -1,69 +1,128 @@
> -COMMENT = the programmer's solid 3D CAD modeller
> -BROKEN-sparc64= SIGILL on src/cgalutils.cc with CGAL-4.6.3
> +COMMENT = programmers solid 3D CAD modeller
>
> -V = 2021.01
> +V = 2025.10.14
> DISTNAME = openscad-${V}
> -REVISION = 13
>
> CATEGORIES = cad
>
> HOMEPAGE = https://www.openscad.org/
>
> -# GPLv2+ with CGAL exception
> +# AGPL-3.0
> PERMIT_PACKAGE = Yes
>
> -WANTLIB += ${COMPILER_LIBCXX} GL GLEW GLU Qt5Concurrent Qt5Core
> -WANTLIB += Qt5DBus Qt5Gamepad Qt5Gui Qt5Multimedia Qt5Network
> -WANTLIB += Qt5PrintSupport Qt5Widgets X11 boost_filesystem-mt
> -WANTLIB += boost_program_options-mt boost_regex-mt boost_system-mt
> -WANTLIB += boost_thread-mt c cairo double-conversion fontconfig
> -WANTLIB += freetype glib-2.0 gmp harfbuzz intl m mpfr opencsg
> -WANTLIB += qscintilla2_qt5 xml2 zip
> +GH_ACCOUNT = openscad
> +GH_PROJECT = openscad
> +GH_COMMIT = b0f18e9b4d61288b2cd6c659135f7e77def179e0
>
> -SITES = https://files.openscad.org/
> -EXTRACT_SUFX = .src.tar.gz
> +MCAD_COMMIT = 1ea402208c3127ffb443931e9bb1681c191dacca
> +SITES.mcad = https://github.com/${GH_ACCOUNT}/MCAD/archive/
>
> -MODULES = devel/qmake \
> +DISTFILES.mcad = MCAD-${MCAD_COMMIT:C/(........).*/\1/}{${MCAD_COMMIT}}${EXTRACT_SUFX}
> +
> +MODULES = devel/cmake \
> lang/python \
> - x11/qt5
> + x11/qt6
>
> -BUILD_DEPENDS = devel/bison \
> +WANTLIB += ${COMPILER_LIBCXX} 3mf Clipper2 EGL GL GLEW GLU Qt6Concurrent
> +WANTLIB += Qt6Core Qt6Core5Compat Qt6DBus Qt6Gui Qt6Multimedia
> +WANTLIB += Qt6Network Qt6OpenGL Qt6OpenGLWidgets Qt6Svg Qt6Widgets
> +WANTLIB += boost_atomic-mt boost_filesystem-mt boost_program_options-mt
> +WANTLIB += boost_regex-mt boost_system-mt c cairo double-conversion
> +WANTLIB += fontconfig freetype glib-2.0 gmp gmpxx harfbuzz intl
> +WANTLIB += m manifold mpfr opencsg qscintilla2_qt6 tbb xml2 zip
> +
> +# Match devel/boost
> +COMPILER = base-clang ports-gcc
> +
> +BUILD_DEPENDS = cad/clipper2 \
> + devel/bison \
> + devel/harfbuzz,-main \
> devel/gettext,-tools \
> + devel/sanitizers-cmake \
> + graphics/cairo \
> + graphics/glslang \
> + graphics/ImageMagick \
> + graphics/shaderc \
> + graphics/vulkan-tools \
> math/cgal \
> - math/eigen3
> + math/double-conversion \
> + math/eigen3 \
> + shells/bash \
> + textproc/libxml \
> + x11/xkbcommon
>
> LIB_DEPENDS = archivers/libzip \
> + cad/clipper2 \
> + cad/lib3mf \
> + cad/manifold \
> devel/boost \
> + devel/gettext \
> + devel/glib2 \
> devel/gmp \
> - devel/harfbuzz \
> + devel/gmp,-cxx \
> devel/mpfr \
> - editors/qscintilla \
> + devel/tbb \
> + editors/qscintilla,qt6 \
> graphics/glew \
> graphics/opencsg \
> - math/double-conversion \
> - x11/qt5/qtgamepad \
> - x11/qt5/qtmultimedia
> + x11/qt6/qt5compat \
> + x11/qt6/qtbase \
> + x11/qt6/qtmultimedia \
> + x11/qt6/qtsvg
>
> RUN_DEPENDS = devel/desktop-file-utils \
> - fonts/liberation-fonts \
> misc/shared-mime-info \
> + net/curl \
> x11/gtk+4,-guic
>
> -# virtual memory exhausted: Cannot allocate memory
> -.if ${MACHINE_ARCH:Malpha}
> -COPTS += -O1
> -CXXOPTS += -O1
> -.endif
>
> -MODQMAKE_ARGS = VERSION=${V}
> -SEPARATE_BUILD = No
> +# I didn't test fully, but it does complain
> +BUILD_DEPENDS += ${RUN_DEPENDS}
> +
> +TEST_DEPENDS = graphics/ImageMagick
> +
> +# A test requires this
> +TEST_DEPENDS += shells/bash
> +
> +# The openscad script wrapper breaks debug packages
> +#DEBUG_PACKAGES = ${BUILD_PACKAGES}
> +
> +# Make about say the "right" thing
> +CONFIGURE_ARGS += -DOPENSCAD_VERSION=${V}
> +
> +# Don't use the included stuff, use ours
> +CONFIGURE_ARGS += -DUSE_BUILTIN_CLIPPER2=OFF \
> + -DUSE_BUILTIN_MANIFOLD=OFF
> +
> +# Our QT6 port is more stable
> +CONFIGURE_ARGS += -DUSE_QT6=ON
> +
> +# It might be faster, but at what cost?
> +CONFIGURE_ARGS += -DUSE_MIMALLOC=OFF
> +
> +# We don't have Pillow
> +CONFIGURE_ARGS += -DUSE_IMAGE_COMPARE_PY=OFF
> +
> +# I don't know how link in comms/libhidapi
> +CONFIGURE_ARGS += -DENABLE_HIDAPI=OFF
> +
> +# We don't have SpNav. Disable in case it get's ported.
> +CONFIGURE_ARGS += -DCMAKE_DISABLE_FIND_PACKAGE_SpNav=ON
>
> -NO_TEST = Yes
> +TEST_IS_INTERACTIVE = X11
>
> -pre-configure:
> - ln -sf ${LOCALBASE}/bin/bison ${WRKDIR}/bin/yacc
> +post-extract:
> + rmdir ${WRKSRC}/libraries/MCAD
> + cp -a ${WRKDIR}/MCAD-${MCAD_COMMIT} ${WRKSRC}/libraries/MCAD
> + #find ${WRKSRC} -type f -exec sed -i '1s,^#!/bin/sh,#!${PREFIX}/bin/bash,' {} +
>
> +# OpenSCAD uses the program_location (see patch-src_openscad_cc) to
> +# figure out resource paths, but on OpenBSD that doesn't work when
> +# launched from the PATH So, add a shell script shim to fix up argv[0]
> +# to be absolute so our patch works.
> post-install:
> + mv ${PREFIX}/bin/openscad ${PREFIX}/libexec/openscad
> + ${INSTALL_SCRIPT} ${FILESDIR}/openscad ${PREFIX}/bin/openscad
> ${MODPY_COMPILEALL} ${PREFIX}/share/openscad/libraries/MCAD/
>
> .include <bsd.port.mk>
> Index: distinfo
> ===================================================================
> RCS file: /cvs/ports/cad/openscad/distinfo,v
> diff -u -p -u -p -r1.7 distinfo
> --- distinfo 14 Feb 2021 16:14:54 -0000 1.7
> +++ distinfo 26 Nov 2025 10:12:44 -0000
> @@ -1,2 +1,4 @@
> -SHA256 (openscad-2021.01.src.tar.gz) = 2TjCl+fl9l26sUYcrEcvxg3+qkmZ6iwZsxpBhPLXA1k=
> -SIZE (openscad-2021.01.src.tar.gz) = 15817555
> +SHA256 (MCAD-1ea40220.tar.gz) = PQQHfTaYFGOMPwGP7MOUOQEaR/VFAm9DwaRlvOF3P1c=
> +SHA256 (openscad-2025.10.14-b0f18e9b.tar.gz) = T5Tn5sOZNDDWuWYX+4NTWRIMa16d6nGnaqcptHLEvEg=
> +SIZE (MCAD-1ea40220.tar.gz) = 56943
> +SIZE (openscad-2025.10.14-b0f18e9b.tar.gz) = 24859679
> Index: files/openscad
> ===================================================================
> RCS file: files/openscad
> diff -N files/openscad
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ files/openscad 26 Nov 2025 10:12:44 -0000
> @@ -0,0 +1,3 @@
> +#!/bin/sh
> +
> +exec /usr/local/libexec/openscad "$@"
> Index: patches/patch-CMakeLists_txt
> ===================================================================
> RCS file: patches/patch-CMakeLists_txt
> diff -N patches/patch-CMakeLists_txt
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-CMakeLists_txt 26 Nov 2025 10:12:44 -0000
> @@ -0,0 +1,42 @@
> +Index: CMakeLists.txt
> +--- CMakeLists.txt.orig
> ++++ CMakeLists.txt
> +@@ -396,7 +396,7 @@ else()
> + target_link_libraries(OpenSCAD PRIVATE Eigen3::Eigen)
> + message(STATUS "Eigen: ${Eigen3_VERSION}")
> +
> +- find_package(Boost 1.70 REQUIRED QUIET COMPONENTS regex program_options)
> ++ find_package(Boost 1.70 REQUIRED QUIET COMPONENTS filesystem regex program_options)
> + message(STATUS "Boost: ${Boost_VERSION}")
> + target_include_directories(OpenSCAD SYSTEM PRIVATE ${Boost_INCLUDE_DIRS})
> + target_link_libraries(OpenSCAD PRIVATE ${Boost_LIBRARIES})
> +@@ -559,7 +559,7 @@ if(ENABLE_CAIRO STREQUAL "AUTO")
> + if(CAIRO_VERSION OR CAIRO_FOUND)
> + message(STATUS "Cairo: ${CAIRO_VERSION}")
> + target_include_directories(OpenSCAD SYSTEM PRIVATE ${CAIRO_INCLUDE_DIRS})
> +- target_link_libraries(OpenSCAD PRIVATE ${CAIRO_LIBRARIES})
> ++ target_link_libraries(OpenSCAD PRIVATE ${CAIRO_LINK_LIBRARIES})
> + target_compile_definitions(OpenSCAD PRIVATE ENABLE_CAIRO)
> + else()
> + message(STATUS "Cairo: disabled (not found)")
> +@@ -806,7 +806,7 @@ elseif(UNIX)
> + if (NOT USE_GLAD)
> + target_compile_definitions(OpenSCAD PRIVATE GLEW_EGL)
> + endif()
> +- target_link_libraries(OpenSCAD PRIVATE OpenGL::EGL)
> ++ target_link_libraries(OpenSCAD PRIVATE ${OPENGL_egl_LIBRARY})
> + endif()
> + if(ENABLE_GLX AND OpenGL_GLX_FOUND)
> + target_compile_definitions(OpenSCAD PRIVATE ENABLE_GLX)
> +@@ -1121,11 +1121,6 @@ else()
> + ${GLEW_SOURCES})
> + endif()
> +
> +-
> +-if(UNIX AND (NOT APPLE) AND (NOT HEADLESS))
> +- set(PLATFORM_INPUT_DRIVER_SOURCES src/gui/input/JoystickInputDriver.cc)
> +- target_compile_definitions(OpenSCAD PRIVATE ENABLE_JOYSTICK)
> +-endif()
> +
> + set(INPUT_DRIVER_SOURCES
> + ${PLATFORM_INPUT_DRIVER_SOURCES}
> Index: patches/patch-features_boost_prf
> ===================================================================
> RCS file: patches/patch-features_boost_prf
> diff -N patches/patch-features_boost_prf
> --- patches/patch-features_boost_prf 11 Mar 2022 18:24:31 -0000 1.2
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,12 +0,0 @@
> -Index: features/boost.prf
> ---- features/boost.prf.orig
> -+++ features/boost.prf
> -@@ -71,7 +71,7 @@ isEmpty(BOOST_LINK_FLAGS) {
> -
> - isEmpty(BOOST_LINK_FLAGS) {
> - unix|macx {
> -- BOOST_LINK_FLAGS = -lboost_thread -lboost_program_options -lboost_filesystem -lboost_system -lboost_regex
> -+ BOOST_LINK_FLAGS = -lboost_thread-mt -lboost_program_options-mt -lboost_filesystem-mt -lboost_system-mt -lboost_regex-mt
> - }
> - }
> -
> Index: patches/patch-openscad_pro
> ===================================================================
> RCS file: patches/patch-openscad_pro
> diff -N patches/patch-openscad_pro
> --- patches/patch-openscad_pro 11 Mar 2022 18:24:31 -0000 1.5
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,45 +0,0 @@
> -- remove unsupported compiler flag (that is NOT ignored)
> -- don't use bundled Liberation fonts, use RDEP on fonts/liberation-fonts instead
> -- fix manpage installation dir
> -- disable hidapi support, it doesn't compile
> -
> -Index: openscad.pro
> ---- openscad.pro.orig
> -+++ openscad.pro
> -@@ -150,7 +150,6 @@ netbsd* {
> - # See Dec 2011 OpenSCAD mailing list, re: CGAL/GCC bugs.
> - *g++* {
> - QMAKE_CXXFLAGS *= -fno-strict-aliasing
> -- QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-local-typedefs # ignored before 4.8
> -
> - # Disable attributes warnings on MSYS/MXE due to gcc bug spamming the logs: Issue #2771
> - win* | CONFIG(mingw-cross-env)|CONFIG(mingw-cross-env-shared) {
> -@@ -193,7 +192,7 @@ CONFIG += lib3mf
> - CONFIG += gettext
> - CONFIG += libxml2
> - CONFIG += libzip
> --CONFIG += hidapi
> -+#CONFIG += hidapi
> - CONFIG += spnav
> - CONFIG += double-conversion
> - CONFIG += cairo
> -@@ -721,10 +720,6 @@ libraries.path = "$$PREFIX/share/$${FULLNAME}/librarie
> - libraries.files = libraries/*
> - INSTALLS += libraries
> -
> --fonts.path = "$$PREFIX/share/$${FULLNAME}/fonts/"
> --fonts.files = fonts/*
> --INSTALLS += fonts
> --
> - colorschemes.path = "$$PREFIX/share/$${FULLNAME}/color-schemes/"
> - colorschemes.files = color-schemes/*
> - INSTALLS += colorschemes
> -@@ -757,7 +752,7 @@ icon512.path = $$PREFIX/share/icons/hicolor/512x512/ap
> - icon512.extra = test -f icons/$${FULLNAME}-512.png && cp -f icons/$${FULLNAME}-512.png \"\$(INSTALL_ROOT)$${icon512.path}/$${FULLNAME}.png\" || cp -f icons/openscad-512.png \"\$(INSTALL_ROOT)$${icon512.path}/$${FULLNAME}.png\"
> - INSTALLS += icon48 icon64 icon128 icon256 icon512
> -
> --man.path = $$PREFIX/share/man/man1
> -+man.path = $$PREFIX/man/man1
> - man.extra = cp -f doc/openscad.1 \"\$(INSTALL_ROOT)$${man.path}/$${FULLNAME}.1\"
> - INSTALLS += man
> -
> Index: patches/patch-scripts_translation-update_sh
> ===================================================================
> RCS file: /cvs/ports/cad/openscad/patches/patch-scripts_translation-update_sh,v
> diff -u -p -u -p -r1.2 patch-scripts_translation-update_sh
> --- patches/patch-scripts_translation-update_sh 11 Mar 2022 18:24:31 -0000 1.2
> +++ patches/patch-scripts_translation-update_sh 26 Nov 2025 10:12:44 -0000
> @@ -1,14 +1,12 @@
> -OpenBSD does not have unlink in base
> -
> Index: scripts/translation-update.sh
> --- scripts/translation-update.sh.orig
> +++ scripts/translation-update.sh
> -@@ -100,7 +100,7 @@ updatemo()
> +@@ -101,7 +101,7 @@ updatemo()
>
> - # clean the mess
> - for LANGCODE in `cat locale/LINGUAS | grep -v "#"`; do
> -- unlink ./locale/$LANGCODE/LC_MESSAGES/$LANGCODE.mo
> -+ rm ./locale/$LANGCODE/LC_MESSAGES/$LANGCODE.mo
> - done
> - else
> - if [ x"$(uname -s)" = x"Linux" ]; then
> + # clean the mess
> + for LANGCODE in `cat locale/LINGUAS | grep -v "#"`; do
> +- unlink ./locale/$LANGCODE/LC_MESSAGES/$LANGCODE.mo
> ++ rm -f ./locale/$LANGCODE/LC_MESSAGES/$LANGCODE.mo
> + done
> + else
> + if [ x"$(uname -s)" = x"Linux" ]; then
> Index: patches/patch-src_cgalutils-polyhedron_cc
> ===================================================================
> RCS file: patches/patch-src_cgalutils-polyhedron_cc
> diff -N patches/patch-src_cgalutils-polyhedron_cc
> --- patches/patch-src_cgalutils-polyhedron_cc 31 Oct 2023 23:33:26 -0000 1.1
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,26 +0,0 @@
> -Backport from upstream
> -Commit: cc49ad8dac24309f5452d5dea9abd406615a52d9
> -
> -Index: src/cgalutils-polyhedron.cc
> ---- src/cgalutils-polyhedron.cc.orig
> -+++ src/cgalutils-polyhedron.cc
> -@@ -337,19 +337,6 @@ namespace CGALUtils {
> - }
> - };
> -
> -- template <typename Polyhedron>
> -- std::string printPolyhedron(const Polyhedron &p) {
> -- std::ostringstream sstream;
> -- sstream.precision(20);
> --
> -- Polyhedron_writer writer;
> -- generic_print_polyhedron(sstream, p, writer);
> --
> -- return sstream.str();
> -- }
> --
> -- template std::string printPolyhedron(const CGAL_Polyhedron &p);
> --
> - }; // namespace CGALUtils
> -
> - #endif /* ENABLE_CGAL */
> Index: patches/patch-src_cgalutils-tess_cc
> ===================================================================
> RCS file: patches/patch-src_cgalutils-tess_cc
> diff -N patches/patch-src_cgalutils-tess_cc
> --- patches/patch-src_cgalutils-tess_cc 31 Oct 2023 23:33:26 -0000 1.1
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,29 +0,0 @@
> -Backport from upstream
> -Commit: d559fa838ea919e664661bfcf1d3274c83743d61
> -
> -Index: src/cgalutils-tess.cc
> ---- src/cgalutils-tess.cc.orig
> -+++ src/cgalutils-tess.cc
> -@@ -6,10 +6,12 @@
> - #pragma push_macro("NDEBUG")
> - #undef NDEBUG
> - #include <CGAL/Constrained_Delaunay_triangulation_2.h>
> --#if CGAL_VERSION_NR >= CGAL_VERSION_NUMBER(4,11,0)
> -+#if CGAL_VERSION_NR < 1050401000
> - #include <CGAL/Triangulation_2_projection_traits_3.h>
> -+ typedef CGAL::Triangulation_2_filtered_projection_traits_3<K> Projection;
> - #else
> -- #include <CGAL/Triangulation_2_filtered_projection_traits_3.h>
> -+ #include <CGAL/Projection_traits_3.h>
> -+ typedef CGAL::Filtered_projection_traits_3<K> Projection;
> - #endif
> - #include <CGAL/Triangulation_face_base_with_info_2.h>
> - #pragma pop_macro("NDEBUG")
> -@@ -19,7 +21,6 @@ struct FaceInfo {
> - bool in_domain() { return nesting_level%2 == 1; }
> - };
> -
> --typedef CGAL::Triangulation_2_filtered_projection_traits_3<K> Projection;
> - typedef CGAL::Triangulation_face_base_with_info_2<FaceInfo, K> Fbb;
> - typedef CGAL::Triangulation_data_structure_2<
> - CGAL::Triangulation_vertex_base_2<Projection>,
> Index: patches/patch-src_cgalutils_h
> ===================================================================
> RCS file: patches/patch-src_cgalutils_h
> diff -N patches/patch-src_cgalutils_h
> --- patches/patch-src_cgalutils_h 31 Oct 2023 23:33:26 -0000 1.1
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,14 +0,0 @@
> -Backport from upstream
> -Commit: cc49ad8dac24309f5452d5dea9abd406615a52d9
> -
> -Index: src/cgalutils.h
> ---- src/cgalutils.h.orig
> -+++ src/cgalutils.h
> -@@ -45,7 +45,6 @@ namespace CGALUtils {
> - bool is_approximately_convex(const PolySet &ps);
> - Geometry const* applyMinkowski(const Geometry::Geometries &children);
> -
> -- template <typename Polyhedron> std::string printPolyhedron(const Polyhedron &p);
> - template <typename Polyhedron> bool createPolySetFromPolyhedron(const Polyhedron &p, PolySet &ps);
> - template <typename Polyhedron> bool createPolyhedronFromPolySet(const PolySet &ps, Polyhedron &p);
> - template <class Polyhedron_A, class Polyhedron_B>
> Index: patches/patch-src_filemodule_cc
> ===================================================================
> RCS file: patches/patch-src_filemodule_cc
> diff -N patches/patch-src_filemodule_cc
> --- patches/patch-src_filemodule_cc 22 Nov 2025 01:49:32 -0000 1.1
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,12 +0,0 @@
> -Index: src/filemodule.cc
> ---- src/FileModule.cc.orig Fri Nov 21 10:07:49 2025
> -+++ src/FileModule.cc Fri Nov 21 10:09:46 2025
> -@@ -65,7 +65,7 @@
> - auto ext = fs::path(path).extension().generic_string();
> -
> - if (boost::iequals(ext, ".otf") || boost::iequals(ext, ".ttf")) {
> -- if (fs::is_regular(path)) {
> -+ if (fs::is_regular_file(path)) {
> - FontCache::instance()->register_font_file(path);
> - } else {
> - LOG(message_group::Error,Location::NONE,"","Can't read font with path '%1$s'",path);
> Index: patches/patch-src_openscad_cc
> ===================================================================
> RCS file: /cvs/ports/cad/openscad/patches/patch-src_openscad_cc,v
> diff -u -p -u -p -r1.1 patch-src_openscad_cc
> --- patches/patch-src_openscad_cc 31 Oct 2023 23:33:26 -0000 1.1
> +++ patches/patch-src_openscad_cc 26 Nov 2025 10:12:44 -0000
> @@ -1,55 +1,20 @@
> -Backport from upstream
> -Commit: d559fa838ea919e664661bfcf1d3274c83743d61
> -
> -Index: src/openscad.cc
> +IZZndex: src/openscad.cc
> --- src/openscad.cc.orig
> +++ src/openscad.cc
> -@@ -65,7 +65,6 @@
> - #include <chrono>
> - #include <boost/algorithm/string.hpp>
> +@@ -60,6 +60,7 @@
> + #include <boost/algorithm/string/predicate.hpp>
> #include <boost/algorithm/string/split.hpp>
> --#include <boost/algorithm/string/join.hpp>
> - #include <boost/range/adaptor/transformed.hpp>
> - #include <boost/program_options.hpp>
> - #include <boost/filesystem.hpp>
> -@@ -307,7 +306,7 @@ void set_render_color_scheme(const std::string color_s
> - }
> + #include <boost/dll/runtime_symbol_info.hpp>
> ++#include <boost/filesystem/operations.hpp>
> + #include <boost/lexical_cast.hpp>
> + #include <boost/lexical_cast/bad_lexical_cast.hpp>
> + #include <boost/optional/optional.hpp>
> +@@ -814,7 +815,7 @@ int main(int argc, char **argv)
>
> - if (exit_if_not_found) {
> -- LOG(message_group::None,Location::NONE,"",(boost::join(ColorMap::inst()->colorSchemeNames(), "\n")));
> -+ LOG(message_group::None,Location::NONE,"",(boost::algorithm::join(ColorMap::inst()->colorSchemeNames(), "\n")));
> -
> - exit(1);
> - } else {
> -@@ -885,7 +884,7 @@ struct CommaSeparatedVector
> - };
> -
> - template <class Seq, typename ToString>
> --std::string join(const Seq &seq, const std::string &sep, const ToString &toString)
> -+std::string str_join(const Seq &seq, const std::string &sep, const ToString &toString)
> - {
> - return boost::algorithm::join(boost::adaptors::transform(seq, toString), sep);
> - }
> -@@ -947,7 +946,7 @@ int main(int argc, char **argv)
> - ("P,P", po::value<string>(), "customizer parameter set")
> - #ifdef ENABLE_EXPERIMENTAL
> - ("enable", po::value<vector<string>>(), ("enable experimental features: " +
> -- join(boost::make_iterator_range(Feature::begin(), Feature::end()), " | ",
> -+ str_join(boost::make_iterator_range(Feature::begin(), Feature::end()), " | ",
> - [](const Feature *feature) {
> - return feature->get_name();
> - }) +
> -@@ -964,11 +963,11 @@ int main(int argc, char **argv)
> - ("render", po::value<string>()->implicit_value(""), "for full geometry evaluation when exporting png")
> - ("preview", po::value<string>()->implicit_value(""), "[=throwntogether] -for ThrownTogether preview png")
> - ("animate", po::value<unsigned>(), "export N animated frames")
> -- ("view", po::value<CommaSeparatedVector>(), ("=view options: " + boost::join(viewOptions.names(), " | ")).c_str())
> -+ ("view", po::value<CommaSeparatedVector>(), ("=view options: " + boost::algorithm::join(viewOptions.names(), " | ")).c_str())
> - ("projection", po::value<string>(), "=(o)rtho or (p)erspective when exporting png")
> - ("csglimit", po::value<unsigned int>(), "=n -stop rendering at n CSG elements when exporting png")
> - ("colorscheme", po::value<string>(), ("=colorscheme: " +
> -- join(ColorMap::inst()->colorSchemeNames(), " | ",
> -+ str_join(ColorMap::inst()->colorSchemeNames(), " | ",
> - [](const std::string& colorScheme) {
> - return (colorScheme == ColorMap::inst()->defaultColorSchemeName() ? "*" : "") + colorScheme;
> - }) +
> + #ifndef __EMSCRIPTEN__
> + const auto applicationPath =
> +- weakly_canonical(boost::dll::program_location()).parent_path().generic_string();
> ++ boost::filesystem::system_complete(argv[0]).parent_path().generic_string();
> + #else
> + const auto applicationPath = boost::dll::fs::current_path();
> + #endif
> Index: patches/patch-tests_virtualfb_sh
> ===================================================================
> RCS file: patches/patch-tests_virtualfb_sh
> diff -N patches/patch-tests_virtualfb_sh
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-tests_virtualfb_sh 26 Nov 2025 10:12:44 -0000
> @@ -0,0 +1,9 @@
> +Index: tests/virtualfb.sh
> +--- tests/virtualfb.sh.orig
> ++++ tests/virtualfb.sh
> +@@ -1,4 +1,4 @@
> +-#!/bin/sh
> ++#!/usr/local/bin/bash
> +
> + # Toggle the Virtual Framebuffer
> + # If started, stop. If stopped, start.
> Index: pkg/DESCR
> ===================================================================
> RCS file: /cvs/ports/cad/openscad/pkg/DESCR,v
> diff -u -p -u -p -r1.1.1.1 DESCR
> --- pkg/DESCR 29 Apr 2011 18:55:37 -0000 1.1.1.1
> +++ pkg/DESCR 26 Nov 2025 10:12:44 -0000
> @@ -1,13 +1,23 @@
> -OpenSCAD is a software for creating 3D CAD objects.
> +OpenSCAD is software for creating solid 3D CAD models. It is free
> +software and available for Linux/UNIX, Windows and Mac OS X. Unlike
> +most free software for creating 3D models (such as Blender) it does
> +not focus on the artistic aspects of 3D modelling but instead on
> +the CAD aspects. Thus it might be the application you are looking
> +for when you are planning to create 3D models of machine parts but
> +pretty sure is not what you are looking for when you are more
> +interested in creating computer-animated movies.
>
> -Unlike most free software for creating 3D models, it does not focus on
> -the artistic aspects of 3D modelling but instead on the CAD aspects.
> -Thus it is more suitable for creating 3D models of machine parts but
> -perhaps not when creating computer-animated movies.
> +OpenSCAD is not an interactive modeller. Instead it is something
> +like a 3D-compiler that reads in a script file that describes the
> +object and renders the 3D model from this script file. This gives
> +you (the designer) full control over the modelling process and
> +enables you to easily change any step in the modelling process or
> +make designs that are defined by configurable parameters.
>
> -OpenSCAD is not an interactive modeller. Instead it is something like
> -a 3D-compiler that reads in a script file that describes the object
> -and renders the 3D model from this script file. This gives designers
> -full control over the modelling process and enables them to easily
> -change any step in the modelling process or make designes that are
> -defined by configurable parameters.
> +OpenSCAD provides two main modelling techniques: First there is
> +constructive solid geometry (aka CSG) and second there is extrusion
> +of 2D outlines. Autocad DXF files can be used as the data exchange
> +format for such 2D outlines. In addition to 2D paths for extrusion
> +it is also possible to read design parameters from DXF files. Besides
> +DXF files OpenSCAD can read and create 3D models in the STL and OFF
> +file formats.
> Index: pkg/PLIST
> ===================================================================
> RCS file: /cvs/ports/cad/openscad/pkg/PLIST,v
> diff -u -p -u -p -r1.14 PLIST
> --- pkg/PLIST 23 Oct 2025 13:19:03 -0000 1.14
> +++ pkg/PLIST 26 Nov 2025 10:12:44 -0000
> @@ -1,4 +1,5 @@
> -@bin bin/openscad
> +bin/openscad
> +@bin libexec/openscad
> @man man/man1/openscad.1
> share/applications/openscad.desktop
> share/icons/hicolor/128x128/apps/openscad.png
> @@ -13,6 +14,8 @@ share/openscad/
> share/openscad/color-schemes/
> share/openscad/color-schemes/editor/
> share/openscad/color-schemes/editor/dark-background.json
> +share/openscad/color-schemes/editor/high-contrast-dark.json
> +share/openscad/color-schemes/editor/high-contrast-light.json
> share/openscad/color-schemes/editor/light-background.json
> share/openscad/color-schemes/editor/monokai.json
> share/openscad/color-schemes/editor/solarized-dark.json
> @@ -20,13 +23,17 @@ share/openscad/color-schemes/editor/sola
> share/openscad/color-schemes/editor/tomorrow-night.json
> share/openscad/color-schemes/editor/tomorrow.json
> share/openscad/color-schemes/editor/visualstudio.json
> +share/openscad/color-schemes/editor/xcode.json
> share/openscad/color-schemes/readme.txt
> share/openscad/color-schemes/render/
> share/openscad/color-schemes/render/beforedawn.json
> +share/openscad/color-schemes/render/clearsky.json
> +share/openscad/color-schemes/render/daylight-gem.json
> share/openscad/color-schemes/render/deepocean.json
> share/openscad/color-schemes/render/metallic.json
> share/openscad/color-schemes/render/monotone.json
> share/openscad/color-schemes/render/nature.json
> +share/openscad/color-schemes/render/nocturnal-gem.json
> share/openscad/color-schemes/render/solarized.json
> share/openscad/color-schemes/render/starnight.json
> share/openscad/color-schemes/render/sunset.json
> @@ -39,6 +46,7 @@ share/openscad/examples/Advanced/animati
> share/openscad/examples/Advanced/assert.scad
> share/openscad/examples/Advanced/children.scad
> share/openscad/examples/Advanced/children_indexed.scad
> +share/openscad/examples/Advanced/example-dir.json
> share/openscad/examples/Advanced/module_recursion.scad
> share/openscad/examples/Advanced/offset.scad
> share/openscad/examples/Advanced/surface_image.png
> @@ -47,16 +55,20 @@ share/openscad/examples/Basics/
> share/openscad/examples/Basics/CSG-modules.scad
> share/openscad/examples/Basics/CSG.scad
> share/openscad/examples/Basics/LetterBlock.scad
> +share/openscad/examples/Basics/example-dir.json
> +share/openscad/examples/Basics/hull.scad
> share/openscad/examples/Basics/linear_extrude.scad
> share/openscad/examples/Basics/logo.scad
> share/openscad/examples/Basics/logo_and_text.scad
> share/openscad/examples/Basics/projection.scad
> share/openscad/examples/Basics/projection.stl
> +share/openscad/examples/Basics/roof.scad
> share/openscad/examples/Basics/rotate_extrude.scad
> share/openscad/examples/Basics/text_on_cube.scad
> share/openscad/examples/COPYING-CC0.txt
> share/openscad/examples/Functions/
> share/openscad/examples/Functions/echo.scad
> +share/openscad/examples/Functions/example-dir.json
> share/openscad/examples/Functions/functions.scad
> share/openscad/examples/Functions/list_comprehensions.scad
> share/openscad/examples/Functions/polygon_areas.scad
> @@ -96,12 +108,33 @@ share/openscad/examples/Old/example024.s
> share/openscad/examples/Parametric/
> share/openscad/examples/Parametric/candleStand.json
> share/openscad/examples/Parametric/candleStand.scad
> +share/openscad/examples/Parametric/example-dir.json
> share/openscad/examples/Parametric/sign.json
> share/openscad/examples/Parametric/sign.scad
> -share/openscad/examples/examples.json
> +share/openscad/fonts/
> +share/openscad/fonts/05-osx-fonts.conf
> +share/openscad/fonts/10-liberation.conf
> +share/openscad/fonts/Liberation-2.00.1/
> +share/openscad/fonts/Liberation-2.00.1/AUTHORS
> +share/openscad/fonts/Liberation-2.00.1/ChangeLog
> +share/openscad/fonts/Liberation-2.00.1/LICENSE
> +share/openscad/fonts/Liberation-2.00.1/README
> +share/openscad/fonts/Liberation-2.00.1/TODO
> +share/openscad/fonts/Liberation-2.00.1/ttf/
> +share/openscad/fonts/Liberation-2.00.1/ttf/LiberationMono-Bold.ttf
> +share/openscad/fonts/Liberation-2.00.1/ttf/LiberationMono-BoldItalic.ttf
> +share/openscad/fonts/Liberation-2.00.1/ttf/LiberationMono-Italic.ttf
> +share/openscad/fonts/Liberation-2.00.1/ttf/LiberationMono-Regular.ttf
> +share/openscad/fonts/Liberation-2.00.1/ttf/LiberationSans-Bold.ttf
> +share/openscad/fonts/Liberation-2.00.1/ttf/LiberationSans-BoldItalic.ttf
> +share/openscad/fonts/Liberation-2.00.1/ttf/LiberationSans-Italic.ttf
> +share/openscad/fonts/Liberation-2.00.1/ttf/LiberationSans-Regular.ttf
> +share/openscad/fonts/Liberation-2.00.1/ttf/LiberationSerif-Bold.ttf
> +share/openscad/fonts/Liberation-2.00.1/ttf/LiberationSerif-BoldItalic.ttf
> +share/openscad/fonts/Liberation-2.00.1/ttf/LiberationSerif-Italic.ttf
> +share/openscad/fonts/Liberation-2.00.1/ttf/LiberationSerif-Regular.ttf
> share/openscad/libraries/
> share/openscad/libraries/MCAD/
> -share/openscad/libraries/MCAD/.gitignore
> share/openscad/libraries/MCAD/2Dshapes.scad
> share/openscad/libraries/MCAD/3d_triangle.scad
> share/openscad/libraries/MCAD/README.markdown
> @@ -118,6 +151,7 @@ share/openscad/libraries/MCAD/${MODPY_PY
> share/openscad/libraries/MCAD/${MODPY_PYCACHE}test_docs.${MODPY_PYC_MAGIC_TAG}pyc
> share/openscad/libraries/MCAD/${MODPY_PYCACHE}test_mcad.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION}
> share/openscad/libraries/MCAD/${MODPY_PYCACHE}test_mcad.${MODPY_PYC_MAGIC_TAG}pyc
> +share/openscad/libraries/MCAD/array.scad
> share/openscad/libraries/MCAD/bearing.scad
> share/openscad/libraries/MCAD/bitmap/
> share/openscad/libraries/MCAD/bitmap/README
> @@ -126,6 +160,7 @@ share/openscad/libraries/MCAD/bitmap/bit
> share/openscad/libraries/MCAD/bitmap/height_map.scad
> share/openscad/libraries/MCAD/bitmap/letter_necklace.scad
> share/openscad/libraries/MCAD/bitmap/name_tag.scad
> +share/openscad/libraries/MCAD/bitmap/test_name_tag.scad
> share/openscad/libraries/MCAD/boxes.scad
> share/openscad/libraries/MCAD/constants.scad
> share/openscad/libraries/MCAD/curves.scad
> @@ -138,6 +173,7 @@ share/openscad/libraries/MCAD/layouts.sc
> share/openscad/libraries/MCAD/lego_compatibility.scad
> share/openscad/libraries/MCAD/lgpl-2.1.txt
> share/openscad/libraries/MCAD/libtriangles.scad
> +share/openscad/libraries/MCAD/linear_bearing.scad
> share/openscad/libraries/MCAD/materials.scad
> share/openscad/libraries/MCAD/math.scad
> share/openscad/libraries/MCAD/metric_fastners.scad
> @@ -147,6 +183,7 @@ share/openscad/libraries/MCAD/nuts_and_b
> share/openscad/libraries/MCAD/openscad_testing.py
> share/openscad/libraries/MCAD/openscad_utils.py
> share/openscad/libraries/MCAD/polyholes.scad
> +share/openscad/libraries/MCAD/profiles.scad
> share/openscad/libraries/MCAD/regular_shapes.scad
> share/openscad/libraries/MCAD/screw.scad
> share/openscad/libraries/MCAD/servos.scad
> @@ -177,28 +214,47 @@ share/openscad/locale/fr/LC_MESSAGES/ope
> share/openscad/locale/hy/
> share/openscad/locale/hy/LC_MESSAGES/
> share/openscad/locale/hy/LC_MESSAGES/openscad.mo
> +share/openscad/locale/it/
> +share/openscad/locale/it/LC_MESSAGES/
> +share/openscad/locale/it/LC_MESSAGES/openscad.mo
> +share/openscad/locale/ka/
> +share/openscad/locale/ka/LC_MESSAGES/
> +share/openscad/locale/ka/LC_MESSAGES/openscad.mo
> share/openscad/locale/pl/
> share/openscad/locale/pl/LC_MESSAGES/
> share/openscad/locale/pl/LC_MESSAGES/openscad.mo
> +share/openscad/locale/pt_BR/
> +share/openscad/locale/pt_BR/LC_MESSAGES/
> +share/openscad/locale/pt_BR/LC_MESSAGES/openscad.mo
> share/openscad/locale/ru/
> share/openscad/locale/ru/LC_MESSAGES/
> share/openscad/locale/ru/LC_MESSAGES/openscad.mo
> +share/openscad/locale/tr/
> +share/openscad/locale/tr/LC_MESSAGES/
> +share/openscad/locale/tr/LC_MESSAGES/openscad.mo
> share/openscad/locale/uk/
> share/openscad/locale/uk/LC_MESSAGES/
> share/openscad/locale/uk/LC_MESSAGES/openscad.mo
> -@tag update-desktop-database
> -@tag update-mime-database
> share/openscad/locale/zh_CN/
> share/openscad/locale/zh_CN/LC_MESSAGES/
> share/openscad/locale/zh_CN/LC_MESSAGES/openscad.mo
> share/openscad/locale/zh_TW/
> share/openscad/locale/zh_TW/LC_MESSAGES/
> share/openscad/locale/zh_TW/LC_MESSAGES/openscad.mo
> +share/openscad/shaders/
> +share/openscad/shaders/MouseSelector.frag
> +share/openscad/shaders/MouseSelector.vert
> +share/openscad/shaders/OpenCSG.vert
> +share/openscad/shaders/ViewEdges.frag
> +share/openscad/shaders/ViewEdges.vert
> share/openscad/templates/
> +share/openscad/templates/CC0.json
> share/openscad/templates/difference.json
> share/openscad/templates/for.json
> share/openscad/templates/function.json
> share/openscad/templates/module.json
> share/openscad/templates/rotate.json
> share/openscad/templates/translate.json
> +@tag update-mime-database
> +@tag update-desktop-database
> @tag gtk-update-icon-cache %D/share/icons/hicolor
--
andrew
Unix is very simple,
but it takes a genius to understand the simplicity.
-- Dennis Ritchie
[UPDATE] cad/openscad to 2025.10.14