git: 2a0d392623cd - 2025Q4 - databases/nanodbc: Fix compilation with clang19; Improve pkg-descr
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 16 Oct 2025 18:26:33 UTC
The branch 2025Q4 has been updated by yuri:
URL: https://cgit.FreeBSD.org/ports/commit/?id=2a0d392623cdc710f9060a98df023b186ecd4624
commit 2a0d392623cdc710f9060a98df023b186ecd4624
Author: Yuri Victorovich <yuri@FreeBSD.org>
AuthorDate: 2025-10-11 04:10:12 +0000
Commit: Yuri Victorovich <yuri@FreeBSD.org>
CommitDate: 2025-10-16 18:26:27 +0000
databases/nanodbc: Fix compilation with clang19; Improve pkg-descr
(cherry picked from commit e432d0424f2fc1a997fc8e1d10800bbecdc6d2c9)
---
databases/nanodbc/Makefile | 5 +--
databases/nanodbc/files/patch-nanodbc_nanodbc.cpp | 47 +++++++++++++++++++++++
databases/nanodbc/pkg-descr | 12 +++++-
3 files changed, 59 insertions(+), 5 deletions(-)
diff --git a/databases/nanodbc/Makefile b/databases/nanodbc/Makefile
index 1cc6e298227b..5cb0f7394810 100644
--- a/databases/nanodbc/Makefile
+++ b/databases/nanodbc/Makefile
@@ -11,16 +11,13 @@ WWW= https://nanodbc.github.io/nanodbc/ \
LICENSE= MIT
LICENSE_FILE= ${WRKSRC}/LICENSE
-BROKEN_FreeBSD_13= compilation fails with clang-19, see https://github.com/nanodbc/nanodbc/issues/421
-BROKEN_FreeBSD_15= compilation fails with clang-19, see https://github.com/nanodbc/nanodbc/issues/421
-
LIB_DEPENDS= libodbc.so:databases/unixODBC
USES= cmake:testing compiler:c++14-lang localbase:ldflags # pkgconfig python:build
-USE_LDCONFIG= yes
USE_CXXSTD= c++14 # fix build broken by deprecated feature std::char_traits, see https://github.com/nanodbc/nanodbc/issues/387
USE_GITHUB= yes
+USE_LDCONFIG= yes
CMAKE_ON= BUILD_SHARED_LIBS \
NANODBC_DISABLE_TESTS NANODBC_DISABLE_EXAMPLES
diff --git a/databases/nanodbc/files/patch-nanodbc_nanodbc.cpp b/databases/nanodbc/files/patch-nanodbc_nanodbc.cpp
new file mode 100644
index 000000000000..f0489859293b
--- /dev/null
+++ b/databases/nanodbc/files/patch-nanodbc_nanodbc.cpp
@@ -0,0 +1,47 @@
+- Fix compilation with unsigned char SQLCHAR type
+
+--- nanodbc/nanodbc.cpp.orig 2023-01-13 22:42:27 UTC
++++ nanodbc/nanodbc.cpp
+@@ -257,10 +257,20 @@ constexpr std::size_t size(const T (&array)[N]) noexc
+ }
+ #endif
+
++// Helper function to compute string length for SQLCHAR types
++template <typename T>
++inline std::size_t sqlchar_length(const T* str) noexcept
++{
++ const T* s = str;
++ while (*s) ++s;
++ return s - str;
++}
++
+ template <std::size_t N>
+ inline std::size_t size(NANODBC_SQLCHAR const (&array)[N]) noexcept
+ {
+- auto const n = std::char_traits<NANODBC_SQLCHAR>::length(array);
++ // Use custom length function instead of char_traits which doesn't support unsigned char
++ auto const n = sqlchar_length(array);
+ NANODBC_ASSERT(n < N);
+ return n < N ? n : N - 1;
+ }
+@@ -3563,9 +3573,9 @@ std::list<datasource> list_datasources()
+ "incompatible SQLCHAR and string::value_type");
+
+ datasource dsn;
+- dsn.name = string(&name[0], &name[std::char_traits<NANODBC_SQLCHAR>::length(name)]);
++ dsn.name = string(&name[0], &name[sqlchar_length(name)]);
+ dsn.driver =
+- string(&driver[0], &driver[std::char_traits<NANODBC_SQLCHAR>::length(driver)]);
++ string(&driver[0], &driver[sqlchar_length(driver)]);
+
+ dsns.push_back(std::move(dsn));
+ direction = SQL_FETCH_NEXT;
+@@ -3616,7 +3626,7 @@ std::list<driver> list_drivers()
+ "incompatible SQLCHAR and string::value_type");
+
+ driver drv;
+- drv.name = string(&descr[0], &descr[std::char_traits<NANODBC_SQLCHAR>::length(descr)]);
++ drv.name = string(&descr[0], &descr[sqlchar_length(descr)]);
+
+ drvs.push_back(std::move(drv));
+ direction = SQL_FETCH_NEXT;
diff --git a/databases/nanodbc/pkg-descr b/databases/nanodbc/pkg-descr
index 263198cfcd6f..0ca544238dab 100644
--- a/databases/nanodbc/pkg-descr
+++ b/databases/nanodbc/pkg-descr
@@ -1 +1,11 @@
-nanodbc is a small library that makes ODBC API programming easy and fun again.
+nanodbc is a small C++ library that simplifies ODBC API programming.
+
+nanodbc is a small C++ wrapper for the native C ODBC API. It aims to make
+common database tasks easy with concise code, incorporating modern C++
+standards.
+
+Features:
+* Portable and robust
+* Transaction support
+* Bound parameters
+* Clean separation of interface and implementation using the pimpl idiom