Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package waf for openSUSE:Factory checked in 
at 2024-04-08 17:37:37
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/waf (Old)
 and      /work/SRC/openSUSE:Factory/.waf.new.1905 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "waf"

Mon Apr  8 17:37:37 2024 rev:4 rq:1165662 version:2.0.26

Changes:
--------
--- /work/SRC/openSUSE:Factory/waf/waf.changes  2024-03-22 15:28:16.641830436 
+0100
+++ /work/SRC/openSUSE:Factory/.waf.new.1905/waf.changes        2024-04-08 
17:37:53.869842759 +0200
@@ -1,0 +2,6 @@
+Fri Apr  5 11:55:59 UTC 2024 - [email protected]
+
+- remove dependency on /usr/bin/python3 using
+  %python3_fix_shebang macro, [bsc#1212476]
+
+-------------------------------------------------------------------
@@ -4,0 +11,9 @@
+
+-------------------------------------------------------------------
+Mon Dec  4 05:48:02 UTC 2023 - Wang Jun <[email protected]>
+
+- Update to 2.0.26
+  * Improve "waf dist" - Support SOURCE_DATE_EPOCH
+  * Detect Qt6 #2355
+  * Haxe toolkit support #2352
+  * Updated the project's gpg key

Old:
----
  waf-waf-2.0.25.tar.bz2

New:
----
  waf-waf-2.0.26.tar.bz2

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

Other differences:
------------------
++++++ waf.spec ++++++
--- /var/tmp/diff_new_pack.eVkxZb/_old  2024-04-08 17:37:54.481865348 +0200
+++ /var/tmp/diff_new_pack.eVkxZb/_new  2024-04-08 17:37:54.485865496 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package waf
 #
-# 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
@@ -17,7 +17,7 @@
 
 
 Name:           waf
-Version:        2.0.25
+Version:        2.0.26
 Release:        0
 Summary:        The Waf build system
 License:        BSD-3-Clause
@@ -55,6 +55,7 @@
 install -m 755 -D waf.wrapper %{buildroot}%{_bindir}/waf
 install -m 755 -d %{buildroot}%{_datadir}/waf/
 cp -pR ./zip/waflib %{buildroot}%{_datadir}/waf/
+%python3_fix_shebang
 
 %check
 export PYTHONDONTWRITEBYTECODE=1

++++++ waf-waf-2.0.25.tar.bz2 -> waf-waf-2.0.26.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/waf-waf-2.0.25/ChangeLog new/waf-waf-2.0.26/ChangeLog
--- old/waf-waf-2.0.25/ChangeLog        2023-01-01 14:21:19.000000000 +0100
+++ new/waf-waf-2.0.26/ChangeLog        2023-08-12 03:20:31.000000000 +0200
@@ -1,3 +1,10 @@
+NEW IN WAF 2.0.26
+-----------------
+* Improve "waf dist" - Support SOURCE_DATE_EPOCH
+* Detect Qt6 #2355
+* Haxe toolkit support #2352
+* Updated the project's gpg key
+
 NEW IN WAF 2.0.25
 -----------------
 * Fix invalid characters returned by find_program #2397
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/waf-waf-2.0.25/README.md new/waf-waf-2.0.26/README.md
--- old/waf-waf-2.0.25/README.md        2023-01-01 14:21:19.000000000 +0100
+++ new/waf-waf-2.0.26/README.md        2023-08-12 03:20:31.000000000 +0200
@@ -11,23 +11,17 @@
   * *Documentation*: the application is based on a robust model documented in 
[The Waf Book](https://waf.io/book/) and in the [API 
docs](https://waf.io/apidocs/)
   * *Python compatibility*: cPython 2.5 to 3.x, Jython 2.5, IronPython, and 
Pypy
 
-Waf is used in particular by innovative companies such as [Avalanche 
Studios](http://www.avalanchestudios.se) and by open-source projects such as 
[RTEMS](https://www.rtems.org/). Learn more about Waf by reading [The Waf 
Book](https://waf.io/book/).
+Learn more about Waf by reading [The Waf Book](https://waf.io/book/). For 
researchers and build system writers, Waf also provides a framework and 
examples for creating [custom build 
systems](https://gitlab.com/ita1024/waf/tree/master/build_system_kit) and 
[package distribution 
systems](https://gitlab.com/ita1024/waf/blob/master/playground/distnet/README.rst).
 
-For researchers and build system writers, Waf also provides a framework for 
creating [custom build 
systems](https://gitlab.com/ita1024/waf/tree/master/build_system_kit) and 
[package distribution 
systems](https://gitlab.com/ita1024/waf/blob/master/playground/distnet/README.rst).
-
-Download the project from our page on [waf.io](https://waf.io/) or from a 
mirror on [freehackers.org](http://www.freehackers.org/~tnagy/release/), 
consult the [manual](https://waf.io/book/), the [API 
documentation](https://waf.io/apidocs/) and the 
[showcases](https://gitlab.com/ita1024/waf/tree/master/demos) and 
[experiments](https://gitlab.com/ita1024/waf/tree/master/playground).
+Download the project from our page on [waf.io](https://waf.io/), consult the 
[manual](https://waf.io/book/), the [API 
documentation](https://waf.io/apidocs/) and the 
[showcases](https://gitlab.com/ita1024/waf/tree/master/demos) and 
[experiments](https://gitlab.com/ita1024/waf/tree/master/playground).
 
 ## HOW TO CREATE THE WAF SCRIPT
 
-Python >= 2.6 is required to generate the waf script, and the resulting file 
can then run on Python 2.5.
-Just run:
+Python >= 2.7 is required to generate the waf script:
+
 ```sh
 $ python ./waf-light configure build
 ```
-Or, if several python versions are installed:
-```sh
-$ python3 ./waf-light configure build
-```
 
 ## CUSTOMIZATION
 
Binary files old/waf-waf-2.0.25/docs/sphinx/_images/waf-64x64.png and 
new/waf-waf-2.0.26/docs/sphinx/_images/waf-64x64.png differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/waf-waf-2.0.25/docs/sphinx/conf.py 
new/waf-waf-2.0.26/docs/sphinx/conf.py
--- old/waf-waf-2.0.25/docs/sphinx/conf.py      2023-01-01 14:21:19.000000000 
+0100
+++ new/waf-waf-2.0.26/docs/sphinx/conf.py      2023-08-12 03:20:31.000000000 
+0200
@@ -357,7 +357,7 @@
 
 # General information about the project.
 project = u'Waf'
-copyright = u'2005-2023, Thomas Nagy'
+copyright = u'2005-2023 waf.io'
 
 # The version info for the project you're documenting, acts as replacement for
 # |version| and |release|, also used in various other places throughout the
@@ -505,7 +505,7 @@
 # (source start file, target name, title, author, documentclass 
[howto/manual]).
 latex_documents = [
   ('index', 'waf.tex', u'waf Documentation',
-   u'Thomas Nagy', 'manual'),
+   u'waf.io', 'manual'),
 ]
 
 # The name of an image file (relative to this directory) to place at the top of
@@ -538,7 +538,7 @@
 # (source start file, name, description, authors, manual section).
 man_pages = [
     ('index', 'waf', u'waf Documentation',
-     [u'Thomas Nagy'], 1)
+     [u'waf.io'], 1)
 ]
 
 #autodoc_default_flags = ['members', 'no-undoc-members', 'show-inheritance']
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/waf-waf-2.0.25/playground/haxe/bytecode/.haxerc 
new/waf-waf-2.0.26/playground/haxe/bytecode/.haxerc
--- old/waf-waf-2.0.25/playground/haxe/bytecode/.haxerc 2023-01-01 
14:21:19.000000000 +0100
+++ new/waf-waf-2.0.26/playground/haxe/bytecode/.haxerc 1970-01-01 
01:00:00.000000000 +0100
@@ -1,4 +0,0 @@
-{
-  "version": "4.1.4",
-  "resolveLibs": "scoped"
-}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/waf-waf-2.0.25/playground/haxe/bytecode/package.json 
new/waf-waf-2.0.26/playground/haxe/bytecode/package.json
--- old/waf-waf-2.0.25/playground/haxe/bytecode/package.json    2023-01-01 
14:21:19.000000000 +0100
+++ new/waf-waf-2.0.26/playground/haxe/bytecode/package.json    1970-01-01 
01:00:00.000000000 +0100
@@ -1,18 +0,0 @@
-{
-  "name": "Haxe",
-  "version": "1.0.0",
-  "description": "",
-  "main": "index.js",
-  "directories": {
-    "lib": "lib"
-  },
-  "scripts": {
-    "postinstall": "lix download"
-  },
-  "keywords": [],
-  "author": "",
-  "license": "ISC",
-  "dependencies": {
-    "lix": "^15.10.1"
-  }
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/waf-waf-2.0.25/playground/haxe/bytecode/src/main.hxml 
new/waf-waf-2.0.26/playground/haxe/bytecode/src/main.hxml
--- old/waf-waf-2.0.25/playground/haxe/bytecode/src/main.hxml   2023-01-01 
14:21:19.000000000 +0100
+++ new/waf-waf-2.0.26/playground/haxe/bytecode/src/main.hxml   1970-01-01 
01:00:00.000000000 +0100
@@ -1,2 +0,0 @@
--dce full
--main Main.hx
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/waf-waf-2.0.25/playground/haxe/bytecode/src/wscript 
new/waf-waf-2.0.26/playground/haxe/bytecode/src/wscript
--- old/waf-waf-2.0.25/playground/haxe/bytecode/src/wscript     2023-01-01 
14:21:19.000000000 +0100
+++ new/waf-waf-2.0.26/playground/haxe/bytecode/src/wscript     2023-08-12 
03:20:31.000000000 +0200
@@ -1,7 +1,15 @@
 def configure(ctx):
     ctx.load('haxe')
+    ctx.check_haxe(mini='4.0.0', maxi='4.2.5')
+    ctx.check_haxe_pkg(
+        libs=['hashlink'],
+        uselib_store='HLR',
+        fetch=False)
 
 def build(ctx):
-    ctx.haxe(
-        source = 'main.hxml',
-        target = 'main.hl')
+    ctx.env.HAXE_FLAGS = ['-dce', 'full', '-main', 'Main']
+    ctx(
+        compiler = 'HL',
+        source = 'Main.hx',
+        target = 'out.hl',
+        use = ['HLR'])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/waf-waf-2.0.25/playground/haxe/bytecode/wscript 
new/waf-waf-2.0.26/playground/haxe/bytecode/wscript
--- old/waf-waf-2.0.25/playground/haxe/bytecode/wscript 2023-01-01 
14:21:19.000000000 +0100
+++ new/waf-waf-2.0.26/playground/haxe/bytecode/wscript 2023-08-12 
03:20:31.000000000 +0200
@@ -1,5 +1,5 @@
 top = '.'
-out = 'bin/waf'
+out = 'build'
 
 def configure(ctx):
     ctx.recurse('src')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/waf-waf-2.0.25/playground/haxe/executable/.haxerc 
new/waf-waf-2.0.26/playground/haxe/executable/.haxerc
--- old/waf-waf-2.0.25/playground/haxe/executable/.haxerc       2023-01-01 
14:21:19.000000000 +0100
+++ new/waf-waf-2.0.26/playground/haxe/executable/.haxerc       1970-01-01 
01:00:00.000000000 +0100
@@ -1,4 +0,0 @@
-{
-  "version": "4.1.4",
-  "resolveLibs": "scoped"
-}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/waf-waf-2.0.25/playground/haxe/executable/README.md 
new/waf-waf-2.0.26/playground/haxe/executable/README.md
--- old/waf-waf-2.0.25/playground/haxe/executable/README.md     1970-01-01 
01:00:00.000000000 +0100
+++ new/waf-waf-2.0.26/playground/haxe/executable/README.md     2023-08-12 
03:20:31.000000000 +0200
@@ -0,0 +1,19 @@
+# Using `HLC` source generation with `clang`
+
+## Environment
+In this particular case, you need to have a distribution of `hashlink` in your 
system. After installing, you need to perform additional steps to pass required 
files for binary generation (in this case - to `clang`):
+
+- either add hashlink's `lib` folder to `ctx.env.LIBPATH_HL`
+- or replace `lib` folder with a symlink to hashlink's `lib` folder
+- either add hashlink's `include` folder to `ctx.env.INCLUDES_HL`
+- or replace `include` folder with a symlink to hashlink's `include` folder
+
+## Targets
+In this particular case, generated `.c` files are placed in separate `bin` 
subdirectory. This enhances your build transparency and allows you to add 
desired checks or perform additional operations with generated `.c` sources if 
needed, while keeping things in parallel. Keep this in mind if you're planning 
to extend your build layout with additional Haxe targets
+
+## Running assembled binaries
+Assuming that you have a `hashlink` distribution and all relevant system paths 
are adjusted, you could easily run your binary and see resulting output of 
`Main.hx:3: hello`. Keep in mind that if you're using an official `hashlink` 
distribution, it doesn't come with static libs for linking - this means that 
your produced binary requires paths to `libhl.dll` (or `.so`/`.dylib` - depends 
on your system). Of course, there may be a use case when you're building 
`hashlink` from sources or using it as a portable distribution - in these 
cases, you could run your binary while pointing paths to your dynamic libraries 
with adding correct paths (`$PWD/lib/` for example) to:
+
+- `PATH` on windows
+- `LD_LIBRARY_PATH` on linux
+- `DYLD_LIBRARY_PATH` on macOS
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/waf-waf-2.0.25/playground/haxe/executable/bin/wscript 
new/waf-waf-2.0.26/playground/haxe/executable/bin/wscript
--- old/waf-waf-2.0.25/playground/haxe/executable/bin/wscript   2023-01-01 
14:21:19.000000000 +0100
+++ new/waf-waf-2.0.26/playground/haxe/executable/bin/wscript   2023-08-12 
03:20:31.000000000 +0200
@@ -1,43 +1,14 @@
-from waflib.TaskGen import feature
-
 def configure(ctx):
-    ctx.load('clang_cl')
-    ctx.env.CFLAGS.extend(['/EHsc', '/O12', '/TC', '/GL', '/w', '/U __llvm__'])
-    for lib in ['msvcrt']:
-        ctx.check(
-            compiler='c',
-            lib=lib,
-            uselib_store='SYSTEM')
-    for lib in ['libhl']:
-        ctx.check(
-            compiler='c',
-            lib=lib,
-            use='HL',
-            uselib_store='HL')
+    ctx.load('clang')
+    ctx.check(
+        compiler='c',
+        lib='hl',
+        use='HL',
+        uselib_store='HL')
 
 def build(ctx):
-    ctx.env.LINKFLAGS.extend(['/NODEFAULTLIB:libcmt'])
     ctx.program(
-        source = ['waf/src/main.c'],
+        source = [ctx.bldnode.make_node('src/main/main.c')],
         includes = [ctx.env.ROOT_INCLUDE_DIR],
         target = 'app',
-        use = ['SYSTEM', 'HL'])
-
-@feature('cxxprogram', 'cprogram')
-def call_me_static(self):
-    attr_name = 'source'
-    attr = getattr(self, attr_name, [])
-    if len(attr):
-        setattr(self, attr_name, [])
-        for x in self.to_list(attr):
-            node = self.path.make_node(x)
-            tg = self.bld.get_tgen_by_name(node.name)
-            if not tg:
-                self.bld.fatal('Could not find a task generator by the name 
%r' % x)
-            tg.post()
-            for tsk in tg.tasks:
-                for out in tsk.outputs:
-                    if out.name.endswith('.c'):
-                        self.create_compiled_task('c', out)
-        if not self.compiled_tasks:
-            self.fatal('Could not find a source file for for %r' % self.name)
+        use = ['HL'])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/waf-waf-2.0.25/playground/haxe/executable/haxe_libraries/readme.txt 
new/waf-waf-2.0.26/playground/haxe/executable/haxe_libraries/readme.txt
--- old/waf-waf-2.0.25/playground/haxe/executable/haxe_libraries/readme.txt     
2023-01-01 14:21:19.000000000 +0100
+++ new/waf-waf-2.0.26/playground/haxe/executable/haxe_libraries/readme.txt     
1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-this directory is served by lix automatically and stores versions of used haxe 
libraries
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/waf-waf-2.0.25/playground/haxe/executable/include/readme.txt 
new/waf-waf-2.0.26/playground/haxe/executable/include/readme.txt
--- old/waf-waf-2.0.25/playground/haxe/executable/include/readme.txt    
1970-01-01 01:00:00.000000000 +0100
+++ new/waf-waf-2.0.26/playground/haxe/executable/include/readme.txt    
2023-08-12 03:20:31.000000000 +0200
@@ -0,0 +1 @@
+place hashlink includes here (e.g. hlc.h) or replace this directory with 
symlink if using package manager - dedicated directory is used when native 
hashlink includes are used
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/waf-waf-2.0.25/playground/haxe/executable/lib/readme.txt 
new/waf-waf-2.0.26/playground/haxe/executable/lib/readme.txt
--- old/waf-waf-2.0.25/playground/haxe/executable/lib/readme.txt        
2023-01-01 14:21:19.000000000 +0100
+++ new/waf-waf-2.0.26/playground/haxe/executable/lib/readme.txt        
2023-08-12 03:20:31.000000000 +0200
@@ -1 +1 @@
-place hashlink c libraries here (e.g. libhl.lib) - dedicated directory is used 
for a case when hashlink libs are statically linked
+place hashlink libraries here (e.g. libhl.so) or replace this directory with 
symlink if using package manager - dedicated directory is used when native 
hashlink libs are linked
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/waf-waf-2.0.25/playground/haxe/executable/package.json 
new/waf-waf-2.0.26/playground/haxe/executable/package.json
--- old/waf-waf-2.0.25/playground/haxe/executable/package.json  2023-01-01 
14:21:19.000000000 +0100
+++ new/waf-waf-2.0.26/playground/haxe/executable/package.json  1970-01-01 
01:00:00.000000000 +0100
@@ -1,18 +0,0 @@
-{
-  "name": "Haxe",
-  "version": "1.0.0",
-  "description": "",
-  "main": "index.js",
-  "directories": {
-    "lib": "lib"
-  },
-  "scripts": {
-    "postinstall": "lix download"
-  },
-  "keywords": [],
-  "author": "",
-  "license": "ISC",
-  "dependencies": {
-    "lix": "^15.10.1"
-  }
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/waf-waf-2.0.25/playground/haxe/executable/src/main.hxml 
new/waf-waf-2.0.26/playground/haxe/executable/src/main.hxml
--- old/waf-waf-2.0.25/playground/haxe/executable/src/main.hxml 2023-01-01 
14:21:19.000000000 +0100
+++ new/waf-waf-2.0.26/playground/haxe/executable/src/main.hxml 1970-01-01 
01:00:00.000000000 +0100
@@ -1,2 +0,0 @@
--dce full
--main Main.hx
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/waf-waf-2.0.25/playground/haxe/executable/src/wscript 
new/waf-waf-2.0.26/playground/haxe/executable/src/wscript
--- old/waf-waf-2.0.25/playground/haxe/executable/src/wscript   2023-01-01 
14:21:19.000000000 +0100
+++ new/waf-waf-2.0.26/playground/haxe/executable/src/wscript   2023-08-12 
03:20:31.000000000 +0200
@@ -1,13 +1,15 @@
 def configure(ctx):
     ctx.load('haxe')
-    ctx.ensure_lix_pkg(
-        compiler='hx',
+    ctx.check_haxe(mini='4.0.0', maxi='4.2.5')
+    ctx.check_haxe_pkg(
         libs=['hashlink'],
         uselib_store='HLR')
 
 def build(ctx):
-    ctx.haxe(
-        source = 'main.hxml',
+    ctx.env.HAXE_FLAGS = ['-dce', 'full', '-main', 'Main']
+    ctx(
+        compiler = 'HLC',
+        source = 'Main.hx',
         res = ctx.env.ROOT_RES_DIR,
-        target = 'main.c',
+        target = 'main',
         use = ['HLR'])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/waf-waf-2.0.25/playground/haxe/executable/wscript 
new/waf-waf-2.0.26/playground/haxe/executable/wscript
--- old/waf-waf-2.0.25/playground/haxe/executable/wscript       2023-01-01 
14:21:19.000000000 +0100
+++ new/waf-waf-2.0.26/playground/haxe/executable/wscript       2023-08-12 
03:20:31.000000000 +0200
@@ -2,11 +2,11 @@
 out = 'bin/waf'
 
 def configure(ctx):
-    ctx.env.ROOT_INCLUDE_DIR = ctx.path.get_bld().make_node('src').abspath()
+    ctx.env.ROOT_INCLUDE_DIR = 
ctx.path.get_bld().make_node('src').make_node('main').abspath()
     ctx.env.ROOT_RES_DIR = ctx.path.make_node('res').abspath()
     ctx.env.LIBPATH_HAXE = ctx.path.make_node('haxe_libraries').abspath()
     ctx.env.LIBPATH_HL = ctx.path.make_node('lib').abspath()
-    ctx.env.INCLUDES_HL = ['%hashlink%/hl-1.11.0-win/include']
+    ctx.env.INCLUDES_HL = ctx.path.make_node('include').abspath()
     ctx.recurse('src')
     ctx.recurse('bin')
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/waf-waf-2.0.25/utils/pubkey.asc 
new/waf-waf-2.0.26/utils/pubkey.asc
--- old/waf-waf-2.0.25/utils/pubkey.asc 2023-01-01 14:21:19.000000000 +0100
+++ new/waf-waf-2.0.26/utils/pubkey.asc 2023-08-12 03:20:31.000000000 +0200
@@ -1,51 +1,51 @@
 -----BEGIN PGP PUBLIC KEY BLOCK-----
 
-mQINBF+oSEgBEACtvXmcnUw2UqmCymZV2Ceie2V3mJDhx3uFnUAAkZp1is1Fv38l
-vcyO+umT2S6E3ZMMon4WS1kuzQw2Eplzf43FXqP5IU1D4sR/SlUafcGQClCBGjsU
-1V1dtyiFYQVKQw2ouPh/1i7h2aPkXG9qj3uk5QgFM1UxsxZuaG9TKmDZmC7gARaR
-+21GX7M3vHCHy33GBENEJ5Pbb8yZDeTZRlypyZaFDJCqibqh0qB+nvIemyDQKp5e
-yg0STFWmBZLDuKw3JtN6ykADsuWLWpXqxUCwD2WZboCNRqfircMTNoCmNYoOyiFf
-h04Dy4ao0VPDKJlpMJyZODqHQx1mCoKXcLkVaEomMbimWeS+JKjNCtfJTKOI+hBF
-H/0VyDlBju6BCkYXwgVDfQnnXWfXKYVOK4tAHeOkavfOFnLWee90VbSKhsPP3gXc
-AcO+0FUKz7UH77PpFrhXrxZE+jY4CzfUqnLXll6Jlze8oqeJlxUxQptRyJTMCsq5
-twEySXXPU+4lUbbb4VDlGH0OAdG3k2DchHmPIhJn90sn+7PBC7LVaaCt8VM4n88M
-VF311wgW9pUu+fDa7CKn2KDPDOpe24HuGjhY6WesIL4K0squnT2Bfx/J7iu1Gp7x
-qjZGDg5da9VpMP4ZOdmrPbPK3bEZ8hPei3m7Ioyx2x2xJlKJa1BYgFC1xQARAQAB
-tBpUaG9tYXMgTmFneSA8dG5hZ3lAd2FmLmlvPokCTAQTAQoANhYhBAs5crLZ4y6r
-Qj0uDyK+DGL/v6VIBQJfqEhIAhsDBQkJZgGAAwsJCAUVCgkICwIeAQIXgAAKCRAi
-vgxi/7+lSEpdD/9IbBZLYIvyeKDQoOZlnvyP0tpusfdPaqaCfOdgkklFiNDmxoCp
-TATTlUfIS1Mnm8rULLVe1QmM5NZx40Y1qfs+j1mJK1awJXMpSFvIttlXjjNGwdbO
-2dp536kP7X9CRq/9hzmSalwsSQHfpkBWTRdqennyQJHCMM+YhXFQhrb9qm8awePV
-ZonCuf6o9e08im78rWSFWPi9gpOmRSvcoDY0kv7h8R5WlEjRuzrNDMePs42seoz9
-c70ITgM1fG1efIN78XMKSmdrXrf7rMRekfZ9rqxNbvgslYUohBE8jWBwON96YlGh
-+qXLr3vgfjghTjHHMAMxSkdywAbps1JKB+mHDIHv4RGiBFXTJ6Qob8+O0dyrTY+k
-dfswq1e1vZzABfj8JAekQtWv4syYdm2+fEC9oi4nqxXb1unLR8TthJuceUQwDdIG
-pk6lqIkWqQftVu3FBbEGkwsCW3fDwqoJAhdjVxORgAe/JL0r0abpq+vm0+vN+lkL
-ZdOWcSsnGxmpIzfuYRFo7W1qSz8UEfUKdpo5q/hsmCVHSR2aIsRVM23XByPtw6YU
-CczlQ3Zz3YfJpknB1j+9uEd9wTTl7OC+xPwLBNzOa1lCa1hrPtnCbIFwtv49iVYd
-sZf6RWZ4CQuV2MfdFWxpUh0KUfSuarv+u4bs8t0Me5RJlwcv7AnjeBH51bkCDQRf
-qEhIARAAxcqbbAqivd1SvzqkWNu8RSTFtaofRbVFhyr1yIhXDA6rGuORj/NQRp6n
-A5iPqBBvdpYR83xX8F2Bkv+33nIscxkAInuJVvAJ017LnYSDlikoUuwCrsjrS80k
-haTO47i/VDbA75MlXqdejA9QKDSHu2S3+szjeU1/ACjWKdqHAN9I0LV4ATnybXEZ
-178CxT3CTBbdkdAUV2Gv683awQfyBP0p+24MNjK+b+bAlyLXpN3CR59coyV8zH42
-5ReqXCeSoAhyvA5qa4KwZQ+zO2CVqb66LzuNjMZY536mPFTrUTXJRuPl+WmN0OjZ
-FCbB8dBm7mnuEtgnUtZYK0UFyiHEG8jr4qbGlgbyJOcQYmQ/frba+eFL6LgXclNM
-t4rOpD7KkM20zSU48aIyk+fANIN/MFAV1usJMri7DF4bmWgwBTm3T5xR0CELTlY7
-sE8VRssL5exMBSC0CbsTRmM4/qmU5NPRYS40BPVL8T0sYVnAzRUcF64bjjptMikN
-DJkdASrzM23m/+m5N1rn5CfYDlwyN4cxlUmRQBQy25lkNPZZJKZfkUAbWYNfs9v3
-Jvp2zyWr4hO874dRU82ovfvQzCCIbtpy6SxhSmQ2E338c4GpAuv3Pp7Dr/lTWSCY
-MUbNwd99SlGJ/FDqvbF+e0U9JZ2HA+0/NWS6pFZnR8ZeRarAr3EAEQEAAYkCPAQY
-AQoAJhYhBAs5crLZ4y6rQj0uDyK+DGL/v6VIBQJfqEhIAhsMBQkJZgGAAAoJECK+
-DGL/v6VIzwIP/A4n5MFiB12OSokOdb5qtv66T9AwAg6G9LkZQExUtt2CLt+1BuxJ
-f1V2kW/xFZ/EJi0ZiDmmf0npY3YTclYxcBPiNCDwNSL11p6wq3ACg/muhbz//NLL
-tVKDEYf1DgYEqR0Ya9N8WtraI6MAeHPEYCZDBl2M7fm+r0pyErhKHnsXsMdtdV2k
-1ZudjFHLeAGrHMkAm0IiyYUFY/Ww8KgVJex+m1nNpatMJhjQz+aAVv3EyVpyyaHc
-684+t89vdnmWfdHQbQysyvNyWegtoalE66kUtk4cpwc8+voMuKl4y1U8jvZIR3Hh
-XKqKKfY23V1Tr9etM7jnYLfChUkOK21xBk0I345cuy/XfZa1FED7Qq5Sia04zlFe
-Mv4378hVt5VSSmr5mCVdVkopu1ctFjB3ZXD0TAUi8hmTks+laXFKpgLETD1iMQp2
-Inc2AWDX1ASIwvZxt/NqWika80ennnPUJY/hMVcozwQv1Z7PlfvhWxTXWGCl88Xw
-ojLOD+TjNspMv/yXCaadAg4PrFJKXB6kX77rd0XCD9lOPATdMA60mvfHdCZyCHPp
-B/wA41BB34+AC+I5TbMGM/mgQGpQ6nkCAU7pyxJ9Q+Egz2OSQibNAbcGrO5YZ6ko
-cy15xEk3XzLqVLTA+euLC3z8ql6DFkBxt6Ta0pEUaYKRUAQYFADhd46E
-=7TXb
+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
+=zzf7
 -----END PGP PUBLIC KEY BLOCK-----
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/waf-waf-2.0.25/utils/waf.bat 
new/waf-waf-2.0.26/utils/waf.bat
--- old/waf-waf-2.0.25/utils/waf.bat    2023-01-01 14:21:19.000000000 +0100
+++ new/waf-waf-2.0.26/utils/waf.bat    2023-08-12 03:20:31.000000000 +0200
@@ -5,17 +5,13 @@
 Setlocal EnableDelayedExpansion
 
 rem Check Windows Version
-set TOKEN=tokens=3*
+set TOKEN=tokens=2*
 ver | findstr /i "5\.0\." > nul
 if %ERRORLEVEL% EQU 0 SET TOKEN=tokens=3*
 ver | findstr /i "5\.1\." > nul
 if %ERRORLEVEL% EQU 0 SET TOKEN=tokens=3*
 ver | findstr /i "5\.2\." > nul
 if %ERRORLEVEL% EQU 0 SET TOKEN=tokens=3*
-ver | findstr /i "6\.0\." > nul
-if %ERRORLEVEL% EQU 0 SET TOKEN=tokens=2*
-ver | findstr /i "6\.1\." > nul
-if %ERRORLEVEL% EQU 0 SET TOKEN=tokens=2*
 
 rem Start calculating PYTHON and PYTHON_DIR
 set PYTHON=
@@ -26,7 +22,7 @@
 set PYTHON_DIR_OK=FALSE
 set REGPATH=
 
-for %%i in (3.9 3.8 3.7 3.6 3.5 3.4 3.3 3.2 3.1 3.0 2.7 2.6 2.5) do (
+for %%i in (3.12 3.11 3.10 3.9 3.8 3.7 3.6 3.5 3.4 3.3 3.2 3.1 3.0 2.7 2.6 
2.5) do (
 for %%j in (HKCU HKLM) do (
 for %%k in (SOFTWARE\Wow6432Node SOFTWARE) do (
 for %%l in (Python\PythonCore IronPython) do (
@@ -77,7 +73,7 @@
 
 if "%PYTHON_DIR%" == "" (
 rem @echo No Python dir
-set PYTHON=python
+set PYTHON=py
 goto running
 )
 
@@ -85,7 +81,7 @@
 
 if "%PYTHON%" == "" (
 rem @echo No Python
-set PYTHON=python
+set PYTHON=py
 goto running
 )
 
@@ -95,4 +91,4 @@
 
 "%PYTHON%" -x "%~dp0waf" %*
 Endlocal
-exit /b %ERRORLEVEL%
\ No newline at end of file
+exit /b %ERRORLEVEL%
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/waf-waf-2.0.25/waf-light new/waf-waf-2.0.26/waf-light
--- old/waf-waf-2.0.25/waf-light        2023-01-01 14:21:19.000000000 +0100
+++ new/waf-waf-2.0.26/waf-light        2023-08-12 03:20:31.000000000 +0200
@@ -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/waf-waf-2.0.25/waflib/Context.py 
new/waf-waf-2.0.26/waflib/Context.py
--- old/waf-waf-2.0.25/waflib/Context.py        2023-01-01 14:21:19.000000000 
+0100
+++ new/waf-waf-2.0.26/waflib/Context.py        2023-08-12 03:20:31.000000000 
+0200
@@ -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/waf-waf-2.0.25/waflib/Scripting.py 
new/waf-waf-2.0.26/waflib/Scripting.py
--- old/waf-waf-2.0.25/waflib/Scripting.py      2023-01-01 14:21:19.000000000 
+0100
+++ new/waf-waf-2.0.26/waflib/Scripting.py      2023-08-12 03:20:31.000000000 
+0200
@@ -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/waf-waf-2.0.25/waflib/Tools/qt5.py 
new/waf-waf-2.0.26/waflib/Tools/qt5.py
--- old/waf-waf-2.0.25/waflib/Tools/qt5.py      2023-01-01 14:21:19.000000000 
+0100
+++ new/waf-waf-2.0.26/waflib/Tools/qt5.py      2023-08-12 03:20:31.000000000 
+0200
@@ -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/waf-waf-2.0.25/waflib/extras/distnet.py 
new/waf-waf-2.0.26/waflib/extras/distnet.py
--- old/waf-waf-2.0.25/waflib/extras/distnet.py 2023-01-01 14:21:19.000000000 
+0100
+++ new/waf-waf-2.0.26/waflib/extras/distnet.py 2023-08-12 03:20:31.000000000 
+0200
@@ -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/waf-waf-2.0.25/waflib/extras/haxe.py 
new/waf-waf-2.0.26/waflib/extras/haxe.py
--- old/waf-waf-2.0.25/waflib/extras/haxe.py    2023-01-01 14:21:19.000000000 
+0100
+++ new/waf-waf-2.0.26/waflib/extras/haxe.py    2023-08-12 03:20:31.000000000 
+0200
@@ -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/waf-waf-2.0.25/waflib/extras/msvs.py 
new/waf-waf-2.0.26/waflib/extras/msvs.py
--- old/waf-waf-2.0.25/waflib/extras/msvs.py    2023-01-01 14:21:19.000000000 
+0100
+++ new/waf-waf-2.0.26/waflib/extras/msvs.py    2023-08-12 03:20:31.000000000 
+0200
@@ -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/waf-waf-2.0.25/waflib/extras/sphinx.py 
new/waf-waf-2.0.26/waflib/extras/sphinx.py
--- old/waf-waf-2.0.25/waflib/extras/sphinx.py  2023-01-01 14:21:19.000000000 
+0100
+++ new/waf-waf-2.0.26/waflib/extras/sphinx.py  2023-08-12 03:20:31.000000000 
+0200
@@ -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/waf-waf-2.0.25/wscript new/waf-waf-2.0.26/wscript
--- old/waf-waf-2.0.25/wscript  2023-01-01 14:21:19.000000000 +0100
+++ new/waf-waf-2.0.26/wscript  2023-08-12 03:20:31.000000000 +0200
@@ -11,7 +11,7 @@
 
 from __future__ import with_statement
 
-VERSION="2.0.25"
+VERSION="2.0.26"
 APPNAME='waf'
 REVISION=''
 
@@ -293,6 +293,8 @@
                        tarinfo = tarfile.TarInfo(x)
                tarinfo.uid   = tarinfo.gid   = 0
                tarinfo.uname = tarinfo.gname = 'root'
+               if os.environ.get('SOURCE_DATE_EPOCH'):
+                       tarinfo.mtime = int(os.environ.get('SOURCE_DATE_EPOCH'))
                (code, size, cnt) = sfilter(x)
                tarinfo.size = size
 

Reply via email to