Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package sord for openSUSE:Factory checked in 
at 2025-12-11 18:34:43
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/sord (Old)
 and      /work/SRC/openSUSE:Factory/.sord.new.1939 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "sord"

Thu Dec 11 18:34:43 2025 rev:22 rq:1321930 version:0.16.20

Changes:
--------
--- /work/SRC/openSUSE:Factory/sord/sord.changes        2025-03-11 
20:42:20.914754644 +0100
+++ /work/SRC/openSUSE:Factory/.sord.new.1939/sord.changes      2025-12-11 
18:35:04.241668020 +0100
@@ -1,0 +2,9 @@
+Wed Dec 10 08:00:56 UTC 2025 - Konstantin Voinov <[email protected]>
+
+- update to 0.16.20
+  * Add header warnings test
+  * Add missing const qualifiers to API
+  * Avoid over-use of yielding meson options
+  * Update man pages
+
+-------------------------------------------------------------------

Old:
----
  sord-0.16.18.tar.xz
  sord-0.16.18.tar.xz.sig

New:
----
  sord-0.16.20.tar.xz
  sord-0.16.20.tar.xz.sig

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ sord.spec ++++++
--- /var/tmp/diff_new_pack.F1tFTi/_old  2025-12-11 18:35:05.445718503 +0100
+++ /var/tmp/diff_new_pack.F1tFTi/_new  2025-12-11 18:35:05.449718671 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package sord
 #
-# Copyright (c) 2025 SUSE LLC
+# Copyright (c) 2025 SUSE LLC and contributors
 # Copyright (c) 2025 Andreas Stieger <[email protected]>
 #
 # All modifications and additions to the file contributed by third parties
@@ -19,7 +19,7 @@
 
 %define sover 0
 Name:           sord
-Version:        0.16.18
+Version:        0.16.20
 Release:        0
 Summary:        Utilities to work with RDF data
 License:        ISC

++++++ sord-0.16.18.tar.xz -> sord-0.16.20.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sord-0.16.18/.clang-tidy new/sord-0.16.20/.clang-tidy
--- old/sord-0.16.18/.clang-tidy        2025-01-19 14:46:45.000000000 +0100
+++ new/sord-0.16.20/.clang-tidy        2025-11-12 20:07:37.000000000 +0100
@@ -1,74 +1,16 @@
-# Copyright 2020-2024 David Robillard <[email protected]>
+# Copyright 2020-2025 David Robillard <[email protected]>
 # SPDX-License-Identifier: 0BSD OR ISC
 
 Checks: >
   *,
-  -*-else-after-return,
-  -*-macro-to-enum,
-  -*-magic-numbers,
-  -*-non-private-member-variables-in-classes,
-  -*-static-assert,
-  -*-uppercase-literal-suffix,
-  -*-use-auto,
-  -*-use-equals-default,
-  -*-use-equals-delete,
-  -*-vararg,
-  -abseil-string-find-str-contains,
   -altera-*,
-  -android-cloexec-fopen,
-  -bugprone-assignment-in-if-condition,
-  -bugprone-branch-clone,
-  -bugprone-copy-constructor-init,
-  -bugprone-easily-swappable-parameters,
-  -bugprone-multi-level-implicit-pointer-conversion,
-  -bugprone-narrowing-conversions,
-  -bugprone-reserved-identifier,
-  -bugprone-suspicious-include,
-  -bugprone-switch-missing-default-case,
-  -cert-dcl37-c,
-  -cert-dcl51-cpp,
-  -cert-err33-c,
-  -cert-err34-c,
-  -clang-analyzer-core.uninitialized.ArraySubscript,
-  -clang-analyzer-optin.core.EnumCastOutOfRange,
-  -clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling,
-  -clang-analyzer-valist.Uninitialized,
-  -cppcoreguidelines-avoid-non-const-global-variables,
-  -cppcoreguidelines-macro-usage,
-  -cppcoreguidelines-narrowing-conversions,
-  -cppcoreguidelines-owning-memory,
-  -cppcoreguidelines-pro-bounds-array-to-pointer-decay,
-  -cppcoreguidelines-pro-type-reinterpret-cast,
-  -cppcoreguidelines-special-member-functions,
-  -fuchsia-default-arguments*,
-  -fuchsia-multiple-inheritance,
-  -fuchsia-overloaded-operator,
-  -google-explicit-constructor,
-  -google-readability-todo,
-  -google-runtime-references,
-  -hicpp-explicit-conversions,
-  -hicpp-multiway-paths-covered,
-  -hicpp-no-array-decay,
-  -hicpp-noexcept-move,
-  -hicpp-signed-bitwise,
-  -hicpp-special-member-functions,
   -llvm-header-guard,
   -llvmlibc-*,
-  -misc-include-cleaner,
-  -misc-no-recursion,
-  -misc-unused-parameters,
-  -modernize-return-braced-init-list,
-  -modernize-use-default-member-init,
-  -modernize-use-trailing-return-type,
-  -performance-faster-string-find,
-  -performance-noexcept-move-constructor,
-  -performance-unnecessary-value-param,
-  -readability-avoid-nested-conditional-operator,
-  -readability-const-return-type,
-  -readability-function-cognitive-complexity,
-  -readability-identifier-length,
-  -readability-implicit-bool-conversion,
-  -readability-redundant-member-init,
+CheckOptions:
+  - key:   hicpp-uppercase-literal-suffix.NewSuffixes
+    value: 'L;U;UL;ULL'
+  - key:   readability-uppercase-literal-suffix.NewSuffixes
+    value: 'L;U;UL;ULL'
 WarningsAsErrors: '*'
 HeaderFilterRegex: '.*'
 FormatStyle: file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sord-0.16.18/.git-blame-ignore-revs 
new/sord-0.16.20/.git-blame-ignore-revs
--- old/sord-0.16.18/.git-blame-ignore-revs     1970-01-01 01:00:00.000000000 
+0100
+++ new/sord-0.16.20/.git-blame-ignore-revs     2025-11-12 20:07:37.000000000 
+0100
@@ -0,0 +1,5 @@
+# Copyright 2025 David Robillard <[email protected]>
+# SPDX-License-Identifier: 0BSD OR ISC
+
+# Format all code with clang-format
+87aca493cd6ad0ffc49a896c9f8342d52ad6aa96
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sord-0.16.18/.gitignore new/sord-0.16.20/.gitignore
--- old/sord-0.16.18/.gitignore 2025-01-19 14:46:45.000000000 +0100
+++ new/sord-0.16.20/.gitignore 2025-11-12 20:07:37.000000000 +0100
@@ -1,6 +1,10 @@
-# Copyright 2019-2021 David Robillard <[email protected]>
+# Copyright 2019-2025 David Robillard <[email protected]>
 # SPDX-License-Identifier: 0BSD OR ISC
 
-build/**
-__pycache__
-.meson-subproject-wrap-hash.txt
+/.meson-subproject-wrap-hash.txt
+/build/
+/subprojects/packagecache/
+/subprojects/sphinxygen-1.0.10/
+/subprojects/sphinxygen/
+
+__pycache__/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sord-0.16.18/.reuse/dep5 new/sord-0.16.20/.reuse/dep5
--- old/sord-0.16.18/.reuse/dep5        2025-01-19 14:46:45.000000000 +0100
+++ new/sord-0.16.20/.reuse/dep5        2025-11-12 20:07:37.000000000 +0100
@@ -9,7 +9,7 @@
 License: BSD-3-Clause
 
 Files: AUTHORS NEWS
-Copyright: 2011-2022 David Robillard <[email protected]>
+Copyright: 2011-2025 David Robillard <[email protected]>
 Comment: Contributed to the Commons as a representation of simple facts
 License: 0BSD OR ISC
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sord-0.16.18/COPYING new/sord-0.16.20/COPYING
--- old/sord-0.16.18/COPYING    2025-01-19 14:46:45.000000000 +0100
+++ new/sord-0.16.20/COPYING    2025-11-12 20:07:37.000000000 +0100
@@ -1,4 +1,4 @@
-Copyright 2011-2022 David Robillard <[email protected]>
+Copyright 2011-2025 David Robillard <[email protected]>
 
 Permission to use, copy, modify, and/or distribute this software for any
 purpose with or without fee is hereby granted, provided that the above
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sord-0.16.18/LICENSES/ISC.txt 
new/sord-0.16.20/LICENSES/ISC.txt
--- old/sord-0.16.18/LICENSES/ISC.txt   2025-12-11 18:35:05.657727392 +0100
+++ new/sord-0.16.20/LICENSES/ISC.txt   2025-11-12 20:07:37.000000000 +0100
@@ -1 +1,13 @@
-symbolic link to ../COPYING
+Copyright 2011-2025 David Robillard <[email protected]>
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sord-0.16.18/NEWS new/sord-0.16.20/NEWS
--- old/sord-0.16.18/NEWS       2025-01-19 14:46:45.000000000 +0100
+++ new/sord-0.16.20/NEWS       2025-11-12 20:07:37.000000000 +0100
@@ -1,3 +1,12 @@
+sord (0.16.20) stable; urgency=medium
+
+  * Add header warnings test
+  * Add missing const qualifiers to API
+  * Avoid over-use of yielding meson options
+  * Update man pages
+
+ -- David Robillard <[email protected]>  Tue, 21 Oct 2025 17:13:17 +0000
+
 sord (0.16.18) stable; urgency=medium
 
   * Add option to install tool man pages
@@ -82,7 +91,7 @@
   * Return error from sord_inserter_write_statement() if a node can not be
     written (e.g. undefined prefix)
   * Safely return NULL from sord_iter_get() for end iterators
-  * sord_validate: Do proper numeric comparison for propery bounds checking
+  * sord_validate: Do proper numeric comparison for property bounds checking
   * sord_validate: Tolerate xsd:decimal literals for double and float
     properties if literals match pattern
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sord-0.16.18/doc/sord_validate.1 
new/sord-0.16.20/doc/sord_validate.1
--- old/sord-0.16.18/doc/sord_validate.1        2025-01-19 14:46:45.000000000 
+0100
+++ new/sord-0.16.20/doc/sord_validate.1        2025-11-12 20:07:37.000000000 
+0100
@@ -1,8 +1,8 @@
-.\" # Copyright 2012-2022 David Robillard <[email protected]>
+.\" # Copyright 2012-2025 David Robillard <[email protected]>
 .\" # SPDX-License-Identifier: ISC
-.Dd Nov 29, 2022
+.Dd January 20, 2025
 .Dt SORD_VALIDATE 1
-.Os Sord 0.30.17
+.Os
 .Sh NAME
 .Nm sord_validate
 .Nd validate RDF data
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sord-0.16.18/doc/sordi.1 new/sord-0.16.20/doc/sordi.1
--- old/sord-0.16.18/doc/sordi.1        2025-01-19 14:46:45.000000000 +0100
+++ new/sord-0.16.20/doc/sordi.1        2025-11-12 20:07:37.000000000 +0100
@@ -1,8 +1,8 @@
-.\" # Copyright 2011-2022 David Robillard <[email protected]>
+.\" # Copyright 2011-2025 David Robillard <[email protected]>
 .\" # SPDX-License-Identifier: ISC
-.Dd Nov 29, 2022
+.Dd January 20, 2025
 .Dt SORDI 1
-.Os Sord 0.30.17
+.Os
 .Sh NAME
 .Nm sordi
 .Nd load and rewrite RDF data
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sord-0.16.18/include/sord/sord.h 
new/sord-0.16.20/include/sord/sord.h
--- old/sord-0.16.18/include/sord/sord.h        2025-01-19 14:46:45.000000000 
+0100
+++ new/sord-0.16.20/include/sord/sord.h        2025-11-12 20:07:37.000000000 
+0100
@@ -345,18 +345,18 @@
    @return an iterator to the first match, or NULL if no matches found.
 */
 SORD_API SordIter*
-sord_find(SordModel* model, const SordQuad pat);
+sord_find(const SordModel* model, const SordQuad pat);
 
 /**
    Search for statements by nodes.
    @return an iterator to the first match, or NULL if no matches found.
 */
 SORD_API SordIter*
-sord_search(SordModel*      model,
-            const SordNode* s,
-            const SordNode* p,
-            const SordNode* o,
-            const SordNode* g);
+sord_search(const SordModel* model,
+            const SordNode*  s,
+            const SordNode*  p,
+            const SordNode*  o,
+            const SordNode*  g);
 /**
    Search for a single node that matches a pattern.
    Exactly one of `s`, `p`, `o` must be NULL.
@@ -365,31 +365,31 @@
    @return the first matching node, or NULL if no matches are found.
 */
 SORD_API SordNode*
-sord_get(SordModel*      model,
-         const SordNode* s,
-         const SordNode* p,
-         const SordNode* o,
-         const SordNode* g);
+sord_get(const SordModel* model,
+         const SordNode*  s,
+         const SordNode*  p,
+         const SordNode*  o,
+         const SordNode*  g);
 
 /**
    Return true iff a statement exists.
 */
 SORD_API bool
-sord_ask(SordModel*      model,
-         const SordNode* s,
-         const SordNode* p,
-         const SordNode* o,
-         const SordNode* g);
+sord_ask(const SordModel* model,
+         const SordNode*  s,
+         const SordNode*  p,
+         const SordNode*  o,
+         const SordNode*  g);
 
 /**
    Return the number of matching statements.
 */
 SORD_API uint64_t
-sord_count(SordModel*      model,
-           const SordNode* s,
-           const SordNode* p,
-           const SordNode* o,
-           const SordNode* g);
+sord_count(const SordModel* model,
+           const SordNode*  s,
+           const SordNode*  p,
+           const SordNode*  o,
+           const SordNode*  g);
 
 /**
    Check if `model` contains a triple pattern.
@@ -397,7 +397,7 @@
    @return true if `model` contains a match for `pat`, otherwise false.
 */
 SORD_API bool
-sord_contains(SordModel* model, const SordQuad pat);
+sord_contains(const SordModel* model, const SordQuad pat);
 
 /**
    Add a quad to a model.
@@ -551,16 +551,16 @@
    Return a reader that will read into `model`.
 */
 SORD_API SerdReader*
-sord_new_reader(SordModel* model,
-                SerdEnv*   env,
-                SerdSyntax syntax,
-                SordNode*  graph);
+sord_new_reader(SordModel*      model,
+                SerdEnv*        env,
+                SerdSyntax      syntax,
+                const SordNode* graph);
 
 /**
    Write a model to a writer.
 */
 SORD_API bool
-sord_write(SordModel* model, SerdWriter* writer, SordNode* graph);
+sord_write(SordModel* model, SerdWriter* writer, const SordNode* graph);
 
 /**
    Write a range to a writer.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sord-0.16.18/meson.build new/sord-0.16.20/meson.build
--- old/sord-0.16.18/meson.build        2025-01-19 14:46:45.000000000 +0100
+++ new/sord-0.16.20/meson.build        2025-11-12 20:07:37.000000000 +0100
@@ -1,4 +1,4 @@
-# Copyright 2021-2024 David Robillard <[email protected]>
+# Copyright 2021-2025 David Robillard <[email protected]>
 # SPDX-License-Identifier: 0BSD OR ISC
 
 project(
@@ -8,10 +8,12 @@
     'b_ndebug=if-release',
     'buildtype=release',
     'c_std=c99',
+    'c_winlibs=',
+    'cpp_winlibs=',
   ],
   license: 'ISC',
   meson_version: '>= 0.56.0',
-  version: '0.16.18',
+  version: '0.16.20',
 )
 
 sord_src_root = meson.current_source_dir()
@@ -136,8 +138,8 @@
 
 m_dep = cc.find_library('m', required: false)
 
-zix_dep = dependency('zix-0', version: '>= 0.4.0')
-serd_dep = dependency('serd-0', version: '>= 0.30.10')
+zix_dep = dependency('zix-0', include_type: 'system', version: '>= 0.4.0')
+serd_dep = dependency('serd-0', include_type: 'system', version: '>= 0.30.10')
 
 ##########################
 # Platform Configuration #
@@ -182,6 +184,7 @@
   darwin_versions: [major_version + '.0.0', meson.project_version()],
   dependencies: [m_dep, zix_dep, serd_dep],
   gnu_symbol_visibility: 'hidden',
+  implicit_include_directories: false,
   include_directories: include_directories('include'),
   install: true,
   soversion: soversion,
@@ -196,7 +199,7 @@
   link_with: libsord,
 )
 
-# Generage pkg-config file for external dependants
+# Generate pkg-config file for external dependants
 pkg.generate(
   libsord,
   description: 'Lightweight C library for storing RDF in memory',
@@ -225,8 +228,9 @@
     'sordi',
     files('src/sordi.c'),
     c_args: c_suppressions,
-    install: true,
     dependencies: sord_dep,
+    implicit_include_directories: false,
+    install: true,
   )
 
   meson.override_find_program('sordi', sordi)
@@ -238,8 +242,9 @@
       'sord_validate',
       files('src/sord_validate.c'),
       c_args: c_suppressions,
-      install: true,
       dependencies: [sord_dep, pcre2_dep],
+      implicit_include_directories: false,
+      install: true,
     )
 
     meson.override_find_program('sord_validate', sord_validate)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sord-0.16.18/meson_options.txt 
new/sord-0.16.20/meson_options.txt
--- old/sord-0.16.18/meson_options.txt  2025-01-19 14:46:45.000000000 +0100
+++ new/sord-0.16.20/meson_options.txt  2025-11-12 20:07:37.000000000 +0100
@@ -1,20 +1,23 @@
-# Copyright 2021-2022 David Robillard <[email protected]>
+# Copyright 2021-2025 David Robillard <[email protected]>
 # SPDX-License-Identifier: 0BSD OR ISC
 
-option('docs', type: 'feature', yield: true,
+option('bindings_cpp', type: 'feature',
+       description: 'Build C++ bindings')
+
+option('docs', type: 'feature',
        description: 'Build documentation')
 
-option('lint', type: 'boolean', value: false, yield: true,
+option('lint', type: 'boolean', value: false,
        description: 'Run code quality checks')
 
-option('man', type: 'feature', value: 'enabled', yield: true,
+option('man', type: 'feature', value: 'enabled',
        description: 'Install man pages')
 
-option('tests', type: 'feature', yield: true,
+option('tests', type: 'feature',
        description: 'Build tests')
 
 option('title', type: 'string', value: 'Sord',
        description: 'Project title')
 
-option('tools', type: 'feature', yield: true,
+option('tools', type: 'feature',
        description: 'Build command line utilities')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sord-0.16.18/src/.clang-tidy 
new/sord-0.16.20/src/.clang-tidy
--- old/sord-0.16.18/src/.clang-tidy    1970-01-01 01:00:00.000000000 +0100
+++ new/sord-0.16.20/src/.clang-tidy    2025-11-12 20:07:37.000000000 +0100
@@ -0,0 +1,30 @@
+# Copyright 2020-2025 David Robillard <[email protected]>
+# SPDX-License-Identifier: 0BSD OR ISC
+
+Checks: >
+  -*-else-after-return,
+  -*-macro-to-enum,
+  -*-magic-numbers,
+  -android-cloexec-fopen,
+  -bugprone-assignment-in-if-condition,
+  -bugprone-easily-swappable-parameters,
+  -bugprone-multi-level-implicit-pointer-conversion,
+  -bugprone-switch-missing-default-case,
+  -cert-dcl37-c,
+  -cert-dcl51-cpp,
+  -cert-err33-c,
+  -cert-err34-c,
+  -clang-analyzer-optin.core.EnumCastOutOfRange,
+  -clang-analyzer-unix.Malloc,
+  -cppcoreguidelines-avoid-non-const-global-variables,
+  -google-readability-todo,
+  -hicpp-multiway-paths-covered,
+  -hicpp-signed-bitwise,
+  -misc-include-cleaner,
+  -misc-no-recursion,
+  -readability-avoid-nested-conditional-operator,
+  -readability-identifier-length,
+CheckOptions:
+  - key:   readability-function-cognitive-complexity.Threshold
+    value: '45'
+InheritParentConfig: true
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sord-0.16.18/src/sord.c new/sord-0.16.20/src/sord.c
--- old/sord-0.16.18/src/sord.c 2025-01-19 14:46:45.000000000 +0100
+++ new/sord-0.16.20/src/sord.c 2025-11-12 20:07:37.000000000 +0100
@@ -46,9 +46,8 @@
 #  define SORD_WRITE_LOG(...)
 #endif
 
-#define NUM_ORDERS 12
-#define STATEMENT_LEN 3
-#define TUP_LEN (STATEMENT_LEN + 1)
+#define NUM_ORDERS 12U
+#define TUP_LEN 4U
 #define DEFAULT_ORDER SPO
 #define DEFAULT_GRAPH_ORDER GSPO
 
@@ -58,7 +57,7 @@
   TUP_FMT_ELEM((t)[0]), TUP_FMT_ELEM((t)[1]), TUP_FMT_ELEM((t)[2]), \
     TUP_FMT_ELEM((t)[3])
 
-#define TUP_G 3
+#define TUP_G 3U
 
 /** Triple ordering */
 typedef enum {
@@ -96,7 +95,7 @@
    Quads of indices for each order, from most to least significant
    (array indexed by SordOrder)
 */
-static const int orderings[NUM_ORDERS][TUP_LEN] = {
+static const uint8_t orderings[NUM_ORDERS][TUP_LEN] = {
   {0, 1, 2, 3}, // SPO
   {0, 2, 1, 3}, // SOP
   {2, 1, 0, 3}, // OPS
@@ -147,7 +146,7 @@
   SordQuad         pat;         ///< Pattern (in ordering order)
   SordOrder        order;       ///< Store order (which index)
   SearchMode       mode;        ///< Iteration mode
-  int              n_prefix;    ///< Prefix for RANGE and FILTER_RANGE
+  uint8_t          n_prefix;    ///< Prefix for RANGE and FILTER_RANGE
   bool             end;         ///< True iff reached end
   bool             skip_graphs; ///< Iteration should ignore graphs
 };
@@ -185,13 +184,13 @@
 static bool
 sord_node_hash_equal(const SordNode* const a, const SordNode* const b)
 {
-  return (a == b) ||
-         ((a->node.type == b->node.type) &&
-          (a->node.type != SERD_LITERAL ||
-           (a->meta.lit.datatype == b->meta.lit.datatype &&
-            !strncmp(
-              a->meta.lit.lang, b->meta.lit.lang, sizeof(a->meta.lit.lang)))) 
&&
-          (serd_node_equals(&a->node, &b->node)));
+  return ((a == b) || ((a->node.type == b->node.type) &&
+                       (a->node.type != SERD_LITERAL ||
+                        (a->meta.lit.datatype == b->meta.lit.datatype &&
+                         !strncmp(a->meta.lit.lang,
+                                  b->meta.lit.lang,
+                                  sizeof(a->meta.lit.lang)))) &&
+                       (serd_node_equals(&a->node, &b->node))));
 }
 
 static SordNode*
@@ -343,8 +342,10 @@
 static inline bool
 sord_quad_match_inline(const SordQuad x, const SordQuad y)
 {
-  return sord_id_match(x[0], y[0]) && sord_id_match(x[1], y[1]) &&
-         sord_id_match(x[2], y[2]) && sord_id_match(x[3], y[3]);
+  return (sord_id_match(x[0], y[0]) && //
+          sord_id_match(x[1], y[1]) && //
+          sord_id_match(x[2], y[2]) && //
+          sord_id_match(x[3], y[3]));
 }
 
 bool
@@ -361,13 +362,13 @@
 static int
 sord_quad_compare(const void* x_ptr, const void* y_ptr, const void* user_data)
 {
-  const int* const             ordering = (const int*)user_data;
+  const uint8_t* const         ordering = (const uint8_t*)user_data;
   const SordNode* const* const x        = (const SordNode* const*)x_ptr;
   const SordNode* const* const y        = (const SordNode* const*)y_ptr;
 
-  for (int i = 0; i < TUP_LEN; ++i) {
-    const int idx = ordering[i];
-    const int cmp = sord_node_compare(x[idx], y[idx]);
+  for (uint8_t i = 0U; i < TUP_LEN; ++i) {
+    const uint8_t idx = ordering[i];
+    const int     cmp = sord_node_compare(x[idx], y[idx]);
     if (cmp) {
       return cmp;
     }
@@ -435,8 +436,8 @@
       return false; // Found match
     }
 
-    for (int i = 0; i < iter->n_prefix; ++i) {
-      const int idx = orderings[iter->order][i];
+    for (uint8_t i = 0U; i < iter->n_prefix; ++i) {
+      const uint8_t idx = orderings[iter->order][i];
       if (!sord_id_match(key[idx], iter->pat[idx])) {
         iter->end = true; // Reached end of valid range
         return true;
@@ -453,7 +454,7 @@
               const SordQuad     pat,
               SordOrder          order,
               SearchMode         mode,
-              int                n_prefix)
+              uint8_t            n_prefix)
 {
   SordIter* iter    = (SordIter*)malloc(sizeof(SordIter));
   iter->sord        = sord;
@@ -463,7 +464,7 @@
   iter->n_prefix    = n_prefix;
   iter->end         = false;
   iter->skip_graphs = order < GSPO;
-  for (int i = 0; i < TUP_LEN; ++i) {
+  for (uint8_t i = 0U; i < TUP_LEN; ++i) {
     iter->pat[i] = pat[i];
   }
 
@@ -500,14 +501,14 @@
 const SordModel*
 sord_iter_get_model(SordIter* iter)
 {
-  return iter->sord;
+  return iter ? iter->sord : NULL;
 }
 
 void
 sord_iter_get(const SordIter* iter, SordQuad tup)
 {
   SordNode** key = (SordNode**)zix_btree_get(iter->cur);
-  for (int i = 0; i < TUP_LEN; ++i) {
+  for (uint8_t i = 0U; i < TUP_LEN; ++i) {
     tup[i] = key[i];
   }
 }
@@ -541,8 +542,8 @@
       // At the end if the MSNs no longer match
       key = (const SordNode**)zix_btree_get(iter->cur);
       assert(key);
-      for (int i = 0; i < iter->n_prefix; ++i) {
-        const int idx = orderings[iter->order][i];
+      for (uint8_t i = 0U; i < iter->n_prefix; ++i) {
+        const uint8_t idx = orderings[iter->order][i];
         if (!sord_id_match(key[idx], iter->pat[idx])) {
           iter->end = true;
           SORD_ITER_LOG("%p reached non-match end\n", (void*)iter);
@@ -580,7 +581,7 @@
 bool
 sord_iter_next(SordIter* iter)
 {
-  if (iter->end) {
+  if (!iter || iter->end) {
     return true;
   }
 
@@ -610,11 +611,14 @@
    corresponding order with a G prepended (so G will be the MSN).
 */
 static inline bool
-sord_has_index(SordModel* model, SordOrder* order, int* n_prefix, bool graphs)
+sord_has_index(const SordModel* model,
+               SordOrder*       order,
+               uint8_t*         n_prefix,
+               bool             graphs)
 {
   if (graphs) {
     *order = (SordOrder)(*order + GSPO);
-    *n_prefix += 1;
+    ++*n_prefix;
   }
 
   return model->indices[*order];
@@ -628,15 +632,16 @@
    (for `mode` == RANGE and `mode` == FILTER_RANGE)
 */
 static inline SordOrder
-sord_best_index(SordModel*     sord,
-                const SordQuad pat,
-                SearchMode*    mode,
-                int*           n_prefix)
+sord_best_index(const SordModel* sord,
+                const SordQuad   pat,
+                SearchMode*      mode,
+                uint8_t*         n_prefix)
 {
   const bool graph_search = (pat[TUP_G] != 0);
 
-  const unsigned sig = (pat[0] ? 1 : 0) * 0x100U + (pat[1] ? 1 : 0) * 0x010U +
-                       (pat[2] ? 1 : 0) * 0x001U;
+  const unsigned sig = (((pat[0] ? 1U : 0U) * 0x100U) + //
+                        ((pat[1] ? 1U : 0U) * 0x010U) + //
+                        ((pat[2] ? 1U : 0U) * 0x001U));
 
   SordOrder good[2] = {(SordOrder)-1, (SordOrder)-1};
 
@@ -650,12 +655,12 @@
 
   // Good orderings that don't require filtering
   *mode     = RANGE;
-  *n_prefix = 0;
+  *n_prefix = 0U;
   switch (sig) {
   case 0x000:
     assert(graph_search);
     *mode     = RANGE;
-    *n_prefix = 1;
+    *n_prefix = 1U;
     return DEFAULT_GRAPH_ORDER;
   case 0x111:
     *mode = SINGLE;
@@ -697,7 +702,7 @@
 
   if (graph_search) {
     *mode     = FILTER_RANGE;
-    *n_prefix = 1;
+    *n_prefix = 1U;
     return DEFAULT_GRAPH_ORDER;
   } else {
     *mode = FILTER_ALL;
@@ -708,27 +713,26 @@
 SordModel*
 sord_new(SordWorld* world, unsigned indices, bool graphs)
 {
+  static const unsigned half = (NUM_ORDERS >> 1U);
+
   SordModel* model = (SordModel*)malloc(sizeof(struct SordModelImpl));
   model->world     = world;
   model->n_quads   = 0;
   model->n_iters   = 0;
 
-  for (unsigned i = 0; i < (NUM_ORDERS / 2); ++i) {
-    const int* const ordering   = orderings[i];
-    const int* const g_ordering = orderings[i + (NUM_ORDERS / 2)];
-
+  for (unsigned i = 0; i < half; ++i) {
     if (indices & (1U << i)) {
       model->indices[i] =
-        zix_btree_new(NULL, sord_quad_compare, (void*)ordering);
+        zix_btree_new(NULL, sord_quad_compare, (void*)orderings[i]);
       if (graphs) {
-        model->indices[i + (NUM_ORDERS / 2)] =
-          zix_btree_new(NULL, sord_quad_compare, (void*)g_ordering);
+        model->indices[i + half] =
+          zix_btree_new(NULL, sord_quad_compare, (void*)orderings[i + half]);
       } else {
-        model->indices[i + (NUM_ORDERS / 2)] = NULL;
+        model->indices[i + half] = NULL;
       }
     } else {
-      model->indices[i]                    = NULL;
-      model->indices[i + (NUM_ORDERS / 2)] = NULL;
+      model->indices[i]        = NULL;
+      model->indices[i + half] = NULL;
     }
   }
 
@@ -808,7 +812,7 @@
   SordIter* i = sord_begin(model);
   for (; !sord_iter_end(i); sord_iter_next(i)) {
     sord_iter_get(i, tup);
-    for (int t = 0; t < TUP_LEN; ++t) {
+    for (uint8_t t = 0U; t < TUP_LEN; ++t) {
       sord_drop_quad_ref(model, tup[t], (SordQuadIndex)t);
     }
   }
@@ -839,7 +843,7 @@
 size_t
 sord_num_quads(const SordModel* model)
 {
-  return model->n_quads;
+  return model ? model->n_quads : 0U;
 }
 
 size_t
@@ -861,17 +865,17 @@
 }
 
 SordIter*
-sord_find(SordModel* model, const SordQuad pat)
+sord_find(const SordModel* model, const SordQuad pat)
 {
-  if (!pat[0] && !pat[1] && !pat[2] && !pat[3]) {
+  if (!model || (!pat[0] && !pat[1] && !pat[2] && !pat[3])) {
     return sord_begin(model);
   }
 
   SearchMode      mode        = ALL;
-  int             n_prefix    = 0;
+  uint8_t         n_prefix    = 0U;
   const SordOrder index_order = sord_best_index(model, pat, &mode, &n_prefix);
 
-  SORD_FIND_LOG("Find " TUP_FMT "  index=%s  mode=%u  n_prefix=%d\n",
+  SORD_FIND_LOG("Find " TUP_FMT "  index=%s  mode=%u  n_prefix=%u\n",
                 TUP_FMT_ARGS(pat),
                 order_names[index_order],
                 mode,
@@ -881,9 +885,9 @@
     mode = SINGLE; // No duplicate quads (Sord is a set)
   }
 
-  const int* const ordering = orderings[index_order];
-  ZixBTree* const  db       = model->indices[index_order];
-  ZixBTreeIter     cur      = zix_btree_end(db);
+  const uint8_t* const ordering = orderings[index_order];
+  ZixBTree* const      db       = model->indices[index_order];
+  ZixBTreeIter         cur      = zix_btree_end(db);
 
   if (mode == FILTER_ALL) {
     // No prefix shared with an index at all, linear search (worst case)
@@ -892,7 +896,7 @@
     /* Some prefix, but filtering still required.  Build a search pattern
        with only the prefix to find the lower bound in log time. */
     SordQuad prefix_pat = {NULL, NULL, NULL, NULL};
-    for (int i = 0; i < n_prefix; ++i) {
+    for (uint8_t i = 0U; i < n_prefix; ++i) {
       prefix_pat[ordering[i]] = pat[ordering[i]];
     }
 
@@ -918,22 +922,22 @@
 }
 
 SordIter*
-sord_search(SordModel*      model,
-            const SordNode* s,
-            const SordNode* p,
-            const SordNode* o,
-            const SordNode* g)
+sord_search(const SordModel* model,
+            const SordNode*  s,
+            const SordNode*  p,
+            const SordNode*  o,
+            const SordNode*  g)
 {
   SordQuad pat = {s, p, o, g};
   return sord_find(model, pat);
 }
 
 SordNode*
-sord_get(SordModel*      model,
-         const SordNode* s,
-         const SordNode* p,
-         const SordNode* o,
-         const SordNode* g)
+sord_get(const SordModel* model,
+         const SordNode*  s,
+         const SordNode*  p,
+         const SordNode*  o,
+         const SordNode*  g)
 {
   if (!!s + !!p + !!o != 2) {
     return NULL;
@@ -954,22 +958,22 @@
 }
 
 bool
-sord_ask(SordModel*      model,
-         const SordNode* s,
-         const SordNode* p,
-         const SordNode* o,
-         const SordNode* g)
+sord_ask(const SordModel* model,
+         const SordNode*  s,
+         const SordNode*  p,
+         const SordNode*  o,
+         const SordNode*  g)
 {
   SordQuad pat = {s, p, o, g};
   return sord_contains(model, pat);
 }
 
 uint64_t
-sord_count(SordModel*      model,
-           const SordNode* s,
-           const SordNode* p,
-           const SordNode* o,
-           const SordNode* g)
+sord_count(const SordModel* model,
+           const SordNode*  s,
+           const SordNode*  p,
+           const SordNode*  o,
+           const SordNode*  g)
 {
   SordIter* i = sord_search(model, s, p, o, g);
   uint64_t  n = 0;
@@ -981,7 +985,7 @@
 }
 
 bool
-sord_contains(SordModel* model, const SordQuad pat)
+sord_contains(const SordModel* model, const SordQuad pat)
 {
   SordIter* iter = sord_find(model, pat);
   bool      ret  = (iter != NULL);
@@ -1190,13 +1194,15 @@
     return NULL;
   case SERD_LITERAL:
     datatype_node = sord_node_from_serd_node(world, env, datatype, NULL, NULL);
-    ret           = sord_new_literal_counted(world,
+
+    ret = sord_new_literal_counted(world,
                                    datatype_node,
                                    node->buf,
                                    node->n_bytes,
                                    node->n_chars,
                                    node->flags,
                                    lang ? (const char*)lang->buf : NULL);
+
     sord_node_free(world, datatype_node);
     return ret;
   case SERD_URI:
@@ -1302,7 +1308,7 @@
     }
   }
 
-  for (int i = 0; i < TUP_LEN; ++i) {
+  for (uint8_t i = 0U; i < TUP_LEN; ++i) {
     sord_add_quad_ref(model, tup[i], (SordQuadIndex)i);
   }
 
@@ -1331,7 +1337,7 @@
 
   free(quad);
 
-  for (int i = 0; i < TUP_LEN; ++i) {
+  for (uint8_t i = 0U; i < TUP_LEN; ++i) {
     sord_drop_quad_ref(model, tup[i], (SordQuadIndex)i);
   }
 
@@ -1368,7 +1374,7 @@
 
   free(quad);
 
-  for (int i = 0; i < TUP_LEN; ++i) {
+  for (uint8_t i = 0U; i < TUP_LEN; ++i) {
     sord_drop_quad_ref(model, tup[i], (SordQuadIndex)i);
   }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sord-0.16.18/src/sord_config.h 
new/sord-0.16.20/src/sord_config.h
--- old/sord-0.16.18/src/sord_config.h  2025-01-19 14:46:45.000000000 +0100
+++ new/sord-0.16.20/src/sord_config.h  2025-11-12 20:07:37.000000000 +0100
@@ -16,7 +16,7 @@
 #define SORD_CONFIG_H
 
 // Define version unconditionally so a warning will catch a mismatch
-#define SORD_VERSION "0.16.18"
+#define SORD_VERSION "0.16.20"
 
 #if !defined(SORD_NO_DEFAULT_CONFIG)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sord-0.16.18/src/sord_validate.c 
new/sord-0.16.20/src/sord_validate.c
--- old/sord-0.16.18/src/sord_validate.c        2025-01-19 14:46:45.000000000 
+0100
+++ new/sord-0.16.20/src/sord_validate.c        2025-11-12 20:07:37.000000000 
+0100
@@ -1,9 +1,6 @@
 // Copyright 2012-2021 David Robillard <[email protected]>
 // SPDX-License-Identifier: ISC
 
-#define _BSD_SOURCE 1     // for realpath
-#define _DEFAULT_SOURCE 1 // for realpath
-
 #include "sord_config.h"
 
 #include <serd/serd.h>
@@ -208,6 +205,8 @@
   pcre2_code_free(re);
   return rc > 0;
 #else
+  (void)pattern;
+  (void)str;
   return true;
 #endif // USE_PCRE2
 }
@@ -395,13 +394,10 @@
       return literal_is_valid(model, uris, quad, node, type);
     }
   } else if (sord_node_get_type(node) == SORD_URI) {
-    if (sord_node_equals(type, uris->foaf_Document)) {
-      return true; // Questionable...
-    } else if (is_descendant_of(
-                 model, uris, type, uris->xsd_anyURI, uris->owl_onDatatype)) {
-      /* Type is any URI and this is a URI, so pass.  Restrictions on
-         anyURI subtypes are not currently checked (very uncommon). */
-      return true; // Type is anyURI, and this is a URI
+    if (sord_node_equals(type, uris->foaf_Document) || // Questionable...
+        is_descendant_of(
+          model, uris, type, uris->xsd_anyURI, uris->owl_onDatatype)) {
+      return true; // This is a URI, and type is Document or anyUri
     } else {
       SordIter* t = sord_search(model, node, uris->rdf_type, NULL, NULL);
       for (; !sord_iter_end(t); sord_iter_next(t)) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sord-0.16.18/src/sordmm_test.cpp 
new/sord-0.16.20/src/sordmm_test.cpp
--- old/sord-0.16.18/src/sordmm_test.cpp        2025-01-19 14:46:45.000000000 
+0100
+++ new/sord-0.16.20/src/sordmm_test.cpp        1970-01-01 01:00:00.000000000 
+0100
@@ -1,12 +0,0 @@
-// Copyright 2011 David Robillard <[email protected]>
-// SPDX-License-Identifier: ISC
-
-#include <sord/sordmm.hpp>
-
-int
-main()
-{
-  Sord::World world;
-  Sord::Model model(world, "http://example.org/";);
-  return 0;
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sord-0.16.18/src/syntax.c 
new/sord-0.16.20/src/syntax.c
--- old/sord-0.16.18/src/syntax.c       2025-01-19 14:46:45.000000000 +0100
+++ new/sord-0.16.20/src/syntax.c       2025-11-12 20:07:37.000000000 +0100
@@ -80,10 +80,10 @@
 }
 
 SORD_API SerdReader*
-sord_new_reader(SordModel* model,
-                SerdEnv*   env,
-                SerdSyntax syntax,
-                SordNode*  graph)
+sord_new_reader(SordModel*      model,
+                SerdEnv*        env,
+                SerdSyntax      syntax,
+                const SordNode* graph)
 {
   SordInserter* inserter = sord_inserter_new(model, env);
 
@@ -164,7 +164,7 @@
 }
 
 bool
-sord_write(SordModel* model, SerdWriter* writer, SordNode* graph)
+sord_write(SordModel* model, SerdWriter* writer, const SordNode* graph)
 {
   SordQuad  pat  = {0, 0, 0, graph};
   SordIter* iter = sord_find(model, pat);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sord-0.16.18/test/.clang-tidy 
new/sord-0.16.20/test/.clang-tidy
--- old/sord-0.16.18/test/.clang-tidy   1970-01-01 01:00:00.000000000 +0100
+++ new/sord-0.16.20/test/.clang-tidy   2025-11-12 20:07:37.000000000 +0100
@@ -0,0 +1,21 @@
+# Copyright 2020-2025 David Robillard <[email protected]>
+# SPDX-License-Identifier: 0BSD OR ISC
+
+Checks: >
+  -bugprone-assignment-in-if-condition,
+  -cert-err33-c,
+  -clang-analyzer-optin.core.EnumCastOutOfRange,
+  -cppcoreguidelines-avoid-magic-numbers,
+  -cppcoreguidelines-avoid-non-const-global-variables,
+  -cppcoreguidelines-macro-to-enum,
+  -hicpp-signed-bitwise,
+  -llvm-else-after-return,
+  -misc-include-cleaner,
+  -modernize-macro-to-enum,
+  -readability-else-after-return,
+  -readability-identifier-length,
+  -readability-magic-numbers,
+CheckOptions:
+  - key:   readability-function-cognitive-complexity.Threshold
+    value: '96'
+InheritParentConfig: true
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sord-0.16.18/test/cpp/.clang-tidy 
new/sord-0.16.20/test/cpp/.clang-tidy
--- old/sord-0.16.18/test/cpp/.clang-tidy       1970-01-01 01:00:00.000000000 
+0100
+++ new/sord-0.16.20/test/cpp/.clang-tidy       2025-11-12 20:07:37.000000000 
+0100
@@ -0,0 +1,40 @@
+# Copyright 2020-2025 David Robillard <[email protected]>
+# SPDX-License-Identifier: 0BSD OR ISC
+
+Checks: >
+  -*-avoid-c-arrays,
+  -*-narrowing-conversions,
+  -*-use-default-member-init,
+  -abseil-string-find-str-contains,
+  -android-cloexec-fopen,
+  -cppcoreguidelines-avoid-const-or-ref-data-members,
+  -cppcoreguidelines-macro-usage,
+  -cppcoreguidelines-non-private-member-variables-in-classes,
+  -cppcoreguidelines-owning-memory,
+  -cppcoreguidelines-pro-bounds-array-to-pointer-decay,
+  -cppcoreguidelines-pro-type-reinterpret-cast,
+  -cppcoreguidelines-pro-type-vararg,
+  -cppcoreguidelines-special-member-functions,
+  -fuchsia-default-arguments-calls,
+  -fuchsia-default-arguments-declarations,
+  -fuchsia-overloaded-operator,
+  -google-explicit-constructor,
+  -hicpp-explicit-conversions,
+  -hicpp-no-array-decay,
+  -hicpp-special-member-functions,
+  -hicpp-vararg,
+  -misc-const-correctness,
+  -misc-non-private-member-variables-in-classes,
+  -modernize-return-braced-init-list,
+  -modernize-use-nodiscard,
+  -modernize-use-trailing-return-type,
+  -modernize-use-using,
+  -performance-avoid-endl,
+  -performance-enum-size,
+  -readability-implicit-bool-conversion,
+  -readability-redundant-inline-specifier,
+  -readability-redundant-member-init,
+CheckOptions:
+  - key:   readability-function-cognitive-complexity.Threshold
+    value: '6'
+InheritParentConfig: true
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sord-0.16.18/test/cpp/meson.build 
new/sord-0.16.20/test/cpp/meson.build
--- old/sord-0.16.18/test/cpp/meson.build       1970-01-01 01:00:00.000000000 
+0100
+++ new/sord-0.16.20/test/cpp/meson.build       2025-11-12 20:07:37.000000000 
+0100
@@ -0,0 +1,65 @@
+# Copyright 2021-2025 David Robillard <[email protected]>
+# SPDX-License-Identifier: 0BSD OR ISC
+
+if add_languages(['cpp'], native: false, required: false)
+  cpp = meson.get_compiler('cpp')
+
+  cpp_suppressions = []
+  if cpp.get_id() == 'gcc'
+    if warning_level == 'everything'
+      cpp_suppressions += [
+        '-Wno-abi-tag',
+        '-Wno-conversion',
+        '-Wno-effc++',
+        '-Wno-inline',
+        '-Wno-multiple-inheritance',
+        '-Wno-switch-enum',
+      ]
+    endif
+  elif cpp.get_id() == 'clang'
+    if warning_level == 'everything'
+      cpp_suppressions += [
+        '-Wno-c++98-compat',
+        '-Wno-cast-function-type-strict',
+        '-Wno-documentation-unknown-command',
+        '-Wno-implicit-float-conversion',
+        '-Wno-poison-system-directories',
+        '-Wno-shorten-64-to-32',
+        '-Wno-switch-enum',
+        '-Wno-unsafe-buffer-usage',
+      ]
+    endif
+  elif cpp.get_id() == 'msvc'
+    if warning_level == 'everything'
+      cpp_suppressions += [
+        '/wd4061', # enumerator in switch is not explicitly handled
+        '/wd4244', # lossy conversion from 'double' to 'float'
+        '/wd4514', # unreferenced inline function has been removed
+        '/wd4625', # copy constructor implicitly deleted
+        '/wd4626', # copy assignment operator implicitly deleted
+        '/wd4710', # function not inlined
+        '/wd4711', # function selected for automatic inline expansion
+        '/wd4820', # padding added after construct
+      ]
+    endif
+
+    if warning_level in ['everything', '3', '2']
+      cpp_suppressions += [
+        '/wd4244', # lossy conversion from 'double' to 'float'
+        '/wd4996', # POSIX name for this item is deprecated
+      ]
+    endif
+  endif
+
+  test(
+    'sordmm',
+    executable(
+      'sordmm_test',
+      files('sordmm_test.cpp'),
+      cpp_args: cpp_suppressions,
+      dependencies: sord_dep,
+      implicit_include_directories: false,
+    ),
+    suite: 'unit',
+  )
+endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sord-0.16.18/test/cpp/sordmm_test.cpp 
new/sord-0.16.20/test/cpp/sordmm_test.cpp
--- old/sord-0.16.18/test/cpp/sordmm_test.cpp   1970-01-01 01:00:00.000000000 
+0100
+++ new/sord-0.16.20/test/cpp/sordmm_test.cpp   2025-11-12 20:07:37.000000000 
+0100
@@ -0,0 +1,12 @@
+// Copyright 2011 David Robillard <[email protected]>
+// SPDX-License-Identifier: ISC
+
+#include <sord/sordmm.hpp>
+
+int
+main()
+{
+  Sord::World world;
+  Sord::Model model(world, "http://example.org/";);
+  return 0;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sord-0.16.18/test/headers/.clang-tidy 
new/sord-0.16.20/test/headers/.clang-tidy
--- old/sord-0.16.18/test/headers/.clang-tidy   1970-01-01 01:00:00.000000000 
+0100
+++ new/sord-0.16.20/test/headers/.clang-tidy   2025-11-12 20:07:37.000000000 
+0100
@@ -0,0 +1,15 @@
+# Copyright 2020-2025 David Robillard <[email protected]>
+# SPDX-License-Identifier: 0BSD OR ISC
+
+Checks: >
+  *,
+  -altera-*,
+  -llvmlibc-*,
+CheckOptions:
+  - key:   readability-function-cognitive-complexity.Threshold
+    value: '0'
+  - key:   readability-identifier-length.IgnoredParameterNames
+    value: '^(a)|(b)|(s)|(p)|(o)|(g)|(x)|(y)$'
+WarningsAsErrors: '*'
+HeaderFilterRegex: '.*'
+FormatStyle: file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sord-0.16.18/test/headers/meson.build 
new/sord-0.16.20/test/headers/meson.build
--- old/sord-0.16.18/test/headers/meson.build   1970-01-01 01:00:00.000000000 
+0100
+++ new/sord-0.16.20/test/headers/meson.build   2025-11-12 20:07:37.000000000 
+0100
@@ -0,0 +1,32 @@
+# Copyright 2020-2025 David Robillard <[email protected]>
+# SPDX-License-Identifier: 0BSD OR ISC
+
+header_c_suppressions = []
+
+if get_option('warning_level') == 'everything'
+  if cc.get_id() == 'clang'
+    if not meson.is_cross_build()
+      header_c_suppressions += ['-Wno-poison-system-directories']
+    endif
+  elif cc.get_id() == 'msvc'
+    header_c_suppressions += [
+      '/wd4820', # padding added after construct
+    ]
+  endif
+endif
+
+if cc.get_id() == 'clang'
+  header_c_suppressions += ['-Wno-nullability-extension']
+endif
+
+test(
+  'headers',
+  executable(
+    'test_headers',
+    files('test_headers.c'),
+    c_args: header_c_suppressions,
+    dependencies: sord_dep,
+    implicit_include_directories: false,
+  ),
+  suite: 'unit',
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sord-0.16.18/test/headers/test_headers.c 
new/sord-0.16.20/test/headers/test_headers.c
--- old/sord-0.16.18/test/headers/test_headers.c        1970-01-01 
01:00:00.000000000 +0100
+++ new/sord-0.16.20/test/headers/test_headers.c        2025-11-12 
20:07:37.000000000 +0100
@@ -0,0 +1,13 @@
+// Copyright 2022-2025 David Robillard <[email protected]>
+// SPDX-License-Identifier: ISC
+
+#include <sord/sord.h> // IWYU pragma: keep
+
+#if defined(__GNUC__)
+__attribute__((const))
+#endif
+int
+main(void)
+{
+  return 0;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sord-0.16.18/test/meson.build 
new/sord-0.16.20/test/meson.build
--- old/sord-0.16.18/test/meson.build   2025-01-19 14:46:45.000000000 +0100
+++ new/sord-0.16.20/test/meson.build   2025-11-12 20:07:37.000000000 +0100
@@ -1,6 +1,12 @@
-# Copyright 2021-2022 David Robillard <[email protected]>
+# Copyright 2021-2025 David Robillard <[email protected]>
 # SPDX-License-Identifier: 0BSD OR ISC
 
+###################
+# Header Warnings #
+###################
+
+subdir('headers')
+
 ####################
 # Project Metadata #
 ####################
@@ -37,7 +43,16 @@
       files('test_@[email protected]'.format(unit)),
       c_args: c_suppressions,
       dependencies: sord_dep,
+      implicit_include_directories: false,
     ),
     suite: 'unit',
   )
 endforeach
+
+#######
+# C++ #
+#######
+
+if not get_option('bindings_cpp').disabled()
+  subdir('cpp')
+endif

Reply via email to