git: 85f92d0a19f1 - main - math/nlopt: Fix build with Octave installed

From: Rainer Hurling <rhurlin_at_FreeBSD.org>
Date: Tue, 02 Sep 2025 07:36:38 UTC
The branch main has been updated by rhurlin:

URL: https://cgit.FreeBSD.org/ports/commit/?id=85f92d0a19f1eab321a6eabdd65b300cd16e61d3

commit 85f92d0a19f1eab321a6eabdd65b300cd16e61d3
Author:     Rainer Hurling <rhurlin@FreeBSD.org>
AuthorDate: 2025-09-02 07:06:20 +0000
Commit:     Rainer Hurling <rhurlin@FreeBSD.org>
CommitDate: 2025-09-02 07:16:17 +0000

    math/nlopt: Fix build with Octave installed
    
    cmake requires at least C++17 to build correctly if math/octave is
    already installed.
    
    math/octave is now a fixed dependency for nlopt, as this is the
    only way to guarantee that Octave packages such as
    math/octave-forge-mboct-fem-pkg will find a sufficiently
    complete nlopt.
    
    PR:             289110
    Reported by:    stephen@
    MFH:            2025Q3
---
 math/nlopt/Makefile                      |  8 ++++--
 math/nlopt/files/patch-CMakeLists.txt    | 11 ++++++++
 math/nlopt/files/patch-CMakePresets.json | 11 ++++++++
 math/nlopt/pkg-plist.full                | 48 +++++++++++++++++++++++++++++++-
 4 files changed, 75 insertions(+), 3 deletions(-)

diff --git a/math/nlopt/Makefile b/math/nlopt/Makefile
index 283559daa8db..dd4dc557a783 100644
--- a/math/nlopt/Makefile
+++ b/math/nlopt/Makefile
@@ -1,6 +1,7 @@
 PORTNAME=	nlopt
 DISTVERSIONPREFIX=	v
 DISTVERSION=	2.10.0
+PORTREVISION=	1
 CATEGORIES=	math
 
 MAINTAINER=	rhurlin@FreeBSD.org
@@ -20,6 +21,7 @@ FLAVOR?=	${FLAVORS:[1]}
 
 full_BUILD_DEPENDS=		${PYNUMPY} \
 				swig:devel/swig
+full_LIB_DEPENDS=		liboctave.so:math/octave
 full_RUN_DEPENDS=		${PYNUMPY}
 full_CONFLICTS_INSTALL=		${PORTNAME}-minimal
 minimal_PKGNAMESUFFIX=		-minimal
@@ -34,16 +36,18 @@ USE_LDCONFIG=	yes
 CMAKE_TESTING_ON=	NLOPT_TESTS
 
 .if ${FLAVOR} == full
-USES+=		guile:3.0,alias localbase pkgconfig python
+USES+=		guile:3.0,alias localbase octave:env pkgconfig python
 # Because guile-config-3.0 crashes, nlopt avoids this by using
 # files/patch-cmake_FindGuile.cmake and setting GUILE_EXECUTABLE
 # and GUILE_CONFIG_EXECUTABLE
 MAKE_ENV+=	GUILE_EXECUTABLE=${PREFIX}/bin/guile-3.0 \
 		GUILE_CONFIG_EXECUTABLE=${PREFIX}/bin/guile-config-3.0
 CMAKE_OFF=	NLOPT_JAVA
+GNU_HOST=	${ARCH}-portbld-freebsd${OSREL}
 PLIST=		${PKGDIR}/pkg-plist.${FLAVOR}
+PLIST_SUB=	GNU_HOST=${GNU_HOST} OCTAVE_VERSION=${OCTAVE_VERSION}
 .elif ${FLAVOR} == minimal
-CMAKE_OFF=	NLOPT_GUILE NLOPT_JAVA NLOPT_PYTHON NLOPT_SWIG
+CMAKE_OFF=	NLOPT_GUILE NLOPT_JAVA NLOPT_OCTAVE NLOPT_PYTHON NLOPT_SWIG
 .endif
 
 .include <bsd.port.mk>
diff --git a/math/nlopt/files/patch-CMakeLists.txt b/math/nlopt/files/patch-CMakeLists.txt
new file mode 100644
index 000000000000..4cc24139004e
--- /dev/null
+++ b/math/nlopt/files/patch-CMakeLists.txt
@@ -0,0 +1,11 @@
+--- CMakeLists.txt.orig	2025-02-04 18:29:30 UTC
++++ CMakeLists.txt
+@@ -147,7 +147,7 @@ if (NLOPT_CXX OR NLOPT_PYTHON OR NLOPT_GUILE OR NLOPT_
+ if (NLOPT_CXX OR NLOPT_PYTHON OR NLOPT_GUILE OR NLOPT_OCTAVE OR NLOPT_JAVA)
+   check_cxx_symbol_exists (__cplusplus ciso646 SYSTEM_HAS_CXX)
+   if (SYSTEM_HAS_CXX)
+-    set (CMAKE_CXX_STANDARD 11) # set the standard to C++11 but do not require it
++    set (CMAKE_CXX_STANDARD 17) # set the standard to C++17 but do not require it
+ 
+     if (NLOPT_CXX)
+       set (CMAKE_CXX_STANDARD_REQUIRED ON) # if we build C++ API, we do need C++11
diff --git a/math/nlopt/files/patch-CMakePresets.json b/math/nlopt/files/patch-CMakePresets.json
new file mode 100644
index 000000000000..e557968bc963
--- /dev/null
+++ b/math/nlopt/files/patch-CMakePresets.json
@@ -0,0 +1,11 @@
+--- CMakePresets.json.orig	2025-02-04 18:29:30 UTC
++++ CMakePresets.json
+@@ -8,7 +8,7 @@
+       "cacheVariables": {
+         "CMAKE_BUILD_TYPE": "RelWithDebInfo",
+         "CMAKE_C_FLAGS": "-Wall -Wextra -Wpedantic -Wshadow",
+-        "CMAKE_CXX_FLAGS": "-Wall -Wextra -Wpedantic -Wshadow -D_GLIBCXX_ASSERTIONS -fno-inline",
++        "CMAKE_CXX_FLAGS": "-Wall -Wextra -Wpedantic -Wshadow -D_GLIBCXX_ASSERTIONS -fno-inline -std=c++17",
+         "CMAKE_INSTALL_PREFIX": "${sourceDir}/build/install",
+         "SWIG_COMPILE_FLAGS": "-O1 -Wno-unused-parameter -Wno-shadow"
+       }
diff --git a/math/nlopt/pkg-plist.full b/math/nlopt/pkg-plist.full
index 3a3a6db63e96..971a564dd944 100644
--- a/math/nlopt/pkg-plist.full
+++ b/math/nlopt/pkg-plist.full
@@ -1,4 +1,3 @@
-%%GUILE_SITE%%/nlopt.scm
 include/nlopt.h
 include/nlopt.hpp
 lib/cmake/nlopt/NLoptConfig.cmake
@@ -9,10 +8,57 @@ lib/guile/%%GUILE_VER%%/extensions/nlopt_guile.so
 lib/libnlopt.so
 lib/libnlopt.so.1
 lib/libnlopt.so.1.0.0
+lib/octave/%%OCTAVE_VERSION%%/site/oct/%%GNU_HOST%%/nlopt_optimize.oct
 %%PYTHON_SITELIBDIR%%/_nlopt.so
 %%PYTHON_SITELIBDIR%%/nlopt-2.10.0.dist-info/METADATA
 %%PYTHON_SITELIBDIR%%/nlopt.py
 libdata/pkgconfig/nlopt.pc
+%%GUILE_SITE%%/nlopt.scm
 share/man/man3/nlopt.3.gz
 share/man/man3/nlopt_minimize.3.gz
 share/man/man3/nlopt_minimize_constrained.3.gz
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_AUGLAG.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_AUGLAG_EQ.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_GD_MLSL.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_GD_MLSL_LDS.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_GD_STOGO.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_GD_STOGO_RAND.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_GN_AGS.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_GN_CRS2_LM.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_GN_DIRECT.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_GN_DIRECT_L.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_GN_DIRECT_L_NOSCAL.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_GN_DIRECT_L_RAND.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_GN_DIRECT_L_RAND_NOSCAL.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_GN_DIRECT_NOSCAL.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_GN_ESCH.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_GN_ISRES.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_GN_MLSL.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_GN_MLSL_LDS.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_GN_ORIG_DIRECT.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_GN_ORIG_DIRECT_L.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_G_MLSL.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_G_MLSL_LDS.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_LD_AUGLAG.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_LD_AUGLAG_EQ.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_LD_CCSAQ.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_LD_LBFGS.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_LD_MMA.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_LD_SLSQP.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_LD_TNEWTON.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_LD_TNEWTON_PRECOND.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_LD_TNEWTON_PRECOND_RESTART.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_LD_TNEWTON_RESTART.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_LD_VAR1.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_LD_VAR2.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_LN_AUGLAG.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_LN_AUGLAG_EQ.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_LN_BOBYQA.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_LN_COBYLA.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_LN_NELDERMEAD.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_LN_NEWUOA.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_LN_NEWUOA_BOUND.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_LN_PRAXIS.m
+share/octave/%%OCTAVE_VERSION%%/site/m/NLOPT_LN_SBPLX.m
+share/octave/%%OCTAVE_VERSION%%/site/m/nlopt_minimize.m
+share/octave/%%OCTAVE_VERSION%%/site/m/nlopt_minimize_constrained.m