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----- -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 -=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
