Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package tdb for openSUSE:Factory checked in 
at 2024-05-24 19:50:30
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/tdb (Old)
 and      /work/SRC/openSUSE:Factory/.tdb.new.24587 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "tdb"

Fri May 24 19:50:30 2024 rev:44 rq:1176457 version:1.4.10

Changes:
--------
--- /work/SRC/openSUSE:Factory/tdb/tdb.changes  2023-10-05 20:02:36.577534944 
+0200
+++ /work/SRC/openSUSE:Factory/.tdb.new.24587/tdb.changes       2024-05-24 
19:50:43.816610863 +0200
@@ -1,0 +2,8 @@
+Thu May 16 11:29:15 UTC 2024 - Samuel Cabrero <[email protected]>
+
+- Update to 1.4.10
+  * build with Python 3.12 (bso#15513)
+  * documentation fixes
+  * minor build fixes
+
+-------------------------------------------------------------------

Old:
----
  tdb-1.4.9.tar.asc
  tdb-1.4.9.tar.gz

New:
----
  tdb-1.4.10.tar.asc
  tdb-1.4.10.tar.gz

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

Other differences:
------------------
++++++ tdb.spec ++++++
--- /var/tmp/diff_new_pack.nrlprC/_old  2024-05-24 19:50:44.768645627 +0200
+++ /var/tmp/diff_new_pack.nrlprC/_new  2024-05-24 19:50:44.772645773 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package tdb
 #
-# Copyright (c) 2023 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -19,7 +19,7 @@
 %{!?python_sitearch:  %global python_sitearch %(python -c "from 
distutils.sysconfig import get_python_lib; print get_python_lib(1)")}
 %{!?py3_soflags:  %global py3_soflags cpython-%{python3_version_nodots}m}
 Name:           tdb
-Version:        1.4.9
+Version:        1.4.10
 Release:        0
 Summary:        Samba Trivial Database
 License:        LGPL-3.0-or-later

++++++ tdb-1.4.9.tar.gz -> tdb-1.4.10.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tdb-1.4.9/ABI/tdb-1.4.10.sigs 
new/tdb-1.4.10/ABI/tdb-1.4.10.sigs
--- old/tdb-1.4.9/ABI/tdb-1.4.10.sigs   1970-01-01 01:00:00.000000000 +0100
+++ new/tdb-1.4.10/ABI/tdb-1.4.10.sigs  2024-01-29 17:18:40.731547000 +0100
@@ -0,0 +1,73 @@
+tdb_add_flags: void (struct tdb_context *, unsigned int)
+tdb_append: int (struct tdb_context *, TDB_DATA, TDB_DATA)
+tdb_chainlock: int (struct tdb_context *, TDB_DATA)
+tdb_chainlock_mark: int (struct tdb_context *, TDB_DATA)
+tdb_chainlock_nonblock: int (struct tdb_context *, TDB_DATA)
+tdb_chainlock_read: int (struct tdb_context *, TDB_DATA)
+tdb_chainlock_read_nonblock: int (struct tdb_context *, TDB_DATA)
+tdb_chainlock_unmark: int (struct tdb_context *, TDB_DATA)
+tdb_chainunlock: int (struct tdb_context *, TDB_DATA)
+tdb_chainunlock_read: int (struct tdb_context *, TDB_DATA)
+tdb_check: int (struct tdb_context *, int (*)(TDB_DATA, TDB_DATA, void *), 
void *)
+tdb_close: int (struct tdb_context *)
+tdb_delete: int (struct tdb_context *, TDB_DATA)
+tdb_dump_all: void (struct tdb_context *)
+tdb_enable_seqnum: void (struct tdb_context *)
+tdb_error: enum TDB_ERROR (struct tdb_context *)
+tdb_errorstr: const char *(struct tdb_context *)
+tdb_exists: int (struct tdb_context *, TDB_DATA)
+tdb_fd: int (struct tdb_context *)
+tdb_fetch: TDB_DATA (struct tdb_context *, TDB_DATA)
+tdb_firstkey: TDB_DATA (struct tdb_context *)
+tdb_freelist_size: int (struct tdb_context *)
+tdb_get_flags: int (struct tdb_context *)
+tdb_get_logging_private: void *(struct tdb_context *)
+tdb_get_seqnum: int (struct tdb_context *)
+tdb_hash_size: int (struct tdb_context *)
+tdb_increment_seqnum_nonblock: void (struct tdb_context *)
+tdb_jenkins_hash: unsigned int (TDB_DATA *)
+tdb_lock_nonblock: int (struct tdb_context *, int, int)
+tdb_lockall: int (struct tdb_context *)
+tdb_lockall_mark: int (struct tdb_context *)
+tdb_lockall_nonblock: int (struct tdb_context *)
+tdb_lockall_read: int (struct tdb_context *)
+tdb_lockall_read_nonblock: int (struct tdb_context *)
+tdb_lockall_unmark: int (struct tdb_context *)
+tdb_log_fn: tdb_log_func (struct tdb_context *)
+tdb_map_size: size_t (struct tdb_context *)
+tdb_name: const char *(struct tdb_context *)
+tdb_nextkey: TDB_DATA (struct tdb_context *, TDB_DATA)
+tdb_null: dptr = 0xXXXX, dsize = 0
+tdb_open: struct tdb_context *(const char *, int, int, int, mode_t)
+tdb_open_ex: struct tdb_context *(const char *, int, int, int, mode_t, const 
struct tdb_logging_context *, tdb_hash_func)
+tdb_parse_record: int (struct tdb_context *, TDB_DATA, int (*)(TDB_DATA, 
TDB_DATA, void *), void *)
+tdb_printfreelist: int (struct tdb_context *)
+tdb_remove_flags: void (struct tdb_context *, unsigned int)
+tdb_reopen: int (struct tdb_context *)
+tdb_reopen_all: int (int)
+tdb_repack: int (struct tdb_context *)
+tdb_rescue: int (struct tdb_context *, void (*)(TDB_DATA, TDB_DATA, void *), 
void *)
+tdb_runtime_check_for_robust_mutexes: bool (void)
+tdb_set_logging_function: void (struct tdb_context *, const struct 
tdb_logging_context *)
+tdb_set_max_dead: void (struct tdb_context *, int)
+tdb_setalarm_sigptr: void (struct tdb_context *, volatile sig_atomic_t *)
+tdb_store: int (struct tdb_context *, TDB_DATA, TDB_DATA, int)
+tdb_storev: int (struct tdb_context *, TDB_DATA, const TDB_DATA *, int, int)
+tdb_summary: char *(struct tdb_context *)
+tdb_transaction_active: bool (struct tdb_context *)
+tdb_transaction_cancel: int (struct tdb_context *)
+tdb_transaction_commit: int (struct tdb_context *)
+tdb_transaction_prepare_commit: int (struct tdb_context *)
+tdb_transaction_start: int (struct tdb_context *)
+tdb_transaction_start_nonblock: int (struct tdb_context *)
+tdb_transaction_write_lock_mark: int (struct tdb_context *)
+tdb_transaction_write_lock_unmark: int (struct tdb_context *)
+tdb_traverse: int (struct tdb_context *, tdb_traverse_func, void *)
+tdb_traverse_chain: int (struct tdb_context *, unsigned int, 
tdb_traverse_func, void *)
+tdb_traverse_key_chain: int (struct tdb_context *, TDB_DATA, 
tdb_traverse_func, void *)
+tdb_traverse_read: int (struct tdb_context *, tdb_traverse_func, void *)
+tdb_unlock: int (struct tdb_context *, int, int)
+tdb_unlockall: int (struct tdb_context *)
+tdb_unlockall_read: int (struct tdb_context *)
+tdb_validate_freelist: int (struct tdb_context *, int *)
+tdb_wipe_all: int (struct tdb_context *)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tdb-1.4.9/buildtools/bin/waf 
new/tdb-1.4.10/buildtools/bin/waf
--- old/tdb-1.4.9/buildtools/bin/waf    2023-01-19 12:39:12.715112000 +0100
+++ new/tdb-1.4.10/buildtools/bin/waf   2024-01-22 09:56:34.366532600 +0100
@@ -32,7 +32,7 @@
 
 import os, sys, inspect
 
-VERSION="2.0.25"
+VERSION="2.0.26"
 REVISION="x"
 GIT="x"
 INSTALL="x"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tdb-1.4.9/buildtools/wafsamba/pkgconfig.py 
new/tdb-1.4.10/buildtools/wafsamba/pkgconfig.py
--- old/tdb-1.4.9/buildtools/wafsamba/pkgconfig.py      2023-01-23 
06:37:57.751581200 +0100
+++ new/tdb-1.4.10/buildtools/wafsamba/pkgconfig.py     2023-09-28 
11:28:07.477609200 +0200
@@ -5,7 +5,7 @@
 from samba_utils import SUBST_VARS_RECURSIVE, TO_LIST
 
 def subst_at_vars(task):
-    '''substiture @VAR@ style variables in a file'''
+    '''substitute @VAR@ style variables in a file'''
 
     s = task.inputs[0].read()
     # split on the vars
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tdb-1.4.9/buildtools/wafsamba/samba_abi.py 
new/tdb-1.4.10/buildtools/wafsamba/samba_abi.py
--- old/tdb-1.4.9/buildtools/wafsamba/samba_abi.py      2023-05-15 
12:15:14.013386500 +0200
+++ new/tdb-1.4.10/buildtools/wafsamba/samba_abi.py     2023-10-25 
09:25:01.405660000 +0200
@@ -225,7 +225,7 @@
         if k in sorted(invmap.keys()):
             f.write("\tglobal:\n")
             for s in invmap.get(k, []):
-                f.write("\t\t%s;\n" % s);
+                f.write("\t\t%s;\n" % s)
         f.write("}%s;\n\n" % last_key)
         last_key = " %s" % symver
     f.write("%s {\n" % current_version)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tdb-1.4.9/buildtools/wafsamba/samba_autoconf.py 
new/tdb-1.4.10/buildtools/wafsamba/samba_autoconf.py
--- old/tdb-1.4.9/buildtools/wafsamba/samba_autoconf.py 2023-05-19 
10:55:21.091587500 +0200
+++ new/tdb-1.4.10/buildtools/wafsamba/samba_autoconf.py        2024-01-22 
09:56:34.366532600 +0100
@@ -625,7 +625,7 @@
 
         if not res:
             if mandatory:
-                Logs.error("Mandatory library '%s' not found for functions 
'%s'" % (lib, list))
+                Logs.error("Mandatory library '%s' not found for functions 
'%s'" % (lib, libs))
                 sys.exit(1)
             if empty_decl:
                 # if it isn't a mandatory library, then remove it from 
dependency lists
@@ -817,6 +817,12 @@
         if CHECK_CFLAGS(conf, ["-Wno-error=array-bounds"]):
             conf.define('HAVE_WNO_ERROR_ARRAY_BOUNDS', 1)
 
+        if CHECK_CFLAGS(conf, ["-Wno-error=stringop-overflow"]):
+            conf.define('HAVE_WNO_ERROR_STRINGOP_OVERFLOW', 1)
+
+        if CHECK_CFLAGS(conf, ["-Wno-error=declaration-after-statement"]):
+            conf.define('HAVE_WNO_ERROR_DECLARATION_AFTER_STATEMENT', 1)
+
         if not Options.options.disable_warnings_as_errors:
             conf.ADD_NAMED_CFLAGS('PICKY_CFLAGS', '-Werror 
-Wno-error=deprecated-declarations', testflags=True)
             conf.ADD_NAMED_CFLAGS('PICKY_CFLAGS', 
'-Wno-error=tautological-compare', testflags=True)
@@ -960,10 +966,10 @@
     if not 'EXTRA_CFLAGS' in bld.env:
         list = []
     else:
-        list = bld.env['EXTRA_CFLAGS'];
+        list = bld.env['EXTRA_CFLAGS']
     ret.extend(list)
     if not allow_warnings and 'PICKY_CFLAGS' in bld.env:
-        list = bld.env['PICKY_CFLAGS'];
+        list = bld.env['PICKY_CFLAGS']
         ret.extend(list)
     if hide_symbols and bld.env.HAVE_VISIBILITY_ATTR:
         ret.append(bld.env.VISIBILITY_CFLAGS)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tdb-1.4.9/buildtools/wafsamba/samba_bundled.py 
new/tdb-1.4.10/buildtools/wafsamba/samba_bundled.py
--- old/tdb-1.4.9/buildtools/wafsamba/samba_bundled.py  2023-04-04 
16:54:16.532374000 +0200
+++ new/tdb-1.4.10/buildtools/wafsamba/samba_bundled.py 2024-01-22 
09:56:34.374532500 +0100
@@ -10,6 +10,9 @@
 
     extension = bld.env.PRIVATE_EXTENSION
 
+    if name in bld.env.PRIVATE_EXTENSION_EXCEPTION:
+        return name
+
     if extension and name.startswith('%s' % extension):
         return name
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tdb-1.4.9/buildtools/wafsamba/samba_conftests.py 
new/tdb-1.4.10/buildtools/wafsamba/samba_conftests.py
--- old/tdb-1.4.9/buildtools/wafsamba/samba_conftests.py        2023-04-04 
16:54:16.532374000 +0200
+++ new/tdb-1.4.10/buildtools/wafsamba/samba_conftests.py       2023-10-25 
09:25:01.405660000 +0200
@@ -84,7 +84,7 @@
 @conf
 def CHECK_LARGEFILE(conf, define='HAVE_LARGEFILE'):
     '''see what we need for largefile support'''
-    getconf_cflags = conf.CHECK_COMMAND(['getconf', 'LFS_CFLAGS']);
+    getconf_cflags = conf.CHECK_COMMAND(['getconf', 'LFS_CFLAGS'])
     if getconf_cflags is not False:
         if (conf.CHECK_CODE('if (sizeof(off_t) < 8) return 1',
                             define='WORKING_GETCONF_LFS_CFLAGS',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tdb-1.4.9/buildtools/wafsamba/samba_deps.py 
new/tdb-1.4.10/buildtools/wafsamba/samba_deps.py
--- old/tdb-1.4.9/buildtools/wafsamba/samba_deps.py     2022-07-22 
10:48:01.783334000 +0200
+++ new/tdb-1.4.10/buildtools/wafsamba/samba_deps.py    2023-09-28 
11:28:07.481609000 +0200
@@ -360,7 +360,7 @@
 
 
 def add_samba_attributes(bld, tgt_list):
-    '''ensure a target has a the required samba attributes'''
+    '''ensure a target has the required samba attributes'''
 
     targets = LOCAL_CACHE(bld, 'TARGET_TYPE')
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tdb-1.4.9/buildtools/wafsamba/samba_install.py 
new/tdb-1.4.10/buildtools/wafsamba/samba_install.py
--- old/tdb-1.4.9/buildtools/wafsamba/samba_install.py  2020-02-03 
11:43:17.748698700 +0100
+++ new/tdb-1.4.10/buildtools/wafsamba/samba_install.py 2023-09-28 
11:28:07.481609000 +0200
@@ -188,7 +188,7 @@
     blddir = os.path.dirname(self.bld.srcnode.abspath(self.bld.env))
     libpath = self.link_task.outputs[0].abspath(self.env)
 
-    # calculat the link target and put it in the environment
+    # calculate the link target and put it in the environment
     soext=""
     vnum = getattr(self, 'vnum', None)
     if vnum is not None:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tdb-1.4.9/buildtools/wafsamba/samba_patterns.py 
new/tdb-1.4.10/buildtools/wafsamba/samba_patterns.py
--- old/tdb-1.4.9/buildtools/wafsamba/samba_patterns.py 2022-02-01 
16:01:28.493139700 +0100
+++ new/tdb-1.4.10/buildtools/wafsamba/samba_patterns.py        2024-01-22 
09:56:34.374532500 +0100
@@ -15,7 +15,7 @@
     return 0
 
 
-def SAMBA_MKVERSION(bld, target, source='VERSION'):
+def SAMBA_MKVERSION(bld, target, source='VERSION 
buildtools/wafsamba/samba_version.py'):
     '''generate the version.h header for Samba'''
 
     # We only force waf to re-generate this file if we are installing,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tdb-1.4.9/buildtools/wafsamba/samba_perl.py 
new/tdb-1.4.10/buildtools/wafsamba/samba_perl.py
--- old/tdb-1.4.9/buildtools/wafsamba/samba_perl.py     2022-07-22 
10:48:01.783334000 +0200
+++ new/tdb-1.4.10/buildtools/wafsamba/samba_perl.py    2023-10-25 
09:25:01.405660000 +0200
@@ -34,18 +34,18 @@
 
     perl_arch_install_dir = None
     if vendor_prefix == conf.env.PREFIX:
-        perl_arch_install_dir = check_perl_config_var('vendorarch');
+        perl_arch_install_dir = check_perl_config_var('vendorarch')
     if perl_arch_install_dir is None:
-        perl_arch_install_dir = "${LIBDIR}/perl5";
+        perl_arch_install_dir = "${LIBDIR}/perl5"
     conf.start_msg("PERL_ARCH_INSTALL_DIR: ")
     conf.end_msg("'%s'" % (perl_arch_install_dir), 'GREEN')
     conf.env.PERL_ARCH_INSTALL_DIR = perl_arch_install_dir
 
     perl_lib_install_dir = None
     if vendor_prefix == conf.env.PREFIX:
-        perl_lib_install_dir = check_perl_config_var('vendorlib');
+        perl_lib_install_dir = check_perl_config_var('vendorlib')
     if perl_lib_install_dir is None:
-        perl_lib_install_dir = "${DATADIR}/perl5";
+        perl_lib_install_dir = "${DATADIR}/perl5"
     conf.start_msg("PERL_LIB_INSTALL_DIR: ")
     conf.end_msg("'%s'" % (perl_lib_install_dir), 'GREEN')
     conf.env.PERL_LIB_INSTALL_DIR = perl_lib_install_dir
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tdb-1.4.9/buildtools/wafsamba/samba_pidl.py 
new/tdb-1.4.10/buildtools/wafsamba/samba_pidl.py
--- old/tdb-1.4.9/buildtools/wafsamba/samba_pidl.py     2021-07-08 
17:48:26.493492100 +0200
+++ new/tdb-1.4.10/buildtools/wafsamba/samba_pidl.py    2024-01-22 
09:56:34.374532500 +0100
@@ -10,9 +10,9 @@
                output_dir='.',
                generate_tables=True):
     '''Build a IDL file using pidl.
-       This will produce up to 13 output files depending on the options used'''
+       This will produce up to 17 output files depending on the options used'''
 
-    bname = source[0:-4]; # strip off the .idl suffix
+    bname = source[0:-4] # strip off the .idl suffix
     bname = os.path.basename(bname)
     name = "%s_%s" % (pname, bname.upper())
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tdb-1.4.9/buildtools/wafsamba/samba_utils.py 
new/tdb-1.4.10/buildtools/wafsamba/samba_utils.py
--- old/tdb-1.4.9/buildtools/wafsamba/samba_utils.py    2023-04-04 
16:54:16.532374000 +0200
+++ new/tdb-1.4.10/buildtools/wafsamba/samba_utils.py   2023-10-25 
09:25:01.405660000 +0200
@@ -469,8 +469,7 @@
         return ctx.recurse(relpath)
     if 'waflib.extras.compat15' in sys.modules:
         return ctx.recurse(relpath)
-    Logs.error('Unknown RECURSE context class: {}'.format(ctxclass))
-    raise
+    raise Errors.WafError('Unknown RECURSE context class: {}'.format(ctxclass))
 Options.OptionsContext.RECURSE = RECURSE
 Build.BuildContext.RECURSE = RECURSE
 
@@ -710,8 +709,9 @@
     """before apply_obj_vars for uselib, this removes the standard paths"""
 
     def is_standard_libpath(env, path):
+        normalized_path = os.path.normpath(path)
         for _path in env.STANDARD_LIBPATH:
-            if _path == os.path.normpath(path):
+            if _path == normalized_path:
                 return True
         return False
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tdb-1.4.9/buildtools/wafsamba/samba_version.py 
new/tdb-1.4.10/buildtools/wafsamba/samba_version.py
--- old/tdb-1.4.9/buildtools/wafsamba/samba_version.py  2023-04-04 
16:54:16.532374000 +0200
+++ new/tdb-1.4.10/buildtools/wafsamba/samba_version.py 2024-01-22 
09:56:34.374532500 +0100
@@ -174,6 +174,7 @@
 
     def __str__(self):
         string="/* Autogenerated by waf */\n" +\
+                "#define SAMBA_COPYRIGHT_STRING \"%s\"\n" % 
self.SAMBA_COPYRIGHT_STRING +\
                 "#define SAMBA_VERSION_MAJOR %u\n" % self.MAJOR +\
                 "#define SAMBA_VERSION_MINOR %u\n" % self.MINOR +\
                 "#define SAMBA_VERSION_RELEASE %u\n" % self.RELEASE
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tdb-1.4.9/buildtools/wafsamba/stale_files.py 
new/tdb-1.4.10/buildtools/wafsamba/stale_files.py
--- old/tdb-1.4.9/buildtools/wafsamba/stale_files.py    2022-02-01 
16:01:28.493139700 +0100
+++ new/tdb-1.4.10/buildtools/wafsamba/stale_files.py   2023-09-28 
11:28:07.481609000 +0200
@@ -107,6 +107,7 @@
 
 def AUTOCLEANUP_STALE_FILES(bld):
     """automatically clean up any files in bin that shouldn't be there"""
+    global old_refill_task_list
     old_refill_task_list = Parallel.refill_task_list
     Parallel.refill_task_list = replace_refill_task_list
     Parallel.bld = bld
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tdb-1.4.9/buildtools/wafsamba/wafsamba.py 
new/tdb-1.4.10/buildtools/wafsamba/wafsamba.py
--- old/tdb-1.4.9/buildtools/wafsamba/wafsamba.py       2023-04-04 
16:54:16.532374000 +0200
+++ new/tdb-1.4.10/buildtools/wafsamba/wafsamba.py      2024-01-22 
09:56:34.378532400 +0100
@@ -38,7 +38,7 @@
 
 os.environ['PYTHONUNBUFFERED'] = '1'
 
-if Context.HEXVERSION not in (0x2001900,):
+if Context.HEXVERSION not in (0x2001a00,):
     Logs.error('''
 Please use the version of waf that comes with Samba, not
 a system installed version. See http://wiki.samba.org/index.php/Waf
@@ -82,7 +82,7 @@
         return
     bld.ASSERT(subsystem is not None, "You must specify a subsystem for 
init_function '%s'" % init_function)
     cache = LOCAL_CACHE(bld, 'INIT_FUNCTIONS')
-    if not subsystem in cache:
+    if subsystem not in cache:
         cache[subsystem] = []
     cache[subsystem].append( { 'TARGET':target, 'INIT_FUNCTION':init_function 
} )
 Build.BuildContext.ADD_INIT_FUNCTION = ADD_INIT_FUNCTION
@@ -109,7 +109,6 @@
                   ldflags='',
                   external_library=False,
                   realname=None,
-                  keep_underscore=False,
                   autoproto=None,
                   autoproto_extra_source='',
                   group='main',
@@ -135,13 +134,14 @@
                   require_builtin_deps=False,
                   provide_builtin_linking=False,
                   builtin_cflags='',
+                  force_unversioned=False,
                   allow_undefined_symbols=False,
                   allow_warnings=False,
                   enabled=True):
     '''define a Samba library'''
 
     # We support:
-    # - LIBRARY: this can be use to link via -llibname
+    # - LIBRARY: this can be used to link via -llibname
     # - MODULE:  this is module from SAMBA_MODULE()
     # - PLUGIN:  this is plugin for external consumers to be
     #            loaded via dlopen()
@@ -172,9 +172,20 @@
         raise Errors.WafError("private library '%s' with orig_vscript_map must 
not have abi_match" %
                              libname)
 
+    if force_unversioned and private_library:
+        raise Errors.WafError("private library '%s': can't have 
force_unversioned=True" %
+                             libname)
+
+    if force_unversioned and realname is None:
+        raise Errors.WafError("library '%s': force_unversioned=True needs 
realname too" %
+                             libname)
+
     if LIB_MUST_BE_PRIVATE(bld, libname) and target_type not in ['PLUGIN']:
         private_library = True
 
+    if force_unversioned:
+        private_library = False
+
     if not enabled:
         SET_TARGET_TYPE(bld, libname, 'DISABLED')
         return
@@ -298,12 +309,9 @@
     if bundled_name is not None:
         pass
     elif target_type == 'PYTHON' or realname or not private_library:
-        if keep_underscore:
-            bundled_name = libname
-        else:
-            bundled_name = libname.replace('_', '-')
+        bundled_name = libname.replace('_', '-')
     else:
-        assert (private_library == True and realname is None)
+        assert (private_library is True and realname is None)
         bundled_name = PRIVATE_NAME(bld, libname.replace('_', '-'))
         vnum = None
 
@@ -331,7 +339,9 @@
 
     vscript = None
     if bld.env.HAVE_LD_VERSION_SCRIPT:
-        if private_library:
+        if force_unversioned:
+            version = None
+        elif private_library:
             version = bld.env.PRIVATE_VERSION
         elif vnum:
             version = "%s_%s" % (libname, vnum)
@@ -654,7 +664,6 @@
                  vars=None,
                  subdir=None,
                  realname=None,
-                 keep_underscore=False,
                  autoproto=None,
                  autoproto_extra_source='',
                  install_path=None,
@@ -1058,7 +1067,7 @@
     lineno = 0
     for line in source_file:
         newline = line
-        if lineno == 0 and task.env["PERL_SPECIFIED"] == True and line[:2] == 
"#!":
+        if lineno == 0 and task.env["PERL_SPECIFIED"] is True and line[:2] == 
"#!":
             newline = replacement_shebang
         elif pattern in line:
             newline = line.replace(pattern, replacement)
@@ -1133,7 +1142,7 @@
                   python_fixup=python_fixup, base_name=trim_path)
 Build.BuildContext.INSTALL_WILDCARD = INSTALL_WILDCARD
 
-def INSTALL_DIR(bld, path, chmod=0o755, env=None):
+def INSTALL_DIR(bld, path, chmod=0o755):
     """Install a directory if it doesn't exist, always set permissions."""
 
     if not path:
@@ -1154,12 +1163,12 @@
                     raise Errors.WafError("Cannot create the folder '%s' 
(error: %s)" % (path, e))
 Build.BuildContext.INSTALL_DIR = INSTALL_DIR
 
-def INSTALL_DIRS(bld, destdir, dirs, chmod=0o755, env=None):
+def INSTALL_DIRS(bld, destdir, dirs, chmod=0o755):
     '''install a set of directories'''
     destdir = bld.EXPAND_VARIABLES(destdir)
     dirs = bld.EXPAND_VARIABLES(dirs)
     for d in TO_LIST(dirs):
-        INSTALL_DIR(bld, os.path.join(destdir, d), chmod, env)
+        INSTALL_DIR(bld, os.path.join(destdir, d), chmod)
 Build.BuildContext.INSTALL_DIRS = INSTALL_DIRS
 
 
@@ -1183,7 +1192,7 @@
     bld.env.SAMBA_EXPAND_XSL = bld.srcnode.abspath() + 
'/docs-xml/xslt/expand-sambadoc.xsl'
     bld.env.SAMBA_MAN_XSL = bld.srcnode.abspath() + '/docs-xml/xslt/man.xsl'
     bld.env.SAMBA_CATALOG = bld.bldnode.abspath() + 
'/docs-xml/build/catalog.xml'
-    bld.env.SAMBA_CATALOGS = 'file:///etc/xml/catalog 
file:///usr/local/share/xml/catalog file://' + bld.env.SAMBA_CATALOG
+    bld.env.SAMBA_CATALOGS = os.getenv('XML_CATALOG_FILES', 
'file:///etc/xml/catalog file:///usr/local/share/xml/catalog') + ' file://' + 
bld.env.SAMBA_CATALOG
 
     for m in manpages.split():
         source = [m + '.xml']
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tdb-1.4.9/buildtools/wafsamba/wscript 
new/tdb-1.4.10/buildtools/wafsamba/wscript
--- old/tdb-1.4.9/buildtools/wafsamba/wscript   2023-04-04 16:54:16.532374000 
+0200
+++ new/tdb-1.4.10/buildtools/wafsamba/wscript  2023-09-28 11:28:07.481609000 
+0200
@@ -37,7 +37,7 @@
                    help=(f'''comma separated list of bundled libraries.
 
 {Context.g_module.APPNAME} includes copies of externally maintained
-system libraries (such as popt, cmokca) as well as Samba-maintained
+system libraries (such as popt, cmocka) as well as Samba-maintained
 libraries that can be found on the system already (such as talloc,
 tdb).
 
@@ -99,7 +99,7 @@
 before we will select not to 'bundle'.
 
 This option, possibly useful for packagers, allows that specified
-version to be overridden (say, if it is absolutely known that a the
+version to be overridden (say, if it is absolutely known that the
 newer version included in this tarball has no relevant changes).
 
 Use this with extreme care
@@ -539,7 +539,7 @@
         # conf.DEFINE('_XOPEN_SOURCE', 600, add_to_cflags=True)
 
     # we should use the PIC options in waf instead
-    # Some compilo didn't support -fPIC but just print a warning
+    # Some compiler didn't support -fPIC but just print a warning
     if conf.env['COMPILER_CC'] == "suncc":
         conf.ADD_CFLAGS('-KPIC', testflags=True)
         # we really want define here as we need to have this
@@ -552,7 +552,7 @@
 
     # On Solaris 8 with suncc (at least) the flags for the linker to define 
the name of the
     # library are not always working (if the command line is very very long 
and with a lot
-    # files)
+    # of files)
 
     if conf.env['COMPILER_CC'] == "suncc":
         save = conf.env['SONAME_ST']
@@ -615,7 +615,7 @@
 
     # see if we need special largefile flags
     if not conf.CHECK_LARGEFILE():
-        raise Errors.WafError('Samba requires large file support support, but 
not available on this platform: sizeof(off_t) < 8')
+        raise Errors.WafError('Samba requires large file support, but not 
available on this platform: sizeof(off_t) < 8')
 
     if conf.env.HAVE_STDDEF_H and conf.env.HAVE_STDLIB_H:
         conf.DEFINE('STDC_HEADERS', 1)
@@ -632,7 +632,7 @@
     else:
         conf.define('SHLIBEXT', "so", quote=True)
 
-    # First try a header check for cross-compile friendlyness
+    # First try a header check for cross-compile friendliness
     conf.CHECK_CODE(code = """#ifdef __BYTE_ORDER
                         #define B __BYTE_ORDER
                         #elif defined(BYTE_ORDER)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tdb-1.4.9/common/hash.c new/tdb-1.4.10/common/hash.c
--- old/tdb-1.4.9/common/hash.c 2020-02-03 11:43:17.860698500 +0100
+++ new/tdb-1.4.10/common/hash.c        2023-09-28 11:28:07.505609300 +0200
@@ -56,7 +56,7 @@
 the public domain.  It has no warranty.
 
 You probably want to use hashlittle().  hashlittle() and hashbig()
-hash byte arrays.  hashlittle() is is faster than hashbig() on
+hash byte arrays.  hashlittle() is faster than hashbig() on
 little-endian machines.  Intel and AMD are little-endian machines.
 On second thought, you probably want hashlittle2(), which is identical to
 hashlittle() except it returns two 32-bit hashes for the price of one.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tdb-1.4.9/common/open.c new/tdb-1.4.10/common/open.c
--- old/tdb-1.4.9/common/open.c 2023-04-21 10:29:11.360781200 +0200
+++ new/tdb-1.4.10/common/open.c        2023-10-25 09:25:01.409659900 +0200
@@ -513,7 +513,13 @@
 
        errno = 0;
        if (read(tdb->fd, &header, sizeof(header)) != sizeof(header)
-           || strcmp(header.magic_food, TDB_MAGIC_FOOD) != 0) {
+           /*
+            * Call strncmp() rather than strcmp() in case header.magic_food is
+            * not zero‐terminated. We’re still checking the full string for
+            * equality, as tdb_header::magic_food is larger than
+            * TDB_MAGIC_FOOD.
+            */
+           || strncmp(header.magic_food, TDB_MAGIC_FOOD, 
sizeof(header.magic_food)) != 0) {
                if (!(open_flags & O_CREAT) ||
                    tdb_new_database(tdb, &header, hash_size) == -1) {
                        if (errno == 0) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tdb-1.4.9/lib/replace/replace.h 
new/tdb-1.4.10/lib/replace/replace.h
--- old/tdb-1.4.9/lib/replace/replace.h 2023-04-04 16:54:16.552373600 +0200
+++ new/tdb-1.4.10/lib/replace/replace.h        2023-09-28 11:28:07.501609300 
+0200
@@ -41,7 +41,7 @@
  * As it's also needed when Python.h is the first header we
  * require a global -D__STDC_WANT_LIB_EXT1__=1
  */
-#ifndef __STDC_WANT_LIB_EXT1__
+#if __STDC_WANT_LIB_EXT1__ != 1
 #error -D__STDC_WANT_LIB_EXT1__=1 required
 #endif
 
@@ -205,7 +205,7 @@
 #endif
 
 #ifndef HAVE_STRERROR
-extern char *sys_errlist[];
+extern const char *const sys_errlist[];
 #define strerror(i) sys_errlist[i]
 #endif
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tdb-1.4.9/lib/replace/system/python.h 
new/tdb-1.4.10/lib/replace/system/python.h
--- old/tdb-1.4.9/lib/replace/system/python.h   1970-01-01 01:00:00.000000000 
+0100
+++ new/tdb-1.4.10/lib/replace/system/python.h  2024-01-22 09:56:34.410532200 
+0100
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2023      Andreas Schneider <[email protected]>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SAMBA_PYTHON_H
+#define _SAMBA_PYTHON_H
+
+/*
+ * With Python 3.6 Cpython started to require C99. With Python 3.12 they
+ * started to mix code and variable declarations so disable the warnings.
+ */
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeclaration-after-statement"
+#include <Python.h>
+#pragma GCC diagnostic pop
+
+#endif /* _SAMBA_PYTHON_H */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tdb-1.4.9/lib/replace/tests/testsuite.c 
new/tdb-1.4.10/lib/replace/tests/testsuite.c
--- old/tdb-1.4.9/lib/replace/tests/testsuite.c 2022-02-01 15:55:19.732598300 
+0100
+++ new/tdb-1.4.10/lib/replace/tests/testsuite.c        2023-10-25 
09:25:01.409659900 +0200
@@ -854,14 +854,14 @@
                return false;
        }
 
-       if (write(sock[1], "automatisch", 12) == -1) {
+       if (write(sock[1], "automatisch", 12) != 12) {
                printf("failure: socketpair [\n"
                           "write() failed: %s\n"
                           "]\n", strerror(errno));
                return false;
        }
 
-       if (read(sock[0], buf, 12) == -1) {
+       if (read(sock[0], buf, 12) != 12) {
                printf("failure: socketpair [\n"
                           "read() failed: %s\n"
                           "]\n", strerror(errno));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tdb-1.4.9/lib/replace/wscript 
new/tdb-1.4.10/lib/replace/wscript
--- old/tdb-1.4.9/lib/replace/wscript   2023-07-20 12:46:15.122290600 +0200
+++ new/tdb-1.4.10/lib/replace/wscript  2023-09-28 11:28:07.501609300 +0200
@@ -448,6 +448,17 @@
         if conf.CHECK_FUNCS_IN('strlcpy strlcat', 'bsd', 
headers='bsd/string.h',
                                checklibc=True):
             strlcpy_in_bsd = True
+    elif conf.env.enable_fuzzing:
+        # Just to complicate it more, some versions of Honggfuzz have
+        # got strlcpy and strlcat in libc, but not in <string.h>
+        # (unless it is there coincidentally, on a BSD). Therefore we
+        # can't use CHECK_FUNCS alone to decide whether to add the
+        # headers to replace.h.
+        #
+        # As this is only known to happen on a fuzzing compiler, we'll
+        # skip the check when not in fuzzing mode.
+        conf.CHECK_HEADERS('bsd/string.h')
+
     if not conf.CHECK_FUNCS('getpeereid'):
         conf.CHECK_FUNCS_IN('getpeereid', 'bsd', headers='sys/types.h 
bsd/unistd.h')
     if not conf.CHECK_FUNCS_IN('setproctitle', 'setproctitle', 
headers='setproctitle.h'):
@@ -487,7 +498,7 @@
     conf.CHECK_FUNCS('gai_strerror get_current_dir_name')
     conf.CHECK_FUNCS('timegm getifaddrs freeifaddrs mmap setgroups syscall 
setsid')
     conf.CHECK_FUNCS('getgrent_r getgrgid_r getgrnam_r getgrouplist 
getpagesize')
-    conf.CHECK_FUNCS('getpwent_r getpwnam_r getpwuid_r epoll_create')
+    conf.CHECK_FUNCS('getpwent_r getpwnam_r getpwuid_r epoll_create1')
     conf.CHECK_FUNCS('getprogname')
     if not conf.CHECK_FUNCS('copy_file_range'):
         conf.CHECK_CODE('''
@@ -710,7 +721,7 @@
     conf.CHECK_DECLS('getgrent_r getpwent_r', reverse=True, headers='pwd.h 
grp.h')
     conf.CHECK_DECLS('pread pwrite setenv setresgid setresuid', reverse=True)
 
-    if conf.CONFIG_SET('HAVE_EPOLL_CREATE') and 
conf.CONFIG_SET('HAVE_SYS_EPOLL_H'):
+    if conf.CONFIG_SET('HAVE_EPOLL_CREATE1') and 
conf.CONFIG_SET('HAVE_SYS_EPOLL_H'):
         conf.DEFINE('HAVE_EPOLL', 1)
 
     if conf.CHECK_FUNCS('eventfd', headers='sys/eventfd.h'):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tdb-1.4.9/pytdb.c new/tdb-1.4.10/pytdb.c
--- old/tdb-1.4.9/pytdb.c       2023-05-19 10:55:21.095587700 +0200
+++ new/tdb-1.4.10/pytdb.c      2024-01-22 09:56:34.410532200 +0100
@@ -24,7 +24,7 @@
    License along with this library; if not, see <http://www.gnu.org/licenses/>.
 */
 
-#include <Python.h>
+#include "lib/replace/system/python.h"
 #include "replace.h"
 #include "system/filesys.h"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tdb-1.4.9/python/tdbdump.py 
new/tdb-1.4.10/python/tdbdump.py
--- old/tdb-1.4.9/python/tdbdump.py     2021-07-08 17:51:20.086189700 +0200
+++ new/tdb-1.4.10/python/tdbdump.py    2024-01-22 09:56:34.414532200 +0100
@@ -1,12 +1,17 @@
 #!/usr/bin/env python3
 # Trivial reimplementation of tdbdump in Python
 
-import tdb, sys
+import sys
+
+sys.path.insert(0, "bin/python")
+
+import tdb
 
 if len(sys.argv) < 2:
     print("Usage: tdbdump.py <tdb-file>")
     sys.exit(1)
 
 db = tdb.Tdb(sys.argv[1])
-for (k, v) in db.items():
+for k in db.keys():
+    v = db.get(k)
     print("{\nkey(%d) = %r\ndata(%d) = %r\n}" % (len(k), k, len(v), v))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tdb-1.4.9/third_party/waf/waflib/Context.py 
new/tdb-1.4.10/third_party/waf/waflib/Context.py
--- old/tdb-1.4.9/third_party/waf/waflib/Context.py     2023-01-19 
12:39:12.915113200 +0100
+++ new/tdb-1.4.10/third_party/waf/waflib/Context.py    2024-01-22 
09:56:34.590531000 +0100
@@ -18,13 +18,13 @@
        import imp
 
 # the following 3 constants are updated on each new release (do not touch)
-HEXVERSION=0x2001900
+HEXVERSION=0x2001a00
 """Constant updated on new releases"""
 
-WAFVERSION="2.0.25"
+WAFVERSION="2.0.26"
 """Constant updated on new releases"""
 
-WAFREVISION="2db0b41b2805cd5db3b55476c06b23c1e46d319f"
+WAFREVISION="0fb985ce1932c6f3e7533f435e4ee209d673776e"
 """Git revision when the waf version is updated"""
 
 WAFNAME="waf"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tdb-1.4.9/third_party/waf/waflib/Scripting.py 
new/tdb-1.4.10/third_party/waf/waflib/Scripting.py
--- old/tdb-1.4.9/third_party/waf/waflib/Scripting.py   2019-12-11 
23:13:06.577426000 +0100
+++ new/tdb-1.4.10/third_party/waf/waflib/Scripting.py  2024-01-22 
09:56:34.590531000 +0100
@@ -388,7 +388,11 @@
 
                        for x in files:
                                archive_name = self.get_base_name() + '/' + 
x.path_from(self.base_path)
-                               zip.write(x.abspath(), archive_name, 
zipfile.ZIP_DEFLATED)
+                               if os.environ.get('SOURCE_DATE_EPOCH'):
+                                       # TODO: parse that timestamp
+                                       
zip.writestr(zipfile.ZipInfo(archive_name), x.read(), zipfile.ZIP_DEFLATED)
+                               else:
+                                       zip.write(x.abspath(), archive_name, 
zipfile.ZIP_DEFLATED)
                        zip.close()
                else:
                        self.fatal('Valid algo types are tar.bz2, tar.gz, 
tar.xz or zip')
@@ -425,6 +429,8 @@
                tinfo.gid   = 0
                tinfo.uname = 'root'
                tinfo.gname = 'root'
+               if os.environ.get('SOURCE_DATE_EPOCH'):
+                       tinfo.mtime = int(os.environ.get('SOURCE_DATE_EPOCH'))
 
                if os.path.isfile(p):
                        with open(p, 'rb') as f:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tdb-1.4.9/third_party/waf/waflib/Tools/qt5.py 
new/tdb-1.4.10/third_party/waf/waflib/Tools/qt5.py
--- old/tdb-1.4.9/third_party/waf/waflib/Tools/qt5.py   2022-04-12 
12:29:16.780438700 +0200
+++ new/tdb-1.4.10/third_party/waf/waflib/Tools/qt5.py  2024-01-22 
09:56:34.590531000 +0100
@@ -1,10 +1,11 @@
 #!/usr/bin/env python
 # encoding: utf-8
 # Thomas Nagy, 2006-2018 (ita)
+# Rafaël Kooi, 2023 (RA-Kooi)
 
 """
-This tool helps with finding Qt5 tools and libraries,
-and also provides syntactic sugar for using Qt5 tools.
+This tool helps with finding Qt5 and Qt6 tools and libraries,
+and also provides syntactic sugar for using Qt5 and Qt6 tools.
 
 The following snippet illustrates the tool usage::
 
@@ -22,6 +23,23 @@
                        target   = 'window',
                )
 
+Alternatively the following snippet illustrates Qt6 tool usage::
+
+    def options(opt):
+        opt.load('compiler_cxx qt5')
+
+    def configure(conf):
+        conf.want_qt6 = True
+        conf.load('compiler_cxx qt5')
+
+    def build(bld):
+        bld(
+            features = 'qt6 cxx cxxprogram',
+            uselib   = 'QT6CORE QT6GUI QT6OPENGL QT6SVG',
+            source   = 'main.cpp textures.qrc aboutDialog.ui',
+            target   = 'window',
+        )
+
 Here, the UI description and resource files will be processed
 to generate code.
 
@@ -56,25 +74,32 @@
 A few options (--qt{dir,bin,...}) and environment variables
 (QT5_{ROOT,DIR,MOC,UIC,XCOMPILE}) allow finer tuning of the tool,
 tool path selection, etc; please read the source for more info.
+For Qt6 replace the QT5_ prefix with QT6_.
 
 The detection uses pkg-config on Linux by default. The list of
 libraries to be requested to pkg-config is formulated by scanning
 in the QTLIBS directory (that can be passed via --qtlibs or by
-setting the environment variable QT5_LIBDIR otherwise is derived
-by querying qmake for QT_INSTALL_LIBS directory) for shared/static
-libraries present.
+setting the environment variable QT5_LIBDIR or QT6_LIBDIR otherwise is
+derived by querying qmake for QT_INSTALL_LIBS directory) for
+shared/static libraries present.
 Alternatively the list of libraries to be requested via pkg-config
 can be set using the qt5_vars attribute, ie:
 
       conf.qt5_vars = ['Qt5Core', 'Qt5Gui', 'Qt5Widgets', 'Qt5Test'];
 
+For Qt6 use the qt6_vars attribute.
+
 This can speed up configuration phase if needed libraries are
 known beforehand, can improve detection on systems with a
-sparse QT5 libraries installation (ie. NIX) and can improve
+sparse QT5/Qt6 libraries installation (ie. NIX) and can improve
 detection of some header-only Qt modules (ie. Qt5UiPlugin).
 
 To force static library detection use:
 QT5_XCOMPILE=1 QT5_FORCE_STATIC=1 waf configure
+
+To use Qt6 set the want_qt6 attribute, ie:
+
+    conf.want_qt6 = True;
 """
 
 from __future__ import with_statement
@@ -282,8 +307,8 @@
 
        """
        If UIC file is used in more than one bld, we would have a conflict in 
parallel execution
-       It is not possible to change the file names (like .self.idx. as for 
objects) as they have 
-       to be referenced by the source file, but we can assume that the 
transformation will be identical 
+       It is not possible to change the file names (like .self.idx. as for 
objects) as they have
+       to be referenced by the source file, but we can assume that the 
transformation will be identical
        and the tasks can be shared in a global cache.
        """
        try:
@@ -300,7 +325,7 @@
        """Adds all the .ts file into ``self.lang``"""
        self.lang = self.to_list(getattr(self, 'lang', [])) + [node]
 
-@feature('qt5')
+@feature('qt5', 'qt6')
 @before_method('process_source')
 def process_mocs(self):
        """
@@ -322,7 +347,7 @@
 
                self.create_task('moc', x, moc_node)
 
-@feature('qt5')
+@feature('qt5', 'qt6')
 @after_method('apply_link')
 def apply_qt5(self):
        """
@@ -485,6 +510,13 @@
        if 'COMPILER_CXX' not in self.env:
                self.fatal('No CXX compiler defined: did you forget to 
configure compiler_cxx first?')
 
+       self.want_qt6 = getattr(self, 'want_qt6', False)
+
+       if self.want_qt6:
+               self.qt_vars = Utils.to_list(getattr(self, 'qt6_vars', []))
+       else:
+               self.qt_vars = Utils.to_list(getattr(self, 'qt5_vars', []))
+
        self.find_qt5_binaries()
        self.set_qt5_libs_dir()
        self.set_qt5_libs_to_check()
@@ -497,15 +529,19 @@
        if not has_xml:
                Logs.error('No xml.sax support was found, rcc dependencies will 
be incomplete!')
 
+       feature = 'qt6' if self.want_qt6 else 'qt5'
+       # Qt6 requires C++17 (https://www.qt.io/blog/qt-6.0-released)
+       stdflag = '-std=c++17' if self.want_qt6 else '-std=c++11'
+
        # Qt5 may be compiled with '-reduce-relocations' which requires 
dependent programs to have -fPIE or -fPIC?
        frag = '#include <QMap>\nint main(int argc, char **argv) {QMap<int,int> 
m;return m.keys().size();}\n'
-       uses = 'QT5CORE'
-       for flag in [[], '-fPIE', '-fPIC', '-std=c++11' , ['-std=c++11', 
'-fPIE'], ['-std=c++11', '-fPIC']]:
+       uses = 'QT6CORE' if self.want_qt6 else 'QT5CORE'
+       for flag in [[], '-fPIE', '-fPIC', stdflag, [stdflag, '-fPIE'], 
[stdflag, '-fPIC']]:
                msg = 'See if Qt files compile '
                if flag:
                        msg += 'with %s' % flag
                try:
-                       self.check(features='qt5 cxx', use=uses, 
uselib_store='qt5', cxxflags=flag, fragment=frag, msg=msg)
+                       self.check(features=feature + ' cxx', use=uses, 
uselib_store=feature, cxxflags=flag, fragment=frag, msg=msg)
                except self.errors.ConfigurationError:
                        pass
                else:
@@ -517,9 +553,9 @@
        if Utils.unversioned_sys_platform() == 'freebsd':
                frag = '#include <QMap>\nint main(int argc, char **argv) 
{QMap<int,int> m;return m.keys().size();}\n'
                try:
-                       self.check(features='qt5 cxx cxxprogram', use=uses, 
fragment=frag, msg='Can we link Qt programs on FreeBSD directly?')
+                       self.check(features=feature + ' cxx cxxprogram', 
use=uses, fragment=frag, msg='Can we link Qt programs on FreeBSD directly?')
                except self.errors.ConfigurationError:
-                       self.check(features='qt5 cxx cxxprogram', use=uses, 
uselib_store='qt5', libpath='/usr/local/lib', fragment=frag, msg='Is 
/usr/local/lib required?')
+                       self.check(features=feature + ' cxx cxxprogram', 
use=uses, uselib_store=feature, libpath='/usr/local/lib', fragment=frag, 
msg='Is /usr/local/lib required?')
 
 @conf
 def find_qt5_binaries(self):
@@ -531,6 +567,7 @@
 
        qtdir = getattr(opt, 'qtdir', '')
        qtbin = getattr(opt, 'qtbin', '')
+       qt_ver = '6' if self.want_qt6 else '5'
 
        paths = []
 
@@ -539,8 +576,8 @@
 
        # the qt directory has been given from QT5_ROOT - deduce the qt binary 
path
        if not qtdir:
-               qtdir = self.environ.get('QT5_ROOT', '')
-               qtbin = self.environ.get('QT5_BIN') or os.path.join(qtdir, 
'bin')
+               qtdir = self.environ.get('QT' + qt_ver + '_ROOT', '')
+               qtbin = self.environ.get('QT' + qt_ver + '_BIN') or 
os.path.join(qtdir, 'bin')
 
        if qtbin:
                paths = [qtbin]
@@ -548,7 +585,10 @@
        # no qtdir, look in the path and in /usr/local/Trolltech
        if not qtdir:
                paths = self.environ.get('PATH', '').split(os.pathsep)
-               paths.extend(['/usr/share/qt5/bin', '/usr/local/lib/qt5/bin'])
+               paths.extend([
+                       '/usr/share/qt' + qt_ver + '/bin',
+                       '/usr/local/lib/qt' + qt_ver + '/bin'])
+
                try:
                        lst = Utils.listdir('/usr/local/Trolltech/')
                except OSError:
@@ -567,7 +607,9 @@
        # keep the one with the highest version
        cand = None
        prev_ver = ['0', '0', '0']
-       for qmk in ('qmake-qt5', 'qmake5', 'qmake'):
+       qmake_vars = ['qmake-qt' + qt_ver, 'qmake' + qt_ver, 'qmake']
+
+       for qmk in qmake_vars:
                try:
                        qmake = self.find_program(qmk, path_list=paths)
                except self.errors.ConfigurationError:
@@ -580,7 +622,7 @@
                        else:
                                if version:
                                        new_ver = version.split('.')
-                                       if new_ver[0] == '5' and new_ver > 
prev_ver:
+                                       if new_ver[0] == qt_ver and new_ver > 
prev_ver:
                                                cand = qmake
                                                prev_ver = new_ver
 
@@ -591,7 +633,7 @@
                except self.errors.ConfigurationError:
                        pass
                else:
-                       cmd = self.env.QTCHOOSER + ['-qt=5', '-run-tool=qmake']
+                       cmd = self.env.QTCHOOSER + ['-qt=' + qt_ver, 
'-run-tool=qmake']
                        try:
                                version = self.cmd_and_log(cmd + ['-query', 
'QT_VERSION'])
                        except self.errors.WafError:
@@ -602,10 +644,17 @@
        if cand:
                self.env.QMAKE = cand
        else:
-               self.fatal('Could not find qmake for qt5')
+               self.fatal('Could not find qmake for qt' + qt_ver)
+
+       # Once we have qmake, we want to query qmake for the paths where we 
want to look for tools instead
+       paths = []
 
        self.env.QT_HOST_BINS = qtbin = self.cmd_and_log(self.env.QMAKE + 
['-query', 'QT_HOST_BINS']).strip()
-       paths.insert(0, qtbin)
+       paths.append(qtbin)
+
+       if self.want_qt6:
+               self.env.QT_HOST_LIBEXECS = self.cmd_and_log(self.env.QMAKE + 
['-query', 'QT_HOST_LIBEXECS']).strip()
+               paths.append(self.env.QT_HOST_LIBEXECS)
 
        def find_bin(lst, var):
                if var in env:
@@ -619,22 +668,25 @@
                                env[var]=ret
                                break
 
-       find_bin(['uic-qt5', 'uic'], 'QT_UIC')
+       find_bin(['uic-qt' + qt_ver, 'uic'], 'QT_UIC')
        if not env.QT_UIC:
-               self.fatal('cannot find the uic compiler for qt5')
+               self.fatal('cannot find the uic compiler for qt' + qt_ver)
 
        self.start_msg('Checking for uic version')
        uicver = self.cmd_and_log(env.QT_UIC + ['-version'], 
output=Context.BOTH)
        uicver = ''.join(uicver).strip()
        uicver = uicver.replace('Qt User Interface Compiler ','').replace('User 
Interface Compiler for Qt', '')
        self.end_msg(uicver)
-       if uicver.find(' 3.') != -1 or uicver.find(' 4.') != -1:
-               self.fatal('this uic compiler is for qt3 or qt4, add uic for 
qt5 to your path')
+       if uicver.find(' 3.') != -1 or uicver.find(' 4.') != -1 or 
(self.want_qt6 and uicver.find(' 5.') != -1):
+               if self.want_qt6:
+                       self.fatal('this uic compiler is for qt3 or qt4 or qt5, 
add uic for qt6 to your path')
+               else:
+                       self.fatal('this uic compiler is for qt3 or qt4, add 
uic for qt5 to your path')
 
-       find_bin(['moc-qt5', 'moc'], 'QT_MOC')
-       find_bin(['rcc-qt5', 'rcc'], 'QT_RCC')
-       find_bin(['lrelease-qt5', 'lrelease'], 'QT_LRELEASE')
-       find_bin(['lupdate-qt5', 'lupdate'], 'QT_LUPDATE')
+       find_bin(['moc-qt' + qt_ver, 'moc'], 'QT_MOC')
+       find_bin(['rcc-qt' + qt_ver, 'rcc'], 'QT_RCC')
+       find_bin(['lrelease-qt' + qt_ver, 'lrelease'], 'QT_LRELEASE')
+       find_bin(['lupdate-qt' + qt_ver, 'lupdate'], 'QT_LUPDATE')
 
        env.UIC_ST = '%s -o %s'
        env.MOC_ST = '-o'
@@ -646,19 +698,26 @@
 @conf
 def set_qt5_libs_dir(self):
        env = self.env
-       qtlibs = getattr(Options.options, 'qtlibs', None) or 
self.environ.get('QT5_LIBDIR')
+       qt_ver = '6' if self.want_qt6 else '5'
+
+       qtlibs = getattr(Options.options, 'qtlibs', None) or 
self.environ.get('QT' + qt_ver + '_LIBDIR')
+
        if not qtlibs:
                try:
                        qtlibs = self.cmd_and_log(env.QMAKE + ['-query', 
'QT_INSTALL_LIBS']).strip()
                except Errors.WafError:
                        qtdir = self.cmd_and_log(env.QMAKE + ['-query', 
'QT_INSTALL_PREFIX']).strip()
                        qtlibs = os.path.join(qtdir, 'lib')
-       self.msg('Found the Qt5 library path', qtlibs)
+
+       self.msg('Found the Qt' + qt_ver + ' library path', qtlibs)
+
        env.QTLIBS = qtlibs
 
 @conf
 def find_single_qt5_lib(self, name, uselib, qtlibs, qtincludes, force_static):
        env = self.env
+       qt_ver = '6' if self.want_qt6 else '5'
+
        if force_static:
                exts = ('.a', '.lib')
                prefix = 'STLIB'
@@ -668,7 +727,7 @@
 
        def lib_names():
                for x in exts:
-                       for k in ('', '5') if Utils.is_win32 else ['']:
+                       for k in ('', qt_ver) if Utils.is_win32 else ['']:
                                for p in ('lib', ''):
                                        yield (p, name, k, x)
 
@@ -683,26 +742,28 @@
                        env.append_unique(prefix + '_' + uselib, libval)
                        env.append_unique('%sPATH_%s' % (prefix, uselib), 
qtlibs)
                        env.append_unique('INCLUDES_' + uselib, qtincludes)
-                       env.append_unique('INCLUDES_' + uselib, 
os.path.join(qtincludes, name.replace('Qt5', 'Qt')))
+                       env.append_unique('INCLUDES_' + uselib, 
os.path.join(qtincludes, name.replace('Qt' + qt_ver, 'Qt')))
                        return k
        return False
 
 @conf
 def find_qt5_libraries(self):
        env = self.env
+       qt_ver = '6' if self.want_qt6 else '5'
+
+       qtincludes =  self.environ.get('QT' + qt_ver + '_INCLUDES') or 
self.cmd_and_log(env.QMAKE + ['-query', 'QT_INSTALL_HEADERS']).strip()
+       force_static = self.environ.get('QT' + qt_ver + '_FORCE_STATIC')
 
-       qtincludes =  self.environ.get('QT5_INCLUDES') or 
self.cmd_and_log(env.QMAKE + ['-query', 'QT_INSTALL_HEADERS']).strip()
-       force_static = self.environ.get('QT5_FORCE_STATIC')
        try:
-               if self.environ.get('QT5_XCOMPILE'):
-                       self.fatal('QT5_XCOMPILE Disables pkg-config detection')
+               if self.environ.get('QT' + qt_ver + '_XCOMPILE'):
+                       self.fatal('QT' + qt_ver + '_XCOMPILE Disables 
pkg-config detection')
                self.check_cfg(atleast_pkgconfig_version='0.1')
        except self.errors.ConfigurationError:
-               for i in self.qt5_vars:
+               for i in self.qt_vars:
                        uselib = i.upper()
                        if Utils.unversioned_sys_platform() == 'darwin':
                                # Since at least qt 4.7.3 each library locates 
in separate directory
-                               fwk = i.replace('Qt5', 'Qt')
+                               fwk = i.replace('Qt' + qt_ver, 'Qt')
                                frameworkName = fwk + '.framework'
 
                                qtDynamicLib = os.path.join(env.QTLIBS, 
frameworkName, fwk)
@@ -719,9 +780,9 @@
                                        ret = self.find_single_qt5_lib(i, 
uselib, env.QTLIBS, qtincludes, True)
                                self.msg('Checking for %s' % i, ret, 'GREEN' if 
ret else 'YELLOW')
        else:
-               path = 
'%s:%s:%s/pkgconfig:/usr/lib/qt5/lib/pkgconfig:/opt/qt5/lib/pkgconfig:/usr/lib/qt5/lib:/opt/qt5/lib'
 % (
-                       self.environ.get('PKG_CONFIG_PATH', ''), env.QTLIBS, 
env.QTLIBS)
-               for i in self.qt5_vars:
+               path = 
'%s:%s:%s/pkgconfig:/usr/lib/qt%s/lib/pkgconfig:/opt/qt%s/lib/pkgconfig:/usr/lib/qt%s/lib:/opt/qt%s/lib'
 % (
+                       self.environ.get('PKG_CONFIG_PATH', ''), env.QTLIBS, 
env.QTLIBS, qt_ver, qt_ver, qt_ver, qt_ver)
+               for i in self.qt_vars:
                        self.check_cfg(package=i, args='--cflags --libs', 
mandatory=False, force_static=force_static, pkg_config_path=path)
 
 @conf
@@ -746,7 +807,7 @@
                                                continue
                                        accu.append(lib)
                                env['LIBPATH_'+var] = accu
-       process_lib(self.qt5_vars,       'LIBPATH_QTCORE')
+       process_lib(self.qt_vars, 'LIBPATH_QTCORE')
 
 @conf
 def add_qt5_rpath(self):
@@ -768,39 +829,52 @@
                                                                continue
                                                accu.append('-Wl,--rpath='+lib)
                                        env['RPATH_' + var] = accu
-               process_rpath(self.qt5_vars,       'LIBPATH_QTCORE')
+               process_rpath(self.qt_vars, 'LIBPATH_QTCORE')
 
 @conf
 def set_qt5_libs_to_check(self):
-       self.qt5_vars = Utils.to_list(getattr(self, 'qt5_vars', []))
-       if not self.qt5_vars:
+       qt_ver = '6' if self.want_qt6 else '5'
+
+       if not self.qt_vars:
                dirlst = Utils.listdir(self.env.QTLIBS)
 
                pat = self.env.cxxshlib_PATTERN
                if Utils.is_win32:
                        pat = pat.replace('.dll', '.lib')
-               if self.environ.get('QT5_FORCE_STATIC'):
+               if self.environ.get('QT' + qt_ver + '_FORCE_STATIC'):
                        pat = self.env.cxxstlib_PATTERN
                if Utils.unversioned_sys_platform() == 'darwin':
                        pat = r"%s\.framework"
-               re_qt = re.compile(pat % 'Qt5?(?P<name>\\w+)' + '$')
+
+               # We only want to match Qt5 or Qt in the case of Qt5, in the 
case
+               # of Qt6 we want to match Qt6 or Qt. This speeds up 
configuration
+               # and reduces the chattiness of the configuration. Should also 
prevent
+               # possible misconfiguration.
+               if self.want_qt6:
+                       re_qt = re.compile(pat % 'Qt6?(?!\\d)(?P<name>\\w+)' + 
'$')
+               else:
+                       re_qt = re.compile(pat % 'Qt5?(?!\\d)(?P<name>\\w+)' + 
'$')
+
                for x in sorted(dirlst):
                        m = re_qt.match(x)
                        if m:
-                               self.qt5_vars.append("Qt5%s" % m.group('name'))
-               if not self.qt5_vars:
-                       self.fatal('cannot find any Qt5 library (%r)' % 
self.env.QTLIBS)
+                               self.qt_vars.append("Qt%s%s" % (qt_ver, 
m.group('name')))
+               if not self.qt_vars:
+                       self.fatal('cannot find any Qt%s library (%r)' % 
(qt_ver, self.env.QTLIBS))
 
        qtextralibs = getattr(Options.options, 'qtextralibs', None)
        if qtextralibs:
-               self.qt5_vars.extend(qtextralibs.split(','))
+               self.qt_vars.extend(qtextralibs.split(','))
 
 @conf
 def set_qt5_defines(self):
+       qt_ver = '6' if self.want_qt6 else '5'
+
        if sys.platform != 'win32':
                return
-       for x in self.qt5_vars:
-               y=x.replace('Qt5', 'Qt')[2:].upper()
+
+       for x in self.qt_vars:
+               y=x.replace('Qt' + qt_ver, 'Qt')[2:].upper()
                self.env.append_unique('DEFINES_%s' % x.upper(), 'QT_%s_LIB' % 
y)
 
 def options(opt):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tdb-1.4.9/third_party/waf/waflib/extras/distnet.py 
new/tdb-1.4.10/third_party/waf/waflib/extras/distnet.py
--- old/tdb-1.4.9/third_party/waf/waflib/extras/distnet.py      2019-12-11 
23:13:06.581426100 +0100
+++ new/tdb-1.4.10/third_party/waf/waflib/extras/distnet.py     2024-01-22 
09:56:34.590531000 +0100
@@ -101,6 +101,8 @@
                                tarinfo.uid   = tarinfo.gid   = 0
                                tarinfo.uname = tarinfo.gname = 'root'
                                tarinfo.size = os.stat(x).st_size
+                               if os.environ.get('SOURCE_DATE_EPOCH'):
+                                       tarinfo.mtime = 
int(os.environ.get('SOURCE_DATE_EPOCH'))
 
                                # TODO - more archive creation options?
                                if kw.get('bare', True):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tdb-1.4.9/third_party/waf/waflib/extras/haxe.py 
new/tdb-1.4.10/third_party/waf/waflib/extras/haxe.py
--- old/tdb-1.4.9/third_party/waf/waflib/extras/haxe.py 2022-02-01 
15:55:20.080603400 +0100
+++ new/tdb-1.4.10/third_party/waf/waflib/extras/haxe.py        2024-01-22 
09:56:34.590531000 +0100
@@ -1,131 +1,154 @@
-import os, re
-from waflib import Utils, Task, Errors
-from waflib.TaskGen import extension, taskgen_method, feature
-from waflib.Configure import conf
-
-@conf
-def libname_haxe(self, libname):
-       return libname
-
-@conf
-def check_lib_haxe(self, libname, uselib_store=None):
-       haxe_libs = [node.name for node in 
self.root.find_node('haxe_libraries').ant_glob()]
-       changed = False
-       self.start_msg('Checking for library %s' % libname)
-       if libname + '.hxml' in haxe_libs:
-               self.end_msg('yes')
-       else:
-               changed = True
-               try:
-                       cmd = self.env.LIX + ['+lib', libname]
-                       res = self.cmd_and_log(cmd)
-                       if (res):
-                               raise Errors.WafError(res)
-                       else:
-                               self.end_msg('downloaded', color = 'YELLOW')
-               except Errors.WafError as e:
-                       self.end_msg('no', color = 'RED')
-                       self.fatal('Getting %s has failed' % libname)
-
-       postfix = uselib_store if uselib_store else libname.upper()
-       self.env['LIB_' + postfix] += [self.libname_haxe(libname)]
-       return changed
-
-@conf
-def check_libs_haxe(self, libnames, uselib_store=None):
-       changed = False
-       for libname in Utils.to_list(libnames):
-               if self.check_lib_haxe(libname, uselib_store):
-                       changed = True
-       return changed
+import re
 
-@conf
-def ensure_lix_pkg(self, *k, **kw):
-       if kw.get('compiler') == 'hx':
-               if isinstance(kw.get('libs'), list) and len(kw.get('libs')):
-                       changed = self.check_libs_haxe(kw.get('libs'), 
kw.get('uselib_store'))
-                       if changed:
-                               try:
-                                       cmd = self.env.LIX + ['download']
-                                       res = self.cmd_and_log(cmd)
-                                       if (res):
-                                               raise Errors.WafError(res)
-                               except Errors.WafError as e:
-                                       self.fatal('lix download has failed')
-               else:
-                       self.check_lib_haxe(kw.get('lib'), 
kw.get('uselib_store'))
+from waflib import Utils, Task, Errors, Logs
+from waflib.Configure import conf
+from waflib.TaskGen import extension, taskgen_method
 
-@conf
-def haxe(bld, *k, **kw):
-       task_gen = bld(*k, **kw)
+HAXE_COMPILERS = {
+    'JS': {'tgt': '--js', 'ext_out': ['.js']},
+    'LUA': {'tgt': '--lua', 'ext_out': ['.lua']},
+    'SWF': {'tgt': '--swf', 'ext_out': ['.swf']},
+    'NEKO': {'tgt': '--neko', 'ext_out': ['.n']},
+    'PHP': {'tgt': '--php', 'ext_out': ['.php']},
+    'CPP': {'tgt': '--cpp', 'ext_out': ['.h', '.cpp']},
+    'CPPIA': {'tgt': '--cppia', 'ext_out': ['.cppia']},
+    'CS': {'tgt': '--cs', 'ext_out': ['.cs']},
+    'JAVA': {'tgt': '--java', 'ext_out': ['.java']},
+    'JVM': {'tgt': '--jvm', 'ext_out': ['.jar']},
+    'PYTHON': {'tgt': '--python', 'ext_out': ['.py']},
+    'HL': {'tgt': '--hl', 'ext_out': ['.hl']},
+    'HLC': {'tgt': '--hl', 'ext_out': ['.h', '.c']},
+}
+
+@conf
+def check_haxe_pkg(self, **kw):
+    self.find_program('haxelib')
+    libs = kw.get('libs')
+    if not libs or not (type(libs) == str or (type(libs) == list and 
all(isinstance(s, str) for s in libs))):
+        self.fatal('Specify correct libs value in ensure call')
+        return
+    fetch = kw.get('fetch')
+    if not fetch is None and not type(fetch) == bool:
+        self.fatal('Specify correct fetch value in ensure call')
+
+    libs = [libs] if type(libs) == str else libs
+    halt = False
+    for lib in libs:
+        try:
+            self.start_msg('Checking for library %s' % lib)
+            output = self.cmd_and_log(self.env.HAXELIB + ['list', lib])
+        except Errors.WafError:
+            self.end_msg(False)
+            self.fatal('Can\'t run haxelib list, ensuring halted')
+            return
+
+        if lib in output:
+            self.end_msg(lib in output)
+        else:
+            if not fetch:
+                self.end_msg(False)
+                halt = True
+                continue
+            try:
+                status = self.exec_command(self.env.HAXELIB + ['install', lib])
+                if status:
+                    self.end_msg(False)
+                    self.fatal('Can\'t get %s with haxelib, ensuring halted' % 
lib)
+                    return
+                else:
+                    self.end_msg('downloaded', color='YELLOW')
+            except Errors.WafError:
+                self.end_msg(False)
+                self.fatal('Can\'t run haxelib install, ensuring halted')
+                return
+        postfix = kw.get('uselib_store') or lib.upper()
+        self.env.append_unique('LIB_' + postfix, lib)
+
+    if halt:
+        self.fatal('Can\'t find libraries in haxelib list, ensuring halted')
+        return
 
 class haxe(Task.Task):
-       vars = ['HAXE', 'HAXE_VERSION', 'HAXEFLAGS']
-       ext_out = ['.hl', '.c', '.h']
+    vars = ['HAXE_VERSION', 'HAXE_FLAGS']
+    ext_in = ['.hx']
 
-       def run(self):
-               cmd = self.env.HAXE + self.env.HAXEFLAGS
-               return self.exec_command(cmd, stdout = open(os.devnull, 'w'))
+    def run(self):
+        cmd = self.env.HAXE + self.env.HAXE_FLAGS_DEFAULT + self.env.HAXE_FLAGS
+        return self.exec_command(cmd)
+
+for COMP in HAXE_COMPILERS:
+    # create runners for each compile target
+    type("haxe_" + COMP, (haxe,), {'ext_out': HAXE_COMPILERS[COMP]['ext_out']})
 
 @taskgen_method
-def init_haxe_task(self, node):
-       def addflags(flags):
-               self.env.append_value('HAXEFLAGS', flags)
-
-       if node.suffix() == '.hxml':
-               addflags(self.path.abspath() + '/' + node.name)
-       else:
-               addflags(['-main', node.name])
-       addflags(['-hl', self.path.get_bld().make_node(self.target).abspath()])
-       addflags(['-cp', self.path.abspath()])
-       addflags(['-D', 'resourcesPath=%s' % getattr(self, 'res', '')])
-       if hasattr(self, 'use'):
-               for dep in self.use:
-                       if self.env['LIB_' + dep]:
-                               for lib in self.env['LIB_' + dep]: 
addflags(['-lib', lib])
-
-@extension('.hx', '.hxml')
-def haxe_file(self, node):
-       if len(self.source) > 1:
-               self.bld.fatal('Use separate task generators for multiple 
files')
-
-       try:
-               haxetask = self.haxetask
-       except AttributeError:
-               haxetask = self.haxetask = self.create_task('haxe')
-               self.init_haxe_task(node)
-
-       haxetask.inputs.append(node)
-       haxetask.outputs.append(self.path.get_bld().make_node(self.target))
-
-@conf
-def find_haxe(self, min_version):
-       npx = self.env.NPX = self.find_program('npx')
-       self.env.LIX = npx + ['lix']
-       npx_haxe = self.env.HAXE = npx + ['haxe']
-       try:
-               output = self.cmd_and_log(npx_haxe + ['-version'])
-       except Errors.WafError:
-               haxe_version = None
-       else:
-               ver = re.search(r'\d+.\d+.\d+', output).group().split('.')
-               haxe_version = tuple([int(x) for x in ver])
-
-       self.msg('Checking for haxe version',
-                haxe_version, haxe_version and haxe_version >= min_version)
-       if npx_haxe and haxe_version < min_version:
-               self.fatal('haxe version %r is too old, need >= %r' % 
(haxe_version, min_version))
-
-       self.env.HAXE_VERSION = haxe_version
-       return npx_haxe
-
-@conf
-def check_haxe(self, min_version=(4,1,4)):
-       if self.env.HAXE_MINVER:
-               min_version = self.env.HAXE_MINVER
-       find_haxe(self, min_version)
+def init_haxe(self):
+    errmsg = '%s not found, specify correct value'
+    try:
+        compiler = HAXE_COMPILERS[self.compiler]
+        comp_tgt = compiler['tgt']
+        comp_mod = '/main.c' if self.compiler == 'HLC' else ''
+    except (AttributeError, KeyError):
+        self.bld.fatal(errmsg % 'COMPILER' + ': ' + ', 
'.join(HAXE_COMPILERS.keys()))
+        return
+
+    self.env.append_value(
+        'HAXE_FLAGS',
+        [comp_tgt, self.path.get_bld().make_node(self.target + 
comp_mod).abspath()])
+    if hasattr(self, 'use'):
+        if not (type(self.use) == str or type(self.use) == list):
+            self.bld.fatal(errmsg % 'USE')
+            return
+        self.use = [self.use] if type(self.use) == str else self.use
+
+        for dep in self.use:
+            if self.env['LIB_' + dep]:
+                for lib in self.env['LIB_' + dep]:
+                    self.env.append_value('HAXE_FLAGS', ['-lib', lib])
+
+    if hasattr(self, 'res'):
+        if not type(self.res) == str:
+            self.bld.fatal(errmsg % 'RES')
+            return
+        self.env.append_value('HAXE_FLAGS', ['-D', 'resourcesPath=%s' % 
self.res])
+
+@extension('.hx')
+def haxe_hook(self, node):
+    if len(self.source) > 1:
+        self.bld.fatal('Use separate task generators for multiple files')
+        return
+
+    src = node
+    tgt = self.path.get_bld().find_or_declare(self.target)
+
+    self.init_haxe()
+    self.create_task('haxe_' + self.compiler, src, tgt)
+
+@conf
+def check_haxe(self, mini=None, maxi=None):
+    self.start_msg('Checking for haxe version')
+    try:
+        curr = re.search(
+            r'(\d+.?)+',
+            self.cmd_and_log(self.env.HAXE + ['-version'])).group()
+    except Errors.WafError:
+        self.end_msg(False)
+        self.fatal('Can\'t get haxe version')
+        return
+
+    if mini and Utils.num2ver(curr) < Utils.num2ver(mini):
+        self.end_msg('wrong', color='RED')
+        self.fatal('%s is too old, need >= %s' % (curr, mini))
+        return
+    if maxi and Utils.num2ver(curr) > Utils.num2ver(maxi):
+        self.end_msg('wrong', color='RED')
+        self.fatal('%s is too new, need <= %s' % (curr, maxi))
+        return
+    self.end_msg(curr, color='GREEN')
+    self.env.HAXE_VERSION = curr
 
 def configure(self):
-       self.env.HAXEFLAGS = []
-       self.check_haxe()
-       self.add_os_flags('HAXEFLAGS', dup = False)
+    self.env.append_value(
+        'HAXE_FLAGS_DEFAULT',
+        ['-D', 'no-compilation', '-cp', self.path.abspath()])
+    Logs.warn('Default flags: %s' % ' '.join(self.env.HAXE_FLAGS_DEFAULT))
+    self.find_program('haxe')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tdb-1.4.9/third_party/waf/waflib/extras/msvs.py 
new/tdb-1.4.10/third_party/waf/waflib/extras/msvs.py
--- old/tdb-1.4.9/third_party/waf/waflib/extras/msvs.py 2022-04-12 
12:29:16.784438600 +0200
+++ new/tdb-1.4.10/third_party/waf/waflib/extras/msvs.py        2024-01-22 
09:56:34.590531000 +0100
@@ -583,7 +583,7 @@
                self.build_properties = ret
 
        def get_build_params(self, props):
-               opt = '--execsolution=%s' % 
self.ctx.get_solution_node().win32path()
+               opt = '--execsolution="%s"' % 
self.ctx.get_solution_node().win32path()
                return (self.get_waf(), opt)
 
        def get_build_command(self, props):
@@ -681,7 +681,7 @@
                """
                Override the default to add the target name
                """
-               opt = '--execsolution=%s' % 
self.ctx.get_solution_node().win32path()
+               opt = '--execsolution="%s"' % 
self.ctx.get_solution_node().win32path()
                if getattr(self, 'tg', None):
                        opt += " --targets=%s" % self.tg.name
                return (self.get_waf(), opt)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tdb-1.4.9/third_party/waf/waflib/extras/sphinx.py 
new/tdb-1.4.10/third_party/waf/waflib/extras/sphinx.py
--- old/tdb-1.4.9/third_party/waf/waflib/extras/sphinx.py       2023-01-19 
12:39:12.919113400 +0100
+++ new/tdb-1.4.10/third_party/waf/waflib/extras/sphinx.py      2024-01-22 
09:56:34.590531000 +0100
@@ -86,7 +86,7 @@
 
 class SphinxBuildingTask(Task.Task):
     color = 'BOLD'
-    run_str = '${SPHINX_BUILD} -M ${SPHINX_OUTPUT_FORMAT} ${SRC} ${TGT} 
${SPHINX_OPTIONS}'
+    run_str = '${SPHINX_BUILD} -M ${SPHINX_OUTPUT_FORMAT} ${SRC} ${TGT} -d 
${TGT[0].bld_dir()}/doctrees-${SPHINX_OUTPUT_FORMAT} ${SPHINX_OPTIONS}'
 
     def keyword(self):
         return 'Compiling (%s)' % self.env.SPHINX_OUTPUT_FORMAT
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tdb-1.4.9/wscript new/tdb-1.4.10/wscript
--- old/tdb-1.4.9/wscript       2023-07-20 12:48:16.091104000 +0200
+++ new/tdb-1.4.10/wscript      2024-01-29 17:18:40.731547000 +0100
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 APPNAME = 'tdb'
-VERSION = '1.4.9'
+VERSION = '1.4.10'
 
 import sys, os
 

Reply via email to