Kirill, ports,
While searching for where getexecpath can/should be used, I found this
here in libggml. This diff should replicate what is done on other
platforms by their idiosyncratic methods (_NSGetExecutablePath,
procfs). It builds, but I don't really know how to use this library.
Could maybe use a test run.
Index: Makefile
===================================================================
RCS file: /cvs/ports/devel/libggml/Makefile,v
diff -u -p -r1.27 Makefile
--- Makefile 15 Sep 2026 19:31:59 -0000 1.27
+++ Makefile 18 Sep 2026 20:21:58 -0000
@@ -4,6 +4,7 @@ GH_ACCOUNT= ggml-org
GH_PROJECT= ggml
GH_TAGNAME = v0.24.0
PKGNAME= lib${DISTNAME}
+REVISION = 0
SHARED_LIBS += ggml 5.1
SHARED_LIBS += ggml-base 5.1
Index: patches/patch-src_ggml-backend-reg_cpp
===================================================================
RCS file: /cvs/ports/devel/libggml/patches/patch-src_ggml-backend-reg_cpp,v
diff -u -p -r1.8 patch-src_ggml-backend-reg_cpp
--- patches/patch-src_ggml-backend-reg_cpp 4 Sep 2026 22:27:19 -0000
1.8
+++ patches/patch-src_ggml-backend-reg_cpp 18 Sep 2026 20:21:58 -0000
@@ -1,13 +1,23 @@
+getexecpath
+
Index: src/ggml-backend-reg.cpp
--- src/ggml-backend-reg.cpp.orig
+++ src/ggml-backend-reg.cpp
-@@ -489,7 +489,9 @@ static ggml_backend_reg_t ggml_backend_load_best(const
- search_paths.push_back(fs::u8path(GGML_BACKEND_DIR));
+@@ -456,6 +456,17 @@ static fs::path get_executable_path() {
+ base_path = base_path.substr(0, last_slash);
+ }
+ return base_path + L"\\";
++#elif defined(__OpenBSD__)
++ std::vector<char> path(PATH_MAX);
++ if (getexecpath(path.data(), path.size()) != 0)
++ return {};
++ std::string base_path(path.data(), path.size());
++ // remove executable name
++ auto last_slash = base_path.find_last_of('/');
++ if (last_slash != std::string::npos) {
++ base_path = base_path.substr(0, last_slash);
++ }
++ return base_path + "/";
+ #else
+ return {};
#endif
- // default search paths: executable directory, current directory
-+#ifndef __OpenBSD__
- search_paths.push_back(get_executable_path());
-+#endif
- std::error_code cwd_ec;
- const fs::path cwd = fs::current_path(cwd_ec);
- if (cwd_ec) {